@strapi/content-manager 0.0.0-next.d8f8da8f5b333be4a20563a1a15cd61350139956 → 0.0.0-next.da19c0501ff87d14fb664b55b8e0630d3c548485
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/ConfigurationForm/EditFieldForm.js +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.js +304 -205
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs +309 -211
- package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.js +1 -1
- package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.mjs +3 -3
- package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.js +3 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.mjs +3 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.js +3 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +3 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.js +3 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +3 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +94 -50
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +97 -53
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +287 -11
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +270 -14
- package/dist/admin/components/Widgets.mjs.map +1 -1
- package/dist/admin/history/components/VersionContent.js +24 -3
- package/dist/admin/history/components/VersionContent.js.map +1 -1
- package/dist/admin/history/components/VersionContent.mjs +25 -4
- package/dist/admin/history/components/VersionContent.mjs.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +7 -0
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.mjs +8 -1
- package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
- package/dist/admin/history/components/VersionsList.js +1 -1
- package/dist/admin/history/components/VersionsList.js.map +1 -1
- package/dist/admin/history/components/VersionsList.mjs +1 -1
- package/dist/admin/history/components/VersionsList.mjs.map +1 -1
- package/dist/admin/history/pages/History.js +7 -7
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/pages/History.mjs +7 -7
- package/dist/admin/history/pages/History.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +7 -6
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +8 -7
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/index.js +47 -8
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +47 -9
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/layout.js +28 -33
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +29 -15
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +98 -77
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +100 -79
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Blocker.js +18 -0
- package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js +104 -70
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +106 -72
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +66 -2
- 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 +66 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +54 -14
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +55 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +7 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +7 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +15 -3
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +16 -4
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +1 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +1 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +22 -8
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +24 -10
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +160 -107
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +163 -110
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +6 -3
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +6 -3
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +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 +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 +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +59 -34
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +60 -34
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +85 -25
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +87 -27
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +20 -7
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +20 -7
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +128 -0
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +128 -1
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +1 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +227 -132
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +229 -134
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +12 -2
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +12 -2
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +8 -2
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +8 -2
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js +13 -3
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +189 -0
- package/dist/admin/preview/components/InputPopover.js.map +1 -0
- package/dist/admin/preview/components/InputPopover.mjs +167 -0
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
- package/dist/admin/preview/components/PreviewHeader.js +0 -1
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs +0 -1
- package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
- package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
- package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js +77 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
- package/dist/admin/preview/pages/Preview.js +178 -74
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +180 -76
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +56 -0
- package/dist/admin/preview/utils/constants.js.map +1 -0
- package/dist/admin/preview/utils/constants.mjs +52 -0
- package/dist/admin/preview/utils/constants.mjs.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.js +107 -0
- package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
- package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.js +22 -0
- package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
- package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
- package/dist/admin/preview/utils/previewScript.js +534 -0
- package/dist/admin/preview/utils/previewScript.js.map +1 -0
- package/dist/admin/preview/utils/previewScript.mjs +532 -0
- package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
- package/dist/admin/services/api.js +5 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +5 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/documents.js +59 -17
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +59 -17
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
- package/dist/admin/src/components/LeftMenu.d.ts +3 -1
- package/dist/admin/src/components/Widgets.d.ts +8 -3
- package/dist/admin/src/exports.d.ts +1 -0
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -11
- package/dist/admin/src/pages/EditView/components/Header.d.ts +4 -0
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
- package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
- package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +12 -0
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +55 -0
- package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
- package/dist/admin/src/preview/utils/previewScript.d.ts +24 -0
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +23 -17
- package/dist/admin/src/services/homepage.d.ts +1 -1
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/src/utils/api.d.ts +1 -1
- package/dist/admin/src/utils/validation.d.ts +1 -0
- package/dist/admin/translations/en.json.js +13 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +13 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +6 -2
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +6 -2
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +11 -2
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +11 -2
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/utils/api.js +1 -1
- package/dist/admin/utils/api.js.map +1 -1
- package/dist/admin/utils/api.mjs +1 -1
- package/dist/admin/utils/api.mjs.map +1 -1
- package/dist/admin/utils/validation.js +19 -7
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +19 -7
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +2 -1
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +2 -1
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/content-types.js +11 -1
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +11 -1
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/relations.js +8 -6
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +8 -6
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js +14 -2
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/controllers/validation/index.mjs +14 -2
- package/dist/server/controllers/validation/index.mjs.map +1 -1
- package/dist/server/history/services/lifecycles.js +23 -19
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs +23 -19
- package/dist/server/history/services/lifecycles.mjs.map +1 -1
- package/dist/server/homepage/controllers/homepage.js +5 -0
- package/dist/server/homepage/controllers/homepage.js.map +1 -1
- package/dist/server/homepage/controllers/homepage.mjs +5 -0
- package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
- package/dist/server/homepage/routes/homepage.js +11 -0
- package/dist/server/homepage/routes/homepage.js.map +1 -1
- package/dist/server/homepage/routes/homepage.mjs +11 -0
- package/dist/server/homepage/routes/homepage.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +86 -46
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +86 -46
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/preview/services/preview-config.js +11 -32
- package/dist/server/preview/services/preview-config.js.map +1 -1
- package/dist/server/preview/services/preview-config.mjs +12 -33
- package/dist/server/preview/services/preview-config.mjs.map +1 -1
- package/dist/server/preview/services/preview.js +4 -0
- package/dist/server/preview/services/preview.js.map +1 -1
- package/dist/server/preview/services/preview.mjs +4 -0
- package/dist/server/preview/services/preview.mjs.map +1 -1
- package/dist/server/services/data-mapper.js +4 -1
- package/dist/server/services/data-mapper.js.map +1 -1
- package/dist/server/services/data-mapper.mjs +4 -1
- package/dist/server/services/data-mapper.mjs.map +1 -1
- package/dist/server/services/document-manager.js +8 -1
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +8 -1
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +3 -1
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +3 -1
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/utils/configuration/attributes.js +1 -1
- package/dist/server/services/utils/configuration/attributes.js.map +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
- package/dist/server/services/utils/configuration/layouts.js +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 +8 -0
- package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
- package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +11 -0
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +11 -0
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/content-types.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/single-types.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/index.d.ts +6 -1
- package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts +2 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/index.d.ts +7 -0
- package/dist/server/src/homepage/index.d.ts.map +1 -1
- package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts +4 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/index.d.ts +7 -0
- package/dist/server/src/homepage/services/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +8 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/index.d.ts +1 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview.d.ts.map +1 -1
- package/dist/server/src/preview/utils.d.ts +1 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +1 -0
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +8 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +0 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +13 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/package.json +11 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Field, Flex, Popover, useComposedRefs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Editor, Path, Range, Transforms } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { editLink, removeLink } from '../utils/links';\nimport { isLinkNode, type Block } from '../utils/types';\n\nconst StyledLink = styled(Box)`\n text-decoration: none;\n`;\n\nconst RemoveButton = styled(Button)<{ $visible: boolean }>`\n visibility: ${(props) => (props.$visible ? 'visible' : 'hidden')};\n`;\n\ninterface LinkContentProps extends RenderElementProps {\n link: Block<'link'>;\n}\n\nconst LinkContent = React.forwardRef<HTMLAnchorElement, LinkContentProps>(\n ({ link, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, link);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const elementText = link.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(link.url);\n const linkInputRef = React.useRef<HTMLInputElement>(null);\n const isLastInsertedLink = editor.lastInsertedLinkPath\n ? !Path.equals(path, editor.lastInsertedLinkPath)\n : true;\n const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);\n\n const onLinkChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkUrl(e.target.value);\n\n try {\n // eslint-disable-next-line no-new\n new URL(\n e.target.value?.startsWith('/') ? `https://strapi.io${e.target.value}` : e.target.value\n );\n } catch (error) {\n setIsSaveDisabled(true);\n }\n };\n\n const handleSave: React.FormEventHandler = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced)\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText });\n setPopoverOpen(false);\n editor.lastInsertedLinkPath = null;\n ReactEditor.focus(editor);\n };\n\n const handleClose = () => {\n if (link.url === '') {\n removeLink(editor);\n }\n\n setPopoverOpen(false);\n ReactEditor.focus(editor);\n };\n\n React.useEffect(() => {\n // Focus on the link input element when the popover opens\n if (popoverOpen) linkInputRef.current?.focus();\n }, [popoverOpen]);\n\n const inputNotDirty =\n !linkText ||\n !linkUrl ||\n (link.url && link.url === linkUrl && elementText && elementText === linkText);\n\n return (\n <Popover.Root open={popoverOpen}>\n <Popover.Trigger>\n <StyledLink\n {...attributes}\n ref={forwardedRef}\n tag=\"a\"\n href={link.url}\n onClick={() => setPopoverOpen(true)}\n color=\"primary600\"\n >\n {children}\n </StyledLink>\n </Popover.Trigger>\n <Popover.Content onPointerDownOutside={handleClose}>\n <Flex padding={4} direction=\"column\" gap={4}>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </Field.Label>\n <Field.Input\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => {\n setLinkText(e.target.value);\n }}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </Field.Label>\n <Field.Input\n ref={linkInputRef}\n name=\"url\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.placeholder',\n defaultMessage: 'Paste link',\n })}\n value={linkUrl}\n onChange={onLinkChange}\n />\n </Flex>\n </Field.Root>\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <RemoveButton\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n $visible={isLastInsertedLink}\n >\n {formatMessage({\n id: 'components.Blocks.popover.remove',\n defaultMessage: 'Remove',\n })}\n </RemoveButton>\n <Flex gap={2}>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'global.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button disabled={Boolean(inputNotDirty) || isSaveDisabled} onClick={handleSave}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n }\n);\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>((props, forwardedRef) => {\n if (!isLinkNode(props.element)) {\n return null;\n }\n\n // LinkContent uses React hooks that rely on props.element being a link. If the type guard above\n // doesn't pass, those hooks would be called conditionnally, which is not allowed.\n // Hence the need for a separate component.\n return <LinkContent {...props} link={props.element} ref={forwardedRef} />;\n});\n\nconst linkBlocks: Pick<BlocksStore, 'link'> = {\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n // No handleConvert here, links are created via the link button in the toolbar\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n },\n};\n\nexport { linkBlocks };\n"],"names":["StyledLink","styled","Box","RemoveButton","Button","props","$visible","LinkContent","React","forwardRef","link","children","attributes","forwardedRef","formatMessage","useIntl","editor","useBlocksEditorContext","path","ReactEditor","findPath","popoverOpen","setPopoverOpen","useState","lastInsertedLinkPath","Path","equals","elementText","map","child","text","join","linkText","setLinkText","linkUrl","setLinkUrl","url","linkInputRef","useRef","isLastInsertedLink","isSaveDisabled","setIsSaveDisabled","onLinkChange","e","target","value","URL","startsWith","error","handleSave","stopPropagation","selection","Range","isCollapsed","parentPath","Editor","parent","focus","Transforms","select","editLink","handleClose","removeLink","useEffect","current","inputNotDirty","_jsxs","Popover","Root","open","_jsx","Trigger","ref","tag","href","onClick","color","Content","onPointerDownOutside","Flex","padding","direction","gap","Field","width","alignItems","Label","id","defaultMessage","Input","name","placeholder","onChange","justifyContent","variant","disabled","Boolean","Link","isLinkNode","element","linkBlocks","renderElement","matchNode","node","type","isInBlocksSelector"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Link.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Field, Flex, Popover, useComposedRefs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Editor, Path, Range, Transforms } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { editLink, removeLink } from '../utils/links';\nimport { isLinkNode, type Block } from '../utils/types';\n\nconst StyledLink = styled(Box)`\n text-decoration: none;\n`;\n\nconst RemoveButton = styled(Button)<{ $visible: boolean }>`\n visibility: ${(props) => (props.$visible ? 'visible' : 'hidden')};\n`;\n\ninterface LinkContentProps extends RenderElementProps {\n link: Block<'link'>;\n}\n\nconst LinkContent = React.forwardRef<HTMLAnchorElement, LinkContentProps>(\n ({ link, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, link);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const elementText = link.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(link.url);\n const [linkRel, setLinRel] = React.useState(link.rel);\n const [linkTarget, setLinkTarget] = React.useState(link.target);\n const linkInputRef = React.useRef<HTMLInputElement>(null);\n const isLastInsertedLink = editor.lastInsertedLinkPath\n ? !Path.equals(path, editor.lastInsertedLinkPath)\n : true;\n const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);\n\n const onLinkChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkUrl(e.target.value);\n\n try {\n // eslint-disable-next-line no-new\n new URL(\n e.target.value?.startsWith('/') ? `https://strapi.io${e.target.value}` : e.target.value\n );\n } catch (error) {\n setIsSaveDisabled(true);\n }\n };\n\n const onLinkRelChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinRel(e.target.value);\n };\n\n const onLinkTargetChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkTarget(e.target.value);\n };\n\n const handleSave: React.FormEventHandler = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced)\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText, rel: linkRel, target: linkTarget });\n setPopoverOpen(false);\n editor.lastInsertedLinkPath = null;\n ReactEditor.focus(editor);\n };\n\n const handleClose = () => {\n if (link.url === '') {\n removeLink(editor);\n }\n\n setPopoverOpen(false);\n ReactEditor.focus(editor);\n };\n\n React.useEffect(() => {\n // Focus on the link input element when the popover opens\n if (popoverOpen) linkInputRef.current?.focus();\n }, [popoverOpen]);\n\n const inputNotDirty =\n !linkText ||\n !linkUrl ||\n (link.url &&\n link.url === linkUrl &&\n elementText &&\n elementText === linkText &&\n link.rel === linkRel &&\n link.target === linkTarget);\n\n return (\n <Popover.Root open={popoverOpen}>\n <Popover.Trigger>\n <StyledLink\n {...attributes}\n ref={forwardedRef}\n tag=\"a\"\n href={link.url}\n rel={link.rel}\n target={link.target}\n onClick={() => setPopoverOpen(true)}\n color=\"primary600\"\n >\n {children}\n </StyledLink>\n </Popover.Trigger>\n <Popover.Content onPointerDownOutside={handleClose}>\n <Flex padding={4} direction=\"column\" gap={4}>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </Field.Label>\n <Field.Input\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => {\n setLinkText(e.target.value);\n }}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </Field.Label>\n <Field.Input\n ref={linkInputRef}\n name=\"url\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.placeholder',\n defaultMessage: 'Paste link',\n })}\n value={linkUrl}\n onChange={onLinkChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.rel',\n defaultMessage: 'Rel (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"rel\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.rel.placeholder',\n defaultMessage: 'noopener, nofollow, noreferrer',\n })}\n value={linkRel}\n onChange={onLinkRelChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.target',\n defaultMessage: 'Target (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"target\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.target.placeholder',\n defaultMessage: '_blank, _self, _parent, _top',\n })}\n value={linkTarget}\n onChange={onLinkTargetChange}\n />\n </Flex>\n </Field.Root>\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <RemoveButton\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n $visible={isLastInsertedLink}\n >\n {formatMessage({\n id: 'components.Blocks.popover.remove',\n defaultMessage: 'Remove',\n })}\n </RemoveButton>\n <Flex gap={2}>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'global.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button disabled={Boolean(inputNotDirty) || isSaveDisabled} onClick={handleSave}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n }\n);\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>((props, forwardedRef) => {\n if (!isLinkNode(props.element)) {\n return null;\n }\n\n // LinkContent uses React hooks that rely on props.element being a link. If the type guard above\n // doesn't pass, those hooks would be called conditionnally, which is not allowed.\n // Hence the need for a separate component.\n return <LinkContent {...props} link={props.element} ref={forwardedRef} />;\n});\n\nconst linkBlocks: Pick<BlocksStore, 'link'> = {\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n // No handleConvert here, links are created via the link button in the toolbar\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n },\n};\n\nexport { linkBlocks };\n"],"names":["StyledLink","styled","Box","RemoveButton","Button","props","$visible","LinkContent","React","forwardRef","link","children","attributes","forwardedRef","formatMessage","useIntl","editor","useBlocksEditorContext","path","ReactEditor","findPath","popoverOpen","setPopoverOpen","useState","lastInsertedLinkPath","Path","equals","elementText","map","child","text","join","linkText","setLinkText","linkUrl","setLinkUrl","url","linkRel","setLinRel","rel","linkTarget","setLinkTarget","target","linkInputRef","useRef","isLastInsertedLink","isSaveDisabled","setIsSaveDisabled","onLinkChange","e","value","URL","startsWith","error","onLinkRelChange","onLinkTargetChange","handleSave","stopPropagation","selection","Range","isCollapsed","parentPath","Editor","parent","focus","Transforms","select","editLink","handleClose","removeLink","useEffect","current","inputNotDirty","_jsxs","Popover","Root","open","_jsx","Trigger","ref","tag","href","onClick","color","Content","onPointerDownOutside","Flex","padding","direction","gap","Field","width","alignItems","Label","id","defaultMessage","Input","name","placeholder","onChange","justifyContent","variant","disabled","Boolean","Link","isLinkNode","element","linkBlocks","renderElement","matchNode","node","type","isInBlocksSelector"],"mappings":"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"}
|
|
@@ -23,6 +23,8 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
|
|
|
23
23
|
const elementText = link.children.map((child)=>child.text).join('');
|
|
24
24
|
const [linkText, setLinkText] = React.useState(elementText);
|
|
25
25
|
const [linkUrl, setLinkUrl] = React.useState(link.url);
|
|
26
|
+
const [linkRel, setLinRel] = React.useState(link.rel);
|
|
27
|
+
const [linkTarget, setLinkTarget] = React.useState(link.target);
|
|
26
28
|
const linkInputRef = React.useRef(null);
|
|
27
29
|
const isLastInsertedLink = editor.lastInsertedLinkPath ? !Path.equals(path, editor.lastInsertedLinkPath) : true;
|
|
28
30
|
const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);
|
|
@@ -36,6 +38,14 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
|
|
|
36
38
|
setIsSaveDisabled(true);
|
|
37
39
|
}
|
|
38
40
|
};
|
|
41
|
+
const onLinkRelChange = (e)=>{
|
|
42
|
+
setIsSaveDisabled(false);
|
|
43
|
+
setLinRel(e.target.value);
|
|
44
|
+
};
|
|
45
|
+
const onLinkTargetChange = (e)=>{
|
|
46
|
+
setIsSaveDisabled(false);
|
|
47
|
+
setLinkTarget(e.target.value);
|
|
48
|
+
};
|
|
39
49
|
const handleSave = (e)=>{
|
|
40
50
|
e.stopPropagation();
|
|
41
51
|
// If the selection is collapsed, we select the parent node because we want all the link to be replaced)
|
|
@@ -45,7 +55,9 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
|
|
|
45
55
|
}
|
|
46
56
|
editLink(editor, {
|
|
47
57
|
url: linkUrl,
|
|
48
|
-
text: linkText
|
|
58
|
+
text: linkText,
|
|
59
|
+
rel: linkRel,
|
|
60
|
+
target: linkTarget
|
|
49
61
|
});
|
|
50
62
|
setPopoverOpen(false);
|
|
51
63
|
editor.lastInsertedLinkPath = null;
|
|
@@ -64,7 +76,7 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
|
|
|
64
76
|
}, [
|
|
65
77
|
popoverOpen
|
|
66
78
|
]);
|
|
67
|
-
const inputNotDirty = !linkText || !linkUrl || link.url && link.url === linkUrl && elementText && elementText === linkText;
|
|
79
|
+
const inputNotDirty = !linkText || !linkUrl || link.url && link.url === linkUrl && elementText && elementText === linkText && link.rel === linkRel && link.target === linkTarget;
|
|
68
80
|
return /*#__PURE__*/ jsxs(Popover.Root, {
|
|
69
81
|
open: popoverOpen,
|
|
70
82
|
children: [
|
|
@@ -74,6 +86,8 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
|
|
|
74
86
|
ref: forwardedRef,
|
|
75
87
|
tag: "a",
|
|
76
88
|
href: link.url,
|
|
89
|
+
rel: link.rel,
|
|
90
|
+
target: link.target,
|
|
77
91
|
onClick: ()=>setPopoverOpen(true),
|
|
78
92
|
color: "primary600",
|
|
79
93
|
children: children
|
|
@@ -139,6 +153,56 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
|
|
|
139
153
|
]
|
|
140
154
|
})
|
|
141
155
|
}),
|
|
156
|
+
/*#__PURE__*/ jsx(Field.Root, {
|
|
157
|
+
width: "368px",
|
|
158
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
159
|
+
direction: "column",
|
|
160
|
+
gap: 1,
|
|
161
|
+
alignItems: "stretch",
|
|
162
|
+
children: [
|
|
163
|
+
/*#__PURE__*/ jsx(Field.Label, {
|
|
164
|
+
children: formatMessage({
|
|
165
|
+
id: 'components.Blocks.popover.link.rel',
|
|
166
|
+
defaultMessage: 'Rel (optional)'
|
|
167
|
+
})
|
|
168
|
+
}),
|
|
169
|
+
/*#__PURE__*/ jsx(Field.Input, {
|
|
170
|
+
name: "rel",
|
|
171
|
+
placeholder: formatMessage({
|
|
172
|
+
id: 'components.Blocks.popover.link.rel.placeholder',
|
|
173
|
+
defaultMessage: 'noopener, nofollow, noreferrer'
|
|
174
|
+
}),
|
|
175
|
+
value: linkRel,
|
|
176
|
+
onChange: onLinkRelChange
|
|
177
|
+
})
|
|
178
|
+
]
|
|
179
|
+
})
|
|
180
|
+
}),
|
|
181
|
+
/*#__PURE__*/ jsx(Field.Root, {
|
|
182
|
+
width: "368px",
|
|
183
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
184
|
+
direction: "column",
|
|
185
|
+
gap: 1,
|
|
186
|
+
alignItems: "stretch",
|
|
187
|
+
children: [
|
|
188
|
+
/*#__PURE__*/ jsx(Field.Label, {
|
|
189
|
+
children: formatMessage({
|
|
190
|
+
id: 'components.Blocks.popover.link.target',
|
|
191
|
+
defaultMessage: 'Target (optional)'
|
|
192
|
+
})
|
|
193
|
+
}),
|
|
194
|
+
/*#__PURE__*/ jsx(Field.Input, {
|
|
195
|
+
name: "target",
|
|
196
|
+
placeholder: formatMessage({
|
|
197
|
+
id: 'components.Blocks.popover.link.target.placeholder',
|
|
198
|
+
defaultMessage: '_blank, _self, _parent, _top'
|
|
199
|
+
}),
|
|
200
|
+
value: linkTarget,
|
|
201
|
+
onChange: onLinkTargetChange
|
|
202
|
+
})
|
|
203
|
+
]
|
|
204
|
+
})
|
|
205
|
+
}),
|
|
142
206
|
/*#__PURE__*/ jsxs(Flex, {
|
|
143
207
|
justifyContent: "space-between",
|
|
144
208
|
width: "100%",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Field, Flex, Popover, useComposedRefs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Editor, Path, Range, Transforms } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { editLink, removeLink } from '../utils/links';\nimport { isLinkNode, type Block } from '../utils/types';\n\nconst StyledLink = styled(Box)`\n text-decoration: none;\n`;\n\nconst RemoveButton = styled(Button)<{ $visible: boolean }>`\n visibility: ${(props) => (props.$visible ? 'visible' : 'hidden')};\n`;\n\ninterface LinkContentProps extends RenderElementProps {\n link: Block<'link'>;\n}\n\nconst LinkContent = React.forwardRef<HTMLAnchorElement, LinkContentProps>(\n ({ link, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, link);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const elementText = link.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(link.url);\n const linkInputRef = React.useRef<HTMLInputElement>(null);\n const isLastInsertedLink = editor.lastInsertedLinkPath\n ? !Path.equals(path, editor.lastInsertedLinkPath)\n : true;\n const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);\n\n const onLinkChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkUrl(e.target.value);\n\n try {\n // eslint-disable-next-line no-new\n new URL(\n e.target.value?.startsWith('/') ? `https://strapi.io${e.target.value}` : e.target.value\n );\n } catch (error) {\n setIsSaveDisabled(true);\n }\n };\n\n const handleSave: React.FormEventHandler = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced)\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText });\n setPopoverOpen(false);\n editor.lastInsertedLinkPath = null;\n ReactEditor.focus(editor);\n };\n\n const handleClose = () => {\n if (link.url === '') {\n removeLink(editor);\n }\n\n setPopoverOpen(false);\n ReactEditor.focus(editor);\n };\n\n React.useEffect(() => {\n // Focus on the link input element when the popover opens\n if (popoverOpen) linkInputRef.current?.focus();\n }, [popoverOpen]);\n\n const inputNotDirty =\n !linkText ||\n !linkUrl ||\n (link.url && link.url === linkUrl && elementText && elementText === linkText);\n\n return (\n <Popover.Root open={popoverOpen}>\n <Popover.Trigger>\n <StyledLink\n {...attributes}\n ref={forwardedRef}\n tag=\"a\"\n href={link.url}\n onClick={() => setPopoverOpen(true)}\n color=\"primary600\"\n >\n {children}\n </StyledLink>\n </Popover.Trigger>\n <Popover.Content onPointerDownOutside={handleClose}>\n <Flex padding={4} direction=\"column\" gap={4}>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </Field.Label>\n <Field.Input\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => {\n setLinkText(e.target.value);\n }}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </Field.Label>\n <Field.Input\n ref={linkInputRef}\n name=\"url\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.placeholder',\n defaultMessage: 'Paste link',\n })}\n value={linkUrl}\n onChange={onLinkChange}\n />\n </Flex>\n </Field.Root>\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <RemoveButton\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n $visible={isLastInsertedLink}\n >\n {formatMessage({\n id: 'components.Blocks.popover.remove',\n defaultMessage: 'Remove',\n })}\n </RemoveButton>\n <Flex gap={2}>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'global.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button disabled={Boolean(inputNotDirty) || isSaveDisabled} onClick={handleSave}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n }\n);\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>((props, forwardedRef) => {\n if (!isLinkNode(props.element)) {\n return null;\n }\n\n // LinkContent uses React hooks that rely on props.element being a link. If the type guard above\n // doesn't pass, those hooks would be called conditionnally, which is not allowed.\n // Hence the need for a separate component.\n return <LinkContent {...props} link={props.element} ref={forwardedRef} />;\n});\n\nconst linkBlocks: Pick<BlocksStore, 'link'> = {\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n // No handleConvert here, links are created via the link button in the toolbar\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n },\n};\n\nexport { linkBlocks };\n"],"names":["StyledLink","styled","Box","RemoveButton","Button","props","$visible","LinkContent","React","forwardRef","link","children","attributes","forwardedRef","formatMessage","useIntl","editor","useBlocksEditorContext","path","ReactEditor","findPath","popoverOpen","setPopoverOpen","useState","lastInsertedLinkPath","Path","equals","elementText","map","child","text","join","linkText","setLinkText","linkUrl","setLinkUrl","url","linkInputRef","useRef","isLastInsertedLink","isSaveDisabled","setIsSaveDisabled","onLinkChange","e","target","value","URL","startsWith","error","handleSave","stopPropagation","selection","Range","isCollapsed","parentPath","Editor","parent","focus","Transforms","select","editLink","handleClose","removeLink","useEffect","current","inputNotDirty","_jsxs","Popover","Root","open","_jsx","Trigger","ref","tag","href","onClick","color","Content","onPointerDownOutside","Flex","padding","direction","gap","Field","width","alignItems","Label","id","defaultMessage","Input","name","placeholder","onChange","justifyContent","variant","disabled","Boolean","Link","isLinkNode","element","linkBlocks","renderElement","matchNode","node","type","isInBlocksSelector"],"mappings":";;;;;;;;;;;AAYA,MAAMA,UAAAA,GAAaC,MAAOC,CAAAA,GAAAA,CAAI;;AAE9B,CAAC;AAED,MAAMC,YAAAA,GAAeF,MAAOG,CAAAA,MAAAA,CAA8B;AAC5C,cAAA,EAAE,CAACC,KAAWA,GAAAA,KAAAA,CAAMC,QAAQ,GAAG,YAAY,QAAU,CAAA;AACnE,CAAC;AAMD,MAAMC,WAAcC,iBAAAA,KAAAA,CAAMC,UAAU,CAClC,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,UAAU,EAAE,EAAEC,YAAAA,GAAAA;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,MAAM,EAAE,GAAGC,sBAAuB,CAAA,MAAA,CAAA;AAC1C,IAAA,MAAMC,IAAOC,GAAAA,WAAAA,CAAYC,QAAQ,CAACJ,MAAQN,EAAAA,IAAAA,CAAAA;AAC1C,IAAA,MAAM,CAACW,WAAaC,EAAAA,cAAAA,CAAe,GAAGd,KAAAA,CAAMe,QAAQ,CAClDP,MAAAA,CAAOQ,oBAAoB,GAAGC,KAAKC,MAAM,CAACR,IAAMF,EAAAA,MAAAA,CAAOQ,oBAAoB,CAAI,GAAA,KAAA,CAAA;AAEjF,IAAA,MAAMG,WAAcjB,GAAAA,IAAAA,CAAKC,QAAQ,CAACiB,GAAG,CAAC,CAACC,KAAAA,GAAUA,KAAMC,CAAAA,IAAI,CAAEC,CAAAA,IAAI,CAAC,EAAA,CAAA;AAClE,IAAA,MAAM,CAACC,QAAUC,EAAAA,WAAAA,CAAY,GAAGzB,KAAAA,CAAMe,QAAQ,CAACI,WAAAA,CAAAA;IAC/C,MAAM,CAACO,SAASC,UAAW,CAAA,GAAG3B,MAAMe,QAAQ,CAACb,KAAK0B,GAAG,CAAA;IACrD,MAAMC,YAAAA,GAAe7B,KAAM8B,CAAAA,MAAM,CAAmB,IAAA,CAAA;IACpD,MAAMC,kBAAAA,GAAqBvB,MAAOQ,CAAAA,oBAAoB,GAClD,CAACC,IAAKC,CAAAA,MAAM,CAACR,IAAAA,EAAMF,MAAOQ,CAAAA,oBAAoB,CAC9C,GAAA,IAAA;AACJ,IAAA,MAAM,CAACgB,cAAgBC,EAAAA,iBAAAA,CAAkB,GAAGjC,KAAAA,CAAMe,QAAQ,CAAC,KAAA,CAAA;AAE3D,IAAA,MAAMmB,eAAe,CAACC,CAAAA,GAAAA;QACpBF,iBAAkB,CAAA,KAAA,CAAA;QAClBN,UAAWQ,CAAAA,CAAAA,CAAEC,MAAM,CAACC,KAAK,CAAA;QAEzB,IAAI;;YAEF,IAAIC,GAAAA,CACFH,EAAEC,MAAM,CAACC,KAAK,EAAEE,UAAAA,CAAW,OAAO,CAAC,iBAAiB,EAAEJ,CAAEC,CAAAA,MAAM,CAACC,KAAK,CAAC,CAAC,GAAGF,CAAAA,CAAEC,MAAM,CAACC,KAAK,CAAA;AAE3F,SAAA,CAAE,OAAOG,KAAO,EAAA;YACdP,iBAAkB,CAAA,IAAA,CAAA;AACpB;AACF,KAAA;AAEA,IAAA,MAAMQ,aAAqC,CAACN,CAAAA,GAAAA;AAC1CA,QAAAA,CAAAA,CAAEO,eAAe,EAAA;;QAGjB,IAAIlC,MAAAA,CAAOmC,SAAS,IAAIC,KAAAA,CAAMC,WAAW,CAACrC,MAAAA,CAAOmC,SAAS,CAAG,EAAA;YAC3D,MAAM,GAAGG,UAAW,CAAA,GAAGC,MAAOC,CAAAA,MAAM,CAACxC,MAAAA,EAAQA,MAAOmC,CAAAA,SAAS,CAACM,KAAK,EAAEvC,IAAAA,CAAAA;YACrEwC,UAAWC,CAAAA,MAAM,CAAC3C,MAAQsC,EAAAA,UAAAA,CAAAA;AAC5B;AAEAM,QAAAA,QAAAA,CAAS5C,MAAQ,EAAA;YAAEoB,GAAKF,EAAAA,OAAAA;YAASJ,IAAME,EAAAA;AAAS,SAAA,CAAA;QAChDV,cAAe,CAAA,KAAA,CAAA;AACfN,QAAAA,MAAAA,CAAOQ,oBAAoB,GAAG,IAAA;AAC9BL,QAAAA,WAAAA,CAAYsC,KAAK,CAACzC,MAAAA,CAAAA;AACpB,KAAA;AAEA,IAAA,MAAM6C,WAAc,GAAA,IAAA;QAClB,IAAInD,IAAAA,CAAK0B,GAAG,KAAK,EAAI,EAAA;YACnB0B,UAAW9C,CAAAA,MAAAA,CAAAA;AACb;QAEAM,cAAe,CAAA,KAAA,CAAA;AACfH,QAAAA,WAAAA,CAAYsC,KAAK,CAACzC,MAAAA,CAAAA;AACpB,KAAA;AAEAR,IAAAA,KAAAA,CAAMuD,SAAS,CAAC,IAAA;;QAEd,IAAI1C,WAAAA,EAAagB,YAAa2B,CAAAA,OAAO,EAAEP,KAAAA,EAAAA;KACtC,EAAA;AAACpC,QAAAA;AAAY,KAAA,CAAA;AAEhB,IAAA,MAAM4C,aACJ,GAAA,CAACjC,QACD,IAAA,CAACE,OACAxB,IAAAA,IAAAA,CAAK0B,GAAG,IAAI1B,IAAK0B,CAAAA,GAAG,KAAKF,OAAAA,IAAWP,eAAeA,WAAgBK,KAAAA,QAAAA;IAEtE,qBACEkC,IAAA,CAACC,QAAQC,IAAI,EAAA;QAACC,IAAMhD,EAAAA,WAAAA;;AAClB,0BAAAiD,GAAA,CAACH,QAAQI,OAAO,EAAA;AACd,gBAAA,QAAA,gBAAAD,GAACtE,CAAAA,UAAAA,EAAAA;AACE,oBAAA,GAAGY,UAAU;oBACd4D,GAAK3D,EAAAA,YAAAA;oBACL4D,GAAI,EAAA,GAAA;AACJC,oBAAAA,IAAAA,EAAMhE,KAAK0B,GAAG;AACduC,oBAAAA,OAAAA,EAAS,IAAMrD,cAAe,CAAA,IAAA,CAAA;oBAC9BsD,KAAM,EAAA,YAAA;AAELjE,oBAAAA,QAAAA,EAAAA;;;AAGL,0BAAA2D,GAAA,CAACH,QAAQU,OAAO,EAAA;gBAACC,oBAAsBjB,EAAAA,WAAAA;AACrC,gBAAA,QAAA,gBAAAK,IAACa,CAAAA,IAAAA,EAAAA;oBAAKC,OAAS,EAAA,CAAA;oBAAGC,SAAU,EAAA,QAAA;oBAASC,GAAK,EAAA,CAAA;;AACxC,sCAAAZ,GAAA,CAACa,MAAMf,IAAI,EAAA;4BAACgB,KAAM,EAAA,OAAA;AAChB,4BAAA,QAAA,gBAAAlB,IAACa,CAAAA,IAAAA,EAAAA;gCAAKE,SAAU,EAAA,QAAA;gCAASC,GAAK,EAAA,CAAA;gCAAGG,UAAW,EAAA,SAAA;;AAC1C,kDAAAf,GAAA,CAACa,MAAMG,KAAK,EAAA;kDACTxE,aAAc,CAAA;4CACbyE,EAAI,EAAA,gCAAA;4CACJC,cAAgB,EAAA;AAClB,yCAAA;;AAEF,kDAAAlB,GAAA,CAACa,MAAMM,KAAK,EAAA;wCACVC,IAAK,EAAA,MAAA;AACLC,wCAAAA,WAAAA,EAAa7E,aAAc,CAAA;4CACzByE,EAAI,EAAA,4CAAA;4CACJC,cAAgB,EAAA;AAClB,yCAAA,CAAA;wCACA3C,KAAOb,EAAAA,QAAAA;AACP4D,wCAAAA,QAAAA,EAAU,CAACjD,CAAAA,GAAAA;4CACTV,WAAYU,CAAAA,CAAAA,CAAEC,MAAM,CAACC,KAAK,CAAA;AAC5B;;;;;AAIN,sCAAAyB,GAAA,CAACa,MAAMf,IAAI,EAAA;4BAACgB,KAAM,EAAA,OAAA;AAChB,4BAAA,QAAA,gBAAAlB,IAACa,CAAAA,IAAAA,EAAAA;gCAAKE,SAAU,EAAA,QAAA;gCAASC,GAAK,EAAA,CAAA;gCAAGG,UAAW,EAAA,SAAA;;AAC1C,kDAAAf,GAAA,CAACa,MAAMG,KAAK,EAAA;kDACTxE,aAAc,CAAA;4CACbyE,EAAI,EAAA,gCAAA;4CACJC,cAAgB,EAAA;AAClB,yCAAA;;AAEF,kDAAAlB,GAAA,CAACa,MAAMM,KAAK,EAAA;wCACVjB,GAAKnC,EAAAA,YAAAA;wCACLqD,IAAK,EAAA,KAAA;AACLC,wCAAAA,WAAAA,EAAa7E,aAAc,CAAA;4CACzByE,EAAI,EAAA,4CAAA;4CACJC,cAAgB,EAAA;AAClB,yCAAA,CAAA;wCACA3C,KAAOX,EAAAA,OAAAA;wCACP0D,QAAUlD,EAAAA;;;;;sCAIhBwB,IAACa,CAAAA,IAAAA,EAAAA;4BAAKc,cAAe,EAAA,eAAA;4BAAgBT,KAAM,EAAA,MAAA;;8CACzCd,GAACnE,CAAAA,YAAAA,EAAAA;oCACC2F,OAAQ,EAAA,cAAA;AACRnB,oCAAAA,OAAAA,EAAS,IAAMb,UAAW9C,CAAAA,MAAAA,CAAAA;oCAC1BV,QAAUiC,EAAAA,kBAAAA;8CAETzB,aAAc,CAAA;wCACbyE,EAAI,EAAA,kCAAA;wCACJC,cAAgB,EAAA;AAClB,qCAAA;;8CAEFtB,IAACa,CAAAA,IAAAA,EAAAA;oCAAKG,GAAK,EAAA,CAAA;;sDACTZ,GAAClE,CAAAA,MAAAA,EAAAA;4CAAO0F,OAAQ,EAAA,UAAA;4CAAWnB,OAASd,EAAAA,WAAAA;sDACjC/C,aAAc,CAAA;gDACbyE,EAAI,EAAA,eAAA;gDACJC,cAAgB,EAAA;AAClB,6CAAA;;sDAEFlB,GAAClE,CAAAA,MAAAA,EAAAA;AAAO2F,4CAAAA,QAAAA,EAAUC,QAAQ/B,aAAkBzB,CAAAA,IAAAA,cAAAA;4CAAgBmC,OAAS1B,EAAAA,UAAAA;sDAClEnC,aAAc,CAAA;gDACbyE,EAAI,EAAA,aAAA;gDACJC,cAAgB,EAAA;AAClB,6CAAA;;;;;;;;;;;AAQhB,CAAA,CAAA;AAGF,MAAMS,IAAOzF,iBAAAA,KAAAA,CAAMC,UAAU,CAAwC,CAACJ,KAAOQ,EAAAA,YAAAA,GAAAA;AAC3E,IAAA,IAAI,CAACqF,UAAAA,CAAW7F,KAAM8F,CAAAA,OAAO,CAAG,EAAA;QAC9B,OAAO,IAAA;AACT;;;;AAKA,IAAA,qBAAO7B,GAAC/D,CAAAA,WAAAA,EAAAA;AAAa,QAAA,GAAGF,KAAK;AAAEK,QAAAA,IAAAA,EAAML,MAAM8F,OAAO;QAAE3B,GAAK3D,EAAAA;;AAC3D,CAAA,CAAA;AAEA,MAAMuF,UAAwC,GAAA;IAC5C1F,IAAM,EAAA;QACJ2F,aAAe,EAAA,CAAChG,sBACdiE,GAAC2B,CAAAA,IAAAA,EAAAA;AAAKE,gBAAAA,OAAAA,EAAS9F,MAAM8F,OAAO;AAAEvF,gBAAAA,UAAAA,EAAYP,MAAMO,UAAU;AACvDP,gBAAAA,QAAAA,EAAAA,KAAAA,CAAMM;;;AAIX2F,QAAAA,SAAAA,EAAW,CAACC,IAAAA,GAASA,IAAKC,CAAAA,IAAI,KAAK,MAAA;QACnCC,kBAAoB,EAAA;AACtB;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"Link.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Field, Flex, Popover, useComposedRefs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Editor, Path, Range, Transforms } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { editLink, removeLink } from '../utils/links';\nimport { isLinkNode, type Block } from '../utils/types';\n\nconst StyledLink = styled(Box)`\n text-decoration: none;\n`;\n\nconst RemoveButton = styled(Button)<{ $visible: boolean }>`\n visibility: ${(props) => (props.$visible ? 'visible' : 'hidden')};\n`;\n\ninterface LinkContentProps extends RenderElementProps {\n link: Block<'link'>;\n}\n\nconst LinkContent = React.forwardRef<HTMLAnchorElement, LinkContentProps>(\n ({ link, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, link);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const elementText = link.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(link.url);\n const [linkRel, setLinRel] = React.useState(link.rel);\n const [linkTarget, setLinkTarget] = React.useState(link.target);\n const linkInputRef = React.useRef<HTMLInputElement>(null);\n const isLastInsertedLink = editor.lastInsertedLinkPath\n ? !Path.equals(path, editor.lastInsertedLinkPath)\n : true;\n const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);\n\n const onLinkChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkUrl(e.target.value);\n\n try {\n // eslint-disable-next-line no-new\n new URL(\n e.target.value?.startsWith('/') ? `https://strapi.io${e.target.value}` : e.target.value\n );\n } catch (error) {\n setIsSaveDisabled(true);\n }\n };\n\n const onLinkRelChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinRel(e.target.value);\n };\n\n const onLinkTargetChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkTarget(e.target.value);\n };\n\n const handleSave: React.FormEventHandler = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced)\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText, rel: linkRel, target: linkTarget });\n setPopoverOpen(false);\n editor.lastInsertedLinkPath = null;\n ReactEditor.focus(editor);\n };\n\n const handleClose = () => {\n if (link.url === '') {\n removeLink(editor);\n }\n\n setPopoverOpen(false);\n ReactEditor.focus(editor);\n };\n\n React.useEffect(() => {\n // Focus on the link input element when the popover opens\n if (popoverOpen) linkInputRef.current?.focus();\n }, [popoverOpen]);\n\n const inputNotDirty =\n !linkText ||\n !linkUrl ||\n (link.url &&\n link.url === linkUrl &&\n elementText &&\n elementText === linkText &&\n link.rel === linkRel &&\n link.target === linkTarget);\n\n return (\n <Popover.Root open={popoverOpen}>\n <Popover.Trigger>\n <StyledLink\n {...attributes}\n ref={forwardedRef}\n tag=\"a\"\n href={link.url}\n rel={link.rel}\n target={link.target}\n onClick={() => setPopoverOpen(true)}\n color=\"primary600\"\n >\n {children}\n </StyledLink>\n </Popover.Trigger>\n <Popover.Content onPointerDownOutside={handleClose}>\n <Flex padding={4} direction=\"column\" gap={4}>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </Field.Label>\n <Field.Input\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => {\n setLinkText(e.target.value);\n }}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </Field.Label>\n <Field.Input\n ref={linkInputRef}\n name=\"url\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.placeholder',\n defaultMessage: 'Paste link',\n })}\n value={linkUrl}\n onChange={onLinkChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.rel',\n defaultMessage: 'Rel (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"rel\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.rel.placeholder',\n defaultMessage: 'noopener, nofollow, noreferrer',\n })}\n value={linkRel}\n onChange={onLinkRelChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.target',\n defaultMessage: 'Target (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"target\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.target.placeholder',\n defaultMessage: '_blank, _self, _parent, _top',\n })}\n value={linkTarget}\n onChange={onLinkTargetChange}\n />\n </Flex>\n </Field.Root>\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <RemoveButton\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n $visible={isLastInsertedLink}\n >\n {formatMessage({\n id: 'components.Blocks.popover.remove',\n defaultMessage: 'Remove',\n })}\n </RemoveButton>\n <Flex gap={2}>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'global.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button disabled={Boolean(inputNotDirty) || isSaveDisabled} onClick={handleSave}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n }\n);\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>((props, forwardedRef) => {\n if (!isLinkNode(props.element)) {\n return null;\n }\n\n // LinkContent uses React hooks that rely on props.element being a link. If the type guard above\n // doesn't pass, those hooks would be called conditionnally, which is not allowed.\n // Hence the need for a separate component.\n return <LinkContent {...props} link={props.element} ref={forwardedRef} />;\n});\n\nconst linkBlocks: Pick<BlocksStore, 'link'> = {\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n // No handleConvert here, links are created via the link button in the toolbar\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n },\n};\n\nexport { linkBlocks };\n"],"names":["StyledLink","styled","Box","RemoveButton","Button","props","$visible","LinkContent","React","forwardRef","link","children","attributes","forwardedRef","formatMessage","useIntl","editor","useBlocksEditorContext","path","ReactEditor","findPath","popoverOpen","setPopoverOpen","useState","lastInsertedLinkPath","Path","equals","elementText","map","child","text","join","linkText","setLinkText","linkUrl","setLinkUrl","url","linkRel","setLinRel","rel","linkTarget","setLinkTarget","target","linkInputRef","useRef","isLastInsertedLink","isSaveDisabled","setIsSaveDisabled","onLinkChange","e","value","URL","startsWith","error","onLinkRelChange","onLinkTargetChange","handleSave","stopPropagation","selection","Range","isCollapsed","parentPath","Editor","parent","focus","Transforms","select","editLink","handleClose","removeLink","useEffect","current","inputNotDirty","_jsxs","Popover","Root","open","_jsx","Trigger","ref","tag","href","onClick","color","Content","onPointerDownOutside","Flex","padding","direction","gap","Field","width","alignItems","Label","id","defaultMessage","Input","name","placeholder","onChange","justifyContent","variant","disabled","Boolean","Link","isLinkNode","element","linkBlocks","renderElement","matchNode","node","type","isInBlocksSelector"],"mappings":"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"}
|
|
@@ -300,6 +300,7 @@ const baseRenderElement = ({ props, blocks, editor, setDragDirection, dragDirect
|
|
|
300
300
|
children: block.renderElement(props)
|
|
301
301
|
});
|
|
302
302
|
};
|
|
303
|
+
const dragNoop = ()=>true;
|
|
303
304
|
const BlocksContent = ({ placeholder, ariaLabelId })=>{
|
|
304
305
|
const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode } = BlocksEditor.useBlocksEditorContext('BlocksContent');
|
|
305
306
|
const blocksRef = React__namespace.useRef(null);
|
|
@@ -474,24 +475,24 @@ const BlocksContent = ({ placeholder, ariaLabelId })=>{
|
|
|
474
475
|
* thats shifting layout for us when there is a overflowY:scroll on the viewport.
|
|
475
476
|
* We are overriding it to check if the selection is not fully within the visible area of the editor,
|
|
476
477
|
* we use scrollBy one line to the bottom
|
|
477
|
-
*/ const handleScrollSelectionIntoView = ()=>{
|
|
478
|
-
if (!editor.selection)
|
|
479
|
-
const domRange = slateReact.ReactEditor.toDOMRange(editor, editor.selection);
|
|
480
|
-
const domRect = domRange.getBoundingClientRect();
|
|
481
|
-
const blocksInput = blocksRef.current;
|
|
482
|
-
if (!blocksInput) {
|
|
478
|
+
*/ const handleScrollSelectionIntoView = React__namespace.useCallback(()=>{
|
|
479
|
+
if (!editor.selection || !blocksRef.current) {
|
|
483
480
|
return;
|
|
484
481
|
}
|
|
485
|
-
const
|
|
482
|
+
const domRange = slateReact.ReactEditor.toDOMRange(editor, editor.selection);
|
|
483
|
+
const domRect = domRange.getBoundingClientRect();
|
|
484
|
+
const editorRect = blocksRef.current.getBoundingClientRect();
|
|
486
485
|
// Check if the selection is not fully within the visible area of the editor
|
|
487
486
|
if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {
|
|
488
487
|
// Scroll by one line to the bottom
|
|
489
|
-
|
|
488
|
+
blocksRef.current.scrollBy({
|
|
490
489
|
top: 28,
|
|
491
490
|
behavior: 'smooth'
|
|
492
491
|
});
|
|
493
492
|
}
|
|
494
|
-
}
|
|
493
|
+
}, [
|
|
494
|
+
editor
|
|
495
|
+
]);
|
|
495
496
|
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
|
|
496
497
|
ref: blocksRef,
|
|
497
498
|
grow: 1,
|
|
@@ -516,12 +517,8 @@ const BlocksContent = ({ placeholder, ariaLabelId })=>{
|
|
|
516
517
|
onKeyDown: handleKeyDown,
|
|
517
518
|
scrollSelectionIntoView: handleScrollSelectionIntoView,
|
|
518
519
|
// As we have our own handler to drag and drop the elements returing true will skip slate's own event handler
|
|
519
|
-
onDrop:
|
|
520
|
-
|
|
521
|
-
},
|
|
522
|
-
onDragStart: ()=>{
|
|
523
|
-
return true;
|
|
524
|
-
}
|
|
520
|
+
onDrop: dragNoop,
|
|
521
|
+
onDragStart: dragNoop
|
|
525
522
|
}),
|
|
526
523
|
modalElement
|
|
527
524
|
]
|
|
@@ -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 {\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, isLinkNode, isListNode } 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\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('drag-and-drop');\n const { formatMessage } = useIntl();\n const [dragVisibility, setDragVisibility] = React.useState<CSSProperties['visibility']>('hidden');\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(!disabled, {\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={(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 onDragEnd={(event) => {\n const currentTarget = event.currentTarget as HTMLElement;\n currentTarget.style.opacity = '1';\n }}\n onMouseMove={() => setDragVisibility('visible')}\n onSelect={() => setDragVisibility('visible')}\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) => e.stopPropagation()}\n aria-disabled={disabled}\n disabled={disabled}\n draggable\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};\n\nconst baseRenderElement = ({\n props,\n blocks,\n editor,\n setDragDirection,\n dragDirection,\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 // Link is inline block so it cannot be dragged\n // List items and nested list blocks i.e. lists with indent level higher than 0 are skipped from dragged items\n if (\n isLinkNode(element) ||\n (isListNode(element) && element.indentLevel && element.indentLevel > 0) ||\n element.type === 'list-item'\n ) {\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\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 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 }),\n [blocks, editor, dragDirection, 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\n handleKeyboardShortcuts(event);\n\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 const handleScrollSelectionIntoView = () => {\n if (!editor.selection) return;\n const domRange = ReactEditor.toDOMRange(editor, editor.selection);\n const domRect = domRange.getBoundingClientRect();\n const blocksInput = blocksRef.current;\n\n if (!blocksInput) {\n return;\n }\n\n const editorRect = blocksInput.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 blocksInput.scrollBy({\n top: 28, // 20px is the line-height + 8px line gap\n behavior: 'smooth',\n });\n }\n };\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 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={() => {\n return true;\n }}\n onDragStart={() => {\n return true;\n }}\n />\n {modalElement}\n </Box>\n );\n};\n\nexport { BlocksContent, BlocksContentProps };\n"],"names":["StyledEditable","styled","Editable","theme","spaces","props","isExpandedMode","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","handleMoveBlock","useCallback","newIndex","currentIndex","Transforms","moveNodes","at","to","currentIndexPosition","slice","newIndexPosition","id","getTranslation","defaultMessage","item","join","position","length","handlerId","isDragging","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","onDragEnd","onMouseMove","onSelect","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","element","blockMatch","Object","values","find","block","matchNode","paragraph","nodePath","ReactEditor","findPath","isLinkNode","isListNode","indentLevel","renderElement","BlocksContent","placeholder","ariaLabelId","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","domRange","toDOMRange","domRect","getBoundingClientRect","blocksInput","current","editorRect","top","bottom","scrollBy","behavior","grow","overflow","fontSize","background","lineHeight","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 {\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, isLinkNode, isListNode } 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\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('drag-and-drop');\n const { formatMessage } = useIntl();\n const [dragVisibility, setDragVisibility] = React.useState<CSSProperties['visibility']>('hidden');\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(!disabled, {\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={(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 onDragEnd={(event) => {\n const currentTarget = event.currentTarget as HTMLElement;\n currentTarget.style.opacity = '1';\n }}\n onMouseMove={() => setDragVisibility('visible')}\n onSelect={() => setDragVisibility('visible')}\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) => e.stopPropagation()}\n aria-disabled={disabled}\n disabled={disabled}\n draggable\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};\n\nconst baseRenderElement = ({\n props,\n blocks,\n editor,\n setDragDirection,\n dragDirection,\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 // Link is inline block so it cannot be dragged\n // List items and nested list blocks i.e. lists with indent level higher than 0 are skipped from dragged items\n if (\n isLinkNode(element) ||\n (isListNode(element) && element.indentLevel && element.indentLevel > 0) ||\n element.type === 'list-item'\n ) {\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 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 }),\n [blocks, editor, dragDirection, 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 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","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","handleMoveBlock","useCallback","newIndex","currentIndex","Transforms","moveNodes","at","to","currentIndexPosition","slice","newIndexPosition","id","getTranslation","defaultMessage","item","join","position","length","handlerId","isDragging","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","onDragEnd","onMouseMove","onSelect","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","element","blockMatch","Object","values","find","block","matchNode","paragraph","nodePath","ReactEditor","findPath","isLinkNode","isListNode","indentLevel","renderElement","dragNoop","BlocksContent","placeholder","ariaLabelId","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","paddingRight","paddingTop","paddingBottom","aria-labelledby","readOnly","decorate","decorateCode","onKeyDown","scrollSelectionIntoView","onDrop"],"mappings":"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"}
|
|
@@ -279,6 +279,7 @@ const baseRenderElement = ({ props, blocks, editor, setDragDirection, dragDirect
|
|
|
279
279
|
children: block.renderElement(props)
|
|
280
280
|
});
|
|
281
281
|
};
|
|
282
|
+
const dragNoop = ()=>true;
|
|
282
283
|
const BlocksContent = ({ placeholder, ariaLabelId })=>{
|
|
283
284
|
const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode } = useBlocksEditorContext('BlocksContent');
|
|
284
285
|
const blocksRef = React.useRef(null);
|
|
@@ -453,24 +454,24 @@ const BlocksContent = ({ placeholder, ariaLabelId })=>{
|
|
|
453
454
|
* thats shifting layout for us when there is a overflowY:scroll on the viewport.
|
|
454
455
|
* We are overriding it to check if the selection is not fully within the visible area of the editor,
|
|
455
456
|
* we use scrollBy one line to the bottom
|
|
456
|
-
*/ const handleScrollSelectionIntoView = ()=>{
|
|
457
|
-
if (!editor.selection)
|
|
458
|
-
const domRange = ReactEditor.toDOMRange(editor, editor.selection);
|
|
459
|
-
const domRect = domRange.getBoundingClientRect();
|
|
460
|
-
const blocksInput = blocksRef.current;
|
|
461
|
-
if (!blocksInput) {
|
|
457
|
+
*/ const handleScrollSelectionIntoView = React.useCallback(()=>{
|
|
458
|
+
if (!editor.selection || !blocksRef.current) {
|
|
462
459
|
return;
|
|
463
460
|
}
|
|
464
|
-
const
|
|
461
|
+
const domRange = ReactEditor.toDOMRange(editor, editor.selection);
|
|
462
|
+
const domRect = domRange.getBoundingClientRect();
|
|
463
|
+
const editorRect = blocksRef.current.getBoundingClientRect();
|
|
465
464
|
// Check if the selection is not fully within the visible area of the editor
|
|
466
465
|
if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {
|
|
467
466
|
// Scroll by one line to the bottom
|
|
468
|
-
|
|
467
|
+
blocksRef.current.scrollBy({
|
|
469
468
|
top: 28,
|
|
470
469
|
behavior: 'smooth'
|
|
471
470
|
});
|
|
472
471
|
}
|
|
473
|
-
}
|
|
472
|
+
}, [
|
|
473
|
+
editor
|
|
474
|
+
]);
|
|
474
475
|
return /*#__PURE__*/ jsxs(Box, {
|
|
475
476
|
ref: blocksRef,
|
|
476
477
|
grow: 1,
|
|
@@ -495,12 +496,8 @@ const BlocksContent = ({ placeholder, ariaLabelId })=>{
|
|
|
495
496
|
onKeyDown: handleKeyDown,
|
|
496
497
|
scrollSelectionIntoView: handleScrollSelectionIntoView,
|
|
497
498
|
// As we have our own handler to drag and drop the elements returing true will skip slate's own event handler
|
|
498
|
-
onDrop:
|
|
499
|
-
|
|
500
|
-
},
|
|
501
|
-
onDragStart: ()=>{
|
|
502
|
-
return true;
|
|
503
|
-
}
|
|
499
|
+
onDrop: dragNoop,
|
|
500
|
+
onDragStart: dragNoop
|
|
504
501
|
}),
|
|
505
502
|
modalElement
|
|
506
503
|
]
|