@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
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import React, { useEffect } from "react";
|
|
2
|
-
|
|
3
|
-
import { renderSkeletonImageThumbnail } from "../property_previews/SkeletonPropertyComponent";
|
|
4
|
-
import { UrlComponentPreview } from "./UrlComponentPreview";
|
|
5
|
-
import { ErrorView, useStorageSource, useStorageSources, useTranslation } from "@rebasepro/app";
|
|
6
|
-
import { resolveStorageSource } from "@rebasepro/common";
|
|
7
|
-
import { DownloadConfig, FileType } from "@rebasepro/types";
|
|
8
|
-
import type { PreviewSize } from "../../types/components/PropertyPreviewProps";
|
|
9
|
-
import { Skeleton } from "@rebasepro/ui";
|
|
10
|
-
type StorageThumbnailProps = {
|
|
11
|
-
storagePathOrDownloadUrl: string;
|
|
12
|
-
storeUrl: boolean;
|
|
13
|
-
size: PreviewSize;
|
|
14
|
-
interactive?: boolean;
|
|
15
|
-
fill?: boolean;
|
|
16
|
-
/** Key of the storage source backing this property (`StorageConfig.storageSource`). */
|
|
17
|
-
storageSourceKey?: string;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @group Preview components
|
|
22
|
-
*/
|
|
23
|
-
export const StorageThumbnail = React.memo<StorageThumbnailProps>(StorageThumbnailInternal, areEqual) as React.FunctionComponent<StorageThumbnailProps>;
|
|
24
|
-
|
|
25
|
-
function areEqual(prevProps: StorageThumbnailProps, nextProps: StorageThumbnailProps) {
|
|
26
|
-
return prevProps.size === nextProps.size &&
|
|
27
|
-
prevProps.storagePathOrDownloadUrl === nextProps.storagePathOrDownloadUrl &&
|
|
28
|
-
prevProps.storeUrl === nextProps.storeUrl &&
|
|
29
|
-
prevProps.interactive === nextProps.interactive &&
|
|
30
|
-
prevProps.fill === nextProps.fill &&
|
|
31
|
-
prevProps.storageSourceKey === nextProps.storageSourceKey;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const URL_CACHE: Record<string, DownloadConfig> = {};
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* The signed-URL request currently in flight for a given cache key.
|
|
38
|
-
*
|
|
39
|
-
* A collection view draws one thumbnail per row and rows share images far more
|
|
40
|
-
* often than not — the demo's 200 blog posts are illustrated by 20 hero images.
|
|
41
|
-
* Every one of those thumbnails mounts in the same tick, and each used to call
|
|
42
|
-
* `getSignedUrl` on its own: {@link URL_CACHE} is only written when a response
|
|
43
|
-
* *lands*, so it is still empty while the burst goes out and dedupes nothing.
|
|
44
|
-
* The result was five or more identical requests per distinct file, and minting
|
|
45
|
-
* a download token is a real request — `/api/storage/metadata/<path>` — against
|
|
46
|
-
* a rate-limited surface. One page view was enough to exhaust the budget and
|
|
47
|
-
* every thumbnail on the screen then failed with a 429.
|
|
48
|
-
*
|
|
49
|
-
* Sharing the promise collapses that burst to one request per file. It
|
|
50
|
-
* deliberately does not extend how long anything is cached: `DownloadConfig.url`
|
|
51
|
-
* is temporal, so a later mount still refetches exactly as it did before.
|
|
52
|
-
*/
|
|
53
|
-
const IN_FLIGHT = new Map<string, Promise<DownloadConfig>>();
|
|
54
|
-
|
|
55
|
-
function getSignedUrlOnce(
|
|
56
|
-
storage: { getSignedUrl: (path: string) => Promise<DownloadConfig> },
|
|
57
|
-
path: string,
|
|
58
|
-
cacheKey: string
|
|
59
|
-
): Promise<DownloadConfig> {
|
|
60
|
-
const existing = IN_FLIGHT.get(cacheKey);
|
|
61
|
-
if (existing) return existing;
|
|
62
|
-
|
|
63
|
-
const request = storage.getSignedUrl(path).finally(() => {
|
|
64
|
-
IN_FLIGHT.delete(cacheKey);
|
|
65
|
-
});
|
|
66
|
-
IN_FLIGHT.set(cacheKey, request);
|
|
67
|
-
return request;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export function StorageThumbnailInternal({
|
|
71
|
-
storeUrl,
|
|
72
|
-
interactive,
|
|
73
|
-
storagePathOrDownloadUrl,
|
|
74
|
-
size,
|
|
75
|
-
fill,
|
|
76
|
-
storageSourceKey
|
|
77
|
-
}: StorageThumbnailProps) {
|
|
78
|
-
|
|
79
|
-
const { t } = useTranslation();
|
|
80
|
-
const [error, setError] = React.useState<Error | undefined>(undefined);
|
|
81
|
-
const defaultStorage = useStorageSource();
|
|
82
|
-
const storageSources = useStorageSources();
|
|
83
|
-
// Resolve the per-property backend so previews of `storeUrl: false`
|
|
84
|
-
// properties pointing at a named source hit the right backend.
|
|
85
|
-
const storage = resolveStorageSource({
|
|
86
|
-
sourceKey: storageSourceKey,
|
|
87
|
-
sources: storageSources.sources,
|
|
88
|
-
defaultSource: defaultStorage
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
// Cache key is namespaced by source so the same path on two backends
|
|
92
|
-
// does not collide.
|
|
93
|
-
const cacheKey = `${storageSourceKey ?? ""}::${storagePathOrDownloadUrl}`;
|
|
94
|
-
|
|
95
|
-
const [downloadConfig, setDownloadConfig] = React.useState<DownloadConfig>(URL_CACHE[cacheKey]);
|
|
96
|
-
|
|
97
|
-
useEffect(() => {
|
|
98
|
-
if (!storagePathOrDownloadUrl)
|
|
99
|
-
return;
|
|
100
|
-
let unmounted = false;
|
|
101
|
-
getSignedUrlOnce(storage, storagePathOrDownloadUrl, cacheKey)
|
|
102
|
-
.then(function (downloadConfig) {
|
|
103
|
-
if (!unmounted) {
|
|
104
|
-
setDownloadConfig(downloadConfig);
|
|
105
|
-
URL_CACHE[cacheKey] = downloadConfig;
|
|
106
|
-
}
|
|
107
|
-
}).catch(setError);
|
|
108
|
-
return () => {
|
|
109
|
-
unmounted = true;
|
|
110
|
-
};
|
|
111
|
-
}, [storagePathOrDownloadUrl, cacheKey]);
|
|
112
|
-
|
|
113
|
-
if (!storagePathOrDownloadUrl) return null;
|
|
114
|
-
|
|
115
|
-
const filetype = downloadConfig?.metadata ? getFiletype(downloadConfig?.metadata.contentType) : undefined;
|
|
116
|
-
const previewType = filetype?.startsWith("image")
|
|
117
|
-
? "image"
|
|
118
|
-
: (filetype?.startsWith("video")
|
|
119
|
-
? "video"
|
|
120
|
-
: (filetype?.startsWith("audio") ? "audio" : "file"));
|
|
121
|
-
|
|
122
|
-
if (downloadConfig?.fileNotFound)
|
|
123
|
-
// `file_not_found` is translated into seven locales and this rendered
|
|
124
|
-
// the English literal, so a German panel said "File not found".
|
|
125
|
-
return <ErrorView error={t("file_not_found")}></ErrorView>
|
|
126
|
-
|
|
127
|
-
return downloadConfig?.url
|
|
128
|
-
? <UrlComponentPreview previewType={previewType}
|
|
129
|
-
url={downloadConfig.url}
|
|
130
|
-
interactive={interactive}
|
|
131
|
-
size={size}
|
|
132
|
-
fill={fill}
|
|
133
|
-
hint={storagePathOrDownloadUrl}/>
|
|
134
|
-
: fill
|
|
135
|
-
? <Skeleton className="w-full h-full"/>
|
|
136
|
-
: renderSkeletonImageThumbnail(size);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function getFiletype(input: string): FileType {
|
|
140
|
-
if (input.startsWith("image")) return "image/*";
|
|
141
|
-
else if (input.startsWith("video")) return "video/*";
|
|
142
|
-
else if (input.startsWith("audio")) return "audio/*";
|
|
143
|
-
else if (input.startsWith("application")) return "application/*";
|
|
144
|
-
else if (input.startsWith("text")) return "text/*";
|
|
145
|
-
else if (input.startsWith("font")) return "font/*";
|
|
146
|
-
else return input;
|
|
147
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import React, { useMemo } from "react";
|
|
2
|
-
|
|
3
|
-
import { ImagePreview } from "./ImagePreview";
|
|
4
|
-
import { PreviewType } from "@rebasepro/cms-types";
|
|
5
|
-
import type { PreviewSize } from "../../types/components/PropertyPreviewProps";
|
|
6
|
-
import { cls, ExternalLinkIcon, FileTextIcon, Tooltip, Typography } from "@rebasepro/ui";
|
|
7
|
-
import { EmptyValue } from "./EmptyValue";
|
|
8
|
-
import { getThumbnailMeasure, sanitizeUrl } from "../util";
|
|
9
|
-
|
|
10
|
-
export { sanitizeUrl };
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @group Preview components
|
|
14
|
-
*/
|
|
15
|
-
export function UrlComponentPreview({
|
|
16
|
-
url,
|
|
17
|
-
previewType,
|
|
18
|
-
size,
|
|
19
|
-
hint,
|
|
20
|
-
interactive = true,
|
|
21
|
-
fill
|
|
22
|
-
}: {
|
|
23
|
-
url: string,
|
|
24
|
-
previewType?: PreviewType,
|
|
25
|
-
size: PreviewSize,
|
|
26
|
-
hint?: string,
|
|
27
|
-
// for video controls
|
|
28
|
-
interactive?: boolean,
|
|
29
|
-
fill?: boolean
|
|
30
|
-
}): React.ReactElement {
|
|
31
|
-
|
|
32
|
-
if (!previewType) {
|
|
33
|
-
if (!url || !url.trim()) return <EmptyValue/>;
|
|
34
|
-
return (
|
|
35
|
-
<a className="flex gap-4 break-words items-center font-medium text-primary visited:text-primary dark:visited:text-primary dark:text-primary"
|
|
36
|
-
href={sanitizeUrl(url)}
|
|
37
|
-
rel="noopener noreferrer"
|
|
38
|
-
onMouseDown={(e: React.MouseEvent) => {
|
|
39
|
-
e.preventDefault();
|
|
40
|
-
}}
|
|
41
|
-
target="_blank">
|
|
42
|
-
<ExternalLinkIcon/>
|
|
43
|
-
{url}
|
|
44
|
-
</a>
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (previewType === "image") {
|
|
49
|
-
return <ImagePreview url={url}
|
|
50
|
-
size={size}
|
|
51
|
-
fill={fill}/>;
|
|
52
|
-
} else if (previewType === "audio") {
|
|
53
|
-
return <audio controls
|
|
54
|
-
className={"max-w-100%"}
|
|
55
|
-
src={url}>
|
|
56
|
-
Your browser does not support the
|
|
57
|
-
<code>audio</code> element.
|
|
58
|
-
</audio>;
|
|
59
|
-
} else if (previewType === "video") {
|
|
60
|
-
return <VideoPreview size={size} src={url} interactive={interactive}/>;
|
|
61
|
-
} else {
|
|
62
|
-
return (
|
|
63
|
-
<Tooltip title={hint}>
|
|
64
|
-
<a
|
|
65
|
-
href={sanitizeUrl(url)}
|
|
66
|
-
rel="noopener noreferrer"
|
|
67
|
-
target="_blank"
|
|
68
|
-
onClick={(e) => e.stopPropagation()}
|
|
69
|
-
className="flex flex-col items-center justify-center"
|
|
70
|
-
style={{
|
|
71
|
-
width: getThumbnailMeasure(size),
|
|
72
|
-
height: getThumbnailMeasure(size)
|
|
73
|
-
}}>
|
|
74
|
-
<FileTextIcon className="text-surface-700 dark:text-surface-300"/>
|
|
75
|
-
{hint && <Typography
|
|
76
|
-
className="max-w-full truncate rtl text-left"
|
|
77
|
-
variant={"caption"}>{hint}</Typography>}
|
|
78
|
-
</a>
|
|
79
|
-
</Tooltip>
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function VideoPreview({
|
|
85
|
-
size,
|
|
86
|
-
src,
|
|
87
|
-
interactive
|
|
88
|
-
}: { size: PreviewSize, src: string, interactive: boolean }) {
|
|
89
|
-
|
|
90
|
-
const imageSize = useMemo(() => {
|
|
91
|
-
if (size === "small")
|
|
92
|
-
return "140px";
|
|
93
|
-
else if (size === "medium")
|
|
94
|
-
return "240px";
|
|
95
|
-
else if (size === "large")
|
|
96
|
-
return "100%";
|
|
97
|
-
else throw new Error("Invalid size");
|
|
98
|
-
}, [size]);
|
|
99
|
-
|
|
100
|
-
const videoProps = {
|
|
101
|
-
controls: interactive
|
|
102
|
-
};
|
|
103
|
-
return <video
|
|
104
|
-
style={{
|
|
105
|
-
position: "relative",
|
|
106
|
-
objectFit: "cover",
|
|
107
|
-
width: imageSize,
|
|
108
|
-
minWidth: "140px",
|
|
109
|
-
// height: imageSize,
|
|
110
|
-
maxHeight: "100%"
|
|
111
|
-
}}
|
|
112
|
-
{...videoProps}
|
|
113
|
-
className={cls("max-w-100% rounded-xs", { "pointer-events-none": !interactive })}>
|
|
114
|
-
<source src={src}/>
|
|
115
|
-
</video>;
|
|
116
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { PropertyPreviewProps } from "../../types/components/PropertyPreviewProps";
|
|
2
|
-
import type { StringProperty } from "@rebasepro/types";
|
|
3
|
-
import React from "react";
|
|
4
|
-
import { EmptyValue } from "./EmptyValue";
|
|
5
|
-
import { Typography } from "@rebasepro/ui";
|
|
6
|
-
import { getUserLabel, useResolvedUser } from "../../hooks/useResolvedUsers";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Preview component for displaying a user reference value.
|
|
10
|
-
*
|
|
11
|
-
* Resolves the stored auth user id to a name (or email) the same way a
|
|
12
|
-
* relation resolves its target, and falls back to the raw id only while the
|
|
13
|
-
* lookup is in flight or when the user cannot be resolved.
|
|
14
|
-
*
|
|
15
|
-
* @group Preview components
|
|
16
|
-
*/
|
|
17
|
-
export function UserPreview({ value }: PropertyPreviewProps<StringProperty>) {
|
|
18
|
-
const uid = typeof value === "string" && value ? value : undefined;
|
|
19
|
-
const user = useResolvedUser(uid);
|
|
20
|
-
|
|
21
|
-
if (!uid) {
|
|
22
|
-
return <EmptyValue/>;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return <Typography variant={"caption"}
|
|
26
|
-
color={"secondary"}
|
|
27
|
-
className={"truncate"}>
|
|
28
|
-
{user ? getUserLabel(user) : uid}
|
|
29
|
-
</Typography>;
|
|
30
|
-
}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import type { Locale as LocaleKey } from "@rebasepro/cms-types";
|
|
2
|
-
import type { Locale as DateFnsLocale } from "date-fns";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* One date-fns locale, fetched when the admin is actually configured to use it.
|
|
6
|
-
*
|
|
7
|
-
* `DatePreview` used to open with:
|
|
8
|
-
*
|
|
9
|
-
* import * as locales from "date-fns/locale";
|
|
10
|
-
*
|
|
11
|
-
* and then index that namespace with the configured locale. A namespace import
|
|
12
|
-
* of a barrel is a reference to every member of it, so all ~77 locales were
|
|
13
|
-
* bundled — 640 kB, in the entry chunk's static graph, to format dates in the
|
|
14
|
-
* one locale a given deployment has configured (and `undefined`, meaning
|
|
15
|
-
* en-US, for nearly all of them).
|
|
16
|
-
*
|
|
17
|
-
* A map of thunks is written out rather than derived from the locale key,
|
|
18
|
-
* because `import(`date-fns/locale/${name}`)` is not statically analysable:
|
|
19
|
-
* the bundler cannot see which modules it must emit, and the import fails at
|
|
20
|
-
* runtime in a build. Each entry below is its own async chunk, and exactly one
|
|
21
|
-
* of them is ever fetched.
|
|
22
|
-
*
|
|
23
|
-
* `fil` is in the `Locale` union and has no date-fns locale to import; it
|
|
24
|
-
* resolved to `undefined` through the namespace too, so it still does.
|
|
25
|
-
*/
|
|
26
|
-
const dateFnsLocaleLoaders: Partial<Record<LocaleKey, () => Promise<DateFnsLocale>>> = {
|
|
27
|
-
af: () => import("date-fns/locale/af").then(m => m.af),
|
|
28
|
-
ar: () => import("date-fns/locale/ar").then(m => m.ar),
|
|
29
|
-
arDZ: () => import("date-fns/locale/ar-DZ").then(m => m.arDZ),
|
|
30
|
-
arMA: () => import("date-fns/locale/ar-MA").then(m => m.arMA),
|
|
31
|
-
arSA: () => import("date-fns/locale/ar-SA").then(m => m.arSA),
|
|
32
|
-
az: () => import("date-fns/locale/az").then(m => m.az),
|
|
33
|
-
be: () => import("date-fns/locale/be").then(m => m.be),
|
|
34
|
-
bg: () => import("date-fns/locale/bg").then(m => m.bg),
|
|
35
|
-
bn: () => import("date-fns/locale/bn").then(m => m.bn),
|
|
36
|
-
ca: () => import("date-fns/locale/ca").then(m => m.ca),
|
|
37
|
-
cs: () => import("date-fns/locale/cs").then(m => m.cs),
|
|
38
|
-
cy: () => import("date-fns/locale/cy").then(m => m.cy),
|
|
39
|
-
da: () => import("date-fns/locale/da").then(m => m.da),
|
|
40
|
-
de: () => import("date-fns/locale/de").then(m => m.de),
|
|
41
|
-
el: () => import("date-fns/locale/el").then(m => m.el),
|
|
42
|
-
enAU: () => import("date-fns/locale/en-AU").then(m => m.enAU),
|
|
43
|
-
enCA: () => import("date-fns/locale/en-CA").then(m => m.enCA),
|
|
44
|
-
enGB: () => import("date-fns/locale/en-GB").then(m => m.enGB),
|
|
45
|
-
enIN: () => import("date-fns/locale/en-IN").then(m => m.enIN),
|
|
46
|
-
enNZ: () => import("date-fns/locale/en-NZ").then(m => m.enNZ),
|
|
47
|
-
enUS: () => import("date-fns/locale/en-US").then(m => m.enUS),
|
|
48
|
-
eo: () => import("date-fns/locale/eo").then(m => m.eo),
|
|
49
|
-
es: () => import("date-fns/locale/es").then(m => m.es),
|
|
50
|
-
et: () => import("date-fns/locale/et").then(m => m.et),
|
|
51
|
-
eu: () => import("date-fns/locale/eu").then(m => m.eu),
|
|
52
|
-
faIR: () => import("date-fns/locale/fa-IR").then(m => m.faIR),
|
|
53
|
-
fi: () => import("date-fns/locale/fi").then(m => m.fi),
|
|
54
|
-
fr: () => import("date-fns/locale/fr").then(m => m.fr),
|
|
55
|
-
frCA: () => import("date-fns/locale/fr-CA").then(m => m.frCA),
|
|
56
|
-
frCH: () => import("date-fns/locale/fr-CH").then(m => m.frCH),
|
|
57
|
-
gd: () => import("date-fns/locale/gd").then(m => m.gd),
|
|
58
|
-
gl: () => import("date-fns/locale/gl").then(m => m.gl),
|
|
59
|
-
gu: () => import("date-fns/locale/gu").then(m => m.gu),
|
|
60
|
-
he: () => import("date-fns/locale/he").then(m => m.he),
|
|
61
|
-
hi: () => import("date-fns/locale/hi").then(m => m.hi),
|
|
62
|
-
hr: () => import("date-fns/locale/hr").then(m => m.hr),
|
|
63
|
-
hu: () => import("date-fns/locale/hu").then(m => m.hu),
|
|
64
|
-
hy: () => import("date-fns/locale/hy").then(m => m.hy),
|
|
65
|
-
id: () => import("date-fns/locale/id").then(m => m.id),
|
|
66
|
-
is: () => import("date-fns/locale/is").then(m => m.is),
|
|
67
|
-
it: () => import("date-fns/locale/it").then(m => m.it),
|
|
68
|
-
ja: () => import("date-fns/locale/ja").then(m => m.ja),
|
|
69
|
-
ka: () => import("date-fns/locale/ka").then(m => m.ka),
|
|
70
|
-
kk: () => import("date-fns/locale/kk").then(m => m.kk),
|
|
71
|
-
kn: () => import("date-fns/locale/kn").then(m => m.kn),
|
|
72
|
-
ko: () => import("date-fns/locale/ko").then(m => m.ko),
|
|
73
|
-
lb: () => import("date-fns/locale/lb").then(m => m.lb),
|
|
74
|
-
lt: () => import("date-fns/locale/lt").then(m => m.lt),
|
|
75
|
-
lv: () => import("date-fns/locale/lv").then(m => m.lv),
|
|
76
|
-
mk: () => import("date-fns/locale/mk").then(m => m.mk),
|
|
77
|
-
ms: () => import("date-fns/locale/ms").then(m => m.ms),
|
|
78
|
-
mt: () => import("date-fns/locale/mt").then(m => m.mt),
|
|
79
|
-
nb: () => import("date-fns/locale/nb").then(m => m.nb),
|
|
80
|
-
nl: () => import("date-fns/locale/nl").then(m => m.nl),
|
|
81
|
-
nlBE: () => import("date-fns/locale/nl-BE").then(m => m.nlBE),
|
|
82
|
-
nn: () => import("date-fns/locale/nn").then(m => m.nn),
|
|
83
|
-
pl: () => import("date-fns/locale/pl").then(m => m.pl),
|
|
84
|
-
pt: () => import("date-fns/locale/pt").then(m => m.pt),
|
|
85
|
-
ptBR: () => import("date-fns/locale/pt-BR").then(m => m.ptBR),
|
|
86
|
-
ro: () => import("date-fns/locale/ro").then(m => m.ro),
|
|
87
|
-
ru: () => import("date-fns/locale/ru").then(m => m.ru),
|
|
88
|
-
sk: () => import("date-fns/locale/sk").then(m => m.sk),
|
|
89
|
-
sl: () => import("date-fns/locale/sl").then(m => m.sl),
|
|
90
|
-
sr: () => import("date-fns/locale/sr").then(m => m.sr),
|
|
91
|
-
srLatn: () => import("date-fns/locale/sr-Latn").then(m => m.srLatn),
|
|
92
|
-
sv: () => import("date-fns/locale/sv").then(m => m.sv),
|
|
93
|
-
ta: () => import("date-fns/locale/ta").then(m => m.ta),
|
|
94
|
-
te: () => import("date-fns/locale/te").then(m => m.te),
|
|
95
|
-
th: () => import("date-fns/locale/th").then(m => m.th),
|
|
96
|
-
tr: () => import("date-fns/locale/tr").then(m => m.tr),
|
|
97
|
-
ug: () => import("date-fns/locale/ug").then(m => m.ug),
|
|
98
|
-
uk: () => import("date-fns/locale/uk").then(m => m.uk),
|
|
99
|
-
uz: () => import("date-fns/locale/uz").then(m => m.uz),
|
|
100
|
-
vi: () => import("date-fns/locale/vi").then(m => m.vi),
|
|
101
|
-
zhCN: () => import("date-fns/locale/zh-CN").then(m => m.zhCN),
|
|
102
|
-
zhTW: () => import("date-fns/locale/zh-TW").then(m => m.zhTW),
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
const cache = new Map<LocaleKey, DateFnsLocale>();
|
|
106
|
-
|
|
107
|
-
/** The locale if it has already been fetched, otherwise `undefined`. Never fetches. */
|
|
108
|
-
export function getLoadedDateFnsLocale(locale: LocaleKey | undefined): DateFnsLocale | undefined {
|
|
109
|
-
return locale ? cache.get(locale) : undefined;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Fetch a date-fns locale. Resolves to `undefined` for a locale date-fns does
|
|
114
|
-
* not ship, which is what indexing the namespace used to yield.
|
|
115
|
-
*/
|
|
116
|
-
export async function loadDateFnsLocale(locale: LocaleKey | undefined): Promise<DateFnsLocale | undefined> {
|
|
117
|
-
if (!locale) return undefined;
|
|
118
|
-
const cached = cache.get(locale);
|
|
119
|
-
if (cached) return cached;
|
|
120
|
-
const loader = dateFnsLocaleLoaders[locale];
|
|
121
|
-
if (!loader) return undefined;
|
|
122
|
-
const loaded = await loader();
|
|
123
|
-
cache.set(locale, loaded);
|
|
124
|
-
return loaded;
|
|
125
|
-
}
|
package/src/preview/index.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export { PropertyPreview } from "./PropertyPreview";
|
|
2
|
-
|
|
3
|
-
export * from "./property_previews/ArrayOfStringsPreview";
|
|
4
|
-
export * from "./property_previews/ArrayPropertyEnumPreview";
|
|
5
|
-
export * from "./property_previews/ArrayOfMapsPreview";
|
|
6
|
-
export * from "./property_previews/NumberPropertyPreview";
|
|
7
|
-
export * from "./property_previews/StringPropertyPreview";
|
|
8
|
-
export * from "./property_previews/ArrayOfStorageComponentsPreview";
|
|
9
|
-
export * from "./property_previews/ArrayOfReferencesPreview";
|
|
10
|
-
export * from "./property_previews/MapPropertyPreview";
|
|
11
|
-
export * from "./property_previews/ArrayPropertyPreview";
|
|
12
|
-
export * from "./property_previews/ArrayOneOfPreview";
|
|
13
|
-
export * from "./property_previews/SkeletonPropertyComponent";
|
|
14
|
-
|
|
15
|
-
export * from "./components/DatePreview";
|
|
16
|
-
export * from "./components/UrlComponentPreview";
|
|
17
|
-
export * from "./components/StorageThumbnail";
|
|
18
|
-
export * from "./components/ArrayEnumPreview";
|
|
19
|
-
export * from "./components/BooleanPreview";
|
|
20
|
-
export * from "./components/EnumValuesChip";
|
|
21
|
-
export * from "./components/EmptyValue";
|
|
22
|
-
export * from "./components/ImagePreview";
|
|
23
|
-
export * from "./components/ReferencePreview";
|
|
24
|
-
export * from "./components/RelationPreview";
|
|
25
|
-
export * from "./components/InlineEntityListPreview";
|
|
26
|
-
export * from "./components/UserPreview";
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import type { ArrayProperty, MapProperty, Property } from "@rebasepro/types";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { ErrorBoundary } from "@rebasepro/ui";
|
|
4
|
-
import type { PropertyPreviewProps } from "../../types/components/PropertyPreviewProps";
|
|
5
|
-
import { PropertyPreview } from "../PropertyPreview";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @group Preview components
|
|
9
|
-
*/
|
|
10
|
-
export function ArrayOfMapsPreview({
|
|
11
|
-
propertyKey,
|
|
12
|
-
value,
|
|
13
|
-
property,
|
|
14
|
-
size
|
|
15
|
-
// entity
|
|
16
|
-
}: PropertyPreviewProps<ArrayProperty>) {
|
|
17
|
-
|
|
18
|
-
if (Array.isArray(property?.of)) {
|
|
19
|
-
throw Error("Using array properties instead of single one in `of` in ArrayProperty");
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (property?.type !== "array" || !property.of || property.of.type !== "map")
|
|
23
|
-
throw Error("Picked wrong preview component ArrayOfMapsPreview");
|
|
24
|
-
|
|
25
|
-
const mapProperty = property.of;
|
|
26
|
-
const properties = mapProperty.properties;
|
|
27
|
-
if (!properties) {
|
|
28
|
-
throw Error(`You need to specify a 'properties' prop (or specify a custom field) in your map property '${propertyKey}'${mapProperty.name ? ` ("${mapProperty.name}")` : ""}`);
|
|
29
|
-
}
|
|
30
|
-
const values = value as Record<string, unknown>[];
|
|
31
|
-
const previewProperties: string[] | undefined = (mapProperty as MapProperty).admin?.previewProperties;
|
|
32
|
-
|
|
33
|
-
if (!values) return null;
|
|
34
|
-
|
|
35
|
-
let mapProperties = previewProperties;
|
|
36
|
-
if (!mapProperties || !mapProperties.length) {
|
|
37
|
-
mapProperties = Object.keys(properties);
|
|
38
|
-
if (size)
|
|
39
|
-
mapProperties = mapProperties.slice(0, 3);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return (
|
|
43
|
-
<div className="table-auto text-xs">
|
|
44
|
-
<div>
|
|
45
|
-
{values &&
|
|
46
|
-
values.map((v, index: number) => {
|
|
47
|
-
return (
|
|
48
|
-
<div key={`table_${v}_${index}`}
|
|
49
|
-
className="border-b last:border-b-0 py-2">
|
|
50
|
-
{mapProperties && mapProperties.map(
|
|
51
|
-
(key) => (
|
|
52
|
-
<div
|
|
53
|
-
key={`table-cell-${key as string}`}
|
|
54
|
-
className="table-cell"
|
|
55
|
-
>
|
|
56
|
-
<ErrorBoundary>
|
|
57
|
-
<PropertyPreview
|
|
58
|
-
propertyKey={key as string}
|
|
59
|
-
value={(v)[key]}
|
|
60
|
-
property={properties[key as string] as Property}
|
|
61
|
-
// entity={entity}
|
|
62
|
-
size={"small"}/>
|
|
63
|
-
</ErrorBoundary>
|
|
64
|
-
</div>
|
|
65
|
-
)
|
|
66
|
-
)}
|
|
67
|
-
</div>
|
|
68
|
-
);
|
|
69
|
-
})}
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
);
|
|
73
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import type { ArrayProperty, ReferenceProperty, EntityReference } from "@rebasepro/types";
|
|
2
|
-
import type { PropertyPreviewProps, PreviewSize } from "../../types/components/PropertyPreviewProps";
|
|
3
|
-
import { ReferencePreview } from "../components/ReferencePreview";
|
|
4
|
-
import { useIsNestedEntityPreview } from "../../components/EntityPreviewNesting";
|
|
5
|
-
import { InlineEntityListPreview } from "../components/InlineEntityListPreview";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @group Preview components
|
|
9
|
-
*/
|
|
10
|
-
export function ArrayOfReferencesPreview({
|
|
11
|
-
propertyKey,
|
|
12
|
-
value,
|
|
13
|
-
property: property,
|
|
14
|
-
size,
|
|
15
|
-
textOnly
|
|
16
|
-
}: PropertyPreviewProps<ArrayProperty>) {
|
|
17
|
-
|
|
18
|
-
const nested = useIsNestedEntityPreview();
|
|
19
|
-
|
|
20
|
-
if (Array.isArray(property?.of)) {
|
|
21
|
-
throw Error("Using array properties instead of single one in `of` in ArrayProperty");
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (property?.type !== "array" || !property.of || property.of.type !== "reference")
|
|
25
|
-
throw Error("Picked wrong preview component ArrayOfReferencesPreview");
|
|
26
|
-
|
|
27
|
-
const childSize: PreviewSize = size === "medium" ? "medium" : "small";
|
|
28
|
-
const ofProperty = property.of as ReferenceProperty;
|
|
29
|
-
|
|
30
|
-
// Stacked cards inside another preview (or a title slot) turn a list into a
|
|
31
|
-
// wall of boxes: keep it to one wrapping line of links.
|
|
32
|
-
if (nested || textOnly) {
|
|
33
|
-
return <InlineEntityListPreview
|
|
34
|
-
items={(value ?? []) as EntityReference[]}
|
|
35
|
-
renderItem={(reference, index) => <ReferencePreview
|
|
36
|
-
key={`preview_array_ref_${propertyKey}_${index}`}
|
|
37
|
-
disabled={!ofProperty.path}
|
|
38
|
-
previewProperties={ofProperty.admin?.previewProperties}
|
|
39
|
-
size={childSize}
|
|
40
|
-
reference={reference}
|
|
41
|
-
textOnly={textOnly}
|
|
42
|
-
includeId={ofProperty.admin?.includeId}
|
|
43
|
-
includeEntityLink={ofProperty.admin?.includeEntityLink}
|
|
44
|
-
/>}/>;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return (
|
|
48
|
-
<div className="flex flex-col w-full">
|
|
49
|
-
{value ?
|
|
50
|
-
(value as EntityReference[]).map((reference, index: number) => {
|
|
51
|
-
const ofProperty = property.of as ReferenceProperty;
|
|
52
|
-
return <div className="mt-1 mb-1 w-full"
|
|
53
|
-
key={`preview_array_ref_${propertyKey}_${index}`}>
|
|
54
|
-
<ReferencePreview
|
|
55
|
-
disabled={!ofProperty.path}
|
|
56
|
-
previewProperties={ofProperty.admin?.previewProperties}
|
|
57
|
-
size={childSize}
|
|
58
|
-
reference={reference}
|
|
59
|
-
includeId={ofProperty.admin?.includeId}
|
|
60
|
-
includeEntityLink={ofProperty.admin?.includeEntityLink}
|
|
61
|
-
/>
|
|
62
|
-
</div>;
|
|
63
|
-
}
|
|
64
|
-
) : null}
|
|
65
|
-
</div>
|
|
66
|
-
);
|
|
67
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import type { ArrayProperty, RelationProperty } from "@rebasepro/types";
|
|
2
|
-
import { EntityRelation } from "@rebasepro/types";
|
|
3
|
-
import type { PropertyPreviewProps } from "../../types/components/PropertyPreviewProps";
|
|
4
|
-
import { normalizeToEntityRelation, getRelationTargetPath } from "@rebasepro/common";
|
|
5
|
-
import { RelationPreview } from "../components/RelationPreview";
|
|
6
|
-
import { useIsNestedEntityPreview } from "../../components/EntityPreviewNesting";
|
|
7
|
-
import { InlineEntityListPreview } from "../components/InlineEntityListPreview";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @group Preview components
|
|
11
|
-
*/
|
|
12
|
-
export function ArrayOfRelationsPreview({
|
|
13
|
-
propertyKey,
|
|
14
|
-
value,
|
|
15
|
-
property,
|
|
16
|
-
size,
|
|
17
|
-
textOnly
|
|
18
|
-
}: PropertyPreviewProps<ArrayProperty>) {
|
|
19
|
-
|
|
20
|
-
const nested = useIsNestedEntityPreview();
|
|
21
|
-
|
|
22
|
-
if (Array.isArray(property?.of)) {
|
|
23
|
-
throw Error("Using array properties instead of single one in `of` in ArrayProperty");
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
if (property?.type !== "array" || !property.of || property.of.type !== "relation")
|
|
27
|
-
throw Error("Picked wrong preview component ArrayOfRelationsPreview");
|
|
28
|
-
|
|
29
|
-
const ofProperty = property.of as RelationProperty;
|
|
30
|
-
// Elements arrive hydrated or as bare foreign keys depending on the fetch
|
|
31
|
-
// path; the declared target resolves the latter rather than dropping them.
|
|
32
|
-
const relationTargetPath = getRelationTargetPath(ofProperty);
|
|
33
|
-
|
|
34
|
-
// See ArrayOfReferencesPreview: nested lists stay on one wrapping line.
|
|
35
|
-
if (nested || textOnly) {
|
|
36
|
-
const relations = ((value ?? []) as unknown[])
|
|
37
|
-
.map(relation => normalizeToEntityRelation(relation, "relation", relationTargetPath))
|
|
38
|
-
.filter((relation): relation is EntityRelation => Boolean(relation));
|
|
39
|
-
return <InlineEntityListPreview
|
|
40
|
-
items={relations}
|
|
41
|
-
renderItem={(relation, index) => <RelationPreview
|
|
42
|
-
key={`preview_array_rel_${propertyKey}_${index}`}
|
|
43
|
-
disabled={!ofProperty.relation}
|
|
44
|
-
previewProperties={ofProperty.admin?.previewProperties}
|
|
45
|
-
size={"small"}
|
|
46
|
-
relation={relation}
|
|
47
|
-
textOnly={textOnly}
|
|
48
|
-
includeId={ofProperty.admin?.includeId}
|
|
49
|
-
includeEntityLink={ofProperty.admin?.includeEntityLink}
|
|
50
|
-
/>}/>;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return (
|
|
54
|
-
<div className="flex flex-col w-full gap-0.5">
|
|
55
|
-
{value ?
|
|
56
|
-
(value as unknown[]).map((relation: unknown, index: number) => {
|
|
57
|
-
const entityRelation = normalizeToEntityRelation(relation, "relation", relationTargetPath);
|
|
58
|
-
|
|
59
|
-
if (!entityRelation) return null;
|
|
60
|
-
|
|
61
|
-
return (
|
|
62
|
-
<div className="w-full"
|
|
63
|
-
key={`preview_array_rel_${propertyKey}_${index}`}>
|
|
64
|
-
<RelationPreview
|
|
65
|
-
disabled={!ofProperty.relation}
|
|
66
|
-
previewProperties={ofProperty.admin?.previewProperties}
|
|
67
|
-
size={"small"}
|
|
68
|
-
relation={entityRelation}
|
|
69
|
-
includeId={ofProperty.admin?.includeId}
|
|
70
|
-
includeEntityLink={ofProperty.admin?.includeEntityLink}
|
|
71
|
-
/>
|
|
72
|
-
</div>
|
|
73
|
-
);
|
|
74
|
-
}) : null}
|
|
75
|
-
</div>
|
|
76
|
-
);
|
|
77
|
-
}
|