@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,153 +0,0 @@
|
|
|
1
|
-
import type { Entity } from "@rebasepro/types";
|
|
2
|
-
import type { ResolvedFormField } from "@rebasepro/app";
|
|
3
|
-
import React from "react";
|
|
4
|
-
import { CheckIcon, cls, CopyIcon, defaultBorderMixin, IconButton, iconSize, Tooltip, Typography } from "@rebasepro/ui";
|
|
5
|
-
|
|
6
|
-
export interface FormRailProps {
|
|
7
|
-
fields: ResolvedFormField[];
|
|
8
|
-
showRecordMeta: boolean;
|
|
9
|
-
entity?: Entity<Record<string, unknown>>;
|
|
10
|
-
renderField: (field: ResolvedFormField) => React.ReactNode;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* The metadata column beside the form.
|
|
15
|
-
*
|
|
16
|
-
* This replaces a `w-80 2xl:w-96` rail that held a Save button and several
|
|
17
|
-
* hundred pixels of nothing. It renders only when it has something to say, and
|
|
18
|
-
* the actions it used to hold now live in the identity bar, where they stay
|
|
19
|
-
* visible while you scroll.
|
|
20
|
-
*/
|
|
21
|
-
export function FormRail({
|
|
22
|
-
fields,
|
|
23
|
-
showRecordMeta,
|
|
24
|
-
entity,
|
|
25
|
-
renderField
|
|
26
|
-
}: FormRailProps) {
|
|
27
|
-
|
|
28
|
-
if (!fields.length && !showRecordMeta) return null;
|
|
29
|
-
|
|
30
|
-
return (
|
|
31
|
-
<aside className={cls(
|
|
32
|
-
// No responsive hiding here. The caller decides whether the rail is
|
|
33
|
-
// shown, by measuring; a CSS `hidden` would leave the fields the
|
|
34
|
-
// resolver moved in here unreachable rather than folding them back.
|
|
35
|
-
//
|
|
36
|
-
// `w-76` (304px), between the old 288 and a full `w-80`. The rail
|
|
37
|
-
// holds real controls — a status select, a date picker — plus a
|
|
38
|
-
// record block whose id is a 36-character UUID, so 288 left the
|
|
39
|
-
// select tighter than the identical select in the column.
|
|
40
|
-
//
|
|
41
|
-
// 304 is the floor rather than the answer everywhere. It was chosen
|
|
42
|
-
// against the *narrow* end, where 320 took more than it gave back —
|
|
43
|
-
// past about 300px the extra went to the gap beside a chip. That
|
|
44
|
-
// stops being true once the form is genuinely wide: `@7xl/form`
|
|
45
|
-
// (1280px of form) is the same signal the column widens on, and by
|
|
46
|
-
// then 32px is coming out of gutters, not out of the column.
|
|
47
|
-
//
|
|
48
|
-
// Container, not viewport, for the reason the whole rail is
|
|
49
|
-
// measured rather than breakpointed: a side panel inside a large
|
|
50
|
-
// window is not a wide form. Both surfaces that render a rail —
|
|
51
|
-
// `EntityForm` and `EntityViewBinding` — name their form element
|
|
52
|
-
// `@container/form`, so a panel that never gets that wide keeps 304.
|
|
53
|
-
"flex flex-col gap-6 shrink-0 w-76 @7xl/form:w-84 border-l overflow-y-auto",
|
|
54
|
-
"px-5 py-6 bg-surface-50 dark:bg-surface-900",
|
|
55
|
-
defaultBorderMixin
|
|
56
|
-
)}>
|
|
57
|
-
{fields.length > 0 && (
|
|
58
|
-
<div className={"flex flex-col gap-5"}>
|
|
59
|
-
{fields.map(renderField)}
|
|
60
|
-
</div>
|
|
61
|
-
)}
|
|
62
|
-
|
|
63
|
-
{showRecordMeta && entity && <RecordMeta entity={entity}/>}
|
|
64
|
-
</aside>
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* The record's id and audit timestamps.
|
|
70
|
-
*
|
|
71
|
-
* Exported because the rail is not the only place it renders. The rail is shown
|
|
72
|
-
* only when it has been *measured* to fit, and every layout narrower than that —
|
|
73
|
-
* the split pane, the side panel, the dialog — folds its contents back into the
|
|
74
|
-
* column. The fields folded back but this block did not, so on three of the four
|
|
75
|
-
* layouts a record simply had no id on screen: the only copy of it was the
|
|
76
|
-
* truncated `e166a394…b422` chip in the identity bar.
|
|
77
|
-
*/
|
|
78
|
-
export function RecordMeta({ entity }: { entity: Entity<Record<string, unknown>> }) {
|
|
79
|
-
|
|
80
|
-
const createdAt = pickDate(entity.values, ["created_at", "createdAt", "created_on"]);
|
|
81
|
-
const updatedAt = pickDate(entity.values, ["updated_at", "updatedAt", "modified_at"]);
|
|
82
|
-
|
|
83
|
-
return (
|
|
84
|
-
<div className={"flex flex-col gap-2.5"}>
|
|
85
|
-
<Typography variant={"caption"}
|
|
86
|
-
className={"text-xs font-semibold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark"}>
|
|
87
|
-
Record
|
|
88
|
-
</Typography>
|
|
89
|
-
|
|
90
|
-
<MetaRow label={"ID"} value={String(entity.id)} copyable/>
|
|
91
|
-
{createdAt && <MetaRow label={"Created"} value={createdAt}/>}
|
|
92
|
-
{updatedAt && <MetaRow label={"Updated"} value={updatedAt}/>}
|
|
93
|
-
</div>
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function MetaRow({
|
|
98
|
-
label,
|
|
99
|
-
value,
|
|
100
|
-
copyable
|
|
101
|
-
}: {
|
|
102
|
-
label: string;
|
|
103
|
-
value: string;
|
|
104
|
-
copyable?: boolean;
|
|
105
|
-
}) {
|
|
106
|
-
const [copied, setCopied] = React.useState(false);
|
|
107
|
-
|
|
108
|
-
const copy = () => {
|
|
109
|
-
navigator.clipboard?.writeText(value).then(() => {
|
|
110
|
-
setCopied(true);
|
|
111
|
-
setTimeout(() => setCopied(false), 1600);
|
|
112
|
-
}, () => undefined);
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
return (
|
|
116
|
-
<div className={"flex items-baseline justify-between gap-3 min-w-0"}>
|
|
117
|
-
<span className={"text-xs text-text-disabled dark:text-text-disabled-dark shrink-0"}>
|
|
118
|
-
{label}
|
|
119
|
-
</span>
|
|
120
|
-
<span className={"flex items-center gap-1 min-w-0"}>
|
|
121
|
-
<span className={"font-mono text-xs text-text-secondary dark:text-text-secondary-dark truncate"}
|
|
122
|
-
title={value}>
|
|
123
|
-
{value}
|
|
124
|
-
</span>
|
|
125
|
-
{copyable && (
|
|
126
|
-
<Tooltip title={copied ? "Copied" : "Copy"}>
|
|
127
|
-
<IconButton size={"smallest"} onClick={copy}>
|
|
128
|
-
{copied ? <CheckIcon size={iconSize.smallest}/> : <CopyIcon size={iconSize.smallest}/>}
|
|
129
|
-
</IconButton>
|
|
130
|
-
</Tooltip>
|
|
131
|
-
)}
|
|
132
|
-
</span>
|
|
133
|
-
</div>
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Audit timestamps are a convention, not a contract — a collection may name them
|
|
139
|
-
* anything or not have them at all — so this reads the values it recognises and
|
|
140
|
-
* stays quiet otherwise rather than rendering an empty row.
|
|
141
|
-
*/
|
|
142
|
-
function pickDate(values: Record<string, unknown> | undefined, keys: string[]): string | undefined {
|
|
143
|
-
if (!values) return undefined;
|
|
144
|
-
for (const key of keys) {
|
|
145
|
-
const value = values[key];
|
|
146
|
-
if (value instanceof Date) return value.toLocaleDateString();
|
|
147
|
-
if (typeof value === "string" && value) {
|
|
148
|
-
const parsed = new Date(value);
|
|
149
|
-
if (!Number.isNaN(parsed.getTime())) return parsed.toLocaleDateString();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return undefined;
|
|
153
|
-
}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import type { ResolvedFormField, ResolvedFormSection } from "@rebasepro/app";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { ChevronDownIcon, cls, defaultBorderMixin, iconSize } from "@rebasepro/ui";
|
|
4
|
-
|
|
5
|
-
export interface FormSectionsProps {
|
|
6
|
-
sections: ResolvedFormSection[];
|
|
7
|
-
/** Section keys the user has collapsed. */
|
|
8
|
-
collapsed: ReadonlySet<string>;
|
|
9
|
-
onToggle: (key: string) => void;
|
|
10
|
-
/**
|
|
11
|
-
* Field keys currently showing a validation error. A section holding one is
|
|
12
|
-
* forced open — an error that hides inside a collapsed group is a form the
|
|
13
|
-
* user cannot submit and cannot debug.
|
|
14
|
-
*/
|
|
15
|
-
errorKeys: ReadonlySet<string>;
|
|
16
|
-
renderField: (field: ResolvedFormField) => React.ReactNode;
|
|
17
|
-
/**
|
|
18
|
-
* Which rendering this is. `"read"` opens the gaps up rather than closing
|
|
19
|
-
* them: a control is a bordered 40px box that separates itself from the next
|
|
20
|
-
* one, and a value is bare text that does not. The form can also afford
|
|
21
|
-
* tighter rows because a description usually sits between them; with that
|
|
22
|
-
* gone, the same numbers ran a record's values together into one block.
|
|
23
|
-
*/
|
|
24
|
-
mode?: "edit" | "read";
|
|
25
|
-
/**
|
|
26
|
-
* Renders one field as a summary row, for a section that asked for
|
|
27
|
-
* `readVariant: "summary"`. Only the read view supplies it; without it such
|
|
28
|
-
* a section falls back to the grid rather than to nothing.
|
|
29
|
-
*/
|
|
30
|
-
renderSummaryField?: (field: ResolvedFormField, index: number, total: number) => React.ReactNode;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export function FormSections({
|
|
34
|
-
sections,
|
|
35
|
-
collapsed,
|
|
36
|
-
onToggle,
|
|
37
|
-
errorKeys,
|
|
38
|
-
renderField,
|
|
39
|
-
mode = "edit",
|
|
40
|
-
renderSummaryField
|
|
41
|
-
}: FormSectionsProps) {
|
|
42
|
-
|
|
43
|
-
const reading = mode === "read";
|
|
44
|
-
|
|
45
|
-
return (
|
|
46
|
-
<div className={cls("flex flex-col", reading ? "gap-10" : "gap-8")}>
|
|
47
|
-
{sections.map((section) => {
|
|
48
|
-
|
|
49
|
-
const hasError = section.fields.some(f => errorKeys.has(f.key));
|
|
50
|
-
const isCollapsed = section.collapsible && collapsed.has(section.key) && !hasError;
|
|
51
|
-
const summary = reading
|
|
52
|
-
&& section.readVariant === "summary"
|
|
53
|
-
&& Boolean(renderSummaryField);
|
|
54
|
-
|
|
55
|
-
return (
|
|
56
|
-
<section key={section.key} className={"min-w-0"}>
|
|
57
|
-
|
|
58
|
-
{section.title && (
|
|
59
|
-
<Header
|
|
60
|
-
title={section.title}
|
|
61
|
-
collapsible={section.collapsible}
|
|
62
|
-
collapsed={isCollapsed}
|
|
63
|
-
controls={`form_section_${section.key}`}
|
|
64
|
-
onToggle={() => onToggle(section.key)}/>
|
|
65
|
-
)}
|
|
66
|
-
|
|
67
|
-
{!isCollapsed && (summary
|
|
68
|
-
? <div id={`form_section_${section.key}`}
|
|
69
|
-
className={"flex flex-col min-w-0 @2xl:max-w-md @2xl:ml-auto"}>
|
|
70
|
-
{section.fields.map((field, index) =>
|
|
71
|
-
renderSummaryField!(field, index, section.fields.length))}
|
|
72
|
-
</div>
|
|
73
|
-
// A container query, not a media query: the form is
|
|
74
|
-
// rendered at four very different widths (full
|
|
75
|
-
// screen, side panel, split pane, dialog) inside the
|
|
76
|
-
// same viewport, so spans have to answer to the
|
|
77
|
-
// column they are in, not to the window.
|
|
78
|
-
: <div id={`form_section_${section.key}`}
|
|
79
|
-
className={cls(
|
|
80
|
-
"grid min-w-0",
|
|
81
|
-
reading ? "gap-x-8 gap-y-7" : "gap-x-4 gap-y-5",
|
|
82
|
-
"grid-cols-1 @2xl:grid-cols-4"
|
|
83
|
-
)}>
|
|
84
|
-
{section.fields.map(renderField)}
|
|
85
|
-
</div>
|
|
86
|
-
)}
|
|
87
|
-
</section>
|
|
88
|
-
);
|
|
89
|
-
})}
|
|
90
|
-
</div>
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function Header({
|
|
95
|
-
title,
|
|
96
|
-
collapsible,
|
|
97
|
-
collapsed,
|
|
98
|
-
controls,
|
|
99
|
-
onToggle
|
|
100
|
-
}: {
|
|
101
|
-
title: string;
|
|
102
|
-
collapsible: boolean;
|
|
103
|
-
collapsed: boolean;
|
|
104
|
-
/**
|
|
105
|
-
* Id of the region this header shows and hides. Only referenced while that
|
|
106
|
-
* region exists — a collapsed section unmounts its fields, and pointing
|
|
107
|
-
* `aria-controls` at an id that is not in the document is its own defect.
|
|
108
|
-
*/
|
|
109
|
-
controls: string;
|
|
110
|
-
onToggle: () => void;
|
|
111
|
-
}) {
|
|
112
|
-
|
|
113
|
-
const content = (
|
|
114
|
-
<>
|
|
115
|
-
{collapsible && (
|
|
116
|
-
<ChevronDownIcon
|
|
117
|
-
size={iconSize.smallest}
|
|
118
|
-
className={cls(
|
|
119
|
-
"text-text-disabled dark:text-text-disabled-dark transition-transform duration-150",
|
|
120
|
-
collapsed && "-rotate-90"
|
|
121
|
-
)}/>
|
|
122
|
-
)}
|
|
123
|
-
<span className={"text-xs font-semibold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark whitespace-nowrap"}>
|
|
124
|
-
{title}
|
|
125
|
-
</span>
|
|
126
|
-
<span className={cls("flex-1 border-t", defaultBorderMixin)}/>
|
|
127
|
-
</>
|
|
128
|
-
);
|
|
129
|
-
|
|
130
|
-
const className = "flex items-center gap-2.5 w-full mb-3.5";
|
|
131
|
-
|
|
132
|
-
if (!collapsible) {
|
|
133
|
-
return <div className={className}>{content}</div>;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return (
|
|
137
|
-
<button type={"button"}
|
|
138
|
-
onClick={onToggle}
|
|
139
|
-
aria-expanded={!collapsed}
|
|
140
|
-
aria-controls={collapsed ? undefined : controls}
|
|
141
|
-
className={cls(className, "text-left hover:opacity-80 transition-opacity")}>
|
|
142
|
-
{content}
|
|
143
|
-
</button>
|
|
144
|
-
);
|
|
145
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import React, { forwardRef } from "react";
|
|
2
|
-
import { cls } from "@rebasepro/ui";
|
|
3
|
-
|
|
4
|
-
interface LabelWithIconProps {
|
|
5
|
-
icon: React.ReactNode;
|
|
6
|
-
title?: string;
|
|
7
|
-
small?: boolean;
|
|
8
|
-
className?: string;
|
|
9
|
-
required?: boolean;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Render the label of with an icon and the title of a property
|
|
14
|
-
* @group Form custom fields
|
|
15
|
-
*/
|
|
16
|
-
export const LabelWithIcon = forwardRef<HTMLDivElement, LabelWithIconProps>(
|
|
17
|
-
({
|
|
18
|
-
icon,
|
|
19
|
-
title,
|
|
20
|
-
small,
|
|
21
|
-
className,
|
|
22
|
-
required
|
|
23
|
-
}, ref) => {
|
|
24
|
-
return (
|
|
25
|
-
<div
|
|
26
|
-
ref={ref}
|
|
27
|
-
className={cls("align-middle inline-flex items-center my-0.5",
|
|
28
|
-
small ? "gap-1" : "gap-2",
|
|
29
|
-
className)}
|
|
30
|
-
>
|
|
31
|
-
{icon}
|
|
32
|
-
<span
|
|
33
|
-
className={`text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${small ? "translate-x-2 scale-75" : ""
|
|
34
|
-
}`}
|
|
35
|
-
>
|
|
36
|
-
{(title ?? "") + (required ? " *" : "")}
|
|
37
|
-
</span>
|
|
38
|
-
</div>
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
LabelWithIcon.displayName = "LabelWithIcon";
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { LabelWithIcon } from "./LabelWithIcon";
|
|
3
|
-
import { PropertyIdCopyTooltip } from "../../components/PropertyIdCopyTooltip";
|
|
4
|
-
|
|
5
|
-
interface LabelWithIconAndTooltip {
|
|
6
|
-
icon: React.ReactNode;
|
|
7
|
-
title?: string;
|
|
8
|
-
small?: boolean;
|
|
9
|
-
className?: string;
|
|
10
|
-
required?: boolean;
|
|
11
|
-
propertyKey: string
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Render the label of with an icon and the title of a property
|
|
16
|
-
* @group Form custom fields
|
|
17
|
-
*/
|
|
18
|
-
export function LabelWithIconAndTooltip({
|
|
19
|
-
propertyKey,
|
|
20
|
-
className,
|
|
21
|
-
...props
|
|
22
|
-
}: LabelWithIconAndTooltip) {
|
|
23
|
-
return (
|
|
24
|
-
<PropertyIdCopyTooltip propertyKey={propertyKey} className={className}>
|
|
25
|
-
<LabelWithIcon {...props}/>
|
|
26
|
-
</PropertyIdCopyTooltip>
|
|
27
|
-
);
|
|
28
|
-
}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import type { Properties } from "@rebasepro/types";
|
|
3
|
-
import React, { useState } from "react";
|
|
4
|
-
import {
|
|
5
|
-
AlertTriangleIcon,
|
|
6
|
-
Button,
|
|
7
|
-
CheckIcon,
|
|
8
|
-
ChevronDownIcon,
|
|
9
|
-
defaultBorderMixin,
|
|
10
|
-
Dialog,
|
|
11
|
-
DialogActions,
|
|
12
|
-
DialogContent,
|
|
13
|
-
DialogTitle,
|
|
14
|
-
EyeIcon,
|
|
15
|
-
iconSize,
|
|
16
|
-
Menu,
|
|
17
|
-
MenuItem,
|
|
18
|
-
Typography,
|
|
19
|
-
XCircleIcon
|
|
20
|
-
} from "@rebasepro/ui";
|
|
21
|
-
import { FormexController } from "@rebasepro/forms";
|
|
22
|
-
import { useSnackbarController, useTranslation } from "@rebasepro/app";
|
|
23
|
-
import { flattenKeys, removeEntityFromCache } from "@rebasepro/app";
|
|
24
|
-
;
|
|
25
|
-
import { PropertyCollectionView } from "../../components/PropertyCollectionView";
|
|
26
|
-
import { mergeDeep } from "@rebasepro/utils";
|
|
27
|
-
|
|
28
|
-
interface LocalChangesMenuProps<M extends Record<string, unknown>> {
|
|
29
|
-
cacheKey: string;
|
|
30
|
-
cachedData: Partial<M>;
|
|
31
|
-
formex: FormexController<M>;
|
|
32
|
-
onClearLocalChanges?: () => void;
|
|
33
|
-
properties: Properties;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function LocalChangesMenu<M extends Record<string, unknown>>({
|
|
37
|
-
cachedData,
|
|
38
|
-
formex,
|
|
39
|
-
onClearLocalChanges,
|
|
40
|
-
cacheKey,
|
|
41
|
-
properties
|
|
42
|
-
}: LocalChangesMenuProps<M>) {
|
|
43
|
-
|
|
44
|
-
const snackbarController = useSnackbarController();
|
|
45
|
-
const { t } = useTranslation();
|
|
46
|
-
const [previewDialogOpen, setPreviewDialogOpen] = useState(false);
|
|
47
|
-
const [open, setOpen] = useState(false);
|
|
48
|
-
|
|
49
|
-
const handleOpenMenu = () => setOpen(true);
|
|
50
|
-
const handleCloseMenu = () => setOpen(false);
|
|
51
|
-
|
|
52
|
-
const handlePreview = () => {
|
|
53
|
-
setPreviewDialogOpen(true);
|
|
54
|
-
handleCloseMenu();
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const handleApply = () => {
|
|
58
|
-
const mergedValues = mergeDeep(formex.values, cachedData, true);
|
|
59
|
-
const touched = { ...formex.touched };
|
|
60
|
-
const cachedKeys = flattenKeys(cachedData);
|
|
61
|
-
cachedKeys.forEach((key) => {
|
|
62
|
-
touched[key] = true;
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
formex.setTouched(touched);
|
|
66
|
-
formex.setValues(mergedValues);
|
|
67
|
-
snackbarController.open({
|
|
68
|
-
type: "info",
|
|
69
|
-
message: t("local_changes_applied")
|
|
70
|
-
});
|
|
71
|
-
handleCloseMenu();
|
|
72
|
-
onClearLocalChanges?.();
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
const handleDiscard = () => {
|
|
76
|
-
removeEntityFromCache(cacheKey);
|
|
77
|
-
snackbarController.open({
|
|
78
|
-
type: "info",
|
|
79
|
-
message: t("local_changes_discarded")
|
|
80
|
-
});
|
|
81
|
-
handleCloseMenu();
|
|
82
|
-
onClearLocalChanges?.();
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
return (
|
|
86
|
-
<>
|
|
87
|
-
<Menu
|
|
88
|
-
trigger={
|
|
89
|
-
<Button
|
|
90
|
-
size={"small"}
|
|
91
|
-
className={
|
|
92
|
-
"font-semibold text-xs rounded-full px-4 py-1 bg-yellow-200 dark:bg-yellow-900 hover:bg-yellow-300 dark:hover:bg-yellow-800 text-yellow-800 dark:text-yellow-200"
|
|
93
|
-
}
|
|
94
|
-
onClick={handleOpenMenu}
|
|
95
|
-
>
|
|
96
|
-
<AlertTriangleIcon size={iconSize.smallest} className={"mr-1 text-yellow-600 dark:text-yellow-400"}/>
|
|
97
|
-
{t("unsaved_local_changes")}
|
|
98
|
-
<ChevronDownIcon size={iconSize.smallest}/>
|
|
99
|
-
</Button>
|
|
100
|
-
}
|
|
101
|
-
open={open}
|
|
102
|
-
onOpenChange={setOpen}
|
|
103
|
-
>
|
|
104
|
-
<div className={"max-w-xs px-4 py-4 text-sm text-gray-700 dark:text-gray-300"}>
|
|
105
|
-
{t("unsaved_local_changes_description")}
|
|
106
|
-
</div>
|
|
107
|
-
<MenuItem dense onClick={handlePreview}><EyeIcon size={iconSize.small}/>{t("preview_changes")}</MenuItem>
|
|
108
|
-
<MenuItem dense onClick={handleApply}><CheckIcon size={iconSize.small}/>{t("apply_changes")}</MenuItem>
|
|
109
|
-
<MenuItem dense onClick={handleDiscard}><XCircleIcon size={iconSize.small}/>{t("discard_local_changes")}</MenuItem>
|
|
110
|
-
</Menu>
|
|
111
|
-
|
|
112
|
-
<Dialog
|
|
113
|
-
open={previewDialogOpen}
|
|
114
|
-
onOpenChange={setPreviewDialogOpen}
|
|
115
|
-
maxWidth={"4xl"}
|
|
116
|
-
>
|
|
117
|
-
<DialogTitle variant={"h6"}>{t("preview_local_changes")}</DialogTitle>
|
|
118
|
-
<DialogContent className={"my-4"}>
|
|
119
|
-
<Typography variant={"body2"} className={"mb-4"}>
|
|
120
|
-
{t("preview_local_changes_description")}
|
|
121
|
-
</Typography>
|
|
122
|
-
<div className={`border rounded-lg ${defaultBorderMixin}`} style={{
|
|
123
|
-
maxHeight: 520,
|
|
124
|
-
overflow: "auto"
|
|
125
|
-
}}>
|
|
126
|
-
<div className="p-4">
|
|
127
|
-
<PropertyCollectionView data={cachedData}
|
|
128
|
-
properties={properties as Properties}/>
|
|
129
|
-
</div>
|
|
130
|
-
</div>
|
|
131
|
-
</DialogContent>
|
|
132
|
-
<DialogActions>
|
|
133
|
-
<Button onClick={() => setPreviewDialogOpen(false)}>{t("close")}</Button>
|
|
134
|
-
<Button
|
|
135
|
-
variant={"filled"}
|
|
136
|
-
onClick={() => {
|
|
137
|
-
handleApply();
|
|
138
|
-
setPreviewDialogOpen(false);
|
|
139
|
-
}}
|
|
140
|
-
>
|
|
141
|
-
{t("apply_changes")}
|
|
142
|
-
</Button>
|
|
143
|
-
</DialogActions>
|
|
144
|
-
</Dialog>
|
|
145
|
-
</>
|
|
146
|
-
);
|
|
147
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import type { StringProperty } from "@rebasepro/types";
|
|
2
|
-
import React from "react";
|
|
3
|
-
|
|
4
|
-
import { PreviewSize } from "../../types/components/PropertyPreviewProps";
|
|
5
|
-
import { PropertyPreview } from "../../preview";
|
|
6
|
-
|
|
7
|
-
import { cls, IconButton, paperMixin, Tooltip } from "@rebasepro/ui";
|
|
8
|
-
import { ErrorBoundary, FileTextIcon, MinusIcon } from "@rebasepro/ui";
|
|
9
|
-
import { useTranslation } from "@rebasepro/app";
|
|
10
|
-
|
|
11
|
-
interface StorageItemPreviewProps {
|
|
12
|
-
name: string;
|
|
13
|
-
property: StringProperty;
|
|
14
|
-
value: string,
|
|
15
|
-
onRemove: (value: string) => void;
|
|
16
|
-
size: PreviewSize;
|
|
17
|
-
disabled: boolean;
|
|
18
|
-
placeholder?: boolean;
|
|
19
|
-
className?: string;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function StorageItemPreview({
|
|
23
|
-
name,
|
|
24
|
-
property,
|
|
25
|
-
value,
|
|
26
|
-
onRemove,
|
|
27
|
-
disabled,
|
|
28
|
-
size,
|
|
29
|
-
placeholder,
|
|
30
|
-
className
|
|
31
|
-
}: StorageItemPreviewProps) {
|
|
32
|
-
const { t } = useTranslation();
|
|
33
|
-
|
|
34
|
-
return (
|
|
35
|
-
<div className={cls(
|
|
36
|
-
"relative border-box flex items-center justify-center",
|
|
37
|
-
size === "large" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]",
|
|
38
|
-
paperMixin,
|
|
39
|
-
className)}>
|
|
40
|
-
|
|
41
|
-
{!placeholder && !disabled &&
|
|
42
|
-
<div
|
|
43
|
-
className="absolute rounded-full -top-2 -right-2 z-10 bg-white dark:bg-surface-900">
|
|
44
|
-
|
|
45
|
-
<Tooltip
|
|
46
|
-
asChild={true}
|
|
47
|
-
title={t("remove")}>
|
|
48
|
-
<IconButton
|
|
49
|
-
size={"small"}
|
|
50
|
-
onClick={(event) => {
|
|
51
|
-
event.stopPropagation();
|
|
52
|
-
onRemove(value);
|
|
53
|
-
}}>
|
|
54
|
-
<MinusIcon/>
|
|
55
|
-
</IconButton>
|
|
56
|
-
</Tooltip>
|
|
57
|
-
</div>
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
{!placeholder && value &&
|
|
61
|
-
<ErrorBoundary>
|
|
62
|
-
<PropertyPreview propertyKey={name}
|
|
63
|
-
value={value}
|
|
64
|
-
property={property}
|
|
65
|
-
interactive={false}
|
|
66
|
-
size={size}/>
|
|
67
|
-
</ErrorBoundary>
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
{placeholder &&
|
|
71
|
-
<div
|
|
72
|
-
onClick={(e) => e.stopPropagation()}
|
|
73
|
-
className="flex flex-col items-center justify-center w-full h-full">
|
|
74
|
-
<FileTextIcon className="text-surface-700 dark:text-surface-300"/>
|
|
75
|
-
</div>
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
</div>
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
}
|