@rebasepro/cms 0.0.1-canary.4d4fb3e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +6 -0
- package/dist/CollectionEditorDialog-DiZYNmYV.js +4731 -0
- package/dist/CollectionEditorDialog-DiZYNmYV.js.map +1 -0
- package/dist/CollectionsStudioView-BHVTfAuK.js +224 -0
- package/dist/CollectionsStudioView-BHVTfAuK.js.map +1 -0
- package/dist/PropertyEditView-BC5GO9AI.js +7776 -0
- package/dist/PropertyEditView-BC5GO9AI.js.map +1 -0
- package/dist/collection_editor/CollectionEditorDialogsContext.d.ts +19 -0
- package/dist/collection_editor/ConfigControllerProvider.d.ts +45 -0
- package/dist/collection_editor/_cms_internals.d.ts +29 -0
- package/dist/collection_editor/api/generateCollectionApi.d.ts +77 -0
- package/dist/collection_editor/api/index.d.ts +1 -0
- package/dist/collection_editor/index.d.ts +16 -0
- package/dist/collection_editor/pgColumnToProperty.d.ts +6 -0
- package/dist/collection_editor/types/collection_editor_controller.d.ts +56 -0
- package/dist/collection_editor/types/collection_inference.d.ts +10 -0
- package/dist/collection_editor/types/config_controller.d.ts +91 -0
- package/dist/collection_editor/types/config_permissions.d.ts +19 -0
- package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +11 -0
- package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +10 -0
- package/dist/collection_editor/ui/EditorCollectionAction.d.ts +2 -0
- package/dist/collection_editor/ui/EditorCollectionActionStart.d.ts +2 -0
- package/dist/collection_editor/ui/EditorEntityAction.d.ts +2 -0
- package/dist/collection_editor/ui/HomePageEditorCollectionAction.d.ts +2 -0
- package/dist/collection_editor/ui/KanbanSetupAction.d.ts +10 -0
- package/dist/collection_editor/ui/MissingReferenceWidget.d.ts +3 -0
- package/dist/collection_editor/ui/NewCollectionButton.d.ts +1 -0
- package/dist/collection_editor/ui/NewCollectionCard.d.ts +2 -0
- package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +36 -0
- package/dist/collection_editor/ui/collection_editor/AIModifiedPathsContext.d.ts +20 -0
- package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +11 -0
- package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +72 -0
- package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +19 -0
- package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +17 -0
- package/dist/collection_editor/ui/collection_editor/CollectionRLSTab.d.ts +12 -0
- package/dist/collection_editor/ui/collection_editor/CollectionRelationsTab.d.ts +1 -0
- package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/CollectionYupValidation.d.ts +14 -0
- package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/DisplaySettingsForm.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/EntityActionsSelectDialog.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/EnumForm.d.ts +12 -0
- package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +6 -0
- package/dist/collection_editor/ui/collection_editor/KanbanConfigSection.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/LayoutModeSwitch.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +47 -0
- package/dist/collection_editor/ui/collection_editor/PropertyFieldPreview.d.ts +16 -0
- package/dist/collection_editor/ui/collection_editor/PropertyTree.d.ts +31 -0
- package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +11 -0
- package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +8 -0
- package/dist/collection_editor/ui/collection_editor/ViewModeSwitch.d.ts +6 -0
- package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +13 -0
- package/dist/collection_editor/ui/collection_editor/import/clean_import_data.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/properties/BlockPropertyField.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/properties/BooleanPropertyField.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/CommonPropertyFields.d.ts +10 -0
- package/dist/collection_editor/ui/collection_editor/properties/DateTimePropertyField.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/EnumPropertyField.d.ts +9 -0
- package/dist/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/MapPropertyField.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/properties/NumberPropertyField.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/ReferencePropertyField.d.ts +14 -0
- package/dist/collection_editor/ui/collection_editor/properties/RelationPropertyField.d.ts +15 -0
- package/dist/collection_editor/ui/collection_editor/properties/RepeatPropertyField.d.ts +9 -0
- package/dist/collection_editor/ui/collection_editor/properties/StoragePropertyField.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/properties/StringPropertyField.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/properties/UrlPropertyField.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.d.ts +10 -0
- package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.d.ts +6 -0
- package/dist/collection_editor/ui/collection_editor/properties/conditions/index.d.ts +6 -0
- package/dist/collection_editor/ui/collection_editor/properties/conditions/property_paths.d.ts +19 -0
- package/dist/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.d.ts +11 -0
- package/dist/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/templates/blog_template.d.ts +2 -0
- package/dist/collection_editor/ui/collection_editor/templates/pages_template.d.ts +2 -0
- package/dist/collection_editor/ui/collection_editor/templates/products_template.d.ts +2 -0
- package/dist/collection_editor/ui/collection_editor/templates/users_template.d.ts +2 -0
- package/dist/collection_editor/ui/collection_editor/util.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/utils/strings.d.ts +1 -0
- package/dist/collection_editor/ui/collection_editor/utils/supported_fields.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/utils/update_property_for_widget.d.ts +2 -0
- package/dist/collection_editor/useCollectionEditorController.d.ts +6 -0
- package/dist/collection_editor/useCollectionsConfigController.d.ts +6 -0
- package/dist/collection_editor/useLocalCollectionsConfigController.d.ts +6 -0
- package/dist/collection_editor/validateCollectionJson.d.ts +22 -0
- package/dist/collection_editor_ui.d.ts +8 -0
- package/dist/collection_editor_ui.js +11 -0
- package/dist/collection_editor_ui.js.map +1 -0
- package/dist/components/AdminModeSyncer.d.ts +17 -0
- package/dist/components/ArrayContainer.d.ts +59 -0
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/CollectionEditorDialogs.d.ts +15 -0
- package/dist/components/DefaultAppBar.d.ts +29 -0
- package/dist/components/DefaultDrawer.d.ts +29 -0
- package/dist/components/DeleteEntityDialog.d.ts +13 -0
- package/dist/components/DrawerNavigationGroup.d.ts +49 -0
- package/dist/components/DrawerNavigationItem.d.ts +10 -0
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +39 -0
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +27 -0
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +129 -0
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +26 -0
- package/dist/components/EntityCollectionTable/column_utils.d.ts +16 -0
- package/dist/components/EntityCollectionTable/fields/TableMultipleRelationField.d.ts +21 -0
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +22 -0
- package/dist/components/EntityCollectionTable/fields/TableRelationField.d.ts +22 -0
- package/dist/components/EntityCollectionTable/fields/TableRelationSelectorField.d.ts +20 -0
- package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +35 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +12 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +9 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +8 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableSelect.d.ts +15 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +7 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableUserSelect.d.ts +12 -0
- package/dist/components/EntityCollectionTable/index.d.ts +6 -0
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +14 -0
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +32 -0
- package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +9 -0
- package/dist/components/EntityCollectionTable/internal/common.d.ts +5 -0
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +27 -0
- package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +13 -0
- package/dist/components/EntityCollectionTable/internal/popup_field/useWindowSize.d.ts +6 -0
- package/dist/components/EntityCollectionTable/table_bindings.d.ts +28 -0
- package/dist/components/EntityCollectionView/Board.d.ts +2 -0
- package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
- package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
- package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
- package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +27 -0
- package/dist/components/EntityCollectionView/EntityCard.d.ts +20 -0
- package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +21 -0
- package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +32 -0
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +54 -0
- package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +15 -0
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +17 -0
- package/dist/components/EntityCollectionView/FiltersDialog.d.ts +15 -0
- package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
- package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
- package/dist/components/EntityCollectionView/hooks/useCollectionInlineEditor.d.ts +12 -0
- package/dist/components/EntityCollectionView/hooks/useKanbanDragAndDrop.d.ts +20 -0
- package/dist/components/EntityCollectionView/useBoardDataController.d.ts +61 -0
- package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityEditView.d.ts +48 -0
- package/dist/components/EntityEditViewFormActions.d.ts +2 -0
- package/dist/components/EntityJsonPreview.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +56 -0
- package/dist/components/EntitySidePanel.d.ts +10 -0
- package/dist/components/EntityView.d.ts +12 -0
- package/dist/components/FieldCaption.d.ts +5 -0
- package/dist/components/HomePage/ContentHomePage.d.ts +11 -0
- package/dist/components/HomePage/FavouritesView.d.ts +3 -0
- package/dist/components/HomePage/HomePageDnD.d.ts +77 -0
- package/dist/components/HomePage/NavigationCard.d.ts +10 -0
- package/dist/components/HomePage/NavigationCardBinding.d.ts +18 -0
- package/dist/components/HomePage/NavigationGroup.d.ts +11 -0
- package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
- package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
- package/dist/components/HomePage/index.d.ts +4 -0
- package/dist/components/PropertyCollectionView.d.ts +24 -0
- package/dist/components/PropertyConfigBadge.d.ts +6 -0
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/RebaseAuthGate.d.ts +21 -0
- package/dist/components/RebaseCMS.d.ts +10 -0
- package/dist/components/RebaseLayout.d.ts +32 -0
- package/dist/components/RebaseNavigation.d.ts +24 -0
- package/dist/components/RebaseRouteDefs.d.ts +30 -0
- package/dist/components/RebaseShell.d.ts +25 -0
- package/dist/components/ReferenceTable/EntitySelectionTable.d.ts +59 -0
- package/dist/components/ReferenceWidget.d.ts +30 -0
- package/dist/components/RelationSelector.d.ts +32 -0
- package/dist/components/SearchIconsView.d.ts +5 -0
- package/dist/components/SelectableTable/SelectableTable.d.ts +89 -0
- package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
- package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +9 -0
- package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +12 -0
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +15 -0
- package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +12 -0
- package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +13 -0
- package/dist/components/SideDialogs.d.ts +25 -0
- package/dist/components/SideEntityProvider.d.ts +32 -0
- package/dist/components/admin/RoleChip.d.ts +4 -0
- package/dist/components/admin/RolesView.d.ts +4 -0
- package/dist/components/admin/UsersView.d.ts +4 -0
- package/dist/components/admin/index.d.ts +3 -0
- package/dist/components/app/AppBar.d.ts +12 -0
- package/dist/components/app/Drawer.d.ts +19 -0
- package/dist/components/app/Scaffold.d.ts +34 -0
- package/dist/components/app/index.d.ts +4 -0
- package/dist/components/app/useApp.d.ts +17 -0
- package/dist/components/common/default_entity_actions.d.ts +4 -0
- package/dist/components/common/index.d.ts +1 -0
- package/dist/components/field_configs.d.ts +7 -0
- package/dist/components/history/EntityHistoryEntry.d.ts +17 -0
- package/dist/components/history/EntityHistoryView.d.ts +6 -0
- package/dist/components/history/LastEditedByFormAction.d.ts +6 -0
- package/dist/components/history/LastEditedByIndicator.d.ts +10 -0
- package/dist/components/history/UserChip.d.ts +4 -0
- package/dist/components/history/index.d.ts +5 -0
- package/dist/components/index.d.ts +42 -0
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/contexts/SideDialogsControllerContext.d.ts +3 -0
- package/dist/contexts/SideEntityControllerContext.d.ts +3 -0
- package/dist/data_export/export/BasicExportAction.d.ts +7 -0
- package/dist/data_export/export/ExportCollectionAction.d.ts +11 -0
- package/dist/data_export/export/export.d.ts +22 -0
- package/dist/data_export/export/index.d.ts +3 -0
- package/dist/data_export/index.d.ts +1 -0
- package/dist/data_import/components/DataNewPropertiesMapping.d.ts +13 -0
- package/dist/data_import/components/ImportFileUpload.d.ts +3 -0
- package/dist/data_import/components/ImportNewPropertyFieldPreview.d.ts +9 -0
- package/dist/data_import/components/ImportSaveInProgress.d.ts +8 -0
- package/dist/data_import/components/index.d.ts +4 -0
- package/dist/data_import/hooks/index.d.ts +1 -0
- package/dist/data_import/hooks/useImportConfig.d.ts +2 -0
- package/dist/data_import/import/ImportCollectionAction.d.ts +15 -0
- package/dist/data_import/import/index.d.ts +1 -0
- package/dist/data_import/index.d.ts +5 -0
- package/dist/data_import/types/column_mapping.d.ts +20 -0
- package/dist/data_import/types/index.d.ts +1 -0
- package/dist/data_import/utils/data.d.ts +4 -0
- package/dist/data_import/utils/file_headers.d.ts +1 -0
- package/dist/data_import/utils/file_to_json.d.ts +16 -0
- package/dist/data_import/utils/get_import_inference_type.d.ts +2 -0
- package/dist/data_import/utils/get_properties_mapping.d.ts +1 -0
- package/dist/data_import/utils/index.d.ts +3 -0
- package/dist/editor/components/SlashCommandMenu.d.ts +6 -0
- package/dist/editor/components/editor-bubble-item.d.ts +8 -0
- package/dist/editor/components/editor-bubble.d.ts +8 -0
- package/dist/editor/components/image-bubble.d.ts +5 -0
- package/dist/editor/components/index.d.ts +16 -0
- package/dist/editor/components/table-bubble.d.ts +5 -0
- package/dist/editor/editor.d.ts +30 -0
- package/dist/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
- package/dist/editor/extensions/Image/index.d.ts +6 -0
- package/dist/editor/extensions/Image.d.ts +6 -0
- package/dist/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
- package/dist/editor/extensions/clipboard.d.ts +7 -0
- package/dist/editor/extensions/custom-keymap.d.ts +1 -0
- package/dist/editor/extensions/drag-and-drop.d.ts +9 -0
- package/dist/editor/hooks/useProseMirror.d.ts +13 -0
- package/dist/editor/hooks/useProseMirrorContext.d.ts +9 -0
- package/dist/editor/index.d.ts +2 -0
- package/dist/editor/markdown.d.ts +5 -0
- package/dist/editor/nodeViews/ImageComponent.d.ts +3 -0
- package/dist/editor/nodeViews/ReactNodeView.d.ts +29 -0
- package/dist/editor/nodeViews/TaskItemComponent.d.ts +3 -0
- package/dist/editor/nodeViews/index.d.ts +6 -0
- package/dist/editor/plugins/index.d.ts +2 -0
- package/dist/editor/plugins/inputrules.d.ts +6 -0
- package/dist/editor/plugins/placeholderPlugin.d.ts +3 -0
- package/dist/editor/plugins/slashCommandPlugin.d.ts +12 -0
- package/dist/editor/schema.d.ts +2 -0
- package/dist/editor/selectors/ai-selector.d.ts +0 -0
- package/dist/editor/selectors/color-selector.d.ts +10 -0
- package/dist/editor/selectors/link-selector.d.ts +8 -0
- package/dist/editor/selectors/node-selector.d.ts +15 -0
- package/dist/editor/selectors/text-buttons.d.ts +1 -0
- package/dist/editor/types.d.ts +5 -0
- package/dist/editor/useProseMirror.d.ts +16 -0
- package/dist/editor/utils/prosemirror-utils.d.ts +7 -0
- package/dist/editor/utils/remove_classes.d.ts +1 -0
- package/dist/editor/utils/useDebouncedCallback.d.ts +1 -0
- package/dist/form/EntityForm.d.ts +10 -0
- package/dist/form/EntityFormActions.d.ts +2 -0
- package/dist/form/PropertyFieldBinding.d.ts +30 -0
- package/dist/form/components/ErrorFocus.d.ts +4 -0
- package/dist/form/components/FieldHelperText.d.ts +12 -0
- package/dist/form/components/FormEntry.d.ts +6 -0
- package/dist/form/components/FormLayout.d.ts +5 -0
- package/dist/form/components/LabelWithIcon.d.ts +14 -0
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/LocalChangesMenu.d.ts +11 -0
- package/dist/form/components/StorageItemPreview.d.ts +14 -0
- package/dist/form/components/StorageUploadProgress.d.ts +10 -0
- package/dist/form/components/index.d.ts +5 -0
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +13 -0
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +12 -0
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +8 -0
- package/dist/form/field_bindings/MapFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +12 -0
- package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/MultipleRelationFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/RelationFieldBinding.d.ts +3 -0
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +21 -0
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/TextFieldBinding.d.ts +9 -0
- package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +13 -0
- package/dist/form/index.d.ts +20 -0
- package/dist/form/useClearRestoreValue.d.ts +13 -0
- package/dist/form/validation.d.ts +21 -0
- package/dist/hooks/index.d.ts +15 -0
- package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +5 -0
- package/dist/hooks/navigation/contexts/NavigationStateContext.d.ts +4 -0
- package/dist/hooks/navigation/contexts/UrlContext.d.ts +4 -0
- package/dist/hooks/navigation/contexts/index.d.ts +3 -0
- package/dist/hooks/navigation/useBuildCollectionRegistryController.d.ts +7 -0
- package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +34 -0
- package/dist/hooks/navigation/useBuildUrlController.d.ts +7 -0
- package/dist/hooks/navigation/useNavigationRegistry.d.ts +11 -0
- package/dist/hooks/navigation/useNavigationResolution.d.ts +7 -0
- package/dist/hooks/navigation/useNavigationURLs.d.ts +11 -0
- package/dist/hooks/navigation/useResolvedCollections.d.ts +28 -0
- package/dist/hooks/navigation/useResolvedViews.d.ts +29 -0
- package/dist/hooks/navigation/useTopLevelNavigation.d.ts +27 -0
- package/dist/hooks/navigation/utils.d.ts +12 -0
- package/dist/hooks/useBreadcrumbsController.d.ts +42 -0
- package/dist/hooks/useBuildSideDialogsController.d.ts +2 -0
- package/dist/hooks/useBuildSideEntityController.d.ts +6 -0
- package/dist/hooks/useCMSContext.d.ts +27 -0
- package/dist/hooks/useEntityHistory.d.ts +30 -0
- package/dist/hooks/useEntitySelectionDialog.d.ts +18 -0
- package/dist/hooks/useResolvedNavigationFrom.d.ts +73 -0
- package/dist/hooks/useSideDialogsController.d.ts +19 -0
- package/dist/hooks/useSideEntityController.d.ts +11 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +2885 -0
- package/dist/index.js.map +1 -0
- package/dist/preview/PropertyPreview.d.ts +7 -0
- package/dist/preview/components/ArrayEnumPreview.d.ts +11 -0
- package/dist/preview/components/BooleanPreview.d.ts +11 -0
- package/dist/preview/components/DatePreview.d.ts +17 -0
- package/dist/preview/components/EmptyValue.d.ts +6 -0
- package/dist/preview/components/EnumValuesChip.d.ts +13 -0
- package/dist/preview/components/ImagePreview.d.ts +16 -0
- package/dist/preview/components/ReferencePreview.d.ts +17 -0
- package/dist/preview/components/RelationPreview.d.ts +17 -0
- package/dist/preview/components/StorageThumbnail.d.ts +15 -0
- package/dist/preview/components/UrlComponentPreview.d.ts +14 -0
- package/dist/preview/components/UserPreview.d.ts +9 -0
- package/dist/preview/index.d.ts +23 -0
- package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +6 -0
- package/dist/preview/property_previews/MapPropertyPreview.d.ts +9 -0
- package/dist/preview/property_previews/NumberPropertyPreview.d.ts +7 -0
- package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +14 -0
- package/dist/preview/property_previews/StringPropertyPreview.d.ts +7 -0
- package/dist/preview/util.d.ts +7 -0
- package/dist/routes/CustomViewRoute.d.ts +4 -0
- package/dist/routes/RebaseRoute.d.ts +1 -0
- package/dist/routes/index.d.ts +2 -0
- package/dist/types/components/EntityFormActionsProps.d.ts +19 -0
- package/dist/types/components/EntityFormProps.d.ts +48 -0
- package/dist/types/components/PropertyPreviewProps.d.ts +47 -0
- package/dist/types/components/formex.d.ts +40 -0
- package/dist/types/components/index.d.ts +3 -0
- package/dist/types/fields.d.ts +221 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/util/entity_actions.d.ts +2 -0
- package/dist/util/index.d.ts +5 -0
- package/dist/util/navigation_utils.d.ts +32 -0
- package/dist/util/previews.d.ts +4 -0
- package/dist/util/property_utils.d.ts +24 -0
- package/dist/util/resolutions.d.ts +9 -0
- package/dist/util-W5Lh0Emr.js +32604 -0
- package/dist/util-W5Lh0Emr.js.map +1 -0
- package/package.json +170 -0
- package/src/collection_editor/CollectionEditorDialogsContext.tsx +25 -0
- package/src/collection_editor/ConfigControllerProvider.tsx +405 -0
- package/src/collection_editor/_cms_internals.ts +41 -0
- package/src/collection_editor/api/generateCollectionApi.ts +125 -0
- package/src/collection_editor/api/index.ts +1 -0
- package/src/collection_editor/index.ts +63 -0
- package/src/collection_editor/pgColumnToProperty.ts +274 -0
- package/src/collection_editor/types/collection_editor_controller.tsx +64 -0
- package/src/collection_editor/types/collection_inference.ts +17 -0
- package/src/collection_editor/types/config_controller.tsx +109 -0
- package/src/collection_editor/types/config_permissions.ts +20 -0
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +195 -0
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +49 -0
- package/src/collection_editor/ui/EditorCollectionAction.tsx +57 -0
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +92 -0
- package/src/collection_editor/ui/EditorEntityAction.tsx +53 -0
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +119 -0
- package/src/collection_editor/ui/KanbanSetupAction.tsx +40 -0
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +40 -0
- package/src/collection_editor/ui/NewCollectionButton.tsx +26 -0
- package/src/collection_editor/ui/NewCollectionCard.tsx +52 -0
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +52 -0
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +253 -0
- package/src/collection_editor/ui/collection_editor/AIModifiedPathsContext.tsx +88 -0
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +437 -0
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +991 -0
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +291 -0
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +171 -0
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +600 -0
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +331 -0
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +224 -0
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +103 -0
- package/src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx +9 -0
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +137 -0
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +312 -0
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +164 -0
- package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +40 -0
- package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +39 -0
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +370 -0
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +277 -0
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +142 -0
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +195 -0
- package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +35 -0
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +790 -0
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +159 -0
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +360 -0
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +255 -0
- package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +39 -0
- package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +41 -0
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +66 -0
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +296 -0
- package/src/collection_editor/ui/collection_editor/import/clean_import_data.ts +54 -0
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +146 -0
- package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +41 -0
- package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +111 -0
- package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +205 -0
- package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +124 -0
- package/src/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.tsx +20 -0
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +150 -0
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +215 -0
- package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +115 -0
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +162 -0
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +344 -0
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +106 -0
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +366 -0
- package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +146 -0
- package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +90 -0
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +47 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +853 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +28 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +593 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/index.ts +6 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +93 -0
- package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +50 -0
- package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +61 -0
- package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +115 -0
- package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +152 -0
- package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +28 -0
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +112 -0
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +183 -0
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +88 -0
- package/src/collection_editor/ui/collection_editor/templates/users_template.ts +42 -0
- package/src/collection_editor/ui/collection_editor/util.ts +28 -0
- package/src/collection_editor/ui/collection_editor/utils/strings.ts +16 -0
- package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +33 -0
- package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +281 -0
- package/src/collection_editor/useCollectionEditorController.tsx +9 -0
- package/src/collection_editor/useCollectionsConfigController.tsx +9 -0
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +111 -0
- package/src/collection_editor/validateCollectionJson.ts +379 -0
- package/src/collection_editor_ui.ts +15 -0
- package/src/components/AdminModeSyncer.tsx +56 -0
- package/src/components/ArrayContainer.tsx +551 -0
- package/src/components/ClearFilterSortButton.tsx +47 -0
- package/src/components/CollectionEditorDialogs.tsx +68 -0
- package/src/components/DefaultAppBar.tsx +280 -0
- package/src/components/DefaultDrawer.tsx +276 -0
- package/src/components/DeleteEntityDialog.tsx +182 -0
- package/src/components/DrawerNavigationGroup.tsx +128 -0
- package/src/components/DrawerNavigationItem.tsx +65 -0
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +232 -0
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +380 -0
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +171 -0
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +342 -0
- package/src/components/EntityCollectionTable/column_utils.tsx +75 -0
- package/src/components/EntityCollectionTable/fields/TableMultipleRelationField.tsx +130 -0
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +172 -0
- package/src/components/EntityCollectionTable/fields/TableRelationField.tsx +181 -0
- package/src/components/EntityCollectionTable/fields/TableRelationSelectorField.tsx +42 -0
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +320 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableDateField.tsx +39 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableInput.tsx +90 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableNumberInput.tsx +80 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableSelect.tsx +133 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableSwitch.tsx +32 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableUserSelect.tsx +112 -0
- package/src/components/EntityCollectionTable/index.tsx +14 -0
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +72 -0
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +311 -0
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +82 -0
- package/src/components/EntityCollectionTable/internal/common.tsx +73 -0
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +418 -0
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +96 -0
- package/src/components/EntityCollectionTable/internal/popup_field/useWindowSize.tsx +20 -0
- package/src/components/EntityCollectionTable/table_bindings.tsx +345 -0
- package/src/components/EntityCollectionView/Board.tsx +324 -0
- package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
- package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
- package/src/components/EntityCollectionView/BoardSortableList.tsx +172 -0
- package/src/components/EntityCollectionView/EntityBoardCard.tsx +204 -0
- package/src/components/EntityCollectionView/EntityCard.tsx +219 -0
- package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +609 -0
- package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +249 -0
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +1143 -0
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +149 -0
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +122 -0
- package/src/components/EntityCollectionView/FiltersDialog.tsx +249 -0
- package/src/components/EntityCollectionView/ViewModeToggle.tsx +197 -0
- package/src/components/EntityCollectionView/board_types.ts +113 -0
- package/src/components/EntityCollectionView/hooks/useCollectionInlineEditor.ts +79 -0
- package/src/components/EntityCollectionView/hooks/useKanbanDragAndDrop.ts +151 -0
- package/src/components/EntityCollectionView/useBoardDataController.tsx +510 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +43 -0
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityEditView.tsx +576 -0
- package/src/components/EntityEditViewFormActions.tsx +345 -0
- package/src/components/EntityJsonPreview.tsx +66 -0
- package/src/components/EntityPreview.tsx +366 -0
- package/src/components/EntitySidePanel.tsx +159 -0
- package/src/components/EntityView.tsx +69 -0
- package/src/components/FieldCaption.tsx +14 -0
- package/src/components/HomePage/ContentHomePage.tsx +553 -0
- package/src/components/HomePage/FavouritesView.tsx +60 -0
- package/src/components/HomePage/HomePageDnD.tsx +703 -0
- package/src/components/HomePage/NavigationCard.tsx +79 -0
- package/src/components/HomePage/NavigationCardBinding.tsx +110 -0
- package/src/components/HomePage/NavigationGroup.tsx +156 -0
- package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
- package/src/components/HomePage/SmallNavigationCard.tsx +45 -0
- package/src/components/HomePage/index.tsx +5 -0
- package/src/components/PropertyCollectionView.tsx +335 -0
- package/src/components/PropertyConfigBadge.tsx +27 -0
- package/src/components/PropertyIdCopyTooltip.tsx +47 -0
- package/src/components/RebaseAuthGate.tsx +42 -0
- package/src/components/RebaseCMS.tsx +22 -0
- package/src/components/RebaseLayout.tsx +73 -0
- package/src/components/RebaseNavigation.tsx +197 -0
- package/src/components/RebaseRouteDefs.tsx +127 -0
- package/src/components/RebaseShell.tsx +70 -0
- package/src/components/ReferenceTable/EntitySelectionTable.tsx +358 -0
- package/src/components/ReferenceWidget.tsx +155 -0
- package/src/components/RelationSelector.tsx +612 -0
- package/src/components/SearchIconsView.tsx +80 -0
- package/src/components/SelectableTable/SelectableTable.tsx +340 -0
- package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +51 -0
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +125 -0
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +208 -0
- package/src/components/SelectableTable/filters/RelationFilterField.tsx +138 -0
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +224 -0
- package/src/components/SideDialogs.tsx +207 -0
- package/src/components/SideEntityProvider.tsx +76 -0
- package/src/components/admin/RoleChip.tsx +23 -0
- package/src/components/admin/RolesView.tsx +424 -0
- package/src/components/admin/UsersView.tsx +707 -0
- package/src/components/admin/index.ts +3 -0
- package/src/components/app/AppBar.tsx +17 -0
- package/src/components/app/Drawer.tsx +30 -0
- package/src/components/app/Scaffold.tsx +239 -0
- package/src/components/app/index.ts +4 -0
- package/src/components/app/useApp.tsx +36 -0
- package/src/components/common/default_entity_actions.tsx +155 -0
- package/src/components/common/index.ts +1 -0
- package/src/components/field_configs.tsx +442 -0
- package/src/components/history/EntityHistoryEntry.tsx +175 -0
- package/src/components/history/EntityHistoryView.tsx +197 -0
- package/src/components/history/LastEditedByFormAction.tsx +24 -0
- package/src/components/history/LastEditedByIndicator.tsx +98 -0
- package/src/components/history/UserChip.tsx +15 -0
- package/src/components/history/index.tsx +5 -0
- package/src/components/index.ts +52 -0
- package/src/contexts/BreacrumbsContext.tsx +45 -0
- package/src/contexts/SideDialogsControllerContext.tsx +5 -0
- package/src/contexts/SideEntityControllerContext.tsx +5 -0
- package/src/data_export/export/BasicExportAction.tsx +152 -0
- package/src/data_export/export/ExportCollectionAction.tsx +275 -0
- package/src/data_export/export/export.ts +244 -0
- package/src/data_export/export/index.ts +3 -0
- package/src/data_export/index.ts +1 -0
- package/src/data_import/components/DataNewPropertiesMapping.tsx +243 -0
- package/src/data_import/components/ImportFileUpload.tsx +42 -0
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +59 -0
- package/src/data_import/components/ImportSaveInProgress.tsx +121 -0
- package/src/data_import/components/index.ts +4 -0
- package/src/data_import/hooks/index.ts +1 -0
- package/src/data_import/hooks/useImportConfig.tsx +34 -0
- package/src/data_import/import/ImportCollectionAction.tsx +448 -0
- package/src/data_import/import/index.ts +1 -0
- package/src/data_import/index.ts +5 -0
- package/src/data_import/types/column_mapping.ts +32 -0
- package/src/data_import/types/index.ts +1 -0
- package/src/data_import/utils/data.ts +145 -0
- package/src/data_import/utils/file_headers.ts +90 -0
- package/src/data_import/utils/file_to_json.ts +106 -0
- package/src/data_import/utils/get_import_inference_type.ts +27 -0
- package/src/data_import/utils/get_properties_mapping.ts +67 -0
- package/src/data_import/utils/index.ts +3 -0
- package/src/editor/components/SlashCommandMenu.tsx +516 -0
- package/src/editor/components/editor-bubble-item.tsx +32 -0
- package/src/editor/components/editor-bubble.tsx +118 -0
- package/src/editor/components/image-bubble.tsx +158 -0
- package/src/editor/components/index.ts +14 -0
- package/src/editor/components/table-bubble.tsx +167 -0
- package/src/editor/editor.tsx +455 -0
- package/src/editor/extensions/HighlightDecorationExtension.ts +114 -0
- package/src/editor/extensions/Image/index.ts +133 -0
- package/src/editor/extensions/Image.ts +159 -0
- package/src/editor/extensions/TextLoadingDecorationExtension.tsx +107 -0
- package/src/editor/extensions/clipboard.ts +72 -0
- package/src/editor/extensions/custom-keymap.ts +25 -0
- package/src/editor/extensions/drag-and-drop.tsx +492 -0
- package/src/editor/hooks/useProseMirror.ts +124 -0
- package/src/editor/hooks/useProseMirrorContext.ts +15 -0
- package/src/editor/index.ts +2 -0
- package/src/editor/markdown.ts +172 -0
- package/src/editor/nodeViews/ImageComponent.tsx +20 -0
- package/src/editor/nodeViews/ReactNodeView.tsx +89 -0
- package/src/editor/nodeViews/TaskItemComponent.tsx +29 -0
- package/src/editor/nodeViews/index.ts +35 -0
- package/src/editor/plugins/index.ts +58 -0
- package/src/editor/plugins/inputrules.ts +82 -0
- package/src/editor/plugins/placeholderPlugin.ts +55 -0
- package/src/editor/plugins/slashCommandPlugin.ts +61 -0
- package/src/editor/schema.ts +240 -0
- package/src/editor/selectors/ai-selector.tsx +111 -0
- package/src/editor/selectors/color-selector.tsx +200 -0
- package/src/editor/selectors/link-selector.tsx +118 -0
- package/src/editor/selectors/node-selector.tsx +157 -0
- package/src/editor/selectors/text-buttons.tsx +86 -0
- package/src/editor/types.ts +6 -0
- package/src/editor/useProseMirror.ts +126 -0
- package/src/editor/utils/prosemirror-utils.ts +113 -0
- package/src/editor/utils/remove_classes.ts +17 -0
- package/src/editor/utils/useDebouncedCallback.ts +25 -0
- package/src/form/EntityForm.tsx +800 -0
- package/src/form/EntityFormActions.tsx +204 -0
- package/src/form/PropertyFieldBinding.tsx +344 -0
- package/src/form/components/ErrorFocus.tsx +44 -0
- package/src/form/components/FieldHelperText.tsx +45 -0
- package/src/form/components/FormEntry.tsx +22 -0
- package/src/form/components/FormLayout.tsx +16 -0
- package/src/form/components/LabelWithIcon.tsx +43 -0
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/LocalChangesMenu.tsx +145 -0
- package/src/form/components/StorageItemPreview.tsx +81 -0
- package/src/form/components/StorageUploadProgress.tsx +105 -0
- package/src/form/components/index.tsx +5 -0
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +107 -0
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +169 -0
- package/src/form/field_bindings/BlockFieldBinding.tsx +274 -0
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +72 -0
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +567 -0
- package/src/form/field_bindings/MapFieldBinding.tsx +162 -0
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +142 -0
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +122 -0
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +155 -0
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +66 -0
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +140 -0
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +140 -0
- package/src/form/field_bindings/RelationFieldBinding.tsx +183 -0
- package/src/form/field_bindings/RepeatFieldBinding.tsx +139 -0
- package/src/form/field_bindings/SelectFieldBinding.tsx +109 -0
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +493 -0
- package/src/form/field_bindings/SwitchFieldBinding.tsx +65 -0
- package/src/form/field_bindings/TextFieldBinding.tsx +155 -0
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +98 -0
- package/src/form/index.tsx +27 -0
- package/src/form/useClearRestoreValue.tsx +36 -0
- package/src/form/validation.ts +592 -0
- package/src/hooks/index.ts +15 -0
- package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +20 -0
- package/src/hooks/navigation/contexts/NavigationStateContext.tsx +16 -0
- package/src/hooks/navigation/contexts/UrlContext.tsx +25 -0
- package/src/hooks/navigation/contexts/index.ts +14 -0
- package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +155 -0
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +123 -0
- package/src/hooks/navigation/useBuildUrlController.tsx +66 -0
- package/src/hooks/navigation/useNavigationRegistry.ts +146 -0
- package/src/hooks/navigation/useNavigationResolution.ts +130 -0
- package/src/hooks/navigation/useNavigationURLs.ts +56 -0
- package/src/hooks/navigation/useResolvedCollections.ts +133 -0
- package/src/hooks/navigation/useResolvedViews.tsx +197 -0
- package/src/hooks/navigation/useTopLevelNavigation.ts +257 -0
- package/src/hooks/navigation/utils.ts +171 -0
- package/src/hooks/useBreadcrumbsController.tsx +49 -0
- package/src/hooks/useBuildSideDialogsController.tsx +145 -0
- package/src/hooks/useBuildSideEntityController.tsx +309 -0
- package/src/hooks/useCMSContext.tsx +77 -0
- package/src/hooks/useEntityHistory.ts +168 -0
- package/src/hooks/useEntitySelectionDialog.tsx +57 -0
- package/src/hooks/useResolvedNavigationFrom.tsx +155 -0
- package/src/hooks/useSideDialogsController.tsx +25 -0
- package/src/hooks/useSideEntityController.tsx +13 -0
- package/src/index.ts +95 -0
- package/src/preview/PropertyPreview.tsx +291 -0
- package/src/preview/components/ArrayEnumPreview.tsx +39 -0
- package/src/preview/components/BooleanPreview.tsx +25 -0
- package/src/preview/components/DatePreview.tsx +93 -0
- package/src/preview/components/EmptyValue.tsx +10 -0
- package/src/preview/components/EnumValuesChip.tsx +39 -0
- package/src/preview/components/ImagePreview.tsx +142 -0
- package/src/preview/components/ReferencePreview.tsx +166 -0
- package/src/preview/components/RelationPreview.tsx +158 -0
- package/src/preview/components/StorageThumbnail.tsx +90 -0
- package/src/preview/components/UrlComponentPreview.tsx +114 -0
- package/src/preview/components/UserPreview.tsx +29 -0
- package/src/preview/index.ts +25 -0
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +73 -0
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +44 -0
- package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +50 -0
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +49 -0
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +44 -0
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +68 -0
- package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +35 -0
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +70 -0
- package/src/preview/property_previews/MapPropertyPreview.tsx +146 -0
- package/src/preview/property_previews/NumberPropertyPreview.tsx +29 -0
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +277 -0
- package/src/preview/property_previews/StringPropertyPreview.tsx +59 -0
- package/src/preview/util.ts +30 -0
- package/src/routes/CustomViewRoute.tsx +24 -0
- package/src/routes/RebaseRoute.tsx +265 -0
- package/src/routes/index.ts +2 -0
- package/src/types/components/EntityFormActionsProps.tsx +20 -0
- package/src/types/components/EntityFormProps.tsx +54 -0
- package/src/types/components/PropertyPreviewProps.tsx +59 -0
- package/src/types/components/formex.tsx +46 -0
- package/src/types/components/index.ts +3 -0
- package/src/types/fields.tsx +299 -0
- package/src/types/index.ts +4 -0
- package/src/util/entity_actions.ts +28 -0
- package/src/util/index.ts +5 -0
- package/src/util/navigation_utils.ts +223 -0
- package/src/util/previews.ts +50 -0
- package/src/util/property_utils.tsx +215 -0
- package/src/util/resolutions.ts +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionEditorDialog-DiZYNmYV.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/utils/strings.ts","../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","import { 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 { EntityCollection } from \"@rebasepro/types\";\nimport {\n BooleanSwitchWithLabel,\n Chip,\n cls,\n Container,\n DebouncedTextField,\n Dialog,\n ExpandablePanel,\n HistoryIcon,\n IconButton,\n SearchIcon,\n Select,\n SelectItem,\n TextField,\n Tooltip,\n Typography,\n WarningIcon\n} from \"@rebasepro/ui\";\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<EntityCollection>();\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={\"tealDarker\"}>\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 as any).table)} />\n\n <FieldCaption error={(touched as any).table && Boolean((errors as any).table)}>\n {(touched as any).table && Boolean((errors as any).table)\n ? (errors as any).table\n : isSubcollection ? \"Relative path to the parent (no need to include the parent path)\" : \"PostgreSQL table name for this collection\"}\n </FieldCaption>\n \n {(values as any).isTableMissing && (\n <div className=\"mt-2 p-3 bg-red-50 dark:bg-red-900/20 text-red-800 dark:text-red-300 border border-red-200 dark:border-red-800/30 rounded-md text-sm font-medium flex gap-2\">\n <div className=\"mt-0.5\"><WarningIcon size=\"smallest\" /></div>\n <span>\n The table <b>\"{(values as any).table}\"</b> does not exist in the database schema. \n If you've recently created it, make sure to generate and run your database migrations.\n </span>\n </div>\n )}\n </div>\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\n\n </div>\n\n {/* Advanced Settings */}\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 {/* History revisions */}\n <div>\n <BooleanSwitchWithLabel\n position={\"start\"}\n allowIndeterminate={true}\n label={<span className=\"flex items-center gap-2\"><HistoryIcon size={\"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>}\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, SquareIcon, ToggleButtonGroup, Typography, VerticalSplitIcon } from \"@rebasepro/ui\";\n\nexport function LayoutModeSwitch({\n value,\n onChange,\n className\n}: {\n value: \"side_panel\" | \"full_screen\";\n onChange: (value: \"side_panel\" | \"full_screen\") => 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: <VerticalSplitIcon />\n },\n {\n value: \"full_screen\",\n label: \"Full screen\",\n icon: <SquareIcon />\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 { AppsIcon, cls, ListIcon, ToggleButtonGroup, Typography, ViewKanbanIcon } from \"@rebasepro/ui\";\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: \"table\",\n label: \"Table\",\n icon: <ListIcon />\n },\n {\n value: \"cards\",\n label: \"Cards\",\n icon: <AppsIcon />\n },\n {\n value: \"kanban\",\n label: \"Kanban\",\n icon: <ViewKanbanIcon />\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","import { 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, getFieldConfig } from \"../../_cms_internals\";\nimport {\n CloseIcon,\n IconButton,\n Select,\n SelectItem,\n Typography,\n Button\n} from \"@rebasepro/ui\";\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\", block: \"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 <CloseIcon size=\"small\" />\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 \"{dialogPropertyKey}\" 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\", label: \"To Do\" },\n { id: \"in_progress\", label: \"In Progress\" },\n { id: \"done\", label: \"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\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","import { FieldCaption } from \"../../_cms_internals\";\nimport React, { useMemo, useState } from \"react\";\nimport { useAuthController, useCustomizationController } from \"@rebasepro/core\";\nimport { getFieldConfig, PropertyConfigBadge } from \"../../_cms_internals\";\nimport { EntityCollection, Property } from \"@rebasepro/types\";\nimport {\n BooleanSwitchWithLabel,\n CloseIcon,\n Container,\n IconButton,\n Select,\n SelectItem,\n TextField,\n Typography,\n Button\n} from \"@rebasepro/ui\";\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 number properties (for orderProperty)\n const numberProperties = 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 === 'number') {\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\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 !numberProperties.some(p => p.key === values.orderProperty);\n\n return (\n <>\n <Select\n key={`order-select-${numberProperties.length}`}\n name=\"orderProperty\"\n label=\"Order Property\"\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={numberProperties.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 = numberProperties.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 <CloseIcon size=\"small\" />\n </IconButton>\n ) : undefined}\n >\n {numberProperties.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 || \"Number\"}\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 number property. Please select a valid property or clear the selection.`\n : numberProperties.length === 0\n ? \"No number properties found. Add a number property to enable ordering.\"\n : \"Select a number property to persist the order of items\"\n }\n </FieldCaption>\n </>\n );\n })()}\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !numberProperties.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 \"{dialogPropertyKey}\" property\n </Button>\n <PropertyFormDialog\n open={orderPropertyDialogOpen}\n onCancel={() => setOrderPropertyDialogOpen(false)}\n property={{\n type: \"number\",\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\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 <CloseIcon size={\"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","export function camelCase(str: string): string {\n if (!str) return \"\";\n if (str.length === 1) return str.toLowerCase();\n\n // Split by hyphens, underscores, or spaces and filter out empty strings\n const parts = str.split(/[-_ ]+/).filter(Boolean);\n\n if (parts.length === 0) return \"\";\n\n // Start with first part in lowercase\n return parts[0].toLowerCase() +\n // Transform remaining parts to have first letter uppercase\n parts.slice(1)\n .map(part => part.charAt(0).toUpperCase() + part.substring(1).toLowerCase())\n .join('');\n}\n","import { useSnackbarController } from \"@rebasepro/core\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport { Button, ContentCopyIcon, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@rebasepro/ui\";\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 <ContentCopyIcon size={\"small\"} />\n Copy 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\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","import 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 { EntityCollection, MapProperty, Properties, Property, PropertyConfig, User } from \"@rebasepro/types\";\nimport { isPropertyBuilder } from \"@rebasepro/common\";\nimport {\n AddIcon,\n Button,\n CircularProgress,\n cls,\n CodeIcon,\n DebouncedTextField,\n defaultBorderMixin,\n FindInPageIcon,\n IconButton,\n Tooltip,\n Typography,\n} 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\"} /> : <FindInPageIcon />}\n </IconButton>\n </Tooltip>}\n <Tooltip title={\"Add new property\"}\n asChild={true}>\n <Button\n disabled={configController?.readOnly}\n onClick={() => setNewPropertyDialogOpen(true)}>\n <AddIcon />\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={<AddIcon />}>\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 <AddIcon />\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\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","import React, { useState } from \"react\";\nimport {\n Button, IconButton, Typography, Table, TableHeader, TableCell, TableBody, TableRow,\n TextField, Select, SelectItem, Container, DeleteIcon, Dialog, DialogTitle, DialogContent, DialogActions\n} from \"@rebasepro/ui\";\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: \"\", target: \"\" as unknown as Relation['target'], cardinality: \"many\", direction: \"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 <DeleteIcon />\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: \"\", target: \"\" as unknown as Relation['target'], cardinality: \"many\", direction: \"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-800 bg-surface-50 dark:bg-surface-950\">\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, relationName: 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, target: 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, cardinality: 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, direction: 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, through: { ...(prev.through || { sourceColumn: \"\", targetColumn: \"\" }), table: 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, through: { ...(prev.through || { table: \"\", targetColumn: \"\" }), sourceColumn: 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, through: { ...(prev.through || { table: \"\", sourceColumn: \"\" }), targetColumn: 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","import React, { useCallback, useState } from \"react\";\nimport {\n Button,\n cls,\n CodeIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Typography\n} from \"@rebasepro/ui\";\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=\"small\" />\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-900\",\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: \"shopping_cart\",\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: \"article\",\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: \"person\",\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: \"insert_drive_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","import { 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 {\n Button,\n CircularProgress,\n IconButton,\n Menu,\n SendIcon,\n TextField,\n Tooltip,\n Typography\n} from \"@rebasepro/ui\";\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, CodeIcon, Container, Icon, Tooltip, Typography, } from \"@rebasepro/ui\";\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={\"tealDarker\"}>\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={\"purpleLighter\"}\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 <Icon iconKey={\"table\"} size={\"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={\"cyanLighter\"}\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=\"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\n\n </div>\n\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={<Icon size={\"small\"}\n iconKey={productsCollectionTemplate.icon! as string} />}\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={<Icon size={\"small\"} iconKey={usersCollectionTemplate.icon! as string} />}\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={<Icon size={\"small\"} iconKey={blogCollectionTemplate.icon! as string} />}\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={<Icon size={\"small\"} iconKey={pagesCollectionTemplate.icon! as string} />}\n onClick={() => {\n setValues(pagesCollectionTemplate);\n onContinue();\n }} />\n </div>\n\n </div>\n\n\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 {\n DataNewPropertiesMapping,\n getInferenceType,\n ImportConfig,\n ImportNewPropertyFieldPreview\n} from \"../../../_cms_internals\";\nimport { getIn, useFormex } from \"@rebasepro/formex\";\n\nimport { getFieldConfig, getFieldId, PropertyConfigBadge } from \"../../../_cms_internals\";\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, useSelectionController } from \"../../../_cms_internals\";\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, [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, [key]: fullSlug } as Record<string, string>;\n\n return {\n headersMapping,\n properties: updatedProperties,\n }\n }, { headersMapping: {}, properties: {} });\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","import { EntityCollection } from \"@rebasepro/types\";\nimport React, { useState, useEffect } from \"react\";\nimport {\n Button, IconButton, Typography, cls, defaultBorderMixin, Chip, KeyIcon, DeleteIcon,\n Paper, Container, Tooltip, CircularProgress, Dialog, DialogTitle, DialogContent, DialogActions,\n TextField, Select, SelectItem, MultiSelect, MultiSelectItem\n} from \"@rebasepro/ui\";\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\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-800 rounded-lg flex flex-col sm:flex-row sm:items-center justify-between gap-4 transition-colors bg-white dark:bg-surface-950 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=\"small\" 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-800 text-text-secondary border-none\">Action: {rule.operation || \"ALL\"}</Chip>\n <Chip size=\"small\" className=\"bg-surface-100 dark:bg-surface-800 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 <DeleteIcon size=\"small\" 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'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=\"small\" 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-800 bg-surface-50 dark:bg-surface-950\" includeMargin={false}>\n <Paper className={cls(\"p-4 md:p-6 flex flex-col gap-6 bg-white dark:bg-surface-900 border-none sm:border-solid rounded-none sm:rounded-xl\", defaultBorderMixin)}>\n <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, permissive: behavior, cmd: command, roles, qual: usingExpr, with_check: showCheck ? checkExpr : null })}\n >Save</Button>\n </DialogActions>\n </>\n );\n}\n","import { EntityCollection, Property, StringProperty, NumberProperty, ArrayProperty, TableColumnInfo, TableMetadata } from \"@rebasepro/types\";\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 = column_name\n .replace(/_/g, \" \")\n .replace(/\\b\\w/g, (c: string) => c.toUpperCase());\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, label: v.replace(/_/g, \" \").replace(/\\b\\w/g, (c: string) => c.toUpperCase()) })),\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 Object.keys(property).forEach(key => (property as unknown as Record<string, unknown>)[key] === undefined && delete (property as unknown as Record<string, unknown>)[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 = tableName\n .replace(/_/g, \" \")\n .replace(/\\b\\w/g, (c: string) => c.toUpperCase());\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","import { 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 { Entity, EntityCollection, MapProperty, Properties, Property, PropertyConfig, User, getDataSourceCapabilities } from \"@rebasepro/types\";\nimport { getSubcollections, isPropertyBuilder, removeInitialAndTrailingSlashes } from \"@rebasepro/common\";\nimport {\n ArrowBackIcon,\n Button,\n CheckIcon,\n cls,\n coolIconKeys,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n LoadingButton,\n Tab,\n Tabs,\n Typography\n} 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 => (col as any).table?.trim().toLowerCase() ?? col.slug?.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 any;\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, ...propertyErrorsRef.current };\n }\n if (currentView === \"general\") {\n const pathError = validatePath((col as any).table || col.slug, 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 = (values as any).table || values.slug;\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: Properties) => {\n const res = cleanPropertiesFromImport(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\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-950\">\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-950 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-900\">\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 <ArrowBackIcon />\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","isTableMissing","t31","t32","singularName","t33","e_0","t34","t35","t36","t37","t38","t39","t40","description","t41","t42","t43","t44","t45","t46","t47","t48","e_1","t49","t50","t51","t52","t53","t54","t55","t56","t57","history","t58","t59","height","t60","icon","t61","t62","t63","t64","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","map","id","keys","newProperties","newPropertiesOrder","propertiesOrder","DisplaySettingsForm","expandKanban","orderPropertyDialogOpen","setOrderPropertyDialogOpen","numberProperties","openEntityMode","defaultViewMode","orderPropertyMissing","orderProperty","hideFromCollection","defaultSize","toUpperCase","isNaN","Number","sideDialogWidth","inlineEditing","includeJsonView","camelCase","str","toLowerCase","parts","split","filter","slice","part","charAt","substring","join","GetCodeDialog","collection","onOpenChange","open","snackbarController","useSnackbarController","code","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","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","operations","operationsCount","errorMessage","CollectionGenerationApiError","handleKeyDown","shiftKey","tooltipTitle","readOnlyReason","defaultTrigger","CollectionEditorWelcomeView","onContinue","existingCollectionPaths","unmappedTables","onImportFromTable","pathSuggestions","useCollectionEditorController","s","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","policyname","POLICYNAME","tablename","permissive","PERMISSIVE","cmd","CMD","qual","QUAL","with_check","WITH_CHECK","unmappedPolicies","dp","newPolicy","rule","operation","using","withCheck","newRules","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","foreignKeys","fk","relName","endsWith","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","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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"}
|