@rebasepro/admin 0.0.1-canary.4f204c2

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 (780) hide show
  1. package/LICENSE +6 -0
  2. package/dist/CollectionEditorDialog-B2M9lCyL.js +4720 -0
  3. package/dist/CollectionEditorDialog-B2M9lCyL.js.map +1 -0
  4. package/dist/CollectionsStudioView-WG6soyfs.js +218 -0
  5. package/dist/CollectionsStudioView-WG6soyfs.js.map +1 -0
  6. package/dist/ContentHomePage-CDF_a6Lp.js +1786 -0
  7. package/dist/ContentHomePage-CDF_a6Lp.js.map +1 -0
  8. package/dist/ExportCollectionAction-Dc0VOWMN.js +439 -0
  9. package/dist/ExportCollectionAction-Dc0VOWMN.js.map +1 -0
  10. package/dist/ImportCollectionAction-DpCagAOy.js +686 -0
  11. package/dist/ImportCollectionAction-DpCagAOy.js.map +1 -0
  12. package/dist/PropertyEditView-DS67DxoT.js +8138 -0
  13. package/dist/PropertyEditView-DS67DxoT.js.map +1 -0
  14. package/dist/RoleChip-QtUFXeTp.js +67 -0
  15. package/dist/RoleChip-QtUFXeTp.js.map +1 -0
  16. package/dist/RolesView-CIuYBimF.js +424 -0
  17. package/dist/RolesView-CIuYBimF.js.map +1 -0
  18. package/dist/UsersView-B5zelXnH.js +493 -0
  19. package/dist/UsersView-B5zelXnH.js.map +1 -0
  20. package/dist/collection_editor/CollectionEditorDialogsContext.d.ts +19 -0
  21. package/dist/collection_editor/ConfigControllerProvider.d.ts +45 -0
  22. package/dist/collection_editor/_cms_internals.d.ts +29 -0
  23. package/dist/collection_editor/api/generateCollectionApi.d.ts +77 -0
  24. package/dist/collection_editor/api/index.d.ts +1 -0
  25. package/dist/collection_editor/index.d.ts +16 -0
  26. package/dist/collection_editor/pgColumnToProperty.d.ts +6 -0
  27. package/dist/collection_editor/types/collection_editor_controller.d.ts +56 -0
  28. package/dist/collection_editor/types/collection_inference.d.ts +10 -0
  29. package/dist/collection_editor/types/config_controller.d.ts +91 -0
  30. package/dist/collection_editor/types/config_permissions.d.ts +19 -0
  31. package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +11 -0
  32. package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +10 -0
  33. package/dist/collection_editor/ui/EditorCollectionAction.d.ts +2 -0
  34. package/dist/collection_editor/ui/EditorCollectionActionStart.d.ts +2 -0
  35. package/dist/collection_editor/ui/EditorEntityAction.d.ts +2 -0
  36. package/dist/collection_editor/ui/HomePageEditorCollectionAction.d.ts +2 -0
  37. package/dist/collection_editor/ui/KanbanSetupAction.d.ts +10 -0
  38. package/dist/collection_editor/ui/MissingReferenceWidget.d.ts +3 -0
  39. package/dist/collection_editor/ui/NewCollectionButton.d.ts +1 -0
  40. package/dist/collection_editor/ui/NewCollectionCard.d.ts +2 -0
  41. package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +7 -0
  42. package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +36 -0
  43. package/dist/collection_editor/ui/collection_editor/AIModifiedPathsContext.d.ts +20 -0
  44. package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +11 -0
  45. package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +72 -0
  46. package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +19 -0
  47. package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +7 -0
  48. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +17 -0
  49. package/dist/collection_editor/ui/collection_editor/CollectionRLSTab.d.ts +12 -0
  50. package/dist/collection_editor/ui/collection_editor/CollectionRelationsTab.d.ts +1 -0
  51. package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +5 -0
  52. package/dist/collection_editor/ui/collection_editor/CollectionYupValidation.d.ts +14 -0
  53. package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +5 -0
  54. package/dist/collection_editor/ui/collection_editor/DisplaySettingsForm.d.ts +3 -0
  55. package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +5 -0
  56. package/dist/collection_editor/ui/collection_editor/EntityActionsSelectDialog.d.ts +4 -0
  57. package/dist/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.d.ts +4 -0
  58. package/dist/collection_editor/ui/collection_editor/EnumForm.d.ts +12 -0
  59. package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +7 -0
  60. package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +6 -0
  61. package/dist/collection_editor/ui/collection_editor/KanbanConfigSection.d.ts +4 -0
  62. package/dist/collection_editor/ui/collection_editor/LayoutModeSwitch.d.ts +5 -0
  63. package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +47 -0
  64. package/dist/collection_editor/ui/collection_editor/PropertyFieldPreview.d.ts +16 -0
  65. package/dist/collection_editor/ui/collection_editor/PropertyTree.d.ts +31 -0
  66. package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +11 -0
  67. package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +8 -0
  68. package/dist/collection_editor/ui/collection_editor/ViewModeSwitch.d.ts +6 -0
  69. package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.d.ts +7 -0
  70. package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +13 -0
  71. package/dist/collection_editor/ui/collection_editor/import/clean_import_data.d.ts +7 -0
  72. package/dist/collection_editor/ui/collection_editor/properties/BlockPropertyField.d.ts +7 -0
  73. package/dist/collection_editor/ui/collection_editor/properties/BooleanPropertyField.d.ts +3 -0
  74. package/dist/collection_editor/ui/collection_editor/properties/CommonPropertyFields.d.ts +10 -0
  75. package/dist/collection_editor/ui/collection_editor/properties/DateTimePropertyField.d.ts +3 -0
  76. package/dist/collection_editor/ui/collection_editor/properties/EnumPropertyField.d.ts +9 -0
  77. package/dist/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.d.ts +3 -0
  78. package/dist/collection_editor/ui/collection_editor/properties/MapPropertyField.d.ts +7 -0
  79. package/dist/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.d.ts +4 -0
  80. package/dist/collection_editor/ui/collection_editor/properties/NumberPropertyField.d.ts +3 -0
  81. package/dist/collection_editor/ui/collection_editor/properties/ReferencePropertyField.d.ts +14 -0
  82. package/dist/collection_editor/ui/collection_editor/properties/RelationPropertyField.d.ts +15 -0
  83. package/dist/collection_editor/ui/collection_editor/properties/RepeatPropertyField.d.ts +9 -0
  84. package/dist/collection_editor/ui/collection_editor/properties/StoragePropertyField.d.ts +5 -0
  85. package/dist/collection_editor/ui/collection_editor/properties/StringPropertyField.d.ts +5 -0
  86. package/dist/collection_editor/ui/collection_editor/properties/UrlPropertyField.d.ts +4 -0
  87. package/dist/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.d.ts +3 -0
  88. package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.d.ts +10 -0
  89. package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.d.ts +3 -0
  90. package/dist/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.d.ts +6 -0
  91. package/dist/collection_editor/ui/collection_editor/properties/conditions/index.d.ts +6 -0
  92. package/dist/collection_editor/ui/collection_editor/properties/conditions/property_paths.d.ts +19 -0
  93. package/dist/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.d.ts +5 -0
  94. package/dist/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.d.ts +4 -0
  95. package/dist/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.d.ts +3 -0
  96. package/dist/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.d.ts +11 -0
  97. package/dist/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.d.ts +3 -0
  98. package/dist/collection_editor/ui/collection_editor/templates/blog_template.d.ts +2 -0
  99. package/dist/collection_editor/ui/collection_editor/templates/pages_template.d.ts +2 -0
  100. package/dist/collection_editor/ui/collection_editor/templates/products_template.d.ts +2 -0
  101. package/dist/collection_editor/ui/collection_editor/templates/users_template.d.ts +2 -0
  102. package/dist/collection_editor/ui/collection_editor/util.d.ts +5 -0
  103. package/dist/collection_editor/ui/collection_editor/utils/strings.d.ts +1 -0
  104. package/dist/collection_editor/ui/collection_editor/utils/supported_fields.d.ts +3 -0
  105. package/dist/collection_editor/ui/collection_editor/utils/update_property_for_widget.d.ts +2 -0
  106. package/dist/collection_editor/useCollectionEditorController.d.ts +6 -0
  107. package/dist/collection_editor/useCollectionsConfigController.d.ts +6 -0
  108. package/dist/collection_editor/useLocalCollectionsConfigController.d.ts +6 -0
  109. package/dist/collection_editor/validateCollectionJson.d.ts +22 -0
  110. package/dist/collection_editor_ui.d.ts +8 -0
  111. package/dist/collection_editor_ui.js +11 -0
  112. package/dist/collection_editor_ui.js.map +1 -0
  113. package/dist/components/AdminModeSyncer.d.ts +17 -0
  114. package/dist/components/ArrayContainer.d.ts +58 -0
  115. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  116. package/dist/components/CollectionEditorDialogs.d.ts +15 -0
  117. package/dist/components/DefaultAppBar.d.ts +29 -0
  118. package/dist/components/DefaultDrawer.d.ts +29 -0
  119. package/dist/components/DeleteEntityDialog.d.ts +13 -0
  120. package/dist/components/DrawerNavigationGroup.d.ts +49 -0
  121. package/dist/components/DrawerNavigationItem.d.ts +10 -0
  122. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +39 -0
  123. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +27 -0
  124. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +129 -0
  125. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +26 -0
  126. package/dist/components/EntityCollectionTable/column_utils.d.ts +16 -0
  127. package/dist/components/EntityCollectionTable/fields/TableMultipleRelationField.d.ts +21 -0
  128. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +22 -0
  129. package/dist/components/EntityCollectionTable/fields/TableRelationField.d.ts +22 -0
  130. package/dist/components/EntityCollectionTable/fields/TableRelationSelectorField.d.ts +20 -0
  131. package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +35 -0
  132. package/dist/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +12 -0
  133. package/dist/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +9 -0
  134. package/dist/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +8 -0
  135. package/dist/components/EntityCollectionTable/fields/VirtualTableSelect.d.ts +15 -0
  136. package/dist/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +7 -0
  137. package/dist/components/EntityCollectionTable/fields/VirtualTableUserSelect.d.ts +12 -0
  138. package/dist/components/EntityCollectionTable/index.d.ts +6 -0
  139. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +21 -0
  140. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +32 -0
  141. package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +9 -0
  142. package/dist/components/EntityCollectionTable/internal/common.d.ts +5 -0
  143. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +27 -0
  144. package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +13 -0
  145. package/dist/components/EntityCollectionTable/internal/popup_field/useWindowSize.d.ts +6 -0
  146. package/dist/components/EntityCollectionTable/table_bindings.d.ts +28 -0
  147. package/dist/components/EntityCollectionView/Board.d.ts +2 -0
  148. package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
  149. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
  150. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
  151. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +31 -0
  152. package/dist/components/EntityCollectionView/EntityCard.d.ts +20 -0
  153. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +21 -0
  154. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +32 -0
  155. package/dist/components/EntityCollectionView/EntityCollectionListView.d.ts +34 -0
  156. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +64 -0
  157. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +18 -0
  158. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +18 -0
  159. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +15 -0
  160. package/dist/components/EntityCollectionView/SplitListView.d.ts +57 -0
  161. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
  162. package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
  163. package/dist/components/EntityCollectionView/hooks/useCollectionInlineEditor.d.ts +12 -0
  164. package/dist/components/EntityCollectionView/hooks/useKanbanDragAndDrop.d.ts +19 -0
  165. package/dist/components/EntityCollectionView/useBoardDataController.d.ts +61 -0
  166. package/dist/components/EntityCollectionView/useEntityPreviewSlots.d.ts +101 -0
  167. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  168. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  169. package/dist/components/EntityEditView.d.ts +49 -0
  170. package/dist/components/EntityEditViewFormActions.d.ts +2 -0
  171. package/dist/components/EntityJsonPreview.d.ts +3 -0
  172. package/dist/components/EntityPreview.d.ts +56 -0
  173. package/dist/components/EntitySidePanel.d.ts +10 -0
  174. package/dist/components/EntityView.d.ts +12 -0
  175. package/dist/components/FieldCaption.d.ts +5 -0
  176. package/dist/components/HomePage/ContentHomePage.d.ts +11 -0
  177. package/dist/components/HomePage/FavouritesView.d.ts +3 -0
  178. package/dist/components/HomePage/HomePageDnD.d.ts +77 -0
  179. package/dist/components/HomePage/NavigationCard.d.ts +11 -0
  180. package/dist/components/HomePage/NavigationCardBinding.d.ts +18 -0
  181. package/dist/components/HomePage/NavigationGroup.d.ts +11 -0
  182. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  183. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  184. package/dist/components/HomePage/index.d.ts +4 -0
  185. package/dist/components/PropertyCollectionView.d.ts +24 -0
  186. package/dist/components/PropertyConfigBadge.d.ts +6 -0
  187. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  188. package/dist/components/RebaseAuthGate.d.ts +21 -0
  189. package/dist/components/RebaseCMS.d.ts +10 -0
  190. package/dist/components/RebaseLayout.d.ts +32 -0
  191. package/dist/components/RebaseNavigation.d.ts +24 -0
  192. package/dist/components/RebaseRouteDefs.d.ts +30 -0
  193. package/dist/components/RebaseShell.d.ts +25 -0
  194. package/dist/components/ReferenceTable/EntitySelectionTable.d.ts +59 -0
  195. package/dist/components/ReferenceWidget.d.ts +30 -0
  196. package/dist/components/RelationSelector.d.ts +32 -0
  197. package/dist/components/SearchIconsView.d.ts +5 -0
  198. package/dist/components/SelectableTable/SelectableTable.d.ts +95 -0
  199. package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
  200. package/dist/components/SelectableTable/SelectionStore.d.ts +26 -0
  201. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +9 -0
  202. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +12 -0
  203. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +15 -0
  204. package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +12 -0
  205. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +13 -0
  206. package/dist/components/SideDialogs.d.ts +25 -0
  207. package/dist/components/SideEntityProvider.d.ts +32 -0
  208. package/dist/components/UserSelector.d.ts +18 -0
  209. package/dist/components/admin/RoleChip.d.ts +4 -0
  210. package/dist/components/admin/RolesView.d.ts +4 -0
  211. package/dist/components/admin/UsersView.d.ts +4 -0
  212. package/dist/components/admin/index.d.ts +3 -0
  213. package/dist/components/app/AppBar.d.ts +12 -0
  214. package/dist/components/app/Drawer.d.ts +19 -0
  215. package/dist/components/app/Scaffold.d.ts +34 -0
  216. package/dist/components/app/index.d.ts +4 -0
  217. package/dist/components/app/useApp.d.ts +17 -0
  218. package/dist/components/common/default_entity_actions.d.ts +4 -0
  219. package/dist/components/common/index.d.ts +1 -0
  220. package/dist/components/field_configs.d.ts +7 -0
  221. package/dist/components/history/EntityHistoryEntry.d.ts +17 -0
  222. package/dist/components/history/EntityHistoryView.d.ts +6 -0
  223. package/dist/components/history/LastEditedByFormAction.d.ts +6 -0
  224. package/dist/components/history/LastEditedByIndicator.d.ts +10 -0
  225. package/dist/components/history/UserChip.d.ts +4 -0
  226. package/dist/components/history/index.d.ts +5 -0
  227. package/dist/components/index.d.ts +38 -0
  228. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  229. package/dist/contexts/SideDialogsControllerContext.d.ts +3 -0
  230. package/dist/contexts/SideEntityControllerContext.d.ts +3 -0
  231. package/dist/data_export/export/BasicExportAction.d.ts +7 -0
  232. package/dist/data_export/export/ExportCollectionAction.d.ts +11 -0
  233. package/dist/data_export/export/export.d.ts +22 -0
  234. package/dist/data_export/export/index.d.ts +3 -0
  235. package/dist/data_export/index.d.ts +1 -0
  236. package/dist/data_import/components/DataNewPropertiesMapping.d.ts +13 -0
  237. package/dist/data_import/components/ImportFileUpload.d.ts +3 -0
  238. package/dist/data_import/components/ImportNewPropertyFieldPreview.d.ts +9 -0
  239. package/dist/data_import/components/ImportSaveInProgress.d.ts +8 -0
  240. package/dist/data_import/components/index.d.ts +4 -0
  241. package/dist/data_import/hooks/index.d.ts +1 -0
  242. package/dist/data_import/hooks/useImportConfig.d.ts +2 -0
  243. package/dist/data_import/import/ImportCollectionAction.d.ts +15 -0
  244. package/dist/data_import/import/index.d.ts +1 -0
  245. package/dist/data_import/index.d.ts +5 -0
  246. package/dist/data_import/types/column_mapping.d.ts +20 -0
  247. package/dist/data_import/types/index.d.ts +1 -0
  248. package/dist/data_import/utils/data.d.ts +4 -0
  249. package/dist/data_import/utils/file_headers.d.ts +1 -0
  250. package/dist/data_import/utils/file_to_json.d.ts +16 -0
  251. package/dist/data_import/utils/get_import_inference_type.d.ts +2 -0
  252. package/dist/data_import/utils/get_properties_mapping.d.ts +1 -0
  253. package/dist/data_import/utils/index.d.ts +3 -0
  254. package/dist/editor/components/SlashCommandMenu.d.ts +6 -0
  255. package/dist/editor/components/editor-bubble-item.d.ts +8 -0
  256. package/dist/editor/components/editor-bubble.d.ts +8 -0
  257. package/dist/editor/components/image-bubble.d.ts +5 -0
  258. package/dist/editor/components/index.d.ts +16 -0
  259. package/dist/editor/components/table-bubble.d.ts +5 -0
  260. package/dist/editor/editor.d.ts +30 -0
  261. package/dist/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
  262. package/dist/editor/extensions/Image/index.d.ts +6 -0
  263. package/dist/editor/extensions/Image.d.ts +6 -0
  264. package/dist/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
  265. package/dist/editor/extensions/clipboard.d.ts +7 -0
  266. package/dist/editor/extensions/custom-keymap.d.ts +1 -0
  267. package/dist/editor/extensions/drag-and-drop.d.ts +9 -0
  268. package/dist/editor/hooks/useProseMirror.d.ts +13 -0
  269. package/dist/editor/hooks/useProseMirrorContext.d.ts +9 -0
  270. package/dist/editor/index.d.ts +2 -0
  271. package/dist/editor/markdown.d.ts +5 -0
  272. package/dist/editor/nodeViews/ImageComponent.d.ts +3 -0
  273. package/dist/editor/nodeViews/ReactNodeView.d.ts +29 -0
  274. package/dist/editor/nodeViews/TaskItemComponent.d.ts +3 -0
  275. package/dist/editor/nodeViews/index.d.ts +6 -0
  276. package/dist/editor/plugins/index.d.ts +2 -0
  277. package/dist/editor/plugins/inputrules.d.ts +6 -0
  278. package/dist/editor/plugins/placeholderPlugin.d.ts +3 -0
  279. package/dist/editor/plugins/slashCommandPlugin.d.ts +12 -0
  280. package/dist/editor/schema.d.ts +2 -0
  281. package/dist/editor/selectors/ai-selector.d.ts +0 -0
  282. package/dist/editor/selectors/color-selector.d.ts +10 -0
  283. package/dist/editor/selectors/link-selector.d.ts +8 -0
  284. package/dist/editor/selectors/node-selector.d.ts +15 -0
  285. package/dist/editor/selectors/text-buttons.d.ts +1 -0
  286. package/dist/editor/types.d.ts +5 -0
  287. package/dist/editor/useProseMirror.d.ts +16 -0
  288. package/dist/editor/utils/prosemirror-utils.d.ts +7 -0
  289. package/dist/editor/utils/remove_classes.d.ts +1 -0
  290. package/dist/editor/utils/useDebouncedCallback.d.ts +1 -0
  291. package/dist/editor.js +3834 -0
  292. package/dist/editor.js.map +1 -0
  293. package/dist/form/EntityForm.d.ts +10 -0
  294. package/dist/form/EntityFormActions.d.ts +2 -0
  295. package/dist/form/PropertyFieldBinding.d.ts +30 -0
  296. package/dist/form/components/ErrorFocus.d.ts +4 -0
  297. package/dist/form/components/FieldHelperText.d.ts +12 -0
  298. package/dist/form/components/FormEntry.d.ts +6 -0
  299. package/dist/form/components/FormLayout.d.ts +5 -0
  300. package/dist/form/components/LabelWithIcon.d.ts +14 -0
  301. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  302. package/dist/form/components/LocalChangesMenu.d.ts +11 -0
  303. package/dist/form/components/StorageItemPreview.d.ts +14 -0
  304. package/dist/form/components/StorageUploadProgress.d.ts +10 -0
  305. package/dist/form/components/index.d.ts +5 -0
  306. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +10 -0
  307. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +13 -0
  308. package/dist/form/field_bindings/BlockFieldBinding.d.ts +11 -0
  309. package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +12 -0
  310. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +8 -0
  311. package/dist/form/field_bindings/MapFieldBinding.d.ts +10 -0
  312. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +12 -0
  313. package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +10 -0
  314. package/dist/form/field_bindings/MultipleRelationFieldBinding.d.ts +10 -0
  315. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +11 -0
  316. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +10 -0
  317. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +10 -0
  318. package/dist/form/field_bindings/RelationFieldBinding.d.ts +3 -0
  319. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +11 -0
  320. package/dist/form/field_bindings/SelectFieldBinding.d.ts +11 -0
  321. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +21 -0
  322. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +10 -0
  323. package/dist/form/field_bindings/TextFieldBinding.d.ts +9 -0
  324. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +14 -0
  325. package/dist/form/index.d.ts +20 -0
  326. package/dist/form/useClearRestoreValue.d.ts +13 -0
  327. package/dist/form/validation.d.ts +21 -0
  328. package/dist/hooks/index.d.ts +15 -0
  329. package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +5 -0
  330. package/dist/hooks/navigation/contexts/NavigationStateContext.d.ts +4 -0
  331. package/dist/hooks/navigation/contexts/UrlContext.d.ts +4 -0
  332. package/dist/hooks/navigation/contexts/index.d.ts +3 -0
  333. package/dist/hooks/navigation/useBuildCollectionRegistryController.d.ts +7 -0
  334. package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +34 -0
  335. package/dist/hooks/navigation/useBuildUrlController.d.ts +7 -0
  336. package/dist/hooks/navigation/useNavigationRegistry.d.ts +11 -0
  337. package/dist/hooks/navigation/useNavigationResolution.d.ts +7 -0
  338. package/dist/hooks/navigation/useNavigationURLs.d.ts +11 -0
  339. package/dist/hooks/navigation/useResolvedCollections.d.ts +28 -0
  340. package/dist/hooks/navigation/useResolvedViews.d.ts +29 -0
  341. package/dist/hooks/navigation/useTopLevelNavigation.d.ts +27 -0
  342. package/dist/hooks/navigation/utils.d.ts +12 -0
  343. package/dist/hooks/useBreadcrumbsController.d.ts +42 -0
  344. package/dist/hooks/useBuildSideDialogsController.d.ts +2 -0
  345. package/dist/hooks/useBuildSideEntityController.d.ts +6 -0
  346. package/dist/hooks/useCMSContext.d.ts +27 -0
  347. package/dist/hooks/useEntityHistory.d.ts +30 -0
  348. package/dist/hooks/useEntitySelectionDialog.d.ts +18 -0
  349. package/dist/hooks/useResolvedNavigationFrom.d.ts +73 -0
  350. package/dist/hooks/useSideDialogsController.d.ts +19 -0
  351. package/dist/hooks/useSideEntityController.d.ts +11 -0
  352. package/dist/index-CBhrgpR7.js +12 -0
  353. package/dist/index-CBhrgpR7.js.map +1 -0
  354. package/dist/index-CHxgwt6E.js +456 -0
  355. package/dist/index-CHxgwt6E.js.map +1 -0
  356. package/dist/index-Dey5WJpO.js +8 -0
  357. package/dist/index-Dey5WJpO.js.map +1 -0
  358. package/dist/index.d.ts +12 -0
  359. package/dist/index.js +799 -0
  360. package/dist/index.js.map +1 -0
  361. package/dist/markdown-z2Ir7Cgo.js +618 -0
  362. package/dist/markdown-z2Ir7Cgo.js.map +1 -0
  363. package/dist/preview/PropertyPreview.d.ts +7 -0
  364. package/dist/preview/components/ArrayEnumPreview.d.ts +11 -0
  365. package/dist/preview/components/BooleanPreview.d.ts +11 -0
  366. package/dist/preview/components/DatePreview.d.ts +17 -0
  367. package/dist/preview/components/EmptyValue.d.ts +6 -0
  368. package/dist/preview/components/EnumValuesChip.d.ts +13 -0
  369. package/dist/preview/components/ImagePreview.d.ts +16 -0
  370. package/dist/preview/components/ReferencePreview.d.ts +17 -0
  371. package/dist/preview/components/RelationPreview.d.ts +17 -0
  372. package/dist/preview/components/StorageThumbnail.d.ts +15 -0
  373. package/dist/preview/components/UrlComponentPreview.d.ts +14 -0
  374. package/dist/preview/components/UserPreview.d.ts +9 -0
  375. package/dist/preview/index.d.ts +23 -0
  376. package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +6 -0
  377. package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +6 -0
  378. package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +6 -0
  379. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +6 -0
  380. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +6 -0
  381. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +6 -0
  382. package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +6 -0
  383. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +6 -0
  384. package/dist/preview/property_previews/MapPropertyPreview.d.ts +9 -0
  385. package/dist/preview/property_previews/NumberPropertyPreview.d.ts +7 -0
  386. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +14 -0
  387. package/dist/preview/property_previews/StringPropertyPreview.d.ts +7 -0
  388. package/dist/preview/util.d.ts +7 -0
  389. package/dist/routes/CustomViewRoute.d.ts +4 -0
  390. package/dist/routes/RebaseRoute.d.ts +1 -0
  391. package/dist/routes/index.d.ts +2 -0
  392. package/dist/types/components/EntityFormActionsProps.d.ts +19 -0
  393. package/dist/types/components/EntityFormProps.d.ts +48 -0
  394. package/dist/types/components/PropertyPreviewProps.d.ts +47 -0
  395. package/dist/types/components/formex.d.ts +40 -0
  396. package/dist/types/components/index.d.ts +3 -0
  397. package/dist/types/fields.d.ts +221 -0
  398. package/dist/types/index.d.ts +2 -0
  399. package/dist/useEntityHistory-Dcj4zhGj.js +121 -0
  400. package/dist/useEntityHistory-Dcj4zhGj.js.map +1 -0
  401. package/dist/util/entity_actions.d.ts +2 -0
  402. package/dist/util/index.d.ts +5 -0
  403. package/dist/util/navigation_utils.d.ts +17 -0
  404. package/dist/util/previews.d.ts +4 -0
  405. package/dist/util/property_utils.d.ts +25 -0
  406. package/dist/util/resolutions.d.ts +9 -0
  407. package/dist/util-BQ82ySL3.js +27720 -0
  408. package/dist/util-BQ82ySL3.js.map +1 -0
  409. package/package.json +171 -0
  410. package/src/collection_editor/CollectionEditorDialogsContext.tsx +25 -0
  411. package/src/collection_editor/ConfigControllerProvider.tsx +407 -0
  412. package/src/collection_editor/_cms_internals.ts +41 -0
  413. package/src/collection_editor/api/generateCollectionApi.ts +125 -0
  414. package/src/collection_editor/api/index.ts +1 -0
  415. package/src/collection_editor/index.ts +63 -0
  416. package/src/collection_editor/pgColumnToProperty.ts +273 -0
  417. package/src/collection_editor/types/collection_editor_controller.tsx +64 -0
  418. package/src/collection_editor/types/collection_inference.ts +17 -0
  419. package/src/collection_editor/types/config_controller.tsx +109 -0
  420. package/src/collection_editor/types/config_permissions.ts +20 -0
  421. package/src/collection_editor/ui/AddKanbanColumnAction.tsx +186 -0
  422. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +50 -0
  423. package/src/collection_editor/ui/EditorCollectionAction.tsx +58 -0
  424. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +93 -0
  425. package/src/collection_editor/ui/EditorEntityAction.tsx +54 -0
  426. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +120 -0
  427. package/src/collection_editor/ui/KanbanSetupAction.tsx +40 -0
  428. package/src/collection_editor/ui/MissingReferenceWidget.tsx +33 -0
  429. package/src/collection_editor/ui/NewCollectionButton.tsx +27 -0
  430. package/src/collection_editor/ui/NewCollectionCard.tsx +53 -0
  431. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +53 -0
  432. package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +246 -0
  433. package/src/collection_editor/ui/collection_editor/AIModifiedPathsContext.tsx +90 -0
  434. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +417 -0
  435. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +977 -0
  436. package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +286 -0
  437. package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +164 -0
  438. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +589 -0
  439. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +332 -0
  440. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +242 -0
  441. package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +101 -0
  442. package/src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx +9 -0
  443. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +133 -0
  444. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +302 -0
  445. package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +151 -0
  446. package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +40 -0
  447. package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +39 -0
  448. package/src/collection_editor/ui/collection_editor/EnumForm.tsx +358 -0
  449. package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +252 -0
  450. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +142 -0
  451. package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +194 -0
  452. package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +41 -0
  453. package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +777 -0
  454. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +155 -0
  455. package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +350 -0
  456. package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +241 -0
  457. package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +39 -0
  458. package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +47 -0
  459. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +67 -0
  460. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +295 -0
  461. package/src/collection_editor/ui/collection_editor/import/clean_import_data.ts +57 -0
  462. package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +147 -0
  463. package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +41 -0
  464. package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +113 -0
  465. package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +250 -0
  466. package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +125 -0
  467. package/src/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.tsx +20 -0
  468. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +153 -0
  469. package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +210 -0
  470. package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +117 -0
  471. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +163 -0
  472. package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +346 -0
  473. package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +106 -0
  474. package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +360 -0
  475. package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +148 -0
  476. package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +90 -0
  477. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +47 -0
  478. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +915 -0
  479. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +29 -0
  480. package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +614 -0
  481. package/src/collection_editor/ui/collection_editor/properties/conditions/index.ts +6 -0
  482. package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +93 -0
  483. package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +52 -0
  484. package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +63 -0
  485. package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +117 -0
  486. package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +154 -0
  487. package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +29 -0
  488. package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +112 -0
  489. package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +183 -0
  490. package/src/collection_editor/ui/collection_editor/templates/products_template.ts +88 -0
  491. package/src/collection_editor/ui/collection_editor/templates/users_template.ts +42 -0
  492. package/src/collection_editor/ui/collection_editor/util.ts +28 -0
  493. package/src/collection_editor/ui/collection_editor/utils/strings.ts +1 -0
  494. package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +34 -0
  495. package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +281 -0
  496. package/src/collection_editor/useCollectionEditorController.tsx +9 -0
  497. package/src/collection_editor/useCollectionsConfigController.tsx +9 -0
  498. package/src/collection_editor/useLocalCollectionsConfigController.tsx +120 -0
  499. package/src/collection_editor/validateCollectionJson.ts +379 -0
  500. package/src/collection_editor_ui.ts +15 -0
  501. package/src/components/AdminModeSyncer.tsx +56 -0
  502. package/src/components/ArrayContainer.tsx +538 -0
  503. package/src/components/ClearFilterSortButton.tsx +48 -0
  504. package/src/components/CollectionEditorDialogs.tsx +68 -0
  505. package/src/components/DefaultAppBar.tsx +242 -0
  506. package/src/components/DefaultDrawer.tsx +347 -0
  507. package/src/components/DeleteEntityDialog.tsx +182 -0
  508. package/src/components/DrawerNavigationGroup.tsx +130 -0
  509. package/src/components/DrawerNavigationItem.tsx +65 -0
  510. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +233 -0
  511. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +385 -0
  512. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +171 -0
  513. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +340 -0
  514. package/src/components/EntityCollectionTable/column_utils.tsx +75 -0
  515. package/src/components/EntityCollectionTable/fields/TableMultipleRelationField.tsx +130 -0
  516. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +172 -0
  517. package/src/components/EntityCollectionTable/fields/TableRelationField.tsx +181 -0
  518. package/src/components/EntityCollectionTable/fields/TableRelationSelectorField.tsx +42 -0
  519. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +322 -0
  520. package/src/components/EntityCollectionTable/fields/VirtualTableDateField.tsx +39 -0
  521. package/src/components/EntityCollectionTable/fields/VirtualTableInput.tsx +90 -0
  522. package/src/components/EntityCollectionTable/fields/VirtualTableNumberInput.tsx +80 -0
  523. package/src/components/EntityCollectionTable/fields/VirtualTableSelect.tsx +133 -0
  524. package/src/components/EntityCollectionTable/fields/VirtualTableSwitch.tsx +32 -0
  525. package/src/components/EntityCollectionTable/fields/VirtualTableUserSelect.tsx +41 -0
  526. package/src/components/EntityCollectionTable/index.tsx +14 -0
  527. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +102 -0
  528. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +310 -0
  529. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +81 -0
  530. package/src/components/EntityCollectionTable/internal/common.tsx +73 -0
  531. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +418 -0
  532. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +96 -0
  533. package/src/components/EntityCollectionTable/internal/popup_field/useWindowSize.tsx +22 -0
  534. package/src/components/EntityCollectionTable/table_bindings.tsx +346 -0
  535. package/src/components/EntityCollectionView/Board.tsx +474 -0
  536. package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
  537. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
  538. package/src/components/EntityCollectionView/BoardSortableList.tsx +177 -0
  539. package/src/components/EntityCollectionView/EntityBoardCard.tsx +264 -0
  540. package/src/components/EntityCollectionView/EntityCard.tsx +224 -0
  541. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +614 -0
  542. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +267 -0
  543. package/src/components/EntityCollectionView/EntityCollectionListView.tsx +816 -0
  544. package/src/components/EntityCollectionView/EntityCollectionView.tsx +1277 -0
  545. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +179 -0
  546. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +148 -0
  547. package/src/components/EntityCollectionView/FiltersDialog.tsx +242 -0
  548. package/src/components/EntityCollectionView/SplitListView.tsx +314 -0
  549. package/src/components/EntityCollectionView/ViewModeToggle.tsx +199 -0
  550. package/src/components/EntityCollectionView/board_types.ts +113 -0
  551. package/src/components/EntityCollectionView/hooks/useCollectionInlineEditor.ts +79 -0
  552. package/src/components/EntityCollectionView/hooks/useKanbanDragAndDrop.ts +140 -0
  553. package/src/components/EntityCollectionView/useBoardDataController.tsx +675 -0
  554. package/src/components/EntityCollectionView/useEntityPreviewSlots.ts +442 -0
  555. package/src/components/EntityCollectionView/useSelectionController.tsx +39 -0
  556. package/src/components/EntityCollectionView/utils.ts +19 -0
  557. package/src/components/EntityEditView.tsx +632 -0
  558. package/src/components/EntityEditViewFormActions.tsx +352 -0
  559. package/src/components/EntityJsonPreview.tsx +66 -0
  560. package/src/components/EntityPreview.tsx +372 -0
  561. package/src/components/EntitySidePanel.tsx +160 -0
  562. package/src/components/EntityView.tsx +69 -0
  563. package/src/components/FieldCaption.tsx +14 -0
  564. package/src/components/HomePage/ContentHomePage.tsx +567 -0
  565. package/src/components/HomePage/FavouritesView.tsx +61 -0
  566. package/src/components/HomePage/HomePageDnD.tsx +703 -0
  567. package/src/components/HomePage/NavigationCard.tsx +88 -0
  568. package/src/components/HomePage/NavigationCardBinding.tsx +108 -0
  569. package/src/components/HomePage/NavigationGroup.tsx +157 -0
  570. package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
  571. package/src/components/HomePage/SmallNavigationCard.tsx +46 -0
  572. package/src/components/HomePage/index.tsx +5 -0
  573. package/src/components/PropertyCollectionView.tsx +335 -0
  574. package/src/components/PropertyConfigBadge.tsx +27 -0
  575. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  576. package/src/components/RebaseAuthGate.tsx +42 -0
  577. package/src/components/RebaseCMS.tsx +27 -0
  578. package/src/components/RebaseLayout.tsx +73 -0
  579. package/src/components/RebaseNavigation.tsx +230 -0
  580. package/src/components/RebaseRouteDefs.tsx +130 -0
  581. package/src/components/RebaseShell.tsx +70 -0
  582. package/src/components/ReferenceTable/EntitySelectionTable.tsx +363 -0
  583. package/src/components/ReferenceWidget.tsx +155 -0
  584. package/src/components/RelationSelector.tsx +672 -0
  585. package/src/components/SearchIconsView.tsx +96 -0
  586. package/src/components/SelectableTable/SelectableTable.tsx +356 -0
  587. package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
  588. package/src/components/SelectableTable/SelectionStore.ts +67 -0
  589. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +51 -0
  590. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +125 -0
  591. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +208 -0
  592. package/src/components/SelectableTable/filters/RelationFilterField.tsx +138 -0
  593. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +221 -0
  594. package/src/components/SideDialogs.tsx +208 -0
  595. package/src/components/SideEntityProvider.tsx +76 -0
  596. package/src/components/UserSelector.tsx +339 -0
  597. package/src/components/admin/RoleChip.tsx +23 -0
  598. package/src/components/admin/RolesView.tsx +419 -0
  599. package/src/components/admin/UsersView.tsx +782 -0
  600. package/src/components/admin/index.ts +3 -0
  601. package/src/components/app/AppBar.tsx +17 -0
  602. package/src/components/app/Drawer.tsx +30 -0
  603. package/src/components/app/Scaffold.tsx +242 -0
  604. package/src/components/app/index.ts +4 -0
  605. package/src/components/app/useApp.tsx +36 -0
  606. package/src/components/common/default_entity_actions.tsx +156 -0
  607. package/src/components/common/index.ts +1 -0
  608. package/src/components/field_configs.tsx +423 -0
  609. package/src/components/history/EntityHistoryEntry.tsx +182 -0
  610. package/src/components/history/EntityHistoryView.tsx +191 -0
  611. package/src/components/history/LastEditedByFormAction.tsx +24 -0
  612. package/src/components/history/LastEditedByIndicator.tsx +98 -0
  613. package/src/components/history/UserChip.tsx +15 -0
  614. package/src/components/history/index.tsx +5 -0
  615. package/src/components/index.ts +55 -0
  616. package/src/contexts/BreacrumbsContext.tsx +53 -0
  617. package/src/contexts/SideDialogsControllerContext.tsx +5 -0
  618. package/src/contexts/SideEntityControllerContext.tsx +5 -0
  619. package/src/data_export/export/BasicExportAction.tsx +143 -0
  620. package/src/data_export/export/ExportCollectionAction.tsx +266 -0
  621. package/src/data_export/export/export.ts +248 -0
  622. package/src/data_export/export/index.ts +3 -0
  623. package/src/data_export/index.ts +1 -0
  624. package/src/data_import/components/DataNewPropertiesMapping.tsx +231 -0
  625. package/src/data_import/components/ImportFileUpload.tsx +43 -0
  626. package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +60 -0
  627. package/src/data_import/components/ImportSaveInProgress.tsx +121 -0
  628. package/src/data_import/components/index.ts +4 -0
  629. package/src/data_import/hooks/index.ts +1 -0
  630. package/src/data_import/hooks/useImportConfig.tsx +34 -0
  631. package/src/data_import/import/ImportCollectionAction.tsx +436 -0
  632. package/src/data_import/import/index.ts +1 -0
  633. package/src/data_import/index.ts +5 -0
  634. package/src/data_import/types/column_mapping.ts +32 -0
  635. package/src/data_import/types/index.ts +1 -0
  636. package/src/data_import/utils/data.ts +148 -0
  637. package/src/data_import/utils/file_headers.ts +90 -0
  638. package/src/data_import/utils/file_to_json.ts +106 -0
  639. package/src/data_import/utils/get_import_inference_type.ts +27 -0
  640. package/src/data_import/utils/get_properties_mapping.ts +67 -0
  641. package/src/data_import/utils/index.ts +3 -0
  642. package/src/editor/components/SlashCommandMenu.tsx +517 -0
  643. package/src/editor/components/editor-bubble-item.tsx +32 -0
  644. package/src/editor/components/editor-bubble.tsx +120 -0
  645. package/src/editor/components/image-bubble.tsx +165 -0
  646. package/src/editor/components/index.ts +14 -0
  647. package/src/editor/components/table-bubble.tsx +171 -0
  648. package/src/editor/editor.tsx +510 -0
  649. package/src/editor/extensions/HighlightDecorationExtension.ts +114 -0
  650. package/src/editor/extensions/Image/index.ts +133 -0
  651. package/src/editor/extensions/Image.ts +159 -0
  652. package/src/editor/extensions/TextLoadingDecorationExtension.tsx +107 -0
  653. package/src/editor/extensions/clipboard.ts +72 -0
  654. package/src/editor/extensions/custom-keymap.ts +25 -0
  655. package/src/editor/extensions/drag-and-drop.tsx +508 -0
  656. package/src/editor/hooks/useProseMirror.ts +126 -0
  657. package/src/editor/hooks/useProseMirrorContext.ts +15 -0
  658. package/src/editor/index.ts +2 -0
  659. package/src/editor/markdown.ts +205 -0
  660. package/src/editor/nodeViews/ImageComponent.tsx +20 -0
  661. package/src/editor/nodeViews/ReactNodeView.tsx +89 -0
  662. package/src/editor/nodeViews/TaskItemComponent.tsx +29 -0
  663. package/src/editor/nodeViews/index.ts +35 -0
  664. package/src/editor/plugins/index.ts +58 -0
  665. package/src/editor/plugins/inputrules.ts +82 -0
  666. package/src/editor/plugins/placeholderPlugin.ts +55 -0
  667. package/src/editor/plugins/slashCommandPlugin.ts +65 -0
  668. package/src/editor/schema.ts +263 -0
  669. package/src/editor/selectors/ai-selector.tsx +111 -0
  670. package/src/editor/selectors/color-selector.tsx +200 -0
  671. package/src/editor/selectors/link-selector.tsx +119 -0
  672. package/src/editor/selectors/node-selector.tsx +145 -0
  673. package/src/editor/selectors/text-buttons.tsx +80 -0
  674. package/src/editor/types.ts +6 -0
  675. package/src/editor/useProseMirror.ts +125 -0
  676. package/src/editor/utils/prosemirror-utils.ts +113 -0
  677. package/src/editor/utils/remove_classes.ts +17 -0
  678. package/src/editor/utils/useDebouncedCallback.ts +25 -0
  679. package/src/form/EntityForm.tsx +855 -0
  680. package/src/form/EntityFormActions.tsx +214 -0
  681. package/src/form/PropertyFieldBinding.tsx +344 -0
  682. package/src/form/components/ErrorFocus.tsx +44 -0
  683. package/src/form/components/FieldHelperText.tsx +85 -0
  684. package/src/form/components/FormEntry.tsx +22 -0
  685. package/src/form/components/FormLayout.tsx +16 -0
  686. package/src/form/components/LabelWithIcon.tsx +43 -0
  687. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  688. package/src/form/components/LocalChangesMenu.tsx +132 -0
  689. package/src/form/components/StorageItemPreview.tsx +82 -0
  690. package/src/form/components/StorageUploadProgress.tsx +105 -0
  691. package/src/form/components/index.tsx +5 -0
  692. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +107 -0
  693. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +171 -0
  694. package/src/form/field_bindings/BlockFieldBinding.tsx +280 -0
  695. package/src/form/field_bindings/DateTimeFieldBinding.tsx +72 -0
  696. package/src/form/field_bindings/KeyValueFieldBinding.tsx +554 -0
  697. package/src/form/field_bindings/MapFieldBinding.tsx +162 -0
  698. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +232 -0
  699. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +123 -0
  700. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +157 -0
  701. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +66 -0
  702. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +141 -0
  703. package/src/form/field_bindings/ReferenceFieldBinding.tsx +141 -0
  704. package/src/form/field_bindings/RelationFieldBinding.tsx +184 -0
  705. package/src/form/field_bindings/RepeatFieldBinding.tsx +139 -0
  706. package/src/form/field_bindings/SelectFieldBinding.tsx +110 -0
  707. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +493 -0
  708. package/src/form/field_bindings/SwitchFieldBinding.tsx +65 -0
  709. package/src/form/field_bindings/TextFieldBinding.tsx +156 -0
  710. package/src/form/field_bindings/UserSelectFieldBinding.tsx +66 -0
  711. package/src/form/index.tsx +27 -0
  712. package/src/form/useClearRestoreValue.tsx +36 -0
  713. package/src/form/validation.ts +519 -0
  714. package/src/hooks/index.ts +15 -0
  715. package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +20 -0
  716. package/src/hooks/navigation/contexts/NavigationStateContext.tsx +16 -0
  717. package/src/hooks/navigation/contexts/UrlContext.tsx +25 -0
  718. package/src/hooks/navigation/contexts/index.ts +14 -0
  719. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +171 -0
  720. package/src/hooks/navigation/useBuildNavigationStateController.tsx +133 -0
  721. package/src/hooks/navigation/useBuildUrlController.tsx +66 -0
  722. package/src/hooks/navigation/useNavigationRegistry.ts +153 -0
  723. package/src/hooks/navigation/useNavigationResolution.ts +91 -0
  724. package/src/hooks/navigation/useNavigationURLs.ts +56 -0
  725. package/src/hooks/navigation/useResolvedCollections.ts +133 -0
  726. package/src/hooks/navigation/useResolvedViews.tsx +216 -0
  727. package/src/hooks/navigation/useTopLevelNavigation.ts +257 -0
  728. package/src/hooks/navigation/utils.ts +176 -0
  729. package/src/hooks/useBreadcrumbsController.tsx +49 -0
  730. package/src/hooks/useBuildSideDialogsController.tsx +145 -0
  731. package/src/hooks/useBuildSideEntityController.tsx +310 -0
  732. package/src/hooks/useCMSContext.tsx +79 -0
  733. package/src/hooks/useEntityHistory.ts +167 -0
  734. package/src/hooks/useEntitySelectionDialog.tsx +57 -0
  735. package/src/hooks/useResolvedNavigationFrom.tsx +160 -0
  736. package/src/hooks/useSideDialogsController.tsx +25 -0
  737. package/src/hooks/useSideEntityController.tsx +13 -0
  738. package/src/index.ts +95 -0
  739. package/src/preview/PropertyPreview.tsx +292 -0
  740. package/src/preview/components/ArrayEnumPreview.tsx +39 -0
  741. package/src/preview/components/BooleanPreview.tsx +25 -0
  742. package/src/preview/components/DatePreview.tsx +93 -0
  743. package/src/preview/components/EmptyValue.tsx +10 -0
  744. package/src/preview/components/EnumValuesChip.tsx +39 -0
  745. package/src/preview/components/ImagePreview.tsx +143 -0
  746. package/src/preview/components/ReferencePreview.tsx +166 -0
  747. package/src/preview/components/RelationPreview.tsx +160 -0
  748. package/src/preview/components/StorageThumbnail.tsx +90 -0
  749. package/src/preview/components/UrlComponentPreview.tsx +115 -0
  750. package/src/preview/components/UserPreview.tsx +30 -0
  751. package/src/preview/index.ts +25 -0
  752. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +73 -0
  753. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +44 -0
  754. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +50 -0
  755. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +49 -0
  756. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +44 -0
  757. package/src/preview/property_previews/ArrayOneOfPreview.tsx +72 -0
  758. package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +35 -0
  759. package/src/preview/property_previews/ArrayPropertyPreview.tsx +70 -0
  760. package/src/preview/property_previews/MapPropertyPreview.tsx +146 -0
  761. package/src/preview/property_previews/NumberPropertyPreview.tsx +29 -0
  762. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +277 -0
  763. package/src/preview/property_previews/StringPropertyPreview.tsx +59 -0
  764. package/src/preview/util.ts +30 -0
  765. package/src/routes/CustomViewRoute.tsx +24 -0
  766. package/src/routes/RebaseRoute.tsx +344 -0
  767. package/src/routes/index.ts +2 -0
  768. package/src/types/components/EntityFormActionsProps.tsx +20 -0
  769. package/src/types/components/EntityFormProps.tsx +54 -0
  770. package/src/types/components/PropertyPreviewProps.tsx +59 -0
  771. package/src/types/components/formex.tsx +46 -0
  772. package/src/types/components/index.ts +3 -0
  773. package/src/types/fields.tsx +299 -0
  774. package/src/types/index.ts +4 -0
  775. package/src/util/entity_actions.ts +28 -0
  776. package/src/util/index.ts +5 -0
  777. package/src/util/navigation_utils.ts +69 -0
  778. package/src/util/previews.ts +50 -0
  779. package/src/util/property_utils.tsx +215 -0
  780. package/src/util/resolutions.ts +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionEditorDialog-B2M9lCyL.js","sources":["../src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx","../src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx","../src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx","../src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx","../src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx","../src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx","../src/collection_editor/ui/collection_editor/GetCodeDialog.tsx","../src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx","../src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx","../src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx","../src/collection_editor/ui/collection_editor/templates/products_template.ts","../src/collection_editor/ui/collection_editor/templates/blog_template.ts","../src/collection_editor/ui/collection_editor/templates/users_template.ts","../src/collection_editor/ui/collection_editor/templates/pages_template.ts","../src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx","../src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx","../src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx","../src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx","../src/collection_editor/ui/collection_editor/import/clean_import_data.ts","../src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx","../src/collection_editor/pgColumnToProperty.ts","../src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx"],"sourcesContent":["import { z } from \"zod\";\n\nexport const CollectionEditorSchema = z.object({\n slug: z.string().min(1, \"Required\"),\n name: z.string().min(1, \"Required\"),\n table: z.string().min(1, \"Required\")\n});\n\n\n","\nimport { IconForView } from \"@rebasepro/core\";\nimport { FieldCaption } from \"../../_cms_internals\";\nimport React, { useState } from \"react\";\nimport { useAuthController, useCustomizationController } from \"@rebasepro/core\";\nimport { SearchIconsView } from \"../../_cms_internals\";\nimport type { EntityCollection, PostgresCollection } from \"@rebasepro/types\";\nimport { BooleanSwitchWithLabel, Chip, cls, Container, DebouncedTextField, Dialog, ExpandablePanel, IconButton, Select, SelectItem, TextField, Tooltip, Typography , iconSize } from \"@rebasepro/ui\";\nimport { HistoryIcon, SearchIcon } from \"lucide-react\";\nimport { Field, getIn, useFormex } from \"@rebasepro/formex\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\nimport { singular, toSnakeCase } from \"@rebasepro/utils\";\n\nexport function GeneralSettingsForm({\n isNewCollection,\n existingPaths,\n existingIds,\n parentCollection\n}: {\n isNewCollection: boolean;\n existingPaths?: string[];\n existingIds?: string[];\n parentCollection?: EntityCollection;\n}) {\n\n const {\n values,\n setFieldValue,\n handleChange,\n touched,\n errors,\n setFieldTouched,\n submitCount\n } = useFormex<PostgresCollection>();\n\n const [iconDialogOpen, setIconDialogOpen] = useState(false);\n\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const configController = useCollectionsConfigController();\n\n const updateDatabaseId = (databaseId: string) => {\n setFieldValue(\"databaseId\", databaseId ?? undefined);\n }\n\n const updateName = (name: string) => {\n setFieldValue(\"name\", name);\n\n const pathTouched = getIn(touched, \"table\");\n if (!pathTouched && isNewCollection && name) {\n setFieldValue(\"table\", toSnakeCase(name));\n }\n\n const idTouched = getIn(touched, \"slug\");\n if (!idTouched && isNewCollection && name) {\n setFieldValue(\"slug\", toSnakeCase(name));\n }\n\n const singularNameTouched = getIn(touched, \"singularName\");\n if (!singularNameTouched && isNewCollection && name) {\n setFieldValue(\"singularName\", singular(name));\n }\n };\n\n const collectionIcon = <IconForView collectionOrView={values}/>;\n const isSubcollection = !!parentCollection;\n const showErrors = submitCount > 0;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <div className=\"flex flex-row gap-2 items-center\">\n <Typography variant={!isNewCollection ? \"h5\" : \"h4\"} className={\"flex-grow\"}>\n {isNewCollection ? \"New collection\" : `${values?.name} collection`}\n </Typography>\n <DefaultDatabaseField databaseId={values.databaseId}\n disabled={configController?.readOnly}\n onDatabaseIdUpdate={updateDatabaseId}/>\n\n <Tooltip title={\"Change icon\"}\n asChild={true}>\n <IconButton\n shape={\"square\"}\n disabled={configController?.readOnly}\n onClick={() => setIconDialogOpen(true)}>\n {collectionIcon}\n </IconButton>\n </Tooltip>\n </div>\n\n {parentCollection && <Chip colorScheme={\"teal\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n </div>\n\n <fieldset disabled={configController?.readOnly} className=\"contents\">\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n {/* Name */}\n <div className={\"col-span-12\"}>\n <TextField\n value={values.name ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => updateName(e.target.value)}\n label={\"Name\"}\n autoFocus={true}\n required\n error={showErrors && Boolean(errors.name)}/>\n <FieldCaption error={touched.name && Boolean(errors.name)}>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of this collection, usually a plural name (e.g. Products)\"}\n </FieldCaption>\n </div>\n\n {/* Table name */}\n <div className={cls(\"col-span-12\")}>\n <Field name={\"table\"}\n as={DebouncedTextField}\n label={\"Table name\"}\n required\n error={showErrors && Boolean(errors.table)}/>\n\n <FieldCaption error={touched.table && Boolean(errors.table)}>\n {touched.table && Boolean(errors.table)\n ? errors.table\n : isSubcollection ? \"Relative path to the parent (no need to include the parent path)\" : \"PostgreSQL table name for this collection\"}\n </FieldCaption>\n </div>\n\n\n {/* Singular Name */}\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.singularName)}\n name={\"singularName\"}\n aria-describedby={\"singularName-helper\"}\n onChange={(e) => {\n setFieldTouched(\"singularName\", true);\n return handleChange(e);\n }}\n value={values.singularName ?? \"\"}\n label={\"Singular name\"}/>\n <FieldCaption error={showErrors && Boolean(errors.singularName)}>\n {showErrors && Boolean(errors.singularName) ? errors.singularName : \"Optionally define a singular name for your entities\"}\n </FieldCaption>\n </div>\n\n {/* Description */}\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.description)}\n name=\"description\"\n value={values.description ?? \"\"}\n onChange={handleChange}\n multiline\n minRows={2}\n aria-describedby=\"description-helper-text\"\n label=\"Description\"\n />\n <FieldCaption error={showErrors && Boolean(errors.description)}>\n {showErrors && Boolean(errors.description) ? errors.description : \"Description of the collection, you can use markdown\"}\n </FieldCaption>\n </div>\n\n {/* Collection ID */}\n <div className={\"col-span-12\"}>\n <DebouncedTextField\n name={\"slug\"}\n value={values.slug ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => setFieldValue(\"slug\", e.target.value)}\n disabled={!isNewCollection}\n label={\"Collection ID\"}\n error={showErrors && Boolean(errors.slug)}/>\n <FieldCaption error={touched.slug && Boolean(errors.slug)}>\n {touched.slug && Boolean(errors.slug) ? errors.slug : \"This ID identifies this collection. Typically the same as the path.\"}\n </FieldCaption>\n </div>\n\n </div>\n\n {/* Advanced Settings */}\n {/* eslint-disable-next-line no-constant-condition */}\n {false ? <ExpandablePanel\n title={<Typography variant=\"subtitle2\">Advanced settings</Typography>}\n initiallyExpanded={false}\n className=\"mt-4\"\n innerClassName=\"p-4 flex flex-col gap-4\"\n >\n {/* HistoryIcon revisions */}\n <div>\n <BooleanSwitchWithLabel\n position={\"start\"}\n allowIndeterminate={true}\n label={<span className=\"flex items-center gap-2\"><HistoryIcon size={iconSize.smallest}/>{values.history === null || values.history === undefined ? \"Document history revisions enabled if enabled globally\" : (\n values.history ? \"Document history revisions ENABLED\" : \"Document history revisions NOT enabled\"\n )}</span>}\n onValueChange={(v) => setFieldValue(\"history\", v)}\n value={values.history ?? null}\n />\n <FieldCaption>\n When enabled, each document in this collection will have a history of changes.\n This is useful for auditing purposes. The data is stored in a subcollection of the document\n in your database, called <b>__history</b>.\n </FieldCaption>\n </div>\n\n </ExpandablePanel> : null}\n </fieldset>\n\n <div style={{ height: \"52px\" }}/>\n\n <Dialog\n open={iconDialogOpen}\n onOpenChange={setIconDialogOpen}\n maxWidth={\"xl\"}\n fullWidth\n >\n <div className={\"p-4 overflow-auto min-h-[200px]\"}>\n <SearchIconsView selectedIcon={typeof values.icon === \"string\" ? values.icon : undefined}\n onIconSelected={(icon: string) => {\n setIconDialogOpen(false);\n setFieldValue(\"icon\", icon);\n }}/>\n </div>\n </Dialog>\n\n </Container>\n </div>\n );\n}\n\nfunction DefaultDatabaseField({\n databaseId,\n disabled = false,\n onDatabaseIdUpdate\n}: { databaseId?: string, disabled?: boolean, onDatabaseIdUpdate: (databaseId: string) => void }) {\n\n return <Tooltip title={\"Database ID\"}\n side={\"top\"}\n align={\"start\"}>\n <TextField size={\"small\"}\n invisible={true}\n inputClassName={\"text-end\"}\n disabled={disabled}\n value={databaseId ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => onDatabaseIdUpdate(e.target.value)}\n placeholder={\"(default)\"}></TextField>\n </Tooltip>\n}\n","import { cls, ToggleButtonGroup, Typography } from \"@rebasepro/ui\";\nimport { ColumnsIcon, PanelLeftIcon, SquareIcon } from \"lucide-react\";\n\nexport function LayoutModeSwitch({\n value,\n onChange,\n className\n}: {\n value: \"side_panel\" | \"full_screen\" | \"split\";\n onChange: (value: \"side_panel\" | \"full_screen\" | \"split\") => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Document view</Typography>\n <div className={\"my-2\"}>\n <ToggleButtonGroup\n value={value}\n onValueChange={onChange}\n options={[\n {\n value: \"side_panel\",\n label: \"Side panel\",\n icon: <ColumnsIcon/>\n },\n {\n value: \"full_screen\",\n label: \"Full screen\",\n icon: <SquareIcon/>\n },\n {\n value: \"split\",\n label: \"Split view\",\n icon: <PanelLeftIcon/>\n }\n ]}\n />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Should documents be opened full screen or in an inline side dialog</Typography>\n </div>\n}\n","import { ViewMode } from \"@rebasepro/types\";\nimport { cls, ToggleButtonGroup, Typography } from \"@rebasepro/ui\";\nimport { KanbanIcon, LayoutGridIcon, ListIcon, TableIcon } from \"lucide-react\";\n\nexport function ViewModeSwitch({\n value,\n onChange,\n className\n}: {\n value: ViewMode;\n onChange: (value: ViewMode) => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Default collection view</Typography>\n <div className={\"my-2\"}>\n <ToggleButtonGroup\n value={value}\n onValueChange={onChange}\n options={[\n {\n value: \"list\",\n label: \"List\",\n icon: <ListIcon/>\n },\n {\n value: \"table\",\n label: \"Table\",\n icon: <TableIcon/>\n },\n {\n value: \"cards\",\n label: \"Cards\",\n icon: <LayoutGridIcon/>\n },\n {\n value: \"kanban\",\n label: \"Kanban\",\n icon: <KanbanIcon/>\n }\n ]}\n />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Choose how entities should be displayed by default</Typography>\n </div>\n}\n","\nimport { FieldCaption } from \"../../_cms_internals\";\nimport React, { useMemo, useRef, useState } from \"react\";\nimport { useAuthController, useCustomizationController } from \"@rebasepro/core\";\nimport { EntityCollection, Property } from \"@rebasepro/types\";\nimport { PropertyConfigBadge } from \"../../../components/PropertyConfigBadge\";\nimport { getFieldConfig } from \"../../../components/field_configs\";\nimport { IconButton, Select, SelectItem, Typography, Button , iconSize } from \"@rebasepro/ui\";\nimport { XIcon } from \"lucide-react\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { PropertyFormDialog } from \"./PropertyEditView\";\nimport { unslugify } from \"@rebasepro/utils\";\n\nexport function KanbanConfigSection({\n className,\n forceExpanded\n}: {\n className?: string;\n forceExpanded?: boolean;\n}) {\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const { values, setFieldValue } = useFormex<EntityCollection>();\n const panelRef = useRef<HTMLDivElement>(null);\n const [columnPropertyDialogOpen, setColumnPropertyDialogOpen] = useState(false);\n\n // Get enum string properties (for columnProperty)\n const enumStringProperties = useMemo(() => {\n const result: { key: string; label: string; property: Property }[] = [];\n if (!values.properties) return result;\n\n Object.entries(values.properties).forEach(([key, prop]) => {\n if (prop && \"type\" in prop && prop.type === \"string\" && prop.enum) {\n result.push({\n key,\n label: (prop as Property).name || key,\n property: prop as Property\n });\n }\n });\n return result;\n }, [values.properties]);\n\n const kanbanConfig = values.kanban;\n\n // Check if columnProperty references a non-existent property\n const columnPropertyMissing = Boolean(kanbanConfig?.columnProperty) &&\n !enumStringProperties.some(p => p.key === kanbanConfig?.columnProperty);\n\n // Scroll to section when forceExpanded\n React.useEffect(() => {\n if (forceExpanded && panelRef.current) {\n setTimeout(() => {\n panelRef.current?.scrollIntoView({ behavior: \"smooth\",\nblock: \"center\" });\n }, 100);\n }\n }, [forceExpanded]);\n\n const showCreateButton = !kanbanConfig?.columnProperty || columnPropertyMissing;\n const dialogPropertyKey = columnPropertyMissing && kanbanConfig?.columnProperty\n ? kanbanConfig.columnProperty\n : \"status\";\n const dialogPropertyName = columnPropertyMissing && kanbanConfig?.columnProperty\n ? unslugify(kanbanConfig.columnProperty)\n : \"Status\";\n\n return (\n <div className={className} ref={panelRef}>\n <Select\n key={`column-select-${enumStringProperties.length}`}\n name=\"kanban.columnProperty\"\n label=\"Kanban Column Property\"\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={enumStringProperties.length === 0}\n error={columnPropertyMissing}\n value={kanbanConfig?.columnProperty ?? \"\"}\n onValueChange={(v) => {\n if (v) {\n setFieldValue(\"kanban\", {\n ...kanbanConfig,\n columnProperty: v\n });\n } else {\n setFieldValue(\"kanban\", undefined);\n }\n }}\n renderValue={(value) => {\n if (columnPropertyMissing) {\n return <span className=\"text-red-500\">{value} (not found)</span>;\n }\n const prop = enumStringProperties.find(p => p.key === value);\n if (!prop) return \"Select a property\";\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <div className=\"flex items-center gap-2\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <span>{prop.label}</span>\n </div>\n );\n }}\n endAdornment={kanbanConfig?.columnProperty ? (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setFieldValue(\"kanban\", undefined);\n }}\n >\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n ) : undefined}\n >\n {enumStringProperties.map((prop) => {\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <SelectItem key={prop.key} value={prop.key}>\n <div className=\"flex items-center gap-3\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <div>\n <div>{prop.label}</div>\n <Typography variant=\"caption\" color=\"secondary\">\n {fieldConfig?.name || \"Enum\"}\n </Typography>\n </div>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n <FieldCaption error={columnPropertyMissing}>\n {columnPropertyMissing\n ? `Property \"${kanbanConfig?.columnProperty}\" does not exist or is not an enum string property. Please select a valid property or clear the selection.`\n : enumStringProperties.length === 0\n ? \"No enum string properties found. Add a string property with enum to use Kanban view.\"\n : \"Select a string property with enum values to group entities into columns\"\n }\n </FieldCaption>\n\n {showCreateButton && (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n className=\"ml-3.5 mt-2\"\n onClick={() => setColumnPropertyDialogOpen(true)}\n >\n + Create &quot;{dialogPropertyKey}&quot; property\n </Button>\n <PropertyFormDialog\n open={columnPropertyDialogOpen}\n onCancel={() => setColumnPropertyDialogOpen(false)}\n property={{\n type: \"string\",\n name: dialogPropertyName,\n enum: [\n { id: \"todo\",\nlabel: \"To Do\" },\n { id: \"in_progress\",\nlabel: \"In Progress\" },\n { id: \"done\",\nlabel: \"Done\" }\n ]\n } as Property}\n propertyKey={dialogPropertyKey}\n existingProperty={false}\n autoOpenTypeSelect={false}\n autoUpdateId={false}\n inArray={false}\n allowDataInference={false}\n propertyConfigs={customizationController.propertyConfigs}\n\n existingPropertyKeys={Object.keys(values.properties ?? {})}\n onPropertyChanged={({ id, property }) => {\n const newProperties = {\n ...values.properties,\n [id!]: property\n };\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties ?? {})), id];\n setFieldValue(\"properties\", newProperties);\n setFieldValue(\"propertiesOrder\", newPropertiesOrder);\n setFieldValue(\"kanban\", {\n ...kanbanConfig,\n columnProperty: id\n });\n setColumnPropertyDialogOpen(false);\n }}\n />\n </>\n )}\n </div>\n );\n}\n","\nimport { FieldCaption } from \"../../_cms_internals\";\nimport React, { useMemo, useState } from \"react\";\nimport { useAuthController, useCustomizationController } from \"@rebasepro/core\";\nimport { getFieldConfig } from \"../../../components/field_configs\";\nimport { PropertyConfigBadge } from \"../../../components/PropertyConfigBadge\";\nimport { EntityCollection, Property } from \"@rebasepro/types\";\nimport { BooleanSwitchWithLabel, Container, IconButton, Select, SelectItem, TextField, Typography, Button , iconSize } from \"@rebasepro/ui\";\nimport { XIcon } from \"lucide-react\";\n\nimport { useFormex } from \"@rebasepro/formex\";\nimport { LayoutModeSwitch } from \"./LayoutModeSwitch\";\nimport { ViewModeSwitch } from \"./ViewModeSwitch\";\nimport { KanbanConfigSection } from \"./KanbanConfigSection\";\nimport { PropertyFormDialog } from \"./PropertyEditView\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\nimport { unslugify } from \"@rebasepro/utils\";\n\nexport function DisplaySettingsForm({\n expandKanban\n}: {\n expandKanban?: boolean;\n}) {\n\n const {\n values,\n setFieldValue,\n handleChange,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [orderPropertyDialogOpen, setOrderPropertyDialogOpen] = useState(false);\n\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const configController = useCollectionsConfigController();\n\n // Get text properties (for orderProperty - uses string fractional indexing keys)\n const textProperties = useMemo(() => {\n const result: { key: string; label: string; property: Property; }[] = [];\n if (!values.properties) return result;\n\n Object.entries(values.properties).forEach(([key, prop]) => {\n if (prop && \"type\" in prop && prop.type === \"string\") {\n result.push({\n key,\n label: (prop as Property).name || key,\n property: prop as Property\n });\n }\n });\n return result;\n }, [values.properties]);\n\n const showErrors = submitCount > 0;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <Typography variant={\"h5\"} className={\"flex-grow\"}>\n Display settings\n </Typography>\n </div>\n\n <fieldset disabled={configController?.readOnly} className=\"contents\">\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n {/* Layout Mode (Side dialog vs Full screen) */}\n <LayoutModeSwitch\n className={\"col-span-12\"}\n value={values.openEntityMode ?? \"side_panel\"}\n onChange={(value) => setFieldValue(\"openEntityMode\", value)}/>\n\n {/* View Mode (Table/Cards/Kanban) */}\n <ViewModeSwitch\n className={\"col-span-12\"}\n value={values.defaultViewMode ?? \"table\"}\n onChange={(value) => setFieldValue(\"defaultViewMode\", value)}/>\n\n {/* Kanban Column Property */}\n <KanbanConfigSection className={\"col-span-12\"} forceExpanded={expandKanban}/>\n\n {/* Order Property */}\n <div className={\"col-span-12 mt-4\"}>\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !textProperties.some(p => p.key === values.orderProperty);\n\n return (\n <>\n <Select\n key={`order-select-${textProperties.length}`}\n name=\"orderProperty\"\n label=\"Order Property\"\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={textProperties.length === 0}\n error={orderPropertyMissing}\n value={values.orderProperty ?? \"\"}\n onValueChange={(v) => {\n setFieldValue(\"orderProperty\", v || undefined);\n }}\n renderValue={(value) => {\n if (orderPropertyMissing) {\n return <span className=\"text-red-500\">{value} (not found)</span>;\n }\n const prop = textProperties.find(p => p.key === value);\n if (!prop) return \"Select a property\";\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <div className=\"flex items-center gap-2\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <span>{prop.label}</span>\n </div>\n );\n }}\n endAdornment={values.orderProperty ? (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setFieldValue(\"orderProperty\", undefined);\n }}\n >\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n ) : undefined}\n >\n {textProperties.map((prop) => {\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <SelectItem key={prop.key} value={prop.key}>\n <div className=\"flex items-center gap-3\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <div>\n <div>{prop.label}</div>\n <Typography variant=\"caption\" color=\"secondary\">\n {fieldConfig?.name || \"Text\"}\n </Typography>\n </div>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n <FieldCaption error={orderPropertyMissing}>\n {orderPropertyMissing\n ? `Property \"${values.orderProperty}\" does not exist or is not a text property. Please select a valid property or clear the selection.`\n : textProperties.length === 0\n ? \"No text properties found. Add a text property to enable ordering.\"\n : \"Select a text property to persist the order of items\"\n }\n </FieldCaption>\n </>\n );\n })()}\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !textProperties.some(p => p.key === values.orderProperty);\n const showCreateButton = !values.orderProperty || orderPropertyMissing;\n\n const dialogPropertyKey = orderPropertyMissing && values.orderProperty\n ? values.orderProperty\n : \"__order\";\n const dialogPropertyName = orderPropertyMissing && values.orderProperty\n ? unslugify(values.orderProperty)\n : \"Order\";\n\n if (!showCreateButton) return null;\n\n return (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n className=\"ml-3.5 mt-2\"\n onClick={() => setOrderPropertyDialogOpen(true)}\n >\n + Create &quot;{dialogPropertyKey}&quot; property\n </Button>\n <PropertyFormDialog\n open={orderPropertyDialogOpen}\n onCancel={() => setOrderPropertyDialogOpen(false)}\n property={{\n type: \"string\",\n name: dialogPropertyName,\n disabled: true,\n hideFromCollection: true\n }}\n propertyKey={dialogPropertyKey}\n existingProperty={false}\n autoOpenTypeSelect={false}\n autoUpdateId={false}\n inArray={false}\n allowDataInference={false}\n propertyConfigs={customizationController.propertyConfigs}\n\n existingPropertyKeys={Object.keys(values.properties ?? {})}\n onPropertyChanged={({ id, property }) => {\n const newProperties = {\n ...values.properties,\n [id!]: property\n };\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties ?? {})), id];\n setFieldValue(\"properties\", newProperties);\n setFieldValue(\"propertiesOrder\", newPropertiesOrder);\n setFieldValue(\"orderProperty\", id);\n setOrderPropertyDialogOpen(false);\n }}\n />\n </>\n );\n })()}\n </div>\n\n {/* Default row size */}\n <div className={\"col-span-12\"}>\n <Select\n name=\"defaultSize\"\n fullWidth={true}\n label=\"Default row size\"\n position={\"item-aligned\"}\n onChange={handleChange}\n value={values.defaultSize ?? \"\"}\n renderValue={(value: string) => value.toUpperCase()}\n >\n {[\"xs\", \"s\", \"m\", \"l\", \"xl\"].map((value) => (\n <SelectItem\n key={`size-select-${value}`}\n value={value}>\n {value.toUpperCase()}\n </SelectItem>\n ))}\n </Select>\n </div>\n\n {/* Side dialog width */}\n <div className={\"col-span-12\"}>\n <TextField\n name={\"sideDialogWidth\"}\n type={\"number\"}\n aria-describedby={\"sideDialogWidth-helper\"}\n onChange={(e) => {\n const value = e.target.value;\n if (!value) {\n setFieldValue(\"sideDialogWidth\", null);\n } else if (!isNaN(Number(value))) {\n setFieldValue(\"sideDialogWidth\", Number(value));\n }\n }}\n endAdornment={<IconButton\n size={\"small\"}\n onClick={() => {\n setFieldValue(\"sideDialogWidth\", null);\n }}\n disabled={!values.sideDialogWidth}>\n <XIcon size={iconSize.small}/>\n </IconButton>}\n value={values.sideDialogWidth ?? \"\"}\n label={\"Side dialog width\"}/>\n <FieldCaption>\n Optionally define the width (in pixels) of entities side dialog. Default is 768px\n </FieldCaption>\n </div>\n\n {/* Inline editing */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label={values.inlineEditing === undefined || values.inlineEditing ? \"Data can be edited directly in the table view\" : \"Data can be edited only in the form view\"}\n onValueChange={(v) => setFieldValue(\"inlineEditing\", v)}\n value={values.inlineEditing === undefined ? true : values.inlineEditing}\n />\n <FieldCaption>\n Allow editing data directly in the table view, without opening the form view.\n </FieldCaption>\n </div>\n\n {/* Include JSON view */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label={values.includeJsonView === undefined || values.includeJsonView ? \"Include JSON view\" : \"Do not include JSON view\"}\n onValueChange={(v) => setFieldValue(\"includeJsonView\", v)}\n value={values.includeJsonView === undefined ? true : values.includeJsonView}\n />\n <FieldCaption>\n Allows removing the form view JSON tab if you think it is confusing for your users.\n </FieldCaption>\n </div>\n\n </div>\n </fieldset>\n\n <div style={{ height: \"52px\" }}/>\n\n </Container>\n </div>\n );\n}\n","import { useSnackbarController } from \"@rebasepro/core\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@rebasepro/ui\";\nimport { CopyIcon } from \"lucide-react\";\nimport React from \"react\";\nimport JSON5 from \"json5\";\nimport { Highlight, themes } from \"prism-react-renderer\"\nimport { camelCase } from \"./utils/strings\";\nimport { clone } from \"@rebasepro/formex\";\nimport { isEmptyObject } from \"@rebasepro/utils\";\n\nexport function GetCodeDialog({\n collection,\n onOpenChange,\n open\n}: { onOpenChange: (open: boolean) => void, collection: EntityCollection, open: boolean }) {\n\n const snackbarController = useSnackbarController();\n\n const code = collection\n ? \"import { EntityCollection } from \\\"@rebasepro/core\\\";\\n\\nconst \" + (collection?.name ? camelCase(collection.name) : \"my\") + \"Collection:EntityCollection = \" + JSON5.stringify(collectionToCode({ ...collection }), null, \"\\t\")\n : \"No collection selected\";\n return <Dialog open={open}\n onOpenChange={onOpenChange}\n maxWidth={\"4xl\"}>\n <DialogTitle variant={\"h6\"}>Code for {collection.name}</DialogTitle>\n <DialogContent>\n\n <Typography variant={\"body2\"} className={\"my-4 mb-8\"}>\n If you want to customise the collection in code, you can add this collection code to your CMS\n app configuration.\n More info in the <a\n rel=\"noopener noreferrer\"\n href={\"https://rebase.pro/docs/cloud/quickstart\"}>docs</a>.\n </Typography>\n <Highlight\n theme={themes.vsDark}\n code={code}\n language=\"typescript\"\n >\n {({\n className,\n style,\n tokens,\n getLineProps,\n getTokenProps\n }) => (\n <pre style={style} className={\"p-4 rounded-xs text-sm\"}>\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })}/>\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n\n </DialogContent>\n <DialogActions>\n <Button\n variant={\"text\"}\n size={\"small\"}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n snackbarController.open({\n type: \"success\",\n message: \"Copied\"\n })\n return navigator.clipboard.writeText(code);\n }}>\n <CopyIcon/>\n CopyIcon to clipboard\n </Button>\n <Button onClick={() => onOpenChange(false)}>Close</Button>\n </DialogActions>\n </Dialog>;\n}\n\nfunction collectionToCode(collection: EntityCollection): object {\n\n const propertyCleanup = (value: unknown): unknown => {\n if (value === undefined || value === null) {\n return value;\n }\n const valueCopy = clone(value);\n if (typeof valueCopy === \"function\") {\n return valueCopy;\n }\n if (Array.isArray(valueCopy)) {\n return valueCopy.map((v: unknown) => propertyCleanup(v));\n }\n if (typeof valueCopy === \"object\") {\n if (valueCopy === null)\n return valueCopy;\n const obj = valueCopy as Record<string, any>;\n Object.keys(obj).forEach((key) => {\n if (!isEmptyObject(obj)) {\n const childRes = propertyCleanup(obj[key]);\n if (childRes !== null && childRes !== undefined && childRes !== false && !isEmptyObject(childRes)) {\n obj[key] = childRes;\n } else {\n delete obj[key];\n }\n }\n });\n delete obj.resolved;\n delete obj.propertiesOrder;\n delete obj.propertyConfig;\n\n }\n\n return valueCopy;\n }\n\n return {\n id: collection.slug,\n name: collection.name,\n singularName: collection.singularName,\n path: collection.slug,\n description: collection.description,\n\n icon: collection.icon,\n group: collection.group,\n filter: collection.filter,\n sort: collection.sort,\n properties: Object.entries({\n ...(collection.properties ?? {})\n })\n .map(([key, value]) => ({\n [key]: propertyCleanup(value)\n }))\n .reduce((a, b) => ({\n ...a,\n ...b\n }), {})\n // subcollections: (collection.subcollections ?? []).map(collectionToCode)\n }\n\n}\n","\nimport React, { useEffect, useMemo, useState } from \"react\";\n\nimport { Field, getIn, useFormex } from \"@rebasepro/formex\";\nimport {\n useLargeLayout,\n useSnackbarController\n} from \"@rebasepro/core\";\nimport { ErrorBoundary } from \"@rebasepro/ui\";\nimport { PlusIcon, CodeIcon, FileSearchIcon } from \"lucide-react\";\nimport { EntityCollection, MapProperty, Properties, Property, PropertyConfig, User } from \"@rebasepro/types\";\nimport { isPropertyBuilder } from \"@rebasepro/common\";\nimport { Button, CircularProgress, cls, DebouncedTextField, defaultBorderMixin, IconButton, Tooltip, Typography } from \"@rebasepro/ui\";\n\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"./util\";\nimport { OnPropertyChangedParams, PropertyForm, PropertyFormDialog } from \"./PropertyEditView\";\nimport { PropertyTree } from \"./PropertyTree\";\nimport { GetCodeDialog } from \"./GetCodeDialog\";\nimport { useAIModifiedPaths } from \"./AIModifiedPathsContext\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\n\ntype PropertyOrBuilder = Property | any;\n\ntype CollectionEditorFormProps = {\n showErrors: boolean;\n isNewCollection: boolean;\n propertyErrorsRef?: React.MutableRefObject<any>;\n onPropertyError: (propertyKey: string, namespace: string | undefined, error?: Record<string, any>) => void;\n setDirty?: (dirty: boolean) => void;\n reservedGroups?: string[];\n extraIcon: React.ReactNode | any;\n getUser?: (uid: string) => User | null;\n getData?: () => Promise<object[]>;\n doCollectionInference?: (collection: EntityCollection) => Promise<Partial<EntityCollection> | null> | undefined;\n propertyConfigs: Record<string, PropertyConfig>;\n\n};\n\nexport function CollectionPropertiesEditorForm({\n showErrors,\n isNewCollection,\n propertyErrorsRef,\n onPropertyError,\n setDirty,\n reservedGroups,\n extraIcon,\n getUser,\n getData,\n doCollectionInference,\n propertyConfigs\n\n}: CollectionEditorFormProps) {\n\n const {\n values,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n errors,\n dirty\n } = useFormex<EntityCollection>();\n\n const snackbarController = useSnackbarController();\n const configController = useCollectionsConfigController();\n\n const largeLayout = useLargeLayout();\n const asDialog = !largeLayout\n\n // index of the selected property within the namespace\n const [selectedPropertyIndex, setSelectedPropertyIndex] = useState<number | undefined>();\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n const [codeDialogOpen, setCodeDialogOpen] = useState<boolean>(false);\n\n const [inferringProperties, setInferringProperties] = useState<boolean>(false);\n\n const [newPropertyDialogOpen, setNewPropertyDialogOpen] = useState<boolean>(false);\n const [inferredPropertyKeys, setInferredPropertyKeys] = useState<string[]>([]);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n useEffect(() => {\n if (setDirty)\n setDirty(dirty);\n }, [dirty]);\n\n const inferPropertiesFromData = doCollectionInference\n ? (): void => {\n if (!doCollectionInference || configController?.readOnly)\n return;\n\n setInferringProperties(true);\n\n console.debug(\"CollectionEditor: inferring properties from data\", values);\n // @ts-ignore\n doCollectionInference(values)\n .then((newCollection) => {\n\n if (!newCollection) {\n snackbarController.open({\n type: \"error\",\n message: \"Could not infer properties from data\"\n });\n return;\n }\n\n // Helper function to find all new property keys including nested ones\n const findNewPropertyKeys = (\n existingProps: Record<string, PropertyOrBuilder> | undefined,\n newProps: Record<string, PropertyOrBuilder> | undefined,\n namespace?: string\n ): string[] => {\n if (!newProps) return [];\n const keys: string[] = [];\n\n for (const key of Object.keys(newProps)) {\n const fullKey = namespace ? `${namespace}.${key}` : key;\n const existingProp = existingProps?.[key];\n const newProp = newProps[key];\n\n if (!existingProp) {\n // This is a completely new property\n keys.push(fullKey);\n } else if (\n typeof newProp === \"object\" &&\n \"type\" in newProp &&\n newProp.dataType === \"map\" &&\n newProp.properties\n ) {\n // This is a map property, check for new nested properties\n const existingMapProps = typeof existingProp === \"object\" &&\n \"type\" in existingProp &&\n existingProp.dataType === \"map\"\n ? (existingProp as MapProperty).properties\n : undefined;\n keys.push(...findNewPropertyKeys(existingMapProps, newProp.properties as Record<string, PropertyOrBuilder>, fullKey));\n }\n }\n return keys;\n };\n\n // Helper function to add only new properties without overwriting existing ones\n // This preserves existing property configurations while adding missing nested properties\n const addNewPropertiesOnly = (\n existingProps: Record<string, PropertyOrBuilder> | undefined,\n newProps: Record<string, PropertyOrBuilder> | undefined\n ): Record<string, PropertyOrBuilder> => {\n if (!newProps) return existingProps ?? {};\n if (!existingProps) return newProps;\n\n const result = { ...existingProps };\n\n for (const key of Object.keys(newProps)) {\n const existingProp = existingProps[key];\n const newProp = newProps[key];\n\n if (!existingProp) {\n // This property doesn't exist, add it\n result[key] = newProp;\n } else if (\n typeof existingProp === \"object\" &&\n \"type\" in existingProp &&\n existingProp.dataType === \"map\" &&\n typeof newProp === \"object\" &&\n \"type\" in newProp &&\n newProp.dataType === \"map\" &&\n newProp.properties\n ) {\n // Both are map properties, recursively add new nested properties\n // Only if the existing map has properties, merge them; otherwise keep existing as-is\n const existingMapProps = (existingProp as MapProperty).properties as Record<string, PropertyOrBuilder> | undefined;\n if (existingMapProps) {\n result[key] = {\n ...existingProp,\n properties: addNewPropertiesOnly(\n existingMapProps,\n newProp.properties as Record<string, PropertyOrBuilder>\n )\n };\n }\n // If existingProp doesn't have properties, keep it as-is (don't overwrite with inferred)\n }\n // Otherwise, keep the existing property as-is (don't overwrite)\n }\n\n return result;\n };\n\n // Add only new properties from inferred collection without replacing existing ones\n const updatedProperties = addNewPropertiesOnly(\n values.properties ?? {},\n newCollection.properties as Record<string, PropertyOrBuilder>\n ) as { [key: string]: PropertyOrBuilder };\n\n // Find all new property keys including nested ones\n const allNewPropertyKeys = findNewPropertyKeys(\n values.properties,\n newCollection.properties as Record<string, PropertyOrBuilder>\n );\n\n // Find new top-level property keys for the properties order\n const newTopLevelPropertyKeys = (newCollection.properties ? Object.keys(newCollection.properties) : [])\n .filter((propertyKey) => !values.properties[propertyKey]);\n\n // Check if there are any changes (new properties or modified nested properties)\n if (allNewPropertyKeys.length === 0) {\n snackbarController.open({\n type: \"info\",\n message: \"No new properties found in existing data\"\n });\n return;\n }\n\n // Update properties order: keep existing order and append new keys at the beginning\n // Use Object.keys from updatedProperties to ensure all properties are included\n const allExistingKeys = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const updatedPropertiesOrder = [\n ...newTopLevelPropertyKeys,\n ...allExistingKeys.filter(key => !newTopLevelPropertyKeys.includes(key))\n ];\n\n setFieldValue(\"properties\", updatedProperties, false);\n updatePropertiesOrder(updatedPropertiesOrder);\n setInferredPropertyKeys(allNewPropertyKeys);\n\n snackbarController.open({\n type: \"success\",\n message: `Added ${allNewPropertyKeys.length} new ${allNewPropertyKeys.length === 1 ? \"property\" : \"properties\"}`\n });\n })\n .finally(() => {\n setInferringProperties(false);\n })\n }\n : undefined;\n\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"] ?? getIn(values, namespaceToPropertiesOrderPath());\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n };\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n if (configController?.readOnly) return;\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(idToPropertiesPath(fullId), undefined, false);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n if (currentPropertiesOrder) {\n const newPropertiesOrder = currentPropertiesOrder.filter((p) => p !== propertyKey);\n updatePropertiesOrder(newPropertiesOrder, namespace);\n }\n\n setNewPropertyDialogOpen(false);\n\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n if (configController?.readOnly) return;\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n const onPropertyCreated = ({\n id,\n property\n }: {\n id?: string,\n property: Property\n }) => {\n if (configController?.readOnly) return;\n if (!id) {\n throw Error(\"Need to include an ID when creating a new property\")\n }\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties)), id];\n updatePropertiesOrder(newPropertiesOrder);\n\n setNewPropertyDialogOpen(false);\n if (largeLayout) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n if (id) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n\n };\n\n const onPropertyErrorInternal = (id: string, namespace?: string, error?: Record<string, any>) => {\n const propertyPath = id ? getFullId(id, namespace) : undefined;\n console.debug(\"onPropertyErrorInternal\", {\n id,\n namespace,\n error,\n propertyPath\n });\n if (propertyPath) {\n const hasError = error && Object.keys(error).length > 0;\n onPropertyError(id, namespace, hasError ? error : undefined);\n setFieldError(idToPropertiesPath(propertyPath), hasError ? \"Property error\" : undefined);\n }\n }\n\n const closePropertyDialog = () => {\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n };\n\n const initialErrors = selectedPropertyKey && propertyErrorsRef?.current?.properties ? propertyErrorsRef.current.properties[selectedPropertyKey] : undefined;\n\n const emptyCollection = (values?.propertiesOrder === undefined || values.propertiesOrder.length === 0)\n && (!values?.properties || Object.keys(values.properties).length === 0);\n\n const usedPropertiesOrder = (values.propertiesOrder\n ? values.propertiesOrder\n : Object.keys(values.properties)) as string[];\n\n const owner = useMemo(() => values.ownerId && getUser ? getUser(values.ownerId) : null, [getUser, values.ownerId]);\n\n // Get AI generation counter for key to force remount on AI changes\n const aiModifiedPaths = useAIModifiedPaths();\n const generationCounter = aiModifiedPaths?.generationCounter ?? 0;\n\n const onPropertyClick = (propertyKey: string, namespace?: string) => {\n console.debug(\"CollectionEditor: onPropertyClick\", {\n propertyKey,\n namespace\n });\n setSelectedPropertyIndex(usedPropertiesOrder.indexOf(propertyKey));\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n };\n\n const body = (\n <div className={\"grid grid-cols-12 gap-2 h-full bg-surface dark:bg-surface-dark\"}>\n <div className={cls(\n \"bg-surface-50 dark:bg-surface-900\",\n \"p-4 md:p-8\",\n \"col-span-12 lg:col-span-5 h-full overflow-auto\",\n !asDialog && \"border-r \" + defaultBorderMixin\n )}>\n\n <div className=\"flex my-2\">\n\n <div className=\"grow mb-4\">\n\n <Field\n name={\"name\"}\n as={DebouncedTextField}\n invisible={true}\n className=\"-ml-1\"\n inputClassName=\"text-2xl font-headers\"\n placeholder={\"Collection name\"}\n size={\"small\"}\n required\n error={Boolean(errors?.name)}/>\n\n {owner &&\n <Typography variant={\"body2\"}\n className={\"ml-2\"}\n color={\"secondary\"}>\n Created by {owner.displayName}\n </Typography>}\n </div>\n\n {extraIcon && <div className=\"ml-4\">\n {extraIcon}\n </div>}\n\n <div className=\"ml-4 flex flex-row gap-2 items-center flex-shrink-0\">\n {/* <Tooltip title={\"Get the code for this collection\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={() => setCodeDialogOpen(true)}>\n <CodeIcon />\n </IconButton>\n </Tooltip> */}\n {inferPropertiesFromData && <Tooltip title={\"Add new properties based on data\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={inferPropertiesFromData}>\n {inferringProperties ? <CircularProgress size={\"small\"}/> : <FileSearchIcon/>}\n </IconButton>\n </Tooltip>}\n <Tooltip title={\"Add new property\"}\n asChild={true}>\n <Button\n disabled={configController?.readOnly}\n onClick={() => setNewPropertyDialogOpen(true)}>\n <PlusIcon/>\n </Button>\n </Tooltip>\n </div>\n </div>\n\n <ErrorBoundary>\n <PropertyTree\n className={\"mt-2\"}\n inferredPropertyKeys={inferredPropertyKeys}\n selectedPropertyKey={selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined}\n properties={values.properties}\n additionalFields={values.additionalFields}\n propertiesOrder={usedPropertiesOrder}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={(isNewCollection || (inferredPropertyKeys && inferredPropertyKeys.length > 0)) && !configController?.readOnly ? deleteProperty : undefined}\n\n errors={errors}/>\n </ErrorBoundary>\n\n <Button className={\"mt-4 xl:mt-8 w-full\"}\n variant=\"filled\"\n color=\"neutral\"\n disabled={configController?.readOnly}\n onClick={() => setNewPropertyDialogOpen(true)}\n startIcon={<PlusIcon/>}>\n Add new property\n </Button>\n </div>\n\n {!asDialog &&\n <div className={\"col-span-12 lg:col-span-7 p-4 md:py-8 md:px-4 h-full overflow-auto\"}>\n <div\n className=\"sticky top-8 min-h-full w-full flex flex-col justify-center\">\n\n {selectedPropertyFullId &&\n selectedProperty &&\n !isPropertyBuilder(selectedProperty) &&\n <PropertyForm\n inArray={false}\n key={`edit_view_${selectedPropertyIndex}_${generationCounter}`}\n existingProperty={!isNewCollection}\n autoUpdateId={false}\n allowDataInference={!isNewCollection}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n\n />}\n\n {!selectedProperty &&\n <div className={\"w-full flex flex-col items-center justify-center h-full gap-4\"}>\n <Typography variant={\"label\"} className=\"\">\n {emptyCollection\n ? \"Now you can add your first property\"\n : \"Select a property to edit it\"}\n </Typography>\n <Button\n disabled={configController?.readOnly}\n onClick={() => setNewPropertyDialogOpen(true)}\n >\n <PlusIcon/>\n Add new property\n </Button>\n </div>}\n\n {selectedProperty && isPropertyBuilder(selectedProperty) &&\n <Typography variant={\"label\"} className=\"flex items-center justify-center\">\n {\"This property is defined as a property builder in code\"}\n </Typography>}\n </div>\n </div>}\n\n {asDialog && <PropertyFormDialog\n inArray={false}\n open={selectedPropertyIndex !== undefined}\n key={`edit_view_${selectedPropertyIndex}_${generationCounter}`}\n autoUpdateId={!selectedProperty}\n allowDataInference={!isNewCollection}\n existingProperty={true}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n\n onCancel={closePropertyDialog}\n onOkClicked={asDialog\n ? closePropertyDialog\n : undefined\n }/>}\n\n </div>);\n\n return (<>\n\n {body}\n\n {/* This is the dialog used for new properties*/}\n <PropertyFormDialog\n inArray={false}\n existingProperty={false}\n autoOpenTypeSelect={true}\n autoUpdateId={true}\n forceShowErrors={showErrors}\n open={newPropertyDialogOpen}\n onCancel={() => setNewPropertyDialogOpen(false)}\n onPropertyChanged={onPropertyCreated}\n getData={getData}\n allowDataInference={!isNewCollection}\n propertyConfigs={propertyConfigs}\n existingPropertyKeys={values.propertiesOrder as string[]}/>\n\n <ErrorBoundary>\n <GetCodeDialog\n collection={values}\n open={codeDialogOpen}\n onOpenChange={setCodeDialogOpen}/>\n </ErrorBoundary>\n </>\n );\n}\n","\nimport React, { useState } from \"react\";\nimport { Button, IconButton, Typography, Table, TableHeader, TableCell, TableBody, TableRow, TextField, Select, SelectItem, Container, Dialog, DialogTitle, DialogContent, DialogActions } from \"@rebasepro/ui\";\nimport { Trash2Icon } from \"lucide-react\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { PostgresCollection, Relation } from \"@rebasepro/types\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\n\nexport function CollectionRelationsTab() {\n const { values, setFieldValue } = useFormex<PostgresCollection>();\n const { collections } = useCollectionsConfigController();\n const [editingRelationIndex, setEditingRelationIndex] = useState<number | null>(null);\n const [editingRelationState, setEditingRelationState] = useState<Partial<Relation> | null>(null);\n\n const getTargetSlug = (target: any) => {\n if (typeof target === \"string\") {\n const match = target.match(/\\(\\)\\s*=>\\s*([a-zA-Z0-9_]+)/);\n return match ? match[1] : target;\n }\n if (typeof target === \"function\") {\n try {\n // If we attached a slug manually\n if (target.slug) return target.slug;\n const col = target();\n return col?.slug || col?.name || \"\";\n } catch (e) {\n return \"\";\n }\n }\n return \"\";\n };\n\n const relations = values.relations || [];\n\n const handleDelete = (index: number) => {\n const newRelations = [...relations];\n newRelations.splice(index, 1);\n setFieldValue(\"relations\", newRelations);\n };\n\n const handleSave = () => {\n if (!editingRelationState) return;\n\n const newRelations = [...relations];\n if (editingRelationIndex === -1) {\n newRelations.push(editingRelationState as Relation);\n } else if (editingRelationIndex !== null) {\n newRelations[editingRelationIndex] = editingRelationState as Relation;\n }\n setFieldValue(\"relations\", newRelations);\n\n setEditingRelationIndex(null);\n setEditingRelationState(null);\n };\n\n const handleCancel = () => {\n setEditingRelationIndex(null);\n setEditingRelationState(null);\n };\n\n return (\n <div className=\"overflow-auto my-auto h-full w-full\">\n <Container maxWidth=\"4xl\" className=\"flex flex-col gap-4 p-8 m-auto h-full\">\n <div className=\"flex items-center justify-between mb-8\">\n <Typography variant=\"h5\">Relations</Typography>\n <Button variant=\"filled\" color=\"neutral\" onClick={() => {\n setEditingRelationIndex(-1);\n setEditingRelationState({ relationName: \"\",\ntarget: \"\" as unknown as Relation[\"target\"],\ncardinality: \"many\",\ndirection: \"owning\" });\n }}>\n ADD RELATION\n </Button>\n </div>\n\n {relations.length > 0 ? (\n <div className=\"w-full overflow-auto border dark:border-surface-800 rounded-lg\">\n <Table className=\"w-full\">\n <TableHeader>\n <TableCell header className=\"w-16\"></TableCell>\n <TableCell header>Name</TableCell>\n <TableCell header>Target</TableCell>\n <TableCell header>Cardinality</TableCell>\n <TableCell header>Direction</TableCell>\n </TableHeader>\n <TableBody>\n {relations.map((relation, index) => (\n <TableRow key={index}\n className=\"cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-800\"\n onClick={() => {\n setEditingRelationIndex(index);\n setEditingRelationState(relation);\n }}>\n <TableCell style={{ width: \"64px\" }}>\n <IconButton size=\"small\" onClick={(e) => {\n e.stopPropagation();\n handleDelete(index);\n }}>\n <Trash2Icon/>\n </IconButton>\n </TableCell>\n <TableCell className=\"font-medium\">{relation.relationName}</TableCell>\n <TableCell>{getTargetSlug(relation.target) || \"Function\"}</TableCell>\n <TableCell>{relation.cardinality}</TableCell>\n <TableCell>{relation.direction || \"owning\"}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n ) : (\n <div className=\"flex-grow flex flex-col border border-dashed dark:border-surface-700 rounded-lg items-center justify-center text-text-disabled py-20\">\n <Typography variant=\"body2\" className=\"mb-4\">No relations defined for this collection.</Typography>\n <Button variant=\"text\" onClick={() => {\n setEditingRelationIndex(-1);\n setEditingRelationState({ relationName: \"\",\ntarget: \"\" as unknown as Relation[\"target\"],\ncardinality: \"many\",\ndirection: \"owning\" });\n }}>Create your first relation</Button>\n </div>\n )}\n\n <Dialog open={!!editingRelationState} onOpenChange={(open) => !open && handleCancel()} maxWidth=\"2xl\">\n {editingRelationState && (\n <>\n <DialogTitle className=\"flex justify-between items-center w-full\" variant=\"h6\">\n {editingRelationIndex === -1 ? \"New Relation\" : \"Edit Relation\"}\n </DialogTitle>\n <DialogContent includeMargin={false} className=\"p-4 md:p-6 border-t dark:border-surface-700 bg-surface-50 dark:bg-surface-800\">\n <div className=\"flex flex-col gap-4 max-w-2xl mx-auto\">\n <TextField\n label=\"Relation Name\"\n name=\"relationName\"\n placeholder=\"e.g. posts\"\n value={editingRelationState.relationName || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nrelationName: e.target.value } : null)}\n />\n <Select\n fullWidth\n label=\"Target Collection\"\n value={getTargetSlug(editingRelationState.target)}\n onValueChange={(val) => {\n setEditingRelationState(prev => {\n if (!prev) return null;\n const targetFn = () => collections?.find(c => c.slug === val) || { slug: val };\n (targetFn as { slug?: string }).slug = val;\n return { ...prev,\ntarget: targetFn as unknown as Relation[\"target\"] };\n });\n }}\n >\n {collections?.map(col => (\n <SelectItem key={col.slug} value={col.slug}>{col.name || col.slug}</SelectItem>\n ))}\n </Select>\n <Select\n fullWidth\n label=\"Cardinality\"\n value={editingRelationState.cardinality || \"many\"}\n onValueChange={(val) => setEditingRelationState(prev => prev ? { ...prev,\ncardinality: val as Relation[\"cardinality\"] } : null)}\n >\n <SelectItem value=\"many\">Many</SelectItem>\n <SelectItem value=\"one\">One</SelectItem>\n </Select>\n <Select\n fullWidth\n label=\"Direction\"\n value={editingRelationState.direction || \"owning\"}\n onValueChange={(val) => setEditingRelationState(prev => prev ? { ...prev,\ndirection: val as Relation[\"direction\"] } : null)}\n >\n <SelectItem value=\"owning\">Owning</SelectItem>\n <SelectItem value=\"inverse\">Inverse</SelectItem>\n </Select>\n\n {editingRelationState.cardinality === \"many\" && editingRelationState.direction === \"owning\" && (\n <div className=\"flex flex-col gap-4 mt-4 pt-4 border-t dark:border-surface-800\">\n <Typography variant=\"subtitle2\" className=\"text-text-primary\">Intermediate Table</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary -mt-3\">\n Required for many-to-many relationships. This defines the junction table linking both collections.\n </Typography>\n\n <TextField\n label=\"Table Name\"\n name=\"throughTable\"\n placeholder=\"e.g. user_roles\"\n value={editingRelationState.through?.table || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nthrough: { ...(prev.through || { sourceColumn: \"\",\ntargetColumn: \"\" }),\ntable: e.target.value } } : null)}\n />\n <div className=\"flex gap-4\">\n <TextField\n className=\"flex-1\"\n label=\"Source Column\"\n name=\"sourceColumn\"\n placeholder=\"FK to this collection\"\n value={editingRelationState.through?.sourceColumn || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nthrough: { ...(prev.through || { table: \"\",\ntargetColumn: \"\" }),\nsourceColumn: e.target.value } } : null)}\n />\n <TextField\n className=\"flex-1\"\n label=\"Target Column\"\n name=\"targetColumn\"\n placeholder=\"FK to target collection\"\n value={editingRelationState.through?.targetColumn || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nthrough: { ...(prev.through || { table: \"\",\nsourceColumn: \"\" }),\ntargetColumn: e.target.value } } : null)}\n />\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={handleCancel}>Cancel</Button>\n <Button\n variant=\"filled\"\n color=\"primary\"\n onClick={handleSave}\n disabled={!editingRelationState.relationName || !editingRelationState.target}\n >\n Save\n </Button>\n </DialogActions>\n </>\n )}\n </Dialog>\n </Container>\n </div>\n );\n}\n","\nimport React, { useCallback, useState } from \"react\";\nimport { Button, cls, Dialog, DialogActions, DialogContent, DialogTitle, Typography , iconSize } from \"@rebasepro/ui\";\nimport { CodeIcon } from \"lucide-react\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport { validateCollectionJson, CollectionValidationError } from \"../../validateCollectionJson\";\n\nconst EXAMPLE_JSON = `{\n \"id\": \"products\",\n \"name\": \"Products\",\n \"path\": \"products\",\n \"icon\": \"shopping_cart\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"name\": \"Name\",\n \"validation\": { \"required\": true }\n },\n \"price\": {\n \"type\": \"number\",\n \"name\": \"Price\"\n },\n \"available\": {\n \"type\": \"boolean\",\n \"name\": \"Available\"\n }\n }\n}`;\n\nexport interface CollectionJsonImportDialogProps {\n open: boolean;\n onClose: () => void;\n onImport: (collection: EntityCollection) => void;\n}\n\nexport function CollectionJsonImportDialog({\n open,\n onClose,\n onImport\n}: CollectionJsonImportDialogProps) {\n const [jsonValue, setJsonValue] = useState<string>(\"\");\n const [errors, setErrors] = useState<CollectionValidationError[]>([]);\n const [touched, setTouched] = useState(false);\n\n const handleJsonChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value;\n setJsonValue(value);\n setTouched(true);\n\n if (!value.trim()) {\n setErrors([]);\n return;\n }\n\n const result = validateCollectionJson(value);\n setErrors(result.errors);\n }, []);\n\n const handleImport = useCallback(() => {\n const result = validateCollectionJson(jsonValue);\n if (result.valid && result.collection) {\n onImport(result.collection);\n setJsonValue(\"\");\n setErrors([]);\n setTouched(false);\n onClose();\n }\n }, [jsonValue, onImport, onClose]);\n\n const handleClose = useCallback(() => {\n setJsonValue(\"\");\n setErrors([]);\n setTouched(false);\n onClose();\n }, [onClose]);\n\n const isValid = touched && jsonValue.trim() && errors.length === 0;\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => !open && handleClose()}\n maxWidth=\"2xl\"\n >\n <DialogTitle className=\"flex items-center gap-2\">\n <CodeIcon size={iconSize.smallest}/>\n Import Collection from JSON\n </DialogTitle>\n <DialogContent className=\"flex flex-col gap-4\">\n <Typography variant=\"body2\" color=\"secondary\">\n Paste a JSON object representing your collection configuration.\n The JSON must include <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">id</code>,\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">name</code>,\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">path</code>, and\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">properties</code>.\n </Typography>\n\n <textarea\n value={jsonValue}\n onChange={handleJsonChange}\n placeholder={EXAMPLE_JSON}\n rows={12}\n className={cls(\n \"w-full p-3 font-mono text-sm rounded-md border resize-none overflow-y-auto\",\n \"bg-surface-50 dark:bg-surface-800\",\n \"focus:outline-none focus:ring-2 focus:ring-primary\",\n \"h-[300px]\",\n errors.length > 0 && touched\n ? \"border-red-500 dark:border-red-400\"\n : \"border-surface-300 dark:border-surface-600\"\n )}\n />\n\n {errors.length > 0 && touched && (\n <div className=\"p-3 bg-red-50 dark:bg-red-900/20 rounded-md border border-red-200 dark:border-red-800\">\n <Typography variant=\"body2\" className=\"font-medium text-red-700 dark:text-red-400 mb-2\">\n Validation errors:\n </Typography>\n <ul className=\"list-disc list-inside space-y-1\">\n {errors.map((error, index) => (\n <li key={index} className=\"text-sm text-red-600 dark:text-red-400\">\n {error.path ? (\n <>\n <code className=\"bg-red-100 dark:bg-red-900/40 px-1 rounded\">\n {error.path}\n </code>\n : {error.message}\n </>\n ) : (\n error.message\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {isValid && (\n <div className=\"p-3 bg-green-50 dark:bg-green-900/20 rounded-md border border-green-200 dark:border-green-800\">\n <Typography variant=\"body2\" className=\"text-green-700 dark:text-green-400\">\n ✓ JSON is valid and ready to import\n </Typography>\n </div>\n )}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"text\"\n onClick={handleClose}\n >\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n color=\"primary\"\n onClick={handleImport}\n disabled={!isValid}\n >\n Import Collection\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const productsCollectionTemplate = {\n slug: \"products\",\n table: \"products\",\n name: \"Products\",\n singularName: \"Product\",\n icon: \"ShoppingCart\",\n description: \"List of the products currently sold in your shop\",\n properties: {\n name: {\n type: \"string\",\n name: \"Name\",\n description: \"Name of this product\",\n validation: {\n required: true\n }\n },\n brand: {\n type: \"string\",\n name: \"Brand\",\n validation: {\n required: true\n }\n },\n description: {\n type: \"string\",\n name: \"Description\",\n description: \"Description of this product, supports markdown\",\n markdown: true\n },\n main_image: {\n type: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n },\n description: \"Upload field for images\"\n },\n available: {\n type: \"boolean\",\n name: \"Available\",\n columnWidth: 100,\n description: \"Is this product available in the website\"\n },\n price: {\n type: \"number\",\n name: \"Price\",\n validation: {\n requiredMessage: \"You must set a positive price\",\n min: 0\n }\n },\n images: {\n type: \"array\",\n name: \"Images\",\n hideFromCollection: true,\n of: {\n type: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n },\n related_products: {\n type: \"array\",\n name: \"Related products\",\n description: \"Products related to this one\",\n of: {\n type: \"reference\",\n path: \"products\"\n }\n },\n metadata: {\n name: \"Metadata\",\n description: \"This is an example of a map property\",\n type: \"map\",\n keyValue: true\n },\n added_on: {\n type: \"date\",\n name: \"Added on\",\n autoValue: \"on_create\"\n }\n }\n} as unknown as EntityCollection;\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const blogCollectionTemplate = {\n slug: \"blog\",\n table: \"blog\",\n name: \"Blog\",\n singularName: \"Blog entry\",\n icon: \"FileText\",\n description: \"A collection of blog entries\",\n defaultSize: \"l\",\n properties: {\n name: {\n name: \"Name\",\n validation: { required: true },\n type: \"string\"\n },\n header_image: {\n name: \"Header image\",\n type: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n content: {\n name: \"Content\",\n description: \"Content blocks for the blog entry\",\n validation: { required: true },\n type: \"array\",\n oneOf: {\n typeField: \"type\",\n valueField: \"value\",\n properties: {\n text: {\n type: \"string\",\n name: \"Text\",\n markdown: true\n },\n quote: {\n type: \"string\",\n name: \"Quote\",\n multiline: true\n },\n images: {\n name: \"Images\",\n type: \"array\",\n of: {\n type: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n description: \"This fields allows uploading multiple images at once and reordering\"\n },\n products: {\n name: \"Products\",\n type: \"array\",\n of: {\n type: \"reference\",\n path: \"products\",\n previewProperties: [\"name\", \"main_image\"]\n }\n }\n },\n propertiesOrder: [\"text\", \"quote\", \"images\", \"products\"]\n }\n },\n created_on: {\n name: \"Created on\",\n type: \"date\",\n autoValue: \"on_create\"\n },\n status: {\n name: \"Status\",\n validation: { required: true },\n type: \"string\",\n enum: {\n published: {\n id: \"published\",\n label: \"Published\"\n },\n draft: \"Draft\"\n },\n defaultValue: \"draft\"\n },\n publish_date: {\n name: \"Publish date\",\n type: \"date\",\n clearable: true\n },\n reviewed: {\n name: \"Reviewed\",\n type: \"boolean\"\n },\n tags: {\n name: \"Tags\",\n description: \"Example of generic array\",\n type: \"array\",\n of: {\n type: \"string\",\n previewAsTag: true\n }\n }\n }\n} as unknown as EntityCollection;\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const usersCollectionTemplate = {\n slug: \"users\",\n table: \"users\",\n name: \"Users\",\n singularName: \"User\",\n description: \"Registered users in the app/web\",\n icon: \"User\",\n properties: {\n displayName: {\n name: \"Display name\",\n type: \"string\"\n },\n email: {\n name: \"Email\",\n type: \"string\",\n email: true\n },\n emailVerified: {\n name: \"Email verified\",\n type: \"boolean\"\n },\n phone: {\n name: \"Phone\",\n type: \"string\"\n },\n favourite_products: {\n name: \"Favourite products\",\n type: \"array\",\n of: {\n type: \"reference\",\n path: \"products\"\n }\n },\n photoURL: {\n name: \"Photo URL\",\n type: \"string\",\n url: \"image\"\n }\n }\n} as unknown as EntityCollection;\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const pagesCollectionTemplate = {\n slug: \"pages\",\n table: \"pages\",\n name: \"Pages\",\n singularName: \"Page\",\n icon: \"File\",\n description: \"List of website pages that can be edited here\",\n properties: {\n title: {\n type: \"string\",\n name: \"Page Title\",\n validation: { required: true }\n },\n slug: {\n type: \"string\",\n name: \"URL Slug\",\n validation: {\n required: true,\n unique: true,\n matches: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\",\n matchesMessage: \"Must be lowercase, alphanumeric, and hyphenated\"\n }\n },\n hero_section: {\n type: \"map\",\n name: \"Hero Section\",\n properties: {\n headline: {\n type: \"string\",\n name: \"Headline\",\n validation: { required: true }\n },\n subhead: {\n type: \"string\",\n name: \"Subheadline\"\n },\n background_image: {\n type: \"string\",\n name: \"Background Image\",\n storage: {\n storagePath: \"page_hero/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n call_to_action: {\n type: \"string\",\n name: \"Call to Action\"\n },\n call_to_action_link: {\n type: \"string\",\n name: \"CTA Link\",\n url: true\n }\n }\n },\n content: {\n type: \"array\",\n name: \"Content\",\n oneOf: {\n properties: {\n section: {\n type: \"map\",\n name: \"Section\",\n properties: {\n title: {\n type: \"string\",\n name: \"Section Title\",\n validation: { required: true }\n },\n content: {\n type: \"string\",\n name: \"Section Content\",\n markdown: true\n },\n image: {\n type: \"string\",\n name: \"Section Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n link: {\n type: \"string\",\n name: \"Section Link\",\n url: true\n }\n }\n },\n image: {\n type: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n slider: {\n type: \"array\",\n name: \"Slider\",\n of: {\n type: \"map\",\n properties: {\n title: {\n type: \"string\",\n name: \"Title\",\n validation: { required: true }\n },\n image: {\n type: \"string\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n }\n }\n }\n }\n }\n },\n sidebar: {\n type: \"map\",\n name: \"Sidebar\",\n properties: {\n title: {\n type: \"string\",\n name: \"Sidebar Title\",\n validation: { required: false }\n },\n content: {\n type: \"string\",\n name: \"Sidebar Content\",\n markdown: true\n }\n }\n },\n seo_metadata: {\n type: \"map\",\n name: \"SEO Metadata\",\n properties: {\n meta_title: {\n type: \"string\",\n name: \"Meta Title\"\n },\n meta_description: {\n type: \"string\",\n name: \"Meta Description\"\n },\n focus_keywords: {\n type: \"array\",\n name: \"Focus Keywords\",\n of: {\n type: \"string\"\n }\n }\n }\n },\n footer_override: {\n type: \"string\",\n name: \"Footer Override\",\n markdown: true\n },\n publish_date: {\n type: \"date\",\n name: \"Publish Date\",\n validation: { required: true }\n },\n last_updated: {\n type: \"date\",\n name: \"Last Updated\",\n autoValue: \"on_update\"\n },\n is_published: {\n type: \"boolean\",\n name: \"Is Published\",\n columnWidth: 100,\n description: \"Should this page be live on the site?\"\n }\n }\n} as unknown as EntityCollection;\n","\nimport { AIIcon } from \"@rebasepro/core\";\nimport { useCollectionRegistryController } from \"../../_cms_internals\";\nimport React, { useState } from \"react\";\nimport { useSnackbarController } from \"@rebasepro/core\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport { Button, CircularProgress, IconButton, Menu, TextField, Tooltip, Typography } from \"@rebasepro/ui\";\nimport { SendIcon } from \"lucide-react\";\nimport {\n CollectionGenerationCallback,\n CollectionGenerationApiError,\n CollectionOperation\n} from \"../../api/generateCollectionApi\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\n\nexport interface AICollectionGeneratorPopoverProps {\n /**\n * Current collection being edited (if modifying an existing collection)\n */\n existingCollection?: EntityCollection<any>;\n\n /**\n * Callback when a collection is generated or modified.\n * Includes the collection and optionally the operations that were applied.\n */\n onGenerated: (collection: EntityCollection, operations?: CollectionOperation[]) => void;\n\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection: CollectionGenerationCallback;\n\n /**\n * Optional custom trigger button. If not provided, a default AI button is used.\n */\n trigger?: React.ReactNode | any;\n\n /**\n * Size of the button\n */\n size?: \"small\" | \"medium\" | \"large\";\n\n /**\n * Whether to show the label text\n */\n showLabel?: boolean;\n\n /**\n * Optional analytics callback\n */\n onAnalyticsEvent?: (event: string, params?: object) => void;\n}\n\nexport function AICollectionGeneratorPopover({\n existingCollection,\n onGenerated,\n generateCollection,\n trigger,\n size = \"small\",\n showLabel = true,\n onAnalyticsEvent\n}: AICollectionGeneratorPopoverProps) {\n const [menuOpen, setMenuOpen] = useState(false);\n const [prompt, setPrompt] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const collectionRegistry = useCollectionRegistryController();\n const configController = useCollectionsConfigController();\n const snackbarController = useSnackbarController();\n\n const existingCollections = collectionRegistry.collections ?? [];\n\n const handleGenerate = async () => {\n if (!prompt.trim()) return;\n\n setLoading(true);\n setError(null);\n\n const mode = existingCollection ? \"modify\" : \"create\";\n onAnalyticsEvent?.(\"ai_collection_generate_start\", { mode });\n\n try {\n const collectionsContext = existingCollections.map(c => ({\n slug: c.slug,\n name: c.name,\n properties: c.properties,\n propertiesOrder: c.propertiesOrder\n }));\n\n const result = await generateCollection({\n prompt: prompt.trim(),\n existingCollections: collectionsContext.slice(0, 30),\n ...(existingCollection && {\n existingCollection: {\n slug: existingCollection.slug,\n name: existingCollection.name,\n properties: existingCollection.properties,\n propertiesOrder: existingCollection.propertiesOrder\n }\n })\n });\n\n onGenerated(result.collection, result.operations);\n setMenuOpen(false);\n setPrompt(\"\");\n onAnalyticsEvent?.(\"ai_collection_generate_success\", {\n mode,\n operationsCount: result.operations?.length\n });\n snackbarController.open({\n type: \"success\",\n message: existingCollection\n ? \"Collection updated with AI suggestions\"\n : \"Collection generated successfully\"\n });\n } catch (e) {\n console.error(\"Error generating collection:\", e);\n const errorMessage = e instanceof CollectionGenerationApiError\n ? e.message\n : \"Failed to generate collection. Please try again.\";\n setError(errorMessage);\n onAnalyticsEvent?.(\"ai_collection_generate_error\", {\n mode,\n error: errorMessage\n });\n snackbarController.open({\n type: \"error\",\n message: errorMessage\n });\n } finally {\n setLoading(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleGenerate();\n }\n };\n\n const tooltipTitle = configController?.readOnly\n ? (configController.readOnlyReason || \"Collection generation is disabled\")\n : undefined;\n\n const defaultTrigger = showLabel ? (\n <Tooltip title={tooltipTitle} asChild={true}>\n <Button\n variant=\"text\"\n size={size}\n disabled={loading || configController?.readOnly}\n startIcon={loading\n ? <CircularProgress size=\"smallest\"/>\n : <AIIcon size=\"small\"/>\n }\n >\n AI Assist\n </Button>\n </Tooltip>\n ) : (\n <Tooltip title={tooltipTitle} asChild={true}>\n <IconButton\n size={size}\n disabled={loading || configController?.readOnly}\n aria-label=\"AI Assist\"\n >\n {loading\n ? <CircularProgress size=\"smallest\"/>\n : <AIIcon size=\"small\"/>\n }\n </IconButton>\n </Tooltip>\n );\n\n return (\n <Menu\n open={menuOpen}\n onOpenChange={(open) => {\n setMenuOpen(open);\n if (!open) {\n setError(null);\n }\n }}\n trigger={trigger ?? defaultTrigger}\n >\n <div className=\"p-4 flex flex-col gap-3 min-w-[360px] max-w-[480px]\">\n <div className=\"flex items-center gap-2\">\n <AIIcon size=\"small\"/>\n <Typography variant=\"subtitle2\">\n {existingCollection ? \"Modify Collection with AI\" : \"Generate Collection with AI\"}\n </Typography>\n </div>\n\n <Typography variant=\"caption\" color=\"secondary\">\n {existingCollection\n ? \"Describe the changes you want to make to this collection.\"\n : \"Describe the collection you want to create.\"\n }\n </Typography>\n\n <TextField\n size=\"small\"\n multiline\n autoFocus\n className=\"w-full text-text-primary dark:text-text-primary-dark\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={existingCollection\n ? \"e.g., Add a thumbnail image field with storage, make price required...\"\n : \"e.g., Create a products collection with name, price, description, and category...\"\n }\n disabled={loading}\n />\n\n {error && (\n <Typography variant=\"caption\" className=\"text-red-500\">\n {error}\n </Typography>\n )}\n\n <div className=\"flex justify-end gap-2\">\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setMenuOpen(false)}\n disabled={loading}\n >\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n size=\"small\"\n onClick={handleGenerate}\n disabled={!prompt.trim() || loading}\n startIcon={loading ? <CircularProgress size=\"smallest\"/> : undefined}\n >\n {loading ? \"Generating...\" : \"Generate\"}\n </Button>\n </div>\n </div>\n </Menu>\n );\n}\n","import { AIIcon } from \"@rebasepro/core\";\n;\nimport React, { useState } from \"react\";\n;\nimport { EntityCollection } from \"@rebasepro/types\";\nimport { Button, Card, Chip, cls, Container, Tooltip, Typography , iconSize } from \"@rebasepro/ui\";\nimport { CodeIcon, TableIcon, ShoppingCartIcon, UserIcon, FileTextIcon, FileIcon } from \"lucide-react\";\nimport { CollectionJsonImportDialog } from \"./CollectionJsonImportDialog\";\n\nimport { productsCollectionTemplate } from \"./templates/products_template\";\nimport { blogCollectionTemplate } from \"./templates/blog_template\";\nimport { usersCollectionTemplate } from \"./templates/users_template\";\nimport { ImportFileUpload } from \"../../_cms_internals\";\nimport { pagesCollectionTemplate } from \"./templates/pages_template\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { useCollectionEditorController } from \"../../useCollectionEditorController\";\nimport { AICollectionGeneratorPopover } from \"./AICollectionGeneratorPopover\";\nimport { CollectionGenerationCallback } from \"../../api/generateCollectionApi\";\nimport { prettifyIdentifier } from \"@rebasepro/utils\";\n\nexport function CollectionEditorWelcomeView({\n path,\n parentCollection,\n onContinue,\n existingCollectionPaths,\n generateCollection,\n onAnalyticsEvent,\n unmappedTables,\n onImportFromTable\n}: {\n path: string;\n parentCollection?: EntityCollection;\n onContinue: (importData?: object[], propertiesOrder?: string[]) => void;\n existingCollectionPaths?: string[];\n generateCollection?: CollectionGenerationCallback;\n onAnalyticsEvent?: (event: string, params?: object) => void;\n unmappedTables?: string[];\n onImportFromTable?: (tableName: string) => void;\n}) {\n\n const { pathSuggestions } = useCollectionEditorController();\n\n const filteredSuggestions = (pathSuggestions ?? []).filter(s => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === s.trim().toLowerCase()));\n\n const {\n values,\n setFieldValue,\n setValues,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [jsonImportOpen, setJsonImportOpen] = useState(false);\n const [importingTable, setImportingTable] = useState<string | null>(null);\n\n // Filter unmapped tables that aren't already mapped\n const filteredUnmappedTables = (unmappedTables ?? []).filter(\n t => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === t.trim().toLowerCase())\n );\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div\n className=\"flex flex-row py-2 pt-3 items-center\">\n <Typography variant={\"h4\"} className={\"grow\"}>\n New collection\n </Typography>\n </div>\n\n {parentCollection && <Chip colorScheme={\"teal\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n {filteredUnmappedTables.length > 0 && <div className={\"my-2\"}>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Import from an existing database table:\n </Typography>\n <div className={\"flex flex-wrap gap-x-2 gap-y-1 items-center my-2 min-h-7\"}>\n\n {filteredUnmappedTables.map((tableName) => (\n <Chip key={tableName}\n colorScheme={\"purple\"}\n onClick={() => {\n if (onImportFromTable) {\n setImportingTable(tableName);\n onImportFromTable(tableName);\n } else {\n // Fallback: just set path/name like pathSuggestions\n setFieldValue(\"name\", prettifyIdentifier(tableName));\n setFieldValue(\"id\", tableName);\n setFieldValue(\"path\", tableName);\n onContinue();\n }\n }}\n size=\"small\">\n <TableIcon size={iconSize.smallest}/>\n {importingTable === tableName ? \"Loading...\" : tableName}\n </Chip>\n ))}\n\n </div>\n\n </div>}\n\n {(filteredSuggestions ?? []).length > 0 && <div className={\"my-2\"}>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Use one of the existing paths in your database:\n </Typography>\n <div className={\"flex flex-wrap gap-x-2 gap-y-1 items-center my-2 min-h-7\"}>\n\n {filteredSuggestions?.map((suggestion, index) => (\n <Chip key={suggestion}\n colorScheme={\"cyan\"}\n onClick={() => {\n setFieldValue(\"name\", prettifyIdentifier(suggestion));\n setFieldValue(\"id\", suggestion);\n setFieldValue(\"path\", suggestion);\n setFieldValue(\"properties\", undefined);\n onContinue();\n }}\n size=\"small\">\n {suggestion}\n </Chip>\n ))}\n\n </div>\n\n </div>}\n <div className=\"flex flex-row gap-8\">\n\n {generateCollection && (\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Describe your collection to AI:\n </Typography>\n\n <AICollectionGeneratorPopover\n onGenerated={(generatedCollection) => {\n setValues(generatedCollection);\n onContinue();\n }}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n trigger={\n <Button\n variant=\"filled\"\n color=\"neutral\"\n startIcon={<AIIcon size=\"small\"/>}\n >\n Generate with AI\n </Button>\n }\n />\n </div>\n )}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create from JSON configuration:\n </Typography>\n\n <Button\n variant=\"filled\"\n color=\"neutral\"\n onClick={() => setJsonImportOpen(true)}\n startIcon={<CodeIcon size={iconSize.small}/>}\n >\n Paste JSON Configuration\n </Button>\n\n <CollectionJsonImportDialog\n open={jsonImportOpen}\n onClose={() => setJsonImportOpen(false)}\n onImport={(collection) => {\n setValues(collection);\n onContinue();\n }}\n />\n </div>\n\n </div>\n\n {!parentCollection && <div>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create a collection from a file (csv, json, xls, xslx...)\n </Typography>\n\n <ImportFileUpload onDataAdded={(data, propertiesOrder) => onContinue(data, propertiesOrder)}/>\n\n </div>}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Select a template:\n </Typography>\n\n <div className={\"flex gap-2\"}>\n <TemplateButton title={\"Products\"}\n subtitle={\"A collection of products with images, prices and stock\"}\n icon={<ShoppingCartIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(productsCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Users\"}\n subtitle={\"A collection of users with emails, names and roles\"}\n icon={<UserIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(usersCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Blog posts\"}\n subtitle={\"A collection of blog posts with images, authors and complex content\"}\n icon={<FileTextIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(blogCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Pages\"}\n subtitle={\"A collection of pages with images, authors and complex content\"}\n icon={<FileIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(pagesCollectionTemplate);\n onContinue();\n }}/>\n </div>\n\n </div>\n\n </Container>\n </div>\n );\n}\n\nexport function TemplateButton({\n title,\n subtitle,\n icon,\n onClick\n}: {\n title: string,\n icon: React.ReactNode | any,\n subtitle: string,\n onClick?: () => void\n}) {\n\n return (\n <Tooltip title={subtitle}\n asChild={true}>\n <Card\n onClick={onClick}\n className={cls(\n \"my-2 rounded-md border px-4 py-3 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-text-secondary dark:text-text-secondary-dark\",\n \"hover:border-primary-dark hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n \"border-surface-400 dark:border-surface-600 \"\n )}\n >\n {icon}\n <div className={\"flex flex-col items-start\"}>\n\n <Typography variant={\"subtitle2\"}>\n {title}\n </Typography>\n\n </div>\n </Card>\n </Tooltip>\n );\n\n}\n","import { DataNewPropertiesMapping } from \"../../../../data_import/components/DataNewPropertiesMapping\";\nimport { getInferenceType } from \"../../../../data_import/utils/get_import_inference_type\";\nimport { ImportConfig } from \"../../../../data_import/types\";\nimport { ImportNewPropertyFieldPreview } from \"../../../../data_import/components/ImportNewPropertyFieldPreview\";\nimport { getIn, useFormex } from \"@rebasepro/formex\";\n\nimport { getFieldConfig, getFieldId } from \"../../../../components/field_configs\";\nimport { PropertyConfigBadge } from \"../../../../components/PropertyConfigBadge\";\nimport { EntityCollection, Properties, Property, PropertyConfig } from \"@rebasepro/types\";\nimport { cls, Container, Select, SelectItem, Tooltip, Typography } from \"@rebasepro/ui\";\nimport React, { useState } from \"react\";\nimport { OnPropertyChangedParams, PropertyFormDialog, PropertyWithId } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { updatePropertyFromWidget } from \"../utils/update_property_for_widget\";\nimport { supportedFields } from \"../utils/supported_fields\";\nimport { buildPropertyFromData } from \"@rebasepro/schema-inference\";\n\nexport function CollectionEditorImportMapping({\n importConfig,\n propertyConfigs\n}:\n {\n importConfig: ImportConfig,\n propertyConfigs: Record<string, PropertyConfig>,\n }) {\n\n // const {\n // values,\n // setFieldValue,\n // setFieldTouched,\n // setValues,\n // submitCount\n // } = useFormex();\n\n const {\n setFieldValue,\n setFieldTouched,\n values\n } = useFormex<EntityCollection>();\n const [selectedProperty, setSelectedProperty] = useState<PropertyWithId | undefined>(undefined);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n const propertyKey = selectedProperty ? selectedProperty.id : undefined;\n const property = selectedProperty || undefined;\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // setSelectedProperty(property);\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"];\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n }\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n // replace previousId with id in headersMapping\n const newHeadersMapping = { ...importConfig.headersMapping };\n Object.keys(newHeadersMapping).forEach((key) => {\n if (newHeadersMapping[key] === previousId) {\n newHeadersMapping[key] = id ?? \"\";\n }\n });\n importConfig.setHeadersMapping(newHeadersMapping);\n\n // if (id) {\n // setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n // setSelectedPropertyKey(id);\n // }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n };\n const onPropertyTypeChanged = async ({\n id,\n importKey,\n property,\n namespace\n }: OnPropertyChangedParams & {\n importKey: string\n }) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // we try to infer the rest of the properties of a property, from the type and the data\n const propertyData = importConfig.importData.map((d) => getIn(d, importKey));\n const inferredNewProperty = {\n ...buildPropertyFromData(propertyData, property, getInferenceType)\n };\n\n if (propertyPath) {\n if (inferredNewProperty) {\n setFieldValue(propertyPath, inferredNewProperty, false);\n } else {\n setFieldValue(propertyPath, property, false);\n }\n setFieldTouched(propertyPath, true, false);\n }\n };\n\n return (\n\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"6xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <Typography variant=\"h6\" className={\"my-4 ml-3.5\"}>Data property mapping</Typography>\n\n <DataNewPropertiesMapping importConfig={importConfig}\n destinationProperties={values.properties as Properties}\n buildPropertyView={({\n property,\n propertyKey,\n importKey,\n isIdColumn\n }) => {\n if (isIdColumn) {\n return <Typography> This column will be used as ID</Typography>\n }\n\n return <ImportNewPropertyFieldPreview\n property={property}\n propertyKey={propertyKey}\n onPropertyNameChanged={(propertyKey: string, value: string) => setFieldValue(`properties.${propertyKey}.name`, value, false)}\n onEditClick={() => {\n if (!propertyKey || !property) return;\n setSelectedProperty({\n ...property,\n id: propertyKey\n });\n }}\n propertyTypeView={<PropertySelect property={property}\n disabled={false}\n onPropertyChanged={(props) => onPropertyTypeChanged({\n ...props,\n importKey\n })}\n propertyKey={propertyKey}\n propertyConfigs={propertyConfigs}/>}\n />;\n }}/>\n </Container>\n\n <PropertyFormDialog\n open={selectedProperty !== undefined}\n propertyKey={propertyKey}\n property={property}\n inArray={false}\n autoUpdateId={false}\n onPropertyChanged={onPropertyChanged}\n allowDataInference={false}\n\n onOkClicked={() => {\n setSelectedProperty(undefined);\n }}\n onCancel={() => {\n setSelectedProperty(undefined);\n }}\n autoOpenTypeSelect={false}\n existingProperty={false}\n propertyConfigs={propertyConfigs}/>\n\n <div style={{ height: \"52px\" }}/>\n </div>\n );\n\n}\n\nfunction PropertySelect({\n property,\n onPropertyChanged,\n propertyKey,\n propertyConfigs,\n disabled\n}: {\n property: Property | null,\n propertyKey: string | null,\n onPropertyChanged: ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => void,\n propertyConfigs: Record<string, PropertyConfig>,\n disabled?: boolean\n}) {\n\n const fieldId = property ? getFieldId(property) : null;\n const widget = property ? getFieldConfig(property, propertyConfigs) : null;\n\n const [selectOpen, setSelectOpen] = useState(false);\n\n return <Tooltip title={property && widget ? `${widget?.name} - ${property.type}` : undefined}\n open={selectOpen ? false : undefined}>\n <Select\n open={selectOpen}\n onOpenChange={setSelectOpen}\n invisible={true}\n className={\"w-full\"}\n disabled={disabled}\n error={!widget}\n fullWidth={true}\n value={fieldId ?? \"\"}\n placeholder={\"Select a property widget\"}\n position={\"item-aligned\"}\n renderValue={(value) => {\n if (!widget) return null;\n return <PropertyConfigBadge propertyConfig={widget}/>\n }}\n onValueChange={(newSelectedWidgetId) => {\n const newProperty = updatePropertyFromWidget(property, newSelectedWidgetId, propertyConfigs)\n if (!propertyKey) return;\n onPropertyChanged({\n id: propertyKey,\n property: newProperty,\n previousId: propertyKey,\n namespace: undefined\n });\n }}>\n {Object.entries(supportedFields).map(([key, widget]) => {\n return <ImportPropertySelectItem\n key={key}\n value={key}\n optionDisabled={false}\n propertyConfig={widget}\n existing={false}/>;\n })\n }\n </Select>\n </Tooltip>;\n}\n\nexport interface ImportPropertySelectItemProps {\n value: string;\n optionDisabled: boolean;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function ImportPropertySelectItem({ value, optionDisabled, propertyConfig, existing }: ImportPropertySelectItemProps) {\n return <SelectItem value={value}\n disabled={optionDisabled}\n className={\"flex flex-row items-center\"}>\n <div\n className={cls(\n \"flex flex-row items-center text-base min-h-[48px]\",\n optionDisabled ? \"w-full\" : \"\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <div>\n <div>{propertyConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"disabled\"}\n className={\"max-w-sm\"}>\n {existing && optionDisabled ? \"You can only switch to widgets that use the same data type\" : propertyConfig.description}\n </Typography>\n </div>\n </div>\n </SelectItem>\n}\n","import { useCollectionRegistryController } from \"../../../_cms_internals\";\nimport { convertDataToEntity, ImportConfig } from \"../../../_cms_internals\";\nimport { useAuthController } from \"@rebasepro/core\";\nimport { EntityCollectionTable } from \"../../../../components/EntityCollectionTable/EntityCollectionTable\";\nimport { useSelectionController } from \"../../../../components/EntityCollectionView/useSelectionController\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\nimport { Properties } from \"@rebasepro/types\";\nimport { useEffect, useState } from \"react\";\nimport { Typography } from \"@rebasepro/ui\";\n\nexport function CollectionEditorImportDataPreview({\n importConfig,\n properties,\n propertiesOrder\n}: {\n importConfig: ImportConfig,\n properties: Properties,\n propertiesOrder: string[]\n}) {\n\n const authController = useAuthController();\n const registry = useCollectionRegistryController();\n const [loading, setLoading] = useState<boolean>(false);\n\n async function loadEntities() {\n const mappedData = importConfig.importData.map(d => convertDataToEntity(authController,\n registry,\n d,\n importConfig.idColumn,\n importConfig.headersMapping,\n properties,\n \"TEMP_PATH\",\n importConfig.defaultValues));\n importConfig.setEntities(mappedData);\n }\n\n useEffect(() => {\n loadEntities().finally(() => setLoading(false));\n }, []);\n\n const selectionController = useSelectionController();\n if (loading)\n return <CircularProgressCenter/>\n\n return <EntityCollectionTable\n title={<div>\n <Typography variant={\"subtitle2\"}>Imported data preview</Typography>\n <Typography variant={\"caption\"}>Entities with the same id will be overwritten</Typography>\n </div>}\n tableController={{\n data: importConfig.entities,\n dataLoading: false,\n noMoreToLoad: false\n }}\n endAdornment={<div className={\"h-12\"}/>}\n filterable={false}\n sortable={false}\n selectionController={selectionController}\n displayedColumnIds={propertiesOrder.map(p => ({\n key: p,\n disabled: false\n }))}\n openEntityMode={\"side_panel\"}\n properties={properties}\n enablePopupIcon={false}/>\n\n}\n","import { Properties } from \"@rebasepro/types\";\nimport { ImportConfig } from \"../../../_cms_internals\";\nimport { slugify } from \"@rebasepro/utils\";\n\nexport function cleanPropertiesFromImport(properties: Properties, parentSlug = \"\"): {\n headersMapping: ImportConfig[\"headersMapping\"],\n properties: Properties,\n idColumn?: ImportConfig[\"idColumn\"],\n} {\n\n const result = Object.keys(properties).reduce((acc, key) => {\n const property = properties[key];\n const slug = slugify(key);\n const fullSlug = parentSlug ? `${parentSlug}.${slug}` : slug;\n\n if (property.type === \"map\" && property.properties) {\n const slugifiedResult = cleanPropertiesFromImport(property.properties as Properties, fullSlug);\n return {\n headersMapping: { ...acc.headersMapping,\n[key]: fullSlug },\n properties: {\n ...acc.properties,\n [slug]: {\n ...property,\n properties: slugifiedResult.properties,\n propertiesOrder: Object.keys(slugifiedResult.properties)\n }\n }\n }\n }\n\n const updatedProperties = {\n ...acc.properties,\n [slug]: property\n } as Properties;\n\n const headersMapping = { ...acc.headersMapping,\n[key]: fullSlug } as Record<string, string>;\n\n return {\n headersMapping,\n properties: updatedProperties\n }\n }, { headersMapping: {},\nproperties: {} });\n\n const firstKey = Object.keys(result.headersMapping)?.[0];\n let idColumn: string | undefined;\n if (firstKey?.includes(\"id\") || firstKey?.includes(\"key\")) {\n idColumn = firstKey;\n }\n\n return {\n ...result,\n idColumn\n };\n}\n","\nimport { EntityCollection } from \"@rebasepro/types\";\nimport React, { useState, useEffect } from \"react\";\nimport { Button, IconButton, Typography, cls, defaultBorderMixin, Chip, Paper, Container, Tooltip, CircularProgress, Dialog, DialogTitle, DialogContent, DialogActions, TextField, Select, SelectItem, MultiSelect, MultiSelectItem , iconSize } from \"@rebasepro/ui\";\nimport { KeyIcon, Trash2Icon } from \"lucide-react\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { useRebaseContext } from \"@rebasepro/core\";\n\n/** Postgres RLS policy shape — defined inline to avoid depending on @rebasepro/studio */\nexport interface PostgresPolicy {\n policyname: string;\n tablename: string;\n permissive: \"PERMISSIVE\" | \"RESTRICTIVE\";\n roles: string[];\n cmd: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\";\n qual: string | null;\n with_check: string | null;\n status?: \"live\" | \"code_only\" | \"both\";\n}\n\ninterface SecurityRule {\n name: string;\n operation?: string;\n mode?: string;\n using?: string;\n withCheck?: string;\n roles?: string[];\n}\n\ntype CollectionWithSecurity = EntityCollection & {\n securityRules?: SecurityRule[];\n id?: string;\n table?: string;\n alias?: string;\n};\n\nexport function CollectionRLSTab() {\n const { values, setFieldValue } = useFormex<CollectionWithSecurity>();\n const [editingPolicy, setEditingPolicy] = useState<PostgresPolicy | \"new\" | null>(null);\n\n const rules: SecurityRule[] = values.securityRules || [];\n\n const { databaseAdmin } = useRebaseContext();\n const [dbPolicies, setDbPolicies] = useState<PostgresPolicy[]>([]);\n const [isLoadingDb, setIsLoadingDb] = useState(false);\n\n useEffect(() => {\n const fetchLivePolicies = async () => {\n const tableName = values.id || values.table || values.alias;\n if (!tableName || !databaseAdmin?.executeSql) return;\n\n setIsLoadingDb(true);\n try {\n const sql = `\n SELECT policyname, permissive, roles, cmd, qual, with_check\n FROM pg_policies\n WHERE tablename = '${tableName}' AND schemaname NOT IN ('information_schema', 'pg_catalog');\n `;\n const result = await databaseAdmin.executeSql(sql);\n const extractRows = (res: unknown): Record<string, unknown>[] => {\n if (res && typeof res === \"object\" && \"rows\" in res && Array.isArray((res as { rows: Record<string, unknown>[] }).rows)) {\n return (res as { rows: Record<string, unknown>[] }).rows;\n }\n if (Array.isArray(res)) return res as Record<string, unknown>[];\n return [];\n };\n const pRows = extractRows(result);\n const policies: PostgresPolicy[] = pRows.map((p: any) => {\n let parsedRoles: string[] = [];\n const r = p.roles || p.ROLES;\n if (Array.isArray(r)) {\n parsedRoles = r as string[];\n } else if (typeof r === \"string\") {\n parsedRoles = r.replace(/^{|}$/g, \"\").split(\",\").map((s: string) => s.trim());\n }\n return {\n policyname: (p.policyname || p.POLICYNAME || \"\") as string,\n tablename: tableName,\n permissive: (p.permissive || p.PERMISSIVE || \"PERMISSIVE\") as \"PERMISSIVE\" | \"RESTRICTIVE\",\n roles: parsedRoles,\n cmd: (p.cmd || p.CMD || \"ALL\") as \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\",\n qual: (p.qual || p.QUAL || null) as string | null,\n with_check: (p.with_check || p.WITH_CHECK || null) as string | null\n };\n });\n setDbPolicies(policies);\n } catch (e) {\n console.error(\"Failed to fetch DB policies\", e);\n } finally {\n setIsLoadingDb(false);\n }\n };\n fetchLivePolicies();\n }, [databaseAdmin, values.id, values.table, values.alias]);\n\n const unmappedPolicies = dbPolicies.filter(dp => !rules.some(r => r.name === dp.policyname));\n\n const handleSave = async (newPolicy: Partial<PostgresPolicy>) => {\n const rule: SecurityRule = {\n name: newPolicy.policyname ?? \"\",\n operation: newPolicy.cmd?.toLowerCase(),\n mode: newPolicy.permissive?.toLowerCase(),\n using: newPolicy.qual || undefined,\n withCheck: newPolicy.with_check || undefined,\n roles: newPolicy.roles\n };\n\n let newRules;\n if (editingPolicy === \"new\") {\n newRules = [...rules, rule];\n } else {\n newRules = rules.map((r: SecurityRule) => r.name === (editingPolicy as PostgresPolicy).policyname ? rule : r);\n }\n setFieldValue(\"securityRules\", newRules);\n setEditingPolicy(null);\n };\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n <div className=\"w-full flex flex-col\">\n <div className=\"flex items-center justify-between mb-8\">\n <Typography variant=\"h5\">Row Level Security</Typography>\n <Button variant=\"filled\" color=\"neutral\" onClick={() => setEditingPolicy(\"new\")}>\n CREATE POLICY\n </Button>\n </div>\n\n {rules.length === 0 ? (\n <div className=\"flex-grow flex items-center justify-center text-text-disabled py-12\">\n <Typography variant=\"body2\">No RLS policies defined for this collection.</Typography>\n </div>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {rules.map((rule: SecurityRule) => (\n <Paper key={rule.name}\n className={\"p-4 border border-transparent hover:border-surface-200 dark:hover:border-surface-700 rounded-lg flex flex-col sm:flex-row sm:items-center justify-between gap-4 transition-colors bg-white dark:bg-surface-800 shadow-sm\"}>\n <div className=\"flex flex-col gap-1.5 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <KeyIcon size={iconSize.smallest} className=\"text-text-disabled dark:text-text-disabled-dark shrink-0\"/>\n <Typography variant=\"subtitle2\" className=\"truncate\">{rule.name}</Typography>\n </div>\n <div className=\"flex gap-2 text-xs pl-6 overflow-x-auto hide-scrollbar\">\n <Chip size=\"small\" className=\"bg-surface-100 dark:bg-surface-900 text-text-secondary border-none\">Action: {rule.operation || \"ALL\"}</Chip>\n <Chip size=\"small\" className=\"bg-surface-100 dark:bg-surface-900 text-text-secondary border-none\">Roles: {Array.isArray(rule.roles) ? rule.roles.join(\", \") : rule.roles}</Chip>\n </div>\n </div>\n <div className=\"flex items-center gap-1 sm:gap-2 shrink-0\">\n <Button size=\"small\" variant=\"text\" onClick={() => setEditingPolicy({\n policyname: rule.name,\n tablename: values.id || values.table || values.alias || \"your_table\",\n permissive: (rule.mode || \"permissive\").toUpperCase() as PostgresPolicy[\"permissive\"],\n cmd: (rule.operation || \"ALL\").toUpperCase() as PostgresPolicy[\"cmd\"],\n roles: rule.roles || [\"public\"],\n qual: rule.using || null,\n with_check: rule.withCheck || null\n })}>\n EDIT\n </Button>\n <IconButton size=\"small\" onClick={() => {\n setFieldValue(\"securityRules\", rules.filter((r: SecurityRule) => r.name !== rule.name));\n }}>\n <Trash2Icon size={iconSize.smallest} className=\"text-text-secondary dark:text-text-secondary-dark hover:text-red-500 dark:hover:text-red-500 transition-colors\"/>\n </IconButton>\n </div>\n </Paper>\n ))}\n </div>\n )}\n\n {isLoadingDb && unmappedPolicies.length === 0 && (\n <div className=\"flex justify-center mt-8\">\n <CircularProgress size=\"small\"/>\n </div>\n )}\n\n {!isLoadingDb && unmappedPolicies.length > 0 && (\n <div className=\"mt-12 flex flex-col gap-4\">\n <Typography variant=\"h6\" className=\"text-text-secondary\">Unmapped Database Policies</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary opacity-80 -mt-2\">\n These policies exist in your Postgres database but are not mapped to this collection&apos;s codebase configuration.\n </Typography>\n <div className=\"flex flex-col gap-3\">\n {unmappedPolicies.map(dp => (\n <Paper key={dp.policyname}\n className={\"p-4 border border-orange-200 dark:border-orange-900/50 bg-orange-50/50 dark:bg-orange-900/10 rounded-lg flex flex-col sm:flex-row sm:items-center justify-between gap-4 transition-colors\"}>\n <div className=\"flex flex-col gap-1.5 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <KeyIcon size={iconSize.smallest} className=\"text-orange-500 shrink-0\"/>\n <Typography variant=\"subtitle2\" className=\"truncate\">{dp.policyname}</Typography>\n <Tooltip title=\"This policy is live in the database but missing from your codebase schema.\">\n <div className=\"px-1.5 py-0.5 rounded text-[10px] uppercase bg-orange-500/10 text-orange-600 border border-orange-500/20 shrink-0\">\n DB Only\n </div>\n </Tooltip>\n </div>\n <div className=\"flex gap-2 text-xs pl-6 overflow-x-auto hide-scrollbar\">\n <Chip size=\"small\" className=\"bg-white dark:bg-surface-900 text-text-secondary border-none\">Action: {dp.cmd || \"ALL\"}</Chip>\n <Chip size=\"small\" className=\"bg-white dark:bg-surface-900 text-text-secondary border-none\">Roles: {Array.isArray(dp.roles) ? dp.roles.join(\", \") : dp.roles}</Chip>\n </div>\n </div>\n <div className=\"flex items-center gap-1 sm:gap-2 shrink-0\">\n <Button size=\"small\" variant=\"outlined\" color=\"primary\" onClick={() => {\n const rule: SecurityRule = {\n name: dp.policyname,\n operation: dp.cmd?.toLowerCase(),\n mode: dp.permissive?.toLowerCase(),\n using: dp.qual || undefined,\n withCheck: dp.with_check || undefined,\n roles: dp.roles\n };\n setFieldValue(\"securityRules\", [...rules, rule]);\n }}>\n Import to codebase\n </Button>\n </div>\n </Paper>\n ))}\n </div>\n </div>\n )}\n </div>\n <Dialog open={!!editingPolicy} onOpenChange={(open) => !open && setEditingPolicy(null)} maxWidth=\"4xl\">\n {editingPolicy && (\n <InlinePolicyEditor\n policy={editingPolicy === \"new\" ? undefined : editingPolicy}\n table={values.id || values.table || values.alias || \"your_table\"}\n onSave={handleSave}\n onCancel={() => setEditingPolicy(null)}\n />\n )}\n </Dialog>\n </Container>\n </div>\n );\n}\n\n// ─── Inline Policy Editor (no Monaco dependency) ────────────────────\n\ntype PolicyCommand = \"ALL\" | \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\";\nconst COMMAND_OPTIONS: PolicyCommand[] = [\"ALL\", \"SELECT\", \"INSERT\", \"UPDATE\", \"DELETE\"];\nconst ROLE_OPTIONS = [\"public\", \"authenticated\", \"anon\", \"admin\"];\n\nfunction InlinePolicyEditor({\n policy,\n table,\n onSave,\n onCancel\n}: {\n policy?: PostgresPolicy;\n table: string;\n onSave: (policyData: Partial<PostgresPolicy>) => void;\n onCancel: () => void;\n}) {\n const [name, setName] = useState(policy?.policyname || \"\");\n const [behavior, setBehavior] = useState<\"PERMISSIVE\" | \"RESTRICTIVE\">(policy?.permissive || \"PERMISSIVE\");\n const [command, setCommand] = useState<PolicyCommand>((policy?.cmd as PolicyCommand) || \"ALL\");\n const [roles, setRoles] = useState<string[]>(\n policy?.roles ? (Array.isArray(policy.roles) ? policy.roles : [policy.roles]) : [\"public\"]\n );\n const [usingExpr, setUsingExpr] = useState(policy?.qual || \"\");\n const [checkExpr, setCheckExpr] = useState(policy?.with_check || \"\");\n\n const showCheck = command === \"ALL\" || command === \"INSERT\" || command === \"UPDATE\";\n\n return (\n <>\n <DialogTitle variant=\"h6\">\n {policy ? \"Edit Policy\" : \"Create Policy\"}\n <div className=\"text-sm font-normal text-text-secondary dark:text-text-secondary-dark tracking-wide mt-1\">\n Define RLS rules for <span className=\"font-mono text-primary bg-primary-bg dark:bg-primary-bg-dark px-1 py-0.5 rounded\">public.{table}</span>\n </div>\n </DialogTitle>\n <DialogContent className=\"p-4 md:p-6 border-t dark:border-surface-700 bg-surface-50 dark:bg-surface-800\" includeMargin={false}>\n <Paper className={cls(\"p-4 md:p-6 flex flex-col gap-6 bg-white dark:bg-surface-800 border-none sm:border-solid rounded-none sm:rounded-xl\", defaultBorderMixin)}>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Policy Name</Typography>\n <TextField value={name} onChange={(e: any) => setName(e.target.value)} placeholder=\"e.g. allow_read_all\"/>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Behavior</Typography>\n <Select value={behavior} onValueChange={(val: string) => setBehavior(val as any)} position=\"item-aligned\">\n <SelectItem value=\"PERMISSIVE\">Permissive</SelectItem>\n <SelectItem value=\"RESTRICTIVE\">Restrictive</SelectItem>\n </Select>\n </div>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Command</Typography>\n <div className=\"flex flex-wrap gap-1.5\">\n {COMMAND_OPTIONS.map(cmd => (\n <Button key={cmd} size=\"small\" variant={command === cmd ? \"filled\" : \"text\"} color=\"neutral\" onClick={() => setCommand(cmd)}>\n {cmd}\n </Button>\n ))}\n </div>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Target Roles</Typography>\n <MultiSelect size=\"small\" value={roles} onValueChange={setRoles} placeholder=\"Select roles\">\n {ROLE_OPTIONS.map(r => <MultiSelectItem key={r} value={r}>{r}</MultiSelectItem>)}\n </MultiSelect>\n </div>\n {command !== \"INSERT\" && (\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">USING expression</Typography>\n <TextField value={usingExpr} onChange={(e: any) => setUsingExpr(e.target.value)} placeholder=\"e.g. auth.uid() = user_id\"/>\n </div>\n )}\n {showCheck && (\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">WITH CHECK expression</Typography>\n <TextField value={checkExpr} onChange={(e: any) => setCheckExpr(e.target.value)} placeholder=\"e.g. auth.uid() = user_id\"/>\n </div>\n )}\n </Paper>\n </DialogContent>\n <DialogActions>\n <Button size=\"small\" variant=\"text\" color=\"neutral\" onClick={onCancel}>Cancel</Button>\n <Button size=\"small\" variant=\"filled\" color=\"primary\" disabled={!name}\n onClick={() => onSave({ policyname: name,\npermissive: behavior,\ncmd: command,\nroles,\nqual: usingExpr,\nwith_check: showCheck ? checkExpr : null })}\n >Save</Button>\n </DialogActions>\n </>\n );\n}\n","import { EntityCollection, Property, StringProperty, NumberProperty, ArrayProperty, TableColumnInfo, TableMetadata } from \"@rebasepro/types\";\nimport { prettifyIdentifier } from \"@rebasepro/utils\";\n\n/**\n * Maps a PostgreSQL column data type to a Rebase property type.\n */\nfunction pgTypeToRebaseProperty(column: TableColumnInfo): Property | null {\n const {\n column_name,\n data_type,\n udt_name,\n is_nullable,\n column_default,\n enum_values\n } = column;\n\n const required = is_nullable === \"NO\";\n const prettifiedName = prettifyIdentifier(column_name);\n\n // Detect if this column is a primary key (auto-generated id)\n const isAutoId = column_default != null && (\n column_default.includes(\"nextval\") ||\n column_default.includes(\"gen_random_uuid\") ||\n column_default.includes(\"uuid_generate\") ||\n column_default.includes(\"identity\")\n );\n\n // USER-DEFINED = PostgreSQL enums\n if (data_type === \"USER-DEFINED\" && enum_values && enum_values.length > 0) {\n return {\n type: \"string\",\n name: prettifiedName,\n enum: enum_values.map((v: string) => ({ id: v,\nlabel: prettifyIdentifier(v) })),\n validation: required ? { required: true } : undefined\n } as StringProperty;\n }\n\n const dt = data_type.toLowerCase();\n switch (dt) {\n case \"character varying\":\n case \"varchar\":\n case \"text\":\n case \"char\":\n case \"character\":\n case \"citext\": {\n let colType: \"varchar\" | \"text\" | \"char\" = \"varchar\";\n if (dt === \"text\" || dt === \"citext\") colType = \"text\";\n if (dt === \"char\" || dt === \"character\") colType = \"char\";\n const prop: StringProperty = {\n type: \"string\",\n name: prettifiedName,\n columnType: colType,\n validation: required ? { required: true } : undefined\n };\n if (isAutoId) {\n prop.isId = \"manual\";\n }\n return prop;\n }\n\n case \"uuid\": {\n const prop: StringProperty = {\n type: \"string\",\n name: prettifiedName,\n validation: required ? { required: true } : undefined\n };\n if (isAutoId) {\n prop.isId = \"uuid\";\n }\n return prop;\n }\n\n case \"integer\":\n case \"bigint\":\n case \"smallint\": {\n const colType = dt === \"bigint\" ? \"bigint\" : \"integer\";\n const prop: NumberProperty = {\n type: \"number\",\n name: prettifiedName,\n columnType: colType,\n validation: {\n ...(required ? { required: true } : {}),\n integer: true\n }\n };\n if (isAutoId) {\n prop.isId = \"increment\";\n }\n return prop;\n }\n\n case \"serial\":\n case \"bigserial\":\n case \"smallserial\": {\n const colType = dt === \"bigserial\" ? \"bigserial\" : \"serial\";\n return {\n type: \"number\",\n name: prettifiedName,\n columnType: colType,\n isId: \"increment\",\n validation: {\n ...(required ? { required: true } : {}),\n integer: true\n }\n } as NumberProperty;\n }\n\n case \"numeric\":\n case \"decimal\":\n case \"real\":\n case \"double precision\": {\n let colType: \"numeric\" | \"real\" | \"double precision\" = \"numeric\";\n if (dt === \"real\") colType = \"real\";\n if (dt === \"double precision\") colType = \"double precision\";\n return {\n type: \"number\",\n name: prettifiedName,\n columnType: colType,\n validation: required ? { required: true } : undefined\n };\n }\n\n case \"boolean\":\n return {\n type: \"boolean\",\n name: prettifiedName,\n validation: required ? { required: true } : undefined\n };\n\n case \"timestamp with time zone\":\n case \"timestamp without time zone\":\n case \"timestamp\":\n case \"timestamptz\":\n case \"date\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"time\": {\n let colType: \"timestamp\" | \"date\" | \"time\" = \"timestamp\";\n if (dt.startsWith(\"date\")) colType = \"date\";\n if (dt.startsWith(\"time \") || dt === \"time\") colType = \"time\";\n return {\n type: \"date\",\n name: prettifiedName,\n columnType: colType,\n validation: required ? { required: true } : undefined\n };\n }\n\n case \"jsonb\":\n case \"json\":\n return {\n type: \"map\",\n name: prettifiedName,\n columnType: dt === \"jsonb\" ? \"jsonb\" : \"json\",\n keyValue: true,\n properties: {}\n };\n\n case \"array\":\n case \"ARRAY\":\n return {\n type: \"array\",\n name: prettifiedName,\n of: { type: \"string\" }\n } as ArrayProperty;\n\n default:\n // Fallback: treat unknown types as string\n return {\n type: \"string\",\n name: prettifiedName,\n validation: required ? { required: true } : undefined\n };\n }\n}\n\n/**\n * Builds a partial EntityCollection from PostgreSQL table metadata.\n * This is used when creating a new collection from an existing database table.\n */\nexport function buildCollectionFromTableMetadata(\n tableName: string,\n metadata: TableMetadata\n): Partial<EntityCollection> {\n const properties: Record<string, Property> = {};\n const propertiesOrder: string[] = [];\n const relations: any[] = []; // In the builder/editor, target can be a string path before hydration\n const securityRules: any[] = [];\n\n // Parse columns\n for (const column of metadata.columns) {\n const property = pgTypeToRebaseProperty(column);\n if (property) {\n // Remove undefined keys so we don't output \"validation: undefined\"\n const propRecord = property as unknown as Record<string, unknown>;\n Object.keys(propRecord).forEach(key => propRecord[key] === undefined && delete propRecord[key]);\n\n properties[column.column_name] = property;\n propertiesOrder.push(column.column_name);\n }\n }\n\n // Parse Outgoing Foreign Keys -> Many-to-One / One-to-One\n if (metadata.foreignKeys) {\n for (const fk of metadata.foreignKeys) {\n const relName = fk.column_name.endsWith(\"_id\") ? fk.column_name.substring(0, fk.column_name.length - 3) : fk.column_name;\n relations.push({\n id: fk.column_name,\n relationName: relName,\n target: fk.foreign_table_name, // Will be hydrated later\n cardinality: \"one\",\n direction: \"owning\",\n localKey: fk.column_name\n });\n }\n }\n\n // Parse Incoming Junctions -> Many-to-Many\n if (metadata.junctions) {\n for (const junction of metadata.junctions) {\n const relName = junction.target_table_name; // E.g., 'roles'\n relations.push({\n id: junction.target_table_name + \"_relation\",\n relationName: relName,\n target: junction.target_table_name, // Will be hydrated later\n cardinality: \"many\",\n direction: \"owning\",\n through: {\n table: junction.junction_table_name,\n sourceColumn: junction.source_column_name,\n targetColumn: junction.target_column_name\n }\n });\n }\n }\n\n // Parse RLS Policies\n if (metadata.policies) {\n for (const policy of metadata.policies) {\n // Attempt to map typical cmds to operations.\n // Postgres cmd: SELECT, INSERT, UPDATE, DELETE, ALL\n let operations: string[] = [];\n switch (policy.cmd) {\n case \"ALL\": operations = [\"read\", \"create\", \"update\", \"delete\"]; break;\n case \"SELECT\": operations = [\"read\"]; break;\n case \"INSERT\": operations = [\"create\"]; break;\n case \"UPDATE\": operations = [\"update\"]; break;\n case \"DELETE\": operations = [\"delete\"]; break;\n }\n securityRules.push({\n name: policy.policy_name,\n operations,\n // roles is string[] e.g., [\"public\", \"authenticated\"]\n roles: policy.roles ?? [],\n qual: policy.qual,\n with_check: policy.with_check\n });\n }\n }\n\n const prettifiedName = prettifyIdentifier(tableName);\n\n return {\n name: prettifiedName,\n slug: tableName,\n table: tableName,\n properties,\n propertiesOrder,\n ...(relations.length > 0 ? { relations } : {}),\n ...(securityRules.length > 0 ? { securityRules } : {})\n };\n}\n","\nimport { useUnsavedChangesDialog, UnsavedChangesDialog } from \"@rebasepro/core\";\nimport { useNavigationStateController, useCollectionRegistryController, useUrlController } from \"../../_cms_internals\";\nimport * as React from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ConfirmationDialog, ErrorView, useAuthController, useCustomizationController, useSnackbarController } from \"@rebasepro/core\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\nimport { ArrowLeftIcon, CheckIcon } from \"lucide-react\";\nimport { Entity, EntityCollection, MapProperty, Properties, Property, PropertyConfig, User, getDataSourceCapabilities } from \"@rebasepro/types\";\nimport type { PostgresCollection } from \"@rebasepro/types\";\nimport { getSubcollections, isPropertyBuilder, removeInitialAndTrailingSlashes, getTableName } from \"@rebasepro/common\";\nimport { Button, cls, coolIconKeys, defaultBorderMixin, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, LoadingButton, Tab, Tabs, Typography } from \"@rebasepro/ui\";\nimport { CollectionEditorSchema } from \"./CollectionYupValidation\";\nimport { GeneralSettingsForm } from \"./GeneralSettingsForm\";\nimport { DisplaySettingsForm } from \"./DisplaySettingsForm\";\nimport { CollectionPropertiesEditorForm } from \"./CollectionPropertiesEditorForm\";\nimport { CollectionRelationsTab } from \"./CollectionRelationsTab\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionEditorWelcomeView } from \"./CollectionEditorWelcomeView\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { getInferenceType, ImportSaveInProgress, useImportConfig } from \"../../_cms_internals\";\nimport { buildEntityPropertiesFromData } from \"@rebasepro/schema-inference\";\nimport { CollectionEditorImportMapping } from \"./import/CollectionEditorImportMapping\";\nimport { CollectionEditorImportDataPreview } from \"./import/CollectionEditorImportDataPreview\";\nimport { cleanPropertiesFromImport } from \"./import/clean_import_data\";\nimport { Formex, FormexController, useCreateFormex } from \"@rebasepro/formex\";\nimport { getFullIdPath } from \"./util\";\nimport { AICollectionGeneratorPopover } from \"./AICollectionGeneratorPopover\";\nimport { AIModifiedPathsProvider, useAIModifiedPaths } from \"./AIModifiedPathsContext\";\nimport { CollectionOperation, CollectionGenerationCallback } from \"../../api/generateCollectionApi\";\nimport { CollectionRLSTab } from \"./CollectionRLSTab\";\nimport { buildCollectionFromTableMetadata } from \"../../pgColumnToProperty\";\nimport { TableMetadata } from \"@rebasepro/types\";\nimport { mergeDeep, randomString, removeUndefined } from \"@rebasepro/utils\";\n\nexport interface CollectionEditorDialogProps {\n open: boolean;\n isNewCollection: boolean;\n initialValues?: {\n group?: string,\n slug?: string,\n name?: string,\n }\n /**\n * A collection to duplicate from. If provided, the new collection will be\n * pre-populated with the same properties (but with empty name, path, and id).\n */\n copyFrom?: EntityCollection;\n editedCollectionId?: string;\n path?: string; // full path of this particular collection, like `products/123/locales`\n parentCollectionIds?: string[]; // path ids of the parent collection, like [`products`]\n handleClose: (collection?: EntityCollection) => void;\n configController: CollectionsConfigController;\n reservedGroups?: string[];\n collectionInference?: CollectionInference;\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode | any\n };\n getUser?: (uid: string) => User | null;\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n parentCollection?: EntityCollection;\n existingEntities?: Entity<any>[];\n /**\n * Initial view to open when editing: \"general\", \"display\", or \"properties\".\n * For new collections, this is ignored.\n */\n initialView?: \"general\" | \"display\" | \"properties\";\n /**\n * If true, auto-expand the Kanban configuration section.\n */\n expandKanban?: boolean;\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection?: CollectionGenerationCallback;\n /**\n * Optional analytics callback\n */\n onAnalyticsEvent?: (event: string, params?: object) => void;\n /**\n * If true, it indicates that the editor is rendered inline (not in a dialog) and therefore updates headers and footers to adapt to the layout.\n */\n fullScreen?: boolean;\n /**\n * List of unmapped database tables available for import.\n */\n unmappedTables?: string[];\n /**\n * Callback to fetch column metadata for a table.\n */\n onFetchTableMetadata?: (tableName: string) => Promise<TableMetadata | undefined>;\n}\n\nexport function CollectionEditorDialog(props: CollectionEditorDialogProps) {\n\n const open = props.open;\n\n const [formDirty, setFormDirty] = React.useState<boolean>(false);\n\n const { dialogProps, triggerDialog } = useUnsavedChangesDialog(\n open && formDirty,\n () => props.handleClose(undefined)\n );\n\n const handleCancel = () => {\n if (!formDirty) {\n props.handleClose(undefined);\n } else {\n triggerDialog();\n }\n };\n\n useEffect(() => {\n if (!open) {\n setFormDirty(false);\n }\n }, [open]);\n\n return (\n <Dialog\n open={open}\n fullWidth={true}\n fullHeight={true}\n scrollable={false}\n maxWidth={\"7xl\"}\n onOpenChange={(open) => !open ? handleCancel() : undefined}\n >\n <DialogTitle hidden>Collection editor</DialogTitle>\n <AIModifiedPathsProvider>\n {open && <CollectionEditor {...props}\n handleCancel={handleCancel}\n setFormDirty={setFormDirty}/>}\n\n <UnsavedChangesDialog {...dialogProps}/>\n </AIModifiedPathsProvider>\n </Dialog>\n );\n}\n\ntype EditorView = \"welcome\"\n | \"general\"\n | \"display\"\n | \"import_data_mapping\"\n | \"import_data_preview\"\n | \"import_data_saving\"\n | \"properties\"\n | \"loading\"\n | \"extra_view\"\n | \"relations\"\n | \"rls\";\n\nexport function CollectionEditor(props: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void\n}) {\n const { propertyConfigs } = useCustomizationController();\n const navigationState = useNavigationStateController();\n const collectionRegistry = useCollectionRegistryController();\n const authController = useAuthController();\n\n const {\n topLevelNavigation\n } = navigationState;\n const {\n collections\n } = collectionRegistry;\n\n const initialValuesProp = props.initialValues;\n const copyFromProp = props.copyFrom;\n // Skip templates when duplicating (copyFrom is provided)\n const includeTemplates = !copyFromProp && !initialValuesProp?.slug && (props.parentCollectionIds ?? []).length === 0;\n const collectionsInThisLevel = (props.parentCollection ? getSubcollections(props.parentCollection) : collections) ?? [];\n const existingPaths = collectionsInThisLevel.map(col => getTableName(col)?.trim().toLowerCase()).filter(Boolean);\n const existingIds = collectionsInThisLevel.map(col => col.slug?.trim().toLowerCase()).filter(Boolean) as string[];\n const [collection, setCollection] = React.useState<EntityCollection<any> | undefined>();\n const [initialLoadingCompleted, setInitialLoadingCompleted] = React.useState(false);\n\n useEffect(() => {\n try {\n if (collectionRegistry.initialised) {\n if (props.editedCollectionId) {\n // We must use getRawCollection so the editor schema fields\n // aren't polluted with dynamically injected runtime `relations`.\n // The path lookup relies on generating a fake child path to resolve through the registry\n const collectionPath = [...(props.parentCollectionIds ?? []), props.editedCollectionId]\n .reduce((acc, segment, i) => i === 0 ? segment : `${acc}/fake_id/${segment}`, \"\");\n\n setCollection(collectionRegistry.getRawCollection(collectionPath) as EntityCollection<any>);\n } else {\n setCollection(undefined);\n }\n setInitialLoadingCompleted(true);\n }\n } catch (e) {\n console.error(e);\n }\n }, [props.editedCollectionId, props.parentCollectionIds, collectionRegistry.initialised, collectionRegistry.getRawCollection]);\n\n const groups = topLevelNavigation?.groups ?? [];\n\n const initialCollection = collection\n ? {\n ...collection,\n slug: collection.slug ?? randomString(16)\n }\n : undefined;\n\n // Build initial values - handle copyFrom for duplication\n const initialValues: EntityCollection<any> = initialCollection\n ? applyPropertyConfigs(initialCollection, propertyConfigs)\n : copyFromProp\n ? (() => {\n // When duplicating, copy all properties but clear identifiers\n const { subcollections: _sub, ...rest } = copyFromProp as unknown as Record<string, unknown>;\n return {\n ...rest,\n name: \"\",\n ownerId: authController.user?.uid ?? \"\"\n } as EntityCollection<any>;\n })()\n : {\n slug: initialValuesProp?.slug ?? randomString(16),\n table: initialValuesProp?.slug ?? \"\",\n name: initialValuesProp?.name ?? \"\",\n group: initialValuesProp?.group ?? \"\",\n properties: {} as Properties,\n propertiesOrder: [],\n icon: coolIconKeys[Math.floor(Math.random() * coolIconKeys.length)],\n ownerId: authController.user?.uid ?? \"\"\n };\n\n if (!initialLoadingCompleted) {\n return <CircularProgressCenter/>;\n }\n\n if (!props.isNewCollection && (!collectionRegistry.initialised || !initialLoadingCompleted)) {\n return <CircularProgressCenter/>;\n }\n\n return <CollectionEditorInternal\n {...props}\n initialValues={initialValues}\n existingPaths={existingPaths}\n existingIds={existingIds}\n includeTemplates={includeTemplates}\n collection={collection}\n setCollection={setCollection}\n groups={groups}\n propertyConfigs={propertyConfigs}/>\n\n}\n\nfunction CollectionEditorInternal<M extends Record<string, unknown>>({\n isNewCollection,\n configController,\n editedCollectionId,\n parentCollectionIds,\n path,\n collectionInference,\n handleClose,\n reservedGroups,\n extraView,\n handleCancel,\n setFormDirty,\n getUser,\n parentCollection,\n getData,\n existingPaths,\n existingIds,\n includeTemplates,\n collection,\n setCollection,\n initialValues,\n propertyConfigs,\n groups,\n existingEntities,\n initialView: initialViewProp,\n expandKanban,\n generateCollection,\n onAnalyticsEvent,\n fullScreen,\n unmappedTables,\n onFetchTableMetadata\n}: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void,\n initialValues: EntityCollection<M>,\n existingPaths: string[],\n existingIds: string[],\n includeTemplates: boolean,\n collection: EntityCollection<M> | undefined,\n setCollection: (collection: EntityCollection<M>) => void,\n propertyConfigs: Record<string, PropertyConfig>,\n groups: string[],\n}\n) {\n\n const importConfig = useImportConfig();\n const urlController = useUrlController();\n const collectionRegistry = useCollectionRegistryController();\n const snackbarController = useSnackbarController();\n\n // Use this ref to store which properties have errors\n const propertyErrorsRef = useRef<Record<string, any>>({});\n\n const initialView = isNewCollection\n ? (includeTemplates ? \"welcome\" : \"general\")\n : (initialViewProp ?? \"properties\");\n const [currentView, setCurrentView] = useState<EditorView>(initialView); // this view can edit either the details view or the properties one\n\n const [error, setError] = React.useState<Error | undefined>();\n\n const saveCollection = (updatedCollection: EntityCollection<M>): Promise<boolean> => {\n const id = updatedCollection.slug;\n\n return configController.saveCollection({\n id,\n collectionData: updatedCollection,\n previousId: editedCollectionId,\n parentCollectionIds\n })\n .then(() => {\n setError(undefined);\n return true;\n })\n .catch((e) => {\n setError(e);\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n };\n\n const setNextMode = () => {\n if (currentView === \"general\") {\n if (importConfig.inUse) {\n setCurrentView(\"import_data_saving\");\n } else if (extraView) {\n setCurrentView(\"extra_view\");\n } else {\n setCurrentView(\"properties\");\n }\n } else if (currentView === \"welcome\") {\n setCurrentView(\"general\");\n } else if (currentView === \"import_data_mapping\") {\n setCurrentView(\"import_data_preview\");\n } else if (currentView === \"import_data_preview\") {\n setCurrentView(\"general\");\n } else if (currentView === \"extra_view\") {\n setCurrentView(\"properties\");\n } else {\n setCurrentView(\"general\");\n }\n\n };\n\n const doCollectionInference = collectionInference ? (collection: EntityCollection<any>) => {\n if (!collectionInference) return undefined;\n return collectionInference?.(\n collection.slug,\n parentPaths ?? [],\n collection.databaseId\n );\n } : undefined;\n\n const inferCollectionFromData = async (newCollection: EntityCollection<M>) => {\n\n try {\n if (!doCollectionInference) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n\n setCurrentView(\"loading\");\n\n const inferredCollection = await doCollectionInference?.(newCollection);\n\n if (!inferredCollection) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n const values = {\n ...(newCollection ?? {})\n };\n\n if (Object.keys(inferredCollection.properties ?? {}).length > 0) {\n values.properties = inferredCollection.properties as Properties;\n values.propertiesOrder = inferredCollection.propertiesOrder as Extract<keyof M, string>[];\n }\n\n if (!values.propertiesOrder) {\n values.propertiesOrder = Object.keys(values.properties) as Extract<keyof M, string>[];\n return values;\n }\n\n setCollection(values);\n console.debug(\"Inferred collection\", {\n newCollection: newCollection ?? {},\n values\n });\n return values;\n } catch (e: unknown) {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error inferring collection: \" + (e instanceof Error ? e.message : \"Details in the console\")\n });\n return newCollection;\n }\n };\n\n const onSubmit = async (newCollectionState: EntityCollection<M>, formexController: FormexController<EntityCollection<M>>) => {\n console.debug(\"Submitting collection\", newCollectionState);\n try {\n\n if (!isNewCollection) {\n const success = await saveCollection(newCollectionState);\n if (success) {\n aiModifiedPaths?.clearAllPaths();\n formexController.resetForm({ values: newCollectionState });\n handleClose(newCollectionState as unknown as EntityCollection);\n }\n return;\n }\n\n if (currentView === \"welcome\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"general\") {\n if (extraView || importConfig.inUse) {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n } else if (isNewCollection) {\n const values = await inferCollectionFromData(newCollectionState);\n formexController.resetForm({\n values: values ?? newCollectionState,\n touched: {\n path: true,\n name: true\n }\n });\n setNextMode();\n } else {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n }\n } else if (currentView === \"extra_view\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"import_data_mapping\") {\n setNextMode();\n } else if (currentView === \"import_data_preview\") {\n setNextMode();\n } else if (currentView === \"properties\") {\n const success = await saveCollection(newCollectionState);\n if (success) {\n formexController.resetForm({ values: initialValues });\n setNextMode();\n handleClose(newCollectionState as unknown as EntityCollection);\n }\n } else {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n }\n } catch (e: unknown) {\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e instanceof Error ? e.message : \"Details in the console\")\n });\n console.error(e);\n formexController.resetForm({ values: newCollectionState });\n }\n };\n\n const validation = (col: EntityCollection<M>) => {\n\n let errors: Record<string, string> = {};\n const schema = (currentView === \"properties\" || currentView === \"relations\" || currentView === \"general\") && CollectionEditorSchema;\n if (schema) {\n const result = schema.safeParse(col);\n if (!result.success) {\n result.error.issues.forEach((issue) => {\n const path = issue.path.join(\".\");\n if (path) {\n errors[path] = issue.message;\n }\n });\n }\n }\n if (currentView === \"properties\") {\n errors = { ...errors,\n...propertyErrorsRef.current };\n }\n if (currentView === \"general\") {\n const pathError = validatePath(getTableName(col), isNewCollection, existingPaths, col.slug);\n if (pathError) {\n errors.slug = pathError;\n }\n const idError = validateId(col.slug, isNewCollection, existingPaths, existingIds);\n if (idError) {\n errors.id = idError;\n }\n }\n if (Object.keys(errors).length > 0) {\n console.error(\"Formex validation blocked save:\", errors, \"Current view:\", currentView);\n }\n return errors;\n };\n\n const formController = useCreateFormex<EntityCollection<M>>({\n initialValues,\n onSubmit,\n validation,\n debugId: \"COLLECTION_EDITOR\"\n });\n\n const {\n values,\n setFieldValue,\n isSubmitting,\n dirty,\n submitCount\n } = formController;\n\n const usedPath = getTableName(values);\n const pathError = validatePath(usedPath, isNewCollection, existingPaths, values.slug);\n\n const parentPaths = !pathError && parentCollectionIds ? collectionRegistry.convertIdsToPaths(parentCollectionIds) : undefined;\n\n const updatedFullPath = parentPaths && parentPaths.length > 0\n ? [...parentPaths, usedPath].join(\"/fake_id/\")\n : (path?.includes(\"/\") ? path.split(\"/\").slice(0, -1).join(\"/\") + \"/\" + usedPath : usedPath);\n\n const resolvedPath = !pathError ? urlController.resolveDatabasePathsFrom(updatedFullPath) : undefined;\n const getDataWithPath = resolvedPath && getData ? async () => {\n const data = await getData!(resolvedPath, parentPaths ?? []);\n if (existingEntities) {\n const existingData = existingEntities.map(e => e.values);\n data.push(...existingData);\n }\n return data;\n } : undefined;\n\n useEffect(() => {\n setFormDirty(dirty);\n }, [dirty]);\n\n function onImportDataSet(data: object[], propertiesOrder?: string[]) {\n importConfig.setInUse(true);\n buildEntityPropertiesFromData(data, getInferenceType)\n .then((properties: Record<string, unknown>) => {\n const res = cleanPropertiesFromImport(properties as unknown as Properties);\n\n importConfig.setIdColumn(res.idColumn);\n importConfig.setImportData(data);\n importConfig.setHeadersMapping(res.headersMapping);\n const filteredHeadingsOrder = ((propertiesOrder ?? [])\n .filter((key) => res.headersMapping[key]) as string[]) ?? Object.keys(res.properties);\n importConfig.setHeadingsOrder(filteredHeadingsOrder);\n importConfig.setOriginProperties(res.properties);\n\n const mappedHeadings = (propertiesOrder ?? []).map((key) => res.headersMapping[key]).filter(Boolean) as string[] ?? Object.keys(res.properties);\n setFieldValue(\"properties\", res.properties);\n setFieldValue(\"propertiesOrder\", mappedHeadings);\n });\n }\n\n const validValues = Boolean(values.name) && Boolean(values.slug);\n\n const onImportMappingComplete = () => {\n const updatedProperties = { ...values.properties };\n if (importConfig.idColumn)\n delete updatedProperties[importConfig.idColumn];\n setFieldValue(\"properties\", updatedProperties);\n // setFieldValue(\"propertiesOrder\", Object.values(importConfig.headersMapping));\n setNextMode();\n };\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n if (!collection) return;\n configController?.deleteCollection({ id: collection.slug }).then(() => {\n setDeleteRequested(false);\n handleCancel();\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n const onWelcomeScreenContinue = (importData?: object[], propertiesOrder?: string[]) => {\n if (importData) {\n onImportDataSet(importData, propertiesOrder);\n setCurrentView(\"import_data_mapping\");\n } else {\n setCurrentView(\"general\");\n }\n };\n\n const aiModifiedPaths = useAIModifiedPaths();\n\n const handleAIGenerated = (generatedCollection: EntityCollection, operations?: CollectionOperation[]) => {\n formController.setValues(generatedCollection as EntityCollection<M>);\n if (operations && aiModifiedPaths) {\n aiModifiedPaths.addModifiedPaths(operations);\n }\n };\n\n return <div className=\"h-full w-full flex flex-col bg-white dark:bg-surface-800\">\n <Formex value={formController}>\n\n <>\n {!isNewCollection && <div className={cls(\"px-4 py-2 w-full flex shrink-0 items-center justify-between gap-4 bg-white dark:bg-surface-800 border-b\", defaultBorderMixin)}>\n <div className=\"flex flex-1 items-center justify-end gap-4 min-w-0\">\n <Tabs value={currentView}\n className=\"bg-transparent !w-fit max-w-full\"\n onValueChange={(v) => setCurrentView(v as EditorView)}>\n <Tab value={\"general\"}>\n General\n </Tab>\n <Tab value={\"display\"}>\n Display\n </Tab>\n <Tab value={\"properties\"}>\n Properties\n </Tab>\n {getDataSourceCapabilities(values.driver).supportsRLS && <Tab value={\"rls\"}>\n RLS\n </Tab>}\n {getDataSourceCapabilities(values.driver).supportsRelations && <Tab value={\"relations\"}>\n Relations\n </Tab>}\n </Tabs>\n </div>\n <div className=\"flex items-center gap-4\">\n {generateCollection && (\n <AICollectionGeneratorPopover\n existingCollection={values}\n onGenerated={handleAIGenerated}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n />\n )}\n {fullScreen && !isNewCollection && (\n <div className=\"flex items-center gap-2\">\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n onClick={() => formController.handleSubmit()}\n disabled={!dirty || isSubmitting || configController?.readOnly}\n loading={isSubmitting}\n >\n {configController?.readOnly ? \"Update (Read-only)\" : \"Update\"}\n </LoadingButton>\n </div>\n )}\n </div>\n </div>}\n\n <form noValidate\n onSubmit={formController.handleSubmit}\n className=\"flex-grow flex flex-col min-h-0 relative\">\n\n <div className=\"flex-grow flex flex-col min-h-0 overflow-y-auto no-scrollbar relative w-full h-full\">\n\n {currentView === \"loading\" &&\n <CircularProgressCenter/>}\n\n {currentView === \"extra_view\" &&\n usedPath &&\n extraView?.View &&\n <extraView.View path={usedPath}/>}\n\n {currentView === \"welcome\" &&\n <CollectionEditorWelcomeView\n path={usedPath}\n onContinue={onWelcomeScreenContinue}\n existingCollectionPaths={existingPaths}\n parentCollection={parentCollection}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n unmappedTables={unmappedTables}\n onImportFromTable={onFetchTableMetadata ? async (tableName: string) => {\n try {\n const columns = await onFetchTableMetadata!(tableName);\n if (!columns) return;\n const collectionData = buildCollectionFromTableMetadata(tableName, columns);\n formController.setValues({\n ...formController.values,\n ...collectionData\n } as EntityCollection<M>);\n onWelcomeScreenContinue();\n } catch (e: unknown) {\n console.error(\"Error importing table:\", e);\n snackbarController.open({\n type: \"error\",\n message: \"Error importing table: \" + (e instanceof Error ? e.message : \"Unknown error\")\n });\n }\n } : undefined}/>}\n\n {currentView === \"import_data_mapping\" && importConfig &&\n <CollectionEditorImportMapping importConfig={importConfig}\n propertyConfigs={propertyConfigs}/>}\n\n {currentView === \"import_data_preview\" && importConfig &&\n <CollectionEditorImportDataPreview importConfig={importConfig}\n properties={values.properties as Properties}\n propertiesOrder={values.propertiesOrder as string[]}/>}\n\n {currentView === \"import_data_saving\" && importConfig &&\n <ImportSaveInProgress importConfig={importConfig}\n collection={values}\n path={usedPath}\n onImportSuccess={async (importedCollection) => {\n snackbarController.open({\n type: \"info\",\n message: \"Data imported successfully\"\n });\n await saveCollection(values);\n handleClose(importedCollection);\n }}\n />}\n\n {currentView === \"general\" &&\n <GeneralSettingsForm\n existingPaths={existingPaths}\n existingIds={existingIds}\n parentCollection={parentCollection}\n isNewCollection={isNewCollection}/>\n }\n\n {currentView === \"display\" &&\n <DisplaySettingsForm expandKanban={expandKanban}/>\n }\n\n {currentView === \"relations\" && getDataSourceCapabilities(values.driver).supportsRelations &&\n <CollectionRelationsTab/>\n }\n\n {currentView === \"rls\" && getDataSourceCapabilities(values.driver).supportsRLS &&\n <CollectionRLSTab/>\n }\n\n {currentView === \"properties\" &&\n <CollectionPropertiesEditorForm\n showErrors={submitCount > 0}\n isNewCollection={isNewCollection}\n reservedGroups={reservedGroups}\n onPropertyError={(propertyKey, namespace, error) => {\n const current = removeUndefined({\n ...propertyErrorsRef.current,\n [getFullIdPath(propertyKey, namespace)]: removeUndefined(error, true)\n }, true) as Record<string, any>;\n propertyErrorsRef.current = current;\n formController.validate();\n }}\n getUser={getUser}\n getData={getDataWithPath}\n doCollectionInference={doCollectionInference}\n propertyConfigs={propertyConfigs}\n\n extraIcon={extraView?.icon &&\n <IconButton\n color={\"primary\"}\n onClick={() => setCurrentView(\"extra_view\")}>\n {extraView.icon}\n </IconButton>}/>\n }\n\n </div>\n {(!fullScreen || isNewCollection || !!error) && (\n <div className=\"shrink-0 w-full p-4 sm:px-6 sm:py-4 border-t border-surface-200 dark:border-surface-800 flex items-center justify-between gap-4 bg-white dark:bg-surface-800\">\n {error && <ErrorView error={error}/>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_mapping\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n importConfig.setInUse(false);\n return setCurrentView(\"welcome\");\n }}>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_preview\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n setCurrentView(\"import_data_mapping\");\n }}>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"general\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"welcome\")}>\n Back\n </Button>}\n\n {isNewCollection && currentView === \"properties\" && <Button variant={\"text\"}\n type=\"button\"\n color={\"neutral\"}\n onClick={() => setCurrentView(\"general\")}>\n <ArrowLeftIcon/>\n Back\n </Button>}\n\n {(!fullScreen || isNewCollection) && (\n <Button variant={\"text\"}\n color={\"neutral\"}\n onClick={() => {\n handleCancel();\n }}>\n Cancel\n </Button>\n )}\n\n {currentView === \"welcome\" &&\n <Button variant={\"text\"} onClick={() => onWelcomeScreenContinue()}>\n Continue from scratch\n </Button>}\n\n {isNewCollection && currentView === \"import_data_mapping\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={onImportMappingComplete}\n >\n Next\n </Button>}\n\n {isNewCollection && currentView === \"import_data_preview\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={() => {\n setNextMode();\n }}\n >\n Next\n </Button>}\n\n {isNewCollection && (currentView === \"general\" || currentView === \"properties\") &&\n <LoadingButton\n variant={\"filled\"}\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n disabled={isSubmitting || (currentView === \"general\" && !validValues)}\n startIcon={currentView === \"properties\"\n ? <CheckIcon/>\n : undefined}\n >\n {currentView === \"general\" && \"Next\"}\n {currentView === \"properties\" && \"Create collection\"}\n </LoadingButton>}\n\n {!isNewCollection && !fullScreen && <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={isSubmitting || configController?.readOnly}\n loading={isSubmitting}\n >\n {configController?.readOnly ? \"Update collection (Read-only)\" : \"Update collection\"}\n </LoadingButton>}\n\n </div>\n )}\n </form>\n </>\n\n </Formex>\n\n <ConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete the stored config?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the stored config, and reset to the code state.</>}/>\n\n </div>\n\n}\n\nfunction applyPropertyConfigs<M extends Record<string, unknown> = Record<string, unknown>>(collection: EntityCollection<M>, propertyConfigs: Record<string, PropertyConfig>): EntityCollection<M> {\n const {\n properties,\n ...rest\n } = collection;\n const propertiesResult: Properties = {};\n if (properties) {\n Object.keys(properties).forEach((key) => {\n const prop = properties[key];\n if (prop == null) return;\n propertiesResult[key] = applyPropertiesConfig(prop, propertyConfigs);\n });\n }\n\n return {\n ...rest,\n properties: propertiesResult\n };\n}\n\nfunction applyPropertiesConfig(property: Property, propertyConfigs: Record<string, PropertyConfig>) {\n let internalProperty = property;\n if (propertyConfigs && internalProperty && typeof internalProperty === \"object\" && internalProperty.propertyConfig) {\n const propertyConfig = propertyConfigs[internalProperty.propertyConfig];\n if (propertyConfig && isPropertyBuilder(propertyConfig.property as Property)) {\n internalProperty = propertyConfig.property as unknown as Property;\n } else {\n\n if (propertyConfig) {\n internalProperty = mergeDeep(propertyConfig.property as Property, internalProperty);\n }\n\n if (!isPropertyBuilder(internalProperty) && internalProperty.type === \"map\" && internalProperty.properties) {\n const properties: Record<string, Property> = {};\n Object.keys(internalProperty.properties).forEach((key) => {\n properties[key] = applyPropertiesConfig(((internalProperty as MapProperty).properties as Properties)[key] as Property, propertyConfigs);\n });\n internalProperty = {\n ...internalProperty,\n properties\n };\n }\n\n }\n }\n return internalProperty;\n\n}\n\nconst validatePath = (value: string, isNewCollection: boolean, existingPaths: string[], idValue?: string) => {\n let error;\n if (!value) {\n error = \"You must specify a path in the database for this collection\";\n }\n // if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n // error = \"There is already a collection which uses this path as an id\";\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()) && !idValue)\n error = \"There is already a collection with the specified path. If you want to have multiple collections referring to the same database path, make sure the have different ids\";\n\n const subpaths = removeInitialAndTrailingSlashes(value).split(\"/\");\n if (subpaths.length % 2 === 0) {\n error = `Collection paths must have an odd number of segments: ${value}`;\n }\n return error;\n};\n\nconst validateId = (value: string, isNewCollection: boolean, existingPaths: string[], existingIds: string[]) => {\n if (!value) return undefined;\n let error;\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection that uses this value as a path\";\n if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection which uses this id\";\n // if (error) {\n // setAdvancedPanelExpanded(true);\n // }\n return error;\n};\n"],"names":["CollectionEditorSchema","z","object","slug","string","min","name","table","GeneralSettingsForm","t0","$","_c","isNewCollection","parentCollection","values","setFieldValue","handleChange","touched","errors","setFieldTouched","submitCount","useFormex","iconDialogOpen","setIconDialogOpen","useState","useAuthController","useCustomizationController","configController","useCollectionsConfigController","t1","databaseId","undefined","updateDatabaseId","t2","pathTouched","getIn","toSnakeCase","idTouched","singularNameTouched","singular","updateName","t3","collectionIcon","isSubcollection","showErrors","t4","t5","t6","t7","readOnly","t8","t9","t10","Symbol","for","t11","t12","t13","t14","t15","t16","t17","e","target","value","t18","Boolean","t19","t20","t21","t22","t23","t24","cls","t25","t26","DebouncedTextField","t27","t28","t29","t30","t31","singularName","t32","e_0","t33","t34","t35","t36","t37","t38","t39","description","t40","t41","t42","t43","t44","t45","t46","t47","e_1","t48","t49","t50","t51","t52","t53","t54","t55","t56","history","t57","t58","height","t59","icon","t60","t61","t62","t63","DefaultDatabaseField","disabled","onDatabaseIdUpdate","LayoutModeSwitch","onChange","className","label","ViewModeSwitch","KanbanConfigSection","forceExpanded","customizationController","panelRef","useRef","columnPropertyDialogOpen","setColumnPropertyDialogOpen","enumStringProperties","useMemo","result","properties","Object","entries","forEach","key","prop","type","enum","push","property","kanbanConfig","kanban","columnPropertyMissing","columnProperty","some","p","React","useEffect","current","setTimeout","scrollIntoView","behavior","block","showCreateButton","dialogPropertyKey","dialogPropertyName","unslugify","length","v","find","fieldConfig","getFieldConfig","propertyConfigs","stopPropagation","iconSize","smallest","map","id","keys","newProperties","newPropertiesOrder","propertiesOrder","DisplaySettingsForm","expandKanban","orderPropertyDialogOpen","setOrderPropertyDialogOpen","textProperties","openEntityMode","defaultViewMode","orderPropertyMissing","orderProperty","hideFromCollection","defaultSize","toUpperCase","isNaN","Number","sideDialogWidth","small","inlineEditing","includeJsonView","GetCodeDialog","collection","onOpenChange","open","snackbarController","useSnackbarController","code","camelCase","JSON5","stringify","collectionToCode","themes","vsDark","_temp","preventDefault","message","navigator","clipboard","writeText","style","tokens","getLineProps","getTokenProps","line","i","token","propertyCleanup","valueCopy","clone","Array","isArray","obj","isEmptyObject","childRes","resolved","propertyConfig","path","group","filter","sort","reduce","a","b","CollectionPropertiesEditorForm","propertyErrorsRef","onPropertyError","setDirty","reservedGroups","extraIcon","getUser","getData","doCollectionInference","setFieldError","dirty","largeLayout","useLargeLayout","asDialog","selectedPropertyIndex","setSelectedPropertyIndex","selectedPropertyKey","setSelectedPropertyKey","selectedPropertyNamespace","setSelectedPropertyNamespace","selectedPropertyFullId","getFullId","selectedProperty","replaceAll","codeDialogOpen","setCodeDialogOpen","inferringProperties","setInferringProperties","newPropertyDialogOpen","setNewPropertyDialogOpen","inferredPropertyKeys","setInferredPropertyKeys","currentPropertiesOrderRef","inferPropertiesFromData","console","debug","then","newCollection","findNewPropertyKeys","existingProps","newProps","namespace","fullKey","existingProp","newProp","dataType","existingMapProps","addNewPropertiesOnly","updatedProperties","allNewPropertyKeys","newTopLevelPropertyKeys","propertyKey","allExistingKeys","updatedPropertiesOrder","includes","updatePropertiesOrder","finally","getCurrentPropertiesOrder","namespaceToPropertiesOrderPath","propertiesOrderPath","deleteProperty","fullId","Error","idToPropertiesPath","currentPropertiesOrder","onPropertyMove","onPropertyCreated","indexOf","onPropertyChanged","previousId","propertyPath","previousFullId","previousPropertyPath","onPropertyErrorInternal","error","hasError","closePropertyDialog","initialErrors","emptyCollection","usedPropertiesOrder","owner","ownerId","aiModifiedPaths","useAIModifiedPaths","generationCounter","onPropertyClick","body","defaultBorderMixin","displayName","additionalFields","isPropertyBuilder","CollectionRelationsTab","collections","editingRelationIndex","setEditingRelationIndex","editingRelationState","setEditingRelationState","getTargetSlug","match","col","relations","handleDelete","index","newRelations","splice","handleSave","handleCancel","relationName","cardinality","direction","relation","width","prev","val","targetFn","c","through","sourceColumn","targetColumn","EXAMPLE_JSON","CollectionJsonImportDialog","onClose","onImport","jsonValue","setJsonValue","setErrors","setTouched","trim","validateCollectionJson","handleJsonChange","result_0","valid","handleImport","handleClose","isValid","open_0","productsCollectionTemplate","validation","required","brand","markdown","main_image","storage","storagePath","acceptedFiles","available","columnWidth","price","requiredMessage","images","of","related_products","metadata","keyValue","added_on","autoValue","blogCollectionTemplate","header_image","cacheControl","content","oneOf","typeField","valueField","text","quote","multiline","products","previewProperties","created_on","status","published","draft","defaultValue","publish_date","clearable","reviewed","tags","previewAsTag","usersCollectionTemplate","email","emailVerified","phone","favourite_products","photoURL","url","pagesCollectionTemplate","title","unique","matches","matchesMessage","hero_section","headline","subhead","background_image","call_to_action","call_to_action_link","section","image","link","slider","sidebar","seo_metadata","meta_title","meta_description","focus_keywords","footer_override","last_updated","is_published","AICollectionGeneratorPopover","existingCollection","onGenerated","generateCollection","trigger","size","showLabel","onAnalyticsEvent","menuOpen","setMenuOpen","prompt","setPrompt","loading","setLoading","setError","collectionRegistry","useCollectionRegistryController","existingCollections","handleGenerate","mode","collectionsContext","slice","operations","operationsCount","errorMessage","CollectionGenerationApiError","handleKeyDown","shiftKey","tooltipTitle","readOnlyReason","defaultTrigger","CollectionEditorWelcomeView","onContinue","existingCollectionPaths","unmappedTables","onImportFromTable","pathSuggestions","useCollectionEditorController","s","toLowerCase","filteredSuggestions","setValues","jsonImportOpen","setJsonImportOpen","importingTable","setImportingTable","T0","t","c_0","filteredUnmappedTables","Container","tableName","prettifyIdentifier","suggestion","generatedCollection","data","TemplateButton","subtitle","onClick","CollectionEditorImportMapping","importConfig","setSelectedProperty","property_0","namespace_0","namespace_1","newPropertiesOrder_0","newHeadersMapping","headersMapping","setHeadersMapping","importData","id_0","importKey","property_1","namespace_2","fullId_0","propertyPath_0","propertyData","d","inferredNewProperty","buildPropertyFromData","getInferenceType","onPropertyTypeChanged","property_2","propertyKey_0","importKey_0","isIdColumn","propertyKey_1","props","p_0","PropertySelect","getFieldId","fieldId","widget","selectOpen","setSelectOpen","newSelectedWidgetId","newProperty","updatePropertyFromWidget","supportedFields","_temp2","widget_0","ImportPropertySelectItem","optionDisabled","existing","CollectionEditorImportDataPreview","authController","registry","loadEntities","mappedData","convertDataToEntity","idColumn","defaultValues","setEntities","selectionController","useSelectionController","entities","dataLoading","noMoreToLoad","cleanPropertiesFromImport","parentSlug","acc","slugify","fullSlug","slugifiedResult","firstKey","CollectionRLSTab","editingPolicy","setEditingPolicy","rules","securityRules","databaseAdmin","useRebaseContext","dbPolicies","setDbPolicies","isLoadingDb","setIsLoadingDb","fetchLivePolicies","alias","executeSql","sql","extractRows","res","rows","pRows","policies","parsedRoles","r","roles","ROLES","replace","split","policyname","POLICYNAME","tablename","permissive","PERMISSIVE","cmd","CMD","qual","QUAL","with_check","WITH_CHECK","unmappedPolicies","dp","newPolicy","rule","operation","using","withCheck","newRules","join","COMMAND_OPTIONS","ROLE_OPTIONS","InlinePolicyEditor","policy","onSave","onCancel","setName","setBehavior","command","setCommand","setRoles","usingExpr","setUsingExpr","checkExpr","setCheckExpr","showCheck","pgTypeToRebaseProperty","column","column_name","data_type","udt_name","is_nullable","column_default","enum_values","prettifiedName","isAutoId","dt","colType","columnType","isId","integer","startsWith","buildCollectionFromTableMetadata","columns","propRecord","foreignKeys","fk","relName","endsWith","substring","foreign_table_name","localKey","junctions","junction","target_table_name","junction_table_name","source_column_name","target_column_name","policy_name","CollectionEditorDialog","formDirty","setFormDirty","dialogProps","triggerDialog","useUnsavedChangesDialog","CollectionEditor","navigationState","useNavigationStateController","topLevelNavigation","initialValuesProp","initialValues","copyFromProp","copyFrom","includeTemplates","parentCollectionIds","collectionsInThisLevel","getSubcollections","existingPaths","getTableName","existingIds","setCollection","initialLoadingCompleted","setInitialLoadingCompleted","initialised","editedCollectionId","collectionPath","segment","getRawCollection","groups","initialCollection","randomString","applyPropertyConfigs","subcollections","_sub","rest","user","uid","coolIconKeys","Math","floor","random","CollectionEditorInternal","collectionInference","extraView","existingEntities","initialView","initialViewProp","fullScreen","onFetchTableMetadata","useImportConfig","urlController","useUrlController","currentView","setCurrentView","saveCollection","updatedCollection","collectionData","catch","setNextMode","inUse","parentPaths","inferCollectionFromData","Promise","resolve","inferredCollection","onSubmit","newCollectionState","formexController","success","clearAllPaths","resetForm","schema","safeParse","issues","issue","pathError","validatePath","idError","validateId","formController","useCreateFormex","debugId","isSubmitting","usedPath","convertIdsToPaths","updatedFullPath","resolvedPath","resolveDatabasePathsFrom","getDataWithPath","existingData","onImportDataSet","setInUse","buildEntityPropertiesFromData","setIdColumn","setImportData","filteredHeadingsOrder","setHeadingsOrder","setOriginProperties","mappedHeadings","validValues","onImportMappingComplete","deleteRequested","setDeleteRequested","deleteCollection","onWelcomeScreenContinue","handleAIGenerated","addModifiedPaths","getDataSourceCapabilities","driver","supportsRLS","supportsRelations","handleSubmit","View","importedCollection","removeUndefined","getFullIdPath","validate","propertiesResult","applyPropertiesConfig","internalProperty","mergeDeep","idValue","subpaths","removeInitialAndTrailingSlashes"],"mappings":"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"}