@strapi/content-manager 0.0.0-experimental.c5235059f5636c4549ea2118c75c43b92e2615c8 → 0.0.0-experimental.cb2eb3230e1cd78417158a7e44cee77f6eb94c32
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/ComponentIcon.js +176 -0
- package/dist/admin/components/ComponentIcon.js.map +1 -0
- package/dist/admin/components/ComponentIcon.mjs +153 -0
- package/dist/admin/components/ComponentIcon.mjs.map +1 -0
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js +259 -0
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -0
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +238 -0
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -0
- package/dist/admin/components/ConfigurationForm/Fields.js +534 -0
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -0
- package/dist/admin/components/ConfigurationForm/Fields.mjs +512 -0
- package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -0
- package/dist/admin/components/ConfigurationForm/Form.js +253 -0
- package/dist/admin/components/ConfigurationForm/Form.js.map +1 -0
- package/dist/admin/components/ConfigurationForm/Form.mjs +232 -0
- package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -0
- package/dist/admin/components/DragLayer.js +50 -0
- package/dist/admin/components/DragLayer.js.map +1 -0
- package/dist/admin/components/DragLayer.mjs +48 -0
- package/dist/admin/components/DragLayer.mjs.map +1 -0
- package/dist/admin/components/DragPreviews/CardDragPreview.js +82 -0
- package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -0
- package/dist/admin/components/DragPreviews/CardDragPreview.mjs +80 -0
- package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -0
- package/dist/admin/components/DragPreviews/ComponentDragPreview.js +83 -0
- package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -0
- package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +81 -0
- package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -0
- package/dist/admin/components/DragPreviews/RelationDragPreview.js +73 -0
- package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -0
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +71 -0
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -0
- package/dist/admin/components/FieldTypeIcon.js +58 -0
- package/dist/admin/components/FieldTypeIcon.js.map +1 -0
- package/dist/admin/components/FieldTypeIcon.mjs +56 -0
- package/dist/admin/components/FieldTypeIcon.mjs.map +1 -0
- package/dist/admin/components/InjectionZone.js +44 -0
- package/dist/admin/components/InjectionZone.js.map +1 -0
- package/dist/admin/components/InjectionZone.mjs +40 -0
- package/dist/admin/components/InjectionZone.mjs.map +1 -0
- package/dist/admin/components/LeftMenu.js +172 -0
- package/dist/admin/components/LeftMenu.js.map +1 -0
- package/dist/admin/components/LeftMenu.mjs +151 -0
- package/dist/admin/components/LeftMenu.mjs.map +1 -0
- package/dist/admin/components/RelativeTime.js +76 -0
- package/dist/admin/components/RelativeTime.js.map +1 -0
- package/dist/admin/components/RelativeTime.mjs +55 -0
- package/dist/admin/components/RelativeTime.mjs.map +1 -0
- package/dist/admin/constants/attributes.js +48 -0
- package/dist/admin/constants/attributes.js.map +1 -0
- package/dist/admin/constants/attributes.mjs +38 -0
- package/dist/admin/constants/attributes.mjs.map +1 -0
- package/dist/admin/constants/collections.js +8 -0
- package/dist/admin/constants/collections.js.map +1 -0
- package/dist/admin/constants/collections.mjs +5 -0
- package/dist/admin/constants/collections.mjs.map +1 -0
- package/dist/admin/constants/dragAndDrop.js +13 -0
- package/dist/admin/constants/dragAndDrop.js.map +1 -0
- package/dist/admin/constants/dragAndDrop.mjs +11 -0
- package/dist/admin/constants/dragAndDrop.mjs.map +1 -0
- package/dist/admin/constants/hooks.js +27 -0
- package/dist/admin/constants/hooks.js.map +1 -0
- package/dist/admin/constants/hooks.mjs +25 -0
- package/dist/admin/constants/hooks.mjs.map +1 -0
- package/dist/admin/constants/plugin.js +14 -0
- package/dist/admin/constants/plugin.js.map +1 -0
- package/dist/admin/constants/plugin.mjs +11 -0
- package/dist/admin/constants/plugin.mjs.map +1 -0
- package/dist/admin/content-manager.js +133 -0
- package/dist/admin/content-manager.js.map +1 -0
- package/dist/admin/content-manager.mjs +131 -0
- package/dist/admin/content-manager.mjs.map +1 -0
- package/dist/admin/features/DocumentContext.js +71 -0
- package/dist/admin/features/DocumentContext.js.map +1 -0
- package/dist/admin/features/DocumentContext.mjs +49 -0
- package/dist/admin/features/DocumentContext.mjs.map +1 -0
- package/dist/admin/features/DocumentRBAC.js +126 -0
- package/dist/admin/features/DocumentRBAC.js.map +1 -0
- package/dist/admin/features/DocumentRBAC.mjs +104 -0
- package/dist/admin/features/DocumentRBAC.mjs.map +1 -0
- package/dist/admin/history/components/HistoryAction.js +61 -0
- package/dist/admin/history/components/HistoryAction.js.map +1 -0
- package/dist/admin/history/components/HistoryAction.mjs +59 -0
- package/dist/admin/history/components/HistoryAction.mjs.map +1 -0
- package/dist/admin/history/components/VersionContent.js +264 -0
- package/dist/admin/history/components/VersionContent.js.map +1 -0
- package/dist/admin/history/components/VersionContent.mjs +242 -0
- package/dist/admin/history/components/VersionContent.mjs.map +1 -0
- package/dist/admin/history/components/VersionHeader.js +210 -0
- package/dist/admin/history/components/VersionHeader.js.map +1 -0
- package/dist/admin/history/components/VersionHeader.mjs +189 -0
- package/dist/admin/history/components/VersionHeader.mjs.map +1 -0
- package/dist/admin/history/components/VersionInputRenderer.js +490 -0
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -0
- package/dist/admin/history/components/VersionInputRenderer.mjs +469 -0
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -0
- package/dist/admin/history/components/VersionsList.js +210 -0
- package/dist/admin/history/components/VersionsList.js.map +1 -0
- package/dist/admin/history/components/VersionsList.mjs +208 -0
- package/dist/admin/history/components/VersionsList.mjs.map +1 -0
- package/dist/admin/history/index.js +21 -0
- package/dist/admin/history/index.js.map +1 -0
- package/dist/admin/history/index.mjs +19 -0
- package/dist/admin/history/index.mjs.map +1 -0
- package/dist/admin/history/pages/History.js +228 -0
- package/dist/admin/history/pages/History.js.map +1 -0
- package/dist/admin/history/pages/History.mjs +205 -0
- package/dist/admin/history/pages/History.mjs.map +1 -0
- package/dist/admin/history/routes.js +41 -0
- package/dist/admin/history/routes.js.map +1 -0
- package/dist/admin/history/routes.mjs +20 -0
- package/dist/admin/history/routes.mjs.map +1 -0
- package/dist/admin/history/services/historyVersion.js +46 -0
- package/dist/admin/history/services/historyVersion.js.map +1 -0
- package/dist/admin/history/services/historyVersion.mjs +43 -0
- package/dist/admin/history/services/historyVersion.mjs.map +1 -0
- package/dist/admin/hooks/useContentManagerInitData.js +166 -0
- package/dist/admin/hooks/useContentManagerInitData.js.map +1 -0
- package/dist/admin/hooks/useContentManagerInitData.mjs +164 -0
- package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -0
- package/dist/admin/hooks/useContentTypeSchema.js +115 -0
- package/dist/admin/hooks/useContentTypeSchema.js.map +1 -0
- package/dist/admin/hooks/useContentTypeSchema.mjs +93 -0
- package/dist/admin/hooks/useContentTypeSchema.mjs.map +1 -0
- package/dist/admin/hooks/useDebounce.js +22 -0
- package/dist/admin/hooks/useDebounce.js.map +1 -0
- package/dist/admin/hooks/useDebounce.mjs +20 -0
- package/dist/admin/hooks/useDebounce.mjs.map +1 -0
- package/dist/admin/hooks/useDocument.js +244 -0
- package/dist/admin/hooks/useDocument.js.map +1 -0
- package/dist/admin/hooks/useDocument.mjs +221 -0
- package/dist/admin/hooks/useDocument.mjs.map +1 -0
- package/dist/admin/hooks/useDocumentActions.js +596 -0
- package/dist/admin/hooks/useDocumentActions.js.map +1 -0
- package/dist/admin/hooks/useDocumentActions.mjs +575 -0
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -0
- package/dist/admin/hooks/useDocumentLayout.js +311 -0
- package/dist/admin/hooks/useDocumentLayout.js.map +1 -0
- package/dist/admin/hooks/useDocumentLayout.mjs +286 -0
- package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -0
- package/dist/admin/hooks/useDragAndDrop.js +193 -0
- package/dist/admin/hooks/useDragAndDrop.js.map +1 -0
- package/dist/admin/hooks/useDragAndDrop.mjs +170 -0
- package/dist/admin/hooks/useDragAndDrop.mjs.map +1 -0
- package/dist/admin/hooks/useKeyboardDragAndDrop.js +94 -0
- package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -0
- package/dist/admin/hooks/useKeyboardDragAndDrop.mjs +73 -0
- package/dist/admin/hooks/useKeyboardDragAndDrop.mjs.map +1 -0
- package/dist/admin/hooks/useLazyComponents.js +61 -0
- package/dist/admin/hooks/useLazyComponents.js.map +1 -0
- package/dist/admin/hooks/useLazyComponents.mjs +59 -0
- package/dist/admin/hooks/useLazyComponents.mjs.map +1 -0
- package/dist/admin/hooks/useOnce.js +28 -0
- package/dist/admin/hooks/useOnce.js.map +1 -0
- package/dist/admin/hooks/useOnce.mjs +7 -0
- package/dist/admin/hooks/useOnce.mjs.map +1 -0
- package/dist/admin/hooks/usePrev.js +16 -0
- package/dist/admin/hooks/usePrev.js.map +1 -0
- package/dist/admin/hooks/usePrev.mjs +14 -0
- package/dist/admin/hooks/usePrev.mjs.map +1 -0
- package/dist/admin/index.js +126 -11
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +111 -10
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/layout.js +142 -0
- package/dist/admin/layout.js.map +1 -0
- package/dist/admin/layout.mjs +121 -0
- package/dist/admin/layout.mjs.map +1 -0
- package/dist/admin/modules/app.js +33 -0
- package/dist/admin/modules/app.js.map +1 -0
- package/dist/admin/modules/app.mjs +30 -0
- package/dist/admin/modules/app.mjs.map +1 -0
- package/dist/admin/modules/hooks.js +10 -0
- package/dist/admin/modules/hooks.js.map +1 -0
- package/dist/admin/modules/hooks.mjs +7 -0
- package/dist/admin/modules/hooks.mjs.map +1 -0
- package/dist/admin/modules/reducers.js +11 -0
- package/dist/admin/modules/reducers.js.map +1 -0
- package/dist/admin/modules/reducers.mjs +9 -0
- package/dist/admin/modules/reducers.mjs.map +1 -0
- package/dist/admin/pages/ComponentConfigurationPage.js +248 -0
- package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -0
- package/dist/admin/pages/ComponentConfigurationPage.mjs +226 -0
- package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -0
- package/dist/admin/pages/EditConfigurationPage.js +164 -0
- package/dist/admin/pages/EditConfigurationPage.js.map +1 -0
- package/dist/admin/pages/EditConfigurationPage.mjs +142 -0
- package/dist/admin/pages/EditConfigurationPage.mjs.map +1 -0
- package/dist/admin/pages/EditView/EditViewPage.js +243 -0
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -0
- package/dist/admin/pages/EditView/EditViewPage.mjs +239 -0
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js +961 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +937 -0
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentStatus.js +34 -0
- package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentStatus.mjs +32 -0
- package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +120 -0
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -0
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs +99 -0
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +224 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +201 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js +165 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs +163 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +230 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +209 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +232 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +211 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +360 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +358 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.js +95 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.mjs +93 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js +49 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs +47 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +532 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +511 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +222 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +198 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +64 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs +43 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +635 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +612 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +138 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +117 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js +134 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs +132 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js +17 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs +15 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js +75 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs +73 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js +32 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs +30 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.js +223 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.mjs +221 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.js +48 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.mjs +45 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.js +64 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.mjs +62 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +84 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +80 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js +18 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs +13 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js +59 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs +57 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +106 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +85 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +70 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +68 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +414 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +393 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.js +21 -0
- package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.mjs +18 -0
- package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js +58 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs +56 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +103 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +101 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js +56 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs +54 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +337 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +316 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.js +73 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.mjs +71 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +253 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +231 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.js +38 -0
- package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.mjs +36 -0
- package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +460 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +438 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +868 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +844 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +294 -0
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +273 -0
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +463 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +442 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +161 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +139 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +119 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs +98 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +209 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs +188 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js +39 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs +37 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +528 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +526 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js +42 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs +40 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js +84 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.mjs +82 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js +45 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.mjs +43 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js +364 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs +355 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormLayout.js +106 -0
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormLayout.mjs +101 -0
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/Header.js +472 -0
- package/dist/admin/pages/EditView/components/Header.js.map +1 -0
- package/dist/admin/pages/EditView/components/Header.mjs +450 -0
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/InputRenderer.js +256 -0
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -0
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +234 -0
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/Panels.js +141 -0
- package/dist/admin/pages/EditView/components/Panels.js.map +1 -0
- package/dist/admin/pages/EditView/components/Panels.mjs +119 -0
- package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -0
- package/dist/admin/pages/EditView/utils/data.js +135 -0
- package/dist/admin/pages/EditView/utils/data.js.map +1 -0
- package/dist/admin/pages/EditView/utils/data.mjs +129 -0
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -0
- package/dist/admin/pages/EditView/utils/forms.js +32 -0
- package/dist/admin/pages/EditView/utils/forms.js.map +1 -0
- package/dist/admin/pages/EditView/utils/forms.mjs +30 -0
- package/dist/admin/pages/EditView/utils/forms.mjs.map +1 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +178 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +156 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -0
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +200 -0
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -0
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +179 -0
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -0
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +158 -0
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -0
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +137 -0
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -0
- package/dist/admin/pages/ListConfiguration/components/Header.js +45 -0
- package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -0
- package/dist/admin/pages/ListConfiguration/components/Header.mjs +43 -0
- package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -0
- package/dist/admin/pages/ListConfiguration/components/Settings.js +201 -0
- package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -0
- package/dist/admin/pages/ListConfiguration/components/Settings.mjs +180 -0
- package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -0
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +171 -0
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -0
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs +150 -0
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -0
- package/dist/admin/pages/ListView/ListViewPage.js +433 -0
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -0
- package/dist/admin/pages/ListView/ListViewPage.mjs +411 -0
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js +88 -0
- package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -0
- package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs +86 -0
- package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js +233 -0
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -0
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +210 -0
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +171 -0
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -0
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +149 -0
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +568 -0
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -0
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +546 -0
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/Filters.js +243 -0
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -0
- package/dist/admin/pages/ListView/components/Filters.mjs +222 -0
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/TableActions.js +217 -0
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -0
- package/dist/admin/pages/ListView/components/TableActions.mjs +195 -0
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +130 -0
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -0
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +128 -0
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/TableCells/CellValue.js +53 -0
- package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -0
- package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +51 -0
- package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/TableCells/Components.js +65 -0
- package/dist/admin/pages/ListView/components/TableCells/Components.js.map +1 -0
- package/dist/admin/pages/ListView/components/TableCells/Components.mjs +62 -0
- package/dist/admin/pages/ListView/components/TableCells/Components.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/TableCells/Media.js +76 -0
- package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -0
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs +73 -0
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +128 -0
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -0
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +106 -0
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +154 -0
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -0
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +152 -0
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -0
- package/dist/admin/pages/NoContentTypePage.js +50 -0
- package/dist/admin/pages/NoContentTypePage.js.map +1 -0
- package/dist/admin/pages/NoContentTypePage.mjs +48 -0
- package/dist/admin/pages/NoContentTypePage.mjs.map +1 -0
- package/dist/admin/pages/NoPermissionsPage.js +26 -0
- package/dist/admin/pages/NoPermissionsPage.js.map +1 -0
- package/dist/admin/pages/NoPermissionsPage.mjs +24 -0
- package/dist/admin/pages/NoPermissionsPage.mjs.map +1 -0
- package/dist/admin/preview/components/PreviewHeader.js +264 -0
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -0
- package/dist/admin/preview/components/PreviewHeader.mjs +262 -0
- package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -0
- package/dist/admin/preview/components/PreviewSidePanel.js +91 -0
- package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -0
- package/dist/admin/preview/components/PreviewSidePanel.mjs +89 -0
- package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -0
- package/dist/admin/preview/index.js +15 -0
- package/dist/admin/preview/index.js.map +1 -0
- package/dist/admin/preview/index.mjs +13 -0
- package/dist/admin/preview/index.mjs.map +1 -0
- package/dist/admin/preview/pages/Preview.js +294 -0
- package/dist/admin/preview/pages/Preview.js.map +1 -0
- package/dist/admin/preview/pages/Preview.mjs +272 -0
- package/dist/admin/preview/pages/Preview.mjs.map +1 -0
- package/dist/admin/preview/routes.js +39 -0
- package/dist/admin/preview/routes.js.map +1 -0
- package/dist/admin/preview/routes.mjs +18 -0
- package/dist/admin/preview/routes.mjs.map +1 -0
- package/dist/admin/preview/services/preview.js +23 -0
- package/dist/admin/preview/services/preview.js.map +1 -0
- package/dist/admin/preview/services/preview.mjs +21 -0
- package/dist/admin/preview/services/preview.mjs.map +1 -0
- package/dist/admin/router.js +86 -0
- package/dist/admin/router.js.map +1 -0
- package/dist/admin/router.mjs +82 -0
- package/dist/admin/router.mjs.map +1 -0
- package/dist/admin/services/api.js +20 -0
- package/dist/admin/services/api.js.map +1 -0
- package/dist/admin/services/api.mjs +18 -0
- package/dist/admin/services/api.mjs.map +1 -0
- package/dist/admin/services/components.js +42 -0
- package/dist/admin/services/components.js.map +1 -0
- package/dist/admin/services/components.mjs +39 -0
- package/dist/admin/services/components.mjs.map +1 -0
- package/dist/admin/services/contentTypes.js +63 -0
- package/dist/admin/services/contentTypes.js.map +1 -0
- package/dist/admin/services/contentTypes.mjs +59 -0
- package/dist/admin/services/contentTypes.mjs.map +1 -0
- package/dist/admin/services/documents.js +390 -0
- package/dist/admin/services/documents.js.map +1 -0
- package/dist/admin/services/documents.mjs +373 -0
- package/dist/admin/services/documents.mjs.map +1 -0
- package/dist/admin/services/init.js +19 -0
- package/dist/admin/services/init.js.map +1 -0
- package/dist/admin/services/init.mjs +17 -0
- package/dist/admin/services/init.mjs.map +1 -0
- package/dist/admin/services/relations.js +144 -0
- package/dist/admin/services/relations.js.map +1 -0
- package/dist/admin/services/relations.mjs +141 -0
- package/dist/admin/services/relations.mjs.map +1 -0
- package/dist/admin/services/uid.js +54 -0
- package/dist/admin/services/uid.js.map +1 -0
- package/dist/admin/services/uid.mjs +50 -0
- package/dist/admin/services/uid.mjs.map +1 -0
- package/dist/admin/src/components/InjectionZone.d.ts +7 -1
- package/dist/admin/src/content-manager.d.ts +9 -2
- package/dist/admin/src/exports.d.ts +2 -1
- package/dist/admin/src/features/DocumentContext.d.ts +53 -0
- package/dist/admin/src/features/DocumentRBAC.d.ts +3 -2
- package/dist/admin/src/history/services/historyVersion.d.ts +2 -2
- package/dist/admin/src/hooks/useDocument.d.ts +52 -2
- package/dist/admin/src/hooks/useDocumentActions.d.ts +2 -1
- package/dist/admin/src/index.d.ts +1 -0
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
- package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +11 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +55 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +4 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +8 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +44 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.d.ts +1 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +4 -48
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +34 -1
- package/dist/admin/src/pages/EditView/components/Header.d.ts +11 -11
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +7 -4
- package/dist/admin/src/pages/EditView/utils/data.d.ts +1 -0
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
- package/dist/admin/src/preview/index.d.ts +3 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +13 -0
- package/dist/admin/src/preview/routes.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/admin/src/router.d.ts +1 -1
- 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 +19 -20
- 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/validation.d.ts +4 -1
- package/dist/admin/translations/ar.json.js +229 -0
- package/dist/admin/translations/ar.json.js.map +1 -0
- package/dist/admin/translations/ar.json.mjs +222 -0
- package/dist/admin/translations/ar.json.mjs.map +1 -0
- package/dist/admin/translations/ca.json.js +204 -0
- package/dist/admin/translations/ca.json.js.map +1 -0
- package/dist/admin/translations/ca.json.mjs +197 -0
- package/dist/admin/translations/ca.json.mjs.map +1 -0
- package/dist/admin/translations/cs.json.js +128 -0
- package/dist/admin/translations/cs.json.js.map +1 -0
- package/dist/admin/translations/cs.json.mjs +122 -0
- package/dist/admin/translations/cs.json.mjs.map +1 -0
- package/dist/admin/translations/de.json.js +202 -0
- package/dist/admin/translations/de.json.js.map +1 -0
- package/dist/admin/translations/de.json.mjs +195 -0
- package/dist/admin/translations/de.json.mjs.map +1 -0
- package/dist/admin/translations/en.json.js +320 -0
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/translations/en.json.mjs +313 -0
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/translations/es.json.js +199 -0
- package/dist/admin/translations/es.json.js.map +1 -0
- package/dist/admin/translations/es.json.mjs +192 -0
- package/dist/admin/translations/es.json.mjs.map +1 -0
- package/dist/admin/translations/eu.json.js +205 -0
- package/dist/admin/translations/eu.json.js.map +1 -0
- package/dist/admin/translations/eu.json.mjs +198 -0
- package/dist/admin/translations/eu.json.mjs.map +1 -0
- package/dist/admin/translations/fr.json.js +222 -0
- package/dist/admin/translations/fr.json.js.map +1 -0
- package/dist/admin/translations/fr.json.mjs +215 -0
- package/dist/admin/translations/fr.json.mjs.map +1 -0
- package/dist/admin/translations/gu.json.js +203 -0
- package/dist/admin/translations/gu.json.js.map +1 -0
- package/dist/admin/translations/gu.json.mjs +196 -0
- package/dist/admin/translations/gu.json.mjs.map +1 -0
- package/dist/admin/translations/hi.json.js +203 -0
- package/dist/admin/translations/hi.json.js.map +1 -0
- package/dist/admin/translations/hi.json.mjs +196 -0
- package/dist/admin/translations/hi.json.mjs.map +1 -0
- package/dist/admin/translations/hu.json.js +205 -0
- package/dist/admin/translations/hu.json.js.map +1 -0
- package/dist/admin/translations/hu.json.mjs +198 -0
- package/dist/admin/translations/hu.json.mjs.map +1 -0
- package/dist/admin/translations/id.json.js +163 -0
- package/dist/admin/translations/id.json.js.map +1 -0
- package/dist/admin/translations/id.json.mjs +156 -0
- package/dist/admin/translations/id.json.mjs.map +1 -0
- package/dist/admin/translations/it.json.js +165 -0
- package/dist/admin/translations/it.json.js.map +1 -0
- package/dist/admin/translations/it.json.mjs +158 -0
- package/dist/admin/translations/it.json.mjs.map +1 -0
- package/dist/admin/translations/ja.json.js +199 -0
- package/dist/admin/translations/ja.json.js.map +1 -0
- package/dist/admin/translations/ja.json.mjs +192 -0
- package/dist/admin/translations/ja.json.mjs.map +1 -0
- package/dist/admin/translations/ko.json.js +198 -0
- package/dist/admin/translations/ko.json.js.map +1 -0
- package/dist/admin/translations/ko.json.mjs +191 -0
- package/dist/admin/translations/ko.json.mjs.map +1 -0
- package/dist/admin/translations/ml.json.js +203 -0
- package/dist/admin/translations/ml.json.js.map +1 -0
- package/dist/admin/translations/ml.json.mjs +196 -0
- package/dist/admin/translations/ml.json.mjs.map +1 -0
- package/dist/admin/translations/ms.json.js +147 -0
- package/dist/admin/translations/ms.json.js.map +1 -0
- package/dist/admin/translations/ms.json.mjs +140 -0
- package/dist/admin/translations/ms.json.mjs.map +1 -0
- package/dist/admin/translations/nl.json.js +205 -0
- package/dist/admin/translations/nl.json.js.map +1 -0
- package/dist/admin/translations/nl.json.mjs +198 -0
- package/dist/admin/translations/nl.json.mjs.map +1 -0
- package/dist/admin/translations/pl.json.js +202 -0
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/translations/pl.json.mjs +195 -0
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/translations/pt-BR.json.js +204 -0
- package/dist/admin/translations/pt-BR.json.js.map +1 -0
- package/dist/admin/translations/pt-BR.json.mjs +197 -0
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
- package/dist/admin/translations/pt.json.js +98 -0
- package/dist/admin/translations/pt.json.js.map +1 -0
- package/dist/admin/translations/pt.json.mjs +93 -0
- package/dist/admin/translations/pt.json.mjs.map +1 -0
- package/dist/admin/translations/ru.json.js +232 -0
- package/dist/admin/translations/ru.json.js.map +1 -0
- package/dist/admin/translations/ru.json.mjs +230 -0
- package/dist/admin/translations/ru.json.mjs.map +1 -0
- package/dist/admin/translations/sa.json.js +203 -0
- package/dist/admin/translations/sa.json.js.map +1 -0
- package/dist/admin/translations/sa.json.mjs +196 -0
- package/dist/admin/translations/sa.json.mjs.map +1 -0
- package/dist/admin/translations/sk.json.js +205 -0
- package/dist/admin/translations/sk.json.js.map +1 -0
- package/dist/admin/translations/sk.json.mjs +198 -0
- package/dist/admin/translations/sk.json.mjs.map +1 -0
- package/dist/admin/translations/sv.json.js +205 -0
- package/dist/admin/translations/sv.json.js.map +1 -0
- package/dist/admin/translations/sv.json.mjs +198 -0
- package/dist/admin/translations/sv.json.mjs.map +1 -0
- package/dist/admin/translations/th.json.js +151 -0
- package/dist/admin/translations/th.json.js.map +1 -0
- package/dist/admin/translations/th.json.mjs +144 -0
- package/dist/admin/translations/th.json.mjs.map +1 -0
- package/dist/admin/translations/tr.json.js +202 -0
- package/dist/admin/translations/tr.json.js.map +1 -0
- package/dist/admin/translations/tr.json.mjs +195 -0
- package/dist/admin/translations/tr.json.mjs.map +1 -0
- package/dist/admin/translations/uk.json.js +320 -0
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/translations/uk.json.mjs +313 -0
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/translations/vi.json.js +114 -0
- package/dist/admin/translations/vi.json.js.map +1 -0
- package/dist/admin/translations/vi.json.mjs +108 -0
- package/dist/admin/translations/vi.json.mjs.map +1 -0
- package/dist/admin/translations/zh-Hans.json.js +956 -0
- package/dist/admin/translations/zh-Hans.json.js.map +1 -0
- package/dist/admin/translations/zh-Hans.json.mjs +935 -0
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
- package/dist/admin/translations/zh.json.js +212 -0
- package/dist/admin/translations/zh.json.js.map +1 -0
- package/dist/admin/translations/zh.json.mjs +205 -0
- package/dist/admin/translations/zh.json.mjs.map +1 -0
- package/dist/admin/utils/api.js +22 -0
- package/dist/admin/utils/api.js.map +1 -0
- package/dist/admin/utils/api.mjs +19 -0
- package/dist/admin/utils/api.mjs.map +1 -0
- package/dist/admin/utils/attributes.js +34 -0
- package/dist/admin/utils/attributes.js.map +1 -0
- package/dist/admin/utils/attributes.mjs +31 -0
- package/dist/admin/utils/attributes.mjs.map +1 -0
- package/dist/admin/utils/objects.js +78 -0
- package/dist/admin/utils/objects.js.map +1 -0
- package/dist/admin/utils/objects.mjs +73 -0
- package/dist/admin/utils/objects.mjs.map +1 -0
- package/dist/admin/utils/relations.js +19 -0
- package/dist/admin/utils/relations.js.map +1 -0
- package/dist/admin/utils/relations.mjs +17 -0
- package/dist/admin/utils/relations.mjs.map +1 -0
- package/dist/admin/utils/strings.js +6 -0
- package/dist/admin/utils/strings.js.map +1 -0
- package/dist/admin/utils/strings.mjs +4 -0
- package/dist/admin/utils/strings.mjs.map +1 -0
- package/dist/admin/utils/translations.js +13 -0
- package/dist/admin/utils/translations.js.map +1 -0
- package/dist/admin/utils/translations.mjs +10 -0
- package/dist/admin/utils/translations.mjs.map +1 -0
- package/dist/admin/utils/urls.js +8 -0
- package/dist/admin/utils/urls.js.map +1 -0
- package/dist/admin/utils/urls.mjs +6 -0
- package/dist/admin/utils/urls.mjs.map +1 -0
- package/dist/admin/utils/users.js +17 -0
- package/dist/admin/utils/users.js.map +1 -0
- package/dist/admin/utils/users.mjs +15 -0
- package/dist/admin/utils/users.mjs.map +1 -0
- package/dist/admin/utils/validation.js +290 -0
- package/dist/admin/utils/validation.js.map +1 -0
- package/dist/admin/utils/validation.mjs +269 -0
- package/dist/admin/utils/validation.mjs.map +1 -0
- package/dist/server/bootstrap.js +25 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +23 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/constants/index.js +9 -0
- package/dist/server/constants/index.js.map +1 -0
- package/dist/server/constants/index.mjs +7 -0
- package/dist/server/constants/index.mjs.map +1 -0
- package/dist/server/controllers/collection-types.js +647 -0
- package/dist/server/controllers/collection-types.js.map +1 -0
- package/dist/server/controllers/collection-types.mjs +645 -0
- package/dist/server/controllers/collection-types.mjs.map +1 -0
- package/dist/server/controllers/components.js +60 -0
- package/dist/server/controllers/components.js.map +1 -0
- package/dist/server/controllers/components.mjs +58 -0
- package/dist/server/controllers/components.mjs.map +1 -0
- package/dist/server/controllers/content-types.js +108 -0
- package/dist/server/controllers/content-types.js.map +1 -0
- package/dist/server/controllers/content-types.mjs +106 -0
- package/dist/server/controllers/content-types.mjs.map +1 -0
- package/dist/server/controllers/index.js +26 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +24 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/controllers/init.js +22 -0
- package/dist/server/controllers/init.js.map +1 -0
- package/dist/server/controllers/init.mjs +20 -0
- package/dist/server/controllers/init.mjs.map +1 -0
- package/dist/server/controllers/relations.js +432 -0
- package/dist/server/controllers/relations.js.map +1 -0
- package/dist/server/controllers/relations.mjs +430 -0
- package/dist/server/controllers/relations.mjs.map +1 -0
- package/dist/server/controllers/single-types.js +302 -0
- package/dist/server/controllers/single-types.js.map +1 -0
- package/dist/server/controllers/single-types.mjs +300 -0
- package/dist/server/controllers/single-types.mjs.map +1 -0
- package/dist/server/controllers/uid.js +48 -0
- package/dist/server/controllers/uid.js.map +1 -0
- package/dist/server/controllers/uid.mjs +46 -0
- package/dist/server/controllers/uid.mjs.map +1 -0
- package/dist/server/controllers/utils/clone.js +138 -0
- package/dist/server/controllers/utils/clone.js.map +1 -0
- package/dist/server/controllers/utils/clone.mjs +135 -0
- package/dist/server/controllers/utils/clone.mjs.map +1 -0
- package/dist/server/controllers/utils/metadata.js +26 -0
- package/dist/server/controllers/utils/metadata.js.map +1 -0
- package/dist/server/controllers/utils/metadata.mjs +24 -0
- package/dist/server/controllers/utils/metadata.mjs.map +1 -0
- package/dist/server/controllers/validation/dimensions.js +41 -0
- package/dist/server/controllers/validation/dimensions.js.map +1 -0
- package/dist/server/controllers/validation/dimensions.mjs +39 -0
- package/dist/server/controllers/validation/dimensions.mjs.map +1 -0
- package/dist/server/controllers/validation/index.js +56 -0
- package/dist/server/controllers/validation/index.js.map +1 -0
- package/dist/server/controllers/validation/index.mjs +50 -0
- package/dist/server/controllers/validation/index.mjs.map +1 -0
- package/dist/server/controllers/validation/model-configuration.js +81 -0
- package/dist/server/controllers/validation/model-configuration.js.map +1 -0
- package/dist/server/controllers/validation/model-configuration.mjs +79 -0
- package/dist/server/controllers/validation/model-configuration.mjs.map +1 -0
- package/dist/server/controllers/validation/relations.js +37 -0
- package/dist/server/controllers/validation/relations.js.map +1 -0
- package/dist/server/controllers/validation/relations.mjs +34 -0
- package/dist/server/controllers/validation/relations.mjs.map +1 -0
- package/dist/server/destroy.js +12 -0
- package/dist/server/destroy.js.map +1 -0
- package/dist/server/destroy.mjs +10 -0
- package/dist/server/destroy.mjs.map +1 -0
- package/dist/server/history/constants.js +16 -0
- package/dist/server/history/constants.js.map +1 -0
- package/dist/server/history/constants.mjs +13 -0
- package/dist/server/history/constants.mjs.map +1 -0
- package/dist/server/history/controllers/history-version.js +107 -0
- package/dist/server/history/controllers/history-version.js.map +1 -0
- package/dist/server/history/controllers/history-version.mjs +105 -0
- package/dist/server/history/controllers/history-version.mjs.map +1 -0
- package/dist/server/history/controllers/index.js +10 -0
- package/dist/server/history/controllers/index.js.map +1 -0
- package/dist/server/history/controllers/index.mjs +8 -0
- package/dist/server/history/controllers/index.mjs.map +1 -0
- package/dist/server/history/controllers/validation/history-version.js +31 -0
- package/dist/server/history/controllers/validation/history-version.js.map +1 -0
- package/dist/server/history/controllers/validation/history-version.mjs +10 -0
- package/dist/server/history/controllers/validation/history-version.mjs.map +1 -0
- package/dist/server/history/index.js +42 -0
- package/dist/server/history/index.js.map +1 -0
- package/dist/server/history/index.mjs +40 -0
- package/dist/server/history/index.mjs.map +1 -0
- package/dist/server/history/models/history-version.js +59 -0
- package/dist/server/history/models/history-version.js.map +1 -0
- package/dist/server/history/models/history-version.mjs +57 -0
- package/dist/server/history/models/history-version.mjs.map +1 -0
- package/dist/server/history/routes/history-version.js +36 -0
- package/dist/server/history/routes/history-version.js.map +1 -0
- package/dist/server/history/routes/history-version.mjs +34 -0
- package/dist/server/history/routes/history-version.mjs.map +1 -0
- package/dist/server/history/routes/index.js +13 -0
- package/dist/server/history/routes/index.js.map +1 -0
- package/dist/server/history/routes/index.mjs +11 -0
- package/dist/server/history/routes/index.mjs.map +1 -0
- package/dist/server/history/services/history.js +203 -0
- package/dist/server/history/services/history.js.map +1 -0
- package/dist/server/history/services/history.mjs +201 -0
- package/dist/server/history/services/history.mjs.map +1 -0
- package/dist/server/history/services/index.js +12 -0
- package/dist/server/history/services/index.js.map +1 -0
- package/dist/server/history/services/index.mjs +10 -0
- package/dist/server/history/services/index.mjs.map +1 -0
- package/dist/server/history/services/lifecycles.js +153 -0
- package/dist/server/history/services/lifecycles.js.map +1 -0
- package/dist/server/history/services/lifecycles.mjs +151 -0
- package/dist/server/history/services/lifecycles.mjs.map +1 -0
- package/dist/server/history/services/utils.js +281 -0
- package/dist/server/history/services/utils.js.map +1 -0
- package/dist/server/history/services/utils.mjs +279 -0
- package/dist/server/history/services/utils.mjs.map +1 -0
- package/dist/server/history/utils.js +9 -0
- package/dist/server/history/utils.js.map +1 -0
- package/dist/server/history/utils.mjs +7 -0
- package/dist/server/history/utils.mjs.map +1 -0
- package/dist/server/index.js +22 -4412
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +21 -4389
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middlewares/routing.js +40 -0
- package/dist/server/middlewares/routing.js.map +1 -0
- package/dist/server/middlewares/routing.mjs +38 -0
- package/dist/server/middlewares/routing.mjs.map +1 -0
- package/dist/server/policies/hasPermissions.js +24 -0
- package/dist/server/policies/hasPermissions.js.map +1 -0
- package/dist/server/policies/hasPermissions.mjs +22 -0
- package/dist/server/policies/hasPermissions.mjs.map +1 -0
- package/dist/server/policies/index.js +10 -0
- package/dist/server/policies/index.js.map +1 -0
- package/dist/server/policies/index.mjs +8 -0
- package/dist/server/policies/index.mjs.map +1 -0
- package/dist/server/preview/controllers/index.js +10 -0
- package/dist/server/preview/controllers/index.js.map +1 -0
- package/dist/server/preview/controllers/index.mjs +8 -0
- package/dist/server/preview/controllers/index.mjs.map +1 -0
- package/dist/server/preview/controllers/preview.js +34 -0
- package/dist/server/preview/controllers/preview.js.map +1 -0
- package/dist/server/preview/controllers/preview.mjs +32 -0
- package/dist/server/preview/controllers/preview.mjs.map +1 -0
- package/dist/server/preview/controllers/validation/preview.js +70 -0
- package/dist/server/preview/controllers/validation/preview.js.map +1 -0
- package/dist/server/preview/controllers/validation/preview.mjs +49 -0
- package/dist/server/preview/controllers/validation/preview.mjs.map +1 -0
- package/dist/server/preview/index.js +27 -0
- package/dist/server/preview/index.js.map +1 -0
- package/dist/server/preview/index.mjs +25 -0
- package/dist/server/preview/index.mjs.map +1 -0
- package/dist/server/preview/routes/index.js +13 -0
- package/dist/server/preview/routes/index.js.map +1 -0
- package/dist/server/preview/routes/index.mjs +11 -0
- package/dist/server/preview/routes/index.mjs.map +1 -0
- package/dist/server/preview/routes/preview.js +25 -0
- package/dist/server/preview/routes/preview.js.map +1 -0
- package/dist/server/preview/routes/preview.mjs +23 -0
- package/dist/server/preview/routes/preview.mjs.map +1 -0
- package/dist/server/preview/services/index.js +12 -0
- package/dist/server/preview/services/index.js.map +1 -0
- package/dist/server/preview/services/index.mjs +10 -0
- package/dist/server/preview/services/index.mjs.map +1 -0
- package/dist/server/preview/services/preview-config.js +91 -0
- package/dist/server/preview/services/preview-config.js.map +1 -0
- package/dist/server/preview/services/preview-config.mjs +89 -0
- package/dist/server/preview/services/preview-config.mjs.map +1 -0
- package/dist/server/preview/services/preview.js +27 -0
- package/dist/server/preview/services/preview.js.map +1 -0
- package/dist/server/preview/services/preview.mjs +25 -0
- package/dist/server/preview/services/preview.mjs.map +1 -0
- package/dist/server/preview/utils.js +9 -0
- package/dist/server/preview/utils.js.map +1 -0
- package/dist/server/preview/utils.mjs +7 -0
- package/dist/server/preview/utils.mjs.map +1 -0
- package/dist/server/register.js +16 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +14 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/admin.js +599 -0
- package/dist/server/routes/admin.js.map +1 -0
- package/dist/server/routes/admin.mjs +597 -0
- package/dist/server/routes/admin.mjs.map +1 -0
- package/dist/server/routes/index.js +14 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +12 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/services/components.js +73 -0
- package/dist/server/services/components.js.map +1 -0
- package/dist/server/services/components.mjs +71 -0
- package/dist/server/services/components.mjs.map +1 -0
- package/dist/server/services/configuration.js +58 -0
- package/dist/server/services/configuration.js.map +1 -0
- package/dist/server/services/configuration.mjs +56 -0
- package/dist/server/services/configuration.mjs.map +1 -0
- package/dist/server/services/content-types.js +60 -0
- package/dist/server/services/content-types.js.map +1 -0
- package/dist/server/services/content-types.mjs +58 -0
- package/dist/server/services/content-types.mjs.map +1 -0
- package/dist/server/services/data-mapper.js +66 -0
- package/dist/server/services/data-mapper.js.map +1 -0
- package/dist/server/services/data-mapper.mjs +64 -0
- package/dist/server/services/data-mapper.mjs.map +1 -0
- package/dist/server/services/document-manager.js +238 -0
- package/dist/server/services/document-manager.js.map +1 -0
- package/dist/server/services/document-manager.mjs +236 -0
- package/dist/server/services/document-manager.mjs.map +1 -0
- package/dist/server/services/document-metadata.js +237 -0
- package/dist/server/services/document-metadata.js.map +1 -0
- package/dist/server/services/document-metadata.mjs +235 -0
- package/dist/server/services/document-metadata.mjs.map +1 -0
- package/dist/server/services/field-sizes.js +90 -0
- package/dist/server/services/field-sizes.js.map +1 -0
- package/dist/server/services/field-sizes.mjs +88 -0
- package/dist/server/services/field-sizes.mjs.map +1 -0
- package/dist/server/services/index.js +34 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +32 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/metrics.js +35 -0
- package/dist/server/services/metrics.js.map +1 -0
- package/dist/server/services/metrics.mjs +33 -0
- package/dist/server/services/metrics.mjs.map +1 -0
- package/dist/server/services/permission-checker.js +112 -0
- package/dist/server/services/permission-checker.js.map +1 -0
- package/dist/server/services/permission-checker.mjs +110 -0
- package/dist/server/services/permission-checker.mjs.map +1 -0
- package/dist/server/services/permission.js +93 -0
- package/dist/server/services/permission.js.map +1 -0
- package/dist/server/services/permission.mjs +91 -0
- package/dist/server/services/permission.mjs.map +1 -0
- package/dist/server/services/populate-builder.js +75 -0
- package/dist/server/services/populate-builder.js.map +1 -0
- package/dist/server/services/populate-builder.mjs +73 -0
- package/dist/server/services/populate-builder.mjs.map +1 -0
- package/dist/server/services/uid.js +85 -0
- package/dist/server/services/uid.js.map +1 -0
- package/dist/server/services/uid.mjs +83 -0
- package/dist/server/services/uid.mjs.map +1 -0
- package/dist/server/services/utils/configuration/attributes.js +185 -0
- package/dist/server/services/utils/configuration/attributes.js.map +1 -0
- package/dist/server/services/utils/configuration/attributes.mjs +175 -0
- package/dist/server/services/utils/configuration/attributes.mjs.map +1 -0
- package/dist/server/services/utils/configuration/index.js +37 -0
- package/dist/server/services/utils/configuration/index.js.map +1 -0
- package/dist/server/services/utils/configuration/index.mjs +34 -0
- package/dist/server/services/utils/configuration/index.mjs.map +1 -0
- package/dist/server/services/utils/configuration/layouts.js +120 -0
- package/dist/server/services/utils/configuration/layouts.js.map +1 -0
- package/dist/server/services/utils/configuration/layouts.mjs +117 -0
- package/dist/server/services/utils/configuration/layouts.mjs.map +1 -0
- package/dist/server/services/utils/configuration/metadatas.js +147 -0
- package/dist/server/services/utils/configuration/metadatas.js.map +1 -0
- package/dist/server/services/utils/configuration/metadatas.mjs +144 -0
- package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -0
- package/dist/server/services/utils/configuration/settings.js +66 -0
- package/dist/server/services/utils/configuration/settings.js.map +1 -0
- package/dist/server/services/utils/configuration/settings.mjs +62 -0
- package/dist/server/services/utils/configuration/settings.mjs.map +1 -0
- package/dist/server/services/utils/draft.js +51 -0
- package/dist/server/services/utils/draft.js.map +1 -0
- package/dist/server/services/utils/draft.mjs +49 -0
- package/dist/server/services/utils/draft.mjs.map +1 -0
- package/dist/server/services/utils/populate.js +289 -0
- package/dist/server/services/utils/populate.js.map +1 -0
- package/dist/server/services/utils/populate.mjs +283 -0
- package/dist/server/services/utils/populate.mjs.map +1 -0
- package/dist/server/services/utils/store.js +71 -0
- package/dist/server/services/utils/store.js.map +1 -0
- package/dist/server/services/utils/store.mjs +69 -0
- package/dist/server/services/utils/store.mjs.map +1 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +17 -2
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/services/history.d.ts +3 -3
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +7 -11
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +7 -6
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/index.d.ts +2 -0
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/preview.d.ts +13 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
- package/dist/server/src/preview/index.d.ts +4 -0
- package/dist/server/src/preview/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/index.d.ts +8 -0
- package/dist/server/src/preview/routes/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/preview.d.ts +4 -0
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
- package/dist/server/src/preview/services/index.d.ts +16 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts +32 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview.d.ts +12 -0
- package/dist/server/src/preview/services/preview.d.ts.map +1 -0
- package/dist/server/src/preview/utils.d.ts +19 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.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 +12 -10
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +7 -6
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/utils/count.d.ts +1 -1
- package/dist/server/src/services/utils/count.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts +3 -3
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js +10 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/index.mjs +8 -0
- package/dist/server/utils/index.mjs.map +1 -0
- package/dist/server/validation/policies/hasPermissions.js +12 -0
- package/dist/server/validation/policies/hasPermissions.js.map +1 -0
- package/dist/server/validation/policies/hasPermissions.mjs +10 -0
- package/dist/server/validation/policies/hasPermissions.mjs.map +1 -0
- package/dist/shared/contracts/collection-types.d.ts +3 -2
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.js +3 -0
- package/dist/shared/contracts/collection-types.js.map +1 -0
- package/dist/shared/contracts/collection-types.mjs +2 -0
- package/dist/shared/contracts/collection-types.mjs.map +1 -0
- package/dist/shared/contracts/components.d.ts +0 -1
- package/dist/shared/contracts/components.js +3 -0
- package/dist/shared/contracts/components.js.map +1 -0
- package/dist/shared/contracts/components.mjs +2 -0
- package/dist/shared/contracts/components.mjs.map +1 -0
- package/dist/shared/contracts/content-types.d.ts +0 -1
- package/dist/shared/contracts/content-types.js +3 -0
- package/dist/shared/contracts/content-types.js.map +1 -0
- package/dist/shared/contracts/content-types.mjs +2 -0
- package/dist/shared/contracts/content-types.mjs.map +1 -0
- package/dist/shared/contracts/history-versions.d.ts +0 -1
- package/dist/shared/contracts/history-versions.js +3 -0
- package/dist/shared/contracts/history-versions.js.map +1 -0
- package/dist/shared/contracts/history-versions.mjs +2 -0
- package/dist/shared/contracts/history-versions.mjs.map +1 -0
- package/dist/shared/contracts/index.d.ts +1 -1
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/index.js +26 -0
- package/dist/shared/contracts/index.js.map +1 -0
- package/dist/shared/contracts/index.mjs +21 -0
- package/dist/shared/contracts/index.mjs.map +1 -0
- package/dist/shared/contracts/init.d.ts +0 -1
- package/dist/shared/contracts/init.js +3 -0
- package/dist/shared/contracts/init.js.map +1 -0
- package/dist/shared/contracts/init.mjs +2 -0
- package/dist/shared/contracts/init.mjs.map +1 -0
- package/dist/shared/contracts/preview.d.ts +26 -0
- package/dist/shared/contracts/preview.d.ts.map +1 -0
- package/dist/shared/contracts/preview.js +3 -0
- package/dist/shared/contracts/preview.js.map +1 -0
- package/dist/shared/contracts/preview.mjs +2 -0
- package/dist/shared/contracts/preview.mjs.map +1 -0
- package/dist/shared/contracts/relations.d.ts +1 -2
- package/dist/shared/contracts/relations.d.ts.map +1 -1
- package/dist/shared/contracts/relations.js +3 -0
- package/dist/shared/contracts/relations.js.map +1 -0
- package/dist/shared/contracts/relations.mjs +2 -0
- package/dist/shared/contracts/relations.mjs.map +1 -0
- package/dist/shared/contracts/review-workflows.d.ts +0 -1
- package/dist/shared/contracts/review-workflows.js +3 -0
- package/dist/shared/contracts/review-workflows.js.map +1 -0
- package/dist/shared/contracts/review-workflows.mjs +2 -0
- package/dist/shared/contracts/review-workflows.mjs.map +1 -0
- package/dist/shared/contracts/single-types.d.ts +0 -1
- package/dist/shared/contracts/single-types.js +3 -0
- package/dist/shared/contracts/single-types.js.map +1 -0
- package/dist/shared/contracts/single-types.mjs +2 -0
- package/dist/shared/contracts/single-types.mjs.map +1 -0
- package/dist/shared/contracts/uid.d.ts +0 -1
- package/dist/shared/contracts/uid.js +3 -0
- package/dist/shared/contracts/uid.js.map +1 -0
- package/dist/shared/contracts/uid.mjs +2 -0
- package/dist/shared/contracts/uid.mjs.map +1 -0
- package/dist/shared/index.d.ts +0 -1
- package/dist/shared/index.js +6 -41
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +2 -42
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +25 -21
- package/dist/_chunks/CardDragPreview-C0QyJgRA.js +0 -69
- package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +0 -1
- package/dist/_chunks/CardDragPreview-DOxamsuj.mjs +0 -70
- package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +0 -1
- package/dist/_chunks/ComponentConfigurationPage-k6fnZytn.js +0 -255
- package/dist/_chunks/ComponentConfigurationPage-k6fnZytn.js.map +0 -1
- package/dist/_chunks/ComponentConfigurationPage-o2HOTHL4.mjs +0 -236
- package/dist/_chunks/ComponentConfigurationPage-o2HOTHL4.mjs.map +0 -1
- package/dist/_chunks/ComponentIcon-BXdiCGQp.js +0 -176
- package/dist/_chunks/ComponentIcon-BXdiCGQp.js.map +0 -1
- package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs +0 -157
- package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +0 -1
- package/dist/_chunks/EditConfigurationPage-DKtok23W.js +0 -151
- package/dist/_chunks/EditConfigurationPage-DKtok23W.js.map +0 -1
- package/dist/_chunks/EditConfigurationPage-HNi0pVX4.mjs +0 -132
- package/dist/_chunks/EditConfigurationPage-HNi0pVX4.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-CrX5Iz3h.js +0 -222
- package/dist/_chunks/EditViewPage-CrX5Iz3h.js.map +0 -1
- package/dist/_chunks/EditViewPage-DGnFsrTV.mjs +0 -203
- package/dist/_chunks/EditViewPage-DGnFsrTV.mjs.map +0 -1
- package/dist/_chunks/Field-DlWgNyun.mjs +0 -5491
- package/dist/_chunks/Field-DlWgNyun.mjs.map +0 -1
- package/dist/_chunks/Field-DvDdA59J.js +0 -5523
- package/dist/_chunks/Field-DvDdA59J.js.map +0 -1
- package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs +0 -50
- package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +0 -1
- package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js +0 -49
- package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +0 -1
- package/dist/_chunks/Form-B7VJjkXr.mjs +0 -739
- package/dist/_chunks/Form-B7VJjkXr.mjs.map +0 -1
- package/dist/_chunks/Form-D9w2wzOa.js +0 -760
- package/dist/_chunks/Form-D9w2wzOa.js.map +0 -1
- package/dist/_chunks/History-84QY4Lau.mjs +0 -1032
- package/dist/_chunks/History-84QY4Lau.mjs.map +0 -1
- package/dist/_chunks/History-GCscEVds.js +0 -1053
- package/dist/_chunks/History-GCscEVds.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-C_S6OFYL.mjs +0 -622
- package/dist/_chunks/ListConfigurationPage-C_S6OFYL.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-Ck-lKA_g.js +0 -642
- package/dist/_chunks/ListConfigurationPage-Ck-lKA_g.js.map +0 -1
- package/dist/_chunks/ListViewPage-D1vAbQW4.js +0 -848
- package/dist/_chunks/ListViewPage-D1vAbQW4.js.map +0 -1
- package/dist/_chunks/ListViewPage-DkQT6AN6.mjs +0 -824
- package/dist/_chunks/ListViewPage-DkQT6AN6.mjs.map +0 -1
- package/dist/_chunks/NoContentTypePage-D5QYn9pN.mjs +0 -51
- package/dist/_chunks/NoContentTypePage-D5QYn9pN.mjs.map +0 -1
- package/dist/_chunks/NoContentTypePage-DnMToxdO.js +0 -51
- package/dist/_chunks/NoContentTypePage-DnMToxdO.js.map +0 -1
- package/dist/_chunks/NoPermissionsPage-COirbirm.js +0 -23
- package/dist/_chunks/NoPermissionsPage-COirbirm.js.map +0 -1
- package/dist/_chunks/NoPermissionsPage-eV9XOUs6.mjs +0 -23
- package/dist/_chunks/NoPermissionsPage-eV9XOUs6.mjs.map +0 -1
- package/dist/_chunks/Relations-CMu33f0Q.mjs +0 -694
- package/dist/_chunks/Relations-CMu33f0Q.mjs.map +0 -1
- package/dist/_chunks/Relations-CvSHeSTB.js +0 -714
- package/dist/_chunks/Relations-CvSHeSTB.js.map +0 -1
- package/dist/_chunks/ar-BUUWXIYu.js +0 -226
- package/dist/_chunks/ar-BUUWXIYu.js.map +0 -1
- package/dist/_chunks/ar-CCEVvqGG.mjs +0 -226
- package/dist/_chunks/ar-CCEVvqGG.mjs.map +0 -1
- package/dist/_chunks/ca-5U32ON2v.mjs +0 -201
- package/dist/_chunks/ca-5U32ON2v.mjs.map +0 -1
- package/dist/_chunks/ca-Cmk45QO6.js +0 -201
- package/dist/_chunks/ca-Cmk45QO6.js.map +0 -1
- package/dist/_chunks/cs-CM2aBUar.mjs +0 -125
- package/dist/_chunks/cs-CM2aBUar.mjs.map +0 -1
- package/dist/_chunks/cs-CkJy6B2v.js +0 -125
- package/dist/_chunks/cs-CkJy6B2v.js.map +0 -1
- package/dist/_chunks/de-C72KDNOl.mjs +0 -199
- package/dist/_chunks/de-C72KDNOl.mjs.map +0 -1
- package/dist/_chunks/de-CCEmbAah.js +0 -199
- package/dist/_chunks/de-CCEmbAah.js.map +0 -1
- package/dist/_chunks/en-BrCTWlZv.mjs +0 -292
- package/dist/_chunks/en-BrCTWlZv.mjs.map +0 -1
- package/dist/_chunks/en-uOUIxfcQ.js +0 -292
- package/dist/_chunks/en-uOUIxfcQ.js.map +0 -1
- package/dist/_chunks/es-CeXiYflN.mjs +0 -196
- package/dist/_chunks/es-CeXiYflN.mjs.map +0 -1
- package/dist/_chunks/es-EUonQTon.js +0 -196
- package/dist/_chunks/es-EUonQTon.js.map +0 -1
- package/dist/_chunks/eu-CdALomew.mjs +0 -202
- package/dist/_chunks/eu-CdALomew.mjs.map +0 -1
- package/dist/_chunks/eu-VDH-3ovk.js +0 -202
- package/dist/_chunks/eu-VDH-3ovk.js.map +0 -1
- package/dist/_chunks/fr-B7kGGg3E.js +0 -206
- package/dist/_chunks/fr-B7kGGg3E.js.map +0 -1
- package/dist/_chunks/fr-CD9VFbPM.mjs +0 -206
- package/dist/_chunks/fr-CD9VFbPM.mjs.map +0 -1
- package/dist/_chunks/gu-BRmF601H.js +0 -200
- package/dist/_chunks/gu-BRmF601H.js.map +0 -1
- package/dist/_chunks/gu-CNpaMDpH.mjs +0 -200
- package/dist/_chunks/gu-CNpaMDpH.mjs.map +0 -1
- package/dist/_chunks/hi-CCJBptSq.js +0 -200
- package/dist/_chunks/hi-CCJBptSq.js.map +0 -1
- package/dist/_chunks/hi-Dwvd04m3.mjs +0 -200
- package/dist/_chunks/hi-Dwvd04m3.mjs.map +0 -1
- package/dist/_chunks/hooks-BAaaKPS_.js +0 -7
- package/dist/_chunks/hooks-BAaaKPS_.js.map +0 -1
- package/dist/_chunks/hooks-E5u1mcgM.mjs +0 -8
- package/dist/_chunks/hooks-E5u1mcgM.mjs.map +0 -1
- package/dist/_chunks/hu-CeYvaaO0.mjs +0 -202
- package/dist/_chunks/hu-CeYvaaO0.mjs.map +0 -1
- package/dist/_chunks/hu-sNV_yLYy.js +0 -202
- package/dist/_chunks/hu-sNV_yLYy.js.map +0 -1
- package/dist/_chunks/id-B5Ser98A.js +0 -160
- package/dist/_chunks/id-B5Ser98A.js.map +0 -1
- package/dist/_chunks/id-BtwA9WJT.mjs +0 -160
- package/dist/_chunks/id-BtwA9WJT.mjs.map +0 -1
- package/dist/_chunks/index-BU73akFF.js +0 -3939
- package/dist/_chunks/index-BU73akFF.js.map +0 -1
- package/dist/_chunks/index-DYjyBm-q.mjs +0 -3920
- package/dist/_chunks/index-DYjyBm-q.mjs.map +0 -1
- package/dist/_chunks/it-BrVPqaf1.mjs +0 -162
- package/dist/_chunks/it-BrVPqaf1.mjs.map +0 -1
- package/dist/_chunks/it-DkBIs7vD.js +0 -162
- package/dist/_chunks/it-DkBIs7vD.js.map +0 -1
- package/dist/_chunks/ja-CcFe8diO.js +0 -196
- package/dist/_chunks/ja-CcFe8diO.js.map +0 -1
- package/dist/_chunks/ja-CtsUxOvk.mjs +0 -196
- package/dist/_chunks/ja-CtsUxOvk.mjs.map +0 -1
- package/dist/_chunks/ko-HVQRlfUI.mjs +0 -195
- package/dist/_chunks/ko-HVQRlfUI.mjs.map +0 -1
- package/dist/_chunks/ko-woFZPmLk.js +0 -195
- package/dist/_chunks/ko-woFZPmLk.js.map +0 -1
- package/dist/_chunks/layout-CK49ltFD.mjs +0 -470
- package/dist/_chunks/layout-CK49ltFD.mjs.map +0 -1
- package/dist/_chunks/layout-IJUR2XBA.js +0 -488
- package/dist/_chunks/layout-IJUR2XBA.js.map +0 -1
- package/dist/_chunks/ml-BihZwQit.mjs +0 -200
- package/dist/_chunks/ml-BihZwQit.mjs.map +0 -1
- package/dist/_chunks/ml-C2W8N8k1.js +0 -200
- package/dist/_chunks/ml-C2W8N8k1.js.map +0 -1
- package/dist/_chunks/ms-BuFotyP_.js +0 -144
- package/dist/_chunks/ms-BuFotyP_.js.map +0 -1
- package/dist/_chunks/ms-m_WjyWx7.mjs +0 -144
- package/dist/_chunks/ms-m_WjyWx7.mjs.map +0 -1
- package/dist/_chunks/nl-D4R9gHx5.mjs +0 -202
- package/dist/_chunks/nl-D4R9gHx5.mjs.map +0 -1
- package/dist/_chunks/nl-bbEOHChV.js +0 -202
- package/dist/_chunks/nl-bbEOHChV.js.map +0 -1
- package/dist/_chunks/objects-gigeqt7s.js +0 -49
- package/dist/_chunks/objects-gigeqt7s.js.map +0 -1
- package/dist/_chunks/objects-mKMAmfec.mjs +0 -47
- package/dist/_chunks/objects-mKMAmfec.mjs.map +0 -1
- package/dist/_chunks/pl-sbx9mSt_.mjs +0 -199
- package/dist/_chunks/pl-sbx9mSt_.mjs.map +0 -1
- package/dist/_chunks/pl-uzwG-hk7.js +0 -199
- package/dist/_chunks/pl-uzwG-hk7.js.map +0 -1
- package/dist/_chunks/pt-BR-BiOz37D9.js +0 -201
- package/dist/_chunks/pt-BR-BiOz37D9.js.map +0 -1
- package/dist/_chunks/pt-BR-C71iDxnh.mjs +0 -201
- package/dist/_chunks/pt-BR-C71iDxnh.mjs.map +0 -1
- package/dist/_chunks/pt-BsaFvS8-.mjs +0 -95
- package/dist/_chunks/pt-BsaFvS8-.mjs.map +0 -1
- package/dist/_chunks/pt-CeXQuq50.js +0 -95
- package/dist/_chunks/pt-CeXQuq50.js.map +0 -1
- package/dist/_chunks/relations-Dl8Jk9_i.mjs +0 -135
- package/dist/_chunks/relations-Dl8Jk9_i.mjs.map +0 -1
- package/dist/_chunks/relations-T1zuutNL.js +0 -134
- package/dist/_chunks/relations-T1zuutNL.js.map +0 -1
- package/dist/_chunks/ru-BE6A4Exp.mjs +0 -231
- package/dist/_chunks/ru-BE6A4Exp.mjs.map +0 -1
- package/dist/_chunks/ru-BT3ybNny.js +0 -231
- package/dist/_chunks/ru-BT3ybNny.js.map +0 -1
- package/dist/_chunks/sa-CcvkYInH.js +0 -200
- package/dist/_chunks/sa-CcvkYInH.js.map +0 -1
- package/dist/_chunks/sa-Dag0k-Z8.mjs +0 -200
- package/dist/_chunks/sa-Dag0k-Z8.mjs.map +0 -1
- package/dist/_chunks/sk-BFg-R8qJ.mjs +0 -202
- package/dist/_chunks/sk-BFg-R8qJ.mjs.map +0 -1
- package/dist/_chunks/sk-CvY09Xjv.js +0 -202
- package/dist/_chunks/sk-CvY09Xjv.js.map +0 -1
- package/dist/_chunks/sv-CUnfWGsh.mjs +0 -202
- package/dist/_chunks/sv-CUnfWGsh.mjs.map +0 -1
- package/dist/_chunks/sv-MYDuzgvT.js +0 -202
- package/dist/_chunks/sv-MYDuzgvT.js.map +0 -1
- package/dist/_chunks/th-BqbI8lIT.mjs +0 -148
- package/dist/_chunks/th-BqbI8lIT.mjs.map +0 -1
- package/dist/_chunks/th-D9_GfAjc.js +0 -148
- package/dist/_chunks/th-D9_GfAjc.js.map +0 -1
- package/dist/_chunks/tr-CgeK3wJM.mjs +0 -199
- package/dist/_chunks/tr-CgeK3wJM.mjs.map +0 -1
- package/dist/_chunks/tr-D9UH-O_R.js +0 -199
- package/dist/_chunks/tr-D9UH-O_R.js.map +0 -1
- package/dist/_chunks/uk-C8EiqJY7.js +0 -144
- package/dist/_chunks/uk-C8EiqJY7.js.map +0 -1
- package/dist/_chunks/uk-CR-zDhAY.mjs +0 -144
- package/dist/_chunks/uk-CR-zDhAY.mjs.map +0 -1
- package/dist/_chunks/useDragAndDrop-DdHgKsqq.mjs +0 -231
- package/dist/_chunks/useDragAndDrop-DdHgKsqq.mjs.map +0 -1
- package/dist/_chunks/useDragAndDrop-J0TUUbR6.js +0 -249
- package/dist/_chunks/useDragAndDrop-J0TUUbR6.js.map +0 -1
- package/dist/_chunks/usePrev-B9w_-eYc.js +0 -15
- package/dist/_chunks/usePrev-B9w_-eYc.js.map +0 -1
- package/dist/_chunks/usePrev-DH6iah0A.mjs +0 -16
- package/dist/_chunks/usePrev-DH6iah0A.mjs.map +0 -1
- package/dist/_chunks/vi-CJlYDheJ.js +0 -111
- package/dist/_chunks/vi-CJlYDheJ.js.map +0 -1
- package/dist/_chunks/vi-DUXIk_fw.mjs +0 -111
- package/dist/_chunks/vi-DUXIk_fw.mjs.map +0 -1
- package/dist/_chunks/zh-BWZspA60.mjs +0 -209
- package/dist/_chunks/zh-BWZspA60.mjs.map +0 -1
- package/dist/_chunks/zh-CQQfszqR.js +0 -209
- package/dist/_chunks/zh-CQQfszqR.js.map +0 -1
- package/dist/_chunks/zh-Hans-9kOncHGw.js +0 -952
- package/dist/_chunks/zh-Hans-9kOncHGw.js.map +0 -1
- package/dist/_chunks/zh-Hans-BPQcRIyH.mjs +0 -952
- package/dist/_chunks/zh-Hans-BPQcRIyH.mjs.map +0 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations.d.ts +0 -38
- package/strapi-server.js +0 -3
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index-DYjyBm-q.mjs","sources":["../../admin/src/constants/plugin.ts","../../admin/src/components/InjectionZone.tsx","../../admin/src/constants/attributes.ts","../../admin/src/constants/collections.ts","../../admin/src/features/DocumentRBAC.tsx","../../admin/src/services/api.ts","../../admin/src/services/documents.ts","../../admin/src/utils/api.ts","../../admin/src/utils/validation.ts","../../admin/src/services/init.ts","../../admin/src/hooks/useContentTypeSchema.ts","../../admin/src/hooks/useDocument.ts","../../admin/src/utils/translations.ts","../../admin/src/hooks/useDocumentActions.ts","../../admin/src/history/routes.tsx","../../admin/src/router.tsx","../../admin/src/pages/EditView/components/DocumentActions.tsx","../../admin/src/components/RelativeTime.tsx","../../admin/src/utils/users.ts","../../admin/src/utils/strings.ts","../../admin/src/pages/EditView/components/DocumentStatus.tsx","../../admin/src/pages/EditView/components/Header.tsx","../../admin/src/pages/EditView/components/Panels.tsx","../../admin/src/constants/hooks.ts","../../admin/src/services/contentTypes.ts","../../admin/src/utils/attributes.ts","../../admin/src/hooks/useDocumentLayout.ts","../../admin/src/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.tsx","../../admin/src/pages/ListView/components/BulkActions/PublishAction.tsx","../../admin/src/pages/ListView/components/BulkActions/Actions.tsx","../../admin/src/pages/ListView/components/AutoCloneFailureModal.tsx","../../admin/src/pages/ListView/components/TableActions.tsx","../../admin/src/content-manager.ts","../../admin/src/history/components/HistoryAction.tsx","../../admin/src/history/index.ts","../../admin/src/modules/app.ts","../../admin/src/modules/reducers.ts","../../admin/src/index.ts"],"sourcesContent":["const PLUGIN_ID = 'content-manager';\n\nconst PERMISSIONS = [\n 'plugin::content-manager.explorer.create',\n 'plugin::content-manager.explorer.read',\n 'plugin::content-manager.explorer.update',\n 'plugin::content-manager.explorer.delete',\n 'plugin::content-manager.explorer.publish',\n];\n\nexport { PLUGIN_ID, PERMISSIONS };\n","import { useStrapiApp, InjectionZoneComponent } from '@strapi/admin/strapi-admin';\n\nimport { PLUGIN_ID } from '../constants/plugin';\n\nconst INJECTION_ZONES = {\n editView: { informations: [], 'right-links': [] },\n listView: {\n actions: [],\n deleteModalAdditionalInfos: [],\n publishModalAdditionalInfos: [],\n unpublishModalAdditionalInfos: [],\n },\n} satisfies InjectionZones;\n\ninterface InjectionZones {\n editView: {\n informations: InjectionZoneComponent[];\n 'right-links': InjectionZoneComponent[];\n };\n listView: {\n actions: InjectionZoneComponent[];\n deleteModalAdditionalInfos: InjectionZoneComponent[];\n publishModalAdditionalInfos: InjectionZoneComponent[];\n unpublishModalAdditionalInfos: InjectionZoneComponent[];\n };\n}\n\ntype InjectionZoneArea =\n | 'editView.informations'\n | 'editView.right-links'\n | 'listView.actions'\n | 'listView.unpublishModalAdditionalInfos'\n | 'listView.deleteModalAdditionalInfos'\n | 'listView.publishModalAdditionalInfos'\n | 'listView.deleteModalAdditionalInfos';\n\ntype InjectionZoneModule = InjectionZoneArea extends `${infer Word}.${string}` ? Word : never;\ntype InjectionZoneContainer = InjectionZoneArea extends `${string}.${infer Word}.${string}`\n ? Word\n : never;\ntype InjectionZoneBlock = InjectionZoneArea extends `${string}.${string}.${infer Word}`\n ? Word\n : never;\n\n/**\n * You can't know what this component props will be because it's generic and used everywhere\n * e.g. content-manager edit view, we just send the slug but we might not in the listView,\n * therefore, people should type it themselves on the components they render.\n */\nconst InjectionZone = ({ area, ...props }: { area: InjectionZoneArea; [key: string]: unknown }) => {\n const components = useInjectionZone(area);\n\n return (\n <>\n {components.map((component) => (\n <component.Component key={component.name} {...props} />\n ))}\n </>\n );\n};\n\nexport const useInjectionZone = (area: InjectionZoneArea) => {\n const getPlugin = useStrapiApp('useInjectionZone', (state) => state.getPlugin);\n const contentManagerPlugin = getPlugin(PLUGIN_ID);\n const [page, position] = area.split('.') as [InjectionZoneContainer, InjectionZoneBlock];\n\n return contentManagerPlugin.getInjectedComponents(page, position);\n};\n\nexport { InjectionZone, INJECTION_ZONES };\n\nexport type {\n InjectionZoneArea,\n InjectionZoneComponent,\n InjectionZones,\n InjectionZoneModule,\n InjectionZoneContainer,\n InjectionZoneBlock,\n};\n","const ID = 'id';\n\nconst CREATED_BY_ATTRIBUTE_NAME = 'createdBy';\nconst UPDATED_BY_ATTRIBUTE_NAME = 'updatedBy';\n\nconst CREATOR_FIELDS = [CREATED_BY_ATTRIBUTE_NAME, UPDATED_BY_ATTRIBUTE_NAME];\n\nconst PUBLISHED_BY_ATTRIBUTE_NAME = 'publishedBy';\nconst CREATED_AT_ATTRIBUTE_NAME = 'createdAt';\nconst UPDATED_AT_ATTRIBUTE_NAME = 'updatedAt';\nconst PUBLISHED_AT_ATTRIBUTE_NAME = 'publishedAt';\n\nconst DOCUMENT_META_FIELDS = [\n ID,\n ...CREATOR_FIELDS,\n PUBLISHED_BY_ATTRIBUTE_NAME,\n CREATED_AT_ATTRIBUTE_NAME,\n UPDATED_AT_ATTRIBUTE_NAME,\n PUBLISHED_AT_ATTRIBUTE_NAME,\n];\n\n/**\n * List of attribute types that cannot be used as the main field.\n * Not sure the name could be any clearer.\n */\nconst ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD = [\n 'dynamiczone',\n 'json',\n 'text',\n 'relation',\n 'component',\n 'boolean',\n 'media',\n 'password',\n 'richtext',\n 'timestamp',\n 'blocks',\n];\n\nexport {\n ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD,\n CREATED_AT_ATTRIBUTE_NAME,\n UPDATED_AT_ATTRIBUTE_NAME,\n PUBLISHED_AT_ATTRIBUTE_NAME,\n CREATED_BY_ATTRIBUTE_NAME,\n UPDATED_BY_ATTRIBUTE_NAME,\n PUBLISHED_BY_ATTRIBUTE_NAME,\n CREATOR_FIELDS,\n DOCUMENT_META_FIELDS,\n};\n","const SINGLE_TYPES = 'single-types';\nconst COLLECTION_TYPES = 'collection-types';\n\nexport { SINGLE_TYPES, COLLECTION_TYPES };\n","import * as React from 'react';\n\nimport { useRBAC, useAuth, type Permission, createContext, Page } from '@strapi/admin/strapi-admin';\nimport { useParams } from 'react-router-dom';\n\nimport type { Schema } from '@strapi/types';\n\n/**\n * The boolean values indicate the global actions a user can perform on the document.\n * The `string[]` values tell us specifically which fields the actions can be performed on,\n * for example, if the `canReadFields` array is empty, than no fields can be read by the user.\n * This can happen even if the user can read the document.\n */\ninterface DocumentRBACContextValue {\n canCreate?: boolean;\n canCreateFields: string[];\n canDelete?: boolean;\n canPublish?: boolean;\n canRead?: boolean;\n canReadFields: string[];\n canUpdate?: boolean;\n canUpdateFields: string[];\n canUserAction: (\n fieldName: string,\n fieldsUserCanAction: string[],\n fieldType: Schema.Attribute.Kind\n ) => boolean;\n isLoading: boolean;\n}\n\nconst [DocumentRBACProvider, useDocumentRBAC] = createContext<DocumentRBACContextValue>(\n 'DocumentRBAC',\n {\n canCreate: false,\n canCreateFields: [],\n canDelete: false,\n canPublish: false,\n canRead: false,\n canReadFields: [],\n canUpdate: false,\n canUpdateFields: [],\n canUserAction: () => false,\n isLoading: false,\n }\n);\n\ninterface DocumentRBACProps {\n children: React.ReactNode;\n permissions: Permission[] | null;\n}\n\n/**\n * @internal This component is not meant to be used outside of the Content Manager plugin.\n * It depends on knowing the slug/model of the content-type using the params of the URL.\n * If you do use the hook outside of the context, we default to `false` for all actions.\n *\n * It then creates an list of `can{Action}` that are passed to the context for consumption\n * within the app to enforce RBAC.\n */\nconst DocumentRBAC = ({ children, permissions }: DocumentRBACProps) => {\n const { slug } = useParams<{ slug: string }>();\n\n if (!slug) {\n throw new Error('Cannot find the slug param in the URL');\n }\n\n const userPermissions = useAuth('DocumentRBAC', (state) => state.permissions);\n\n const contentTypePermissions = React.useMemo(() => {\n const contentTypePermissions = userPermissions.filter(\n (permission) => permission.subject === slug\n );\n return contentTypePermissions.reduce<Record<string, Permission[]>>((acc, permission) => {\n const [action] = permission.action.split('.').slice(-1);\n return { ...acc, [action]: [permission] };\n }, {});\n }, [slug, userPermissions]);\n\n const { isLoading, allowedActions } = useRBAC(contentTypePermissions, permissions ?? undefined);\n\n const canCreateFields =\n !isLoading && allowedActions.canCreate\n ? extractAndDedupeFields(contentTypePermissions.create)\n : [];\n\n const canReadFields =\n !isLoading && allowedActions.canRead ? extractAndDedupeFields(contentTypePermissions.read) : [];\n\n const canUpdateFields =\n !isLoading && allowedActions.canUpdate\n ? extractAndDedupeFields(contentTypePermissions.update)\n : [];\n\n /**\n * @description Checks if the user can perform an action on a field based on the field names\n * provided as the second argument.\n */\n const canUserAction: DocumentRBACContextValue['canUserAction'] = React.useCallback(\n (fieldName, fieldsUserCanAction, fieldType) => {\n const name = removeNumericalStrings(fieldName.split('.'));\n\n const componentFieldNames = fieldsUserCanAction\n // filter out fields that aren't components (components are dot separated)\n .filter((field) => field.split('.').length > 1);\n\n if (fieldType === 'component') {\n // check if the field name is within any of those arrays\n return componentFieldNames.some((field) => {\n return field.includes(name.join('.'));\n });\n }\n\n /**\n * The field is within a component.\n */\n if (name.length > 1) {\n return componentFieldNames.includes(name.join('.'));\n }\n\n /**\n * just a regular field\n */\n return fieldsUserCanAction.includes(fieldName);\n },\n []\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <DocumentRBACProvider\n isLoading={isLoading}\n canCreateFields={canCreateFields}\n canReadFields={canReadFields}\n canUpdateFields={canUpdateFields}\n canUserAction={canUserAction}\n {...allowedActions}\n >\n {children}\n </DocumentRBACProvider>\n );\n};\n\n/**\n * @internal it's really small, but it's used three times in a row and DRY for something this straight forward.\n */\nconst extractAndDedupeFields = (permissions: Permission[] = []) =>\n permissions\n .flatMap((permission) => permission.properties?.fields)\n .filter(\n (field, index, arr): field is string =>\n arr.indexOf(field) === index && typeof field === 'string'\n );\n\n/**\n * @internal removes numerical strings from arrays.\n * @example\n * ```ts\n * const name = 'a.0.b';\n * const res = removeNumericalStrings(name.split('.'));\n * console.log(res); // ['a', 'b']\n * ```\n */\nconst removeNumericalStrings = (arr: string[]) => arr.filter((item) => isNaN(Number(item)));\n\nexport { DocumentRBAC, useDocumentRBAC, DocumentRBACContextValue, DocumentRBACProps };\n","import { adminApi } from '@strapi/admin/strapi-admin';\n\nconst contentManagerApi = adminApi.enhanceEndpoints({\n addTagTypes: [\n 'ComponentConfiguration',\n 'ContentTypesConfiguration',\n 'ContentTypeSettings',\n 'Document',\n 'InitialData',\n 'HistoryVersion',\n 'Relations',\n ],\n});\n\nexport { contentManagerApi };\n","/**\n * Related to fetching the actual content of a collection type or single type.\n */\n\nimport { SINGLE_TYPES } from '../constants/collections';\n\nimport { contentManagerApi } from './api';\n\nimport type {\n Clone,\n Create,\n Delete,\n Find,\n FindOne,\n BulkDelete,\n BulkPublish,\n BulkUnpublish,\n Discard,\n CountDraftRelations,\n CountManyEntriesDraftRelations,\n Publish,\n Unpublish,\n Update,\n} from '../../../shared/contracts/collection-types';\n\nconst documentApi = contentManagerApi.injectEndpoints({\n overrideExisting: true,\n endpoints: (builder) => ({\n autoCloneDocument: builder.mutation<Clone.Response, Clone.Params & { query?: string }>({\n query: ({ model, sourceId, query }) => ({\n url: `/content-manager/collection-types/${model}/auto-clone/${sourceId}`,\n method: 'POST',\n config: {\n params: query,\n },\n }),\n invalidatesTags: (_result, error, { model }) => {\n if (error) {\n return [];\n }\n\n return [{ type: 'Document', id: `${model}_LIST` }];\n },\n }),\n cloneDocument: builder.mutation<\n Clone.Response,\n Clone.Params & {\n data: Clone.Request['body'];\n params?: Clone.Request['query'];\n }\n >({\n query: ({ model, sourceId, data, params }) => ({\n url: `/content-manager/collection-types/${model}/clone/${sourceId}`,\n method: 'POST',\n data,\n config: {\n params,\n },\n }),\n invalidatesTags: (_result, _error, { model }) => [{ type: 'Document', id: `${model}_LIST` }],\n }),\n /**\n * Creates a new collection-type document. This should ONLY be used for collection-types.\n * single-types should always be using `updateDocument` since they always exist.\n */\n createDocument: builder.mutation<\n Create.Response,\n Create.Params & {\n data: Create.Request['body'];\n params?: Create.Request['query'];\n }\n >({\n query: ({ model, data, params }) => ({\n url: `/content-manager/collection-types/${model}`,\n method: 'POST',\n data,\n config: {\n params,\n },\n }),\n invalidatesTags: (result, _error, { model }) => [\n { type: 'Document', id: `${model}_LIST` },\n 'Relations',\n ],\n }),\n deleteDocument: builder.mutation<\n Delete.Response,\n Pick<Delete.Params, 'model'> &\n Pick<Partial<Delete.Params>, 'documentId'> & {\n collectionType: string;\n params?: Find.Request['query'];\n }\n >({\n query: ({ collectionType, model, documentId, params }) => ({\n url: `/content-manager/${collectionType}/${model}${\n collectionType !== SINGLE_TYPES && documentId ? `/${documentId}` : ''\n }`,\n method: 'DELETE',\n config: {\n params,\n },\n }),\n invalidatesTags: (_result, _error, { collectionType, model }) => [\n { type: 'Document', id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model },\n ],\n }),\n deleteManyDocuments: builder.mutation<\n BulkDelete.Response,\n BulkDelete.Params & BulkDelete.Request['body'] & { params?: Find.Request['query'] }\n >({\n query: ({ model, params, ...body }) => ({\n url: `/content-manager/collection-types/${model}/actions/bulkDelete`,\n method: 'POST',\n data: body,\n config: {\n params,\n },\n }),\n invalidatesTags: (_res, _error, { model }) => [{ type: 'Document', id: `${model}_LIST` }],\n }),\n discardDocument: builder.mutation<\n Discard.Response,\n Pick<Discard.Params, 'model'> &\n Partial<Pick<Discard.Params, 'documentId'>> & {\n collectionType: string;\n params?: Find.Request['query'] & {\n [key: string]: any;\n };\n }\n >({\n query: ({ collectionType, model, documentId, params }) => ({\n url: documentId\n ? `/content-manager/${collectionType}/${model}/${documentId}/actions/discard`\n : `/content-manager/${collectionType}/${model}/actions/discard`,\n method: 'POST',\n config: {\n params,\n },\n }),\n invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {\n return [\n {\n type: 'Document',\n id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model,\n },\n { type: 'Document', id: `${model}_LIST` },\n 'Relations',\n ];\n },\n }),\n /**\n * Gets all documents of a collection type or single type.\n * By passing different params you can get different results e.g. only published documents or 'es' documents.\n */\n getAllDocuments: builder.query<\n Find.Response,\n Find.Params & {\n params?: Find.Request['query'] & {\n [key: string]: any;\n };\n }\n >({\n query: ({ model, params }) => ({\n url: `/content-manager/collection-types/${model}`,\n method: 'GET',\n config: {\n params,\n },\n }),\n providesTags: (result, _error, arg) => {\n return [\n { type: 'Document', id: `ALL_LIST` },\n { type: 'Document', id: `${arg.model}_LIST` },\n ...(result?.results.map(({ documentId }) => ({\n type: 'Document' as const,\n id: `${arg.model}_${documentId}`,\n })) ?? []),\n ];\n },\n }),\n getDraftRelationCount: builder.query<\n CountDraftRelations.Response,\n {\n collectionType: string;\n model: string;\n /**\n * You don't pass the documentId if the document is a single-type\n */\n documentId?: string;\n params?: CountDraftRelations.Request['query'];\n }\n >({\n query: ({ collectionType, model, documentId, params }) => ({\n url: documentId\n ? `/content-manager/${collectionType}/${model}/${documentId}/actions/countDraftRelations`\n : `/content-manager/${collectionType}/${model}/actions/countDraftRelations`,\n method: 'GET',\n config: {\n params,\n },\n }),\n }),\n getDocument: builder.query<\n FindOne.Response,\n Pick<FindOne.Params, 'model'> &\n Partial<Pick<FindOne.Params, 'documentId'>> & {\n collectionType: string;\n params?: FindOne.Request['query'];\n }\n >({\n // @ts-expect-error – TODO: fix ts error where data unknown doesn't work with response via an assertion?\n queryFn: async (\n { collectionType, model, documentId, params },\n _api,\n _extraOpts,\n baseQuery\n ) => {\n const res = await baseQuery({\n url: `/content-manager/${collectionType}/${model}${documentId ? `/${documentId}` : ''}`,\n method: 'GET',\n config: {\n params,\n },\n });\n\n /**\n * To stop the query from locking itself in multiple retries, we intercept the error here and manage correctly.\n * This is because single-types don't have a list view and fetching them with the route `/single-types/:model`\n * never returns a list, just a single document but this won't exist if you've not made one before.\n */\n if (res.error && res.error.name === 'NotFoundError' && collectionType === SINGLE_TYPES) {\n return { data: { document: undefined }, error: undefined };\n }\n\n return res;\n },\n providesTags: (result, _error, { collectionType, model, documentId }) => {\n return [\n // we prefer the result's id because we don't fetch single-types with an ID.\n {\n type: 'Document',\n id:\n collectionType !== SINGLE_TYPES\n ? `${model}_${result && 'documentId' in result ? result.documentId : documentId}`\n : model,\n },\n ];\n },\n }),\n getManyDraftRelationCount: builder.query<\n CountManyEntriesDraftRelations.Response['data'],\n CountManyEntriesDraftRelations.Request['query'] & {\n model: string;\n }\n >({\n query: ({ model, ...params }) => ({\n url: `/content-manager/collection-types/${model}/actions/countManyEntriesDraftRelations`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (response: CountManyEntriesDraftRelations.Response) => response.data,\n }),\n /**\n * This endpoint will either create or update documents at the same time as publishing.\n */\n publishDocument: builder.mutation<\n Publish.Response,\n Pick<Publish.Params, 'model'> &\n Partial<Pick<Publish.Params, 'documentId'>> & {\n collectionType: string;\n data: Publish.Request['body'];\n params?: Publish.Request['query'];\n }\n >({\n query: ({ collectionType, model, documentId, params, data }) => ({\n url: documentId\n ? `/content-manager/${collectionType}/${model}/${documentId}/actions/publish`\n : `/content-manager/${collectionType}/${model}/actions/publish`,\n method: 'POST',\n data,\n config: {\n params,\n },\n }),\n invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {\n return [\n {\n type: 'Document',\n id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model,\n },\n { type: 'Document', id: `${model}_LIST` },\n 'Relations',\n ];\n },\n }),\n publishManyDocuments: builder.mutation<\n BulkPublish.Response,\n BulkPublish.Params & BulkPublish.Request['body'] & { params?: BulkPublish.Request['query'] }\n >({\n query: ({ model, params, ...body }) => ({\n url: `/content-manager/collection-types/${model}/actions/bulkPublish`,\n method: 'POST',\n data: body,\n config: {\n params,\n },\n }),\n invalidatesTags: (_res, _error, { model, documentIds }) =>\n documentIds.map((id) => ({ type: 'Document', id: `${model}_${id}` })),\n }),\n updateDocument: builder.mutation<\n Update.Response,\n Pick<Update.Params, 'model'> &\n Partial<Pick<Update.Params, 'documentId'>> & {\n collectionType: string;\n data: Update.Request['body'];\n params?: Update.Request['query'];\n }\n >({\n query: ({ collectionType, model, documentId, data, params }) => ({\n url: `/content-manager/${collectionType}/${model}${documentId ? `/${documentId}` : ''}`,\n method: 'PUT',\n data,\n config: {\n params,\n },\n }),\n invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {\n return [\n {\n type: 'Document',\n id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model,\n },\n 'Relations',\n ];\n },\n async onQueryStarted({ data, ...patch }, { dispatch, queryFulfilled }) {\n // Optimistically update the cache with the new data\n const patchResult = dispatch(\n documentApi.util.updateQueryData('getDocument', patch, (draft) => {\n Object.assign(draft.data, data);\n })\n );\n try {\n await queryFulfilled;\n } catch {\n // Rollback the optimistic update if there's an error\n patchResult.undo();\n }\n },\n }),\n unpublishDocument: builder.mutation<\n Unpublish.Response,\n Pick<Unpublish.Params, 'model'> &\n Partial<Pick<Unpublish.Params, 'documentId'>> & {\n collectionType: string;\n params?: Unpublish.Request['query'];\n data: Unpublish.Request['body'];\n }\n >({\n query: ({ collectionType, model, documentId, params, data }) => ({\n url: documentId\n ? `/content-manager/${collectionType}/${model}/${documentId}/actions/unpublish`\n : `/content-manager/${collectionType}/${model}/actions/unpublish`,\n method: 'POST',\n data,\n config: {\n params,\n },\n }),\n invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {\n return [\n {\n type: 'Document',\n id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model,\n },\n ];\n },\n }),\n unpublishManyDocuments: builder.mutation<\n BulkUnpublish.Response,\n Pick<BulkUnpublish.Params, 'model'> &\n BulkUnpublish.Request['body'] & {\n params?: BulkUnpublish.Request['query'];\n }\n >({\n query: ({ model, params, ...body }) => ({\n url: `/content-manager/collection-types/${model}/actions/bulkUnpublish`,\n method: 'POST',\n data: body,\n config: {\n params,\n },\n }),\n invalidatesTags: (_res, _error, { model, documentIds }) =>\n documentIds.map((id) => ({ type: 'Document', id: `${model}_${id}` })),\n }),\n }),\n});\n\nconst {\n useAutoCloneDocumentMutation,\n useCloneDocumentMutation,\n useCreateDocumentMutation,\n useDeleteDocumentMutation,\n useDeleteManyDocumentsMutation,\n useDiscardDocumentMutation,\n useGetAllDocumentsQuery,\n useLazyGetDocumentQuery,\n useGetDocumentQuery,\n useLazyGetDraftRelationCountQuery,\n useGetManyDraftRelationCountQuery,\n usePublishDocumentMutation,\n usePublishManyDocumentsMutation,\n useUpdateDocumentMutation,\n useUnpublishDocumentMutation,\n useUnpublishManyDocumentsMutation,\n} = documentApi;\n\nexport {\n useAutoCloneDocumentMutation,\n useCloneDocumentMutation,\n useCreateDocumentMutation,\n useDeleteDocumentMutation,\n useDeleteManyDocumentsMutation,\n useDiscardDocumentMutation,\n useGetAllDocumentsQuery,\n useLazyGetDocumentQuery,\n useGetDocumentQuery,\n useLazyGetDraftRelationCountQuery as useGetDraftRelationCountQuery,\n useGetManyDraftRelationCountQuery,\n usePublishDocumentMutation,\n usePublishManyDocumentsMutation,\n useUpdateDocumentMutation,\n useUnpublishDocumentMutation,\n useUnpublishManyDocumentsMutation,\n};\n","import { SerializedError } from '@reduxjs/toolkit';\nimport { ApiError, type UnknownApiError } from '@strapi/admin/strapi-admin';\n\ninterface Query {\n plugins?: Record<string, unknown>;\n _q?: string;\n [key: string]: any;\n}\n\n/**\n * This type extracts the plugin options from the query\n * and appends them to the root of the query\n */\ntype TransformedQuery<TQuery extends Query> = Omit<TQuery, 'plugins'> & {\n [key: string]: string;\n};\n\n/**\n * @description\n * Creates a valid query params object for get requests\n * ie. plugins[18n][locale]=en becomes locale=en\n */\nconst buildValidParams = <TQuery extends Query>(query: TQuery): TransformedQuery<TQuery> => {\n if (!query) return query;\n\n // Extract pluginOptions from the query, they shouldn't be part of the URL\n const { plugins: _, ...validQueryParams } = {\n ...query,\n ...Object.values(query?.plugins ?? {}).reduce<Record<string, string>>(\n (acc, current) => Object.assign(acc, current),\n {}\n ),\n };\n\n if ('_q' in validQueryParams) {\n // Encode the search query here since the paramsSerializer will not\n // @ts-expect-error – TODO: fix this type error\n validQueryParams._q = encodeURIComponent(validQueryParams._q);\n }\n\n return validQueryParams;\n};\n\ntype BaseQueryError = ApiError | UnknownApiError;\n\nconst isBaseQueryError = (error: BaseQueryError | SerializedError): error is BaseQueryError => {\n return error.name !== undefined;\n};\n\nexport { isBaseQueryError, buildValidParams };\nexport type { BaseQueryError, UnknownApiError };\n","import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport pipe from 'lodash/fp/pipe';\nimport * as yup from 'yup';\n\nimport { DOCUMENT_META_FIELDS } from '../constants/attributes';\n\nimport type { ComponentsDictionary, Schema } from '../hooks/useDocument';\nimport type { Schema as SchemaUtils } from '@strapi/types';\nimport type { ObjectShape } from 'yup/lib/object';\n\ntype AnySchema =\n | yup.StringSchema\n | yup.NumberSchema\n | yup.BooleanSchema\n | yup.DateSchema\n | yup.ArraySchema<any>\n | yup.ObjectSchema<any>;\n\n/* -------------------------------------------------------------------------------------------------\n * createYupSchema\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * TODO: should we create a Map to store these based on the hash of the schema?\n */\nconst createYupSchema = (\n attributes: Schema['attributes'] = {},\n components: ComponentsDictionary = {}\n): yup.ObjectSchema<any> => {\n const createModelSchema = (attributes: Schema['attributes']): yup.ObjectSchema<any> =>\n yup\n .object()\n .shape(\n Object.entries(attributes).reduce<ObjectShape>((acc, [name, attribute]) => {\n if (DOCUMENT_META_FIELDS.includes(name)) {\n return acc;\n }\n\n /**\n * These validations won't apply to every attribute\n * and that's okay, in that case we just return the\n * schema as it was passed.\n */\n const validations = [\n addRequiredValidation,\n addMinLengthValidation,\n addMaxLengthValidation,\n addMinValidation,\n addMaxValidation,\n addRegexValidation,\n ].map((fn) => fn(attribute));\n\n const transformSchema = pipe(...validations);\n\n switch (attribute.type) {\n case 'component': {\n const { attributes } = components[attribute.component];\n\n if (attribute.repeatable) {\n return {\n ...acc,\n [name]: transformSchema(\n yup.array().of(createModelSchema(attributes).nullable(false))\n ),\n };\n } else {\n return {\n ...acc,\n [name]: transformSchema(createModelSchema(attributes)),\n };\n }\n }\n case 'dynamiczone':\n return {\n ...acc,\n [name]: transformSchema(\n yup.array().of(\n yup.lazy(\n (\n data: SchemaUtils.Attribute.Value<SchemaUtils.Attribute.DynamicZone>[number]\n ) => {\n const attributes = components?.[data?.__component]?.attributes;\n\n const validation = yup\n .object()\n .shape({\n __component: yup.string().required().oneOf(Object.keys(components)),\n })\n .nullable(false);\n if (!attributes) {\n return validation;\n }\n\n return validation.concat(createModelSchema(attributes));\n }\n ) as unknown as yup.ObjectSchema<any>\n )\n ),\n };\n case 'relation':\n return {\n ...acc,\n [name]: transformSchema(\n yup.lazy((value) => {\n if (!value) {\n return yup.mixed().nullable(true);\n } else if (Array.isArray(value)) {\n // If a relation value is an array, we expect\n // an array of objects with {id} properties, representing the related entities.\n return yup.array().of(\n yup.object().shape({\n id: yup.string().required(),\n })\n );\n } else if (typeof value === 'object') {\n // A realtion value can also be an object. Some API\n // repsonses return the number of entities in the relation\n // as { count: x }\n return yup.object();\n } else {\n return yup\n .mixed()\n .test(\n 'type-error',\n 'Relation values must be either null, an array of objects with {id} or an object.',\n () => false\n );\n }\n })\n ),\n };\n default:\n return {\n ...acc,\n [name]: transformSchema(createAttributeSchema(attribute)),\n };\n }\n }, {})\n )\n /**\n * TODO: investigate why an undefined object fails a check of `nullable`.\n */\n .default(null);\n\n return createModelSchema(attributes);\n};\n\nconst createAttributeSchema = (\n attribute: Exclude<\n SchemaUtils.Attribute.AnyAttribute,\n { type: 'dynamiczone' } | { type: 'component' } | { type: 'relation' }\n >\n) => {\n switch (attribute.type) {\n case 'biginteger':\n return yup.string().matches(/^-?\\d*$/);\n case 'boolean':\n return yup.boolean();\n case 'blocks':\n return yup.mixed().test('isBlocks', translatedErrors.json, (value) => {\n if (!value || Array.isArray(value)) {\n return true;\n } else {\n return false;\n }\n });\n case 'decimal':\n case 'float':\n case 'integer':\n return yup.number();\n case 'email':\n return yup.string().email(translatedErrors.email);\n case 'enumeration':\n return yup.string().oneOf([...attribute.enum, null]);\n case 'json':\n return yup.mixed().test('isJSON', translatedErrors.json, (value) => {\n /**\n * We don't want to validate the JSON field if it's empty.\n */\n if (!value || (typeof value === 'string' && value.length === 0)) {\n return true;\n }\n\n try {\n JSON.parse(value);\n\n return true;\n } catch (err) {\n return false;\n }\n });\n case 'password':\n case 'richtext':\n case 'string':\n case 'text':\n return yup.string();\n case 'uid':\n return yup.string().matches(/^[A-Za-z0-9-_.~]*$/);\n default:\n /**\n * This allows any value.\n */\n return yup.mixed();\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Validators\n * -----------------------------------------------------------------------------------------------*/\n/**\n * Our validator functions can be preped with the\n * attribute and then have the schema piped through them.\n */\ntype ValidationFn = (\n attribute: Schema['attributes'][string]\n) => <TSchema extends AnySchema>(schema: TSchema) => TSchema;\n\nconst addRequiredValidation: ValidationFn = (attribute) => (schema) => {\n if (\n ((attribute.type === 'component' && attribute.repeatable) ||\n attribute.type === 'dynamiczone') &&\n attribute.required &&\n 'min' in schema\n ) {\n return schema.min(1, translatedErrors.required);\n }\n\n if (attribute.required && attribute.type !== 'relation') {\n return schema.required(translatedErrors.required);\n }\n\n return schema?.nullable\n ? schema.nullable()\n : // In some cases '.nullable' will not be available on the schema.\n // e.g. when the schema has been built using yup.lazy (e.g. for relations).\n // In these cases we should just return the schema as it is.\n schema;\n};\n\nconst addMinLengthValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if (\n 'minLength' in attribute &&\n attribute.minLength &&\n Number.isInteger(attribute.minLength) &&\n 'min' in schema\n ) {\n return schema.min(attribute.minLength, {\n ...translatedErrors.minLength,\n values: {\n min: attribute.minLength,\n },\n }) as TSchema;\n }\n\n return schema;\n };\n\nconst addMaxLengthValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if (\n 'maxLength' in attribute &&\n attribute.maxLength &&\n Number.isInteger(attribute.maxLength) &&\n 'max' in schema\n ) {\n return schema.max(attribute.maxLength, {\n ...translatedErrors.maxLength,\n values: {\n max: attribute.maxLength,\n },\n }) as TSchema;\n }\n\n return schema;\n };\n\nconst addMinValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('min' in attribute) {\n const min = toInteger(attribute.min);\n\n if (\n (attribute.type === 'component' && attribute.repeatable) ||\n attribute.type === 'dynamiczone'\n ) {\n if (!attribute.required && 'test' in schema && min) {\n // @ts-expect-error - We know the schema is an array here but ts doesn't know.\n return schema.test(\n 'custom-min',\n {\n ...translatedErrors.min,\n values: {\n min: attribute.min,\n },\n },\n (value: Array<unknown>) => {\n if (!value) {\n return true;\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n return value.length >= min;\n }\n );\n }\n }\n\n if ('min' in schema && min) {\n return schema.min(min, {\n ...translatedErrors.min,\n values: {\n min,\n },\n }) as TSchema;\n }\n }\n\n return schema;\n };\n\nconst addMaxValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('max' in attribute) {\n const max = toInteger(attribute.max);\n\n if ('max' in schema && max) {\n return schema.max(max, {\n ...translatedErrors.max,\n values: {\n max,\n },\n }) as TSchema;\n }\n }\n\n return schema;\n };\n\nconst toInteger = (val?: string | number): number | undefined => {\n if (typeof val === 'number' || val === undefined) {\n return val;\n } else {\n const num = Number(val);\n return isNaN(num) ? undefined : num;\n }\n};\n\nconst addRegexValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('regex' in attribute && attribute.regex && 'matches' in schema) {\n return schema.matches(new RegExp(attribute.regex), {\n message: {\n id: translatedErrors.regex.id,\n defaultMessage: 'The value does not match the defined pattern.',\n },\n\n excludeEmptyString: !attribute.required,\n }) as TSchema;\n }\n\n return schema;\n };\n\nexport { createYupSchema };\n","import { contentManagerApi } from './api';\n\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst initApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getInitialData: builder.query<GetInitData.Response['data'], void>({\n query: () => '/content-manager/init',\n transformResponse: (response: GetInitData.Response) => response.data,\n providesTags: ['InitialData'],\n }),\n }),\n});\n\nconst { useGetInitialDataQuery } = initApi;\n\nexport { useGetInitialDataQuery };\n","import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\n\nimport { useGetInitialDataQuery } from '../services/init';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * useContentTypeSchema\n * -----------------------------------------------------------------------------------------------*/\ntype ComponentsDictionary = Record<string, Component>;\n\n/**\n * @internal\n * @description Given a model UID, return the schema and the schemas\n * of the associated components within said model's schema. A wrapper\n * implementation around the `useGetInitialDataQuery` with a unique\n * `selectFromResult` function to memoize the calculation.\n *\n * If no model is provided, the hook will return all the schemas.\n */\nconst useContentTypeSchema = (model?: string) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { data, error, isLoading, isFetching } = useGetInitialDataQuery(undefined);\n\n const { components, contentType, contentTypes } = React.useMemo(() => {\n const contentType = data?.contentTypes.find((ct) => ct.uid === model);\n\n const componentsByKey = data?.components.reduce<ComponentsDictionary>((acc, component) => {\n acc[component.uid] = component;\n\n return acc;\n }, {});\n\n const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);\n\n return {\n components: Object.keys(components).length === 0 ? undefined : components,\n contentType,\n contentTypes: data?.contentTypes ?? [],\n };\n }, [model, data]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError]);\n\n return {\n // This must be memoized to avoid inifiinite re-renders where the empty object is different everytime.\n components: React.useMemo(() => components ?? {}, [components]),\n schema: contentType,\n schemas: contentTypes,\n isLoading: isLoading || isFetching,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * extractContentTypeComponents\n * -----------------------------------------------------------------------------------------------*/\n/**\n * @internal\n * @description Extracts the components used in a content type's attributes recursively.\n */\nconst extractContentTypeComponents = (\n attributes: ContentType['attributes'] = {},\n allComponents: ComponentsDictionary = {}\n): ComponentsDictionary => {\n const getComponents = (attributes: Schema.Attribute.AnyAttribute[]) => {\n return attributes.reduce<string[]>((acc, attribute) => {\n /**\n * If the attribute is a component or dynamiczone, we need to recursively\n * extract the component UIDs from its attributes.\n */\n if (attribute.type === 'component') {\n const componentAttributes = Object.values(\n allComponents[attribute.component]?.attributes ?? {}\n );\n\n acc.push(attribute.component, ...getComponents(componentAttributes));\n } else if (attribute.type === 'dynamiczone') {\n acc.push(\n ...attribute.components,\n /**\n * Dynamic zones have an array of components, so we flatMap over them\n * performing the same search as above.\n */\n ...attribute.components.flatMap((componentUid) => {\n const componentAttributes = Object.values(\n allComponents[componentUid]?.attributes ?? {}\n );\n\n return getComponents(componentAttributes);\n })\n );\n }\n\n return acc;\n }, []);\n };\n\n const componentUids = getComponents(Object.values(attributes));\n\n const uniqueComponentUids = [...new Set(componentUids)];\n\n const componentsByKey = uniqueComponentUids.reduce<ComponentsDictionary>((acc, uid) => {\n acc[uid] = allComponents[uid];\n\n return acc;\n }, {});\n\n return componentsByKey;\n};\n\nexport { useContentTypeSchema, extractContentTypeComponents };\nexport type { ComponentsDictionary };\n","/**\n * This hook doesn't use a context provider because we fetch directly from the server,\n * this sounds expensive but actually, it's really not. Because we have redux-toolkit-query\n * being a cache layer so if nothing invalidates the cache, we don't fetch again.\n */\n\nimport * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n FormErrors,\n getYupValidationErrors,\n} from '@strapi/admin/strapi-admin';\nimport { Modules } from '@strapi/types';\nimport { useParams } from 'react-router-dom';\nimport { ValidationError } from 'yup';\n\nimport { SINGLE_TYPES } from '../constants/collections';\nimport { useGetDocumentQuery } from '../services/documents';\nimport { buildValidParams } from '../utils/api';\nimport { createYupSchema } from '../utils/validation';\n\nimport { useContentTypeSchema, ComponentsDictionary } from './useContentTypeSchema';\n\nimport type { FindOne } from '../../../shared/contracts/collection-types';\nimport type { ContentType } from '../../../shared/contracts/content-types';\n\ninterface UseDocumentArgs {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n}\n\ntype UseDocumentOpts = Parameters<typeof useGetDocumentQuery>[1];\n\ntype Document = FindOne.Response['data'];\n\ntype Schema = ContentType;\n\ntype UseDocument = (\n args: UseDocumentArgs,\n opts?: UseDocumentOpts\n) => {\n /**\n * These are the schemas of the components used in the content type, organised\n * by their uid.\n */\n components: ComponentsDictionary;\n document?: Document;\n meta?: FindOne.Response['meta'];\n isLoading: boolean;\n /**\n * This is the schema of the content type, it is not the same as the layout.\n */\n schema?: Schema;\n validate: (document: Document) => null | FormErrors;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocument\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha\n * @public\n * @description Returns a document based on the model, collection type & id passed as arguments.\n * Also extracts its schema from the redux cache to be used for creating a validation schema.\n * @example\n * ```tsx\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n *\n * if(!model || !collectionType) return null;\n *\n * const { document, isLoading, validate } = useDocument({ documentId: id, model, collectionType, params: { locale: 'en-GB' } })\n * const { update } = useDocumentActions()\n *\n * const onSubmit = async (document: Document) => {\n * const errors = validate(document);\n *\n * if(errors) {\n * // handle errors\n * }\n *\n * await update({ collectionType, model, id }, document)\n * }\n * ```\n *\n * @see {@link https://contributor.strapi.io/docs/core/content-manager/hooks/use-document} for more information\n */\nconst useDocument: UseDocument = (args, opts) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const {\n currentData: data,\n isLoading: isLoadingDocument,\n isFetching: isFetchingDocument,\n error,\n } = useGetDocumentQuery(args, {\n ...opts,\n skip: (!args.documentId && args.collectionType !== SINGLE_TYPES) || opts?.skip,\n });\n\n const { components, schema, isLoading: isLoadingSchema } = useContentTypeSchema(args.model);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError, args.collectionType]);\n\n const validationSchema = React.useMemo(() => {\n if (!schema) {\n return null;\n }\n\n return createYupSchema(schema.attributes, components);\n }, [schema, components]);\n\n const validate = React.useCallback(\n (document: Modules.Documents.AnyDocument): FormErrors | null => {\n if (!validationSchema) {\n throw new Error(\n 'There is no validation schema generated, this is likely due to the schema not being loaded yet.'\n );\n }\n\n try {\n validationSchema.validateSync(document, { abortEarly: false, strict: true });\n return null;\n } catch (error) {\n if (error instanceof ValidationError) {\n return getYupValidationErrors(error);\n }\n\n throw error;\n }\n },\n [validationSchema]\n );\n\n const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;\n\n return {\n components,\n document: data?.data,\n meta: data?.meta,\n isLoading,\n schema,\n validate,\n } satisfies ReturnType<UseDocument>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDoc\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the router to extract the model, collection type & id from the url.\n * therefore, it shouldn't be used outside of the content-manager because it won't work as intended.\n */\nconst useDoc = () => {\n const { id, slug, collectionType, origin } = useParams<{\n id: string;\n origin: string;\n slug: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!slug) {\n throw new Error('Could not find model in url params');\n }\n\n return {\n collectionType,\n model: slug,\n id: origin || id === 'create' ? undefined : id,\n ...useDocument(\n { documentId: origin || id, model: slug, collectionType, params },\n {\n skip: id === 'create' || (!origin && !id && collectionType !== SINGLE_TYPES),\n }\n ),\n };\n};\n\nexport { useDocument, useDoc };\nexport type { UseDocument, UseDocumentArgs, Document, Schema, ComponentsDictionary };\n","type TradOptions = Record<string, string>;\n\nconst prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\n if (!pluginId) {\n throw new TypeError(\"pluginId can't be empty\");\n }\n return Object.keys(trad).reduce((acc, current) => {\n acc[`${pluginId}.${current}`] = trad[current];\n return acc;\n }, {} as TradOptions);\n};\n\nconst getTranslation = (id: string) => `content-manager.${id}`;\n\nexport { getTranslation, prefixPluginTranslations };\n","import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n useNotification,\n useTracking,\n type TrackingEvent,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\n\nimport {\n useAutoCloneDocumentMutation,\n useCloneDocumentMutation,\n useCreateDocumentMutation,\n useDeleteDocumentMutation,\n useDeleteManyDocumentsMutation,\n useDiscardDocumentMutation,\n useLazyGetDocumentQuery,\n usePublishDocumentMutation,\n usePublishManyDocumentsMutation,\n useUnpublishDocumentMutation,\n useUnpublishManyDocumentsMutation,\n useUpdateDocumentMutation,\n} from '../services/documents';\nimport { BaseQueryError } from '../utils/api';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Document } from './useDocument';\nimport type {\n AutoClone,\n Clone,\n Create,\n Delete,\n BulkDelete,\n Discard,\n FindOne,\n Publish,\n BulkPublish,\n Update,\n Unpublish,\n BulkUnpublish,\n} from '../../../shared/contracts/collection-types';\n\nconst DEFAULT_UNEXPECTED_ERROR_MSG = {\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again',\n} satisfies MessageDescriptor;\n\ntype OperationResponse<TResponse extends { data: any; meta?: any; error?: any }> =\n | Pick<TResponse, 'data'>\n | Pick<TResponse, 'data' | 'meta'>\n | { error: BaseQueryError | SerializedError };\n\ntype BulkOperationResponse<TResponse extends { data: any; error?: any }> =\n | Pick<TResponse, 'data'>\n | { error: BaseQueryError | SerializedError };\n\ntype UseDocumentActions = () => {\n /**\n * @description Attempts to clone a document based on the provided sourceId.\n * This will return a list of the fields as an error if it's unable to clone.\n * You most likely want to use the `clone` action instead.\n */\n autoClone: (args: {\n model: string;\n sourceId: string;\n }) => Promise<OperationResponse<AutoClone.Response>>;\n clone: (\n args: {\n model: string;\n documentId: string;\n params?: object;\n },\n document: Omit<Document, 'id'>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<OperationResponse<Clone.Response>>;\n create: (\n args: {\n model: string;\n params?: object;\n },\n document: Omit<Document, 'id'>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<OperationResponse<Create.Response>>;\n delete: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n },\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willDeleteEntry' | 'didDeleteEntry' | 'didNotDeleteEntry' }\n >['properties']\n ) => Promise<OperationResponse<Delete.Response>>;\n deleteMany: (args: {\n model: string;\n documentIds: string[];\n params?: object;\n }) => Promise<BulkOperationResponse<BulkDelete.Response>>;\n discard: (args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n }) => Promise<OperationResponse<Discard.Response>>;\n getDocument: (args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n }) => Promise<FindOne.Response | undefined>;\n publish: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n },\n document: Partial<Document>\n ) => Promise<OperationResponse<Publish.Response>>;\n publishMany: (args: {\n model: string;\n documentIds: string[];\n params?: object;\n }) => Promise<BulkOperationResponse<BulkPublish.Response>>;\n update: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n },\n document: Partial<Document>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willEditEntry' | 'didEditEntry' | 'didNotEditEntry' }\n >['properties']\n ) => Promise<OperationResponse<Update.Response>>;\n unpublish: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n },\n discardDraft?: boolean\n ) => Promise<OperationResponse<Unpublish.Response>>;\n unpublishMany: (args: {\n model: string;\n documentIds: string[];\n params?: object;\n }) => Promise<BulkOperationResponse<BulkUnpublish.Response>>;\n};\n\ntype IUseDocumentActs = ReturnType<UseDocumentActions>;\n\n/**\n * @alpha\n * @public\n * @description Contains all the operations that can be performed on a single document.\n * Designed to be able to be used anywhere within a Strapi app. The hooks will handle\n * notifications should the operation fail, however the response is always returned incase\n * the user needs to handle side-effects.\n * @example\n * ```tsx\n * import { Form } from '@strapi/admin/admin';\n *\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n * const { update } = useDocumentActions();\n *\n * const handleSubmit = async (data) => {\n * await update({ collectionType, model, documentId: id }, data);\n * }\n *\n * return <Form method=\"PUT\" onSubmit={handleSubmit} />\n * ```\n *\n * @see {@link https://contributor.strapi.io/docs/core/content-manager/hooks/use-document-operations} for more information\n */\nconst useDocumentActions: UseDocumentActions = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [deleteDocument] = useDeleteDocumentMutation();\n const _delete: IUseDocumentActs['delete'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, trackerProperty) => {\n try {\n trackUsage('willDeleteEntry', trackerProperty);\n\n const res = await deleteDocument({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.delete'),\n defaultMessage: 'Deleted document',\n }),\n });\n\n trackUsage('didDeleteEntry', trackerProperty);\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotDeleteEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [trackUsage, deleteDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [deleteManyDocuments] = useDeleteManyDocumentsMutation();\n\n const deleteMany: IUseDocumentActs['deleteMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n trackUsage('willBulkDeleteEntries');\n\n const res = await deleteManyDocuments({\n model,\n documentIds,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: getTranslation('success.records.delete'),\n defaultMessage: 'Successfully deleted.',\n }),\n message: '',\n });\n\n trackUsage('didBulkDeleteEntries');\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotBulkDeleteEntries');\n\n throw err;\n }\n },\n [trackUsage, deleteManyDocuments, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [discardDocument] = useDiscardDocumentMutation();\n const discard: IUseDocumentActs['discard'] = React.useCallback(\n async ({ collectionType, model, documentId, params }) => {\n try {\n const res = await discardDocument({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.success.record.discard',\n defaultMessage: 'Changes discarded',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [discardDocument, formatAPIError, formatMessage, toggleNotification]\n );\n\n const [publishDocument] = usePublishDocumentMutation();\n const publish: IUseDocumentActs['publish'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, data) => {\n try {\n trackUsage('willPublishEntry');\n\n const res = await publishDocument({\n collectionType,\n model,\n documentId,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n return { error: res.error };\n }\n\n trackUsage('didPublishEntry');\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.publish'),\n defaultMessage: 'Published document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [trackUsage, publishDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [publishManyDocuments] = usePublishManyDocumentsMutation();\n const publishMany: IUseDocumentActs['publishMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n // TODO Confirm tracking events for bulk publish?\n\n const res = await publishManyDocuments({\n model,\n documentIds,\n params,\n });\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.publish'),\n defaultMessage: 'Published document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n throw err;\n }\n },\n [\n // trackUsage,\n publishManyDocuments,\n toggleNotification,\n formatMessage,\n formatAPIError,\n ]\n );\n\n const [updateDocument] = useUpdateDocumentMutation();\n const update: IUseDocumentActs['update'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, data, trackerProperty) => {\n try {\n trackUsage('willEditEntry', trackerProperty);\n\n const res = await updateDocument({\n collectionType,\n model,\n documentId,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotEditEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didEditEntry', trackerProperty);\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.save'),\n defaultMessage: 'Saved document',\n }),\n });\n\n return res.data;\n } catch (err) {\n trackUsage('didNotEditEntry', { error: err, ...trackerProperty });\n\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [trackUsage, updateDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [unpublishDocument] = useUnpublishDocumentMutation();\n const unpublish: IUseDocumentActs['unpublish'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, discardDraft = false) => {\n try {\n trackUsage('willUnpublishEntry');\n\n const res = await unpublishDocument({\n collectionType,\n model,\n documentId,\n params,\n data: {\n discardDraft,\n },\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n return { error: res.error };\n }\n\n trackUsage('didUnpublishEntry');\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.unpublish'),\n defaultMessage: 'Unpublished document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [trackUsage, unpublishDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [unpublishManyDocuments] = useUnpublishManyDocumentsMutation();\n const unpublishMany: IUseDocumentActs['unpublishMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n trackUsage('willBulkUnpublishEntries');\n\n const res = await unpublishManyDocuments({\n model,\n documentIds,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n return { error: res.error };\n }\n\n trackUsage('didBulkUnpublishEntries');\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: getTranslation('success.records.unpublish'),\n defaultMessage: 'Successfully unpublished.',\n }),\n message: '',\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotBulkUnpublishEntries');\n\n throw err;\n }\n },\n [trackUsage, unpublishManyDocuments, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [createDocument] = useCreateDocumentMutation();\n const create: IUseDocumentActs['create'] = React.useCallback(\n async ({ model, params }, data, trackerProperty) => {\n try {\n const res = await createDocument({\n model,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotCreateEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didCreateEntry', trackerProperty);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.save'),\n defaultMessage: 'Saved document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [createDocument, formatAPIError, formatMessage, toggleNotification, trackUsage]\n );\n\n const [autoCloneDocument] = useAutoCloneDocumentMutation();\n const autoClone: IUseDocumentActs['autoClone'] = React.useCallback(\n async ({ model, sourceId }) => {\n try {\n const res = await autoCloneDocument({\n model,\n sourceId,\n });\n\n if ('error' in res) {\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.clone'),\n defaultMessage: 'Cloned document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [autoCloneDocument, formatAPIError, formatMessage, toggleNotification]\n );\n\n const [cloneDocument] = useCloneDocumentMutation();\n const clone: IUseDocumentActs['clone'] = React.useCallback(\n async ({ model, documentId, params }, body, trackerProperty) => {\n try {\n const { id: _id, ...restBody } = body;\n\n /**\n * If we're cloning we want to post directly to this endpoint\n * so that the relations even if they're not listed in the EditView\n * are correctly attached to the entry.\n */\n const res = await cloneDocument({\n model,\n sourceId: documentId,\n data: restBody,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotCreateEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didCreateEntry', trackerProperty);\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.clone'),\n defaultMessage: 'Cloned document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [cloneDocument, trackUsage, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [getDoc] = useLazyGetDocumentQuery();\n const getDocument: IUseDocumentActs['getDocument'] = React.useCallback(\n async (args) => {\n const { data } = await getDoc(args);\n\n return data;\n },\n [getDoc]\n );\n\n return {\n autoClone,\n clone,\n create,\n delete: _delete,\n deleteMany,\n discard,\n getDocument,\n publish,\n publishMany,\n unpublish,\n unpublishMany,\n update,\n } satisfies IUseDocumentActs;\n};\n\nexport { useDocumentActions };\nexport type { UseDocumentActions, OperationResponse };\n","/* eslint-disable check-file/filename-naming-convention */\nimport { lazy } from 'react';\n\nimport { type PathRouteProps } from 'react-router-dom';\n\nconst ProtectedHistoryPage = lazy(() =>\n import('./pages/History').then((mod) => ({ default: mod.ProtectedHistoryPage }))\n);\n\n/**\n * These routes will be merged with the rest of the Content Manager routes\n */\nconst routes: PathRouteProps[] = [\n {\n path: ':collectionType/:slug/:id/history',\n Component: ProtectedHistoryPage,\n },\n {\n path: ':collectionType/:slug/history',\n Component: ProtectedHistoryPage,\n },\n];\n\nexport { routes };\n","/* eslint-disable check-file/filename-naming-convention */\nimport { lazy } from 'react';\n\nimport { Navigate, PathRouteProps, useParams } from 'react-router-dom';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from './constants/collections';\nimport { routes as historyRoutes } from './history/routes';\n\nconst ProtectedEditViewPage = lazy(() =>\n import('./pages/EditView/EditViewPage').then((mod) => ({ default: mod.ProtectedEditViewPage }))\n);\nconst ProtectedListViewPage = lazy(() =>\n import('./pages/ListView/ListViewPage').then((mod) => ({ default: mod.ProtectedListViewPage }))\n);\nconst ProtectedListConfiguration = lazy(() =>\n import('./pages/ListConfiguration/ListConfigurationPage').then((mod) => ({\n default: mod.ProtectedListConfiguration,\n }))\n);\nconst ProtectedEditConfigurationPage = lazy(() =>\n import('./pages/EditConfigurationPage').then((mod) => ({\n default: mod.ProtectedEditConfigurationPage,\n }))\n);\nconst ProtectedComponentConfigurationPage = lazy(() =>\n import('./pages/ComponentConfigurationPage').then((mod) => ({\n default: mod.ProtectedComponentConfigurationPage,\n }))\n);\nconst NoPermissions = lazy(() =>\n import('./pages/NoPermissionsPage').then((mod) => ({ default: mod.NoPermissions }))\n);\nconst NoContentType = lazy(() =>\n import('./pages/NoContentTypePage').then((mod) => ({ default: mod.NoContentType }))\n);\n\nconst CollectionTypePages = () => {\n const { collectionType } = useParams<{ collectionType: string }>();\n\n /**\n * We only support two types of collections.\n */\n if (collectionType !== COLLECTION_TYPES && collectionType !== SINGLE_TYPES) {\n return <Navigate to=\"/404\" />;\n }\n\n return collectionType === COLLECTION_TYPES ? (\n <ProtectedListViewPage />\n ) : (\n <ProtectedEditViewPage />\n );\n};\n\nconst CLONE_RELATIVE_PATH = ':collectionType/:slug/clone/:origin';\nconst CLONE_PATH = `/content-manager/${CLONE_RELATIVE_PATH}`;\nconst LIST_RELATIVE_PATH = ':collectionType/:slug';\nconst LIST_PATH = `/content-manager/${LIST_RELATIVE_PATH}`;\n\nconst routes: PathRouteProps[] = [\n {\n path: LIST_RELATIVE_PATH,\n element: <CollectionTypePages />,\n },\n {\n path: ':collectionType/:slug/:id',\n Component: ProtectedEditViewPage,\n },\n {\n path: CLONE_RELATIVE_PATH,\n Component: ProtectedEditViewPage,\n },\n {\n path: ':collectionType/:slug/configurations/list',\n Component: ProtectedListConfiguration,\n },\n {\n path: 'components/:slug/configurations/edit',\n Component: ProtectedComponentConfigurationPage,\n },\n {\n path: ':collectionType/:slug/configurations/edit',\n Component: ProtectedEditConfigurationPage,\n },\n {\n path: '403',\n Component: NoPermissions,\n },\n {\n path: 'no-content-types',\n Component: NoContentType,\n },\n ...historyRoutes,\n];\n\nexport { routes, CLONE_PATH, LIST_PATH };\n","import * as React from 'react';\n\nimport {\n useForm,\n useNotification,\n NotificationConfig,\n useAPIErrorHandler,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Dialog,\n Flex,\n Modal,\n Radio,\n Typography,\n VisuallyHidden,\n Menu,\n ButtonProps,\n} from '@strapi/design-system';\nimport { CrossCircle, More, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate } from 'react-router-dom';\nimport { styled, DefaultTheme } from 'styled-components';\n\nimport { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes';\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { CLONE_PATH } from '../../../router';\nimport { useGetDraftRelationCountQuery } from '../../../services/documents';\nimport { isBaseQueryError, buildValidParams } from '../../../utils/api';\nimport { getTranslation } from '../../../utils/translations';\n\nimport type { RelationsFormValue } from './FormInputs/Relations';\nimport type { DocumentActionComponent } from '../../../content-manager';\n/* -------------------------------------------------------------------------------------------------\n * Types\n * -----------------------------------------------------------------------------------------------*/\ntype DocumentActionPosition = 'panel' | 'header' | 'table-row';\n\ninterface DocumentActionDescription {\n label: string;\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n icon?: React.ReactNode;\n /**\n * @default false\n */\n disabled?: boolean;\n /**\n * @default 'panel'\n * @description Where the action should be rendered.\n */\n position?: DocumentActionPosition | DocumentActionPosition[];\n dialog?: DialogOptions | NotificationOptions | ModalOptions;\n /**\n * @default 'secondary'\n */\n variant?: ButtonProps['variant'];\n}\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n variant?: ButtonProps['variant'];\n onConfirm?: () => void | Promise<void>;\n onCancel?: () => void | Promise<void>;\n}\n\ninterface NotificationOptions {\n type: 'notification';\n title: string;\n link?: {\n label: string;\n url: string;\n target?: string;\n };\n content?: string;\n onClose?: () => void;\n status?: NotificationConfig['type'];\n timeout?: number;\n}\n\ninterface ModalOptions {\n type: 'modal';\n title: string;\n content: React.ComponentType<{ onClose: () => void }> | React.ReactNode;\n footer?: React.ComponentType<{ onClose: () => void }> | React.ReactNode;\n onClose?: () => void;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface Action extends DocumentActionDescription {\n id: string;\n}\n\ninterface DocumentActionsProps {\n actions: Action[];\n}\n\nconst DocumentActions = ({ actions }: DocumentActionsProps) => {\n const { formatMessage } = useIntl();\n const [primaryAction, secondaryAction, ...restActions] = actions.filter((action) => {\n if (action.position === undefined) {\n return true;\n }\n\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('panel');\n });\n\n if (!primaryAction) {\n return null;\n }\n\n return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\" width=\"100%\">\n <Flex gap={2}>\n <DocumentActionButton {...primaryAction} variant={primaryAction.variant || 'default'} />\n {restActions.length > 0 ? (\n <DocumentActionsMenu\n actions={restActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.panels.default.more-actions',\n defaultMessage: 'More document actions',\n })}\n />\n ) : null}\n </Flex>\n {secondaryAction ? (\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionButtonProps extends Action {}\n\nconst DocumentActionButton = (action: DocumentActionButtonProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n const { toggleNotification } = useNotification();\n\n const handleClick = (action: Action) => async (e: React.MouseEvent) => {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n switch (dialog.type) {\n case 'notification':\n toggleNotification({\n title: dialog.title,\n message: dialog.content,\n type: dialog.status,\n timeout: dialog.timeout,\n onClose: dialog.onClose,\n });\n break;\n case 'dialog':\n case 'modal':\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <>\n <Button\n flex=\"auto\"\n startIcon={action.icon}\n disabled={action.disabled}\n onClick={handleClick(action)}\n justifyContent=\"center\"\n variant={action.variant || 'default'}\n >\n {action.label}\n </Button>\n {action.dialog?.type === 'dialog' ? (\n <DocumentActionConfirmDialog\n {...action.dialog}\n variant={action.dialog?.variant ?? action.variant}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n {action.dialog?.type === 'modal' ? (\n <DocumentActionModal\n {...action.dialog}\n onModalClose={handleClose}\n isOpen={dialogId === action.id}\n />\n ) : null}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionMenu\n * -----------------------------------------------------------------------------------------------*/\ninterface DocumentActionsMenuProps {\n actions: Action[];\n children?: React.ReactNode;\n label?: string;\n variant?: 'ghost' | 'tertiary';\n}\n\nconst DocumentActionsMenu = ({\n actions,\n children,\n label,\n variant = 'tertiary',\n}: DocumentActionsMenuProps) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const isDisabled = actions.every((action) => action.disabled) || actions.length === 0;\n\n const handleClick = (action: Action) => async (e: React.SyntheticEvent) => {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n switch (dialog.type) {\n case 'notification':\n toggleNotification({\n title: dialog.title,\n message: dialog.content,\n type: dialog.status,\n timeout: dialog.timeout,\n onClose: dialog.onClose,\n });\n break;\n case 'dialog':\n case 'modal':\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n setIsOpen(false);\n };\n\n return (\n <Menu.Root open={isOpen} onOpenChange={setIsOpen}>\n <Menu.Trigger\n disabled={isDisabled}\n size=\"S\"\n endIcon={null}\n paddingTop=\"4px\"\n paddingLeft=\"7px\"\n paddingRight=\"7px\"\n variant={variant}\n >\n <More aria-hidden focusable={false} />\n <VisuallyHidden tag=\"span\">\n {label ||\n formatMessage({\n id: 'content-manager.containers.edit.panels.default.more-actions',\n defaultMessage: 'More document actions',\n })}\n </VisuallyHidden>\n </Menu.Trigger>\n <Menu.Content top=\"4px\" maxHeight={undefined} popoverPlacement=\"bottom-end\">\n {actions.map((action) => {\n return (\n <Menu.Item\n disabled={action.disabled}\n /* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */\n onSelect={handleClick(action)}\n display=\"block\"\n key={action.id}\n >\n <Flex justifyContent=\"space-between\" gap={4}>\n <Flex\n color={!action.disabled ? convertActionVariantToColor(action.variant) : 'inherit'}\n gap={2}\n tag=\"span\"\n >\n <span>{action.icon}</span>\n {action.label}\n </Flex>\n {/* TODO: remove this in 5.1 release */}\n {action.id.startsWith('HistoryAction') && (\n <Flex\n alignItems=\"center\"\n background=\"alternative100\"\n borderStyle=\"solid\"\n borderColor=\"alternative200\"\n borderWidth=\"1px\"\n height={5}\n paddingLeft={2}\n paddingRight={2}\n hasRadius\n color=\"alternative600\"\n >\n <Typography variant=\"sigma\" fontWeight=\"bold\" lineHeight={1}>\n {formatMessage({ id: 'global.new', defaultMessage: 'New' })}\n </Typography>\n </Flex>\n )}\n </Flex>\n </Menu.Item>\n );\n })}\n {children}\n </Menu.Content>\n {actions.map((action) => {\n return (\n <React.Fragment key={action.id}>\n {action.dialog?.type === 'dialog' ? (\n <DocumentActionConfirmDialog\n {...action.dialog}\n variant={action.variant}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n {action.dialog?.type === 'modal' ? (\n <DocumentActionModal\n {...action.dialog}\n onModalClose={handleClose}\n isOpen={dialogId === action.id}\n />\n ) : null}\n </React.Fragment>\n );\n })}\n </Menu.Root>\n );\n};\n\nconst convertActionVariantToColor = (\n variant: DocumentActionDescription['variant'] = 'secondary'\n): keyof DefaultTheme['colors'] | undefined => {\n switch (variant) {\n case 'danger':\n return 'danger600';\n case 'secondary':\n return undefined;\n case 'success':\n return 'success600';\n default:\n return 'primary600';\n }\n};\n\nconst convertActionVariantToIconColor = (\n variant: DocumentActionDescription['variant'] = 'secondary'\n): keyof DefaultTheme['colors'] | undefined => {\n switch (variant) {\n case 'danger':\n return 'danger600';\n case 'secondary':\n return 'neutral500';\n case 'success':\n return 'success600';\n default:\n return 'primary600';\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionConfirmDialog\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionConfirmDialogProps extends DialogOptions, Pick<Action, 'variant'> {\n onClose: () => void;\n isOpen: Dialog.Props['open'];\n}\n\nconst DocumentActionConfirmDialog = ({\n onClose,\n onCancel,\n onConfirm,\n title,\n content,\n isOpen,\n variant = 'secondary',\n}: DocumentActionConfirmDialogProps) => {\n const { formatMessage } = useIntl();\n\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n const handleConfirm = async () => {\n if (onConfirm) {\n await onConfirm();\n }\n\n onClose();\n };\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={handleClose}>\n <Dialog.Content>\n <Dialog.Header>{title}</Dialog.Header>\n <Dialog.Body>{content}</Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button onClick={handleConfirm} variant={variant}>\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionModalProps extends ModalOptions {\n onModalClose: () => void;\n isOpen?: boolean;\n}\n\nconst DocumentActionModal = ({\n isOpen,\n title,\n onClose,\n footer: Footer,\n content: Content,\n onModalClose,\n}: DocumentActionModalProps) => {\n const handleClose = () => {\n if (onClose) {\n onClose();\n }\n\n onModalClose();\n };\n\n return (\n <Modal.Root open={isOpen} onOpenChange={handleClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>{title}</Modal.Title>\n </Modal.Header>\n {typeof Content === 'function' ? (\n <Content onClose={handleClose} />\n ) : (\n <Modal.Body>{Content}</Modal.Body>\n )}\n {typeof Footer === 'function' ? <Footer onClose={handleClose} /> : Footer}\n </Modal.Content>\n </Modal.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst PublishAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n meta,\n document,\n}) => {\n const { schema } = useDoc();\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n const isCloning = useMatch(CLONE_PATH) !== null;\n const { formatMessage } = useIntl();\n const { canPublish, canCreate, canUpdate } = useDocumentRBAC(\n 'PublishAction',\n ({ canPublish, canCreate, canUpdate }) => ({ canPublish, canCreate, canUpdate })\n );\n const { publish } = useDocumentActions();\n const [\n countDraftRelations,\n { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations },\n ] = useGetDraftRelationCountQuery();\n const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React.useState(0);\n const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React.useState(0);\n\n const [{ query, rawQuery }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const modified = useForm('PublishAction', ({ modified }) => modified);\n const setSubmitting = useForm('PublishAction', ({ setSubmitting }) => setSubmitting);\n const isSubmitting = useForm('PublishAction', ({ isSubmitting }) => isSubmitting);\n const validate = useForm('PublishAction', (state) => state.validate);\n const setErrors = useForm('PublishAction', (state) => state.setErrors);\n const formValues = useForm('PublishAction', ({ values }) => values);\n\n React.useEffect(() => {\n if (isErrorDraftRelations) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('error.records.fetch-draft-relatons'),\n defaultMessage: 'An error occurred while fetching draft relations on this document.',\n }),\n });\n }\n }, [isErrorDraftRelations, toggleNotification, formatMessage]);\n\n React.useEffect(() => {\n const localDraftRelations = new Set();\n\n /**\n * Extracts draft relations from the provided data object.\n * It checks for a connect array of relations.\n * If a relation has a status of 'draft', its id is added to the localDraftRelations set.\n */\n const extractDraftRelations = (data: Omit<RelationsFormValue, 'disconnect'>) => {\n const relations = data.connect || [];\n relations.forEach((relation) => {\n if (relation.status === 'draft') {\n localDraftRelations.add(relation.id);\n }\n });\n };\n\n /**\n * Recursively traverses the provided data object to extract draft relations from arrays within 'connect' keys.\n * If the data is an object, it looks for 'connect' keys to pass their array values to extractDraftRelations.\n * It recursively calls itself for any non-null objects it contains.\n */\n const traverseAndExtract = (data: { [field: string]: any }) => {\n Object.entries(data).forEach(([key, value]) => {\n if (key === 'connect' && Array.isArray(value)) {\n extractDraftRelations({ connect: value });\n } else if (typeof value === 'object' && value !== null) {\n traverseAndExtract(value);\n }\n });\n };\n\n if (!documentId || modified) {\n traverseAndExtract(formValues);\n setLocalCountOfDraftRelations(localDraftRelations.size);\n }\n }, [documentId, modified, formValues, setLocalCountOfDraftRelations]);\n\n React.useEffect(() => {\n if (documentId) {\n const fetchDraftRelationsCount = async () => {\n const { data, error } = await countDraftRelations({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if (error) {\n throw error;\n }\n\n if (data) {\n setServerCountOfDraftRelations(data.data);\n }\n };\n\n fetchDraftRelationsCount();\n }\n }, [documentId, countDraftRelations, collectionType, model, params]);\n\n const isDocumentPublished =\n (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] ||\n meta?.availableStatus.some((doc) => doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) &&\n document?.status !== 'modified';\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n const performPublish = async () => {\n setSubmitting(true);\n\n try {\n const { errors } = await validate();\n\n if (errors) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.validation.error',\n defaultMessage:\n 'There are validation errors in your document. Please fix them before saving.',\n }),\n });\n\n return;\n }\n\n const res = await publish(\n {\n collectionType,\n model,\n documentId,\n params,\n },\n formValues\n );\n\n if ('data' in res && collectionType !== SINGLE_TYPES) {\n /**\n * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.\n */\n navigate({\n pathname: `../${collectionType}/${model}/${res.data.documentId}`,\n search: rawQuery,\n });\n } else if (\n 'error' in res &&\n isBaseQueryError(res.error) &&\n res.error.name === 'ValidationError'\n ) {\n setErrors(formatValidationErrors(res.error));\n }\n } finally {\n setSubmitting(false);\n }\n };\n\n const totalDraftRelations = localCountOfDraftRelations + serverCountOfDraftRelations;\n const hasDraftRelations = totalDraftRelations > 0;\n\n return {\n /**\n * Disabled when:\n * - currently if you're cloning a document we don't support publish & clone at the same time.\n * - the form is submitting\n * - the active tab is the published tab\n * - the document is already published & not modified\n * - the document is being created & not modified\n * - the user doesn't have the permission to publish\n */\n disabled:\n isCloning ||\n isSubmitting ||\n isLoadingDraftRelations ||\n activeTab === 'published' ||\n (!modified && isDocumentPublished) ||\n (!modified && !document?.documentId) ||\n !canPublish,\n label: formatMessage({\n id: 'app.utils.publish',\n defaultMessage: 'Publish',\n }),\n onClick: async () => {\n if (hasDraftRelations) {\n // In this case we need to show the user a confirmation dialog.\n // Return from the onClick and let the dialog handle the process.\n return;\n }\n\n await performPublish();\n },\n dialog: hasDraftRelations\n ? {\n type: 'dialog',\n variant: 'danger',\n footer: null,\n title: formatMessage({\n id: getTranslation(`popUpwarning.warning.bulk-has-draft-relations.title`),\n defaultMessage: 'Confirmation',\n }),\n content: formatMessage(\n {\n id: getTranslation(`popUpwarning.warning.bulk-has-draft-relations.message`),\n defaultMessage:\n 'This entry is related to {count, plural, one {# draft entry} other {# draft entries}}. Publishing it could leave broken links in your app.',\n },\n {\n count: totalDraftRelations,\n }\n ),\n onConfirm: async () => {\n await performPublish();\n },\n }\n : undefined,\n };\n};\n\nPublishAction.type = 'publish';\n\nconst UpdateAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n}) => {\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n const cloneMatch = useMatch(CLONE_PATH);\n const isCloning = cloneMatch !== null;\n const { formatMessage } = useIntl();\n const { canCreate, canUpdate } = useDocumentRBAC('UpdateAction', ({ canCreate, canUpdate }) => ({\n canCreate,\n canUpdate,\n }));\n const { create, update, clone } = useDocumentActions();\n const [{ query, rawQuery }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const isSubmitting = useForm('UpdateAction', ({ isSubmitting }) => isSubmitting);\n const modified = useForm('UpdateAction', ({ modified }) => modified);\n const setSubmitting = useForm('UpdateAction', ({ setSubmitting }) => setSubmitting);\n const document = useForm('UpdateAction', ({ values }) => values);\n const validate = useForm('UpdateAction', (state) => state.validate);\n const setErrors = useForm('UpdateAction', (state) => state.setErrors);\n const resetForm = useForm('PublishAction', ({ resetForm }) => resetForm);\n\n return {\n /**\n * Disabled when:\n * - the form is submitting\n * - the document is not modified & we're not cloning (you can save a clone entity straight away)\n * - the active tab is the published tab\n */\n disabled: isSubmitting || (!modified && !isCloning) || activeTab === 'published',\n label: formatMessage({\n id: 'content-manager.containers.Edit.save',\n defaultMessage: 'Save',\n }),\n onClick: async () => {\n setSubmitting(true);\n\n try {\n const { errors } = await validate();\n\n if (errors) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.validation.error',\n defaultMessage:\n 'There are validation errors in your document. Please fix them before saving.',\n }),\n });\n\n return;\n }\n\n if (isCloning) {\n const res = await clone(\n {\n model,\n documentId: cloneMatch.params.origin!,\n params,\n },\n document\n );\n\n if ('data' in res) {\n navigate(\n {\n pathname: `../${res.data.documentId}`,\n search: rawQuery,\n },\n { relative: 'path' }\n );\n } else if (\n 'error' in res &&\n isBaseQueryError(res.error) &&\n res.error.name === 'ValidationError'\n ) {\n setErrors(formatValidationErrors(res.error));\n }\n } else if (documentId || collectionType === SINGLE_TYPES) {\n const res = await update(\n {\n collectionType,\n model,\n documentId,\n params,\n },\n document\n );\n\n if (\n 'error' in res &&\n isBaseQueryError(res.error) &&\n res.error.name === 'ValidationError'\n ) {\n setErrors(formatValidationErrors(res.error));\n } else {\n resetForm();\n }\n } else {\n const res = await create(\n {\n model,\n params,\n },\n document\n );\n\n if ('data' in res && collectionType !== SINGLE_TYPES) {\n navigate(\n {\n pathname: `../${res.data.documentId}`,\n search: rawQuery,\n },\n { replace: true, relative: 'path' }\n );\n } else if (\n 'error' in res &&\n isBaseQueryError(res.error) &&\n res.error.name === 'ValidationError'\n ) {\n setErrors(formatValidationErrors(res.error));\n }\n }\n } finally {\n setSubmitting(false);\n }\n },\n };\n};\n\nUpdateAction.type = 'update';\n\nconst UNPUBLISH_DRAFT_OPTIONS = {\n KEEP: 'keep',\n DISCARD: 'discard',\n};\n\nconst UnpublishAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n document,\n}) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const canPublish = useDocumentRBAC('UnpublishAction', ({ canPublish }) => canPublish);\n const { unpublish } = useDocumentActions();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const { toggleNotification } = useNotification();\n const [shouldKeepDraft, setShouldKeepDraft] = React.useState(true);\n\n const isDocumentModified = document?.status === 'modified';\n\n const handleChange = (value: string) => {\n setShouldKeepDraft(value === UNPUBLISH_DRAFT_OPTIONS.KEEP);\n };\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n return {\n disabled:\n !canPublish ||\n activeTab === 'published' ||\n (document?.status !== 'published' && document?.status !== 'modified'),\n label: formatMessage({\n id: 'app.utils.unpublish',\n defaultMessage: 'Unpublish',\n }),\n icon: <StyledCrossCircle />,\n onClick: async () => {\n /**\n * return if there's no id & we're in a collection type, or the status modified\n * for either collection type because we use a dialog to handle the process in\n * the latter case.\n */\n if ((!documentId && collectionType !== SINGLE_TYPES) || isDocumentModified) {\n if (!documentId) {\n // This should never, ever, happen.\n console.error(\n \"You're trying to unpublish a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.unpublish.error',\n defaultMessage: 'An error occurred while trying to unpublish the document.',\n }),\n type: 'danger',\n });\n }\n\n return;\n }\n\n await unpublish({\n collectionType,\n model,\n documentId,\n params,\n });\n },\n dialog: isDocumentModified\n ? {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex alignItems=\"flex-start\" direction=\"column\" gap={6}>\n <Flex width=\"100%\" direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.unpublish.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n <Radio.Group\n defaultValue={UNPUBLISH_DRAFT_OPTIONS.KEEP}\n name=\"discard-options\"\n aria-label={formatMessage({\n id: 'content-manager.actions.unpublish.dialog.radio-label',\n defaultMessage: 'Choose an option to unpublish the document.',\n })}\n onValueChange={handleChange}\n >\n <Radio.Item checked={shouldKeepDraft} value={UNPUBLISH_DRAFT_OPTIONS.KEEP}>\n {formatMessage({\n id: 'content-manager.actions.unpublish.dialog.option.keep-draft',\n defaultMessage: 'Keep draft',\n })}\n </Radio.Item>\n <Radio.Item checked={!shouldKeepDraft} value={UNPUBLISH_DRAFT_OPTIONS.DISCARD}>\n {formatMessage({\n id: 'content-manager.actions.unpublish.dialog.option.replace-draft',\n defaultMessage: 'Replace draft',\n })}\n </Radio.Item>\n </Radio.Group>\n </Flex>\n ),\n onConfirm: async () => {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n // This should never, ever, happen.\n console.error(\n \"You're trying to unpublish a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.unpublish.error',\n defaultMessage: 'An error occurred while trying to unpublish the document.',\n }),\n type: 'danger',\n });\n }\n\n await unpublish(\n {\n collectionType,\n model,\n documentId,\n params,\n },\n !shouldKeepDraft\n );\n },\n }\n : undefined,\n variant: 'danger',\n position: ['panel', 'table-row'],\n };\n};\n\nUnpublishAction.type = 'unpublish';\n\nconst DiscardAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n document,\n}) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const canUpdate = useDocumentRBAC('DiscardAction', ({ canUpdate }) => canUpdate);\n const { discard } = useDocumentActions();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n return {\n disabled: !canUpdate || activeTab === 'published' || document?.status !== 'modified',\n label: formatMessage({\n id: 'content-manager.actions.discard.label',\n defaultMessage: 'Discard changes',\n }),\n icon: <StyledCrossCircle />,\n position: ['panel', 'table-row'],\n variant: 'danger',\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.discard.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n onConfirm: async () => {\n await discard({\n collectionType,\n model,\n documentId,\n params,\n });\n },\n },\n };\n};\n\nDiscardAction.type = 'discard';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledCrossCircle = styled(CrossCircle)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_ACTIONS = [PublishAction, UpdateAction, UnpublishAction, DiscardAction];\n\nexport { DocumentActions, DocumentActionsMenu, DocumentActionButton, DEFAULT_ACTIONS };\nexport type { DocumentActionDescription, DialogOptions, NotificationOptions, ModalOptions };\n","import * as React from 'react';\n\nimport { Duration, intervalToDuration, isPast } from 'date-fns';\nimport { useIntl } from 'react-intl';\n\nconst intervals: Array<keyof Duration> = ['years', 'months', 'days', 'hours', 'minutes', 'seconds'];\n\ninterface CustomInterval {\n unit: keyof Duration;\n text: string;\n threshold: number;\n}\n\ninterface RelativeTimeProps extends React.ComponentPropsWithoutRef<'time'> {\n timestamp: Date;\n customIntervals?: CustomInterval[];\n}\n\n/**\n * Displays the relative time between a given timestamp and the current time.\n * You can display a custom message for given time intervals by passing an array of custom intervals.\n *\n * @example\n * ```jsx\n * <caption>Display \"last hour\" if the timestamp is less than an hour ago</caption>\n * <RelativeTime\n * timestamp={new Date('2021-01-01')}\n * customIntervals={[\n * { unit: 'hours', threshold: 1, text: 'last hour' },\n * ]}\n * ```\n */\nconst RelativeTime = React.forwardRef<HTMLTimeElement, RelativeTimeProps>(\n ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {\n const { formatRelativeTime, formatDate, formatTime } = useIntl();\n\n /**\n * TODO: make this auto-update, like a clock.\n */\n const interval = intervalToDuration({\n start: timestamp,\n end: Date.now(),\n // see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.\n }) as Required<Duration>;\n\n const unit = intervals.find((intervalUnit) => {\n return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);\n })!;\n\n const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];\n\n // Display custom text if interval is less than the threshold\n const customInterval = customIntervals.find(\n (custom) => interval[custom.unit] < custom.threshold\n );\n\n const displayText = customInterval\n ? customInterval.text\n : formatRelativeTime(relativeTime, unit, { numeric: 'auto' });\n\n return (\n <time\n ref={forwardedRef}\n dateTime={timestamp.toISOString()}\n role=\"time\"\n title={`${formatDate(timestamp)} ${formatTime(timestamp)}`}\n {...restProps}\n >\n {displayText}\n </time>\n );\n }\n);\n\nexport { RelativeTime };\nexport type { CustomInterval, RelativeTimeProps };\n","import type { SanitizedAdminUser } from '@strapi/admin/strapi-admin';\n\n/**\n * Retrieves the display name of an admin panel user\n */\nconst getDisplayName = ({\n firstname,\n lastname,\n username,\n email,\n}: Partial<\n Pick<SanitizedAdminUser, 'firstname' | 'lastname' | 'username' | 'email'>\n> = {}): string => {\n if (username) {\n return username;\n }\n\n // firstname is not required if the user is created with a username\n if (firstname) {\n return `${firstname} ${lastname ?? ''}`.trim();\n }\n\n return email ?? '';\n};\n\nexport { getDisplayName };\n","const capitalise = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport { capitalise };\n","import { Status, StatusProps, Typography } from '@strapi/design-system';\n\nimport { capitalise } from '../../../utils/strings';\n\ninterface DocumentStatusProps\n extends Omit<StatusProps, 'children' | 'showBullet' | 'size' | 'variant'> {\n /**\n * The status of the document (draft, published, etc.)\n * @default 'draft'\n */\n status?: string;\n}\n\n/**\n * @internal\n * @description Displays the status of a document (draft, published, etc.)\n * and automatically calculates the appropriate variant for the status.\n */\nconst DocumentStatus = ({ status = 'draft', ...restProps }: DocumentStatusProps) => {\n const statusVariant =\n status === 'draft' ? 'primary' : status === 'published' ? 'success' : 'alternative';\n\n return (\n <Status {...restProps} showBullet={false} size={'S'} variant={statusVariant}>\n <Typography tag=\"span\" variant=\"omega\" fontWeight=\"bold\">\n {capitalise(status)}\n </Typography>\n </Status>\n );\n};\n\nexport { DocumentStatus };\nexport type { DocumentStatusProps };\n","import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useForm,\n BackButton,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, SingleSelect, SingleSelectOption, Typography } from '@strapi/design-system';\nimport { ListPlus, Pencil, Trash, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate } from 'react-router-dom';\n\nimport { RelativeTime } from '../../../components/RelativeTime';\nimport {\n CREATED_AT_ATTRIBUTE_NAME,\n CREATED_BY_ATTRIBUTE_NAME,\n PUBLISHED_AT_ATTRIBUTE_NAME,\n PUBLISHED_BY_ATTRIBUTE_NAME,\n UPDATED_AT_ATTRIBUTE_NAME,\n UPDATED_BY_ATTRIBUTE_NAME,\n} from '../../../constants/attributes';\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport { getDisplayName } from '../../../utils/users';\n\nimport { DocumentActionsMenu } from './DocumentActions';\nimport { DocumentStatus } from './DocumentStatus';\n\nimport type { ContentManagerPlugin, DocumentActionComponent } from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n isCreating?: boolean;\n status?: 'draft' | 'published' | 'modified';\n title?: string;\n}\n\nconst Header = ({ isCreating, status, title: documentTitle = 'Untitled' }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const isCloning = useMatch(CLONE_PATH) !== null;\n\n const title = isCreating\n ? formatMessage({\n id: 'content-manager.containers.edit.title.new',\n defaultMessage: 'Create an entry',\n })\n : documentTitle;\n\n return (\n <Flex direction=\"column\" alignItems=\"flex-start\" paddingTop={6} paddingBottom={4} gap={2}>\n <BackButton />\n <Flex width=\"100%\" justifyContent=\"space-between\" gap=\"80px\" alignItems=\"flex-start\">\n <Typography variant=\"alpha\" tag=\"h1\">\n {title}\n </Typography>\n <HeaderToolbar />\n </Flex>\n {status ? (\n <Box marginTop={1}>\n <DocumentStatus status={isCloning ? 'draft' : status} />\n </Box>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderToolbar\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderButtonAction {\n disabled?: boolean;\n label: string;\n icon?: React.ReactNode;\n /**\n * @default 'default'\n */\n type?: 'icon' | 'default';\n onClick?: (event: React.SyntheticEvent) => void;\n}\n\ninterface HeaderSelectAction {\n disabled?: boolean;\n label: string;\n options: Array<{\n disabled?: boolean;\n label: string;\n startIcon?: React.ReactNode;\n textValue?: string;\n value: string;\n }>;\n onSelect?: (value: string) => void;\n value?: string;\n}\n\ntype HeaderActionDescription = HeaderButtonAction | HeaderSelectAction;\n\n/**\n * @description Contains the document actions that have `position: header`, if there are\n * none we still render the menu because we render the information about the document there.\n */\nconst HeaderToolbar = () => {\n const { formatMessage } = useIntl();\n const isCloning = useMatch(CLONE_PATH) !== null;\n const [\n {\n query: { status = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n activeTab: status,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getHeaderActions()}\n >\n {(actions) => {\n if (actions.length > 0) {\n return <HeaderActions actions={actions} />;\n } else {\n return null;\n }\n }}\n </DescriptionComponentRenderer>\n <DescriptionComponentRenderer\n props={{\n activeTab: status,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions()}\n >\n {(actions) => {\n const headerActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('header');\n });\n\n return (\n <DocumentActionsMenu\n actions={headerActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.header.more-actions',\n defaultMessage: 'More actions',\n })}\n >\n <Information activeTab={status} />\n </DocumentActionsMenu>\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n );\n};\n\ninterface InformationProps {\n activeTab: 'draft' | 'published';\n}\n\nconst Information = ({ activeTab }: InformationProps) => {\n const { formatMessage } = useIntl();\n const { document, meta } = useDoc();\n\n if (!document || !document.id) {\n return null;\n }\n\n /**\n * Because in the backend separate entries are made for draft and published\n * documents, the creator fields are different for each of them. For example,\n * you could make your draft in January and then publish it for the first time\n * in Feb. This would make the createdAt value for the published entry in Feb\n * but really we want to show the document as a whole. The draft entry will also\n * never have the publishedAt values.\n *\n * So, we decipher which document to show the creator for based on the activeTab.\n */\n\n const createAndUpdateDocument =\n activeTab === 'draft'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt === null);\n\n const publishDocument =\n activeTab === 'published'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt !== null);\n\n const creator = createAndUpdateDocument?.[CREATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[CREATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const updator = createAndUpdateDocument?.[UPDATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[UPDATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const information: Array<{ isDisplayed?: boolean; label: string; value: React.ReactNode }> = [\n {\n isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-published.label',\n defaultMessage: 'Last published',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-published.value',\n defaultMessage: `Published {time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime timestamp={new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME])} />\n ),\n isAnonymous: !publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME],\n author: publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME])\n : null,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-draft.label',\n defaultMessage: 'Last draft',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-draft.value',\n defaultMessage: `Modified {time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !updator,\n author: updator,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.document.label',\n defaultMessage: 'Document',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.document.value',\n defaultMessage: `Created {time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !creator,\n author: creator,\n }\n ),\n },\n ].filter((info) => info.isDisplayed);\n\n return (\n <Flex\n borderWidth=\"1px 0 0 0\"\n borderStyle=\"solid\"\n borderColor=\"neutral150\"\n direction=\"column\"\n marginTop={2}\n tag=\"dl\"\n padding={5}\n gap={3}\n alignItems=\"flex-start\"\n /**\n * The menu content has a padding of 4px, but we want our divider (the border top applied) to\n * be flush with the menu content. So we need to adjust the margin & width to account for the padding.\n */\n marginLeft=\"-0.4rem\"\n marginRight=\"-0.4rem\"\n width=\"calc(100% + 8px)\"\n >\n {information.map((info) => (\n <Flex gap={1} direction=\"column\" alignItems=\"flex-start\" key={info.label}>\n <Typography tag=\"dt\" variant=\"pi\" fontWeight=\"bold\">\n {info.label}\n </Typography>\n <Typography tag=\"dd\" variant=\"pi\" textColor=\"neutral600\">\n {info.value}\n </Typography>\n </Flex>\n ))}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionsProps {\n actions: Array<HeaderActionDescription & { id: string }>;\n}\n\nconst HeaderActions = ({ actions }: HeaderActionsProps) => {\n return (\n <Flex>\n {actions.map((action) => {\n if ('options' in action) {\n return (\n <SingleSelect\n key={action.id}\n size=\"S\"\n disabled={action.disabled}\n aria-label={action.label}\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={action.onSelect}\n value={action.value}\n >\n {action.options.map(({ label, ...option }) => (\n <SingleSelectOption key={option.value} {...option}>\n {label}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n );\n } else {\n // TODO: add button handler\n return null;\n }\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfigureTheViewAction: DocumentActionComponent = ({ collectionType, model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n\n return {\n label: formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n }),\n icon: <ListPlus />,\n onClick: () => {\n navigate(`../${collectionType}/${model}/configurations/edit`);\n },\n position: 'header',\n };\n};\n\nConfigureTheViewAction.type = 'configure-the-view';\n\nconst EditTheModelAction: DocumentActionComponent = ({ model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n\n return {\n label: formatMessage({\n id: 'content-manager.link-to-ctb',\n defaultMessage: 'Edit the model',\n }),\n icon: <Pencil />,\n onClick: () => {\n navigate(`/plugins/content-type-builder/content-types/${model}`);\n },\n position: 'header',\n };\n};\n\nEditTheModelAction.type = 'edit-the-model';\n\nconst DeleteAction: DocumentActionComponent = ({ documentId, model, collectionType, document }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const listViewPathMatch = useMatch(LIST_PATH);\n const canDelete = useDocumentRBAC('DeleteAction', (state) => state.canDelete);\n const { delete: deleteAction } = useDocumentActions();\n const { toggleNotification } = useNotification();\n const setSubmitting = useForm('DeleteAction', (state) => state.setSubmitting);\n\n return {\n disabled: !canDelete || !document,\n label: formatMessage({\n id: 'content-manager.actions.delete.label',\n defaultMessage: 'Delete document',\n }),\n icon: <Trash />,\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.delete.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n onConfirm: async () => {\n /**\n * If we have a match, we're in the list view\n * and therefore not in a form and shouldn't be\n * trying to set the submitting value.\n */\n if (!listViewPathMatch) {\n setSubmitting(true);\n }\n try {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n console.error(\n \"You're trying to delete a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.delete.error',\n defaultMessage: 'An error occurred while trying to delete the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: {\n locale: '*',\n },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n } finally {\n if (!listViewPathMatch) {\n setSubmitting(false);\n }\n }\n },\n },\n variant: 'danger',\n position: ['header', 'table-row'],\n };\n};\n\nDeleteAction.type = 'delete';\n\nconst DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction];\n\nexport { Header, DEFAULT_HEADER_ACTIONS };\nexport type { HeaderProps, HeaderActionDescription };\n","import * as React from 'react';\n\nimport {\n useQueryParams,\n useStrapiApp,\n DescriptionComponentRenderer,\n} from '@strapi/admin/strapi-admin';\nimport { Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\n\nimport { InjectionZone } from '../../../components/InjectionZone';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { CLONE_PATH } from '../../../router';\n\nimport { DocumentActions } from './DocumentActions';\n\nimport type {\n ContentManagerPlugin,\n DocumentActionProps,\n PanelComponent,\n PanelComponentProps,\n} from '../../../content-manager';\n\ninterface PanelDescription {\n title: string;\n content: React.ReactNode;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Panels\n * -----------------------------------------------------------------------------------------------*/\n\nconst Panels = () => {\n const isCloning = useMatch(CLONE_PATH) !== null;\n const [\n {\n query: { status },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('Panels', (state) => state.plugins);\n\n const props = {\n activeTab: status,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n } satisfies PanelComponentProps;\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getEditViewSidePanels()}\n >\n {(panels) =>\n panels.map(({ content, id, ...description }) => (\n <Panel key={id} {...description}>\n {content}\n </Panel>\n ))\n }\n </DescriptionComponentRenderer>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Default Action Panels (CE)\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionsPanel: PanelComponent = () => {\n const { formatMessage } = useIntl();\n\n return {\n title: formatMessage({\n id: 'content-manager.containers.edit.panels.default.title',\n defaultMessage: 'Document',\n }),\n content: <ActionsPanelContent />,\n };\n};\n\nActionsPanel.type = 'actions';\n\nconst ActionsPanelContent = () => {\n const isCloning = useMatch(CLONE_PATH) !== null;\n const [\n {\n query: { status = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('ActionsPanel', (state) => state.plugins);\n\n const props = {\n activeTab: status,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n } satisfies DocumentActionProps;\n\n return (\n <Flex direction=\"column\" gap={2} width=\"100%\">\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions()}\n >\n {(actions) => <DocumentActions actions={actions} />}\n </DescriptionComponentRenderer>\n <InjectionZone area=\"editView.right-links\" slug={model} />\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Panel\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PanelProps extends Pick<PanelDescription, 'title'> {\n children: React.ReactNode;\n}\n\nconst Panel = React.forwardRef<any, PanelProps>(({ children, title }, ref) => {\n return (\n <Flex\n ref={ref}\n tag=\"aside\"\n aria-labelledby=\"additional-information\"\n background=\"neutral0\"\n borderColor=\"neutral150\"\n hasRadius\n paddingBottom={4}\n paddingLeft={4}\n paddingRight={4}\n paddingTop={4}\n shadow=\"tableShadow\"\n gap={3}\n direction=\"column\"\n justifyContent=\"stretch\"\n alignItems=\"flex-start\"\n >\n <Typography tag=\"h2\" variant=\"sigma\" textTransform=\"uppercase\">\n {title}\n </Typography>\n {children}\n </Flex>\n );\n});\n\nexport { Panels, ActionsPanel };\nexport type { PanelDescription };\n","export const HOOKS = {\n /**\n * Hook that allows to mutate the displayed headers of the list view table\n * @constant\n * @type {string}\n */\n INJECT_COLUMN_IN_TABLE: 'Admin/CM/pages/ListView/inject-column-in-table',\n\n /**\n * Hook that allows to mutate the CM's collection types links pre-set filters\n * @constant\n * @type {string}\n */\n MUTATE_COLLECTION_TYPES_LINKS: 'Admin/CM/pages/App/mutate-collection-types-links',\n\n /**\n * Hook that allows to mutate the CM's edit view layout\n * @constant\n * @type {string}\n */\n MUTATE_EDIT_VIEW_LAYOUT: 'Admin/CM/pages/EditView/mutate-edit-view-layout',\n\n /**\n * Hook that allows to mutate the CM's single types links pre-set filters\n * @constant\n * @type {string}\n */\n MUTATE_SINGLE_TYPES_LINKS: 'Admin/CM/pages/App/mutate-single-types-links',\n};\n","import {\n FindContentTypeConfiguration,\n UpdateContentTypeConfiguration,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\n\nimport { contentManagerApi } from './api';\n\nconst contentTypesApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getContentTypeConfiguration: builder.query<\n FindContentTypeConfiguration.Response['data'],\n string\n >({\n query: (uid) => ({\n url: `/content-manager/content-types/${uid}/configuration`,\n method: 'GET',\n }),\n transformResponse: (response: FindContentTypeConfiguration.Response) => response.data,\n providesTags: (_result, _error, uid) => [\n { type: 'ContentTypesConfiguration', id: uid },\n { type: 'ContentTypeSettings', id: 'LIST' },\n ],\n }),\n getAllContentTypeSettings: builder.query<FindContentTypesSettings.Response['data'], void>({\n query: () => '/content-manager/content-types-settings',\n transformResponse: (response: FindContentTypesSettings.Response) => response.data,\n providesTags: [{ type: 'ContentTypeSettings', id: 'LIST' }],\n }),\n updateContentTypeConfiguration: builder.mutation<\n UpdateContentTypeConfiguration.Response['data'],\n UpdateContentTypeConfiguration.Request['body'] & {\n uid: string;\n }\n >({\n query: ({ uid, ...body }) => ({\n url: `/content-manager/content-types/${uid}/configuration`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (response: UpdateContentTypeConfiguration.Response) => response.data,\n invalidatesTags: (_result, _error, { uid }) => [\n { type: 'ContentTypesConfiguration', id: uid },\n { type: 'ContentTypeSettings', id: 'LIST' },\n // Is this necessary?\n { type: 'InitialData' },\n ],\n }),\n }),\n});\n\nconst {\n useGetContentTypeConfigurationQuery,\n useGetAllContentTypeSettingsQuery,\n useUpdateContentTypeConfigurationMutation,\n} = contentTypesApi;\n\nexport {\n useGetContentTypeConfigurationQuery,\n useGetAllContentTypeSettingsQuery,\n useUpdateContentTypeConfigurationMutation,\n};\n","import type { ComponentsDictionary, Schema } from '../hooks/useDocument';\nimport type { Schema as SchemaUtils } from '@strapi/types';\n\nconst checkIfAttributeIsDisplayable = (attribute: SchemaUtils.Attribute.AnyAttribute) => {\n const { type } = attribute;\n\n if (type === 'relation') {\n return !attribute.relation.toLowerCase().includes('morph');\n }\n\n return !['json', 'dynamiczone', 'richtext', 'password', 'blocks'].includes(type) && !!type;\n};\n\ninterface MainField {\n name: string;\n type: SchemaUtils.Attribute.Kind | 'custom';\n}\n\n/**\n * @internal\n * @description given an attribute, content-type schemas & component schemas, find the mainField name & type.\n * If the attribute does not need a `mainField` then we return undefined. If we do not find the type\n * of the field, we assume it's a string #sensible-defaults\n */\nconst getMainField = (\n attribute: SchemaUtils.Attribute.AnyAttribute,\n mainFieldName: string | undefined,\n { schemas, components }: { schemas: Schema[]; components: ComponentsDictionary }\n): MainField | undefined => {\n if (!mainFieldName) {\n return undefined;\n }\n\n const mainFieldType =\n attribute.type === 'component'\n ? components[attribute.component].attributes[mainFieldName].type\n : // @ts-expect-error – `targetModel` does exist on the attribute for a relation.\n schemas.find((schema) => schema.uid === attribute.targetModel)?.attributes[mainFieldName]\n .type;\n\n return {\n name: mainFieldName,\n type: mainFieldType ?? 'string',\n };\n};\n\nexport { checkIfAttributeIsDisplayable, getMainField };\nexport type { MainField };\n","import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\n\nimport { HOOKS } from '../constants/hooks';\nimport { useGetContentTypeConfigurationQuery } from '../services/contentTypes';\nimport { BaseQueryError } from '../utils/api';\nimport { getMainField } from '../utils/attributes';\n\nimport { useContentTypeSchema } from './useContentTypeSchema';\nimport {\n type ComponentsDictionary,\n type Document,\n type Schema,\n useDoc,\n useDocument,\n} from './useDocument';\n\nimport type { ComponentConfiguration } from '../../../shared/contracts/components';\nimport type {\n Metadatas,\n FindContentTypeConfiguration,\n Settings,\n} from '../../../shared/contracts/content-types';\nimport type { Filters, InputProps, Table } from '@strapi/admin/strapi-admin';\nimport type { Schema as SchemaUtils } from '@strapi/types';\n\ntype LayoutOptions = Schema['options'] & Schema['pluginOptions'] & object;\n\ninterface LayoutSettings extends Settings {\n displayName?: string;\n icon?: never;\n}\n\ninterface ListFieldLayout\n extends Table.Header<Document, ListFieldLayout>,\n Pick<Filters.Filter, 'mainField'> {\n attribute: SchemaUtils.Attribute.AnyAttribute | { type: 'custom' };\n}\n\ninterface ListLayout {\n layout: ListFieldLayout[];\n components?: never;\n metadatas: {\n [K in keyof Metadatas]: Metadatas[K]['list'];\n };\n options: LayoutOptions;\n settings: LayoutSettings;\n}\ninterface EditFieldSharedProps\n extends Omit<InputProps, 'hint' | 'label' | 'type'>,\n Pick<Filters.Filter, 'mainField'> {\n hint?: string;\n label: string;\n size: number;\n unique?: boolean;\n visible?: boolean;\n}\n\n/**\n * Map over all the types in Attribute Types and use that to create a union of new types where the attribute type\n * is under the property attribute and the type is under the property type.\n */\ntype EditFieldLayout = {\n [K in SchemaUtils.Attribute.Kind]: EditFieldSharedProps & {\n attribute: Extract<SchemaUtils.Attribute.AnyAttribute, { type: K }>;\n type: K;\n };\n}[SchemaUtils.Attribute.Kind];\n\ninterface EditLayout {\n layout: Array<Array<EditFieldLayout[]>>;\n components: {\n [uid: string]: {\n layout: Array<EditFieldLayout[]>;\n settings: ComponentConfiguration['settings'] & {\n displayName?: string;\n icon?: string;\n };\n };\n };\n metadatas: {\n [K in keyof Metadatas]: Metadatas[K]['edit'];\n };\n options: LayoutOptions;\n settings: LayoutSettings;\n}\n\ntype UseDocumentLayout = (model: string) => {\n error?: BaseQueryError | SerializedError;\n isLoading: boolean;\n /**\n * This is the layout for the edit view,\n */\n edit: EditLayout;\n list: ListLayout;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocumentLayout\n * -----------------------------------------------------------------------------------------------*/\n\nconst DEFAULT_SETTINGS = {\n bulkable: false,\n filterable: false,\n searchable: false,\n pagination: false,\n defaultSortBy: '',\n defaultSortOrder: 'asc',\n mainField: 'id',\n pageSize: 10,\n};\n\n/**\n * @alpha\n * @description This hook is used to get the layouts for either the edit view or list view of a specific content-type\n * including the layouts for the components used in the content-type. It also runs the mutation hook waterfall so the data\n * is consistent wherever it is used. It's a light wrapper around the `useDocument` hook, but provides the `skip` option a document\n * is not fetched, however, it does fetch the schemas & components if they do not already exist in the cache.\n *\n * If the fetch fails, it will display a notification to the user.\n *\n * @example\n * ```tsx\n * const { model } = useParams<{ model: string }>();\n * const { edit: { schema: layout } } = useDocumentLayout(model);\n *\n * return layout.map(panel => panel.map(row => row.map(field => <Field.Root {...field} />)))\n * ```\n *\n */\nconst useDocumentLayout: UseDocumentLayout = (model) => {\n const { schema, components } = useDocument({ model, collectionType: '' }, { skip: true });\n const [{ query }] = useQueryParams();\n const runHookWaterfall = useStrapiApp('useDocumentLayout', (state) => state.runHookWaterfall);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { isLoading: isLoadingSchemas, schemas } = useContentTypeSchema();\n\n const {\n data,\n isLoading: isLoadingConfigs,\n error,\n isFetching: isFetchingConfigs,\n } = useGetContentTypeConfigurationQuery(model);\n\n const isLoading = isLoadingSchemas || isFetchingConfigs || isLoadingConfigs;\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const editLayout = React.useMemo(\n () =>\n data && !isLoading\n ? formatEditLayout(data, { schemas, schema, components })\n : ({\n layout: [],\n components: {},\n metadatas: {},\n options: {},\n settings: DEFAULT_SETTINGS,\n } as EditLayout),\n [data, isLoading, schemas, schema, components]\n );\n\n const listLayout = React.useMemo(() => {\n return data && !isLoading\n ? formatListLayout(data, { schemas, schema, components })\n : ({\n layout: [],\n metadatas: {},\n options: {},\n settings: DEFAULT_SETTINGS,\n } as ListLayout);\n }, [data, isLoading, schemas, schema, components]);\n\n const { layout: edit } = React.useMemo(\n () =>\n runHookWaterfall(HOOKS.MUTATE_EDIT_VIEW_LAYOUT, {\n layout: editLayout,\n query,\n }),\n [editLayout, query, runHookWaterfall]\n );\n\n return {\n error,\n isLoading,\n edit,\n list: listLayout,\n } satisfies ReturnType<UseDocumentLayout>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocLayout\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the internal useDoc hook, as such it shouldn't be used outside of the\n * content-manager because it won't work as intended.\n */\nconst useDocLayout = () => {\n const { model } = useDoc();\n return useDocumentLayout(model);\n};\n\n/* -------------------------------------------------------------------------------------------------\n * formatEditLayout\n * -----------------------------------------------------------------------------------------------*/\ntype LayoutData = FindContentTypeConfiguration.Response['data'];\n\n/**\n * @internal\n * @description takes the configuration data, the schema & the components used in the schema and formats the edit view\n * versions of the schema & components. This is then used to render the edit view of the content-type.\n */\nconst formatEditLayout = (\n data: LayoutData,\n {\n schemas,\n schema,\n components,\n }: { schemas: Schema[]; schema?: Schema; components: ComponentsDictionary }\n): EditLayout => {\n let currentPanelIndex = 0;\n /**\n * The fields arranged by the panels, new panels are made for dynamic zones only.\n */\n const panelledEditAttributes = convertEditLayoutToFieldLayouts(\n data.contentType.layouts.edit,\n schema?.attributes,\n data.contentType.metadatas,\n { configurations: data.components, schemas: components },\n schemas\n ).reduce<Array<EditFieldLayout[][]>>((panels, row) => {\n if (row.some((field) => field.type === 'dynamiczone')) {\n panels.push([row]);\n currentPanelIndex += 2;\n } else {\n if (!panels[currentPanelIndex]) {\n panels.push([]);\n }\n panels[currentPanelIndex].push(row);\n }\n\n return panels;\n }, []);\n\n const componentEditAttributes = Object.entries(data.components).reduce<EditLayout['components']>(\n (acc, [uid, configuration]) => {\n acc[uid] = {\n layout: convertEditLayoutToFieldLayouts(\n configuration.layouts.edit,\n components[uid].attributes,\n configuration.metadatas\n ),\n settings: {\n ...configuration.settings,\n icon: components[uid].info.icon,\n displayName: components[uid].info.displayName,\n },\n };\n return acc;\n },\n {}\n );\n\n const editMetadatas = Object.entries(data.contentType.metadatas).reduce<EditLayout['metadatas']>(\n (acc, [attribute, metadata]) => {\n return {\n ...acc,\n [attribute]: metadata.edit,\n };\n },\n {}\n );\n\n return {\n layout: panelledEditAttributes,\n components: componentEditAttributes,\n metadatas: editMetadatas,\n settings: {\n ...data.contentType.settings,\n displayName: schema?.info.displayName,\n },\n options: {\n ...schema?.options,\n ...schema?.pluginOptions,\n ...data.contentType.options,\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * convertEditLayoutToFieldLayouts\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the edit layout from either a content-type or a component\n * and formats it into a generic object that can be used to correctly render\n * the form fields.\n */\nconst convertEditLayoutToFieldLayouts = (\n rows: LayoutData['contentType']['layouts']['edit'],\n attributes: Schema['attributes'] = {},\n metadatas: Metadatas,\n components?: {\n configurations: Record<string, ComponentConfiguration>;\n schemas: ComponentsDictionary;\n },\n schemas: Schema[] = []\n) => {\n return rows.map((row) =>\n row\n .map((field) => {\n const attribute = attributes[field.name];\n\n if (!attribute) {\n return null;\n }\n\n const { edit: metadata } = metadatas[field.name];\n\n const settings: Partial<Settings> =\n attribute.type === 'component' && components\n ? components.configurations[attribute.component].settings\n : {};\n\n return {\n attribute,\n disabled: !metadata.editable,\n hint: metadata.description,\n label: metadata.label ?? '',\n name: field.name,\n // @ts-expect-error – mainField does exist on the metadata for a relation.\n mainField: getMainField(attribute, metadata.mainField || settings.mainField, {\n schemas,\n components: components?.schemas ?? {},\n }),\n placeholder: metadata.placeholder ?? '',\n required: attribute.required ?? false,\n size: field.size,\n unique: 'unique' in attribute ? attribute.unique : false,\n visible: metadata.visible ?? true,\n type: attribute.type,\n };\n })\n .filter((field) => field !== null)\n ) as EditFieldLayout[][];\n};\n\n/* -------------------------------------------------------------------------------------------------\n * formatListLayout\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the complete configuration data, the schema & the components used in the schema and\n * formats a list view layout for the content-type. This is much simpler than the edit view layout as there\n * are less options to consider.\n */\nconst formatListLayout = (\n data: LayoutData,\n {\n schemas,\n schema,\n components,\n }: { schemas: Schema[]; schema?: Schema; components: ComponentsDictionary }\n): ListLayout => {\n const listMetadatas = Object.entries(data.contentType.metadatas).reduce<ListLayout['metadatas']>(\n (acc, [attribute, metadata]) => {\n return {\n ...acc,\n [attribute]: metadata.list,\n };\n },\n {}\n );\n /**\n * The fields arranged by the panels, new panels are made for dynamic zones only.\n */\n const listAttributes = convertListLayoutToFieldLayouts(\n data.contentType.layouts.list,\n schema?.attributes,\n listMetadatas,\n { configurations: data.components, schemas: components },\n schemas\n );\n\n return {\n layout: listAttributes,\n settings: { ...data.contentType.settings, displayName: schema?.info.displayName },\n metadatas: listMetadatas,\n options: {\n ...schema?.options,\n ...schema?.pluginOptions,\n ...data.contentType.options,\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * convertListLayoutToFieldLayouts\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the columns from the list view configuration and formats them into a generic object\n * combinining metadata and attribute data.\n *\n * @note We do use this to reformat the list of strings when updating the displayed headers for the list view.\n */\nconst convertListLayoutToFieldLayouts = (\n columns: LayoutData['contentType']['layouts']['list'],\n attributes: Schema['attributes'] = {},\n metadatas: ListLayout['metadatas'],\n components?: {\n configurations: Record<string, ComponentConfiguration>;\n schemas: ComponentsDictionary;\n },\n schemas: Schema[] = []\n) => {\n return columns\n .map((name) => {\n const attribute = attributes[name];\n\n if (!attribute) {\n return null;\n }\n\n const metadata = metadatas[name];\n\n const settings: Partial<Settings> =\n attribute.type === 'component' && components\n ? components.configurations[attribute.component].settings\n : {};\n\n return {\n attribute,\n label: metadata.label ?? '',\n mainField: getMainField(attribute, metadata.mainField || settings.mainField, {\n schemas,\n components: components?.schemas ?? {},\n }),\n name: name,\n searchable: metadata.searchable ?? true,\n sortable: metadata.sortable ?? true,\n } satisfies ListFieldLayout;\n })\n .filter((field) => field !== null) as ListFieldLayout[];\n};\n\nexport {\n useDocLayout,\n useDocumentLayout,\n convertListLayoutToFieldLayouts,\n convertEditLayoutToFieldLayouts,\n DEFAULT_SETTINGS,\n};\nexport type { EditLayout, EditFieldLayout, ListLayout, ListFieldLayout, UseDocumentLayout };\n","import * as React from 'react';\n\nimport {\n useTable,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Dialog, Typography } from '@strapi/design-system';\nimport { Check, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetManyDraftRelationCountQuery } from '../../../../services/documents';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport { Emphasis } from './Actions';\n\ninterface ConfirmBulkActionDialogProps {\n endAction: React.ReactNode;\n onToggleDialog: () => void;\n isOpen?: boolean;\n dialogBody: React.ReactNode;\n}\n\nconst ConfirmBulkActionDialog = ({\n onToggleDialog,\n isOpen = false,\n dialogBody,\n endAction,\n}: ConfirmBulkActionDialogProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Dialog.Root open={isOpen}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n </Dialog.Header>\n <Dialog.Body>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n {dialogBody}\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button fullWidth onClick={onToggleDialog} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n {endAction}\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BoldChunk\n * -----------------------------------------------------------------------------------------------*/\n\nconst BoldChunk = (chunks: React.ReactNode) => <Typography fontWeight=\"bold\">{chunks}</Typography>;\n\n/* -------------------------------------------------------------------------------------------------\n * ConfirmDialogPublishAll\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfirmDialogPublishAllProps\n extends Pick<ConfirmBulkActionDialogProps, 'isOpen' | 'onToggleDialog'> {\n isConfirmButtonLoading?: boolean;\n onConfirm: () => void;\n}\n\nconst ConfirmDialogPublishAll = ({\n isOpen,\n onToggleDialog,\n isConfirmButtonLoading = false,\n onConfirm,\n}: ConfirmDialogPublishAllProps) => {\n const { formatMessage } = useIntl();\n const selectedEntries = useTable('ConfirmDialogPublishAll', (state) => state.selectedRows);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const { model, schema } = useDoc();\n const [{ query }] = useQueryParams<{\n plugins?: {\n i18n?: {\n locale?: string;\n };\n };\n }>();\n\n const {\n data: countDraftRelations = 0,\n isLoading,\n error,\n } = useGetManyDraftRelationCountQuery(\n {\n model,\n documentIds: selectedEntries.map((entry) => entry.documentId),\n locale: query?.plugins?.i18n?.locale,\n },\n {\n skip: selectedEntries.length === 0,\n }\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({ type: 'danger', message: formatAPIError(error) });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n if (error) {\n return null;\n }\n\n return (\n <ConfirmBulkActionDialog\n isOpen={isOpen && !isLoading}\n onToggleDialog={onToggleDialog}\n dialogBody={\n <>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {countDraftRelations > 0 &&\n formatMessage(\n {\n id: getTranslation(`popUpwarning.warning.bulk-has-draft-relations.message`),\n defaultMessage:\n '<b>{count} {count, plural, one { relation } other { relations } } out of {entities} { entities, plural, one { entry } other { entries } } {count, plural, one { is } other { are } }</b> not published yet and might lead to unexpected behavior. ',\n },\n {\n b: BoldChunk,\n count: countDraftRelations,\n entities: selectedEntries.length,\n }\n )}\n {formatMessage({\n id: getTranslation('popUpWarning.bodyMessage.contentType.publish.all'),\n defaultMessage: 'Are you sure you want to publish these entries?',\n })}\n </Typography>\n {schema?.pluginOptions &&\n 'i18n' in schema.pluginOptions &&\n schema?.pluginOptions.i18n && (\n <Typography textColor=\"danger500\" textAlign=\"center\">\n {formatMessage(\n {\n id: getTranslation('Settings.list.actions.publishAdditionalInfos'),\n defaultMessage:\n 'This will publish the active locale versions <em>(from Internationalization)</em>',\n },\n {\n em: Emphasis,\n }\n )}\n </Typography>\n )}\n </>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"secondary\"\n startIcon={<Check />}\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.utils.publish',\n defaultMessage: 'Publish',\n })}\n </Button>\n }\n />\n );\n};\n\nexport { ConfirmDialogPublishAll, ConfirmBulkActionDialog };\nexport type { ConfirmDialogPublishAllProps, ConfirmBulkActionDialogProps };\n","import * as React from 'react';\n\nimport {\n useQueryParams,\n Table,\n useTable,\n getYupValidationErrors,\n FormErrors,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Typography,\n Modal,\n IconButton,\n Flex,\n Tooltip,\n Loader,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { Pencil, CrossCircle, CheckCircle, ArrowsCounterClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport { ValidationError } from 'yup';\n\nimport { useDocumentRBAC } from '../../../../features/DocumentRBAC';\nimport { useContentTypeSchema } from '../../../../hooks/useContentTypeSchema';\nimport { useDocumentActions } from '../../../../hooks/useDocumentActions';\nimport { useDocLayout } from '../../../../hooks/useDocumentLayout';\nimport { contentManagerApi } from '../../../../services/api';\nimport {\n useGetAllDocumentsQuery,\n usePublishManyDocumentsMutation,\n} from '../../../../services/documents';\nimport { buildValidParams } from '../../../../utils/api';\nimport { getTranslation } from '../../../../utils/translations';\nimport { createYupSchema } from '../../../../utils/validation';\nimport { DocumentStatus } from '../../../EditView/components/DocumentStatus';\n\nimport { ConfirmDialogPublishAll, ConfirmDialogPublishAllProps } from './ConfirmBulkActionDialog';\n\nimport type { BulkActionComponent } from '../../../../content-manager';\nimport type { Document } from '../../../../hooks/useDocument';\n\nconst TypographyMaxWidth = styled<TypographyComponent>(Typography)`\n max-width: 300px;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * EntryValidationText\n * -----------------------------------------------------------------------------------------------*/\n\nconst formatErrorMessages = (errors: FormErrors, parentKey: string, formatMessage: any) => {\n const messages: string[] = [];\n\n Object.entries(errors).forEach(([key, value]) => {\n const currentKey = parentKey ? `${parentKey}.${key}` : key;\n\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n if ('id' in value && 'defaultMessage' in value) {\n messages.push(\n formatMessage(\n {\n id: `${value.id}.withField`,\n defaultMessage: value.defaultMessage,\n },\n { field: currentKey }\n )\n );\n } else {\n messages.push(\n ...formatErrorMessages(\n // @ts-expect-error TODO: check why value is not compatible with FormErrors\n value,\n currentKey,\n formatMessage\n )\n );\n }\n } else {\n messages.push(\n formatMessage(\n {\n id: `${value}.withField`,\n defaultMessage: value,\n },\n { field: currentKey }\n )\n );\n }\n });\n\n return messages;\n};\n\ninterface EntryValidationTextProps {\n validationErrors?: FormErrors;\n status: string;\n}\n\nconst EntryValidationText = ({ validationErrors, status }: EntryValidationTextProps) => {\n const { formatMessage } = useIntl();\n\n if (validationErrors) {\n const validationErrorsMessages = formatErrorMessages(validationErrors, '', formatMessage).join(\n ' '\n );\n\n return (\n <Flex gap={2}>\n <CrossCircle fill=\"danger600\" />\n <Tooltip description={validationErrorsMessages}>\n <TypographyMaxWidth textColor=\"danger600\" variant=\"omega\" fontWeight=\"semiBold\" ellipsis>\n {validationErrorsMessages}\n </TypographyMaxWidth>\n </Tooltip>\n </Flex>\n );\n }\n\n if (status === 'published') {\n return (\n <Flex gap={2}>\n <CheckCircle fill=\"success600\" />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.already-published',\n defaultMessage: 'Already Published',\n })}\n </Typography>\n </Flex>\n );\n }\n\n if (status === 'modified') {\n return (\n <Flex gap={2}>\n <ArrowsCounterClockwise fill=\"alternative600\" />\n <Typography>\n {formatMessage({\n id: 'content-manager.bulk-publish.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n </Typography>\n </Flex>\n );\n }\n\n return (\n <Flex gap={2}>\n <CheckCircle fill=\"success600\" />\n <Typography>\n {formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesTableContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SelectedEntriesTableContentProps {\n isPublishing?: boolean;\n rowsToDisplay?: TableRow[];\n entriesToPublish?: TableRow['documentId'][];\n validationErrors: Record<string, EntryValidationTextProps['validationErrors']>;\n}\n\nconst TABLE_HEADERS = [\n { name: 'id', label: 'id' },\n { name: 'name', label: 'name' },\n { name: 'status', label: 'status' },\n { name: 'publicationStatus', label: 'Publication status' },\n];\n\nconst SelectedEntriesTableContent = ({\n isPublishing,\n rowsToDisplay = [],\n entriesToPublish = [],\n validationErrors = {},\n}: SelectedEntriesTableContentProps) => {\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n\n const {\n list: {\n settings: { mainField },\n },\n } = useDocLayout();\n\n const shouldDisplayMainField = mainField != null && mainField !== 'id';\n\n return (\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {TABLE_HEADERS.filter((head) => head.name !== 'name' || shouldDisplayMainField).map(\n (head) => (\n <Table.HeaderCell key={head.name} {...head} />\n )\n )}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {rowsToDisplay.map((row, index) => (\n <Table.Row key={row.id}>\n <Table.CheckboxCell id={row.id} />\n <Table.Cell>\n <Typography>{row.id}</Typography>\n </Table.Cell>\n {shouldDisplayMainField && (\n <Table.Cell>\n <Typography>{row[mainField as keyof TableRow]}</Typography>\n </Table.Cell>\n )}\n <Table.Cell>\n <DocumentStatus status={row.status} maxWidth={'min-content'} />\n </Table.Cell>\n <Table.Cell>\n {isPublishing && entriesToPublish.includes(row.documentId) ? (\n <Flex gap={2}>\n <Typography>\n {formatMessage({\n id: 'content-manager.success.record.publishing',\n defaultMessage: 'Publishing...',\n })}\n </Typography>\n <Loader small />\n </Flex>\n ) : (\n <EntryValidationText\n validationErrors={validationErrors[row.documentId]}\n status={row.status}\n />\n )}\n </Table.Cell>\n <Table.Cell>\n <IconButton\n tag={Link}\n to={{\n pathname: `${pathname}/${row.documentId}`,\n search: row.locale && `?plugins[i18n][locale]=${row.locale}`,\n }}\n state={{ from: pathname }}\n label={formatMessage(\n { id: 'app.component.HelperPluginTable.edit', defaultMessage: 'Edit {target}' },\n {\n target: formatMessage(\n {\n id: 'content-manager.components.ListViewHelperPluginTable.row-line',\n defaultMessage: 'item line {number}',\n },\n { number: index + 1 }\n ),\n }\n )}\n target=\"_blank\"\n marginLeft=\"auto\"\n >\n <Pencil />\n </IconButton>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BoldChunk\n * -----------------------------------------------------------------------------------------------*/\n\nconst BoldChunk = (chunks: React.ReactNode) => <Typography fontWeight=\"bold\">{chunks}</Typography>;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModalContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableRow extends Document {}\n\ninterface SelectedEntriesModalContentProps {\n listViewSelectedEntries: TableRow[];\n toggleModal: ConfirmDialogPublishAllProps['onToggleDialog'];\n setListViewSelectedDocuments: (documents: TableRow[]) => void;\n model: string;\n}\n\nconst SelectedEntriesModalContent = ({\n listViewSelectedEntries,\n toggleModal,\n setListViewSelectedDocuments,\n model,\n}: SelectedEntriesModalContentProps) => {\n const { formatMessage } = useIntl();\n const { schema, components } = useContentTypeSchema(model);\n const documentIds = listViewSelectedEntries.map(({ documentId }) => documentId);\n\n // We want to keep the selected entries order same as the list view\n const [{ query }] = useQueryParams<{ sort?: string; plugins?: Record<string, any> }>();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n // Fetch the documents based on the selected entries and update the modal table\n const { data, isLoading, isFetching, refetch } = useGetAllDocumentsQuery(\n {\n model,\n params: {\n page: '1',\n pageSize: documentIds.length.toString(),\n sort: query.sort,\n filters: {\n documentId: {\n $in: documentIds,\n },\n },\n locale: query.plugins?.i18n?.locale,\n },\n },\n {\n selectFromResult: ({ data, ...restRes }) => ({ data: data?.results ?? [], ...restRes }),\n }\n );\n\n // Validate the entries based on the schema to show errors if any\n const { rows, validationErrors } = React.useMemo(() => {\n if (data.length > 0 && schema) {\n const validate = createYupSchema(schema.attributes, components);\n const validationErrors: Record<TableRow['documentId'], FormErrors> = {};\n const rows = data.map((entry: Document) => {\n try {\n validate.validateSync(entry, { abortEarly: false });\n\n return entry;\n } catch (e) {\n if (e instanceof ValidationError) {\n validationErrors[entry.documentId] = getYupValidationErrors(e);\n }\n\n return entry;\n }\n });\n\n return { rows, validationErrors };\n }\n\n return {\n rows: [],\n validationErrors: {},\n };\n }, [components, data, schema]);\n\n const [publishedCount, setPublishedCount] = React.useState(0);\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n\n const { publishMany: bulkPublishAction } = useDocumentActions();\n const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();\n\n const selectedRows = useTable('publishAction', (state) => state.selectedRows);\n\n // Filter selected entries from the updated modal table rows\n const selectedEntries = rows.filter((entry) =>\n selectedRows.some((selectedEntry) => selectedEntry.documentId === entry.documentId)\n );\n\n const entriesToPublish = selectedEntries\n .filter((entry) => !validationErrors[entry.documentId])\n .map((entry) => entry.documentId);\n\n const selectedEntriesWithErrorsCount = selectedEntries.filter(\n ({ documentId }) => validationErrors[documentId]\n ).length;\n const selectedEntriesPublished = selectedEntries.filter(\n ({ status }) => status === 'published'\n ).length;\n const selectedEntriesWithNoErrorsCount =\n selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublished;\n\n const toggleDialog = () => setIsDialogOpen((prev) => !prev);\n\n const handleConfirmBulkPublish = async () => {\n toggleDialog();\n\n const res = await bulkPublishAction({ model: model, documentIds: entriesToPublish, params });\n if (!('error' in res)) {\n // @ts-expect-error TODO: check with BE why response is not consistent with other actions\n setPublishedCount(res.count);\n\n const unpublishedEntries = rows.filter((row) => {\n return !entriesToPublish.includes(row.documentId);\n });\n // Keep selection of the entries in list view that were not published\n setListViewSelectedDocuments(unpublishedEntries);\n }\n };\n\n const getFormattedCountMessage = () => {\n if (publishedCount) {\n return formatMessage(\n {\n id: getTranslation('containers.list.selectedEntriesModal.publishedCount'),\n defaultMessage:\n '<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} published. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.',\n },\n {\n publishedCount,\n withErrorsCount: selectedEntriesWithErrorsCount,\n b: BoldChunk,\n }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('containers.list.selectedEntriesModal.selectedCount'),\n defaultMessage:\n '<b>{alreadyPublishedCount}</b> {alreadyPublishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{readyToPublishCount}</b> {readyToPublishCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.',\n },\n {\n readyToPublishCount: selectedEntriesWithNoErrorsCount,\n withErrorsCount: selectedEntriesWithErrorsCount,\n alreadyPublishedCount: selectedEntriesPublished,\n b: BoldChunk,\n }\n );\n };\n\n return (\n <>\n <Modal.Body>\n <Typography>{getFormattedCountMessage()}</Typography>\n <Box marginTop={5}>\n <SelectedEntriesTableContent\n isPublishing={isSubmittingForm}\n rowsToDisplay={rows}\n entriesToPublish={entriesToPublish}\n validationErrors={validationErrors}\n />\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={toggleModal} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Flex gap={2}>\n <Button onClick={refetch} variant=\"tertiary\" loading={isFetching}>\n {formatMessage({ id: 'app.utils.refresh', defaultMessage: 'Refresh' })}\n </Button>\n <Button\n onClick={toggleDialog}\n disabled={\n selectedEntries.length === 0 ||\n selectedEntries.length === selectedEntriesWithErrorsCount ||\n selectedEntriesPublished === selectedEntries.length ||\n isLoading\n }\n loading={isSubmittingForm}\n >\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n </Flex>\n </Modal.Footer>\n <ConfirmDialogPublishAll\n isOpen={isDialogOpen}\n onToggleDialog={toggleDialog}\n isConfirmButtonLoading={isSubmittingForm}\n onConfirm={handleConfirmBulkPublish}\n />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublishAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst PublishAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n // Publish button visibility\n const hasPublishPermission = useDocumentRBAC('unpublishAction', (state) => state.canPublish);\n const showPublishButton =\n hasPublishPermission && documents.some(({ status }) => status !== 'published');\n\n const setListViewSelectedDocuments = useTable('publishAction', (state) => state.selectRow);\n\n const refetchList = () => {\n contentManagerApi.util.invalidateTags([{ type: 'Document', id: `${model}_LIST` }]);\n };\n\n if (!showPublishButton) return null;\n\n return {\n actionType: 'publish',\n variant: 'tertiary',\n label: formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' }),\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: getTranslation('containers.ListPage.selectedEntriesModal.title'),\n defaultMessage: 'Publish entries',\n }),\n content: ({ onClose }) => {\n return (\n <Table.Root rows={documents} defaultSelectedRows={documents} headers={TABLE_HEADERS}>\n <SelectedEntriesModalContent\n listViewSelectedEntries={documents}\n toggleModal={() => {\n onClose();\n refetchList();\n }}\n setListViewSelectedDocuments={setListViewSelectedDocuments}\n model={model}\n />\n </Table.Root>\n );\n },\n onClose: () => {\n refetchList();\n },\n },\n };\n};\n\nexport { PublishAction, SelectedEntriesModalContent };\n","import * as React from 'react';\n\nimport {\n useStrapiApp,\n DescriptionComponentRenderer,\n useTable,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Box, ButtonProps, Flex, Typography } from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentRBAC } from '../../../../features/DocumentRBAC';\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../../hooks/useDocumentActions';\nimport { buildValidParams } from '../../../../utils/api';\nimport { getTranslation } from '../../../../utils/translations';\nimport {\n DialogOptions,\n DocumentActionButton,\n ModalOptions,\n NotificationOptions,\n} from '../../../EditView/components/DocumentActions';\n\nimport { PublishAction } from './PublishAction';\n\nimport type { BulkActionComponent, ContentManagerPlugin } from '../../../../content-manager';\n\ninterface BulkActionDescription {\n dialog?: DialogOptions | NotificationOptions | ModalOptions;\n disabled?: boolean;\n icon?: React.ReactNode;\n label: string;\n onClick?: (event: React.SyntheticEvent) => void;\n /**\n * @default 'default'\n */\n type?: 'icon' | 'default';\n /**\n * @default 'secondary'\n */\n variant?: ButtonProps['variant'];\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BulkActionsRenderer\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkActionsRenderer = () => {\n const plugins = useStrapiApp('BulkActionsRenderer', (state) => state.plugins);\n\n const { model, collectionType } = useDoc();\n const { selectedRows } = useTable('BulkActionsRenderer', (state) => state);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n model,\n collectionType,\n documents: selectedRows,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getBulkActions()}\n >\n {(actions) => actions.map((action) => <DocumentActionButton key={action.id} {...action} />)}\n </DescriptionComponentRenderer>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DefaultBulkActions\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n const { schema: contentType } = useDoc();\n const selectRow = useTable('DeleteAction', (state) => state.selectRow);\n const hasI18nEnabled = Boolean(contentType?.pluginOptions?.i18n);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const hasDeletePermission = useDocumentRBAC('deleteAction', (state) => state.canDelete);\n const { deleteMany: bulkDeleteAction } = useDocumentActions();\n const documentIds = documents.map(({ documentId }) => documentId);\n\n const handleConfirmBulkDelete = async () => {\n const res = await bulkDeleteAction({\n documentIds,\n model,\n params,\n });\n if (!('error' in res)) {\n selectRow([]);\n }\n };\n\n if (!hasDeletePermission) return null;\n\n return {\n variant: 'danger-light',\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: 'popUpWarning.bodyMessage.contentType.delete.all',\n defaultMessage: 'Are you sure you want to delete these entries?',\n })}\n </Typography>\n {hasI18nEnabled && (\n <Box textAlign=\"center\" padding={3}>\n <Typography textColor=\"danger500\">\n {formatMessage(\n {\n id: getTranslation('Settings.list.actions.deleteAdditionalInfos'),\n defaultMessage:\n 'This will delete the active locale versions <em>(from Internationalization)</em>',\n },\n {\n em: Emphasis,\n }\n )}\n </Typography>\n </Box>\n )}\n </Flex>\n ),\n onConfirm: handleConfirmBulkDelete,\n },\n };\n};\n\nDeleteAction.type = 'delete';\n\nconst UnpublishAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const selectRow = useTable('UnpublishAction', (state) => state.selectRow);\n const hasPublishPermission = useDocumentRBAC('unpublishAction', (state) => state.canPublish);\n const hasI18nEnabled = Boolean(schema?.pluginOptions?.i18n);\n const hasDraftAndPublishEnabled = Boolean(schema?.options?.draftAndPublish);\n const { unpublishMany: bulkUnpublishAction } = useDocumentActions();\n const documentIds = documents.map(({ documentId }) => documentId);\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const handleConfirmBulkUnpublish = async () => {\n const data = await bulkUnpublishAction({ documentIds, model, params });\n if (!('error' in data)) {\n selectRow([]);\n }\n };\n\n const showUnpublishButton =\n hasDraftAndPublishEnabled &&\n hasPublishPermission &&\n documents.some((entry) => entry.status === 'published' || entry.status === 'modified');\n\n if (!showUnpublishButton) return null;\n\n return {\n variant: 'tertiary',\n label: formatMessage({ id: 'app.utils.unpublish', defaultMessage: 'Unpublish' }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: 'popUpWarning.bodyMessage.contentType.unpublish.all',\n defaultMessage: 'Are you sure you want to unpublish these entries?',\n })}\n </Typography>\n {hasI18nEnabled && (\n <Box textAlign=\"center\" padding={3}>\n <Typography textColor=\"danger500\">\n {formatMessage(\n {\n id: getTranslation('Settings.list.actions.unpublishAdditionalInfos'),\n defaultMessage:\n 'This will unpublish the active locale versions <em>(from Internationalization)</em>',\n },\n {\n em: Emphasis,\n }\n )}\n </Typography>\n </Box>\n )}\n </Flex>\n ),\n confirmButton: formatMessage({\n id: 'app.utils.unpublish',\n defaultMessage: 'Unpublish',\n }),\n onConfirm: handleConfirmBulkUnpublish,\n },\n };\n};\n\nUnpublishAction.type = 'unpublish';\n\nconst Emphasis = (chunks: React.ReactNode) => (\n <Typography fontWeight=\"semiBold\" textColor=\"danger500\">\n {chunks}\n </Typography>\n);\n\nconst DEFAULT_BULK_ACTIONS: BulkActionComponent[] = [PublishAction, UnpublishAction, DeleteAction];\n\nexport { DEFAULT_BULK_ACTIONS, BulkActionsRenderer, Emphasis };\nexport type { BulkActionDescription };\n","import { Box, Flex, Typography } from '@strapi/design-system';\nimport { ChevronRight } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../../../utils/translations';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\n\ntype Reason = ProhibitedCloningField[1];\n\ninterface AutoCloneFailureModalBodyProps {\n prohibitedFields: ProhibitedCloningField[];\n}\n\nconst AutoCloneFailureModalBody = ({ prohibitedFields }: AutoCloneFailureModalBodyProps) => {\n const { formatMessage } = useIntl();\n\n const getDefaultErrorMessage = (reason: Reason) => {\n switch (reason) {\n case 'relation':\n return 'Duplicating the relation could remove it from the original entry.';\n case 'unique':\n return 'Identical values in a unique field are not allowed';\n default:\n return reason;\n }\n };\n\n return (\n <>\n <Typography variant=\"beta\">\n {formatMessage({\n id: getTranslation('containers.list.autoCloneModal.title'),\n defaultMessage: \"This entry can't be duplicated directly.\",\n })}\n </Typography>\n <Box marginTop={2}>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('containers.list.autoCloneModal.description'),\n defaultMessage:\n \"A new entry will be created with the same content, but you'll have to change the following fields to save it.\",\n })}\n </Typography>\n </Box>\n <Flex marginTop={6} gap={2} direction=\"column\" alignItems=\"stretch\">\n {prohibitedFields.map(([fieldPath, reason]) => (\n <Flex\n direction=\"column\"\n gap={2}\n alignItems=\"flex-start\"\n borderColor=\"neutral200\"\n hasRadius\n padding={6}\n key={fieldPath.join()}\n >\n <Flex direction=\"row\" tag=\"ol\">\n {fieldPath.map((pathSegment, index) => (\n <Typography fontWeight=\"semiBold\" tag=\"li\" key={index}>\n {pathSegment}\n {index !== fieldPath.length - 1 && (\n <ChevronRight\n fill=\"neutral500\"\n height=\"0.8rem\"\n width=\"0.8rem\"\n style={{ margin: '0 0.8rem' }}\n />\n )}\n </Typography>\n ))}\n </Flex>\n <Typography tag=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation(`containers.list.autoCloneModal.error.${reason}`),\n defaultMessage: getDefaultErrorMessage(reason),\n })}\n </Typography>\n </Flex>\n ))}\n </Flex>\n </>\n );\n};\n\nexport { AutoCloneFailureModalBody };\nexport type { AutoCloneFailureModalBodyProps };\n","import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Flex, LinkButton } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions()}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row action',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({ model, sourceId: documentId });\n\n if ('data' in res) {\n navigate(res.data.documentId);\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Flex justifyContent=\"space-between\">\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Flex>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n","/* eslint-disable check-file/filename-naming-convention */\nimport { INJECTION_ZONES } from './components/InjectionZone';\nimport { PLUGIN_ID } from './constants/plugin';\nimport { HistoryAction } from './history/components/HistoryAction';\nimport {\n DEFAULT_ACTIONS,\n type DocumentActionDescription,\n} from './pages/EditView/components/DocumentActions';\nimport {\n DEFAULT_HEADER_ACTIONS,\n type HeaderActionDescription,\n} from './pages/EditView/components/Header';\nimport { ActionsPanel, type PanelDescription } from './pages/EditView/components/Panels';\nimport {\n DEFAULT_BULK_ACTIONS,\n type BulkActionDescription,\n} from './pages/ListView/components/BulkActions/Actions';\nimport { DEFAULT_TABLE_ROW_ACTIONS } from './pages/ListView/components/TableActions';\n\nimport type { Document } from './hooks/useDocument';\nimport type { DocumentMetadata } from '../../shared/contracts/collection-types';\nimport type { DescriptionComponent, PluginConfig } from '@strapi/admin/strapi-admin';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Types\n * -----------------------------------------------------------------------------------------------*/\n\ntype DescriptionReducer<Config extends object> = (prev: Config[]) => Config[];\n\ninterface EditViewContext {\n /**\n * This will ONLY be null, if the content-type\n * does not have draft & published enabled.\n */\n activeTab: 'draft' | 'published' | null;\n /**\n * Will be either 'single-types' | 'collection-types'\n */\n collectionType: string;\n /**\n * this will be undefined if someone is creating an entry.\n */\n document?: Document;\n /**\n * this will be undefined if someone is creating an entry.\n */\n documentId?: string;\n /**\n * this will be undefined if someone is creating an entry.\n */\n meta?: DocumentMetadata;\n /**\n * The current content-type's model.\n */\n model: string;\n}\n\ninterface ListViewContext {\n /**\n * Will be either 'single-types' | 'collection-types'\n */\n collectionType: string;\n /**\n * The current selected documents in the table\n */\n documents: Document[];\n /**\n * The current content-type's model.\n */\n model: string;\n}\n\ninterface PanelComponentProps extends EditViewContext {}\n\ninterface PanelComponent extends DescriptionComponent<PanelComponentProps, PanelDescription> {\n /**\n * The defaults are added by Strapi only, if you're providing your own component,\n * you do not need to provide this.\n */\n type?: 'actions' | 'releases';\n}\n\ninterface DocumentActionProps extends EditViewContext {}\n\ninterface DocumentActionComponent\n extends DescriptionComponent<DocumentActionProps, DocumentActionDescription> {\n type?:\n | 'clone'\n | 'configure-the-view'\n | 'delete'\n | 'discard'\n | 'edit'\n | 'edit-the-model'\n | 'history'\n | 'publish'\n | 'unpublish'\n | 'update';\n}\n\ninterface HeaderActionProps extends EditViewContext {}\n\ninterface HeaderActionComponent\n extends DescriptionComponent<HeaderActionProps, HeaderActionDescription> {}\n\ninterface BulkActionComponentProps extends ListViewContext {}\n\ninterface BulkActionComponent\n extends DescriptionComponent<BulkActionComponentProps, BulkActionDescription> {\n type?: 'delete' | 'publish' | 'unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * ContentManager plugin\n * -----------------------------------------------------------------------------------------------*/\n\nclass ContentManagerPlugin {\n /**\n * The following properties are the stored ones provided by any plugins registering with\n * the content-manager. The function calls however, need to be called at runtime in the\n * application, so instead we collate them and run them later with the complete list incl.\n * ones already registered & the context of the view.\n */\n bulkActions: BulkActionComponent[] = [...DEFAULT_BULK_ACTIONS];\n documentActions: DocumentActionComponent[] = [\n ...DEFAULT_ACTIONS,\n ...DEFAULT_TABLE_ROW_ACTIONS,\n ...DEFAULT_HEADER_ACTIONS,\n ];\n editViewSidePanels: PanelComponent[] = [ActionsPanel];\n headerActions: HeaderActionComponent[] = [];\n\n constructor() {}\n\n addEditViewSidePanel(panels: DescriptionReducer<PanelComponent>): void;\n addEditViewSidePanel(panels: PanelComponent[]): void;\n addEditViewSidePanel(panels: DescriptionReducer<PanelComponent> | PanelComponent[]) {\n if (Array.isArray(panels)) {\n this.editViewSidePanels = [...this.editViewSidePanels, ...panels];\n } else if (typeof panels === 'function') {\n this.editViewSidePanels = panels(this.editViewSidePanels);\n } else {\n throw new Error(\n `Expected the \\`panels\\` passed to \\`addEditViewSidePanel\\` to be an array or a function, but received ${getPrintableType(\n panels\n )}`\n );\n }\n }\n\n addDocumentAction(actions: DescriptionReducer<DocumentActionComponent>): void;\n addDocumentAction(actions: DocumentActionComponent[]): void;\n addDocumentAction(\n actions: DescriptionReducer<DocumentActionComponent> | DocumentActionComponent[]\n ) {\n if (Array.isArray(actions)) {\n this.documentActions = [...this.documentActions, ...actions];\n } else if (typeof actions === 'function') {\n this.documentActions = actions(this.documentActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addDocumentAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n addDocumentHeaderAction(actions: DescriptionReducer<HeaderActionComponent>): void;\n addDocumentHeaderAction(actions: HeaderActionComponent[]): void;\n addDocumentHeaderAction(\n actions: DescriptionReducer<HeaderActionComponent> | HeaderActionComponent[]\n ) {\n if (Array.isArray(actions)) {\n this.headerActions = [...this.headerActions, ...actions];\n } else if (typeof actions === 'function') {\n this.headerActions = actions(this.headerActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addDocumentHeaderAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n addBulkAction(actions: DescriptionReducer<BulkActionComponent>): void;\n addBulkAction(actions: BulkActionComponent[]): void;\n addBulkAction(actions: DescriptionReducer<BulkActionComponent> | BulkActionComponent[]) {\n if (Array.isArray(actions)) {\n this.bulkActions = [...this.bulkActions, ...actions];\n } else if (typeof actions === 'function') {\n this.bulkActions = actions(this.bulkActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addBulkAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n get config() {\n return {\n id: PLUGIN_ID,\n name: 'Content Manager',\n injectionZones: INJECTION_ZONES,\n apis: {\n addBulkAction: this.addBulkAction.bind(this),\n addDocumentAction: this.addDocumentAction.bind(this),\n addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),\n addEditViewSidePanel: this.addEditViewSidePanel.bind(this),\n getBulkActions: () => this.bulkActions,\n getDocumentActions: () => this.documentActions,\n getEditViewSidePanels: () => this.editViewSidePanels,\n getHeaderActions: () => this.headerActions,\n },\n } satisfies PluginConfig;\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * getPrintableType\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Gets the human-friendly printable type name for the given value, for instance it will yield\n * `array` instead of `object`, as the native `typeof` operator would do.\n */\nconst getPrintableType = (value: unknown): string => {\n const nativeType = typeof value;\n\n if (nativeType === 'object') {\n if (value === null) return 'null';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Object && value.constructor.name !== 'Object') {\n return value.constructor.name;\n }\n }\n\n return nativeType;\n};\n\nexport { ContentManagerPlugin };\nexport type {\n EditViewContext,\n ListViewContext,\n BulkActionComponent,\n BulkActionComponentProps,\n BulkActionDescription,\n DescriptionComponent,\n DescriptionReducer,\n PanelComponentProps,\n PanelComponent,\n PanelDescription,\n DocumentActionComponent,\n DocumentActionDescription,\n DocumentActionProps,\n HeaderActionComponent,\n HeaderActionDescription,\n HeaderActionProps,\n};\n","import { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { ClockCounterClockwise } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport type { DocumentActionComponent } from '../../content-manager';\n\nconst HistoryAction: DocumentActionComponent = ({ model, document }) => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const navigate = useNavigate();\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n if (!window.strapi.features.isEnabled('cms-content-history')) {\n return null;\n }\n\n return {\n icon: <ClockCounterClockwise />,\n label: formatMessage({\n id: 'content-manager.history.document-action',\n defaultMessage: 'Content History',\n }),\n onClick: () => navigate({ pathname: 'history', search: pluginsQueryParams }),\n disabled:\n /**\n * The user is creating a new document.\n * It hasn't been saved yet, so there's no history to go to\n */\n !document ||\n /**\n * The document has been created but the current dimension has never been saved.\n * For example, the user is creating a new locale in an existing document,\n * so there's no history for the document in that locale\n */\n !document.id ||\n /**\n * History is only available for content types created by the user.\n * These have the `api::` prefix, as opposed to the ones created by Strapi or plugins,\n * which start with `admin::` or `plugin::`\n */\n !model.startsWith('api::'),\n position: 'header',\n };\n};\n\nHistoryAction.type = 'history';\n\nexport { HistoryAction };\n","/* eslint-disable check-file/no-index */\n\nimport { type ContentManagerPlugin } from '../content-manager';\n\nimport { HistoryAction } from './components/HistoryAction';\n\nimport type { StrapiApp } from '@strapi/admin/strapi-admin';\nimport type { Plugin } from '@strapi/types';\n\nconst historyAdmin: Partial<Plugin.Config.AdminInput> = {\n bootstrap(app: StrapiApp) {\n const { addDocumentAction } = app.getPlugin('content-manager').apis as {\n addDocumentAction: ContentManagerPlugin['addDocumentAction'];\n };\n\n /**\n * Register the document action here using the public API, and not by setting the action in the\n * Content Manager directly, because this API lets us control the order of the actions array.\n * We want history to be the last non-delete action in the array.\n */\n addDocumentAction((actions) => {\n const indexOfDeleteAction = actions.findIndex((action) => action.type === 'delete');\n actions.splice(indexOfDeleteAction, 0, HistoryAction);\n return actions;\n });\n },\n};\n\nexport { historyAdmin };\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { GetInitData } from '../../../shared/contracts/init';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\ninterface AppState {\n collectionTypeLinks: ContentManagerLink[];\n components: GetInitData.Response['data']['components'];\n fieldSizes: GetInitData.Response['data']['fieldSizes'];\n models: GetInitData.Response['data']['contentTypes'];\n singleTypeLinks: ContentManagerLink[];\n isLoading: boolean;\n}\n\nconst initialState: AppState = {\n collectionTypeLinks: [],\n components: [],\n fieldSizes: {},\n models: [],\n singleTypeLinks: [],\n isLoading: true,\n};\n\nconst appSlice = createSlice({\n name: 'app',\n initialState,\n reducers: {\n setInitialData(\n state,\n action: PayloadAction<{\n authorizedCollectionTypeLinks: AppState['collectionTypeLinks'];\n authorizedSingleTypeLinks: AppState['singleTypeLinks'];\n components: AppState['components'];\n contentTypeSchemas: AppState['models'];\n fieldSizes: AppState['fieldSizes'];\n }>\n ) {\n const {\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n components,\n contentTypeSchemas,\n fieldSizes,\n } = action.payload;\n state.collectionTypeLinks = authorizedCollectionTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n state.singleTypeLinks = authorizedSingleTypeLinks.filter(({ isDisplayed }) => isDisplayed);\n state.components = components;\n state.models = contentTypeSchemas;\n state.fieldSizes = fieldSizes;\n state.isLoading = false;\n },\n },\n});\n\nconst { actions, reducer } = appSlice;\nconst { setInitialData } = actions;\n\nexport { reducer, setInitialData };\nexport type { AppState };\n","import { combineReducers } from '@reduxjs/toolkit';\n\nimport { reducer as appReducer } from './app';\n\nconst reducer = combineReducers({\n app: appReducer,\n});\n\ntype State = ReturnType<typeof reducer>;\n\nexport { reducer };\nexport type { State };\n","import { Feather } from '@strapi/icons';\n\nimport { PLUGIN_ID } from './constants/plugin';\nimport { ContentManagerPlugin } from './content-manager';\nimport { historyAdmin } from './history';\nimport { reducer } from './modules/reducers';\nimport { routes } from './router';\nimport { prefixPluginTranslations } from './utils/translations';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n register(app: any) {\n const cm = new ContentManagerPlugin();\n\n app.addReducers({\n [PLUGIN_ID]: reducer,\n });\n\n app.addMenuLink({\n to: PLUGIN_ID,\n icon: Feather,\n intlLabel: {\n id: `content-manager.plugin.name`,\n defaultMessage: 'Content Manager',\n },\n permissions: [],\n position: 1,\n });\n\n app.router.addRoute({\n path: 'content-manager/*',\n lazy: async () => {\n const { Layout } = await import('./layout');\n\n return {\n Component: Layout,\n };\n },\n children: routes,\n });\n\n app.registerPlugin(cm.config);\n },\n bootstrap(app: any) {\n if (typeof historyAdmin.bootstrap === 'function') {\n historyAdmin.bootstrap(app);\n }\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, PLUGIN_ID),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\nexport * from './exports';\n"],"names":["contentTypePermissions","index","attributes","contentType","components","error","routes","historyRoutes","actions","action","PublishAction","canPublish","canCreate","canUpdate","useGetDraftRelationCountQuery","modified","setSubmitting","isSubmitting","resetForm","UnpublishAction","DeleteAction","id","BoldChunk","data","validationErrors","rows","canRead","prohibitedFields","reducer","appReducer"],"mappings":"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"}
|