@strapi/content-manager 5.37.1 → 5.38.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/ActionsDrawer.js.map +1 -1
- package/dist/admin/components/ActionsDrawer.mjs.map +1 -1
- package/dist/admin/components/ComponentIcon.js.map +1 -1
- package/dist/admin/components/ComponentIcon.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs +2 -2
- package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.js +62 -30
- package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.mjs +62 -30
- package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
- package/dist/admin/components/DragLayer.js.map +1 -1
- package/dist/admin/components/DragLayer.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
- package/dist/admin/components/FieldTypeIcon.js.map +1 -1
- package/dist/admin/components/FieldTypeIcon.mjs +1 -1
- package/dist/admin/components/FieldTypeIcon.mjs.map +1 -1
- package/dist/admin/components/InjectionZone.js.map +1 -1
- package/dist/admin/components/InjectionZone.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/RelativeTime.js.map +1 -1
- package/dist/admin/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +1 -1
- package/dist/admin/components/Widgets.mjs.map +1 -1
- package/dist/admin/constants/attributes.js.map +1 -1
- package/dist/admin/constants/attributes.mjs.map +1 -1
- package/dist/admin/constants/collections.js.map +1 -1
- package/dist/admin/constants/collections.mjs.map +1 -1
- package/dist/admin/constants/dragAndDrop.js.map +1 -1
- package/dist/admin/constants/dragAndDrop.mjs.map +1 -1
- package/dist/admin/constants/hooks.js.map +1 -1
- package/dist/admin/constants/hooks.mjs.map +1 -1
- package/dist/admin/constants/plugin.js.map +1 -1
- package/dist/admin/constants/plugin.mjs.map +1 -1
- package/dist/admin/content-manager.js.map +1 -1
- package/dist/admin/content-manager.mjs.map +1 -1
- package/dist/admin/features/DocumentRBAC.js.map +1 -1
- package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
- package/dist/admin/history/components/HistoryAction.js.map +1 -1
- package/dist/admin/history/components/HistoryAction.mjs.map +1 -1
- package/dist/admin/history/components/VersionContent.js +48 -16
- package/dist/admin/history/components/VersionContent.js.map +1 -1
- package/dist/admin/history/components/VersionContent.mjs +48 -16
- package/dist/admin/history/components/VersionContent.mjs.map +1 -1
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.mjs +1 -1
- package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/history/components/VersionsList.js.map +1 -1
- package/dist/admin/history/components/VersionsList.mjs.map +1 -1
- package/dist/admin/history/index.js.map +1 -1
- package/dist/admin/history/index.mjs.map +1 -1
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/pages/History.mjs +1 -1
- package/dist/admin/history/pages/History.mjs.map +1 -1
- package/dist/admin/history/routes.js.map +1 -1
- package/dist/admin/history/routes.mjs.map +1 -1
- package/dist/admin/history/services/historyVersion.js.map +1 -1
- package/dist/admin/history/services/historyVersion.mjs.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
- package/dist/admin/hooks/useContentTypeSchema.js.map +1 -1
- package/dist/admin/hooks/useContentTypeSchema.mjs.map +1 -1
- package/dist/admin/hooks/useDebounce.js.map +1 -1
- package/dist/admin/hooks/useDebounce.mjs.map +1 -1
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs +1 -1
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentContext.js.map +1 -1
- package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.js +2 -1
- package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.mjs +2 -1
- package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
- package/dist/admin/hooks/useDragAndDrop.js +1 -3
- package/dist/admin/hooks/useDragAndDrop.js.map +1 -1
- package/dist/admin/hooks/useDragAndDrop.mjs +1 -3
- package/dist/admin/hooks/useDragAndDrop.mjs.map +1 -1
- package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -1
- package/dist/admin/hooks/useKeyboardDragAndDrop.mjs.map +1 -1
- package/dist/admin/hooks/useLazyComponents.js.map +1 -1
- package/dist/admin/hooks/useLazyComponents.mjs.map +1 -1
- package/dist/admin/hooks/useOnce.js.map +1 -1
- package/dist/admin/hooks/useOnce.mjs.map +1 -1
- package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
- package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
- package/dist/admin/hooks/usePrev.js.map +1 -1
- package/dist/admin/hooks/usePrev.mjs.map +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/modules/app.js.map +1 -1
- package/dist/admin/modules/app.mjs.map +1 -1
- package/dist/admin/modules/hooks.js.map +1 -1
- package/dist/admin/modules/hooks.mjs +1 -1
- package/dist/admin/modules/hooks.mjs.map +1 -1
- package/dist/admin/modules/reducers.js.map +1 -1
- package/dist/admin/modules/reducers.mjs.map +1 -1
- package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ComponentConfigurationPage.mjs +1 -1
- package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/EditConfigurationPage.js.map +1 -1
- package/dist/admin/pages/EditConfigurationPage.mjs +1 -1
- package/dist/admin/pages/EditConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +4 -4
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Blocker.js.map +1 -1
- package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +4 -4
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +51 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +53 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +6 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +6 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +45 -6
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +45 -8
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +148 -111
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +152 -115
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js +8 -6
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs +8 -6
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +2 -2
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +15 -5
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +15 -5
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
- package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/forms.js.map +1 -1
- package/dist/admin/pages/EditView/utils/forms.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +1 -1
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +3 -3
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
- package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +1 -4
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -5
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +4 -4
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +2 -2
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +54 -1
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +54 -1
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellValue.js +7 -1
- package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +7 -1
- package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Components.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Components.mjs +2 -2
- package/dist/admin/pages/ListView/components/TableCells/Components.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
- package/dist/admin/pages/NoContentTypePage.js.map +1 -1
- package/dist/admin/pages/NoContentTypePage.mjs.map +1 -1
- package/dist/admin/pages/NoPermissionsPage.js.map +1 -1
- package/dist/admin/pages/NoPermissionsPage.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js.map +1 -1
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -1
- package/dist/admin/preview/index.js.map +1 -1
- package/dist/admin/preview/index.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/routes.js.map +1 -1
- package/dist/admin/preview/routes.mjs.map +1 -1
- package/dist/admin/preview/services/preview.js.map +1 -1
- package/dist/admin/preview/services/preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +0 -1
- package/dist/admin/preview/utils/constants.js.map +1 -1
- package/dist/admin/preview/utils/constants.mjs +0 -1
- package/dist/admin/preview/utils/constants.mjs.map +1 -1
- package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
- package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
- package/dist/admin/preview/utils/getSendMessage.js.map +1 -1
- package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -1
- package/dist/admin/preview/utils/previewScript.js.map +1 -1
- package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
- package/dist/admin/router.js.map +1 -1
- package/dist/admin/router.mjs.map +1 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/components.js.map +1 -1
- package/dist/admin/services/components.mjs.map +1 -1
- package/dist/admin/services/contentTypes.js.map +1 -1
- package/dist/admin/services/contentTypes.mjs.map +1 -1
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/services/homepage.js.map +1 -1
- package/dist/admin/services/homepage.mjs.map +1 -1
- package/dist/admin/services/init.js.map +1 -1
- package/dist/admin/services/init.mjs.map +1 -1
- package/dist/admin/services/relations.js.map +1 -1
- package/dist/admin/services/relations.mjs.map +1 -1
- package/dist/admin/services/uid.js.map +1 -1
- package/dist/admin/services/uid.mjs.map +1 -1
- package/dist/admin/src/exports.d.ts +1 -1
- package/dist/admin/src/hooks/useDocumentLayout.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +7 -2
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +1 -1
- package/dist/admin/src/utils/conditionalFields.d.ts +12 -0
- package/dist/admin/translations/en.json.js +10 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +10 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +136 -2
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +136 -2
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +72 -1
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +72 -1
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/utils/api.js.map +1 -1
- package/dist/admin/utils/api.mjs.map +1 -1
- package/dist/admin/utils/attributes.js.map +1 -1
- package/dist/admin/utils/attributes.mjs.map +1 -1
- package/dist/admin/utils/conditionalFields.js +76 -0
- package/dist/admin/utils/conditionalFields.js.map +1 -0
- package/dist/admin/utils/conditionalFields.mjs +69 -0
- package/dist/admin/utils/conditionalFields.mjs.map +1 -0
- package/dist/admin/utils/objects.js.map +1 -1
- package/dist/admin/utils/objects.mjs.map +1 -1
- package/dist/admin/utils/relations.js.map +1 -1
- package/dist/admin/utils/relations.mjs.map +1 -1
- package/dist/admin/utils/strings.js.map +1 -1
- package/dist/admin/utils/strings.mjs.map +1 -1
- package/dist/admin/utils/translations.js.map +1 -1
- package/dist/admin/utils/translations.mjs.map +1 -1
- package/dist/admin/utils/urls.js.map +1 -1
- package/dist/admin/utils/urls.mjs.map +1 -1
- package/dist/admin/utils/users.js.map +1 -1
- package/dist/admin/utils/users.mjs.map +1 -1
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/constants/index.js.map +1 -1
- package/dist/server/constants/index.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +157 -4
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +159 -6
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/components.js.map +1 -1
- package/dist/server/controllers/components.mjs.map +1 -1
- package/dist/server/controllers/content-types.js +10 -10
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/index.js +4 -4
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/controllers/init.js.map +1 -1
- package/dist/server/controllers/init.mjs.map +1 -1
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +3 -3
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +19 -4
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +20 -5
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/controllers/uid.js.map +1 -1
- package/dist/server/controllers/uid.mjs +1 -1
- package/dist/server/controllers/uid.mjs.map +1 -1
- package/dist/server/controllers/utils/clone.js.map +1 -1
- package/dist/server/controllers/utils/clone.mjs.map +1 -1
- package/dist/server/controllers/utils/document-status.js.map +1 -1
- package/dist/server/controllers/utils/document-status.mjs.map +1 -1
- package/dist/server/controllers/utils/metadata.js.map +1 -1
- package/dist/server/controllers/utils/metadata.mjs.map +1 -1
- package/dist/server/controllers/validation/dimensions.js.map +1 -1
- package/dist/server/controllers/validation/dimensions.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/controllers/validation/index.mjs +1 -1
- package/dist/server/controllers/validation/index.mjs.map +1 -1
- package/dist/server/controllers/validation/model-configuration.js +6 -1
- package/dist/server/controllers/validation/model-configuration.js.map +1 -1
- package/dist/server/controllers/validation/model-configuration.mjs +6 -1
- package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
- package/dist/server/controllers/validation/relations.js.map +1 -1
- package/dist/server/controllers/validation/relations.mjs.map +1 -1
- package/dist/server/destroy.js.map +1 -1
- package/dist/server/destroy.mjs.map +1 -1
- package/dist/server/history/constants.js.map +1 -1
- package/dist/server/history/constants.mjs.map +1 -1
- package/dist/server/history/controllers/history-version.js.map +1 -1
- package/dist/server/history/controllers/history-version.mjs.map +1 -1
- package/dist/server/history/controllers/index.js.map +1 -1
- package/dist/server/history/controllers/index.mjs.map +1 -1
- package/dist/server/history/controllers/validation/history-version.js.map +1 -1
- package/dist/server/history/controllers/validation/history-version.mjs.map +1 -1
- package/dist/server/history/index.js +4 -4
- package/dist/server/history/index.js.map +1 -1
- package/dist/server/history/index.mjs.map +1 -1
- package/dist/server/history/models/history-version.js.map +1 -1
- package/dist/server/history/models/history-version.mjs.map +1 -1
- package/dist/server/history/routes/history-version.js.map +1 -1
- package/dist/server/history/routes/history-version.mjs.map +1 -1
- package/dist/server/history/routes/index.js.map +1 -1
- package/dist/server/history/routes/index.mjs.map +1 -1
- package/dist/server/history/services/history.js.map +1 -1
- package/dist/server/history/services/history.mjs.map +1 -1
- package/dist/server/history/services/index.js.map +1 -1
- package/dist/server/history/services/index.mjs.map +1 -1
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs.map +1 -1
- package/dist/server/history/services/utils.js.map +1 -1
- package/dist/server/history/services/utils.mjs.map +1 -1
- package/dist/server/history/utils.js.map +1 -1
- package/dist/server/history/utils.mjs.map +1 -1
- package/dist/server/homepage/controllers/homepage.js.map +1 -1
- package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
- package/dist/server/homepage/controllers/index.js.map +1 -1
- package/dist/server/homepage/controllers/index.mjs.map +1 -1
- package/dist/server/homepage/index.js +6 -6
- package/dist/server/homepage/index.js.map +1 -1
- package/dist/server/homepage/index.mjs.map +1 -1
- package/dist/server/homepage/routes/homepage.js.map +1 -1
- package/dist/server/homepage/routes/homepage.mjs.map +1 -1
- package/dist/server/homepage/routes/index.js.map +1 -1
- package/dist/server/homepage/routes/index.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/homepage/services/index.js.map +1 -1
- package/dist/server/homepage/services/index.mjs.map +1 -1
- package/dist/server/index.js +8 -8
- package/dist/server/middlewares/routing.js.map +1 -1
- package/dist/server/middlewares/routing.mjs.map +1 -1
- package/dist/server/policies/hasPermissions.js.map +1 -1
- package/dist/server/policies/hasPermissions.mjs.map +1 -1
- package/dist/server/policies/index.js.map +1 -1
- package/dist/server/policies/index.mjs.map +1 -1
- package/dist/server/preview/controllers/index.js.map +1 -1
- package/dist/server/preview/controllers/index.mjs.map +1 -1
- package/dist/server/preview/controllers/preview.js.map +1 -1
- package/dist/server/preview/controllers/preview.mjs.map +1 -1
- package/dist/server/preview/controllers/validation/preview.js.map +1 -1
- package/dist/server/preview/controllers/validation/preview.mjs.map +1 -1
- package/dist/server/preview/index.js +4 -4
- package/dist/server/preview/index.js.map +1 -1
- package/dist/server/preview/index.mjs.map +1 -1
- package/dist/server/preview/routes/index.js.map +1 -1
- package/dist/server/preview/routes/index.mjs.map +1 -1
- package/dist/server/preview/routes/preview.js.map +1 -1
- package/dist/server/preview/routes/preview.mjs.map +1 -1
- package/dist/server/preview/services/index.js.map +1 -1
- package/dist/server/preview/services/index.mjs.map +1 -1
- package/dist/server/preview/services/preview-config.js.map +1 -1
- package/dist/server/preview/services/preview-config.mjs +1 -1
- package/dist/server/preview/services/preview-config.mjs.map +1 -1
- package/dist/server/preview/services/preview.js +2 -1
- package/dist/server/preview/services/preview.js.map +1 -1
- package/dist/server/preview/services/preview.mjs +2 -1
- package/dist/server/preview/services/preview.mjs.map +1 -1
- package/dist/server/preview/utils.js.map +1 -1
- package/dist/server/preview/utils.mjs.map +1 -1
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/routes/index.js +4 -4
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/components.js.map +1 -1
- package/dist/server/services/components.mjs.map +1 -1
- package/dist/server/services/configuration.js.map +1 -1
- package/dist/server/services/configuration.mjs.map +1 -1
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/data-mapper.js.map +1 -1
- package/dist/server/services/data-mapper.mjs.map +1 -1
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +2 -2
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +2 -2
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/field-sizes.js.map +1 -1
- package/dist/server/services/field-sizes.mjs.map +1 -1
- package/dist/server/services/index.js +4 -4
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/metrics.js.map +1 -1
- package/dist/server/services/metrics.mjs.map +1 -1
- package/dist/server/services/permission-checker.js.map +1 -1
- package/dist/server/services/permission-checker.mjs.map +1 -1
- package/dist/server/services/permission.js.map +1 -1
- package/dist/server/services/permission.mjs.map +1 -1
- package/dist/server/services/populate-builder.js.map +1 -1
- package/dist/server/services/populate-builder.mjs +4 -4
- package/dist/server/services/populate-builder.mjs.map +1 -1
- package/dist/server/services/uid.js.map +1 -1
- package/dist/server/services/uid.mjs.map +1 -1
- package/dist/server/services/utils/configuration/attributes.js.map +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
- package/dist/server/services/utils/configuration/index.js.map +1 -1
- package/dist/server/services/utils/configuration/index.mjs +3 -3
- package/dist/server/services/utils/configuration/index.mjs.map +1 -1
- package/dist/server/services/utils/configuration/layouts.js.map +1 -1
- package/dist/server/services/utils/configuration/layouts.mjs +1 -1
- package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.mjs +1 -1
- package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
- package/dist/server/services/utils/configuration/settings.js +4 -2
- package/dist/server/services/utils/configuration/settings.js.map +1 -1
- package/dist/server/services/utils/configuration/settings.mjs +5 -3
- package/dist/server/services/utils/configuration/settings.mjs.map +1 -1
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +1 -1
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/services/utils/store.js.map +1 -1
- package/dist/server/services/utils/store.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/single-types.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/server/validation/policies/hasPermissions.js.map +1 -1
- package/dist/server/validation/policies/hasPermissions.mjs.map +1 -1
- package/dist/shared/contracts/content-types.d.ts +2 -0
- package/dist/shared/contracts/content-types.d.ts.map +1 -1
- package/dist/shared/contracts/relations.d.ts +1 -1
- package/dist/shared/contracts/relations.d.ts.map +1 -1
- package/package.json +15 -10
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import 'react';
|
|
3
3
|
import { Typography } from '@strapi/design-system';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { BulletList, NumberList } from '@strapi/icons';
|
|
5
|
+
import { Editor, Path, Transforms, Node } from 'slate';
|
|
6
6
|
import { ReactEditor } from 'slate-react';
|
|
7
7
|
import { css, styled } from 'styled-components';
|
|
8
8
|
import { baseHandleConvert } from '../utils/conversions.mjs';
|
|
@@ -302,6 +302,55 @@ const isText = (node)=>{
|
|
|
302
302
|
});
|
|
303
303
|
}
|
|
304
304
|
};
|
|
305
|
+
/**
|
|
306
|
+
* Common handler for the shift+tab key on ordered and unordered lists (un-indentation)
|
|
307
|
+
*/ const hasChildren = (node)=>{
|
|
308
|
+
return typeof node === 'object' && node !== null && 'children' in node;
|
|
309
|
+
};
|
|
310
|
+
const handleShiftTabOnList = (editor)=>{
|
|
311
|
+
const currentListItemEntry = Editor.above(editor, {
|
|
312
|
+
match: (node)=>!Editor.isEditor(node) && 'type' in node && node.type === 'list-item'
|
|
313
|
+
});
|
|
314
|
+
if (!currentListItemEntry || !editor.selection) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
const [, currentListItemPath] = currentListItemEntry;
|
|
318
|
+
const [currentList] = Editor.parent(editor, currentListItemPath);
|
|
319
|
+
if (!Editor.isEditor(currentList) && hasChildren(currentList) && currentList.type === 'list') {
|
|
320
|
+
const parentListPath = Path.parent(currentListItemPath);
|
|
321
|
+
const [parentList] = Editor.parent(editor, parentListPath);
|
|
322
|
+
// Case 1: The parent of the current list is the editor itself.
|
|
323
|
+
if (Editor.isEditor(parentList)) {
|
|
324
|
+
// Lift the list item to the top level of the editor's children.
|
|
325
|
+
Transforms.liftNodes(editor, {
|
|
326
|
+
at: currentListItemPath,
|
|
327
|
+
match: (node)=>!Editor.isEditor(node) && 'type' in node && node.type === 'list-item'
|
|
328
|
+
});
|
|
329
|
+
// Change the type of the newly lifted node from 'list-item' to 'paragraph'.
|
|
330
|
+
Transforms.setNodes(editor, {
|
|
331
|
+
type: 'paragraph'
|
|
332
|
+
});
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
// Case 2: The parent of the current list is another list.
|
|
336
|
+
if (hasChildren(parentList) && parentList.type === 'list') {
|
|
337
|
+
Transforms.liftNodes(editor, {
|
|
338
|
+
at: currentListItemPath,
|
|
339
|
+
match: (node)=>!Editor.isEditor(node) && 'type' in node && node.type === 'list-item'
|
|
340
|
+
});
|
|
341
|
+
try {
|
|
342
|
+
const [remainingList, remainingListPath] = Editor.node(editor, parentListPath);
|
|
343
|
+
if (hasChildren(remainingList) && remainingList.type === 'list' && remainingList.children.length === 0) {
|
|
344
|
+
Transforms.removeNodes(editor, {
|
|
345
|
+
at: remainingListPath
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
} catch (error) {
|
|
349
|
+
// The path might no longer exist if the structure changed, which is fine
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
};
|
|
305
354
|
// All that's in common between ordered and unordered list blocks
|
|
306
355
|
const baseListBlock = {
|
|
307
356
|
renderElement: (props)=>/*#__PURE__*/ jsx(List, {
|
|
@@ -329,6 +378,7 @@ const listBlocks = {
|
|
|
329
378
|
icon: NumberList,
|
|
330
379
|
matchNode: (node)=>node.type === 'list' && node.format === 'ordered',
|
|
331
380
|
handleConvert: (editor)=>handleConvertToList(editor, 'ordered'),
|
|
381
|
+
handleShiftTab: handleShiftTabOnList,
|
|
332
382
|
snippets: [
|
|
333
383
|
'1.'
|
|
334
384
|
]
|
|
@@ -342,6 +392,7 @@ const listBlocks = {
|
|
|
342
392
|
icon: BulletList,
|
|
343
393
|
matchNode: (node)=>node.type === 'list' && node.format === 'unordered',
|
|
344
394
|
handleConvert: (editor)=>handleConvertToList(editor, 'unordered'),
|
|
395
|
+
handleShiftTab: handleShiftTabOnList,
|
|
345
396
|
snippets: [
|
|
346
397
|
'-',
|
|
347
398
|
'*',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { BulletList, NumberList } from '@strapi/icons';\nimport { Schema } from '@strapi/types';\nimport { type Text, Editor, Node, Transforms, Path, Element } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled, type CSSProperties, css } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst listStyle = css`\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[2]};\n margin-inline-start: ${({ theme }) => theme.spaces[0]};\n margin-inline-end: ${({ theme }) => theme.spaces[0]};\n padding-inline-start: ${({ theme }) => theme.spaces[2]};\n\n ol,\n ul {\n margin-block-start: ${({ theme }) => theme.spaces[0]};\n margin-block-end: ${({ theme }) => theme.spaces[0]};\n }\n\n li {\n margin-inline-start: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Orderedlist = styled.ol<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst Unorderedlist = styled.ul<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst orderedStyles = ['decimal', 'lower-alpha', 'upper-roman'];\nconst unorderedStyles = ['disc', 'circle', 'square'];\n\nconst isListNode = (element: Element): element is Schema.Attribute.ListBlockNode => {\n return element.type === 'list';\n};\n\nconst List = ({ attributes, children, element }: RenderElementProps) => {\n if (!isListNode(element)) {\n return null;\n }\n\n // Decide the subsequent style by referencing the given styles according to the format,\n // allowing for infinite nested lists\n const listStyles = element.format === 'ordered' ? orderedStyles : unorderedStyles;\n const nextIndex = (element.indentLevel || 0) % listStyles!.length;\n const listStyleType = listStyles![nextIndex];\n\n if (element.format === 'ordered') {\n return (\n <Orderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Orderedlist>\n );\n }\n\n return (\n <Unorderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Unorderedlist>\n );\n};\n\nconst replaceListWithEmptyBlock = (editor: Editor, currentListPath: Path) => {\n // Delete the empty list\n Transforms.removeNodes(editor, { at: currentListPath });\n\n if (currentListPath[0] === 0) {\n // If the list was the only (or first) block element then insert empty paragraph as editor needs default value\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: currentListPath }\n );\n Transforms.select(editor, currentListPath);\n }\n};\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * Common handler for the backspace event on ordered and unordered lists\n */\nconst handleBackspaceKeyOnList = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const [currentListItem, currentListItemPath] = Editor.parent(editor, editor.selection.anchor);\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-2) === 0;\n\n if (isListEmpty) {\n const parentListEntry = Editor.above(editor, {\n at: currentListPath,\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n if (!parentListEntry) {\n event.preventDefault();\n replaceListWithEmptyBlock(editor, currentListPath);\n }\n } else if (isFocusAtTheBeginningOfAChild) {\n // If the focus is at the beginning of a child node we need to replace it with a paragraph\n Transforms.liftNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n Transforms.setNodes(editor, { type: 'paragraph' });\n } else if (isListItemEmpty) {\n const previousEntry = Editor.previous(editor, {\n at: currentListItemPath,\n });\n const nextEntry = Editor.next(editor, {\n at: currentListItemPath,\n });\n\n if (previousEntry && nextEntry) {\n // If previous and next nodes are lists or list-items, delete empty list item\n event.preventDefault();\n Transforms.removeNodes(editor, {\n at: currentListItemPath,\n });\n\n // If previous and next nodes are lists with same format and indent Levels, then merge the nodes\n const [previousList] = previousEntry;\n const [nextList] = nextEntry;\n if (\n !Editor.isEditor(previousList) &&\n !isText(previousList) &&\n isListNode(previousList) &&\n !Editor.isEditor(nextList) &&\n !isText(nextList) &&\n isListNode(nextList)\n ) {\n if (\n previousList.type === 'list' &&\n nextList.type === 'list' &&\n previousList.format === nextList.format &&\n previousList.indentLevel === nextList.indentLevel\n ) {\n Transforms.mergeNodes(editor, {\n at: currentListItemPath,\n });\n }\n }\n }\n }\n};\n\n/**\n * Common handler for the enter key on ordered and unordered lists\n */\nconst handleEnterKeyOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-1) === 0;\n\n if (isListEmpty) {\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isFocusAtTheBeginningOfAChild && !isListItemEmpty) {\n // If the focus is at the beginning of a child node, shift below the list item and create a new list-item\n const currentNode = Editor.above(editor, { at: editor.selection.anchor });\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n if (currentNode) {\n const path = currentNode[1];\n const updatedPath = [...path.slice(0, -1), path[path.length - 1] + 1];\n Transforms.select(editor, {\n anchor: { path: updatedPath.concat(0), offset: 0 },\n focus: { path: updatedPath.concat(0), offset: 0 },\n });\n }\n } else if (isListItemEmpty) {\n // Check if there is a list above the current list and shift list-item under it\n if (\n !Editor.isEditor(currentList) &&\n isListNode(currentList) &&\n currentList?.indentLevel &&\n currentList.indentLevel > 0\n ) {\n const previousIndentLevel = currentList.indentLevel - 1;\n\n const parentListNodeEntry = Editor.above(editor, {\n match: (node) =>\n !Editor.isEditor(node) &&\n node.type === 'list' &&\n (node.indentLevel || 0) === previousIndentLevel,\n });\n\n if (parentListNodeEntry) {\n // Get the parent list path and add 1 to it to exit from the current list\n const modifiedPath = currentListItemPath.slice(0, -1);\n if (modifiedPath.length > 0) {\n modifiedPath[modifiedPath.length - 1] += 1;\n }\n\n // Shift list-item under parent list\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: modifiedPath,\n });\n return;\n }\n }\n\n // Otherwise delete the empty list item and create a new paragraph below the parent list\n Transforms.removeNodes(editor, { at: currentListItemPath });\n\n const createdParagraphPath = Path.next(currentListPath);\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: createdParagraphPath }\n );\n\n // Move the selection to the newly created paragraph\n Transforms.select(editor, createdParagraphPath);\n } else {\n // Check if the cursor is at the end of the list item\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, currentListItemPath);\n\n if (isNodeEnd) {\n // If there was nothing after the cursor, create a fresh new list item,\n // in order to avoid carrying over the modifiers from the previous list item\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n } else {\n // If there is something after the cursor, split the current list item,\n // so that we keep the content and the modifiers\n Transforms.splitNodes(editor);\n }\n }\n};\n\n/**\n * Common handler for converting a node to a list\n */\nconst handleConvertToList = (editor: Editor, format: Block<'list'>['format']) => {\n const convertedPath = baseHandleConvert<Block<'list-item'>>(editor, { type: 'list-item' });\n\n if (!convertedPath) return;\n\n Transforms.wrapNodes(editor, { type: 'list', format, children: [] }, { at: convertedPath });\n};\n\n/**\n * Common handler for the tab key on ordered and unordered lists\n */\nconst handleTabOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList] = Editor.parent(editor, currentListItemPath);\n\n // Skip tabbing if list-item is the first item in the list\n if (currentListItem === currentList.children[0]) return;\n\n const currentListItemIndex = currentList.children.findIndex((item) => item === currentListItem);\n const previousNode = currentList.children[currentListItemIndex - 1];\n\n // If previous node is a list block then move the list-item under it\n if (previousNode.type === 'list') {\n const nodePath = ReactEditor.findPath(editor, previousNode);\n const insertAtPath = previousNode.children.length;\n\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: nodePath.concat(insertAtPath),\n });\n return;\n }\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Wrap list-item with list block on tab\n Transforms.wrapNodes(editor, {\n type: 'list',\n format: currentList.format,\n indentLevel: (currentList.indentLevel || 0) + 1,\n children: [],\n });\n }\n};\n\n// All that's in common between ordered and unordered list blocks\nconst baseListBlock = {\n renderElement: (props) => <List {...props} />,\n isInBlocksSelector: true,\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n isDraggable: (element) => {\n if (!isListNode(element)) {\n throw Error();\n }\n const indentLevel = element.indentLevel ?? 0;\n return indentLevel === 0;\n },\n} satisfies Partial<BlocksStore['list-ordered' | 'list-unordered']>;\n\nconst listBlocks: Pick<BlocksStore, 'list-ordered' | 'list-unordered' | 'list-item'> = {\n 'list-ordered': {\n ...baseListBlock,\n label: {\n id: 'components.Blocks.blocks.orderedList',\n defaultMessage: 'Numbered list',\n },\n icon: NumberList,\n matchNode: (node) => node.type === 'list' && node.format === 'ordered',\n handleConvert: (editor) => handleConvertToList(editor, 'ordered'),\n snippets: ['1.'],\n },\n 'list-unordered': {\n ...baseListBlock,\n label: {\n id: 'components.Blocks.blocks.unorderedList',\n defaultMessage: 'Bulleted list',\n },\n icon: BulletList,\n matchNode: (node) => node.type === 'list' && node.format === 'unordered',\n handleConvert: (editor) => handleConvertToList(editor, 'unordered'),\n snippets: ['-', '*', '+'],\n },\n 'list-item': {\n renderElement: (props) => (\n <Typography tag=\"li\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n // No handleConvert, list items are created when converting to the parent list\n matchNode: (node) => node.type === 'list-item',\n isInBlocksSelector: false,\n dragHandleTopMargin: '-2px',\n isDraggable: () => false,\n },\n};\n\nexport { listBlocks };\n"],"names":["listStyle","css","theme","spaces","Orderedlist","styled","ol","props","$listStyleType","Unorderedlist","ul","orderedStyles","unorderedStyles","isListNode","element","type","List","attributes","children","listStyles","format","nextIndex","indentLevel","length","listStyleType","_jsx","replaceListWithEmptyBlock","editor","currentListPath","Transforms","removeNodes","at","insertNodes","text","select","isText","node","Node","isNode","Editor","isEditor","handleBackspaceKeyOnList","event","selection","currentListItem","currentListItemPath","parent","anchor","currentList","isListEmpty","isListItemEmpty","isFocusAtTheBeginningOfAChild","focus","offset","path","parentListEntry","above","match","preventDefault","liftNodes","setNodes","previousEntry","previous","nextEntry","next","previousList","nextList","mergeNodes","handleEnterKeyOnList","currentListItemEntry","currentNode","updatedPath","slice","concat","previousIndentLevel","parentListNodeEntry","modifiedPath","moveNodes","to","createdParagraphPath","Path","isNodeEnd","isEnd","splitNodes","handleConvertToList","convertedPath","baseHandleConvert","wrapNodes","handleTabOnList","currentListItemIndex","findIndex","item","previousNode","nodePath","ReactEditor","findPath","insertAtPath","baseListBlock","renderElement","isInBlocksSelector","handleEnterKey","handleBackspaceKey","handleTab","isDraggable","Error","listBlocks","label","id","defaultMessage","icon","NumberList","matchNode","handleConvert","snippets","BulletList","Typography","tag","dragHandleTopMargin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"List.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { BulletList, NumberList } from '@strapi/icons';\nimport { Schema } from '@strapi/types';\nimport { type Text, Editor, Node, Transforms, Path, Element } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled, type CSSProperties, css } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst listStyle = css`\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[2]};\n margin-inline-start: ${({ theme }) => theme.spaces[0]};\n margin-inline-end: ${({ theme }) => theme.spaces[0]};\n padding-inline-start: ${({ theme }) => theme.spaces[2]};\n\n ol,\n ul {\n margin-block-start: ${({ theme }) => theme.spaces[0]};\n margin-block-end: ${({ theme }) => theme.spaces[0]};\n }\n\n li {\n margin-inline-start: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Orderedlist = styled.ol<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst Unorderedlist = styled.ul<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst orderedStyles = ['decimal', 'lower-alpha', 'upper-roman'];\nconst unorderedStyles = ['disc', 'circle', 'square'];\n\nconst isListNode = (element: Element): element is Schema.Attribute.ListBlockNode => {\n return element.type === 'list';\n};\n\nconst List = ({ attributes, children, element }: RenderElementProps) => {\n if (!isListNode(element)) {\n return null;\n }\n\n // Decide the subsequent style by referencing the given styles according to the format,\n // allowing for infinite nested lists\n const listStyles = element.format === 'ordered' ? orderedStyles : unorderedStyles;\n const nextIndex = (element.indentLevel || 0) % listStyles!.length;\n const listStyleType = listStyles![nextIndex];\n\n if (element.format === 'ordered') {\n return (\n <Orderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Orderedlist>\n );\n }\n\n return (\n <Unorderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Unorderedlist>\n );\n};\n\nconst replaceListWithEmptyBlock = (editor: Editor, currentListPath: Path) => {\n // Delete the empty list\n Transforms.removeNodes(editor, { at: currentListPath });\n\n if (currentListPath[0] === 0) {\n // If the list was the only (or first) block element then insert empty paragraph as editor needs default value\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: currentListPath }\n );\n Transforms.select(editor, currentListPath);\n }\n};\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * Common handler for the backspace event on ordered and unordered lists\n */\nconst handleBackspaceKeyOnList = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const [currentListItem, currentListItemPath] = Editor.parent(editor, editor.selection.anchor);\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-2) === 0;\n\n if (isListEmpty) {\n const parentListEntry = Editor.above(editor, {\n at: currentListPath,\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n if (!parentListEntry) {\n event.preventDefault();\n replaceListWithEmptyBlock(editor, currentListPath);\n }\n } else if (isFocusAtTheBeginningOfAChild) {\n // If the focus is at the beginning of a child node we need to replace it with a paragraph\n Transforms.liftNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n Transforms.setNodes(editor, { type: 'paragraph' });\n } else if (isListItemEmpty) {\n const previousEntry = Editor.previous(editor, {\n at: currentListItemPath,\n });\n const nextEntry = Editor.next(editor, {\n at: currentListItemPath,\n });\n\n if (previousEntry && nextEntry) {\n // If previous and next nodes are lists or list-items, delete empty list item\n event.preventDefault();\n Transforms.removeNodes(editor, {\n at: currentListItemPath,\n });\n\n // If previous and next nodes are lists with same format and indent Levels, then merge the nodes\n const [previousList] = previousEntry;\n const [nextList] = nextEntry;\n if (\n !Editor.isEditor(previousList) &&\n !isText(previousList) &&\n isListNode(previousList) &&\n !Editor.isEditor(nextList) &&\n !isText(nextList) &&\n isListNode(nextList)\n ) {\n if (\n previousList.type === 'list' &&\n nextList.type === 'list' &&\n previousList.format === nextList.format &&\n previousList.indentLevel === nextList.indentLevel\n ) {\n Transforms.mergeNodes(editor, {\n at: currentListItemPath,\n });\n }\n }\n }\n }\n};\n\n/**\n * Common handler for the enter key on ordered and unordered lists\n */\nconst handleEnterKeyOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-1) === 0;\n\n if (isListEmpty) {\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isFocusAtTheBeginningOfAChild && !isListItemEmpty) {\n // If the focus is at the beginning of a child node, shift below the list item and create a new list-item\n const currentNode = Editor.above(editor, { at: editor.selection.anchor });\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n if (currentNode) {\n const path = currentNode[1];\n const updatedPath = [...path.slice(0, -1), path[path.length - 1] + 1];\n Transforms.select(editor, {\n anchor: { path: updatedPath.concat(0), offset: 0 },\n focus: { path: updatedPath.concat(0), offset: 0 },\n });\n }\n } else if (isListItemEmpty) {\n // Check if there is a list above the current list and shift list-item under it\n if (\n !Editor.isEditor(currentList) &&\n isListNode(currentList) &&\n currentList?.indentLevel &&\n currentList.indentLevel > 0\n ) {\n const previousIndentLevel = currentList.indentLevel - 1;\n\n const parentListNodeEntry = Editor.above(editor, {\n match: (node) =>\n !Editor.isEditor(node) &&\n node.type === 'list' &&\n (node.indentLevel || 0) === previousIndentLevel,\n });\n\n if (parentListNodeEntry) {\n // Get the parent list path and add 1 to it to exit from the current list\n const modifiedPath = currentListItemPath.slice(0, -1);\n if (modifiedPath.length > 0) {\n modifiedPath[modifiedPath.length - 1] += 1;\n }\n\n // Shift list-item under parent list\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: modifiedPath,\n });\n return;\n }\n }\n\n // Otherwise delete the empty list item and create a new paragraph below the parent list\n Transforms.removeNodes(editor, { at: currentListItemPath });\n\n const createdParagraphPath = Path.next(currentListPath);\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: createdParagraphPath }\n );\n\n // Move the selection to the newly created paragraph\n Transforms.select(editor, createdParagraphPath);\n } else {\n // Check if the cursor is at the end of the list item\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, currentListItemPath);\n\n if (isNodeEnd) {\n // If there was nothing after the cursor, create a fresh new list item,\n // in order to avoid carrying over the modifiers from the previous list item\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n } else {\n // If there is something after the cursor, split the current list item,\n // so that we keep the content and the modifiers\n Transforms.splitNodes(editor);\n }\n }\n};\n\n/**\n * Common handler for converting a node to a list\n */\nconst handleConvertToList = (editor: Editor, format: Block<'list'>['format']) => {\n const convertedPath = baseHandleConvert<Block<'list-item'>>(editor, { type: 'list-item' });\n\n if (!convertedPath) return;\n\n Transforms.wrapNodes(editor, { type: 'list', format, children: [] }, { at: convertedPath });\n};\n\n/**\n * Common handler for the tab key on ordered and unordered lists\n */\nconst handleTabOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList] = Editor.parent(editor, currentListItemPath);\n\n // Skip tabbing if list-item is the first item in the list\n if (currentListItem === currentList.children[0]) return;\n\n const currentListItemIndex = currentList.children.findIndex((item) => item === currentListItem);\n const previousNode = currentList.children[currentListItemIndex - 1];\n\n // If previous node is a list block then move the list-item under it\n if (previousNode.type === 'list') {\n const nodePath = ReactEditor.findPath(editor, previousNode);\n const insertAtPath = previousNode.children.length;\n\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: nodePath.concat(insertAtPath),\n });\n return;\n }\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Wrap list-item with list block on tab\n Transforms.wrapNodes(editor, {\n type: 'list',\n format: currentList.format,\n indentLevel: (currentList.indentLevel || 0) + 1,\n children: [],\n });\n }\n};\n\n/**\n * Common handler for the shift+tab key on ordered and unordered lists (un-indentation)\n */\n\nconst hasChildren = (node: any): node is { children: unknown[] } => {\n return typeof node === 'object' && node !== null && 'children' in node;\n};\n\nconst handleShiftTabOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && 'type' in node && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [, currentListItemPath] = currentListItemEntry;\n\n const [currentList] = Editor.parent(editor, currentListItemPath);\n\n if (\n !Editor.isEditor(currentList) &&\n hasChildren(currentList) &&\n (currentList as any).type === 'list'\n ) {\n const parentListPath = Path.parent(currentListItemPath);\n\n const [parentList] = Editor.parent(editor, parentListPath);\n\n // Case 1: The parent of the current list is the editor itself.\n if (Editor.isEditor(parentList)) {\n // Lift the list item to the top level of the editor's children.\n Transforms.liftNodes(editor, {\n at: currentListItemPath,\n match: (node) => !Editor.isEditor(node) && 'type' in node && node.type === 'list-item',\n });\n // Change the type of the newly lifted node from 'list-item' to 'paragraph'.\n Transforms.setNodes(editor, { type: 'paragraph' });\n return;\n }\n\n // Case 2: The parent of the current list is another list.\n if (hasChildren(parentList) && (parentList as any).type === 'list') {\n Transforms.liftNodes(editor, {\n at: currentListItemPath,\n match: (node) => !Editor.isEditor(node) && 'type' in node && node.type === 'list-item',\n });\n\n try {\n const [remainingList, remainingListPath] = Editor.node(editor, parentListPath);\n\n if (\n hasChildren(remainingList) &&\n (remainingList as any).type === 'list' &&\n remainingList.children.length === 0\n ) {\n Transforms.removeNodes(editor, { at: remainingListPath });\n }\n } catch (error) {\n // The path might no longer exist if the structure changed, which is fine\n }\n }\n }\n};\n\n// All that's in common between ordered and unordered list blocks\nconst baseListBlock = {\n renderElement: (props) => <List {...props} />,\n isInBlocksSelector: true,\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n isDraggable: (element) => {\n if (!isListNode(element)) {\n throw Error();\n }\n const indentLevel = element.indentLevel ?? 0;\n return indentLevel === 0;\n },\n} satisfies Partial<BlocksStore['list-ordered' | 'list-unordered']>;\n\nconst listBlocks: Pick<BlocksStore, 'list-ordered' | 'list-unordered' | 'list-item'> = {\n 'list-ordered': {\n ...baseListBlock,\n label: {\n id: 'components.Blocks.blocks.orderedList',\n defaultMessage: 'Numbered list',\n },\n icon: NumberList,\n matchNode: (node) => node.type === 'list' && node.format === 'ordered',\n handleConvert: (editor) => handleConvertToList(editor, 'ordered'),\n handleShiftTab: handleShiftTabOnList,\n snippets: ['1.'],\n },\n 'list-unordered': {\n ...baseListBlock,\n label: {\n id: 'components.Blocks.blocks.unorderedList',\n defaultMessage: 'Bulleted list',\n },\n icon: BulletList,\n matchNode: (node) => node.type === 'list' && node.format === 'unordered',\n handleConvert: (editor) => handleConvertToList(editor, 'unordered'),\n handleShiftTab: handleShiftTabOnList,\n snippets: ['-', '*', '+'],\n },\n 'list-item': {\n renderElement: (props) => (\n <Typography tag=\"li\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n // No handleConvert, list items are created when converting to the parent list\n matchNode: (node) => node.type === 'list-item',\n isInBlocksSelector: false,\n dragHandleTopMargin: '-2px',\n isDraggable: () => false,\n },\n};\n\nexport { listBlocks };\n"],"names":["listStyle","css","theme","spaces","Orderedlist","styled","ol","props","$listStyleType","Unorderedlist","ul","orderedStyles","unorderedStyles","isListNode","element","type","List","attributes","children","listStyles","format","nextIndex","indentLevel","length","listStyleType","_jsx","replaceListWithEmptyBlock","editor","currentListPath","Transforms","removeNodes","at","insertNodes","text","select","isText","node","Node","isNode","Editor","isEditor","handleBackspaceKeyOnList","event","selection","currentListItem","currentListItemPath","parent","anchor","currentList","isListEmpty","isListItemEmpty","isFocusAtTheBeginningOfAChild","focus","offset","path","parentListEntry","above","match","preventDefault","liftNodes","setNodes","previousEntry","previous","nextEntry","next","previousList","nextList","mergeNodes","handleEnterKeyOnList","currentListItemEntry","currentNode","updatedPath","slice","concat","previousIndentLevel","parentListNodeEntry","modifiedPath","moveNodes","to","createdParagraphPath","Path","isNodeEnd","isEnd","splitNodes","handleConvertToList","convertedPath","baseHandleConvert","wrapNodes","handleTabOnList","currentListItemIndex","findIndex","item","previousNode","nodePath","ReactEditor","findPath","insertAtPath","hasChildren","handleShiftTabOnList","parentListPath","parentList","remainingList","remainingListPath","error","baseListBlock","renderElement","isInBlocksSelector","handleEnterKey","handleBackspaceKey","handleTab","isDraggable","Error","listBlocks","label","id","defaultMessage","icon","NumberList","matchNode","handleConvert","handleShiftTab","snippets","BulletList","Typography","tag","dragHandleTopMargin"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Paragraph.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { Paragraph } from '@strapi/icons';\nimport { type Text, Editor, Transforms } from 'slate';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst paragraphBlocks: Pick<BlocksStore, 'paragraph'> = {\n paragraph: {\n renderElement: (props) => (\n <Typography tag=\"p\" variant=\"omega\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n icon: Paragraph,\n label: {\n id: 'components.Blocks.blocks.text',\n defaultMessage: 'Text',\n },\n matchNode: (node) => node.type === 'paragraph',\n isInBlocksSelector: true,\n dragHandleTopMargin: '-2px',\n handleConvert(editor) {\n baseHandleConvert<Block<'paragraph'>>(editor, { type: 'paragraph' });\n },\n handleEnterKey(editor) {\n if (!editor.selection) {\n return;\n }\n\n // We need to keep track of the initial position of the cursor\n const anchorPathInitialPosition = editor.selection.anchor.path;\n /**\n * Split the nodes where the cursor is. This will create a new paragraph with the content\n * after the cursor, while retaining all the children, modifiers etc.\n */\n Transforms.splitNodes(editor, {\n // Makes sure we always create a new node,\n // even if there's nothing to the right of the cursor in the node.\n always: true,\n });\n\n // Check if the created node is empty (if there was no text after the cursor in the node)\n // This lets us know if we need to carry over the modifiers from the previous node\n const parentBlockEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n if (!parentBlockEntry) {\n return;\n }\n const [, parentBlockPath] = parentBlockEntry;\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, parentBlockPath);\n\n /**\n * Delete and recreate the node that was created at the right of the cursor.\n * This is to avoid node pollution\n * (e.g. keeping the level attribute when converting a heading to a paragraph).\n * Select the parent of the selection because we want the full block, not the leaf.\n * And copy its children to make sure we keep the modifiers.\n */\n const [fragmentedNode] = Editor.parent(editor, editor.selection.anchor.path);\n Transforms.removeNodes(editor);\n\n // Check if after the current position there is another node\n const hasNextNode = editor.children.length - anchorPathInitialPosition[0] > 1;\n\n // Insert the new node at the right position.\n // The next line after the editor selection if present or otherwise at the end of the editor.\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n // Don't carry over the modifiers from the previous node if there was no text after the cursor\n children: (isNodeEnd ? [{ type: 'text', text: '' }] : fragmentedNode.children) as Text[],\n },\n {\n at: hasNextNode ? [anchorPathInitialPosition[0] + 1] : [editor.children.length],\n }\n );\n\n /**\n * The new selection will by default be at the end of the created node.\n * Instead we manually move it to the start of the created node.\n * Make sure to we go to the start of the node and not the start of the leaf.\n */\n Transforms.select(editor, editor.start([anchorPathInitialPosition[0] + 1]));\n },\n },\n};\n\nexport { paragraphBlocks };\n"],"names":["paragraphBlocks","paragraph","renderElement","props","_jsx","Typography","tag","variant","attributes","children","icon","Paragraph","label","id","defaultMessage","matchNode","node","type","isInBlocksSelector","dragHandleTopMargin","handleConvert","editor","baseHandleConvert","handleEnterKey","selection","anchorPathInitialPosition","anchor","path","Transforms","splitNodes","always","parentBlockEntry","Editor","above","match","isEditor","parentBlockPath","isNodeEnd","isEnd","fragmentedNode","parent","removeNodes","hasNextNode","length","insertNodes","text","at","select","start"],"mappings":";;;;;;;;;AAUA,MAAMA,
|
|
1
|
+
{"version":3,"file":"Paragraph.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { Paragraph } from '@strapi/icons';\nimport { type Text, Editor, Transforms } from 'slate';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst paragraphBlocks: Pick<BlocksStore, 'paragraph'> = {\n paragraph: {\n renderElement: (props) => (\n <Typography tag=\"p\" variant=\"omega\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n icon: Paragraph,\n label: {\n id: 'components.Blocks.blocks.text',\n defaultMessage: 'Text',\n },\n matchNode: (node) => node.type === 'paragraph',\n isInBlocksSelector: true,\n dragHandleTopMargin: '-2px',\n handleConvert(editor) {\n baseHandleConvert<Block<'paragraph'>>(editor, { type: 'paragraph' });\n },\n handleEnterKey(editor) {\n if (!editor.selection) {\n return;\n }\n\n // We need to keep track of the initial position of the cursor\n const anchorPathInitialPosition = editor.selection.anchor.path;\n /**\n * Split the nodes where the cursor is. This will create a new paragraph with the content\n * after the cursor, while retaining all the children, modifiers etc.\n */\n Transforms.splitNodes(editor, {\n // Makes sure we always create a new node,\n // even if there's nothing to the right of the cursor in the node.\n always: true,\n });\n\n // Check if the created node is empty (if there was no text after the cursor in the node)\n // This lets us know if we need to carry over the modifiers from the previous node\n const parentBlockEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n if (!parentBlockEntry) {\n return;\n }\n const [, parentBlockPath] = parentBlockEntry;\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, parentBlockPath);\n\n /**\n * Delete and recreate the node that was created at the right of the cursor.\n * This is to avoid node pollution\n * (e.g. keeping the level attribute when converting a heading to a paragraph).\n * Select the parent of the selection because we want the full block, not the leaf.\n * And copy its children to make sure we keep the modifiers.\n */\n const [fragmentedNode] = Editor.parent(editor, editor.selection.anchor.path);\n Transforms.removeNodes(editor);\n\n // Check if after the current position there is another node\n const hasNextNode = editor.children.length - anchorPathInitialPosition[0] > 1;\n\n // Insert the new node at the right position.\n // The next line after the editor selection if present or otherwise at the end of the editor.\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n // Don't carry over the modifiers from the previous node if there was no text after the cursor\n children: (isNodeEnd ? [{ type: 'text', text: '' }] : fragmentedNode.children) as Text[],\n },\n {\n at: hasNextNode ? [anchorPathInitialPosition[0] + 1] : [editor.children.length],\n }\n );\n\n /**\n * The new selection will by default be at the end of the created node.\n * Instead we manually move it to the start of the created node.\n * Make sure to we go to the start of the node and not the start of the leaf.\n */\n Transforms.select(editor, editor.start([anchorPathInitialPosition[0] + 1]));\n },\n },\n};\n\nexport { paragraphBlocks };\n"],"names":["paragraphBlocks","paragraph","renderElement","props","_jsx","Typography","tag","variant","attributes","children","icon","Paragraph","label","id","defaultMessage","matchNode","node","type","isInBlocksSelector","dragHandleTopMargin","handleConvert","editor","baseHandleConvert","handleEnterKey","selection","anchorPathInitialPosition","anchor","path","Transforms","splitNodes","always","parentBlockEntry","Editor","above","match","isEditor","parentBlockPath","isNodeEnd","isEnd","fragmentedNode","parent","removeNodes","hasNextNode","length","insertNodes","text","at","select","start"],"mappings":";;;;;;;;;AAUA,MAAMA,eAAAA,GAAkD;IACtDC,SAAAA,EAAW;QACTC,aAAAA,EAAe,CAACC,sBACdC,cAAA,CAACC,uBAAAA,EAAAA;gBAAWC,GAAAA,EAAI,GAAA;gBAAIC,OAAAA,EAAQ,OAAA;AAAS,gBAAA,GAAGJ,MAAMK,UAAU;AACrDL,gBAAAA,QAAAA,EAAAA,KAAAA,CAAMM;;QAGXC,IAAAA,EAAMC,eAAAA;QACNC,KAAAA,EAAO;YACLC,EAAAA,EAAI,+BAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;AACAC,QAAAA,SAAAA,EAAW,CAACC,IAAAA,GAASA,IAAAA,CAAKC,IAAI,KAAK,WAAA;QACnCC,kBAAAA,EAAoB,IAAA;QACpBC,mBAAAA,EAAqB,MAAA;AACrBC,QAAAA,aAAAA,CAAAA,CAAcC,MAAM,EAAA;AAClBC,YAAAA,6BAAAA,CAAsCD,MAAAA,EAAQ;gBAAEJ,IAAAA,EAAM;AAAY,aAAA,CAAA;AACpE,QAAA,CAAA;AACAM,QAAAA,cAAAA,CAAAA,CAAeF,MAAM,EAAA;YACnB,IAAI,CAACA,MAAAA,CAAOG,SAAS,EAAE;AACrB,gBAAA;AACF,YAAA;;AAGA,YAAA,MAAMC,4BAA4BJ,MAAAA,CAAOG,SAAS,CAACE,MAAM,CAACC,IAAI;AAC9D;;;UAIAC,gBAAAA,CAAWC,UAAU,CAACR,MAAAA,EAAQ;;;gBAG5BS,MAAAA,EAAQ;AACV,aAAA,CAAA;;;AAIA,YAAA,MAAMC,gBAAAA,GAAmBC,YAAAA,CAAOC,KAAK,CAACZ,MAAAA,EAAQ;gBAC5Ca,KAAAA,EAAO,CAAClB,OAAS,CAACgB,YAAAA,CAAOG,QAAQ,CAACnB,IAAAA,CAAAA,IAASA,IAAAA,CAAKC,IAAI,KAAK;AAC3D,aAAA,CAAA;AACA,YAAA,IAAI,CAACc,gBAAAA,EAAkB;AACrB,gBAAA;AACF,YAAA;YACA,MAAM,GAAGK,gBAAgB,GAAGL,gBAAAA;YAC5B,MAAMM,SAAAA,GAAYL,aAAOM,KAAK,CAACjB,QAAQA,MAAAA,CAAOG,SAAS,CAACE,MAAM,EAAEU,eAAAA,CAAAA;AAEhE;;;;;;AAMC,UACD,MAAM,CAACG,cAAAA,CAAe,GAAGP,YAAAA,CAAOQ,MAAM,CAACnB,MAAAA,EAAQA,MAAAA,CAAOG,SAAS,CAACE,MAAM,CAACC,IAAI,CAAA;AAC3EC,YAAAA,gBAAAA,CAAWa,WAAW,CAACpB,MAAAA,CAAAA;;YAGvB,MAAMqB,WAAAA,GAAcrB,OAAOZ,QAAQ,CAACkC,MAAM,GAAGlB,yBAAyB,CAAC,CAAA,CAAE,GAAG,CAAA;;;YAI5EG,gBAAAA,CAAWgB,WAAW,CACpBvB,MAAAA,EACA;gBACEJ,IAAAA,EAAM,WAAA;;AAENR,gBAAAA,QAAAA,EAAW4B,SAAAA,GAAY;AAAC,oBAAA;wBAAEpB,IAAAA,EAAM,MAAA;wBAAQ4B,IAAAA,EAAM;AAAG;AAAE,iBAAA,GAAGN,eAAe9B;aACvE,EACA;AACEqC,gBAAAA,EAAAA,EAAIJ,WAAAA,GAAc;oBAACjB,yBAAyB,CAAC,EAAE,GAAG;iBAAE,GAAG;oBAACJ,MAAAA,CAAOZ,QAAQ,CAACkC;AAAO;AACjF,aAAA,CAAA;AAGF;;;;AAIC,UACDf,iBAAWmB,MAAM,CAAC1B,MAAAA,EAAQA,MAAAA,CAAO2B,KAAK,CAAC;gBAACvB,yBAAyB,CAAC,EAAE,GAAG;AAAE,aAAA,CAAA,CAAA;AAC3E,QAAA;AACF;AACF;;;;"}
|
package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Paragraph.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { Paragraph } from '@strapi/icons';\nimport { type Text, Editor, Transforms } from 'slate';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst paragraphBlocks: Pick<BlocksStore, 'paragraph'> = {\n paragraph: {\n renderElement: (props) => (\n <Typography tag=\"p\" variant=\"omega\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n icon: Paragraph,\n label: {\n id: 'components.Blocks.blocks.text',\n defaultMessage: 'Text',\n },\n matchNode: (node) => node.type === 'paragraph',\n isInBlocksSelector: true,\n dragHandleTopMargin: '-2px',\n handleConvert(editor) {\n baseHandleConvert<Block<'paragraph'>>(editor, { type: 'paragraph' });\n },\n handleEnterKey(editor) {\n if (!editor.selection) {\n return;\n }\n\n // We need to keep track of the initial position of the cursor\n const anchorPathInitialPosition = editor.selection.anchor.path;\n /**\n * Split the nodes where the cursor is. This will create a new paragraph with the content\n * after the cursor, while retaining all the children, modifiers etc.\n */\n Transforms.splitNodes(editor, {\n // Makes sure we always create a new node,\n // even if there's nothing to the right of the cursor in the node.\n always: true,\n });\n\n // Check if the created node is empty (if there was no text after the cursor in the node)\n // This lets us know if we need to carry over the modifiers from the previous node\n const parentBlockEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n if (!parentBlockEntry) {\n return;\n }\n const [, parentBlockPath] = parentBlockEntry;\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, parentBlockPath);\n\n /**\n * Delete and recreate the node that was created at the right of the cursor.\n * This is to avoid node pollution\n * (e.g. keeping the level attribute when converting a heading to a paragraph).\n * Select the parent of the selection because we want the full block, not the leaf.\n * And copy its children to make sure we keep the modifiers.\n */\n const [fragmentedNode] = Editor.parent(editor, editor.selection.anchor.path);\n Transforms.removeNodes(editor);\n\n // Check if after the current position there is another node\n const hasNextNode = editor.children.length - anchorPathInitialPosition[0] > 1;\n\n // Insert the new node at the right position.\n // The next line after the editor selection if present or otherwise at the end of the editor.\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n // Don't carry over the modifiers from the previous node if there was no text after the cursor\n children: (isNodeEnd ? [{ type: 'text', text: '' }] : fragmentedNode.children) as Text[],\n },\n {\n at: hasNextNode ? [anchorPathInitialPosition[0] + 1] : [editor.children.length],\n }\n );\n\n /**\n * The new selection will by default be at the end of the created node.\n * Instead we manually move it to the start of the created node.\n * Make sure to we go to the start of the node and not the start of the leaf.\n */\n Transforms.select(editor, editor.start([anchorPathInitialPosition[0] + 1]));\n },\n },\n};\n\nexport { paragraphBlocks };\n"],"names":["paragraphBlocks","paragraph","renderElement","props","_jsx","Typography","tag","variant","attributes","children","icon","Paragraph","label","id","defaultMessage","matchNode","node","type","isInBlocksSelector","dragHandleTopMargin","handleConvert","editor","baseHandleConvert","handleEnterKey","selection","anchorPathInitialPosition","anchor","path","Transforms","splitNodes","always","parentBlockEntry","Editor","above","match","isEditor","parentBlockPath","isNodeEnd","isEnd","fragmentedNode","parent","removeNodes","hasNextNode","length","insertNodes","text","at","select","start"],"mappings":";;;;;;;AAUA,MAAMA,
|
|
1
|
+
{"version":3,"file":"Paragraph.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { Paragraph } from '@strapi/icons';\nimport { type Text, Editor, Transforms } from 'slate';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst paragraphBlocks: Pick<BlocksStore, 'paragraph'> = {\n paragraph: {\n renderElement: (props) => (\n <Typography tag=\"p\" variant=\"omega\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n icon: Paragraph,\n label: {\n id: 'components.Blocks.blocks.text',\n defaultMessage: 'Text',\n },\n matchNode: (node) => node.type === 'paragraph',\n isInBlocksSelector: true,\n dragHandleTopMargin: '-2px',\n handleConvert(editor) {\n baseHandleConvert<Block<'paragraph'>>(editor, { type: 'paragraph' });\n },\n handleEnterKey(editor) {\n if (!editor.selection) {\n return;\n }\n\n // We need to keep track of the initial position of the cursor\n const anchorPathInitialPosition = editor.selection.anchor.path;\n /**\n * Split the nodes where the cursor is. This will create a new paragraph with the content\n * after the cursor, while retaining all the children, modifiers etc.\n */\n Transforms.splitNodes(editor, {\n // Makes sure we always create a new node,\n // even if there's nothing to the right of the cursor in the node.\n always: true,\n });\n\n // Check if the created node is empty (if there was no text after the cursor in the node)\n // This lets us know if we need to carry over the modifiers from the previous node\n const parentBlockEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n if (!parentBlockEntry) {\n return;\n }\n const [, parentBlockPath] = parentBlockEntry;\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, parentBlockPath);\n\n /**\n * Delete and recreate the node that was created at the right of the cursor.\n * This is to avoid node pollution\n * (e.g. keeping the level attribute when converting a heading to a paragraph).\n * Select the parent of the selection because we want the full block, not the leaf.\n * And copy its children to make sure we keep the modifiers.\n */\n const [fragmentedNode] = Editor.parent(editor, editor.selection.anchor.path);\n Transforms.removeNodes(editor);\n\n // Check if after the current position there is another node\n const hasNextNode = editor.children.length - anchorPathInitialPosition[0] > 1;\n\n // Insert the new node at the right position.\n // The next line after the editor selection if present or otherwise at the end of the editor.\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n // Don't carry over the modifiers from the previous node if there was no text after the cursor\n children: (isNodeEnd ? [{ type: 'text', text: '' }] : fragmentedNode.children) as Text[],\n },\n {\n at: hasNextNode ? [anchorPathInitialPosition[0] + 1] : [editor.children.length],\n }\n );\n\n /**\n * The new selection will by default be at the end of the created node.\n * Instead we manually move it to the start of the created node.\n * Make sure to we go to the start of the node and not the start of the leaf.\n */\n Transforms.select(editor, editor.start([anchorPathInitialPosition[0] + 1]));\n },\n },\n};\n\nexport { paragraphBlocks };\n"],"names":["paragraphBlocks","paragraph","renderElement","props","_jsx","Typography","tag","variant","attributes","children","icon","Paragraph","label","id","defaultMessage","matchNode","node","type","isInBlocksSelector","dragHandleTopMargin","handleConvert","editor","baseHandleConvert","handleEnterKey","selection","anchorPathInitialPosition","anchor","path","Transforms","splitNodes","always","parentBlockEntry","Editor","above","match","isEditor","parentBlockPath","isNodeEnd","isEnd","fragmentedNode","parent","removeNodes","hasNextNode","length","insertNodes","text","at","select","start"],"mappings":";;;;;;;AAUA,MAAMA,eAAAA,GAAkD;IACtDC,SAAAA,EAAW;QACTC,aAAAA,EAAe,CAACC,sBACdC,GAAA,CAACC,UAAAA,EAAAA;gBAAWC,GAAAA,EAAI,GAAA;gBAAIC,OAAAA,EAAQ,OAAA;AAAS,gBAAA,GAAGJ,MAAMK,UAAU;AACrDL,gBAAAA,QAAAA,EAAAA,KAAAA,CAAMM;;QAGXC,IAAAA,EAAMC,SAAAA;QACNC,KAAAA,EAAO;YACLC,EAAAA,EAAI,+BAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;AACAC,QAAAA,SAAAA,EAAW,CAACC,IAAAA,GAASA,IAAAA,CAAKC,IAAI,KAAK,WAAA;QACnCC,kBAAAA,EAAoB,IAAA;QACpBC,mBAAAA,EAAqB,MAAA;AACrBC,QAAAA,aAAAA,CAAAA,CAAcC,MAAM,EAAA;AAClBC,YAAAA,iBAAAA,CAAsCD,MAAAA,EAAQ;gBAAEJ,IAAAA,EAAM;AAAY,aAAA,CAAA;AACpE,QAAA,CAAA;AACAM,QAAAA,cAAAA,CAAAA,CAAeF,MAAM,EAAA;YACnB,IAAI,CAACA,MAAAA,CAAOG,SAAS,EAAE;AACrB,gBAAA;AACF,YAAA;;AAGA,YAAA,MAAMC,4BAA4BJ,MAAAA,CAAOG,SAAS,CAACE,MAAM,CAACC,IAAI;AAC9D;;;UAIAC,UAAAA,CAAWC,UAAU,CAACR,MAAAA,EAAQ;;;gBAG5BS,MAAAA,EAAQ;AACV,aAAA,CAAA;;;AAIA,YAAA,MAAMC,gBAAAA,GAAmBC,MAAAA,CAAOC,KAAK,CAACZ,MAAAA,EAAQ;gBAC5Ca,KAAAA,EAAO,CAAClB,OAAS,CAACgB,MAAAA,CAAOG,QAAQ,CAACnB,IAAAA,CAAAA,IAASA,IAAAA,CAAKC,IAAI,KAAK;AAC3D,aAAA,CAAA;AACA,YAAA,IAAI,CAACc,gBAAAA,EAAkB;AACrB,gBAAA;AACF,YAAA;YACA,MAAM,GAAGK,gBAAgB,GAAGL,gBAAAA;YAC5B,MAAMM,SAAAA,GAAYL,OAAOM,KAAK,CAACjB,QAAQA,MAAAA,CAAOG,SAAS,CAACE,MAAM,EAAEU,eAAAA,CAAAA;AAEhE;;;;;;AAMC,UACD,MAAM,CAACG,cAAAA,CAAe,GAAGP,MAAAA,CAAOQ,MAAM,CAACnB,MAAAA,EAAQA,MAAAA,CAAOG,SAAS,CAACE,MAAM,CAACC,IAAI,CAAA;AAC3EC,YAAAA,UAAAA,CAAWa,WAAW,CAACpB,MAAAA,CAAAA;;YAGvB,MAAMqB,WAAAA,GAAcrB,OAAOZ,QAAQ,CAACkC,MAAM,GAAGlB,yBAAyB,CAAC,CAAA,CAAE,GAAG,CAAA;;;YAI5EG,UAAAA,CAAWgB,WAAW,CACpBvB,MAAAA,EACA;gBACEJ,IAAAA,EAAM,WAAA;;AAENR,gBAAAA,QAAAA,EAAW4B,SAAAA,GAAY;AAAC,oBAAA;wBAAEpB,IAAAA,EAAM,MAAA;wBAAQ4B,IAAAA,EAAM;AAAG;AAAE,iBAAA,GAAGN,eAAe9B;aACvE,EACA;AACEqC,gBAAAA,EAAAA,EAAIJ,WAAAA,GAAc;oBAACjB,yBAAyB,CAAC,EAAE,GAAG;iBAAE,GAAG;oBAACJ,MAAAA,CAAOZ,QAAQ,CAACkC;AAAO;AACjF,aAAA,CAAA;AAGF;;;;AAIC,UACDf,WAAWmB,MAAM,CAAC1B,MAAAA,EAAQA,MAAAA,CAAO2B,KAAK,CAAC;gBAACvB,yBAAyB,CAAC,EAAE,GAAG;AAAE,aAAA,CAAA,CAAA;AAC3E,QAAA;AACF;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Quote.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.tsx"],"sourcesContent":["import { Quotes } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { pressEnterTwiceToExit } from '../utils/enterKey';\nimport { type Block } from '../utils/types';\n\nconst Blockquote = styled.blockquote.attrs({ role: 'blockquote' })`\n font-weight: ${({ theme }) => theme.fontWeights.regular};\n border-left: ${({ theme }) => `${theme.spaces[1]} solid ${theme.colors.neutral200}`};\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[4]};\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nconst quoteBlocks: Pick<BlocksStore, 'quote'> = {\n quote: {\n renderElement: (props) => (\n // The div is needed to make sure the padding bottom from BlocksContent is applied properly\n // when the quote is the last block in the editor\n <div>\n <Blockquote {...props.attributes}>{props.children}</Blockquote>\n </div>\n ),\n icon: Quotes,\n label: {\n id: 'components.Blocks.blocks.quote',\n defaultMessage: 'Quote',\n },\n matchNode: (node) => node.type === 'quote',\n isInBlocksSelector: true,\n handleConvert(editor) {\n baseHandleConvert<Block<'quote'>>(editor, { type: 'quote' });\n },\n handleEnterKey(editor) {\n pressEnterTwiceToExit(editor);\n },\n snippets: ['>'],\n },\n};\n\nexport { quoteBlocks };\n"],"names":["Blockquote","styled","blockquote","attrs","role","theme","fontWeights","regular","spaces","colors","neutral200","neutral600","quoteBlocks","quote","renderElement","props","_jsx","div","attributes","children","icon","Quotes","label","id","defaultMessage","matchNode","node","type","isInBlocksSelector","handleConvert","editor","baseHandleConvert","handleEnterKey","pressEnterTwiceToExit","snippets"],"mappings":";;;;;;;;AAQA,MAAMA,
|
|
1
|
+
{"version":3,"file":"Quote.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.tsx"],"sourcesContent":["import { Quotes } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { pressEnterTwiceToExit } from '../utils/enterKey';\nimport { type Block } from '../utils/types';\n\nconst Blockquote = styled.blockquote.attrs({ role: 'blockquote' })`\n font-weight: ${({ theme }) => theme.fontWeights.regular};\n border-left: ${({ theme }) => `${theme.spaces[1]} solid ${theme.colors.neutral200}`};\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[4]};\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nconst quoteBlocks: Pick<BlocksStore, 'quote'> = {\n quote: {\n renderElement: (props) => (\n // The div is needed to make sure the padding bottom from BlocksContent is applied properly\n // when the quote is the last block in the editor\n <div>\n <Blockquote {...props.attributes}>{props.children}</Blockquote>\n </div>\n ),\n icon: Quotes,\n label: {\n id: 'components.Blocks.blocks.quote',\n defaultMessage: 'Quote',\n },\n matchNode: (node) => node.type === 'quote',\n isInBlocksSelector: true,\n handleConvert(editor) {\n baseHandleConvert<Block<'quote'>>(editor, { type: 'quote' });\n },\n handleEnterKey(editor) {\n pressEnterTwiceToExit(editor);\n },\n snippets: ['>'],\n },\n};\n\nexport { quoteBlocks };\n"],"names":["Blockquote","styled","blockquote","attrs","role","theme","fontWeights","regular","spaces","colors","neutral200","neutral600","quoteBlocks","quote","renderElement","props","_jsx","div","attributes","children","icon","Quotes","label","id","defaultMessage","matchNode","node","type","isInBlocksSelector","handleConvert","editor","baseHandleConvert","handleEnterKey","pressEnterTwiceToExit","snippets"],"mappings":";;;;;;;;AAQA,MAAMA,UAAAA,GAAaC,uBAAAA,CAAOC,UAAU,CAACC,KAAK,CAAC;IAAEC,IAAAA,EAAM;AAAa,CAAA,CAAE;eACnD,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,WAAW,CAACC,OAAO,CAAC;AAC3C,eAAA,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAK,CAAA,EAAGA,MAAMG,MAAM,CAAC,CAAA,CAAE,CAAC,OAAO,EAAEH,KAAAA,CAAMI,MAAM,CAACC,UAAU,EAAE,CAAC;WAC3E,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAAA,CAAMG,MAAM,CAAC,CAAA,CAAE,CAAC,CAAC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAMG,MAAM,CAAC,CAAA,CAAE,CAAC;SACrE,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAMI,MAAM,CAACE,UAAU,CAAC;AAClD,CAAC;AAED,MAAMC,WAAAA,GAA0C;IAC9CC,KAAAA,EAAO;QACLC,aAAAA,EAAe,CAACC;;0BAGdC,cAAA,CAACC,KAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAD,cAAA,CAAChB,UAAAA,EAAAA;AAAY,oBAAA,GAAGe,MAAMG,UAAU;AAAGH,oBAAAA,QAAAA,EAAAA,KAAAA,CAAMI;;;QAG7CC,IAAAA,EAAMC,YAAAA;QACNC,KAAAA,EAAO;YACLC,EAAAA,EAAI,gCAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;AACAC,QAAAA,SAAAA,EAAW,CAACC,IAAAA,GAASA,IAAAA,CAAKC,IAAI,KAAK,OAAA;QACnCC,kBAAAA,EAAoB,IAAA;AACpBC,QAAAA,aAAAA,CAAAA,CAAcC,MAAM,EAAA;AAClBC,YAAAA,6BAAAA,CAAkCD,MAAAA,EAAQ;gBAAEH,IAAAA,EAAM;AAAQ,aAAA,CAAA;AAC5D,QAAA,CAAA;AACAK,QAAAA,cAAAA,CAAAA,CAAeF,MAAM,EAAA;YACnBG,8BAAAA,CAAsBH,MAAAA,CAAAA;AACxB,QAAA,CAAA;QACAI,QAAAA,EAAU;AAAC,YAAA;AAAI;AACjB;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Quote.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.tsx"],"sourcesContent":["import { Quotes } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { pressEnterTwiceToExit } from '../utils/enterKey';\nimport { type Block } from '../utils/types';\n\nconst Blockquote = styled.blockquote.attrs({ role: 'blockquote' })`\n font-weight: ${({ theme }) => theme.fontWeights.regular};\n border-left: ${({ theme }) => `${theme.spaces[1]} solid ${theme.colors.neutral200}`};\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[4]};\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nconst quoteBlocks: Pick<BlocksStore, 'quote'> = {\n quote: {\n renderElement: (props) => (\n // The div is needed to make sure the padding bottom from BlocksContent is applied properly\n // when the quote is the last block in the editor\n <div>\n <Blockquote {...props.attributes}>{props.children}</Blockquote>\n </div>\n ),\n icon: Quotes,\n label: {\n id: 'components.Blocks.blocks.quote',\n defaultMessage: 'Quote',\n },\n matchNode: (node) => node.type === 'quote',\n isInBlocksSelector: true,\n handleConvert(editor) {\n baseHandleConvert<Block<'quote'>>(editor, { type: 'quote' });\n },\n handleEnterKey(editor) {\n pressEnterTwiceToExit(editor);\n },\n snippets: ['>'],\n },\n};\n\nexport { quoteBlocks };\n"],"names":["Blockquote","styled","blockquote","attrs","role","theme","fontWeights","regular","spaces","colors","neutral200","neutral600","quoteBlocks","quote","renderElement","props","_jsx","div","attributes","children","icon","Quotes","label","id","defaultMessage","matchNode","node","type","isInBlocksSelector","handleConvert","editor","baseHandleConvert","handleEnterKey","pressEnterTwiceToExit","snippets"],"mappings":";;;;;;AAQA,MAAMA,
|
|
1
|
+
{"version":3,"file":"Quote.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.tsx"],"sourcesContent":["import { Quotes } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { pressEnterTwiceToExit } from '../utils/enterKey';\nimport { type Block } from '../utils/types';\n\nconst Blockquote = styled.blockquote.attrs({ role: 'blockquote' })`\n font-weight: ${({ theme }) => theme.fontWeights.regular};\n border-left: ${({ theme }) => `${theme.spaces[1]} solid ${theme.colors.neutral200}`};\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[4]};\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nconst quoteBlocks: Pick<BlocksStore, 'quote'> = {\n quote: {\n renderElement: (props) => (\n // The div is needed to make sure the padding bottom from BlocksContent is applied properly\n // when the quote is the last block in the editor\n <div>\n <Blockquote {...props.attributes}>{props.children}</Blockquote>\n </div>\n ),\n icon: Quotes,\n label: {\n id: 'components.Blocks.blocks.quote',\n defaultMessage: 'Quote',\n },\n matchNode: (node) => node.type === 'quote',\n isInBlocksSelector: true,\n handleConvert(editor) {\n baseHandleConvert<Block<'quote'>>(editor, { type: 'quote' });\n },\n handleEnterKey(editor) {\n pressEnterTwiceToExit(editor);\n },\n snippets: ['>'],\n },\n};\n\nexport { quoteBlocks };\n"],"names":["Blockquote","styled","blockquote","attrs","role","theme","fontWeights","regular","spaces","colors","neutral200","neutral600","quoteBlocks","quote","renderElement","props","_jsx","div","attributes","children","icon","Quotes","label","id","defaultMessage","matchNode","node","type","isInBlocksSelector","handleConvert","editor","baseHandleConvert","handleEnterKey","pressEnterTwiceToExit","snippets"],"mappings":";;;;;;AAQA,MAAMA,UAAAA,GAAaC,MAAAA,CAAOC,UAAU,CAACC,KAAK,CAAC;IAAEC,IAAAA,EAAM;AAAa,CAAA,CAAE;eACnD,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,WAAW,CAACC,OAAO,CAAC;AAC3C,eAAA,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAK,CAAA,EAAGA,MAAMG,MAAM,CAAC,CAAA,CAAE,CAAC,OAAO,EAAEH,KAAAA,CAAMI,MAAM,CAACC,UAAU,EAAE,CAAC;WAC3E,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAAA,CAAMG,MAAM,CAAC,CAAA,CAAE,CAAC,CAAC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAMG,MAAM,CAAC,CAAA,CAAE,CAAC;SACrE,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAMI,MAAM,CAACE,UAAU,CAAC;AAClD,CAAC;AAED,MAAMC,WAAAA,GAA0C;IAC9CC,KAAAA,EAAO;QACLC,aAAAA,EAAe,CAACC;;0BAGdC,GAAA,CAACC,KAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAD,GAAA,CAAChB,UAAAA,EAAAA;AAAY,oBAAA,GAAGe,MAAMG,UAAU;AAAGH,oBAAAA,QAAAA,EAAAA,KAAAA,CAAMI;;;QAG7CC,IAAAA,EAAMC,MAAAA;QACNC,KAAAA,EAAO;YACLC,EAAAA,EAAI,gCAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;AACAC,QAAAA,SAAAA,EAAW,CAACC,IAAAA,GAASA,IAAAA,CAAKC,IAAI,KAAK,OAAA;QACnCC,kBAAAA,EAAoB,IAAA;AACpBC,QAAAA,aAAAA,CAAAA,CAAcC,MAAM,EAAA;AAClBC,YAAAA,iBAAAA,CAAkCD,MAAAA,EAAQ;gBAAEH,IAAAA,EAAM;AAAQ,aAAA,CAAA;AAC5D,QAAA,CAAA;AACAK,QAAAA,cAAAA,CAAAA,CAAeF,MAAM,EAAA;YACnBG,qBAAAA,CAAsBH,MAAAA,CAAAA;AACxB,QAAA,CAAA;QACAI,QAAAA,EAAU;AAAC,YAAA;AAAI;AACjB;AACF;;;;"}
|
|
@@ -437,8 +437,12 @@ const BlocksContent = ({ placeholder, ariaLabelId })=>{
|
|
|
437
437
|
if (!selectedBlock) {
|
|
438
438
|
return;
|
|
439
439
|
}
|
|
440
|
-
|
|
441
|
-
|
|
440
|
+
event.preventDefault();
|
|
441
|
+
if (event.shiftKey && selectedBlock.handleShiftTab) {
|
|
442
|
+
// Handle Shift+Tab (unindent)
|
|
443
|
+
selectedBlock.handleShiftTab(editor);
|
|
444
|
+
} else if (!event.shiftKey && selectedBlock.handleTab) {
|
|
445
|
+
// Handle Tab (indent)
|
|
442
446
|
selectedBlock.handleTab(editor);
|
|
443
447
|
}
|
|
444
448
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlocksContent.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n BoxComponent,\n Flex,\n FlexComponent,\n IconButton,\n IconButtonComponent,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Editor, Range, Transforms } from 'slate';\nimport { ReactEditor, type RenderElementProps, type RenderLeafProps, Editable } from 'slate-react';\nimport { styled, CSSProperties, css } from 'styled-components';\n\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDragAndDrop, DIRECTIONS } from '../../../../../hooks/useDragAndDrop';\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { decorateCode } from './Blocks/Code';\nimport { type BlocksStore, useBlocksEditorContext } from './BlocksEditor';\nimport { useConversionModal } from './BlocksToolbar';\nimport { type ModifiersStore } from './Modifiers';\nimport { getEntries } from './utils/types';\n\nconst StyledEditable = styled(Editable)<{ $isExpandedMode: boolean }>`\n // The outline style is set on the wrapper with :focus-within\n outline: none;\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[3]};\n height: 100%;\n // For fullscreen align input in the center with fixed width\n width: ${(props) => (props.$isExpandedMode ? '512px' : '100%')};\n margin: auto;\n font-size: 1.6rem;\n\n ${({ theme }) => theme.breakpoints.medium} {\n font-size: 1.4rem;\n }\n > *:last-child {\n padding-bottom: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Wrapper = styled<BoxComponent>(Box)<{ $isOverDropTarget: boolean }>`\n position: ${({ $isOverDropTarget }) => $isOverDropTarget && 'relative'};\n`;\n\ntype DragDirection = (typeof DIRECTIONS)[keyof typeof DIRECTIONS];\n\nconst DropPlaceholder = styled<BoxComponent>(Box)<{\n dragDirection: DragDirection | null;\n placeholderMargin: 1 | 2;\n}>`\n position: absolute;\n right: 0;\n\n // Show drop placeholder 8px above or below the drop target\n ${({ dragDirection, theme, placeholderMargin }) => css`\n top: ${dragDirection === DIRECTIONS.UPWARD && `-${theme.spaces[placeholderMargin]}`};\n bottom: ${dragDirection === DIRECTIONS.DOWNWARD && `-${theme.spaces[placeholderMargin]}`};\n `}\n`;\n\nconst DragItem = styled<FlexComponent>(Flex)<{ $dragVisibility: CSSProperties['visibility'] }>`\n // Style each block rendered using renderElement()\n & > [data-slate-node='element'] {\n width: 100%;\n opacity: inherit;\n }\n\n // Set the visibility of drag button\n [role='button'] {\n visibility: ${(props) => props.$dragVisibility};\n opacity: inherit;\n }\n &[aria-disabled='true'] {\n user-drag: none;\n }\n`;\n\nconst DragIconButton = styled<IconButtonComponent<'div'>>(IconButton)<{\n $dragHandleTopMargin?: CSSProperties['marginTop'];\n}>`\n user-select: none;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: ${({ theme }) => theme.borderRadius};\n padding-left: ${({ theme }) => theme.spaces[0]};\n padding-right: ${({ theme }) => theme.spaces[0]};\n padding-top: ${({ theme }) => theme.spaces[1]};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n visibility: hidden;\n cursor: grab;\n opacity: inherit;\n margin-top: ${(props) => props.$dragHandleTopMargin ?? 0};\n\n &:hover {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n &:active {\n cursor: grabbing;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n &[aria-disabled='true'] {\n visibility: hidden;\n }\n svg {\n min-width: ${({ theme }) => theme.spaces[3]};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\ntype Direction = {\n setDragDirection: (direction: DragDirection) => void;\n dragDirection: DragDirection | null;\n};\n\ntype DragAndDropElementProps = Direction & {\n children: RenderElementProps['children'];\n index: Array<number>;\n dragHandleTopMargin?: CSSProperties['marginTop'];\n};\n\nconst DragAndDropElement = ({\n children,\n index,\n setDragDirection,\n dragDirection,\n dragHandleTopMargin,\n}: DragAndDropElementProps) => {\n const { editor, disabled, name, setLiveText } = useBlocksEditorContext('DragAndDropElement');\n const { formatMessage } = useIntl();\n const [dragVisibility, setDragVisibility] = React.useState<CSSProperties['visibility']>('hidden');\n const isDragAndDropEnabled = !disabled;\n\n const handleMoveBlock = React.useCallback(\n (newIndex: Array<number>, currentIndex: Array<number>) => {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n // Add 1 to the index for the live text message\n const currentIndexPosition = [currentIndex[0] + 1, ...currentIndex.slice(1)];\n const newIndexPosition = [newIndex[0] + 1, ...newIndex.slice(1)];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndexPosition.join(',')}`,\n position: `${newIndexPosition.join(',')} of ${editor.children.length}`,\n }\n )\n );\n },\n [editor, formatMessage, name, setLiveText]\n );\n\n const [{ handlerId, isDragging, isOverDropTarget, direction }, blockRef, dropRef, dragRef] =\n useDragAndDrop(isDragAndDropEnabled, {\n type: `${ItemTypes.BLOCKS}_${name}`,\n index,\n item: {\n index,\n displayedValue: children,\n },\n onDropItem(currentIndex, newIndex) {\n if (newIndex) handleMoveBlock(newIndex, currentIndex);\n },\n });\n\n const composedBoxRefs = useComposedRefs(blockRef, dropRef);\n\n // Set Drag direction before loosing state while dragging\n React.useEffect(() => {\n if (direction) {\n setDragDirection(direction);\n }\n }, [direction, setDragDirection]);\n\n // On selection change hide drag handle\n React.useEffect(() => {\n setDragVisibility('hidden');\n }, [editor.selection]);\n\n return (\n <Wrapper ref={composedBoxRefs} $isOverDropTarget={isOverDropTarget}>\n {isOverDropTarget && (\n <DropPlaceholder\n borderStyle=\"solid\"\n borderColor=\"secondary200\"\n borderWidth=\"2px\"\n width=\"calc(100% - 24px)\"\n marginLeft=\"auto\"\n dragDirection={dragDirection}\n // For list items placeholder reduce the margin around\n placeholderMargin={children.props.as && children.props.as === 'li' ? 1 : 2}\n />\n )}\n {isDragging ? (\n <CloneDragItem dragHandleTopMargin={dragHandleTopMargin}>{children}</CloneDragItem>\n ) : (\n <DragItem\n ref={dragRef}\n data-handler-id={handlerId}\n gap={2}\n paddingLeft={2}\n alignItems=\"start\"\n onDragStart={\n isDragAndDropEnabled\n ? (event) => {\n const target = event.target as HTMLElement;\n const currentTarget = event.currentTarget as HTMLElement;\n\n // Dragging action should only trigger drag event when button is dragged, however update styles on the whole dragItem.\n if (target.getAttribute('role') !== 'button') {\n event.preventDefault();\n } else {\n // Setting styles using dragging state is not working, so set it on current target element as nodes get dragged\n currentTarget.style.opacity = '0.5';\n }\n }\n : undefined\n }\n onDragEnd={\n isDragAndDropEnabled\n ? (event) => {\n const currentTarget = event.currentTarget as HTMLElement;\n currentTarget.style.opacity = '1';\n }\n : undefined\n }\n onMouseEnter={() => setDragVisibility('visible')}\n onFocusCapture={() => setDragVisibility('visible')}\n onBlurCapture={() => setDragVisibility('hidden')}\n onMouseLeave={() => setDragVisibility('hidden')}\n aria-disabled={disabled}\n $dragVisibility={dragVisibility}\n >\n <DragIconButton\n tag=\"div\"\n contentEditable={false}\n role=\"button\"\n tabIndex={0}\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n aria-disabled={disabled}\n disabled={disabled}\n draggable={isDragAndDropEnabled}\n // For some blocks top margin added to drag handle to align at the text level\n $dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"primary500\" />\n </DragIconButton>\n {children}\n </DragItem>\n )}\n </Wrapper>\n );\n};\n\ninterface CloneDragItemProps {\n children: RenderElementProps['children'];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\n// To prevent applying opacity to the original item being dragged, display a cloned element without opacity.\nconst CloneDragItem = ({ children, dragHandleTopMargin }: CloneDragItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <DragItem gap={2} paddingLeft={2} alignItems=\"start\" $dragVisibility=\"visible\">\n <DragIconButton\n tag=\"div\"\n role=\"button\"\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n $dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"neutral600\" />\n </DragIconButton>\n {children}\n </DragItem>\n );\n};\n\ninterface ExtendedRenderLeafProps extends RenderLeafProps {\n leaf: RenderLeafProps['leaf'] & { className?: string };\n}\n\nconst baseRenderLeaf = (props: ExtendedRenderLeafProps, modifiers: ModifiersStore) => {\n // Recursively wrap the children for each active modifier\n const wrappedChildren = getEntries(modifiers).reduce((currentChildren, modifierEntry) => {\n const [name, modifier] = modifierEntry;\n\n if (props.leaf[name]) {\n return modifier.renderLeaf(currentChildren);\n }\n\n return currentChildren;\n }, props.children);\n\n return (\n <span {...props.attributes} className={props.leaf.className}>\n {wrappedChildren}\n </span>\n );\n};\n\ntype BaseRenderElementProps = Direction & {\n props: RenderElementProps['children'];\n blocks: BlocksStore;\n editor: Editor;\n isMobile: boolean;\n};\n\nconst baseRenderElement = ({\n props,\n blocks,\n editor,\n dragDirection,\n setDragDirection,\n isMobile,\n}: BaseRenderElementProps) => {\n const { element } = props;\n\n const blockMatch = Object.values(blocks).find((block) => block.matchNode(element));\n const block = blockMatch || blocks.paragraph;\n const nodePath = ReactEditor.findPath(editor, element);\n\n const isDraggable = block.isDraggable?.(element) ?? true;\n\n if (!isDraggable || isMobile) {\n return block.renderElement(props);\n }\n\n return (\n <DragAndDropElement\n index={nodePath}\n setDragDirection={setDragDirection}\n dragDirection={dragDirection}\n dragHandleTopMargin={block.dragHandleTopMargin}\n >\n {block.renderElement(props)}\n </DragAndDropElement>\n );\n};\n\nconst dragNoop = () => true;\n\ninterface BlocksContentProps {\n placeholder?: string;\n ariaLabelId: string;\n}\n\nconst BlocksContent = ({ placeholder, ariaLabelId }: BlocksContentProps) => {\n const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode } =\n useBlocksEditorContext('BlocksContent');\n const isMobile = useIsMobile();\n const blocksRef = React.useRef<HTMLDivElement>(null);\n const { formatMessage } = useIntl();\n const [dragDirection, setDragDirection] = React.useState<DragDirection | null>(null);\n const { modalElement, handleConversionResult } = useConversionModal();\n\n // Create renderLeaf function based on the modifiers store\n const renderLeaf = React.useCallback(\n (props: ExtendedRenderLeafProps) => baseRenderLeaf(props, modifiers),\n [modifiers]\n );\n\n const handleMoveBlocks = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const start = Range.start(editor.selection);\n const currentIndex = [start.path[0]];\n let newIndexPosition = 0;\n\n if (event.key === 'ArrowUp') {\n newIndexPosition = currentIndex[0] > 0 ? currentIndex[0] - 1 : currentIndex[0];\n } else {\n newIndexPosition =\n currentIndex[0] < editor.children.length - 1 ? currentIndex[0] + 1 : currentIndex[0];\n }\n\n const newIndex = [newIndexPosition];\n\n if (newIndexPosition !== currentIndex[0]) {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndex[0] + 1}`,\n position: `${newIndex[0] + 1} of ${editor.children.length}`,\n }\n )\n );\n\n event.preventDefault();\n }\n };\n\n // Create renderElement function base on the blocks store\n const renderElement = React.useCallback(\n (props: RenderElementProps) =>\n baseRenderElement({ props, blocks, editor, dragDirection, setDragDirection, isMobile }),\n [blocks, editor, dragDirection, isMobile, setDragDirection]\n );\n\n const checkSnippet = (event: React.KeyboardEvent<HTMLElement>) => {\n // Get current text block\n if (!editor.selection) {\n return;\n }\n\n const [textNode, textNodePath] = Editor.node(editor, editor.selection.anchor.path);\n\n // Narrow the type to a text node\n if (Editor.isEditor(textNode) || textNode.type !== 'text') {\n return;\n }\n\n // Don't check for snippets if we're not at the start of a block\n if (textNodePath.at(-1) !== 0) {\n return;\n }\n\n // Check if the text node starts with a known snippet\n const blockMatchingSnippet = Object.values(blocks).find((block) => {\n return block.snippets?.includes(textNode.text);\n });\n\n if (blockMatchingSnippet?.handleConvert) {\n // Prevent the space from being created and delete the snippet\n event.preventDefault();\n Transforms.delete(editor, {\n distance: textNode.text.length,\n unit: 'character',\n reverse: true,\n });\n\n // Convert the selected block\n const maybeRenderModal = blockMatchingSnippet.handleConvert(editor);\n handleConversionResult(maybeRenderModal);\n }\n };\n\n const handleEnter = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n // Allow forced line breaks when shift is pressed\n if (event.shiftKey && selectedNode.type !== 'image') {\n Transforms.insertText(editor, '\\n');\n return;\n }\n\n // Check if there's an enter handler for the selected block\n if (selectedBlock.handleEnterKey) {\n selectedBlock.handleEnterKey(editor);\n } else {\n blocks.paragraph.handleEnterKey!(editor);\n }\n };\n\n const handleBackspaceEvent = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n\n if (!selectedBlock) {\n return;\n }\n\n if (selectedBlock.handleBackspaceKey) {\n selectedBlock.handleBackspaceKey(editor, event);\n }\n };\n\n const handleTab = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n if (selectedBlock.handleTab) {\n event.preventDefault();\n selectedBlock.handleTab(editor);\n }\n };\n\n const handleKeyboardShortcuts = (event: React.KeyboardEvent<HTMLElement>) => {\n const isCtrlOrCmd = event.metaKey || event.ctrlKey;\n\n if (isCtrlOrCmd) {\n // Check if there's a modifier to toggle\n Object.values(modifiers).forEach((value) => {\n if (value.isValidEventKey(event)) {\n value.handleToggle(editor);\n return;\n }\n });\n if (event.shiftKey && ['ArrowUp', 'ArrowDown'].includes(event.key)) {\n handleMoveBlocks(editor, event);\n }\n }\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLElement> = (event) => {\n // Find the right block-specific handlers for enter and backspace key presses\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n return handleEnter(event);\n case 'Backspace':\n return handleBackspaceEvent(event);\n case 'Tab':\n return handleTab(event);\n case 'Escape':\n return ReactEditor.blur(editor);\n }\n handleKeyboardShortcuts(event);\n // Check if a snippet was triggered\n if (event.key === ' ') {\n checkSnippet(event);\n }\n };\n\n /**\n * scrollSelectionIntoView : Slate's default method to scroll a DOM selection into the view,\n * thats shifting layout for us when there is a overflowY:scroll on the viewport.\n * We are overriding it to check if the selection is not fully within the visible area of the editor,\n * we use scrollBy one line to the bottom\n */\n\n const handleScrollSelectionIntoView = React.useCallback(() => {\n if (!editor.selection || !blocksRef.current) {\n return;\n }\n\n const domRange = ReactEditor.toDOMRange(editor, editor.selection);\n const domRect = domRange.getBoundingClientRect();\n\n const editorRect = blocksRef.current.getBoundingClientRect();\n\n // Check if the selection is not fully within the visible area of the editor\n if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {\n // Scroll by one line to the bottom\n blocksRef.current.scrollBy({\n top: 28, // 20px is the line-height + 8px line gap\n behavior: 'smooth',\n });\n }\n }, [editor]);\n\n return (\n <Box\n ref={blocksRef}\n grow={1}\n width=\"100%\"\n overflow=\"auto\"\n fontSize={2}\n background=\"neutral0\"\n color=\"neutral800\"\n lineHeight={6}\n paddingLeft={{ initial: 4, medium: 0 }}\n paddingRight={7}\n paddingTop={6}\n paddingBottom={3}\n >\n <StyledEditable\n aria-labelledby={ariaLabelId}\n readOnly={disabled}\n placeholder={placeholder}\n $isExpandedMode={isExpandedMode}\n decorate={decorateCode}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n onKeyDown={handleKeyDown}\n scrollSelectionIntoView={handleScrollSelectionIntoView}\n // As we have our own handler to drag and drop the elements returing true will skip slate's own event handler\n onDrop={dragNoop}\n onDragStart={dragNoop}\n />\n {modalElement}\n </Box>\n );\n};\n\nexport { BlocksContent, BlocksContentProps };\n"],"names":["StyledEditable","styled","Editable","theme","spaces","props","$isExpandedMode","breakpoints","medium","Wrapper","Box","$isOverDropTarget","DropPlaceholder","dragDirection","placeholderMargin","css","DIRECTIONS","UPWARD","DOWNWARD","DragItem","Flex","$dragVisibility","DragIconButton","IconButton","borderRadius","$dragHandleTopMargin","colors","neutral100","neutral150","neutral500","DragAndDropElement","children","index","setDragDirection","dragHandleTopMargin","editor","disabled","name","setLiveText","useBlocksEditorContext","formatMessage","useIntl","dragVisibility","setDragVisibility","React","useState","isDragAndDropEnabled","handleMoveBlock","useCallback","newIndex","currentIndex","Transforms","moveNodes","at","to","currentIndexPosition","slice","newIndexPosition","id","getTranslation","defaultMessage","item","join","position","length","handlerId","isDragging","isOverDropTarget","direction","blockRef","dropRef","dragRef","useDragAndDrop","type","ItemTypes","BLOCKS","displayedValue","onDropItem","composedBoxRefs","useComposedRefs","useEffect","selection","_jsxs","ref","_jsx","borderStyle","borderColor","borderWidth","width","marginLeft","as","CloneDragItem","data-handler-id","gap","paddingLeft","alignItems","onDragStart","event","target","currentTarget","getAttribute","preventDefault","style","opacity","undefined","onDragEnd","onMouseEnter","onFocusCapture","onBlurCapture","onMouseLeave","aria-disabled","tag","contentEditable","role","tabIndex","withTooltip","label","onClick","e","stopPropagation","draggable","Drag","color","baseRenderLeaf","modifiers","wrappedChildren","getEntries","reduce","currentChildren","modifierEntry","modifier","leaf","renderLeaf","span","attributes","className","baseRenderElement","blocks","isMobile","element","blockMatch","Object","values","find","block","matchNode","paragraph","nodePath","ReactEditor","findPath","isDraggable","renderElement","dragNoop","BlocksContent","placeholder","ariaLabelId","isExpandedMode","useIsMobile","blocksRef","useRef","modalElement","handleConversionResult","useConversionModal","handleMoveBlocks","start","Range","path","key","checkSnippet","textNode","textNodePath","Editor","node","anchor","isEditor","blockMatchingSnippet","snippets","includes","text","handleConvert","delete","distance","unit","reverse","maybeRenderModal","handleEnter","selectedNode","selectedBlock","shiftKey","insertText","handleEnterKey","handleBackspaceEvent","handleBackspaceKey","handleTab","handleKeyboardShortcuts","isCtrlOrCmd","metaKey","ctrlKey","forEach","value","isValidEventKey","handleToggle","handleKeyDown","blur","handleScrollSelectionIntoView","current","domRange","toDOMRange","domRect","getBoundingClientRect","editorRect","top","bottom","scrollBy","behavior","grow","overflow","fontSize","background","lineHeight","initial","paddingRight","paddingTop","paddingBottom","aria-labelledby","readOnly","decorate","decorateCode","onKeyDown","scrollSelectionIntoView","onDrop"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BlocksContent.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n BoxComponent,\n Flex,\n FlexComponent,\n IconButton,\n IconButtonComponent,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Editor, Range, Transforms } from 'slate';\nimport { ReactEditor, type RenderElementProps, type RenderLeafProps, Editable } from 'slate-react';\nimport { styled, CSSProperties, css } from 'styled-components';\n\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDragAndDrop, DIRECTIONS } from '../../../../../hooks/useDragAndDrop';\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { decorateCode } from './Blocks/Code';\nimport { type BlocksStore, useBlocksEditorContext } from './BlocksEditor';\nimport { useConversionModal } from './BlocksToolbar';\nimport { type ModifiersStore } from './Modifiers';\nimport { getEntries } from './utils/types';\n\nconst StyledEditable = styled(Editable)<{ $isExpandedMode: boolean }>`\n // The outline style is set on the wrapper with :focus-within\n outline: none;\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[3]};\n height: 100%;\n // For fullscreen align input in the center with fixed width\n width: ${(props) => (props.$isExpandedMode ? '512px' : '100%')};\n margin: auto;\n font-size: 1.6rem;\n\n ${({ theme }) => theme.breakpoints.medium} {\n font-size: 1.4rem;\n }\n > *:last-child {\n padding-bottom: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Wrapper = styled<BoxComponent>(Box)<{ $isOverDropTarget: boolean }>`\n position: ${({ $isOverDropTarget }) => $isOverDropTarget && 'relative'};\n`;\n\ntype DragDirection = (typeof DIRECTIONS)[keyof typeof DIRECTIONS];\n\nconst DropPlaceholder = styled<BoxComponent>(Box)<{\n dragDirection: DragDirection | null;\n placeholderMargin: 1 | 2;\n}>`\n position: absolute;\n right: 0;\n\n // Show drop placeholder 8px above or below the drop target\n ${({ dragDirection, theme, placeholderMargin }) => css`\n top: ${dragDirection === DIRECTIONS.UPWARD && `-${theme.spaces[placeholderMargin]}`};\n bottom: ${dragDirection === DIRECTIONS.DOWNWARD && `-${theme.spaces[placeholderMargin]}`};\n `}\n`;\n\nconst DragItem = styled<FlexComponent>(Flex)<{ $dragVisibility: CSSProperties['visibility'] }>`\n // Style each block rendered using renderElement()\n & > [data-slate-node='element'] {\n width: 100%;\n opacity: inherit;\n }\n\n // Set the visibility of drag button\n [role='button'] {\n visibility: ${(props) => props.$dragVisibility};\n opacity: inherit;\n }\n &[aria-disabled='true'] {\n user-drag: none;\n }\n`;\n\nconst DragIconButton = styled<IconButtonComponent<'div'>>(IconButton)<{\n $dragHandleTopMargin?: CSSProperties['marginTop'];\n}>`\n user-select: none;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: ${({ theme }) => theme.borderRadius};\n padding-left: ${({ theme }) => theme.spaces[0]};\n padding-right: ${({ theme }) => theme.spaces[0]};\n padding-top: ${({ theme }) => theme.spaces[1]};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n visibility: hidden;\n cursor: grab;\n opacity: inherit;\n margin-top: ${(props) => props.$dragHandleTopMargin ?? 0};\n\n &:hover {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n &:active {\n cursor: grabbing;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n &[aria-disabled='true'] {\n visibility: hidden;\n }\n svg {\n min-width: ${({ theme }) => theme.spaces[3]};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\ntype Direction = {\n setDragDirection: (direction: DragDirection) => void;\n dragDirection: DragDirection | null;\n};\n\ntype DragAndDropElementProps = Direction & {\n children: RenderElementProps['children'];\n index: Array<number>;\n dragHandleTopMargin?: CSSProperties['marginTop'];\n};\n\nconst DragAndDropElement = ({\n children,\n index,\n setDragDirection,\n dragDirection,\n dragHandleTopMargin,\n}: DragAndDropElementProps) => {\n const { editor, disabled, name, setLiveText } = useBlocksEditorContext('DragAndDropElement');\n const { formatMessage } = useIntl();\n const [dragVisibility, setDragVisibility] = React.useState<CSSProperties['visibility']>('hidden');\n const isDragAndDropEnabled = !disabled;\n\n const handleMoveBlock = React.useCallback(\n (newIndex: Array<number>, currentIndex: Array<number>) => {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n // Add 1 to the index for the live text message\n const currentIndexPosition = [currentIndex[0] + 1, ...currentIndex.slice(1)];\n const newIndexPosition = [newIndex[0] + 1, ...newIndex.slice(1)];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndexPosition.join(',')}`,\n position: `${newIndexPosition.join(',')} of ${editor.children.length}`,\n }\n )\n );\n },\n [editor, formatMessage, name, setLiveText]\n );\n\n const [{ handlerId, isDragging, isOverDropTarget, direction }, blockRef, dropRef, dragRef] =\n useDragAndDrop(isDragAndDropEnabled, {\n type: `${ItemTypes.BLOCKS}_${name}`,\n index,\n item: {\n index,\n displayedValue: children,\n },\n onDropItem(currentIndex, newIndex) {\n if (newIndex) handleMoveBlock(newIndex, currentIndex);\n },\n });\n\n const composedBoxRefs = useComposedRefs(blockRef, dropRef);\n\n // Set Drag direction before loosing state while dragging\n React.useEffect(() => {\n if (direction) {\n setDragDirection(direction);\n }\n }, [direction, setDragDirection]);\n\n // On selection change hide drag handle\n React.useEffect(() => {\n setDragVisibility('hidden');\n }, [editor.selection]);\n\n return (\n <Wrapper ref={composedBoxRefs} $isOverDropTarget={isOverDropTarget}>\n {isOverDropTarget && (\n <DropPlaceholder\n borderStyle=\"solid\"\n borderColor=\"secondary200\"\n borderWidth=\"2px\"\n width=\"calc(100% - 24px)\"\n marginLeft=\"auto\"\n dragDirection={dragDirection}\n // For list items placeholder reduce the margin around\n placeholderMargin={children.props.as && children.props.as === 'li' ? 1 : 2}\n />\n )}\n {isDragging ? (\n <CloneDragItem dragHandleTopMargin={dragHandleTopMargin}>{children}</CloneDragItem>\n ) : (\n <DragItem\n ref={dragRef}\n data-handler-id={handlerId}\n gap={2}\n paddingLeft={2}\n alignItems=\"start\"\n onDragStart={\n isDragAndDropEnabled\n ? (event) => {\n const target = event.target as HTMLElement;\n const currentTarget = event.currentTarget as HTMLElement;\n\n // Dragging action should only trigger drag event when button is dragged, however update styles on the whole dragItem.\n if (target.getAttribute('role') !== 'button') {\n event.preventDefault();\n } else {\n // Setting styles using dragging state is not working, so set it on current target element as nodes get dragged\n currentTarget.style.opacity = '0.5';\n }\n }\n : undefined\n }\n onDragEnd={\n isDragAndDropEnabled\n ? (event) => {\n const currentTarget = event.currentTarget as HTMLElement;\n currentTarget.style.opacity = '1';\n }\n : undefined\n }\n onMouseEnter={() => setDragVisibility('visible')}\n onFocusCapture={() => setDragVisibility('visible')}\n onBlurCapture={() => setDragVisibility('hidden')}\n onMouseLeave={() => setDragVisibility('hidden')}\n aria-disabled={disabled}\n $dragVisibility={dragVisibility}\n >\n <DragIconButton\n tag=\"div\"\n contentEditable={false}\n role=\"button\"\n tabIndex={0}\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n aria-disabled={disabled}\n disabled={disabled}\n draggable={isDragAndDropEnabled}\n // For some blocks top margin added to drag handle to align at the text level\n $dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"primary500\" />\n </DragIconButton>\n {children}\n </DragItem>\n )}\n </Wrapper>\n );\n};\n\ninterface CloneDragItemProps {\n children: RenderElementProps['children'];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\n// To prevent applying opacity to the original item being dragged, display a cloned element without opacity.\nconst CloneDragItem = ({ children, dragHandleTopMargin }: CloneDragItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <DragItem gap={2} paddingLeft={2} alignItems=\"start\" $dragVisibility=\"visible\">\n <DragIconButton\n tag=\"div\"\n role=\"button\"\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n $dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"neutral600\" />\n </DragIconButton>\n {children}\n </DragItem>\n );\n};\n\ninterface ExtendedRenderLeafProps extends RenderLeafProps {\n leaf: RenderLeafProps['leaf'] & { className?: string };\n}\n\nconst baseRenderLeaf = (props: ExtendedRenderLeafProps, modifiers: ModifiersStore) => {\n // Recursively wrap the children for each active modifier\n const wrappedChildren = getEntries(modifiers).reduce((currentChildren, modifierEntry) => {\n const [name, modifier] = modifierEntry;\n\n if (props.leaf[name]) {\n return modifier.renderLeaf(currentChildren);\n }\n\n return currentChildren;\n }, props.children);\n\n return (\n <span {...props.attributes} className={props.leaf.className}>\n {wrappedChildren}\n </span>\n );\n};\n\ntype BaseRenderElementProps = Direction & {\n props: RenderElementProps['children'];\n blocks: BlocksStore;\n editor: Editor;\n isMobile: boolean;\n};\n\nconst baseRenderElement = ({\n props,\n blocks,\n editor,\n dragDirection,\n setDragDirection,\n isMobile,\n}: BaseRenderElementProps) => {\n const { element } = props;\n\n const blockMatch = Object.values(blocks).find((block) => block.matchNode(element));\n const block = blockMatch || blocks.paragraph;\n const nodePath = ReactEditor.findPath(editor, element);\n\n const isDraggable = block.isDraggable?.(element) ?? true;\n\n if (!isDraggable || isMobile) {\n return block.renderElement(props);\n }\n\n return (\n <DragAndDropElement\n index={nodePath}\n setDragDirection={setDragDirection}\n dragDirection={dragDirection}\n dragHandleTopMargin={block.dragHandleTopMargin}\n >\n {block.renderElement(props)}\n </DragAndDropElement>\n );\n};\n\nconst dragNoop = () => true;\n\ninterface BlocksContentProps {\n placeholder?: string;\n ariaLabelId: string;\n}\n\nconst BlocksContent = ({ placeholder, ariaLabelId }: BlocksContentProps) => {\n const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode } =\n useBlocksEditorContext('BlocksContent');\n const isMobile = useIsMobile();\n const blocksRef = React.useRef<HTMLDivElement>(null);\n const { formatMessage } = useIntl();\n const [dragDirection, setDragDirection] = React.useState<DragDirection | null>(null);\n const { modalElement, handleConversionResult } = useConversionModal();\n\n // Create renderLeaf function based on the modifiers store\n const renderLeaf = React.useCallback(\n (props: ExtendedRenderLeafProps) => baseRenderLeaf(props, modifiers),\n [modifiers]\n );\n\n const handleMoveBlocks = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const start = Range.start(editor.selection);\n const currentIndex = [start.path[0]];\n let newIndexPosition = 0;\n\n if (event.key === 'ArrowUp') {\n newIndexPosition = currentIndex[0] > 0 ? currentIndex[0] - 1 : currentIndex[0];\n } else {\n newIndexPosition =\n currentIndex[0] < editor.children.length - 1 ? currentIndex[0] + 1 : currentIndex[0];\n }\n\n const newIndex = [newIndexPosition];\n\n if (newIndexPosition !== currentIndex[0]) {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndex[0] + 1}`,\n position: `${newIndex[0] + 1} of ${editor.children.length}`,\n }\n )\n );\n\n event.preventDefault();\n }\n };\n\n // Create renderElement function base on the blocks store\n const renderElement = React.useCallback(\n (props: RenderElementProps) =>\n baseRenderElement({ props, blocks, editor, dragDirection, setDragDirection, isMobile }),\n [blocks, editor, dragDirection, isMobile, setDragDirection]\n );\n\n const checkSnippet = (event: React.KeyboardEvent<HTMLElement>) => {\n // Get current text block\n if (!editor.selection) {\n return;\n }\n\n const [textNode, textNodePath] = Editor.node(editor, editor.selection.anchor.path);\n\n // Narrow the type to a text node\n if (Editor.isEditor(textNode) || textNode.type !== 'text') {\n return;\n }\n\n // Don't check for snippets if we're not at the start of a block\n if (textNodePath.at(-1) !== 0) {\n return;\n }\n\n // Check if the text node starts with a known snippet\n const blockMatchingSnippet = Object.values(blocks).find((block) => {\n return block.snippets?.includes(textNode.text);\n });\n\n if (blockMatchingSnippet?.handleConvert) {\n // Prevent the space from being created and delete the snippet\n event.preventDefault();\n Transforms.delete(editor, {\n distance: textNode.text.length,\n unit: 'character',\n reverse: true,\n });\n\n // Convert the selected block\n const maybeRenderModal = blockMatchingSnippet.handleConvert(editor);\n handleConversionResult(maybeRenderModal);\n }\n };\n\n const handleEnter = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n // Allow forced line breaks when shift is pressed\n if (event.shiftKey && selectedNode.type !== 'image') {\n Transforms.insertText(editor, '\\n');\n return;\n }\n\n // Check if there's an enter handler for the selected block\n if (selectedBlock.handleEnterKey) {\n selectedBlock.handleEnterKey(editor);\n } else {\n blocks.paragraph.handleEnterKey!(editor);\n }\n };\n\n const handleBackspaceEvent = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n\n if (!selectedBlock) {\n return;\n }\n\n if (selectedBlock.handleBackspaceKey) {\n selectedBlock.handleBackspaceKey(editor, event);\n }\n };\n\n const handleTab = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n event.preventDefault();\n\n if (event.shiftKey && selectedBlock.handleShiftTab) {\n // Handle Shift+Tab (unindent)\n selectedBlock.handleShiftTab(editor);\n } else if (!event.shiftKey && selectedBlock.handleTab) {\n // Handle Tab (indent)\n selectedBlock.handleTab(editor);\n }\n };\n\n const handleKeyboardShortcuts = (event: React.KeyboardEvent<HTMLElement>) => {\n const isCtrlOrCmd = event.metaKey || event.ctrlKey;\n\n if (isCtrlOrCmd) {\n // Check if there's a modifier to toggle\n Object.values(modifiers).forEach((value) => {\n if (value.isValidEventKey(event)) {\n value.handleToggle(editor);\n return;\n }\n });\n if (event.shiftKey && ['ArrowUp', 'ArrowDown'].includes(event.key)) {\n handleMoveBlocks(editor, event);\n }\n }\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLElement> = (event) => {\n // Find the right block-specific handlers for enter and backspace key presses\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n return handleEnter(event);\n case 'Backspace':\n return handleBackspaceEvent(event);\n case 'Tab':\n return handleTab(event);\n case 'Escape':\n return ReactEditor.blur(editor);\n }\n handleKeyboardShortcuts(event);\n // Check if a snippet was triggered\n if (event.key === ' ') {\n checkSnippet(event);\n }\n };\n\n /**\n * scrollSelectionIntoView : Slate's default method to scroll a DOM selection into the view,\n * thats shifting layout for us when there is a overflowY:scroll on the viewport.\n * We are overriding it to check if the selection is not fully within the visible area of the editor,\n * we use scrollBy one line to the bottom\n */\n\n const handleScrollSelectionIntoView = React.useCallback(() => {\n if (!editor.selection || !blocksRef.current) {\n return;\n }\n\n const domRange = ReactEditor.toDOMRange(editor, editor.selection);\n const domRect = domRange.getBoundingClientRect();\n\n const editorRect = blocksRef.current.getBoundingClientRect();\n\n // Check if the selection is not fully within the visible area of the editor\n if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {\n // Scroll by one line to the bottom\n blocksRef.current.scrollBy({\n top: 28, // 20px is the line-height + 8px line gap\n behavior: 'smooth',\n });\n }\n }, [editor]);\n\n return (\n <Box\n ref={blocksRef}\n grow={1}\n width=\"100%\"\n overflow=\"auto\"\n fontSize={2}\n background=\"neutral0\"\n color=\"neutral800\"\n lineHeight={6}\n paddingLeft={{ initial: 4, medium: 0 }}\n paddingRight={7}\n paddingTop={6}\n paddingBottom={3}\n >\n <StyledEditable\n aria-labelledby={ariaLabelId}\n readOnly={disabled}\n placeholder={placeholder}\n $isExpandedMode={isExpandedMode}\n decorate={decorateCode}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n onKeyDown={handleKeyDown}\n scrollSelectionIntoView={handleScrollSelectionIntoView}\n // As we have our own handler to drag and drop the elements returing true will skip slate's own event handler\n onDrop={dragNoop}\n onDragStart={dragNoop}\n />\n {modalElement}\n </Box>\n );\n};\n\nexport { BlocksContent, BlocksContentProps };\n"],"names":["StyledEditable","styled","Editable","theme","spaces","props","$isExpandedMode","breakpoints","medium","Wrapper","Box","$isOverDropTarget","DropPlaceholder","dragDirection","placeholderMargin","css","DIRECTIONS","UPWARD","DOWNWARD","DragItem","Flex","$dragVisibility","DragIconButton","IconButton","borderRadius","$dragHandleTopMargin","colors","neutral100","neutral150","neutral500","DragAndDropElement","children","index","setDragDirection","dragHandleTopMargin","editor","disabled","name","setLiveText","useBlocksEditorContext","formatMessage","useIntl","dragVisibility","setDragVisibility","React","useState","isDragAndDropEnabled","handleMoveBlock","useCallback","newIndex","currentIndex","Transforms","moveNodes","at","to","currentIndexPosition","slice","newIndexPosition","id","getTranslation","defaultMessage","item","join","position","length","handlerId","isDragging","isOverDropTarget","direction","blockRef","dropRef","dragRef","useDragAndDrop","type","ItemTypes","BLOCKS","displayedValue","onDropItem","composedBoxRefs","useComposedRefs","useEffect","selection","_jsxs","ref","_jsx","borderStyle","borderColor","borderWidth","width","marginLeft","as","CloneDragItem","data-handler-id","gap","paddingLeft","alignItems","onDragStart","event","target","currentTarget","getAttribute","preventDefault","style","opacity","undefined","onDragEnd","onMouseEnter","onFocusCapture","onBlurCapture","onMouseLeave","aria-disabled","tag","contentEditable","role","tabIndex","withTooltip","label","onClick","e","stopPropagation","draggable","Drag","color","baseRenderLeaf","modifiers","wrappedChildren","getEntries","reduce","currentChildren","modifierEntry","modifier","leaf","renderLeaf","span","attributes","className","baseRenderElement","blocks","isMobile","element","blockMatch","Object","values","find","block","matchNode","paragraph","nodePath","ReactEditor","findPath","isDraggable","renderElement","dragNoop","BlocksContent","placeholder","ariaLabelId","isExpandedMode","useIsMobile","blocksRef","useRef","modalElement","handleConversionResult","useConversionModal","handleMoveBlocks","start","Range","path","key","checkSnippet","textNode","textNodePath","Editor","node","anchor","isEditor","blockMatchingSnippet","snippets","includes","text","handleConvert","delete","distance","unit","reverse","maybeRenderModal","handleEnter","selectedNode","selectedBlock","shiftKey","insertText","handleEnterKey","handleBackspaceEvent","handleBackspaceKey","handleTab","handleShiftTab","handleKeyboardShortcuts","isCtrlOrCmd","metaKey","ctrlKey","forEach","value","isValidEventKey","handleToggle","handleKeyDown","blur","handleScrollSelectionIntoView","current","domRange","toDOMRange","domRect","getBoundingClientRect","editorRect","top","bottom","scrollBy","behavior","grow","overflow","fontSize","background","lineHeight","initial","paddingRight","paddingTop","paddingBottom","aria-labelledby","readOnly","decorate","decorateCode","onKeyDown","scrollSelectionIntoView","onDrop"],"mappings":"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"}
|
|
@@ -416,8 +416,12 @@ const BlocksContent = ({ placeholder, ariaLabelId })=>{
|
|
|
416
416
|
if (!selectedBlock) {
|
|
417
417
|
return;
|
|
418
418
|
}
|
|
419
|
-
|
|
420
|
-
|
|
419
|
+
event.preventDefault();
|
|
420
|
+
if (event.shiftKey && selectedBlock.handleShiftTab) {
|
|
421
|
+
// Handle Shift+Tab (unindent)
|
|
422
|
+
selectedBlock.handleShiftTab(editor);
|
|
423
|
+
} else if (!event.shiftKey && selectedBlock.handleTab) {
|
|
424
|
+
// Handle Tab (indent)
|
|
421
425
|
selectedBlock.handleTab(editor);
|
|
422
426
|
}
|
|
423
427
|
};
|