@strapi/upload 5.59.0 → 5.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.js +434 -0
- package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.mjs +432 -0
- package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.mjs.map +1 -0
- package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.js +91 -0
- package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.mjs +89 -0
- package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.mjs.map +1 -0
- package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.js +29 -0
- package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.mjs +27 -0
- package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.mjs.map +1 -0
- package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.js +178 -0
- package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.mjs +175 -0
- package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.mjs.map +1 -0
- package/dist/admin/components/AssetPickerDialog/SortableSelection.js +143 -0
- package/dist/admin/components/AssetPickerDialog/SortableSelection.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/SortableSelection.mjs +141 -0
- package/dist/admin/components/AssetPickerDialog/SortableSelection.mjs.map +1 -0
- package/dist/admin/components/AssetPickerDialog/pickerSelection.js +49 -0
- package/dist/admin/components/AssetPickerDialog/pickerSelection.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/pickerSelection.mjs +41 -0
- package/dist/admin/components/AssetPickerDialog/pickerSelection.mjs.map +1 -0
- package/dist/admin/components/Drawer.js +12 -7
- package/dist/admin/components/Drawer.js.map +1 -1
- package/dist/admin/components/Drawer.mjs +12 -7
- package/dist/admin/components/Drawer.mjs.map +1 -1
- package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.js +188 -0
- package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.js.map +1 -0
- package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.mjs +186 -0
- package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js +9 -4
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs +9 -4
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AssetCard.js +240 -0
- package/dist/admin/components/MediaLibraryInput/AssetCard.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetCard.mjs +237 -0
- package/dist/admin/components/MediaLibraryInput/AssetCard.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetCarousel.js +161 -0
- package/dist/admin/components/MediaLibraryInput/AssetCarousel.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetCarousel.mjs +159 -0
- package/dist/admin/components/MediaLibraryInput/AssetCarousel.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.js +76 -49
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs +77 -50
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AssetPreview.js +109 -0
- package/dist/admin/components/MediaLibraryInput/AssetPreview.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetPreview.mjs +106 -0
- package/dist/admin/components/MediaLibraryInput/AssetPreview.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetRow.js +146 -79
- package/dist/admin/components/MediaLibraryInput/AssetRow.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AssetRow.mjs +148 -82
- package/dist/admin/components/MediaLibraryInput/AssetRow.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/FieldControls.js +32 -0
- package/dist/admin/components/MediaLibraryInput/FieldControls.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/FieldControls.mjs +29 -0
- package/dist/admin/components/MediaLibraryInput/FieldControls.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +163 -111
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +162 -114
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/UploadProgressBar.js +42 -0
- package/dist/admin/components/MediaLibraryInput/UploadProgressBar.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/UploadProgressBar.mjs +40 -0
- package/dist/admin/components/MediaLibraryInput/UploadProgressBar.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/openAssetDetails.js +46 -0
- package/dist/admin/components/MediaLibraryInput/openAssetDetails.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/openAssetDetails.mjs +43 -0
- package/dist/admin/components/MediaLibraryInput/openAssetDetails.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/useFieldUploads.js +122 -0
- package/dist/admin/components/MediaLibraryInput/useFieldUploads.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/useFieldUploads.mjs +120 -0
- package/dist/admin/components/MediaLibraryInput/useFieldUploads.mjs.map +1 -0
- package/dist/admin/components/UploadProgressDialog.js +2 -1
- package/dist/admin/components/UploadProgressDialog.js.map +1 -1
- package/dist/admin/components/UploadProgressDialog.mjs +2 -1
- package/dist/admin/components/UploadProgressDialog.mjs.map +1 -1
- package/dist/admin/hooks/useMediaLibraryPermissions.js +12 -2
- package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -1
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs +12 -2
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -1
- package/dist/admin/index.js +10 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +10 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/Assets/AssetsPage.js +14 -303
- package/dist/admin/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/pages/Assets/AssetsPage.mjs +13 -282
- package/dist/admin/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +2 -2
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +181 -65
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +184 -69
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/AssetPreview.mjs +1 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.js +142 -31
- package/dist/admin/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs +145 -34
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsSearchInput.js +43 -2
- package/dist/admin/pages/Assets/components/AssetsSearchInput.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs +45 -4
- package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsTable.js +58 -34
- package/dist/admin/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsTable.mjs +60 -36
- package/dist/admin/pages/Assets/components/AssetsTable.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsView.js +145 -0
- package/dist/admin/pages/Assets/components/AssetsView.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetsView.mjs +143 -0
- package/dist/admin/pages/Assets/components/AssetsView.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/BulkActionsBar.mjs +1 -1
- package/dist/admin/pages/Assets/components/BusyOverlay.mjs +1 -1
- package/dist/admin/pages/Assets/components/Dnd/DragOverlayChip.mjs +1 -1
- package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.js +40 -0
- package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.mjs +38 -0
- package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/assetSortable.js +29 -0
- package/dist/admin/pages/Assets/components/Dnd/assetSortable.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/assetSortable.mjs +24 -0
- package/dist/admin/pages/Assets/components/Dnd/assetSortable.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/dndIds.js +5 -0
- package/dist/admin/pages/Assets/components/Dnd/dndIds.js.map +1 -1
- package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs +5 -1
- package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js +41 -13
- package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
- package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs +41 -13
- package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/FilterBadges.mjs +2 -2
- package/dist/admin/pages/Assets/components/FilterMenu.mjs +2 -2
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js +274 -55
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs +277 -59
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.js +32 -0
- package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.js.map +1 -0
- package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.mjs +29 -0
- package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/ViewToggle.js +126 -0
- package/dist/admin/pages/Assets/components/ViewToggle.js.map +1 -0
- package/dist/admin/pages/Assets/components/ViewToggle.mjs +104 -0
- package/dist/admin/pages/Assets/components/ViewToggle.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useAssetSearch.js +2 -2
- package/dist/admin/pages/Assets/hooks/useAssetSearch.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs +2 -2
- package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs.map +1 -1
- package/dist/admin/pages/Assets/hooks/useAssetSelection.js +19 -1
- package/dist/admin/pages/Assets/hooks/useAssetSelection.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs +20 -3
- package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
- package/dist/admin/pages/Assets/hooks/useAssetsList.js +87 -0
- package/dist/admin/pages/Assets/hooks/useAssetsList.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useAssetsList.mjs +85 -0
- package/dist/admin/pages/Assets/hooks/useAssetsList.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useBusyAssets.mjs +1 -1
- package/dist/admin/pages/Assets/hooks/useFolderNavigation.js +2 -1
- package/dist/admin/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs +3 -2
- package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
- package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js +2 -6
- package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs +2 -6
- package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs.map +1 -1
- package/dist/admin/pages/Assets/hooks/useListFilters.js +2 -1
- package/dist/admin/pages/Assets/hooks/useListFilters.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useListFilters.mjs +3 -2
- package/dist/admin/pages/Assets/hooks/useListFilters.mjs.map +1 -1
- package/dist/admin/pages/Assets/hooks/useListQueryParams.js +80 -0
- package/dist/admin/pages/Assets/hooks/useListQueryParams.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListQueryParams.mjs +77 -0
- package/dist/admin/pages/Assets/hooks/useListQueryParams.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListSettings.js +32 -0
- package/dist/admin/pages/Assets/hooks/useListSettings.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListSettings.mjs +29 -0
- package/dist/admin/pages/Assets/hooks/useListSettings.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListSort.js +2 -1
- package/dist/admin/pages/Assets/hooks/useListSort.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useListSort.mjs +3 -2
- package/dist/admin/pages/Assets/hooks/useListSort.mjs.map +1 -1
- package/dist/admin/services/api.js +92 -7
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +91 -9
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/src/components/AssetPickerDialog/AssetPickerDialog.d.ts +19 -0
- package/dist/admin/src/components/AssetPickerDialog/FolderBreadcrumbs.d.ts +10 -0
- package/dist/admin/src/components/AssetPickerDialog/MediaLibraryPickerDialog.d.ts +19 -0
- package/dist/admin/src/components/AssetPickerDialog/PickerSelectionProvider.d.ts +28 -0
- package/dist/admin/src/components/AssetPickerDialog/SortableSelection.d.ts +12 -0
- package/dist/admin/src/components/AssetPickerDialog/pickerSelection.d.ts +26 -0
- package/dist/admin/src/components/Drawer.d.ts +8 -0
- package/dist/admin/src/components/EditorFileDropZone/EditorFileDropZone.d.ts +21 -0
- package/dist/admin/src/components/MediaLibraryInput/AddAssetMenu.d.ts +7 -1
- package/dist/admin/src/components/MediaLibraryInput/AssetCard.d.ts +25 -0
- package/dist/admin/src/components/MediaLibraryInput/AssetCarousel.d.ts +16 -0
- package/dist/admin/src/components/MediaLibraryInput/AssetDropZone.d.ts +11 -3
- package/dist/admin/src/components/MediaLibraryInput/AssetPreview.d.ts +17 -0
- package/dist/admin/src/components/MediaLibraryInput/AssetRow.d.ts +13 -3
- package/dist/admin/src/components/MediaLibraryInput/FieldControls.d.ts +19 -0
- package/dist/admin/src/components/MediaLibraryInput/MediaLibraryInput.d.ts +3 -1
- package/dist/admin/src/components/MediaLibraryInput/UploadProgressBar.d.ts +7 -0
- package/dist/admin/src/components/MediaLibraryInput/openAssetDetails.d.ts +10 -0
- package/dist/admin/src/components/MediaLibraryInput/useFieldUploads.d.ts +31 -0
- package/dist/admin/src/hooks/useMediaLibraryPermissions.d.ts +2 -0
- package/dist/admin/src/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +41 -5
- package/dist/admin/src/pages/Assets/components/AssetsGrid.d.ts +3 -1
- package/dist/admin/src/pages/Assets/components/AssetsSearchInput.d.ts +11 -1
- package/dist/admin/src/pages/Assets/components/AssetsView.d.ts +29 -0
- package/dist/admin/src/pages/Assets/components/Dnd/ReorderHandle.d.ts +12 -0
- package/dist/admin/src/pages/Assets/components/Dnd/assetSortable.d.ts +37 -0
- package/dist/admin/src/pages/Assets/components/Dnd/dndIds.d.ts +5 -0
- package/dist/admin/src/pages/Assets/components/Dnd/useAssetDnd.d.ts +23 -2
- package/dist/admin/src/pages/Assets/components/FolderTree/FolderTree.d.ts +1 -0
- package/dist/admin/src/pages/Assets/components/FolderTree/collapsedBranch.d.ts +21 -0
- package/dist/admin/src/pages/Assets/components/ViewToggle.d.ts +8 -0
- package/dist/admin/src/pages/Assets/hooks/useAssetSelection.d.ts +26 -0
- package/dist/admin/src/pages/Assets/hooks/useAssetsList.d.ts +30 -0
- package/dist/admin/src/pages/Assets/hooks/useIsAssetDetailsOpen.d.ts +2 -6
- package/dist/admin/src/pages/Assets/hooks/useListQueryParams.d.ts +27 -0
- package/dist/admin/src/pages/Assets/hooks/useListSettings.d.ts +29 -0
- package/dist/admin/src/services/api.d.ts +24 -1
- package/dist/admin/src/store/uploadProgress.d.ts +14 -1
- package/dist/admin/src/utils/findFolderPath.d.ts +6 -0
- package/dist/admin/src/utils/isAllowedAssetType.d.ts +14 -0
- package/dist/admin/store/uploadProgress.js +30 -3
- package/dist/admin/store/uploadProgress.js.map +1 -1
- package/dist/admin/store/uploadProgress.mjs +29 -4
- package/dist/admin/store/uploadProgress.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +24 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +24 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/findFolderPath.js +26 -0
- package/dist/admin/utils/findFolderPath.js.map +1 -0
- package/dist/admin/utils/findFolderPath.mjs +24 -0
- package/dist/admin/utils/findFolderPath.mjs.map +1 -0
- package/dist/admin/utils/isAllowedAssetType.js +33 -0
- package/dist/admin/utils/isAllowedAssetType.js.map +1 -0
- package/dist/admin/utils/isAllowedAssetType.mjs +31 -0
- package/dist/admin/utils/isAllowedAssetType.mjs.map +1 -0
- package/dist/server/audit-logs.js +264 -0
- package/dist/server/audit-logs.js.map +1 -0
- package/dist/server/audit-logs.mjs +255 -0
- package/dist/server/audit-logs.mjs.map +1 -0
- package/dist/server/bootstrap.js +4 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +4 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/admin-folder-file.js +23 -1
- package/dist/server/controllers/admin-folder-file.js.map +1 -1
- package/dist/server/controllers/admin-folder-file.mjs +23 -1
- package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
- package/dist/server/controllers/admin-settings.js +5 -1
- package/dist/server/controllers/admin-settings.js.map +1 -1
- package/dist/server/controllers/admin-settings.mjs +5 -1
- package/dist/server/controllers/admin-settings.mjs.map +1 -1
- package/dist/server/services/folder.js +48 -1
- package/dist/server/services/folder.js.map +1 -1
- package/dist/server/services/folder.mjs +48 -1
- package/dist/server/services/folder.mjs.map +1 -1
- package/dist/server/services/image-manipulation.js +14 -7
- package/dist/server/services/image-manipulation.js.map +1 -1
- package/dist/server/services/image-manipulation.mjs +14 -7
- package/dist/server/services/image-manipulation.mjs.map +1 -1
- package/dist/server/services/upload.js +100 -16
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs +102 -18
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/audit-logs.d.ts +142 -0
- package/dist/server/src/audit-logs.d.ts.map +1 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-folder-file.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -4
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -1
- package/dist/server/src/services/extensions/utils.d.ts +11 -11
- package/dist/server/src/services/folder.d.ts.map +1 -1
- package/dist/server/src/services/image-manipulation.d.ts +4 -4
- package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +63 -12
- package/dist/server/src/types.d.ts.map +1 -1
- package/package.json +11 -16
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js +0 -45
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js.map +0 -1
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs +0 -43
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs.map +0 -1
- package/dist/admin/src/components/MediaLibraryInput/NoLibraryAccessDialog.d.ts +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetRow.mjs","sources":["../../../../admin/src/components/MediaLibraryInput/AssetRow.tsx"],"sourcesContent":["import { Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Link, Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../enums';\nimport { prefixFileUrlWithBackendUrl } from '../../utils/files';\nimport { getAssetIcon } from '../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../utils/translations';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst Row = styled(Flex)`\n background: ${({ theme }) => theme.colors.neutral0};\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n`;\n\nconst Thumbnail = styled(Flex)`\n width: 3.2rem;\n height: 3.2rem;\n flex-shrink: 0;\n overflow: hidden;\n border-radius: 4px;\n color: ${({ theme }) => theme.colors.neutral500};\n background: ${({ theme }) => theme.colors.neutral100};\n`;\n\nconst ThumbnailImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst Name = styled(Typography)`\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\ninterface AssetThumbnailProps {\n asset: File;\n}\n\nconst AssetThumbnail = ({ asset }: AssetThumbnailProps) => {\n const { alternativeText, ext, formats, mime, url, updatedAt, isLocal, isUrlSigned } = asset;\n\n if (mime?.includes(ASSET_TYPES.Image)) {\n // Same two rules the grid preview applies: a `updatedAt` cache-buster so a\n // replaced asset stops serving its old thumbnail, skipped on signed URLs\n // because an extra param invalidates the signature (#26581).\n const rawUrl =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n const cacheKey = updatedAt && !isUrlSigned ? new Date(updatedAt).getTime() : undefined;\n const src =\n rawUrl && cacheKey !== undefined\n ? `${rawUrl}${rawUrl.includes('?') ? '&' : '?'}v=${cacheKey}`\n : rawUrl;\n\n if (src) {\n return (\n <Thumbnail>\n <ThumbnailImage\n src={src}\n alt={alternativeText || ''}\n crossOrigin={!isLocal && isUrlSigned ? 'anonymous' : undefined}\n draggable={false}\n />\n </Thumbnail>\n );\n }\n }\n\n const DocIcon = getAssetIcon(mime, ext);\n\n return (\n <Thumbnail justifyContent=\"center\" alignItems=\"center\">\n <DocIcon width={20} height={20} />\n </Thumbnail>\n );\n};\n\ninterface AssetRowProps {\n asset: File;\n disabled?: boolean;\n onCopyLink: (asset: File) => void;\n onEdit?: (asset: File) => void;\n onRemove: (asset: File) => void;\n}\n\n/**\n * One asset already held by the field. The uploading and failed variants the\n * design also specifies are not here yet — while an upload runs, the global\n * progress dialog is what reports it.\n */\nexport const AssetRow = ({\n asset,\n disabled = false,\n onCopyLink,\n onEdit,\n onRemove,\n}: AssetRowProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Row\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n paddingLeft={3}\n paddingRight={3}\n paddingTop={2}\n paddingBottom={2}\n >\n <Flex alignItems=\"center\" gap={3} minWidth={0}>\n <AssetThumbnail asset={asset} />\n <Name textColor=\"neutral800\">{asset.name}</Name>\n </Flex>\n <Flex tag=\"span\" gap={1} shrink={0}>\n <IconButton\n variant=\"ghost\"\n onClick={() => onCopyLink(asset)}\n label={formatMessage(\n {\n id: getTranslationKey('content-manager.input.actions.copy-link'),\n defaultMessage: 'Copy link to {name}',\n },\n { name: asset.name }\n )}\n >\n <Link />\n </IconButton>\n {onEdit && (\n <IconButton\n variant=\"ghost\"\n disabled={disabled}\n onClick={() => onEdit(asset)}\n label={formatMessage(\n {\n id: getTranslationKey('content-manager.input.actions.edit'),\n defaultMessage: 'Edit {name}',\n },\n { name: asset.name }\n )}\n >\n <Pencil />\n </IconButton>\n )}\n <IconButton\n variant=\"ghost\"\n disabled={disabled}\n onClick={() => onRemove(asset)}\n label={formatMessage(\n {\n id: getTranslationKey('content-manager.input.actions.remove'),\n defaultMessage: 'Remove {name}',\n },\n { name: asset.name }\n )}\n >\n <Trash />\n </IconButton>\n </Flex>\n </Row>\n );\n};\n"],"names":["Row","styled","Flex","theme","colors","neutral0","neutral200","borderRadius","Thumbnail","neutral500","neutral100","ThumbnailImage","img","Name","Typography","AssetThumbnail","asset","alternativeText","ext","formats","mime","url","updatedAt","isLocal","isUrlSigned","includes","ASSET_TYPES","Image","rawUrl","prefixFileUrlWithBackendUrl","thumbnail","cacheKey","Date","getTime","undefined","src","_jsx","alt","crossOrigin","draggable","DocIcon","getAssetIcon","justifyContent","alignItems","width","height","AssetRow","disabled","onCopyLink","onEdit","onRemove","formatMessage","useIntl","_jsxs","gap","paddingLeft","paddingRight","paddingTop","paddingBottom","minWidth","textColor","name","tag","shrink","IconButton","variant","onClick","label","id","getTranslationKey","defaultMessage","Link","Pencil","Trash"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AssetRow.mjs","sources":["../../../../admin/src/components/MediaLibraryInput/AssetRow.tsx"],"sourcesContent":["import { Box, Button, Flex, Typography } from '@strapi/design-system';\nimport { ArrowClockwise, Cross, Link, Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTranslationKey } from '../../utils/translations';\n\nimport { AssetPreview, UploadPreview } from './AssetPreview';\nimport { GhostIconButton } from './FieldControls';\nimport { UploadProgressBar } from './UploadProgressBar';\n\nimport type { FieldUpload } from './useFieldUploads';\nimport type { File } from '../../../../shared/contracts/files';\n\ntype RowTone = 'neutral' | 'primary' | 'danger';\n\nconst ROW_COLORS = {\n neutral: { background: 'neutral100', border: 'neutral200' },\n primary: { background: 'primary100', border: 'primary200' },\n danger: { background: 'danger100', border: 'danger200' },\n} as const;\n\nconst Row = styled(Flex)<{ $tone: RowTone }>`\n min-height: 7.2rem;\n background: ${({ theme, $tone }) => theme.colors[ROW_COLORS[$tone].background]};\n border: 1px solid ${({ theme, $tone }) => theme.colors[ROW_COLORS[$tone].border]};\n border-radius: ${({ theme }) => theme.borderRadius};\n`;\n\nconst Name = styled(Typography)`\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\ninterface RowFrameProps {\n tone: RowTone;\n children: React.ReactNode;\n}\n\nconst RowFrame = ({ tone, children }: RowFrameProps) => (\n <Row $tone={tone} alignItems=\"center\" gap={4} padding={4}>\n {children}\n </Row>\n);\n\ninterface AssetRowProps {\n asset: File;\n disabled?: boolean;\n onCopyLink: (asset: File) => void;\n onEdit?: (asset: File) => void;\n onRemove: (asset: File) => void;\n}\n\n/**\n * The asset a single-value field holds.\n */\nexport const AssetRow = ({\n asset,\n disabled = false,\n onCopyLink,\n onEdit,\n onRemove,\n}: AssetRowProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <RowFrame tone=\"neutral\">\n <AssetPreview asset={asset} size=\"S\" />\n <Name textColor=\"neutral800\" flex={1}>\n {asset.name}\n </Name>\n <Flex gap={2} shrink={0}>\n <GhostIconButton\n onClick={() => onCopyLink(asset)}\n label={formatMessage(\n {\n id: getTranslationKey('content-manager.input.actions.copy-link'),\n defaultMessage: 'Copy link to {name}',\n },\n { name: asset.name }\n )}\n >\n <Link />\n </GhostIconButton>\n {onEdit && (\n <GhostIconButton\n disabled={disabled}\n onClick={() => onEdit(asset)}\n label={formatMessage(\n {\n id: getTranslationKey('content-manager.input.actions.edit'),\n defaultMessage: 'Edit {name}',\n },\n { name: asset.name }\n )}\n >\n <Pencil />\n </GhostIconButton>\n )}\n <GhostIconButton\n disabled={disabled}\n onClick={() => onRemove(asset)}\n label={formatMessage(\n {\n id: getTranslationKey('content-manager.input.actions.remove'),\n defaultMessage: 'Remove {name}',\n },\n { name: asset.name }\n )}\n >\n <Trash />\n </GhostIconButton>\n </Flex>\n </RowFrame>\n );\n};\n\ninterface UploadRowProps {\n upload: FieldUpload;\n disabled?: boolean;\n onCancel: (upload: FieldUpload) => void;\n onRetry: (upload: FieldUpload) => void;\n onRemove: (upload: FieldUpload) => void;\n}\n\n/**\n * A file a single-value field is uploading, or failed to upload.\n */\nexport const UploadRow = ({\n upload,\n disabled = false,\n onCancel,\n onRetry,\n onRemove,\n}: UploadRowProps) => {\n const { formatMessage } = useIntl();\n const canRetry = upload.isInStore || upload.sourceFile !== undefined;\n\n if (upload.status === 'failed') {\n return (\n <RowFrame tone=\"danger\">\n <UploadPreview file={upload.sourceFile} size=\"S\" />\n <Name textColor=\"danger600\" flex={1}>\n {upload.name}\n </Name>\n <Flex gap={2} shrink={0}>\n {canRetry && (\n <Button\n variant=\"ghost\"\n startIcon={<ArrowClockwise />}\n disabled={disabled}\n onClick={() => onRetry(upload)}\n >\n {formatMessage({\n id: getTranslationKey('upload.progress.retry'),\n defaultMessage: 'Retry',\n })}\n </Button>\n )}\n <Button\n variant=\"danger-light\"\n startIcon={<Trash />}\n disabled={disabled}\n onClick={() => onRemove(upload)}\n >\n {formatMessage({\n id: getTranslationKey('content-manager.input.actions.remove-failed'),\n defaultMessage: 'Remove',\n })}\n </Button>\n </Flex>\n </RowFrame>\n );\n }\n\n const uploadingLabel = formatMessage({\n id: getTranslationKey('upload.progress.file.uploading'),\n defaultMessage: 'Uploading...',\n });\n\n return (\n <RowFrame tone=\"primary\">\n <UploadPreview file={upload.sourceFile} size=\"S\" />\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} flex={1} minWidth={0}>\n <Flex justifyContent=\"space-between\" gap={4}>\n <Name textColor=\"neutral800\">{upload.name}</Name>\n <Box shrink={0}>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {uploadingLabel}\n </Typography>\n </Box>\n </Flex>\n <UploadProgressBar progress={upload.progress} label={uploadingLabel} />\n </Flex>\n <Box shrink={0}>\n <GhostIconButton\n onClick={() => onCancel(upload)}\n label={formatMessage(\n {\n id: getTranslationKey('content-manager.input.actions.cancel'),\n defaultMessage: 'Cancel upload of {name}',\n },\n { name: upload.name }\n )}\n >\n <Cross />\n </GhostIconButton>\n </Box>\n </RowFrame>\n );\n};\n"],"names":["ROW_COLORS","neutral","background","border","primary","danger","Row","styled","Flex","theme","$tone","colors","borderRadius","Name","Typography","RowFrame","tone","children","_jsx","alignItems","gap","padding","AssetRow","asset","disabled","onCopyLink","onEdit","onRemove","formatMessage","useIntl","_jsxs","AssetPreview","size","textColor","flex","name","shrink","GhostIconButton","onClick","label","id","getTranslationKey","defaultMessage","Link","Pencil","Trash","UploadRow","upload","onCancel","onRetry","canRetry","isInStore","sourceFile","undefined","status","UploadPreview","file","Button","variant","startIcon","ArrowClockwise","uploadingLabel","direction","minWidth","justifyContent","Box","UploadProgressBar","progress","Cross"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var designSystem = require('@strapi/design-system');
|
|
4
|
+
var styledComponents = require('styled-components');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A ghost `IconButton` that stays a bare icon when disabled. The design system
|
|
8
|
+
* paints every disabled button, ghost included, as a bordered grey plate.
|
|
9
|
+
*/ const GhostIconButton = styledComponents.styled(designSystem.IconButton).attrs({
|
|
10
|
+
variant: 'ghost'
|
|
11
|
+
})`
|
|
12
|
+
&&[aria-disabled='true'] {
|
|
13
|
+
border-color: transparent;
|
|
14
|
+
background: transparent;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
&&[aria-disabled='true'] svg path {
|
|
18
|
+
fill: ${({ theme })=>theme.colors.neutral300};
|
|
19
|
+
}
|
|
20
|
+
`;
|
|
21
|
+
/**
|
|
22
|
+
* A `Menu.Item` whose label greys out with its icon when disabled. The design
|
|
23
|
+
* system computes a disabled text colour, then its own stylesheet overrides it.
|
|
24
|
+
*/ const FieldMenuItem = styledComponents.styled(designSystem.Menu.Item)`
|
|
25
|
+
&&[aria-disabled='true'] {
|
|
26
|
+
color: ${({ theme })=>theme.colors.neutral500};
|
|
27
|
+
}
|
|
28
|
+
`;
|
|
29
|
+
|
|
30
|
+
exports.FieldMenuItem = FieldMenuItem;
|
|
31
|
+
exports.GhostIconButton = GhostIconButton;
|
|
32
|
+
//# sourceMappingURL=FieldControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldControls.js","sources":["../../../../admin/src/components/MediaLibraryInput/FieldControls.tsx"],"sourcesContent":["import { IconButton, Menu } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\n/**\n * A ghost `IconButton` that stays a bare icon when disabled. The design system\n * paints every disabled button, ghost included, as a bordered grey plate.\n */\nexport const GhostIconButton = styled(IconButton).attrs({ variant: 'ghost' })`\n &&[aria-disabled='true'] {\n border-color: transparent;\n background: transparent;\n }\n\n &&[aria-disabled='true'] svg path {\n fill: ${({ theme }) => theme.colors.neutral300};\n }\n`;\n\n/**\n * A `Menu.Item` whose label greys out with its icon when disabled. The design\n * system computes a disabled text colour, then its own stylesheet overrides it.\n */\nexport const FieldMenuItem = styled(Menu.Item)`\n &&[aria-disabled='true'] {\n color: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n"],"names":["GhostIconButton","styled","IconButton","attrs","variant","theme","colors","neutral300","FieldMenuItem","Menu","Item","neutral500"],"mappings":";;;;;AAGA;;;AAGC,IACM,MAAMA,eAAAA,GAAkBC,uBAAAA,CAAOC,uBAAAA,CAAAA,CAAYC,KAAK,CAAC;IAAEC,OAAAA,EAAS;AAAQ,CAAA,CAAE;;;;;;;UAOnE,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;AAEnD;AAEA;;;AAGC,IACM,MAAMC,aAAAA,GAAgBP,wBAAOQ,iBAAAA,CAAKC,IAAI,CAAC;;WAEnC,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACK,UAAU,CAAC;;AAEpD;;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { IconButton, Menu } from '@strapi/design-system';
|
|
2
|
+
import { styled } from 'styled-components';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A ghost `IconButton` that stays a bare icon when disabled. The design system
|
|
6
|
+
* paints every disabled button, ghost included, as a bordered grey plate.
|
|
7
|
+
*/ const GhostIconButton = styled(IconButton).attrs({
|
|
8
|
+
variant: 'ghost'
|
|
9
|
+
})`
|
|
10
|
+
&&[aria-disabled='true'] {
|
|
11
|
+
border-color: transparent;
|
|
12
|
+
background: transparent;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&&[aria-disabled='true'] svg path {
|
|
16
|
+
fill: ${({ theme })=>theme.colors.neutral300};
|
|
17
|
+
}
|
|
18
|
+
`;
|
|
19
|
+
/**
|
|
20
|
+
* A `Menu.Item` whose label greys out with its icon when disabled. The design
|
|
21
|
+
* system computes a disabled text colour, then its own stylesheet overrides it.
|
|
22
|
+
*/ const FieldMenuItem = styled(Menu.Item)`
|
|
23
|
+
&&[aria-disabled='true'] {
|
|
24
|
+
color: ${({ theme })=>theme.colors.neutral500};
|
|
25
|
+
}
|
|
26
|
+
`;
|
|
27
|
+
|
|
28
|
+
export { FieldMenuItem, GhostIconButton };
|
|
29
|
+
//# sourceMappingURL=FieldControls.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldControls.mjs","sources":["../../../../admin/src/components/MediaLibraryInput/FieldControls.tsx"],"sourcesContent":["import { IconButton, Menu } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\n/**\n * A ghost `IconButton` that stays a bare icon when disabled. The design system\n * paints every disabled button, ghost included, as a bordered grey plate.\n */\nexport const GhostIconButton = styled(IconButton).attrs({ variant: 'ghost' })`\n &&[aria-disabled='true'] {\n border-color: transparent;\n background: transparent;\n }\n\n &&[aria-disabled='true'] svg path {\n fill: ${({ theme }) => theme.colors.neutral300};\n }\n`;\n\n/**\n * A `Menu.Item` whose label greys out with its icon when disabled. The design\n * system computes a disabled text colour, then its own stylesheet overrides it.\n */\nexport const FieldMenuItem = styled(Menu.Item)`\n &&[aria-disabled='true'] {\n color: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n"],"names":["GhostIconButton","styled","IconButton","attrs","variant","theme","colors","neutral300","FieldMenuItem","Menu","Item","neutral500"],"mappings":";;;AAGA;;;AAGC,IACM,MAAMA,eAAAA,GAAkBC,MAAAA,CAAOC,UAAAA,CAAAA,CAAYC,KAAK,CAAC;IAAEC,OAAAA,EAAS;AAAQ,CAAA,CAAE;;;;;;;UAOnE,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;AAEnD;AAEA;;;AAGC,IACM,MAAMC,aAAAA,GAAgBP,OAAOQ,IAAAA,CAAKC,IAAI,CAAC;;WAEnC,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACK,UAAU,CAAC;;AAEpD;;;;"}
|
|
@@ -4,13 +4,12 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
6
|
var designSystem = require('@strapi/design-system');
|
|
7
|
+
var get = require('lodash/get');
|
|
7
8
|
var reactIntl = require('react-intl');
|
|
8
9
|
var useAIMetadataEnabled = require('../../hooks/useAIMetadataEnabled.js');
|
|
9
10
|
var useMediaLibraryPermissions = require('../../hooks/useMediaLibraryPermissions.js');
|
|
10
11
|
var useTracking = require('../../hooks/useTracking.js');
|
|
11
|
-
var
|
|
12
|
-
var EditAssetContent = require('../../legacy/components/EditAssetDialog/EditAssetContent.js');
|
|
13
|
-
var EditFolderDialog = require('../../legacy/components/EditFolderDialog/EditFolderDialog.js');
|
|
12
|
+
var AssetDetailsDrawer = require('../../pages/Assets/components/AssetDetails/AssetDetailsDrawer.js');
|
|
14
13
|
var ImportFromUrlDialog = require('../../pages/Assets/components/ImportFromUrlDialog.js');
|
|
15
14
|
var api = require('../../services/api.js');
|
|
16
15
|
var settings = require('../../services/settings.js');
|
|
@@ -18,11 +17,27 @@ var allowedMediaTypes = require('../../utils/allowedMediaTypes.js');
|
|
|
18
17
|
var files = require('../../utils/files.js');
|
|
19
18
|
var translations = require('../../utils/translations.js');
|
|
20
19
|
var typeFromMime = require('../../utils/typeFromMime.js');
|
|
20
|
+
var AssetPickerDialog = require('../AssetPickerDialog/AssetPickerDialog.js');
|
|
21
21
|
var AddAssetMenu = require('./AddAssetMenu.js');
|
|
22
|
+
var AssetCard = require('./AssetCard.js');
|
|
23
|
+
var AssetCarousel = require('./AssetCarousel.js');
|
|
22
24
|
var AssetDropZone = require('./AssetDropZone.js');
|
|
23
25
|
var AssetRow = require('./AssetRow.js');
|
|
24
|
-
var
|
|
26
|
+
var openAssetDetails = require('./openAssetDetails.js');
|
|
27
|
+
var useFieldUploads = require('./useFieldUploads.js');
|
|
25
28
|
|
|
29
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
30
|
+
|
|
31
|
+
var get__default = /*#__PURE__*/_interopDefault(get);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* What a field wrote that its form has not rendered yet, per form and field.
|
|
35
|
+
* `getValues()` only catches up on render, and two uploads can complete before
|
|
36
|
+
* the next one. Kept outside the input so it survives a remount.
|
|
37
|
+
*/ const unrenderedWrites = new WeakMap();
|
|
38
|
+
const toAssets = (value)=>Array.isArray(value) ? value : value ? [
|
|
39
|
+
value
|
|
40
|
+
] : [];
|
|
26
41
|
/**
|
|
27
42
|
* `location` for every event this field fires. The standalone Media Library
|
|
28
43
|
* tags its events `'upload'`; the picker inside an entry form has always been
|
|
@@ -44,23 +59,27 @@ const EMPTY_ATTRIBUTE = {};
|
|
|
44
59
|
*
|
|
45
60
|
* The legacy input is still registered when `useLegacyMediaLibrary` is on, and
|
|
46
61
|
* is untouched by this.
|
|
47
|
-
*/ const MediaLibraryInput = ({ name, label, labelAction, hint, required = false, disabled = false, attribute = EMPTY_ATTRIBUTE })=>{
|
|
62
|
+
*/ const MediaLibraryInput = ({ name, label, labelAction, hint, required = false, disabled = false, attribute = EMPTY_ATTRIBUTE, layoutSize })=>{
|
|
48
63
|
const { allowedTypes = null, multiple = false } = attribute;
|
|
49
64
|
const { formatMessage } = reactIntl.useIntl();
|
|
50
65
|
const { onChange, value, error } = strapiAdmin.useField(name);
|
|
51
66
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
52
67
|
const { trackUsage } = useTracking.useTracking();
|
|
53
68
|
const { copy } = strapiAdmin.useClipboard();
|
|
69
|
+
const getValues = strapiAdmin.useForm('MediaLibraryInput', (state)=>state.getValues);
|
|
54
70
|
const [step, setStep] = React.useState(undefined);
|
|
55
|
-
const [
|
|
56
|
-
const
|
|
71
|
+
const [editedAssetId, setEditedAssetId] = React.useState(null);
|
|
72
|
+
const isAnyDrawerOpen = openAssetDetails.useOpenAssetDetails(editedAssetId !== null);
|
|
57
73
|
const [isUrlDialogOpen, setIsUrlDialogOpen] = React.useState(false);
|
|
58
74
|
const fileInputRef = React.useRef(null);
|
|
59
75
|
const [uploadFiles] = api.useUploadFilesMutation();
|
|
60
76
|
const [uploadFromUrls] = api.useUploadFromUrlsMutation();
|
|
61
77
|
// Echoes the app config; a missing payload (still loading) falls back to
|
|
62
78
|
// sequential rather than outpacing what the server asked for.
|
|
63
|
-
const { canRead, canCreate
|
|
79
|
+
const { isLoading, canRead, canCreate } = useMediaLibraryPermissions.useMediaLibraryPermissions();
|
|
80
|
+
// Not while permissions load: `useRBAC` starts with every flag false, and an
|
|
81
|
+
// upload sent before it settles can end in a 403.
|
|
82
|
+
const canUpload = !isLoading && canCreate;
|
|
64
83
|
const { data: settings$1 } = settings.useGetUploadSettingsQuery(undefined, {
|
|
65
84
|
skip: !canRead
|
|
66
85
|
});
|
|
@@ -82,20 +101,30 @@ const EMPTY_ATTRIBUTE = {};
|
|
|
82
101
|
}
|
|
83
102
|
onChange(name, nextAssets[0] ?? null);
|
|
84
103
|
};
|
|
104
|
+
const handleRemove = (asset)=>{
|
|
105
|
+
setAssets(assets.filter((current)=>current.id !== asset.id));
|
|
106
|
+
};
|
|
107
|
+
// Bound to the form, not to this input: a component collapsed mid-upload
|
|
108
|
+
// unmounts the field, and the file must still land on the entry.
|
|
85
109
|
const attachUploadedFile = (file)=>{
|
|
86
|
-
const
|
|
87
|
-
|
|
110
|
+
const writes = unrenderedWrites.get(getValues) ?? new Map();
|
|
111
|
+
unrenderedWrites.set(getValues, writes);
|
|
112
|
+
const value = get__default.default(getValues(), name);
|
|
113
|
+
const pending = writes.get(name);
|
|
114
|
+
const current = pending && pending.seen === value ? pending.written : toAssets(value);
|
|
115
|
+
const next = multiple ? [
|
|
116
|
+
...current,
|
|
88
117
|
file
|
|
89
118
|
] : [
|
|
90
119
|
file
|
|
91
120
|
];
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
setAssets(assets.filter((current)=>current.id !== asset.id));
|
|
121
|
+
writes.set(name, {
|
|
122
|
+
seen: value,
|
|
123
|
+
written: next
|
|
124
|
+
});
|
|
125
|
+
setAssets(next);
|
|
98
126
|
};
|
|
127
|
+
const { uploads, cancel, retry, dismiss } = useFieldUploads.useFieldUploads(name);
|
|
99
128
|
const handleCopyLink = async (asset)=>{
|
|
100
129
|
const url = files.prefixFileUrlWithBackendUrl(asset.url);
|
|
101
130
|
if (!url) {
|
|
@@ -113,25 +142,33 @@ const EMPTY_ATTRIBUTE = {};
|
|
|
113
142
|
})
|
|
114
143
|
});
|
|
115
144
|
};
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (
|
|
124
|
-
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
if (result && typeof result !== 'boolean') {
|
|
128
|
-
setAssets(assetsRef.current.map((current)=>current.id === asset.id ? result : current));
|
|
145
|
+
/**
|
|
146
|
+
* Opens only when no drawer is open, in this field or another. Pressing a row's
|
|
147
|
+
* button is a press outside the open drawer, which closes it — or, with unsaved
|
|
148
|
+
* edits, asks first. Opening on the click that follows would put a second
|
|
149
|
+
* drawer, or a new asset, under that question and drop the edits it is asking
|
|
150
|
+
* about.
|
|
151
|
+
*/ const handleEdit = (asset)=>{
|
|
152
|
+
if (!openAssetDetails.isAnyAssetDetailsOpen()) {
|
|
153
|
+
setEditedAssetId(asset.id);
|
|
129
154
|
}
|
|
130
155
|
};
|
|
156
|
+
// The drawer saves to the library itself; the field holds its own copy of the
|
|
157
|
+
// asset, so it takes the server's after every change. Read from the ref: the
|
|
158
|
+
// drawer reports after a request, by which time this render's `assets` may
|
|
159
|
+
// be stale.
|
|
160
|
+
const handleAssetChange = (changedAsset)=>{
|
|
161
|
+
setAssets(assetsRef.current.map((current)=>// The populated `createdBy` is the one shape difference, and the entry
|
|
162
|
+
// only keeps the asset's id on save.
|
|
163
|
+
current.id === changedAsset.id ? changedAsset : current));
|
|
164
|
+
};
|
|
165
|
+
// Deleting from the library leaves nothing for the field to point at.
|
|
166
|
+
const handleAssetDelete = (id)=>{
|
|
167
|
+
setAssets(assetsRef.current.filter((current)=>current.id !== id));
|
|
168
|
+
};
|
|
131
169
|
const handleSelect = (selectedAssets)=>{
|
|
132
170
|
setAssets(selectedAssets);
|
|
133
171
|
setStep(undefined);
|
|
134
|
-
setFolderId(null);
|
|
135
172
|
};
|
|
136
173
|
const notifyUnsupported = ()=>{
|
|
137
174
|
toggleNotification({
|
|
@@ -165,8 +202,8 @@ const EMPTY_ATTRIBUTE = {};
|
|
|
165
202
|
});
|
|
166
203
|
return true;
|
|
167
204
|
};
|
|
168
|
-
const handleUpload =
|
|
169
|
-
if (disabled || files.length === 0) {
|
|
205
|
+
const handleUpload = (files)=>{
|
|
206
|
+
if (disabled || !canUpload || files.length === 0) {
|
|
170
207
|
return;
|
|
171
208
|
}
|
|
172
209
|
// The device picker can't reach this — it carries `multiple` — so a drop is
|
|
@@ -197,6 +234,12 @@ const EMPTY_ATTRIBUTE = {};
|
|
|
197
234
|
location: CONTENT_MANAGER_LOCATION,
|
|
198
235
|
...assetsCountByType
|
|
199
236
|
});
|
|
237
|
+
startUpload(allowedFiles);
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* Hands the files to the shared upload pool. The field picks the results up
|
|
241
|
+
* from `onFileUploaded`, which also runs for retries of the same rows.
|
|
242
|
+
*/ const startUpload = (allowedFiles)=>{
|
|
200
243
|
const formData = new FormData();
|
|
201
244
|
allowedFiles.forEach((file)=>formData.append('files', file));
|
|
202
245
|
formData.append('fileInfo', JSON.stringify(allowedFiles.map((file)=>({
|
|
@@ -205,30 +248,18 @@ const EMPTY_ATTRIBUTE = {};
|
|
|
205
248
|
alternativeText: null,
|
|
206
249
|
folder: UPLOAD_FOLDER_ID
|
|
207
250
|
}))));
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
onFileUploaded: attachUploadedFile
|
|
217
|
-
}).unwrap();
|
|
218
|
-
} catch {
|
|
219
|
-
// Errors reach the user through the progress dialog, which the mutation
|
|
220
|
-
// populates itself.
|
|
221
|
-
}
|
|
222
|
-
};
|
|
223
|
-
const handleZoneClick = ()=>{
|
|
224
|
-
if (canRead) {
|
|
225
|
-
setStep('browse');
|
|
226
|
-
} else if (canCreate) {
|
|
227
|
-
fileInputRef.current?.click();
|
|
228
|
-
} else {
|
|
229
|
-
setStep('no-access');
|
|
230
|
-
}
|
|
251
|
+
uploadFiles({
|
|
252
|
+
formData,
|
|
253
|
+
totalFiles: allowedFiles.length,
|
|
254
|
+
concurrency,
|
|
255
|
+
generateAiMetadata: Boolean(isAiMetadataEnabled),
|
|
256
|
+
onFileUploaded: attachUploadedFile,
|
|
257
|
+
owner: name
|
|
258
|
+
});
|
|
231
259
|
};
|
|
260
|
+
const handleRetry = (upload)=>retry(upload, (file)=>startUpload([
|
|
261
|
+
file
|
|
262
|
+
]));
|
|
232
263
|
/**
|
|
233
264
|
* The server fetches each URL and uploads what it finds, so the file's type
|
|
234
265
|
* is not known here — `allowedTypes` can only be enforced on what comes back.
|
|
@@ -280,7 +311,7 @@ const EMPTY_ATTRIBUTE = {};
|
|
|
280
311
|
// populates itself.
|
|
281
312
|
}
|
|
282
313
|
};
|
|
283
|
-
const handleFileInputChange =
|
|
314
|
+
const handleFileInputChange = (event)=>{
|
|
284
315
|
// Copied before the reset, not after: `event.target.files` is the input's
|
|
285
316
|
// live FileList, and clearing `value` empties it in place. Reading it
|
|
286
317
|
// afterwards yields nothing and the upload never starts.
|
|
@@ -288,9 +319,65 @@ const EMPTY_ATTRIBUTE = {};
|
|
|
288
319
|
// Reset so picking the same file twice in a row still fires `change`.
|
|
289
320
|
event.target.value = '';
|
|
290
321
|
if (files.length > 0) {
|
|
291
|
-
|
|
322
|
+
handleUpload(files);
|
|
292
323
|
}
|
|
293
324
|
};
|
|
325
|
+
const renderValue = ()=>{
|
|
326
|
+
const dropZone = (variant)=>/*#__PURE__*/ jsxRuntime.jsx(AssetDropZone.AssetDropZone, {
|
|
327
|
+
variant: variant,
|
|
328
|
+
disabled: disabled || !canUpload,
|
|
329
|
+
onDropFiles: handleUpload
|
|
330
|
+
});
|
|
331
|
+
if (assets.length === 0 && uploads.length === 0) {
|
|
332
|
+
return dropZone('bar');
|
|
333
|
+
}
|
|
334
|
+
const uploadHandlers = {
|
|
335
|
+
disabled,
|
|
336
|
+
onCancel: cancel,
|
|
337
|
+
onRetry: handleRetry,
|
|
338
|
+
onRemove: (upload)=>dismiss(upload.key)
|
|
339
|
+
};
|
|
340
|
+
if (!multiple) {
|
|
341
|
+
// A replacement in flight, or one that failed, stands in for the current
|
|
342
|
+
// asset until it lands or is removed.
|
|
343
|
+
if (uploads.length > 0) {
|
|
344
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
345
|
+
direction: "column",
|
|
346
|
+
alignItems: "stretch",
|
|
347
|
+
gap: 2,
|
|
348
|
+
children: uploads.map((upload)=>/*#__PURE__*/ jsxRuntime.jsx(AssetRow.UploadRow, {
|
|
349
|
+
upload: upload,
|
|
350
|
+
...uploadHandlers
|
|
351
|
+
}, upload.key))
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
return /*#__PURE__*/ jsxRuntime.jsx(AssetRow.AssetRow, {
|
|
355
|
+
asset: assets[0],
|
|
356
|
+
disabled: disabled,
|
|
357
|
+
onCopyLink: handleCopyLink,
|
|
358
|
+
// The details drawer fetches the asset from the library, which needs read access.
|
|
359
|
+
onEdit: canRead ? handleEdit : undefined,
|
|
360
|
+
onRemove: handleRemove
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(AssetCarousel.AssetCarousel, {
|
|
364
|
+
renderDropZone: dropZone,
|
|
365
|
+
layoutSize: layoutSize,
|
|
366
|
+
children: [
|
|
367
|
+
assets.map((asset)=>/*#__PURE__*/ jsxRuntime.jsx(AssetCard.AssetCard, {
|
|
368
|
+
asset: asset,
|
|
369
|
+
disabled: disabled,
|
|
370
|
+
onCopyLink: handleCopyLink,
|
|
371
|
+
onEdit: canRead ? handleEdit : undefined,
|
|
372
|
+
onRemove: handleRemove
|
|
373
|
+
}, asset.id)),
|
|
374
|
+
uploads.map((upload)=>/*#__PURE__*/ jsxRuntime.jsx(AssetCard.UploadCard, {
|
|
375
|
+
upload: upload,
|
|
376
|
+
...uploadHandlers
|
|
377
|
+
}, upload.key))
|
|
378
|
+
]
|
|
379
|
+
});
|
|
380
|
+
};
|
|
294
381
|
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
|
|
295
382
|
name: name,
|
|
296
383
|
error: error,
|
|
@@ -308,32 +395,14 @@ const EMPTY_ATTRIBUTE = {};
|
|
|
308
395
|
}),
|
|
309
396
|
/*#__PURE__*/ jsxRuntime.jsx(AddAssetMenu.AddAssetMenu, {
|
|
310
397
|
disabled: disabled,
|
|
398
|
+
preventOpen: isAnyDrawerOpen,
|
|
311
399
|
onBrowseLibrary: ()=>setStep('browse'),
|
|
312
400
|
onUploadFromDevice: ()=>fileInputRef.current?.click(),
|
|
313
401
|
onUploadFromUrl: ()=>setIsUrlDialogOpen(true)
|
|
314
402
|
})
|
|
315
403
|
]
|
|
316
404
|
}),
|
|
317
|
-
|
|
318
|
-
direction: "column",
|
|
319
|
-
alignItems: "stretch",
|
|
320
|
-
gap: 1,
|
|
321
|
-
children: [
|
|
322
|
-
assets.map((asset)=>/*#__PURE__*/ jsxRuntime.jsx(AssetRow.AssetRow, {
|
|
323
|
-
asset: asset,
|
|
324
|
-
disabled: disabled,
|
|
325
|
-
onCopyLink: handleCopyLink,
|
|
326
|
-
// The details dialog needs the library's folder tree, which needs read access.
|
|
327
|
-
onEdit: canRead ? setEditedAsset : undefined,
|
|
328
|
-
onRemove: handleRemove
|
|
329
|
-
}, asset.id)),
|
|
330
|
-
/*#__PURE__*/ jsxRuntime.jsx(AssetDropZone.AssetDropZone, {
|
|
331
|
-
disabled: disabled,
|
|
332
|
-
onClick: handleZoneClick,
|
|
333
|
-
onDropFiles: handleUpload
|
|
334
|
-
})
|
|
335
|
-
]
|
|
336
|
-
}),
|
|
405
|
+
renderValue(),
|
|
337
406
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Error, {}),
|
|
338
407
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {}),
|
|
339
408
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
|
|
@@ -346,43 +415,26 @@ const EMPTY_ATTRIBUTE = {};
|
|
|
346
415
|
"aria-hidden": true
|
|
347
416
|
})
|
|
348
417
|
}),
|
|
349
|
-
step === 'browse' && /*#__PURE__*/ jsxRuntime.jsx(
|
|
418
|
+
step === 'browse' && /*#__PURE__*/ jsxRuntime.jsx(AssetPickerDialog.AssetPickerDialog, {
|
|
350
419
|
open: true,
|
|
420
|
+
title: formatMessage({
|
|
421
|
+
id: translations.getTranslationKey('asset-picker.title'),
|
|
422
|
+
defaultMessage: 'Add asset for {fieldName}'
|
|
423
|
+
}, {
|
|
424
|
+
fieldName: label ?? name
|
|
425
|
+
}),
|
|
426
|
+
initialSelection: assets,
|
|
351
427
|
multiple: multiple,
|
|
352
|
-
allowedTypes: allowedTypes
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
trackedLocation: CONTENT_MANAGER_LOCATION,
|
|
356
|
-
onClose: ()=>{
|
|
357
|
-
setStep(undefined);
|
|
358
|
-
setFolderId(null);
|
|
359
|
-
},
|
|
360
|
-
onValidate: handleSelect,
|
|
361
|
-
onAddFolder: ()=>setStep('create-folder'),
|
|
362
|
-
// The dialog's own upload button hands back to this field's upload
|
|
363
|
-
// path, so every route to an uploaded file opens the progress dialog.
|
|
364
|
-
onAddAsset: ()=>{
|
|
365
|
-
setStep(undefined);
|
|
366
|
-
fileInputRef.current?.click();
|
|
367
|
-
},
|
|
368
|
-
onChangeFolder: (nextFolderId)=>setFolderId(nextFolderId)
|
|
369
|
-
}),
|
|
370
|
-
editedAsset && /*#__PURE__*/ jsxRuntime.jsx(EditAssetContent.EditAssetDialog, {
|
|
371
|
-
open: true,
|
|
372
|
-
asset: editedAsset,
|
|
373
|
-
canUpdate: canUpdate && !disabled,
|
|
374
|
-
canCopyLink: canCopyLink,
|
|
375
|
-
canDownload: canDownload,
|
|
376
|
-
trackedLocation: CONTENT_MANAGER_LOCATION,
|
|
377
|
-
onClose: handleEditClose
|
|
378
|
-
}),
|
|
379
|
-
step === 'create-folder' && /*#__PURE__*/ jsxRuntime.jsx(EditFolderDialog.EditFolderDialog, {
|
|
380
|
-
open: true,
|
|
381
|
-
onClose: ()=>setStep('browse'),
|
|
382
|
-
parentFolderId: folderId
|
|
428
|
+
allowedTypes: allowedTypes,
|
|
429
|
+
onClose: ()=>setStep(undefined),
|
|
430
|
+
onConfirm: handleSelect
|
|
383
431
|
}),
|
|
384
|
-
|
|
385
|
-
|
|
432
|
+
/*#__PURE__*/ jsxRuntime.jsx(AssetDetailsDrawer.AssetDetailsDrawer, {
|
|
433
|
+
assetId: editedAssetId,
|
|
434
|
+
onClose: ()=>setEditedAssetId(null),
|
|
435
|
+
onAssetChange: handleAssetChange,
|
|
436
|
+
onAssetDelete: handleAssetDelete,
|
|
437
|
+
trackedLocation: CONTENT_MANAGER_LOCATION
|
|
386
438
|
}),
|
|
387
439
|
/*#__PURE__*/ jsxRuntime.jsx(ImportFromUrlDialog.ImportFromUrlDialog, {
|
|
388
440
|
open: isUrlDialogOpen,
|