@rebasepro/cms 0.17.3 → 0.18.1
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
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import type { Properties } from "@rebasepro/types";
|
|
2
|
-
|
|
3
|
-
import React, { useState, useCallback } from "react";
|
|
4
|
-
import { useAuthController, useLargeLayout, useTranslation, useSlot } from "@rebasepro/app";
|
|
5
|
-
import { CollectionActionsProps, EntityTableController, SelectionController, AdminCollection, ViewMode } from "@rebasepro/cms-types";
|
|
6
|
-
import { ErrorBoundary, iconSize } from "@rebasepro/ui";
|
|
7
|
-
import { Badge, Button, cls, FilterIcon, IconButton, Skeleton, Tooltip, XIcon } from "@rebasepro/ui";
|
|
8
|
-
import { ClearFilterSortButton } from "../ClearFilterSortButton";
|
|
9
|
-
import { FiltersDialog } from "./FiltersDialog";
|
|
10
|
-
import { FilterPresetsButton } from "./FilterPresetsButton";
|
|
11
|
-
import { SortButton } from "./SortButton";
|
|
12
|
-
import { toArray } from "@rebasepro/utils";
|
|
13
|
-
import { useNavigate } from "react-router";
|
|
14
|
-
import { useUrlController } from "../../hooks/navigation/contexts/UrlContext";
|
|
15
|
-
import { useAdminContext } from "../../hooks/useAdminContext";
|
|
16
|
-
import { withViewMode } from "../../util/view_mode";
|
|
17
|
-
import { useSplitView } from "./SplitViewContext";
|
|
18
|
-
|
|
19
|
-
export type CollectionViewStartActionsProps<M extends Record<string, unknown>> = {
|
|
20
|
-
collection: AdminCollection<M>;
|
|
21
|
-
path: string;
|
|
22
|
-
relativePath: string;
|
|
23
|
-
parentCollectionSlugs: string[], parentEntityIds: string[];
|
|
24
|
-
selectionController: SelectionController<M>;
|
|
25
|
-
tableController: EntityTableController<M>;
|
|
26
|
-
collectionEntitiesCount?: number;
|
|
27
|
-
/**
|
|
28
|
-
* Number of records the current filters and search resolve to, rendered at
|
|
29
|
-
* the end of this group.
|
|
30
|
-
* - `undefined`: not applicable
|
|
31
|
-
* - `null`: still counting
|
|
32
|
-
* - number: the count
|
|
33
|
-
*/
|
|
34
|
-
entitiesCount?: number | null;
|
|
35
|
-
/**
|
|
36
|
-
* Resolved properties from the collection for the filters dialog
|
|
37
|
-
*/
|
|
38
|
-
resolvedProperties?: Properties;
|
|
39
|
-
/**
|
|
40
|
-
* Which view is being displayed. Decides whether the sort control is
|
|
41
|
-
* offered — see `sortButton`.
|
|
42
|
-
*/
|
|
43
|
-
viewMode?: ViewMode;
|
|
44
|
-
compact?: boolean;
|
|
45
|
-
openNewDocument: (defaultValues?: Record<string, unknown>) => void;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function CollectionViewStartActions<M extends Record<string, unknown>>({
|
|
49
|
-
collection,
|
|
50
|
-
relativePath,
|
|
51
|
-
parentCollectionSlugs, parentEntityIds,
|
|
52
|
-
path,
|
|
53
|
-
selectionController,
|
|
54
|
-
tableController,
|
|
55
|
-
collectionEntitiesCount,
|
|
56
|
-
entitiesCount,
|
|
57
|
-
resolvedProperties,
|
|
58
|
-
viewMode,
|
|
59
|
-
compact,
|
|
60
|
-
openNewDocument
|
|
61
|
-
}: CollectionViewStartActionsProps<M>) {
|
|
62
|
-
|
|
63
|
-
const context = useAdminContext();
|
|
64
|
-
const largeLayout = useLargeLayout();
|
|
65
|
-
const { t } = useTranslation();
|
|
66
|
-
|
|
67
|
-
const navigate = useNavigate();
|
|
68
|
-
const urlController = useUrlController();
|
|
69
|
-
const splitView = useSplitView();
|
|
70
|
-
|
|
71
|
-
// Filters dialog state
|
|
72
|
-
const [filtersDialogOpen, setFiltersDialogOpen] = useState(false);
|
|
73
|
-
|
|
74
|
-
// Count active filters (excluding force filters)
|
|
75
|
-
const filterValues = tableController.filterValues;
|
|
76
|
-
const fixedFilter = collection.fixedFilter;
|
|
77
|
-
const activeFilterCount = filterValues
|
|
78
|
-
? Object.keys(filterValues).filter(key => !fixedFilter || !(key in fixedFilter)).length
|
|
79
|
-
: 0;
|
|
80
|
-
|
|
81
|
-
const actionProps: CollectionActionsProps<M> = {
|
|
82
|
-
path,
|
|
83
|
-
relativePath,
|
|
84
|
-
parentCollectionSlugs,
|
|
85
|
-
parentEntityIds,
|
|
86
|
-
collection,
|
|
87
|
-
selectionController,
|
|
88
|
-
context,
|
|
89
|
-
tableController,
|
|
90
|
-
collectionEntitiesCount,
|
|
91
|
-
openNewDocument
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
const handleBackClick = useCallback(() => {
|
|
95
|
-
navigate(withViewMode(urlController.buildUrlCollectionPath(path)));
|
|
96
|
-
}, [navigate, urlController, path]);
|
|
97
|
-
|
|
98
|
-
// In a split view the control that closes the list lives at the leading
|
|
99
|
-
// edge of the record's app bar (`SplitListCloseButton`), not here.
|
|
100
|
-
//
|
|
101
|
-
// Outside one — a compact list with no record open beside it — the only
|
|
102
|
-
// thing this can mean is "leave the record behind".
|
|
103
|
-
const backButton = compact && !splitView?.detailOpen && (
|
|
104
|
-
<Tooltip title={t("close")} key={"close_tooltip"}>
|
|
105
|
-
<IconButton
|
|
106
|
-
size="small"
|
|
107
|
-
onClick={handleBackClick}
|
|
108
|
-
aria-label={t("close")}
|
|
109
|
-
className="mr-1"
|
|
110
|
-
>
|
|
111
|
-
<XIcon size={iconSize.smallest}/>
|
|
112
|
-
</IconButton>
|
|
113
|
-
</Tooltip>
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
// Whether the toolbar is showing icon-only controls. The filters button
|
|
117
|
-
// drops its label — and its icon a size with it — on a narrow layout as
|
|
118
|
-
// well as in the split view, and the sort and clear controls beside it
|
|
119
|
-
// follow: keyed on `compact` alone they stayed 20px next to a 16px filter
|
|
120
|
-
// icon at every width below `largeLayout`.
|
|
121
|
-
const iconOnlyToolbar = !largeLayout || Boolean(compact);
|
|
122
|
-
|
|
123
|
-
const filtersButton = resolvedProperties && tableController.setFilterValues && (
|
|
124
|
-
<Tooltip title={t("filters")}
|
|
125
|
-
key={"filters_tooltip"}>
|
|
126
|
-
<Badge
|
|
127
|
-
color="primary"
|
|
128
|
-
invisible={activeFilterCount === 0}
|
|
129
|
-
>
|
|
130
|
-
{largeLayout && !compact ? (
|
|
131
|
-
<Button
|
|
132
|
-
variant="text"
|
|
133
|
-
size="small"
|
|
134
|
-
onClick={() => setFiltersDialogOpen(true)}
|
|
135
|
-
startIcon={<FilterIcon size={iconSize.small}/>}
|
|
136
|
-
className={cls(activeFilterCount > 0 && "text-primary")}
|
|
137
|
-
>
|
|
138
|
-
{activeFilterCount > 0 ? `(${activeFilterCount})` : t("filters")}
|
|
139
|
-
</Button>
|
|
140
|
-
) : (
|
|
141
|
-
<IconButton
|
|
142
|
-
size={"small"}
|
|
143
|
-
onClick={() => setFiltersDialogOpen(true)}
|
|
144
|
-
className={cls(activeFilterCount > 0 && "text-primary")}
|
|
145
|
-
>
|
|
146
|
-
<FilterIcon size={iconSize.smallest}/>
|
|
147
|
-
</IconButton>
|
|
148
|
-
)}
|
|
149
|
-
</Badge>
|
|
150
|
-
</Tooltip>
|
|
151
|
-
);
|
|
152
|
-
|
|
153
|
-
// Everywhere a `sortBy` means something — which is every view but the
|
|
154
|
-
// board, whose columns are ordered by their own order key and which ignores
|
|
155
|
-
// `sortBy` entirely, so the control would appear to do nothing.
|
|
156
|
-
//
|
|
157
|
-
// Including the table, whose headers were once thought to cover it. They
|
|
158
|
-
// build a multi-key sort (shift-click) and they show its ranks, but they
|
|
159
|
-
// cannot *re-rank* it: promoting the third key above the first means
|
|
160
|
-
// clearing the sort and shift-clicking all three back in the new order.
|
|
161
|
-
// Nor can they remove a middle key without cycling it through descending
|
|
162
|
-
// first. This popover is the only place either is one click, and a table
|
|
163
|
-
// with a three-key sort needs it more than a card grid does, not less.
|
|
164
|
-
const sortButton = resolvedProperties && viewMode !== "kanban" && (
|
|
165
|
-
<SortButton
|
|
166
|
-
key={"sort_button"}
|
|
167
|
-
tableController={tableController}
|
|
168
|
-
properties={resolvedProperties}
|
|
169
|
-
compact={iconOnlyToolbar}
|
|
170
|
-
/>
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
// Not in the split view. The toolbar there is a strip a few hundred pixels
|
|
174
|
-
// wide above the list, and a row of preset chips crowded out the controls
|
|
175
|
-
// that act on what you are looking at. The presets are still one click away
|
|
176
|
-
// inside the filters dialog.
|
|
177
|
-
const filterPresetsButton = !compact && collection.filterPresets?.length ? (
|
|
178
|
-
<FilterPresetsButton
|
|
179
|
-
key={"filter_presets"}
|
|
180
|
-
filterPresets={collection.filterPresets}
|
|
181
|
-
tableController={tableController}
|
|
182
|
-
compact={compact}
|
|
183
|
-
/>
|
|
184
|
-
) : null;
|
|
185
|
-
|
|
186
|
-
// The count closes the group the filter, sort and preset controls open: it
|
|
187
|
-
// is what they resolve to. It used to live in the breadcrumb trail, which
|
|
188
|
-
// the app bar owns — and a collection rendered without an app bar has no
|
|
189
|
-
// breadcrumbs, so the number simply disappeared.
|
|
190
|
-
//
|
|
191
|
-
// Hidden on the same layouts the trail was (`hidden lg:block` there) and in
|
|
192
|
-
// the split view, where this toolbar is a few hundred pixels wide and
|
|
193
|
-
// scrolls: a passive readout is the first thing that should give up its
|
|
194
|
-
// room to the controls.
|
|
195
|
-
const countBadge = !iconOnlyToolbar && entitiesCount !== undefined ? (
|
|
196
|
-
<Tooltip title={t("records_in_view")} key={"entities_count"}>
|
|
197
|
-
{entitiesCount === null
|
|
198
|
-
? <Skeleton className={"w-8 h-4 rounded-md mx-1"}/>
|
|
199
|
-
: <span
|
|
200
|
-
className={"mx-1 text-xs text-surface-accent-600 dark:text-surface-accent-400 bg-surface-100 dark:bg-surface-800 px-1.5 py-0.5 rounded tabular-nums"}>
|
|
201
|
-
{entitiesCount.toLocaleString()}
|
|
202
|
-
</span>}
|
|
203
|
-
</Tooltip>
|
|
204
|
-
) : null;
|
|
205
|
-
|
|
206
|
-
const actions: React.ReactNode[] = [
|
|
207
|
-
backButton,
|
|
208
|
-
filtersButton,
|
|
209
|
-
sortButton,
|
|
210
|
-
<ClearFilterSortButton
|
|
211
|
-
key={"clear_filter"}
|
|
212
|
-
tableController={tableController}
|
|
213
|
-
compact={iconOnlyToolbar}
|
|
214
|
-
enabled={!collection.fixedFilter}/>,
|
|
215
|
-
filterPresetsButton,
|
|
216
|
-
countBadge
|
|
217
|
-
];
|
|
218
|
-
|
|
219
|
-
const pluginActionsStart = useSlot("collection.actions.start", actionProps);
|
|
220
|
-
|
|
221
|
-
return (
|
|
222
|
-
<>
|
|
223
|
-
{actions}
|
|
224
|
-
{pluginActionsStart}
|
|
225
|
-
|
|
226
|
-
{/* Filters Dialog */}
|
|
227
|
-
{resolvedProperties && tableController.setFilterValues && (
|
|
228
|
-
<FiltersDialog
|
|
229
|
-
open={filtersDialogOpen}
|
|
230
|
-
onOpenChange={setFiltersDialogOpen}
|
|
231
|
-
properties={resolvedProperties}
|
|
232
|
-
filterValues={tableController.filterValues}
|
|
233
|
-
setFilterValues={(filterValues) => tableController.setFilterValues?.(filterValues ?? {})}
|
|
234
|
-
fixedFilter={collection.fixedFilter}
|
|
235
|
-
/>
|
|
236
|
-
)}
|
|
237
|
-
</>
|
|
238
|
-
);
|
|
239
|
-
}
|
|
240
|
-
|
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import React, { useMemo } from "react";
|
|
3
|
-
import { Entity } from "@rebasepro/types";
|
|
4
|
-
import { CollectionSize, AdminCollection } from "@rebasepro/cms-types";
|
|
5
|
-
import {
|
|
6
|
-
Card,
|
|
7
|
-
Checkbox,
|
|
8
|
-
Chip,
|
|
9
|
-
cls,
|
|
10
|
-
Typography
|
|
11
|
-
} from "@rebasepro/ui";
|
|
12
|
-
import { PropertyPreview } from "../../preview";
|
|
13
|
-
import {
|
|
14
|
-
useAuthController,
|
|
15
|
-
useCustomizationController
|
|
16
|
-
} from "@rebasepro/app";
|
|
17
|
-
import { useAnalyticsController } from "@rebasepro/app";
|
|
18
|
-
import { IconForView } from "@rebasepro/app";
|
|
19
|
-
import { useCollectionSlotKeys, useEntitySlots } from "./usePreviewSlots";
|
|
20
|
-
import { Highlighted } from "./SearchHighlight";
|
|
21
|
-
import { useSearchExplanation, MatchExplanation, fieldLabel } from "./SearchExplanation";
|
|
22
|
-
import { SlotValue, TagChips } from "./SlotValue";
|
|
23
|
-
|
|
24
|
-
export type EntityCardBindingProps<M extends Record<string, unknown> = Record<string, unknown>> = {
|
|
25
|
-
/** The active search, so a card can mark the hit and say where it was. */
|
|
26
|
-
searchString?: string;
|
|
27
|
-
entity: Entity<M>;
|
|
28
|
-
collection: AdminCollection<M>;
|
|
29
|
-
onClick?: (entity: Entity<M>) => void;
|
|
30
|
-
selected?: boolean;
|
|
31
|
-
highlighted?: boolean;
|
|
32
|
-
onSelectionChange?: (entity: Entity<M>, selected: boolean) => void;
|
|
33
|
-
selectionEnabled?: boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Size of the card - affects checkbox styling
|
|
36
|
-
*/
|
|
37
|
-
size?: CollectionSize;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Card component for displaying a entity in a grid view.
|
|
42
|
-
* Shows thumbnail, title, and preview properties via the shared slot system.
|
|
43
|
-
*/
|
|
44
|
-
export function EntityCardBinding<M extends Record<string, unknown> = Record<string, unknown>>({
|
|
45
|
-
entity,
|
|
46
|
-
collection,
|
|
47
|
-
onClick,
|
|
48
|
-
selected,
|
|
49
|
-
highlighted,
|
|
50
|
-
onSelectionChange,
|
|
51
|
-
selectionEnabled,
|
|
52
|
-
size = "m",
|
|
53
|
-
searchString
|
|
54
|
-
}: EntityCardBindingProps<M>) {
|
|
55
|
-
const authController = useAuthController();
|
|
56
|
-
const analyticsController = useAnalyticsController();
|
|
57
|
-
const customizationController = useCustomizationController();
|
|
58
|
-
|
|
59
|
-
const slotKeys = useCollectionSlotKeys(
|
|
60
|
-
collection as AdminCollection<Record<string, unknown>>,
|
|
61
|
-
authController,
|
|
62
|
-
customizationController.propertyConfigs
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
const slots = useEntitySlots(
|
|
66
|
-
entity as Entity<Record<string, unknown>>,
|
|
67
|
-
collection as AdminCollection<Record<string, unknown>>,
|
|
68
|
-
slotKeys
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
// Same explanation the list shows, so a reader switching view modes does
|
|
72
|
-
// not lose the reason a card is in front of them.
|
|
73
|
-
const { terms, offSlot } = useSearchExplanation(
|
|
74
|
-
entity,
|
|
75
|
-
collection.properties as Record<string, unknown>,
|
|
76
|
-
[slotKeys.titleKey, slotKeys.subtitleKey],
|
|
77
|
-
searchString
|
|
78
|
-
);
|
|
79
|
-
|
|
80
|
-
const handleClick = (e?: React.MouseEvent) => {
|
|
81
|
-
// Cmd+click (Mac) or Ctrl+click (Windows) toggles selection
|
|
82
|
-
if (e && (e.metaKey || e.ctrlKey) && selectionEnabled) {
|
|
83
|
-
e.preventDefault();
|
|
84
|
-
onSelectionChange?.(entity, !selected);
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
if (onClick) {
|
|
88
|
-
analyticsController.onAnalyticsEvent?.("card_view_entity_click", {
|
|
89
|
-
path: entity.path,
|
|
90
|
-
entityId: entity.id
|
|
91
|
-
});
|
|
92
|
-
onClick(entity);
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
const handleCheckboxClick = (e: React.MouseEvent) => {
|
|
97
|
-
e.stopPropagation();
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
const handleSelectionChange = (checked: boolean) => {
|
|
101
|
-
onSelectionChange?.(entity, checked);
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
return (
|
|
105
|
-
<Card
|
|
106
|
-
className={cls(
|
|
107
|
-
"cursor-pointer overflow-hidden group relative",
|
|
108
|
-
"transition-all duration-200",
|
|
109
|
-
"hover:shadow-lg hover:-translate-y-0.5",
|
|
110
|
-
selected && "ring-2 ring-primary bg-surface-accent-50 dark:bg-surface-accent-900",
|
|
111
|
-
highlighted && !selected && "ring-2 ring-primary ring-opacity-50 bg-surface-accent-50/50 dark:bg-surface-accent-900"
|
|
112
|
-
)}
|
|
113
|
-
onClick={handleClick}
|
|
114
|
-
>
|
|
115
|
-
{/* Thumbnail area — image slot */}
|
|
116
|
-
<div className="aspect-[4/3] relative overflow-hidden bg-surface-100 dark:bg-surface-900">
|
|
117
|
-
{slots.image ? (
|
|
118
|
-
<div className="w-full h-full">
|
|
119
|
-
<SlotValue slot={slots.image} size="medium" fill={true}/>
|
|
120
|
-
</div>
|
|
121
|
-
) : (
|
|
122
|
-
<div className="w-full h-full flex items-center justify-center">
|
|
123
|
-
<IconForView
|
|
124
|
-
collectionOrView={collection}
|
|
125
|
-
color="disabled"
|
|
126
|
-
/>
|
|
127
|
-
</div>
|
|
128
|
-
)}
|
|
129
|
-
|
|
130
|
-
{/* Hover overlay */}
|
|
131
|
-
<div className={cls(
|
|
132
|
-
"absolute inset-0 bg-black/0 group-hover:bg-black/10",
|
|
133
|
-
"transition-colors duration-200"
|
|
134
|
-
)}/>
|
|
135
|
-
|
|
136
|
-
{/* Selection checkbox */}
|
|
137
|
-
{selectionEnabled && (
|
|
138
|
-
<div
|
|
139
|
-
className={cls(
|
|
140
|
-
"absolute",
|
|
141
|
-
size === "xs" || size === "s" ? "top-1 left-1" : "top-2 left-2"
|
|
142
|
-
)}
|
|
143
|
-
onClick={handleCheckboxClick}
|
|
144
|
-
>
|
|
145
|
-
<Checkbox
|
|
146
|
-
checked={selected ?? false}
|
|
147
|
-
onCheckedChange={handleSelectionChange}
|
|
148
|
-
size={size === "xs" ? "smallest" : "small"}
|
|
149
|
-
/>
|
|
150
|
-
</div>
|
|
151
|
-
)}
|
|
152
|
-
|
|
153
|
-
</div>
|
|
154
|
-
|
|
155
|
-
{/* Content area */}
|
|
156
|
-
<div className="p-3">
|
|
157
|
-
{/* No id line here.
|
|
158
|
-
A card used to print the row id above its title, always —
|
|
159
|
-
a truncated uuid (`isId: "uuid"` is the default) too short
|
|
160
|
-
to copy and not what a card is read for. The list row and
|
|
161
|
-
the board card show an id only when nothing else names the
|
|
162
|
-
record; the card was the one surface that showed it even
|
|
163
|
-
when it had a title, and the id is still the fallback below
|
|
164
|
-
for a record that has none. The table's ID column, which is
|
|
165
|
-
full width, copyable and governed by
|
|
166
|
-
`hideIdFromCollection`, is where an id is actually read. */}
|
|
167
|
-
|
|
168
|
-
{/* Title slot */}
|
|
169
|
-
<div className="truncate my-1 text-sm font-medium min-h-[20px]">
|
|
170
|
-
{slots.title ? (
|
|
171
|
-
terms.length > 0 && typeof slots.title.value === "string"
|
|
172
|
-
? <Highlighted text={slots.title.value} terms={terms}/>
|
|
173
|
-
: <SlotValue slot={slots.title} size="small"/>
|
|
174
|
-
) : (
|
|
175
|
-
<Typography variant="body2" className="text-surface-500">
|
|
176
|
-
{entity.id}
|
|
177
|
-
</Typography>
|
|
178
|
-
)}
|
|
179
|
-
</div>
|
|
180
|
-
|
|
181
|
-
{/* Subtitle slot — or, while searching, where the hit was. A
|
|
182
|
-
card whose match is in a field it does not show looks as
|
|
183
|
-
arbitrary as a list row does. */}
|
|
184
|
-
{offSlot ? (
|
|
185
|
-
<MatchExplanation
|
|
186
|
-
match={offSlot}
|
|
187
|
-
label={fieldLabel(collection.properties as Record<string, unknown>, offSlot.field)}
|
|
188
|
-
/>
|
|
189
|
-
) : slots.subtitle && (
|
|
190
|
-
<div className="line-clamp-3 [&_div]:line-clamp-3 text-xs text-surface-600 dark:text-surface-400 [&_p]:!my-1 [&_p:first-child]:!mt-0 [&_p:last-child]:!mb-0">
|
|
191
|
-
{terms.length > 0 && typeof slots.subtitle.value === "string"
|
|
192
|
-
? <Highlighted text={slots.subtitle.value} terms={terms}/>
|
|
193
|
-
: <SlotValue slot={slots.subtitle} size="small"/>}
|
|
194
|
-
</div>
|
|
195
|
-
)}
|
|
196
|
-
|
|
197
|
-
{/* Relation chips slot */}
|
|
198
|
-
{slots.relations.length > 0 && (
|
|
199
|
-
<div className="flex items-center gap-1 mt-1 overflow-hidden max-w-full flex-wrap">
|
|
200
|
-
{slots.relations.map((rel) => (
|
|
201
|
-
rel.items.map((item) => (
|
|
202
|
-
<Chip
|
|
203
|
-
key={`${rel.propertyKey}-${item.id}`}
|
|
204
|
-
size="smallest"
|
|
205
|
-
colorScheme={rel.colorScheme}
|
|
206
|
-
className="!text-[10px] !leading-tight !py-0 shrink-0 max-w-[100px] truncate"
|
|
207
|
-
>
|
|
208
|
-
{item.displayName}
|
|
209
|
-
</Chip>
|
|
210
|
-
))
|
|
211
|
-
))}
|
|
212
|
-
{slots.relations.some(r => r.totalCount > r.items.length) && (
|
|
213
|
-
<span className="text-[10px] text-surface-400 dark:text-surface-500 shrink-0">
|
|
214
|
-
+{slots.relations.reduce((acc, r) => acc + Math.max(0, r.totalCount - r.items.length), 0)}
|
|
215
|
-
</span>
|
|
216
|
-
)}
|
|
217
|
-
</div>
|
|
218
|
-
)}
|
|
219
|
-
|
|
220
|
-
{/* Status + tags slot — "free chips beside the status" */}
|
|
221
|
-
{(slots.status || slots.tags) && (
|
|
222
|
-
<div className="flex items-center gap-1 mt-1 flex-wrap">
|
|
223
|
-
{slots.status && <SlotValue slot={slots.status} size="small"/>}
|
|
224
|
-
{slots.tags && <TagChips slot={slots.tags}/>}
|
|
225
|
-
</div>
|
|
226
|
-
)}
|
|
227
|
-
|
|
228
|
-
{/* Date slot — a card is a list row with the image on top, and the
|
|
229
|
-
row has always shown it. It was the one slot the card resolved
|
|
230
|
-
and never rendered. */}
|
|
231
|
-
{slots.date && (
|
|
232
|
-
<div className="mt-1 text-[10px] text-surface-500 dark:text-surface-400">
|
|
233
|
-
{slots.date.formatted}
|
|
234
|
-
</div>
|
|
235
|
-
)}
|
|
236
|
-
</div>
|
|
237
|
-
</Card>
|
|
238
|
-
);
|
|
239
|
-
}
|