@rebasepro/cms 0.17.3 → 0.18.0
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/README.md +4 -0
- package/dist/{CollectionEditorDialog-B-akreOU.js → CollectionEditorDialog-BeX4b92r.js} +13 -7
- package/dist/{CollectionEditorDialog-B-akreOU.js.map → CollectionEditorDialog-BeX4b92r.js.map} +1 -1
- package/dist/{PropertyEditView-CiY84wkR.js → PropertyEditView-C7thfj4L.js} +3 -3
- package/dist/{PropertyEditView-CiY84wkR.js.map → PropertyEditView-C7thfj4L.js.map} +1 -1
- package/dist/{RouterCollectionsStudioView-DkAWda4N.js → RouterCollectionsStudioView-BtjzvB6E.js} +4 -4
- package/dist/{RouterCollectionsStudioView-DkAWda4N.js.map → RouterCollectionsStudioView-BtjzvB6E.js.map} +1 -1
- package/dist/{SchemaChangeDialog-DceT8QFX.js → SchemaChangeDialog-CkqK6KOC.js} +4 -2
- package/dist/{SchemaChangeDialog-DceT8QFX.js.map → SchemaChangeDialog-CkqK6KOC.js.map} +1 -1
- package/dist/collection_editor/api/generateCollectionApi.d.ts +1 -2
- package/dist/collection_editor_ui.d.ts +2 -0
- package/dist/collection_editor_ui.js +6 -5
- package/dist/collection_editor_ui.js.map +1 -1
- package/dist/components/DeleteEntityDialog.d.ts +2 -3
- package/dist/components/RebaseLayout.d.ts +11 -4
- package/dist/components/field_configs.d.ts +1 -1
- package/dist/editor/sanitize-html.d.ts +15 -0
- package/dist/editor.js +195 -10
- package/dist/editor.js.map +1 -1
- package/dist/{export-Ben8E355.js → export--arni_VY.js} +2 -2
- package/dist/{export-Ben8E355.js.map → export--arni_VY.js.map} +1 -1
- package/dist/form/components/LabelWithIcon.d.ts +10 -0
- package/dist/{history-DIEVd26f.js → history-C2TpoQwi.js} +2 -2
- package/dist/{history-DIEVd26f.js.map → history-C2TpoQwi.js.map} +1 -1
- package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +1 -1
- package/dist/hooks/navigation/useResolvedViews.d.ts +1 -1
- package/dist/hooks/navigation/useTopLevelNavigation.d.ts +1 -1
- package/dist/{import-D25x7ko-.js → import-DTkXNoBg.js} +2 -2
- package/dist/{import-D25x7ko-.js.map → import-DTkXNoBg.js.map} +1 -1
- package/dist/index.js +78 -33
- package/dist/index.js.map +1 -1
- package/dist/util/propertyConfigMapper.d.ts +1 -1
- package/dist/util-CfLFggP7.js +57 -0
- package/dist/util-CfLFggP7.js.map +1 -0
- package/dist/{util-DVqnqlLn.js → util-DE1WQW6h.js} +134 -112
- package/dist/util-DE1WQW6h.js.map +1 -0
- package/package.json +42 -34
- package/dist/util-DVqnqlLn.js.map +0 -1
- package/src/collection_editor/CollectionEditorDialogsContext.tsx +0 -25
- package/src/collection_editor/ConfigControllerProvider.tsx +0 -395
- package/src/collection_editor/_cms_internals.ts +0 -41
- package/src/collection_editor/api/generateCollectionApi.ts +0 -126
- package/src/collection_editor/api/index.ts +0 -1
- package/src/collection_editor/extensibility_types.ts +0 -168
- package/src/collection_editor/index.ts +0 -108
- package/src/collection_editor/liveSchemaClient.ts +0 -285
- package/src/collection_editor/relation_kinds.ts +0 -44
- package/src/collection_editor/serializable_types.ts +0 -535
- package/src/collection_editor/serializable_utils.ts +0 -729
- package/src/collection_editor/types/collection_editor_controller.tsx +0 -62
- package/src/collection_editor/types/collection_inference.ts +0 -18
- package/src/collection_editor/types/config_controller.tsx +0 -121
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +0 -199
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +0 -51
- package/src/collection_editor/ui/EditorCollectionAction.tsx +0 -54
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +0 -90
- package/src/collection_editor/ui/EditorEntityAction.tsx +0 -50
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +0 -114
- package/src/collection_editor/ui/KanbanSetupAction.tsx +0 -43
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +0 -35
- package/src/collection_editor/ui/NewCollectionButton.tsx +0 -27
- package/src/collection_editor/ui/NewCollectionCard.tsx +0 -48
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +0 -49
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +0 -260
- package/src/collection_editor/ui/collection_editor/AIModifiedPathsContext.tsx +0 -90
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +0 -388
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +0 -1098
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +0 -301
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +0 -172
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +0 -620
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +0 -530
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +0 -462
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +0 -104
- package/src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx +0 -9
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +0 -199
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +0 -315
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +0 -164
- package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +0 -40
- package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +0 -373
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +0 -288
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +0 -141
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +0 -194
- package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +0 -53
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +0 -980
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +0 -164
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +0 -364
- package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +0 -44
- package/src/collection_editor/ui/collection_editor/RouterCollectionsStudioView.tsx +0 -41
- package/src/collection_editor/ui/collection_editor/SchemaChangeDialog.tsx +0 -470
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +0 -256
- package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +0 -68
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +0 -67
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +0 -296
- package/src/collection_editor/ui/collection_editor/import/clean_import_data.ts +0 -57
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +0 -147
- package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +0 -41
- package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +0 -113
- package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +0 -250
- package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +0 -126
- package/src/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.tsx +0 -20
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +0 -153
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +0 -217
- package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +0 -117
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +0 -129
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +0 -335
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +0 -107
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +0 -403
- package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +0 -148
- package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +0 -91
- package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +0 -34
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +0 -49
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +0 -925
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +0 -28
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +0 -626
- package/src/collection_editor/ui/collection_editor/properties/conditions/index.ts +0 -6
- package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +0 -93
- package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +0 -52
- package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +0 -63
- package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +0 -114
- package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +0 -154
- package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +0 -28
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +0 -112
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +0 -183
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +0 -88
- package/src/collection_editor/ui/collection_editor/templates/users_template.ts +0 -42
- package/src/collection_editor/ui/collection_editor/util.ts +0 -28
- package/src/collection_editor/ui/collection_editor/utils/strings.ts +0 -1
- package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +0 -276
- package/src/collection_editor/useCollectionEditorController.tsx +0 -9
- package/src/collection_editor/useCollectionsConfigController.tsx +0 -9
- package/src/collection_editor/useJsonCollectionsConfigController.tsx +0 -297
- package/src/collection_editor/useLiveSchemaEditing.tsx +0 -315
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +0 -341
- package/src/collection_editor/useSafeSnackbarController.ts +0 -9
- package/src/collection_editor/validateCollectionJson.ts +0 -440
- package/src/collection_editor_ui.ts +0 -21
- package/src/components/AdditionalFieldValue.tsx +0 -68
- package/src/components/AdminModeSyncer.tsx +0 -56
- package/src/components/ArrayContainer.tsx +0 -542
- package/src/components/ClearFilterSortButton.tsx +0 -56
- package/src/components/CollectionEditorDialogs.tsx +0 -69
- package/src/components/CollectionPanel.tsx +0 -179
- package/src/components/CollectionTableBinding/CollectionRowActions.tsx +0 -244
- package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +0 -394
- package/src/components/CollectionTableBinding/CollectionTableBindingProps.tsx +0 -172
- package/src/components/CollectionTableBinding/PropertyTableCell.tsx +0 -350
- package/src/components/CollectionTableBinding/column_utils.tsx +0 -155
- package/src/components/CollectionTableBinding/fields/TableMultipleRelationField.tsx +0 -131
- package/src/components/CollectionTableBinding/fields/TableReferenceField.tsx +0 -193
- package/src/components/CollectionTableBinding/fields/TableRelationField.tsx +0 -192
- package/src/components/CollectionTableBinding/fields/TableRelationSelectorField.tsx +0 -42
- package/src/components/CollectionTableBinding/fields/TableStorageUpload.tsx +0 -324
- package/src/components/CollectionTableBinding/fields/VirtualTableSelect.tsx +0 -132
- package/src/components/CollectionTableBinding/fields/VirtualTableUserSelect.tsx +0 -41
- package/src/components/CollectionTableBinding/index.tsx +0 -14
- package/src/components/CollectionTableBinding/internal/CollectionTableToolbar.tsx +0 -96
- package/src/components/CollectionTableBinding/internal/EntityTableCell.tsx +0 -309
- package/src/components/CollectionTableBinding/internal/EntityTableCellActions.tsx +0 -80
- package/src/components/CollectionTableBinding/internal/common.tsx +0 -74
- package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +0 -422
- package/src/components/CollectionTableBinding/internal/popup_field/useDraggable.tsx +0 -99
- package/src/components/CollectionTableBinding/internal/popup_field/useWindowSize.tsx +0 -22
- package/src/components/CollectionTableBinding/table_bindings.tsx +0 -350
- package/src/components/CollectionViewBinding/BoardCardBinding.tsx +0 -263
- package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +0 -662
- package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +0 -159
- package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +0 -1430
- package/src/components/CollectionViewBinding/CollectionViewActions.tsx +0 -227
- package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +0 -1603
- package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +0 -240
- package/src/components/CollectionViewBinding/EntityCardBinding.tsx +0 -239
- package/src/components/CollectionViewBinding/FilterPresetsButton.tsx +0 -298
- package/src/components/CollectionViewBinding/FiltersDialog.tsx +0 -218
- package/src/components/CollectionViewBinding/SearchExplanation.tsx +0 -106
- package/src/components/CollectionViewBinding/SearchHighlight.tsx +0 -311
- package/src/components/CollectionViewBinding/SlotValue.tsx +0 -156
- package/src/components/CollectionViewBinding/SortButton.tsx +0 -354
- package/src/components/CollectionViewBinding/SplitListCloseButton.tsx +0 -49
- package/src/components/CollectionViewBinding/SplitListShowButton.tsx +0 -28
- package/src/components/CollectionViewBinding/SplitListView.tsx +0 -488
- package/src/components/CollectionViewBinding/SplitViewContext.tsx +0 -34
- package/src/components/CollectionViewBinding/ViewModeToggle.tsx +0 -250
- package/src/components/CollectionViewBinding/hooks/useCollectionInlineEditor.ts +0 -81
- package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +0 -181
- package/src/components/CollectionViewBinding/useBoardDataController.tsx +0 -802
- package/src/components/CollectionViewBinding/usePreviewSlots.ts +0 -703
- package/src/components/CollectionViewBinding/useSelectionController.tsx +0 -40
- package/src/components/CollectionViewBinding/utils.ts +0 -22
- package/src/components/DefaultAppBar.tsx +0 -264
- package/src/components/DefaultDrawer.tsx +0 -593
- package/src/components/DeleteEntityDialog.tsx +0 -205
- package/src/components/DetailViewBinding.tsx +0 -731
- package/src/components/DrawerNavigationGroup.tsx +0 -141
- package/src/components/DrawerNavigationItem.tsx +0 -115
- package/src/components/EditFormActions.tsx +0 -303
- package/src/components/EditViewBinding.tsx +0 -1069
- package/src/components/EntityDisplayHeader.tsx +0 -170
- package/src/components/EntityIdentityBar.tsx +0 -428
- package/src/components/EntityInspector.tsx +0 -156
- package/src/components/EntityPreviewBinding.tsx +0 -432
- package/src/components/EntityPreviewNesting.tsx +0 -50
- package/src/components/EntityViewBinding.tsx +0 -374
- package/src/components/FieldCaption.tsx +0 -14
- package/src/components/HomePage/ContentHomePage.tsx +0 -586
- package/src/components/HomePage/FavouritesView.tsx +0 -60
- package/src/components/HomePage/HomePageDnD.tsx +0 -704
- package/src/components/HomePage/NavigationCard.tsx +0 -81
- package/src/components/HomePage/NavigationCardBinding.tsx +0 -107
- package/src/components/HomePage/NavigationGroup.tsx +0 -156
- package/src/components/HomePage/RenameGroupDialog.tsx +0 -123
- package/src/components/HomePage/SmallNavigationCard.tsx +0 -41
- package/src/components/HomePage/index.tsx +0 -5
- package/src/components/InlineEntityPreview.tsx +0 -149
- package/src/components/JsonPreviewBinding.tsx +0 -66
- package/src/components/PropertyCollectionView.tsx +0 -336
- package/src/components/PropertyConfigBadge.tsx +0 -28
- package/src/components/PropertyIdCopyTooltip.tsx +0 -47
- package/src/components/RebaseAuthGate.tsx +0 -44
- package/src/components/RebaseCMS.tsx +0 -30
- package/src/components/RebaseLayout.tsx +0 -80
- package/src/components/RebaseNavigation.tsx +0 -369
- package/src/components/RebaseRouteDefs.tsx +0 -127
- package/src/components/RebaseShell.tsx +0 -83
- package/src/components/ReferenceTable/SelectionTableBinding.tsx +0 -389
- package/src/components/ReferenceWidget.tsx +0 -156
- package/src/components/RelationSelector.tsx +0 -926
- package/src/components/SearchIconsView.tsx +0 -78
- package/src/components/SelectableTable/SelectableTable.tsx +0 -309
- package/src/components/SelectableTable/SelectableTableContext.tsx +0 -7
- package/src/components/SelectableTable/SelectionStore.ts +0 -43
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +0 -59
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +0 -146
- package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +0 -190
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +0 -250
- package/src/components/SelectableTable/filters/RelationFilterField.tsx +0 -238
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +0 -282
- package/src/components/SelectableTable/filters/null_filter.ts +0 -63
- package/src/components/SideDialogs.tsx +0 -238
- package/src/components/SidePanelBinding.tsx +0 -361
- package/src/components/SidePanelProvider.tsx +0 -80
- package/src/components/UserSelector.tsx +0 -513
- package/src/components/admin/CreationResultDialog.tsx +0 -138
- package/src/components/admin/index.ts +0 -1
- package/src/components/app/AppBar.tsx +0 -17
- package/src/components/app/Drawer.tsx +0 -38
- package/src/components/app/Scaffold.tsx +0 -366
- package/src/components/app/index.ts +0 -4
- package/src/components/app/useApp.tsx +0 -36
- package/src/components/common/default_entity_actions.tsx +0 -440
- package/src/components/common/index.ts +0 -1
- package/src/components/field_configs.tsx +0 -506
- package/src/components/history/EntityHistoryEntry.tsx +0 -203
- package/src/components/history/EntityHistoryView.tsx +0 -206
- package/src/components/history/LastEditedByFormAction.tsx +0 -24
- package/src/components/history/LastEditedByIndicator.tsx +0 -95
- package/src/components/history/UserChip.tsx +0 -15
- package/src/components/history/index.tsx +0 -5
- package/src/components/index.ts +0 -63
- package/src/contexts/BreacrumbsContext.tsx +0 -45
- package/src/contexts/SideDialogsControllerContext.tsx +0 -5
- package/src/contexts/SidePanelControllerContext.tsx +0 -5
- package/src/data_export/export/BasicExportAction.tsx +0 -142
- package/src/data_export/export/ExportCollectionAction.tsx +0 -321
- package/src/data_export/export/export.ts +0 -295
- package/src/data_export/export/fetch_export_data.ts +0 -90
- package/src/data_export/export/index.ts +0 -4
- package/src/data_export/index.ts +0 -1
- package/src/data_import/components/DataNewPropertiesMapping.tsx +0 -261
- package/src/data_import/components/ImportFileUpload.tsx +0 -42
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +0 -58
- package/src/data_import/components/ImportSaveInProgress.tsx +0 -121
- package/src/data_import/components/index.ts +0 -4
- package/src/data_import/hooks/index.ts +0 -1
- package/src/data_import/hooks/useImportConfig.tsx +0 -34
- package/src/data_import/import/ImportCollectionAction.tsx +0 -461
- package/src/data_import/import/index.ts +0 -1
- package/src/data_import/index.ts +0 -5
- package/src/data_import/types/column_mapping.ts +0 -32
- package/src/data_import/types/index.ts +0 -1
- package/src/data_import/utils/csv.ts +0 -153
- package/src/data_import/utils/data.ts +0 -181
- package/src/data_import/utils/file_headers.ts +0 -14
- package/src/data_import/utils/file_to_json.ts +0 -149
- package/src/data_import/utils/get_import_inference_type.ts +0 -33
- package/src/data_import/utils/get_properties_mapping.ts +0 -67
- package/src/data_import/utils/index.ts +0 -5
- package/src/data_import/utils/save_entities.ts +0 -138
- package/src/data_import/utils/transforms.ts +0 -70
- package/src/editor/components/SlashCommandMenu.tsx +0 -532
- package/src/editor/components/editor-bubble-item.tsx +0 -32
- package/src/editor/components/editor-bubble.tsx +0 -143
- package/src/editor/components/image-bubble.tsx +0 -183
- package/src/editor/components/index.ts +0 -14
- package/src/editor/components/table-bubble.tsx +0 -233
- package/src/editor/editor.tsx +0 -529
- package/src/editor/extensions/HighlightDecorationExtension.ts +0 -115
- package/src/editor/extensions/Image.ts +0 -159
- package/src/editor/extensions/TextLoadingDecorationExtension.tsx +0 -107
- package/src/editor/extensions/clipboard.ts +0 -72
- package/src/editor/extensions/custom-keymap.ts +0 -25
- package/src/editor/extensions/drag-and-drop.tsx +0 -508
- package/src/editor/hooks/useProseMirror.ts +0 -126
- package/src/editor/hooks/useProseMirrorContext.ts +0 -15
- package/src/editor/index.ts +0 -2
- package/src/editor/markdown-it-plugins.d.ts +0 -24
- package/src/editor/markdown.ts +0 -204
- package/src/editor/nodeViews/ImageComponent.tsx +0 -20
- package/src/editor/nodeViews/ReactNodeView.tsx +0 -89
- package/src/editor/nodeViews/TaskItemComponent.tsx +0 -30
- package/src/editor/nodeViews/index.ts +0 -35
- package/src/editor/plugins/index.ts +0 -58
- package/src/editor/plugins/inputrules.ts +0 -82
- package/src/editor/plugins/placeholderPlugin.ts +0 -55
- package/src/editor/plugins/slashCommandPlugin.ts +0 -65
- package/src/editor/schema.ts +0 -339
- package/src/editor/selectors/ai-selector.tsx +0 -110
- package/src/editor/selectors/color-selector.tsx +0 -199
- package/src/editor/selectors/link-selector.tsx +0 -122
- package/src/editor/selectors/node-selector.tsx +0 -159
- package/src/editor/selectors/text-buttons.tsx +0 -79
- package/src/editor/types.ts +0 -6
- package/src/editor/useProseMirror.ts +0 -125
- package/src/editor/utils/prosemirror-utils.ts +0 -113
- package/src/editor/utils/remove_classes.ts +0 -18
- package/src/editor/utils/useDebouncedCallback.ts +0 -25
- package/src/form/EntityForm.tsx +0 -761
- package/src/form/EntityFormActions.tsx +0 -160
- package/src/form/EntityFormBinding.tsx +0 -342
- package/src/form/PropertyFieldBinding.tsx +0 -348
- package/src/form/components/ErrorFocus.tsx +0 -44
- package/src/form/components/FieldBlock.tsx +0 -189
- package/src/form/components/FieldHelperText.tsx +0 -84
- package/src/form/components/FormRail.tsx +0 -153
- package/src/form/components/FormSections.tsx +0 -145
- package/src/form/components/LabelWithIcon.tsx +0 -43
- package/src/form/components/LabelWithIconAndTooltip.tsx +0 -28
- package/src/form/components/LocalChangesMenu.tsx +0 -147
- package/src/form/components/StorageItemPreview.tsx +0 -81
- package/src/form/components/StorageUploadProgress.tsx +0 -118
- package/src/form/components/index.tsx +0 -6
- package/src/form/components/useRailVisible.tsx +0 -47
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +0 -109
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +0 -172
- package/src/form/field_bindings/BinaryFieldBinding.tsx +0 -177
- package/src/form/field_bindings/BlockFieldBinding.tsx +0 -282
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +0 -78
- package/src/form/field_bindings/GeopointFieldBinding.tsx +0 -200
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +0 -574
- package/src/form/field_bindings/MapFieldBinding.tsx +0 -120
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +0 -259
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +0 -130
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +0 -168
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +0 -94
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +0 -146
- package/src/form/field_bindings/RelationFieldBinding.tsx +0 -202
- package/src/form/field_bindings/RepeatFieldBinding.tsx +0 -143
- package/src/form/field_bindings/SelectFieldBinding.tsx +0 -111
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +0 -521
- package/src/form/field_bindings/SwitchFieldBinding.tsx +0 -70
- package/src/form/field_bindings/TextFieldBinding.tsx +0 -189
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +0 -71
- package/src/form/field_bindings/VectorFieldBinding.tsx +0 -209
- package/src/form/form_utils.ts +0 -243
- package/src/form/index.tsx +0 -36
- package/src/form/useClearRestoreValue.tsx +0 -36
- package/src/form/useUndoableDiscard.ts +0 -39
- package/src/form/validation.ts +0 -583
- package/src/hooks/index.ts +0 -16
- package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +0 -22
- package/src/hooks/navigation/contexts/NavigationStateContext.tsx +0 -16
- package/src/hooks/navigation/contexts/UrlContext.tsx +0 -24
- package/src/hooks/navigation/contexts/index.ts +0 -14
- package/src/hooks/navigation/useAsyncResolver.ts +0 -100
- package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +0 -218
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +0 -134
- package/src/hooks/navigation/useBuildUrlController.tsx +0 -66
- package/src/hooks/navigation/useNavigationResolution.ts +0 -271
- package/src/hooks/navigation/useResolvedCollections.ts +0 -102
- package/src/hooks/navigation/useResolvedViews.tsx +0 -139
- package/src/hooks/navigation/useTopLevelNavigation.ts +0 -273
- package/src/hooks/navigation/utils.ts +0 -200
- package/src/hooks/useAdminContext.tsx +0 -83
- package/src/hooks/useBreadcrumbsController.tsx +0 -17
- package/src/hooks/useBuildSideDialogsController.tsx +0 -145
- package/src/hooks/useBuildSidePanel.tsx +0 -315
- package/src/hooks/useChildViewSource.ts +0 -46
- package/src/hooks/useEntityDisplay.tsx +0 -262
- package/src/hooks/useEntityDisplayTitle.tsx +0 -49
- package/src/hooks/useHistory.ts +0 -178
- package/src/hooks/useRecordActions.tsx +0 -69
- package/src/hooks/useResolvedNavigationFrom.tsx +0 -167
- package/src/hooks/useResolvedUsers.ts +0 -148
- package/src/hooks/useSelectionDialog.tsx +0 -58
- package/src/hooks/useSideDialogsController.tsx +0 -25
- package/src/hooks/useSidePanel.tsx +0 -13
- package/src/index.ts +0 -124
- package/src/preview/PropertyPreview.tsx +0 -331
- package/src/preview/compact_text.ts +0 -68
- package/src/preview/components/ArrayEnumPreview.tsx +0 -39
- package/src/preview/components/BooleanPreview.tsx +0 -28
- package/src/preview/components/DatePreview.tsx +0 -106
- package/src/preview/components/EmptyValue.tsx +0 -10
- package/src/preview/components/EnumValuesChip.tsx +0 -39
- package/src/preview/components/ImagePreview.tsx +0 -144
- package/src/preview/components/InlineEntityListPreview.tsx +0 -42
- package/src/preview/components/ReferencePreview.tsx +0 -235
- package/src/preview/components/RelationPreview.tsx +0 -271
- package/src/preview/components/StorageThumbnail.tsx +0 -147
- package/src/preview/components/UrlComponentPreview.tsx +0 -116
- package/src/preview/components/UserPreview.tsx +0 -30
- package/src/preview/components/date_fns_locales.ts +0 -125
- package/src/preview/index.ts +0 -26
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -73
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +0 -67
- package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +0 -77
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -49
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -70
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +0 -79
- package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +0 -35
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +0 -79
- package/src/preview/property_previews/MapPropertyPreview.tsx +0 -198
- package/src/preview/property_previews/NumberPropertyPreview.tsx +0 -39
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +0 -276
- package/src/preview/property_previews/StringPropertyPreview.tsx +0 -70
- package/src/preview/util.ts +0 -39
- package/src/routes/CustomViewRoute.tsx +0 -33
- package/src/routes/RebaseRoute.tsx +0 -467
- package/src/routes/index.ts +0 -2
- package/src/types/components/EntityFormActionsProps.tsx +0 -20
- package/src/types/components/EntityFormProps.tsx +0 -119
- package/src/types/components/PropertyPreviewProps.tsx +0 -85
- package/src/types/components/formex.tsx +0 -2
- package/src/types/components/index.ts +0 -3
- package/src/types/fields.tsx +0 -340
- package/src/types/index.ts +0 -4
- package/src/util/dataControllerAdapter.ts +0 -88
- package/src/util/entity_actions.ts +0 -28
- package/src/util/index.ts +0 -5
- package/src/util/navigation_utils.ts +0 -89
- package/src/util/number_format.ts +0 -46
- package/src/util/previews.ts +0 -131
- package/src/util/propertyConfigMapper.ts +0 -134
- package/src/util/property_utils.tsx +0 -236
- package/src/util/resolutions.ts +0 -96
- package/src/util/view_constants.ts +0 -33
- package/src/util/view_mode.ts +0 -176
package/src/util/previews.ts
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import type { Property } from "@rebasepro/types";
|
|
2
|
-
import type { AdminCollection } from "@rebasepro/cms-types";
|
|
3
|
-
import { getTitlePropertyKey, getTitlePropertyKeyForValues } from "@rebasepro/app";
|
|
4
|
-
import { isPropertyBuilder } from "@rebasepro/common";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Which properties fill a preview surface, best first.
|
|
8
|
-
*
|
|
9
|
-
* The implementation lives in `@rebasepro/app` so that the admin package and
|
|
10
|
-
* the app package cannot disagree about what a record looks like in a card —
|
|
11
|
-
* they had drifted, and only one of the two copies had learned to keep
|
|
12
|
-
* relations out of the list.
|
|
13
|
-
*/
|
|
14
|
-
export { getEntityPreviewKeys } from "@rebasepro/app";
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* The property that fills the title slot for a collection.
|
|
18
|
-
*
|
|
19
|
-
* Ranking lives in `@rebasepro/common` so every surface (list rows, cards,
|
|
20
|
-
* board cards, detail header, relation chips) agrees on what an entity is
|
|
21
|
-
* called. Identifiers are excluded from the property *schema* — primary keys,
|
|
22
|
-
* foreign keys, UUID columns — not from the key name.
|
|
23
|
-
*/
|
|
24
|
-
export function getEntityTitlePropertyKey<M extends Record<string, unknown>>(
|
|
25
|
-
collection: AdminCollection<M>
|
|
26
|
-
): string | undefined {
|
|
27
|
-
return getTitlePropertyKey(collection);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Same as {@link getEntityTitlePropertyKey}, but skips candidates that carry
|
|
32
|
-
* no readable value for this particular entity (empty, or an opaque id).
|
|
33
|
-
*/
|
|
34
|
-
export function getEntityTitlePropertyKeyForEntity<M extends Record<string, unknown>>(
|
|
35
|
-
collection: AdminCollection<M>,
|
|
36
|
-
values: Record<string, unknown> | undefined,
|
|
37
|
-
entityId?: string | number
|
|
38
|
-
): string | undefined {
|
|
39
|
-
return getTitlePropertyKeyForValues(collection, values, entityId);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* True when a property key points at a user picker, whose stored value is an
|
|
44
|
-
* auth user id that has to be resolved before it can be displayed.
|
|
45
|
-
*/
|
|
46
|
-
export function isUserSelectProperty<M extends Record<string, unknown>>(
|
|
47
|
-
collection: AdminCollection<M>,
|
|
48
|
-
propertyKey: string | undefined
|
|
49
|
-
): boolean {
|
|
50
|
-
if (!propertyKey) return false;
|
|
51
|
-
const property = collection.properties[propertyKey];
|
|
52
|
-
if (!property || isPropertyBuilder(property)) return false;
|
|
53
|
-
const prop = property as Property;
|
|
54
|
-
return prop.type === "string" && Boolean(prop.userSelect);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Attempt to turn a title value (which might be a relation, reference, date, array, or other complex object)
|
|
59
|
-
* into a renderable, human-readable string.
|
|
60
|
-
*/
|
|
61
|
-
export function resolveTitleToString(title: any): string {
|
|
62
|
-
if (title === null || title === undefined) {
|
|
63
|
-
return "";
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (typeof title !== "object") {
|
|
67
|
-
return String(title);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Check if it's a relation shape: { __type: "relation", id, path, data }
|
|
71
|
-
if ("__type" in title && title.__type === "relation") {
|
|
72
|
-
if (title.data && title.data.values) {
|
|
73
|
-
const values = title.data.values;
|
|
74
|
-
// Prioritize common title fields in eagerly loaded relation data
|
|
75
|
-
for (const key of ["name", "title", "label", "displayName"]) {
|
|
76
|
-
if (values[key] !== undefined && values[key] !== null) {
|
|
77
|
-
return String(values[key]);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// Fallback: search for first short string value in values
|
|
81
|
-
for (const val of Object.values(values)) {
|
|
82
|
-
if (typeof val === "string" && val.length > 0 && val.length < 200) {
|
|
83
|
-
return val;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
if (title.id !== undefined && title.id !== null) {
|
|
88
|
-
return String(title.id);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Check if it's a reference shape: { isEntityReference() } or similar
|
|
93
|
-
if ("isEntityReference" in title && typeof title.isEntityReference === "function" && title.isEntityReference()) {
|
|
94
|
-
return String(title.id);
|
|
95
|
-
}
|
|
96
|
-
if ("id" in title && "path" in title && !("__type" in title)) {
|
|
97
|
-
// Flat reference/relation-like object
|
|
98
|
-
return String(title.id);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// Check if it's a Date
|
|
102
|
-
if (title instanceof Date) {
|
|
103
|
-
return title.toLocaleDateString();
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// Check if it has a string/number property like name/title/label/id
|
|
107
|
-
if ("name" in title && title.name !== undefined && title.name !== null && typeof title.name !== "object") {
|
|
108
|
-
return String(title.name);
|
|
109
|
-
}
|
|
110
|
-
if ("title" in title && title.title !== undefined && title.title !== null && typeof title.title !== "object") {
|
|
111
|
-
return String(title.title);
|
|
112
|
-
}
|
|
113
|
-
if ("label" in title && title.label !== undefined && title.label !== null && typeof title.label !== "object") {
|
|
114
|
-
return String(title.label);
|
|
115
|
-
}
|
|
116
|
-
if ("id" in title && title.id !== undefined && title.id !== null && typeof title.id !== "object") {
|
|
117
|
-
return String(title.id);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Fallback: try converting to string, or JSON.stringify if it looks like a generic object
|
|
121
|
-
try {
|
|
122
|
-
const str = String(title);
|
|
123
|
-
if (str !== "[object Object]") {
|
|
124
|
-
return str;
|
|
125
|
-
}
|
|
126
|
-
return JSON.stringify(title);
|
|
127
|
-
} catch {
|
|
128
|
-
return "";
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Maps a Rebase `Property` (from @rebasepro/types) to a `CollectionPropertyConfig`
|
|
3
|
-
* (from @rebasepro/ui), stripping all entity-specific fields and keeping only
|
|
4
|
-
* the UI-relevant subset.
|
|
5
|
-
*
|
|
6
|
-
* This is the bridge between the entity-aware and headless layers.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { Property, Properties, EnumValues, EnumValueConfig } from "@rebasepro/types";
|
|
10
|
-
import type { CollectionPropertyConfig, CollectionEnumValueConfig } from "@rebasepro/ui";
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Map Rebase property types to headless-supported types.
|
|
14
|
-
* `vector` and `binary` are not directly renderable, so we fall back to `string`.
|
|
15
|
-
*/
|
|
16
|
-
const TYPE_MAP: Record<string, CollectionPropertyConfig["type"]> = {
|
|
17
|
-
string: "string",
|
|
18
|
-
number: "number",
|
|
19
|
-
boolean: "boolean",
|
|
20
|
-
date: "date",
|
|
21
|
-
geopoint: "geopoint",
|
|
22
|
-
reference: "reference",
|
|
23
|
-
relation: "relation",
|
|
24
|
-
array: "array",
|
|
25
|
-
map: "map",
|
|
26
|
-
vector: "string", // vectors display as text
|
|
27
|
-
binary: "string", // binary displays as text
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Convert a single Property to a CollectionPropertyConfig.
|
|
32
|
-
*/
|
|
33
|
-
export function mapPropertyToConfig(property: Property): CollectionPropertyConfig {
|
|
34
|
-
const base: CollectionPropertyConfig = {
|
|
35
|
-
type: TYPE_MAP[property.type] ?? "string",
|
|
36
|
-
name: property.name,
|
|
37
|
-
description: property.description,
|
|
38
|
-
columnWidth: property.admin?.columnWidth,
|
|
39
|
-
hideFromCollection: property.admin?.hideFromCollection,
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
// String-specific
|
|
43
|
-
if (property.type === "string") {
|
|
44
|
-
if (property.enum) {
|
|
45
|
-
base.enum = mapEnumValues(property.enum);
|
|
46
|
-
}
|
|
47
|
-
if (property.admin?.multiline) base.multiline = true;
|
|
48
|
-
if (property.admin?.previewAsTag) base.previewAsTag = true;
|
|
49
|
-
if (property.admin?.urlPreview) base.url = property.admin.urlPreview;
|
|
50
|
-
if (property.admin?.markdown) base.markdown = true;
|
|
51
|
-
if (property.storage) base.storage = true;
|
|
52
|
-
if (property.email) base.email = true;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Number-specific
|
|
56
|
-
if (property.type === "number" && property.enum) {
|
|
57
|
-
base.enum = mapEnumValues(property.enum);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Array-specific
|
|
61
|
-
if (property.type === "array" && property.of && !Array.isArray(property.of)) {
|
|
62
|
-
base.of = mapPropertyToConfig(property.of);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Map-specific
|
|
66
|
-
if (property.type === "map" && property.properties) {
|
|
67
|
-
base.properties = mapPropertiesToConfigs(property.properties);
|
|
68
|
-
if (property.propertiesOrder) {
|
|
69
|
-
base.propertiesOrder = property.propertiesOrder;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Date-specific
|
|
74
|
-
if (property.type === "date" && property.mode) {
|
|
75
|
-
base.mode = property.mode;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Custom preview component
|
|
79
|
-
if (property.admin?.Preview) {
|
|
80
|
-
// The connected wrapper will handle this by injecting via cellRenderer override
|
|
81
|
-
// We don't copy it here because Preview may reference entity-aware components
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return base;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Convert a Properties record to a CollectionPropertyConfig record.
|
|
89
|
-
*/
|
|
90
|
-
export function mapPropertiesToConfigs(
|
|
91
|
-
properties: Properties
|
|
92
|
-
): Record<string, CollectionPropertyConfig> {
|
|
93
|
-
const result: Record<string, CollectionPropertyConfig> = {};
|
|
94
|
-
for (const [key, property] of Object.entries(properties)) {
|
|
95
|
-
result[key] = mapPropertyToConfig(property);
|
|
96
|
-
}
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Convert Rebase EnumValues to CollectionEnumValueConfig format.
|
|
102
|
-
* Handles both array form (EnumValueConfig[]) and record form.
|
|
103
|
-
*/
|
|
104
|
-
function mapEnumValues(
|
|
105
|
-
enumValues: EnumValues | undefined
|
|
106
|
-
): Record<string, CollectionEnumValueConfig> | Map<string | number, CollectionEnumValueConfig> | undefined {
|
|
107
|
-
if (!enumValues) return undefined;
|
|
108
|
-
|
|
109
|
-
// Array form: EnumValueConfig[]
|
|
110
|
-
if (Array.isArray(enumValues)) {
|
|
111
|
-
const result: Record<string, CollectionEnumValueConfig> = {};
|
|
112
|
-
for (const item of enumValues) {
|
|
113
|
-
result[String(item.id)] = normalizeEnumValueConfig(item);
|
|
114
|
-
}
|
|
115
|
-
return result;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Record form: Record<string | number, string | EnumValueConfig>
|
|
119
|
-
const result: Record<string, CollectionEnumValueConfig> = {};
|
|
120
|
-
for (const [key, value] of Object.entries(enumValues)) {
|
|
121
|
-
result[key] = typeof value === "string"
|
|
122
|
-
? value
|
|
123
|
-
: normalizeEnumValueConfig(value);
|
|
124
|
-
}
|
|
125
|
-
return result;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
function normalizeEnumValueConfig(config: EnumValueConfig): CollectionEnumValueConfig {
|
|
129
|
-
return {
|
|
130
|
-
label: config.label,
|
|
131
|
-
color: typeof config.color === "string" ? config.color : undefined,
|
|
132
|
-
disabled: config.disabled,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import type { Properties } from "@rebasepro/types";
|
|
3
|
-
import type { MapProperty, Property } from "@rebasepro/types";
|
|
4
|
-
import type { PropertyConfig, AdminCollection } from "@rebasepro/cms-types";
|
|
5
|
-
import React from "react";
|
|
6
|
-
|
|
7
|
-
import { isPropertyBuilder } from "@rebasepro/common";
|
|
8
|
-
import {
|
|
9
|
-
AlignLeftIcon,
|
|
10
|
-
CalendarIcon,
|
|
11
|
-
CircleIcon,
|
|
12
|
-
FlagIcon,
|
|
13
|
-
FunctionSquareIcon,
|
|
14
|
-
GlobeIcon,
|
|
15
|
-
HashIcon,
|
|
16
|
-
iconSize,
|
|
17
|
-
LinkIcon,
|
|
18
|
-
MailIcon,
|
|
19
|
-
RepeatIcon,
|
|
20
|
-
Rows3Icon,
|
|
21
|
-
TextIcon,
|
|
22
|
-
UploadIcon,
|
|
23
|
-
VoteIcon
|
|
24
|
-
} from "@rebasepro/ui";
|
|
25
|
-
import type { IconSize, LucideIcon } from "@rebasepro/ui";
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Resolve a size value (string token or number) to a numeric pixel value
|
|
29
|
-
* suitable for passing to Lucide icons.
|
|
30
|
-
*/
|
|
31
|
-
function resolveSize(size: IconSize | number): number {
|
|
32
|
-
if (typeof size === "number") return size;
|
|
33
|
-
return iconSize[size];
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function isReferenceProperty(property: Property) {
|
|
37
|
-
|
|
38
|
-
if (!property) return null;
|
|
39
|
-
if (property.type === "reference") {
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
if (property.type === "array") {
|
|
43
|
-
if (Array.isArray(property.of)) return false;
|
|
44
|
-
else return property.of?.type === "reference"
|
|
45
|
-
}
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function isRelationProperty(property: Property) {
|
|
50
|
-
if (!property) return null;
|
|
51
|
-
if (property.type === "relation") {
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
if (property.type === "array") {
|
|
55
|
-
if (Array.isArray(property.of)) return false;
|
|
56
|
-
else return property.of?.type === "relation"
|
|
57
|
-
}
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export function getIconForWidget(widget: PropertyConfig | undefined,
|
|
62
|
-
size: IconSize | number) {
|
|
63
|
-
const Icon = widget?.Icon ?? CircleIcon;
|
|
64
|
-
const px = resolveSize(size);
|
|
65
|
-
return <Icon size={px}/>;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Returns a default Lucide icon component based on property type.
|
|
70
|
-
* This provides a sensible fallback when no PropertyConfig is available.
|
|
71
|
-
*/
|
|
72
|
-
function getDefaultIconForProperty(property: Property): LucideIcon {
|
|
73
|
-
switch (property.type) {
|
|
74
|
-
case "string": {
|
|
75
|
-
if (property.storage) return UploadIcon;
|
|
76
|
-
if (property.admin?.urlPreview) return GlobeIcon;
|
|
77
|
-
if (property.email) return MailIcon;
|
|
78
|
-
if (property.admin?.multiline || property.admin?.markdown) return AlignLeftIcon;
|
|
79
|
-
return TextIcon;
|
|
80
|
-
}
|
|
81
|
-
case "number":
|
|
82
|
-
return HashIcon;
|
|
83
|
-
case "boolean":
|
|
84
|
-
return FlagIcon;
|
|
85
|
-
case "date":
|
|
86
|
-
return CalendarIcon;
|
|
87
|
-
case "map":
|
|
88
|
-
return VoteIcon;
|
|
89
|
-
case "array": {
|
|
90
|
-
const of = property.of;
|
|
91
|
-
const oneOf = property.oneOf;
|
|
92
|
-
if (oneOf) return Rows3Icon;
|
|
93
|
-
if (of && !Array.isArray(of)) {
|
|
94
|
-
if (of.type === "reference") return LinkIcon;
|
|
95
|
-
if (of.type === "string" && of.storage) return UploadIcon;
|
|
96
|
-
}
|
|
97
|
-
return RepeatIcon;
|
|
98
|
-
}
|
|
99
|
-
case "reference":
|
|
100
|
-
return LinkIcon;
|
|
101
|
-
case "relation":
|
|
102
|
-
return LinkIcon;
|
|
103
|
-
case "vector":
|
|
104
|
-
return HashIcon;
|
|
105
|
-
default:
|
|
106
|
-
return CircleIcon;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export function getIconForProperty(
|
|
111
|
-
property: Property,
|
|
112
|
-
size: IconSize | number = "small",
|
|
113
|
-
fields: Record<string, PropertyConfig> = {}
|
|
114
|
-
): React.ReactNode {
|
|
115
|
-
const px = resolveSize(size);
|
|
116
|
-
|
|
117
|
-
if (isPropertyBuilder(property)) {
|
|
118
|
-
return <FunctionSquareIcon size={px}/>;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Try to look up a custom PropertyConfig icon first
|
|
122
|
-
const configId = property.propertyConfig || undefined;
|
|
123
|
-
const widget = configId ? fields[configId] : undefined;
|
|
124
|
-
if (widget?.Icon) {
|
|
125
|
-
return getIconForWidget(widget, size);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Fall back to a type-based default icon
|
|
129
|
-
const Icon = getDefaultIconForProperty(property);
|
|
130
|
-
return <Icon size={px}/>;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Get a property in a property tree from a path like
|
|
135
|
-
* `address.street`
|
|
136
|
-
* @param properties
|
|
137
|
-
* @param path
|
|
138
|
-
*/
|
|
139
|
-
export function getPropertyInPath(properties: Properties, path: string): Property | undefined {
|
|
140
|
-
if (typeof properties === "object") {
|
|
141
|
-
if (path in properties) {
|
|
142
|
-
return (properties as Record<string, Property>)[path];
|
|
143
|
-
}
|
|
144
|
-
if (path.includes(".")) {
|
|
145
|
-
const pathSegments = path.split(".");
|
|
146
|
-
const childProperty = (properties as Record<string, Property>)[pathSegments[0]];
|
|
147
|
-
if (typeof childProperty === "object" && childProperty.type === "map" && childProperty.properties) {
|
|
148
|
-
return getPropertyInPath(childProperty.properties, pathSegments.slice(1).join("."))
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return undefined;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export function getResolvedPropertyInPath(properties: Record<string, Property>, path: string): Property | undefined {
|
|
156
|
-
if (typeof properties === "object") {
|
|
157
|
-
if (path in properties) {
|
|
158
|
-
return properties[path];
|
|
159
|
-
}
|
|
160
|
-
if (path.includes(".")) {
|
|
161
|
-
const pathSegments = path.split(".");
|
|
162
|
-
// A path whose root is not a property at all is simply not found.
|
|
163
|
-
// Reading `.type` off the miss threw a TypeError instead, which
|
|
164
|
-
// turned one unresolvable column key into a crash for whatever was
|
|
165
|
-
// walking the properties — see `propertiesToColumns`, where that is
|
|
166
|
-
// the whole table. `getPropertyInPath` above already guards this.
|
|
167
|
-
const childProperty = properties[pathSegments[0]];
|
|
168
|
-
if (childProperty?.type === "map" && childProperty.properties) {
|
|
169
|
-
return getResolvedPropertyInPath(childProperty.properties, pathSegments.slice(1).join("."))
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
return undefined;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// replace the dot notation with brackets
|
|
177
|
-
// address.street => address[street]
|
|
178
|
-
export function getBracketNotation(path: string): string {
|
|
179
|
-
return path.replace(/\.([^.]*)/g, "[$1]");
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Get properties sorted by their order, but include ALL properties.
|
|
184
|
-
* Nested keys (like "data.mode") in propertiesOrder are ignored - they're for column ordering.
|
|
185
|
-
* @param properties
|
|
186
|
-
* @param propertiesOrder
|
|
187
|
-
*/
|
|
188
|
-
export function getPropertiesWithPropertiesOrder(properties: Properties, propertiesOrder?: string[]): Properties {
|
|
189
|
-
if (!propertiesOrder) return properties;
|
|
190
|
-
|
|
191
|
-
const propertyKeys = Object.keys(properties);
|
|
192
|
-
|
|
193
|
-
// Filter propertiesOrder to only include top-level keys (no dots) that exist
|
|
194
|
-
const validOrderKeys = (propertiesOrder as string[]).filter(
|
|
195
|
-
key => !key.includes(".") && properties[key]
|
|
196
|
-
);
|
|
197
|
-
|
|
198
|
-
const result: Properties = {};
|
|
199
|
-
|
|
200
|
-
// First add properties in the specified order
|
|
201
|
-
validOrderKeys.forEach(key => {
|
|
202
|
-
const property = properties[key];
|
|
203
|
-
if (typeof property === "object" && property.type === "map" && (property as MapProperty).properties) {
|
|
204
|
-
const mapProp = property as MapProperty;
|
|
205
|
-
result[key] = {
|
|
206
|
-
...mapProp,
|
|
207
|
-
properties: getPropertiesWithPropertiesOrder(mapProp.properties!, mapProp.propertiesOrder ?? [])
|
|
208
|
-
} as Property;
|
|
209
|
-
} else if (property) {
|
|
210
|
-
result[key] = property;
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
// Then add any missing properties (so they don't disappear!)
|
|
215
|
-
propertyKeys.forEach(key => {
|
|
216
|
-
if (!result[key]) {
|
|
217
|
-
const property = properties[key];
|
|
218
|
-
if (typeof property === "object" && property.type === "map" && (property as MapProperty).properties) {
|
|
219
|
-
const mapProp = property as MapProperty;
|
|
220
|
-
result[key] = {
|
|
221
|
-
...mapProp,
|
|
222
|
-
properties: getPropertiesWithPropertiesOrder(mapProp.properties!, mapProp.propertiesOrder ?? [])
|
|
223
|
-
} as Property;
|
|
224
|
-
} else if (property) {
|
|
225
|
-
result[key] = property;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
return result;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
export function getDefaultPropertiesOrder(collection: AdminCollection): string[] {
|
|
234
|
-
if (collection.propertiesOrder) return collection.propertiesOrder;
|
|
235
|
-
return [...Object.keys(collection.properties), ...(collection.additionalFields ?? []).map(field => field.key)];
|
|
236
|
-
}
|
package/src/util/resolutions.ts
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { HistoryIcon } from "@rebasepro/ui";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import type { CollectionCustomView, CustomizationController, EntityAction, EntityCustomView } from "@rebasepro/cms-types";
|
|
4
|
-
import { VIEW_MODES } from "./view_mode";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Built-in entity views that are resolved by token name.
|
|
8
|
-
* These are always available without needing to be registered
|
|
9
|
-
* in the customization controller's entityViews array.
|
|
10
|
-
*/
|
|
11
|
-
const BUILTIN_ENTITY_VIEWS: Record<string, EntityCustomView> = {
|
|
12
|
-
"__rebase_history": {
|
|
13
|
-
key: "__rebase_history",
|
|
14
|
-
name: "History",
|
|
15
|
-
tabComponent: React.createElement(HistoryIcon, { size: 20 }),
|
|
16
|
-
position: "end"
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export function resolveEntityView(
|
|
21
|
-
entityView: string | EntityCustomView<any>,
|
|
22
|
-
contextEntityViews?: EntityCustomView<any>[]
|
|
23
|
-
): EntityCustomView<any> | undefined {
|
|
24
|
-
if (typeof entityView === "string") {
|
|
25
|
-
// Check built-in views first, then user-registered views
|
|
26
|
-
return BUILTIN_ENTITY_VIEWS[entityView]
|
|
27
|
-
?? contextEntityViews?.find((entry) => entry.key === entityView);
|
|
28
|
-
} else {
|
|
29
|
-
return entityView;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Resolve a collection's `admin.customViews` into the views it can actually
|
|
35
|
-
* render, dropping every entry that names a key nothing registered.
|
|
36
|
-
*
|
|
37
|
-
* Dropping is deliberate: an unresolvable key must not become a switcher entry
|
|
38
|
-
* that renders a blank panel. It falls out of `enabledViews` too, so a user
|
|
39
|
-
* whose saved view mode was removed lands on a built-in.
|
|
40
|
-
*/
|
|
41
|
-
export function resolveCollectionViews(
|
|
42
|
-
customViews: (string | CollectionCustomView<any>)[] | undefined,
|
|
43
|
-
contextCollectionViews?: CollectionCustomView<any>[]
|
|
44
|
-
): CollectionCustomView<any>[] {
|
|
45
|
-
if (!customViews) return [];
|
|
46
|
-
const resolved: CollectionCustomView<any>[] = [];
|
|
47
|
-
const seen = new Set<string>();
|
|
48
|
-
for (const entry of customViews) {
|
|
49
|
-
const view = typeof entry === "string"
|
|
50
|
-
? contextCollectionViews?.find((candidate) => candidate.key === entry)
|
|
51
|
-
: entry;
|
|
52
|
-
// A custom view keyed "table" would shadow a built-in in the switcher
|
|
53
|
-
// and be unreachable in the render chain, which checks built-ins first.
|
|
54
|
-
if (!view || VIEW_MODES.includes(view.key) || seen.has(view.key)) continue;
|
|
55
|
-
seen.add(view.key);
|
|
56
|
-
resolved.push(view);
|
|
57
|
-
}
|
|
58
|
-
return resolved;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export function resolveEntityAction<M extends Record<string, unknown>>(
|
|
62
|
-
entityAction: string | EntityAction<M>,
|
|
63
|
-
contextEntityActions?: EntityAction<M>[]
|
|
64
|
-
): EntityAction<M> | undefined {
|
|
65
|
-
if (typeof entityAction === "string") {
|
|
66
|
-
return contextEntityActions?.find((entry) => entry.key === entityAction);
|
|
67
|
-
} else {
|
|
68
|
-
return entityAction;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function resolvedSelectedEntityView<M extends Record<string, unknown>>(
|
|
73
|
-
customViews: (string | EntityCustomView<M>)[] | undefined,
|
|
74
|
-
customizationController: CustomizationController,
|
|
75
|
-
selectedTab?: string,
|
|
76
|
-
_canEdit?: boolean
|
|
77
|
-
) {
|
|
78
|
-
const resolvedEntityViews = customViews
|
|
79
|
-
? customViews
|
|
80
|
-
.map((e) => resolveEntityView(e, (customizationController as { entityViews?: EntityCustomView[] }).entityViews))
|
|
81
|
-
.filter(Boolean)
|
|
82
|
-
.filter((e) => (e as EntityCustomView).key !== "__rebase_history") as EntityCustomView[]
|
|
83
|
-
: [];
|
|
84
|
-
|
|
85
|
-
const selectedEntityView = resolvedEntityViews.find((e) => e.key === selectedTab);
|
|
86
|
-
const selectedSecondaryForm =
|
|
87
|
-
customViews &&
|
|
88
|
-
resolvedEntityViews
|
|
89
|
-
.filter((e) => e.includeActions)
|
|
90
|
-
.find((e) => e.key === selectedTab);
|
|
91
|
-
return {
|
|
92
|
-
resolvedEntityViews,
|
|
93
|
-
selectedEntityView,
|
|
94
|
-
selectedSecondaryForm
|
|
95
|
-
};
|
|
96
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared tab value constants used by EditViewBinding and DetailViewBinding.
|
|
3
|
-
*/
|
|
4
|
-
export const MAIN_TAB_VALUE = "__main_##Q$SC^#S6";
|
|
5
|
-
export const JSON_TAB_VALUE = "__json";
|
|
6
|
-
export const HISTORY_TAB_VALUE = "__rebase_history";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* The tab row belongs to the header band above the record, not to the record
|
|
10
|
-
* itself, so it carries the same surface the identity bar over it and the form
|
|
11
|
-
* rail beside it carry. Against that, the active tab takes the record's own
|
|
12
|
-
* white and reads as connected to what it opens; on a white row it had to be
|
|
13
|
-
* the tinted one, which is the relationship backwards.
|
|
14
|
-
*/
|
|
15
|
-
export const ENTITY_VIEW_TAB_BAR_CLASS = "bg-surface-50 dark:bg-surface-900";
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Every tab in that row, a custom `tabComponent` included.
|
|
19
|
-
*
|
|
20
|
-
* `h-full` over the variant's `h-9`: the row is 40px and the tab 36px, so a
|
|
21
|
-
* centred tab floated ~2px clear of the row's bottom border and the active
|
|
22
|
-
* tab's underline stopped short of the record it opens. Paired with
|
|
23
|
-
* `items-stretch` on the Tabs root, which the variant leaves centred.
|
|
24
|
-
*/
|
|
25
|
-
export const ENTITY_VIEW_TAB_CLASS = "h-full data-[state=active]:bg-white dark:data-[state=active]:bg-surface-800";
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Added on top for the tabs this row labels itself — a custom `tabComponent`
|
|
29
|
-
* sizes its own contents. The main tab was the only one rendered without it,
|
|
30
|
-
* and so the only one left at the boxy variant's `text-xs` while its
|
|
31
|
-
* neighbours sat at `text-sm`.
|
|
32
|
-
*/
|
|
33
|
-
export const ENTITY_VIEW_TAB_LABEL_CLASS = "text-sm min-w-[90px]";
|