@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
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Breadcrumbs, CrumbSimpleMenu, MenuItem, Crumb } from '@strapi/design-system';
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
4
|
+
import { styled } from 'styled-components';
|
|
5
|
+
import { useGetFolderStructureQuery } from '../../services/folders.mjs';
|
|
6
|
+
import { findFolderPath } from '../../utils/findFolderPath.mjs';
|
|
7
|
+
import { getTranslationKey } from '../../utils/translations.mjs';
|
|
8
|
+
|
|
9
|
+
// Past this many folders, the ones between the first and the parent collapse
|
|
10
|
+
// into a menu, so a deep tree doesn't wrap the trail over several lines.
|
|
11
|
+
const MAX_VISIBLE_FOLDERS = 3;
|
|
12
|
+
// `CrumbLink`'s look on a real button. `CrumbLink` only renders an anchor, and
|
|
13
|
+
// one without an `href` is neither announced as a button nor reachable by Tab.
|
|
14
|
+
const CrumbButton = styled.button`
|
|
15
|
+
border: none;
|
|
16
|
+
background: none;
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
19
|
+
color: ${({ theme })=>theme.colors.neutral600};
|
|
20
|
+
font-size: ${({ theme })=>theme.fontSizes[1]};
|
|
21
|
+
line-height: ${({ theme })=>theme.lineHeights[4]};
|
|
22
|
+
padding: ${({ theme })=>`${theme.spaces[1]} ${theme.spaces[2]}`};
|
|
23
|
+
|
|
24
|
+
&:hover,
|
|
25
|
+
&:focus-visible {
|
|
26
|
+
background-color: ${({ theme })=>theme.colors.neutral200};
|
|
27
|
+
color: ${({ theme })=>theme.colors.neutral700};
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
/**
|
|
31
|
+
* Home › … › parent › current. Every crumb but the current folder navigates,
|
|
32
|
+
* so a user deep in the tree can climb back without a sidebar.
|
|
33
|
+
*/ const FolderBreadcrumbs = ({ currentFolderId, onSelectFolder })=>{
|
|
34
|
+
const { formatMessage } = useIntl();
|
|
35
|
+
const { data: folderStructure = [] } = useGetFolderStructureQuery();
|
|
36
|
+
const path = findFolderPath(folderStructure, currentFolderId);
|
|
37
|
+
const current = path?.at(-1);
|
|
38
|
+
// The tree has not loaded yet, or no longer holds the folder (deleted
|
|
39
|
+
// elsewhere — `useAssetsList` sends the list back to the root on its own).
|
|
40
|
+
if (!path || !current) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const ancestors = path.slice(0, -1);
|
|
44
|
+
const isCollapsed = path.length > MAX_VISIBLE_FOLDERS;
|
|
45
|
+
const leading = isCollapsed ? ancestors.slice(0, 1) : ancestors;
|
|
46
|
+
const hidden = isCollapsed ? ancestors.slice(1, -1) : [];
|
|
47
|
+
const trailing = isCollapsed ? ancestors.slice(-1) : [];
|
|
48
|
+
const renderLink = (folder)=>/*#__PURE__*/ jsx(CrumbButton, {
|
|
49
|
+
type: "button",
|
|
50
|
+
onClick: ()=>onSelectFolder(folder.id ?? null),
|
|
51
|
+
children: folder.name
|
|
52
|
+
}, folder.id);
|
|
53
|
+
return /*#__PURE__*/ jsxs(Breadcrumbs, {
|
|
54
|
+
label: formatMessage({
|
|
55
|
+
id: getTranslationKey('asset-picker.breadcrumbs.label'),
|
|
56
|
+
defaultMessage: 'Folder navigation'
|
|
57
|
+
}),
|
|
58
|
+
children: [
|
|
59
|
+
/*#__PURE__*/ jsx(CrumbButton, {
|
|
60
|
+
type: "button",
|
|
61
|
+
onClick: ()=>onSelectFolder(null),
|
|
62
|
+
children: formatMessage({
|
|
63
|
+
id: getTranslationKey('plugin.home'),
|
|
64
|
+
defaultMessage: 'Home'
|
|
65
|
+
})
|
|
66
|
+
}),
|
|
67
|
+
leading.map(renderLink),
|
|
68
|
+
hidden.length > 0 && /*#__PURE__*/ jsx(CrumbSimpleMenu, {
|
|
69
|
+
"aria-label": formatMessage({
|
|
70
|
+
id: getTranslationKey('asset-picker.breadcrumbs.more'),
|
|
71
|
+
defaultMessage: 'Show more folders'
|
|
72
|
+
}),
|
|
73
|
+
label: "…",
|
|
74
|
+
children: hidden.map((folder)=>/*#__PURE__*/ jsx(MenuItem, {
|
|
75
|
+
onSelect: ()=>onSelectFolder(folder.id ?? null),
|
|
76
|
+
children: folder.name
|
|
77
|
+
}, folder.id))
|
|
78
|
+
}),
|
|
79
|
+
trailing.map(renderLink),
|
|
80
|
+
/*#__PURE__*/ jsx(Crumb, {
|
|
81
|
+
isCurrent: true,
|
|
82
|
+
children: current.name
|
|
83
|
+
})
|
|
84
|
+
]
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export { FolderBreadcrumbs };
|
|
89
|
+
//# sourceMappingURL=FolderBreadcrumbs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderBreadcrumbs.mjs","sources":["../../../../admin/src/components/AssetPickerDialog/FolderBreadcrumbs.tsx"],"sourcesContent":["import { Breadcrumbs, Crumb, CrumbSimpleMenu, MenuItem } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useGetFolderStructureQuery } from '../../services/folders';\nimport { findFolderPath } from '../../utils/findFolderPath';\nimport { getTranslationKey } from '../../utils/translations';\n\n// Past this many folders, the ones between the first and the parent collapse\n// into a menu, so a deep tree doesn't wrap the trail over several lines.\nconst MAX_VISIBLE_FOLDERS = 3;\n\n// `CrumbLink`'s look on a real button. `CrumbLink` only renders an anchor, and\n// one without an `href` is neither announced as a button nor reachable by Tab.\nconst CrumbButton = styled.button`\n border: none;\n background: none;\n cursor: pointer;\n border-radius: ${({ theme }) => theme.borderRadius};\n color: ${({ theme }) => theme.colors.neutral600};\n font-size: ${({ theme }) => theme.fontSizes[1]};\n line-height: ${({ theme }) => theme.lineHeights[4]};\n padding: ${({ theme }) => `${theme.spaces[1]} ${theme.spaces[2]}`};\n\n &:hover,\n &:focus-visible {\n background-color: ${({ theme }) => theme.colors.neutral200};\n color: ${({ theme }) => theme.colors.neutral700};\n }\n`;\n\ninterface FolderBreadcrumbsProps {\n currentFolderId: number;\n onSelectFolder: (folderId: number | null) => void;\n}\n\n/**\n * Home › … › parent › current. Every crumb but the current folder navigates,\n * so a user deep in the tree can climb back without a sidebar.\n */\nexport const FolderBreadcrumbs = ({ currentFolderId, onSelectFolder }: FolderBreadcrumbsProps) => {\n const { formatMessage } = useIntl();\n const { data: folderStructure = [] } = useGetFolderStructureQuery();\n\n const path = findFolderPath(folderStructure, currentFolderId);\n const current = path?.at(-1);\n\n // The tree has not loaded yet, or no longer holds the folder (deleted\n // elsewhere — `useAssetsList` sends the list back to the root on its own).\n if (!path || !current) {\n return null;\n }\n\n const ancestors = path.slice(0, -1);\n const isCollapsed = path.length > MAX_VISIBLE_FOLDERS;\n const leading = isCollapsed ? ancestors.slice(0, 1) : ancestors;\n const hidden = isCollapsed ? ancestors.slice(1, -1) : [];\n const trailing = isCollapsed ? ancestors.slice(-1) : [];\n\n const renderLink = (folder: (typeof path)[number]) => (\n <CrumbButton key={folder.id} type=\"button\" onClick={() => onSelectFolder(folder.id ?? null)}>\n {folder.name}\n </CrumbButton>\n );\n\n return (\n <Breadcrumbs\n label={formatMessage({\n id: getTranslationKey('asset-picker.breadcrumbs.label'),\n defaultMessage: 'Folder navigation',\n })}\n >\n <CrumbButton type=\"button\" onClick={() => onSelectFolder(null)}>\n {formatMessage({ id: getTranslationKey('plugin.home'), defaultMessage: 'Home' })}\n </CrumbButton>\n {leading.map(renderLink)}\n {hidden.length > 0 && (\n <CrumbSimpleMenu\n aria-label={formatMessage({\n id: getTranslationKey('asset-picker.breadcrumbs.more'),\n defaultMessage: 'Show more folders',\n })}\n label=\"…\"\n >\n {hidden.map((folder) => (\n <MenuItem key={folder.id} onSelect={() => onSelectFolder(folder.id ?? null)}>\n {folder.name}\n </MenuItem>\n ))}\n </CrumbSimpleMenu>\n )}\n {trailing.map(renderLink)}\n <Crumb isCurrent>{current.name}</Crumb>\n </Breadcrumbs>\n );\n};\n"],"names":["MAX_VISIBLE_FOLDERS","CrumbButton","styled","button","theme","borderRadius","colors","neutral600","fontSizes","lineHeights","spaces","neutral200","neutral700","FolderBreadcrumbs","currentFolderId","onSelectFolder","formatMessage","useIntl","data","folderStructure","useGetFolderStructureQuery","path","findFolderPath","current","at","ancestors","slice","isCollapsed","length","leading","hidden","trailing","renderLink","folder","_jsx","type","onClick","id","name","_jsxs","Breadcrumbs","label","getTranslationKey","defaultMessage","map","CrumbSimpleMenu","aria-label","MenuItem","onSelect","Crumb","isCurrent"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var reactIntl = require('react-intl');
|
|
5
|
+
var translations = require('../../utils/translations.js');
|
|
6
|
+
var AssetPickerDialog = require('./AssetPickerDialog.js');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The current asset picker behind the `media-library` component. The editors
|
|
10
|
+
* insert assets rather than hold a value, and don't pass a field label, so the
|
|
11
|
+
* title is generic.
|
|
12
|
+
*/ const MediaLibraryPickerDialog = ({ allowedTypes, multiple = true, initiallySelectedAssets, onClose, onSelectAssets })=>{
|
|
13
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
14
|
+
return /*#__PURE__*/ jsxRuntime.jsx(AssetPickerDialog.AssetPickerDialog, {
|
|
15
|
+
open: true,
|
|
16
|
+
title: formatMessage({
|
|
17
|
+
id: translations.getTranslationKey('asset-picker.title.insert'),
|
|
18
|
+
defaultMessage: 'Add assets'
|
|
19
|
+
}),
|
|
20
|
+
initialSelection: initiallySelectedAssets,
|
|
21
|
+
multiple: multiple,
|
|
22
|
+
allowedTypes: allowedTypes,
|
|
23
|
+
onClose: onClose,
|
|
24
|
+
onConfirm: onSelectAssets
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
exports.MediaLibraryPickerDialog = MediaLibraryPickerDialog;
|
|
29
|
+
//# sourceMappingURL=MediaLibraryPickerDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaLibraryPickerDialog.js","sources":["../../../../admin/src/components/AssetPickerDialog/MediaLibraryPickerDialog.tsx"],"sourcesContent":["import { useIntl } from 'react-intl';\n\nimport { getTranslationKey } from '../../utils/translations';\n\nimport { AssetPickerDialog } from './AssetPickerDialog';\n\nimport type { File } from '../../../../shared/contracts/files';\nimport type { MediaAllowedTypes } from '../../utils/isAllowedAssetType';\n\n/**\n * The `media-library` component contract, which the Wysiwyg and Blocks editors\n * render to insert images. Kept identical to the legacy `MediaLibraryDialog`.\n */\nexport interface MediaLibraryPickerDialogProps {\n allowedTypes?: MediaAllowedTypes;\n multiple?: boolean;\n initiallySelectedAssets?: File[];\n onClose: () => void;\n onSelectAssets: (selectedAssets: File[]) => void;\n}\n\n/**\n * The current asset picker behind the `media-library` component. The editors\n * insert assets rather than hold a value, and don't pass a field label, so the\n * title is generic.\n */\nexport const MediaLibraryPickerDialog = ({\n allowedTypes,\n multiple = true,\n initiallySelectedAssets,\n onClose,\n onSelectAssets,\n}: MediaLibraryPickerDialogProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <AssetPickerDialog\n open\n title={formatMessage({\n id: getTranslationKey('asset-picker.title.insert'),\n defaultMessage: 'Add assets',\n })}\n initialSelection={initiallySelectedAssets}\n multiple={multiple}\n allowedTypes={allowedTypes}\n onClose={onClose}\n onConfirm={onSelectAssets}\n />\n );\n};\n"],"names":["MediaLibraryPickerDialog","allowedTypes","multiple","initiallySelectedAssets","onClose","onSelectAssets","formatMessage","useIntl","_jsx","AssetPickerDialog","open","title","id","getTranslationKey","defaultMessage","initialSelection","onConfirm"],"mappings":";;;;;;;AAqBA;;;;AAIC,IACM,MAAMA,wBAAAA,GAA2B,CAAC,EACvCC,YAAY,EACZC,QAAAA,GAAW,IAAI,EACfC,uBAAuB,EACvBC,OAAO,EACPC,cAAc,EACgB,GAAA;IAC9B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACEC,cAAA,CAACC,mCAAAA,EAAAA;QACCC,IAAI,EAAA,IAAA;AACJC,QAAAA,KAAAA,EAAOL,aAAAA,CAAc;AACnBM,YAAAA,EAAAA,EAAIC,8BAAAA,CAAkB,2BAAA,CAAA;YACtBC,cAAAA,EAAgB;AAClB,SAAA,CAAA;QACAC,gBAAAA,EAAkBZ,uBAAAA;QAClBD,QAAAA,EAAUA,QAAAA;QACVD,YAAAA,EAAcA,YAAAA;QACdG,OAAAA,EAASA,OAAAA;QACTY,SAAAA,EAAWX;;AAGjB;;;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useIntl } from 'react-intl';
|
|
3
|
+
import { getTranslationKey } from '../../utils/translations.mjs';
|
|
4
|
+
import { AssetPickerDialog } from './AssetPickerDialog.mjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The current asset picker behind the `media-library` component. The editors
|
|
8
|
+
* insert assets rather than hold a value, and don't pass a field label, so the
|
|
9
|
+
* title is generic.
|
|
10
|
+
*/ const MediaLibraryPickerDialog = ({ allowedTypes, multiple = true, initiallySelectedAssets, onClose, onSelectAssets })=>{
|
|
11
|
+
const { formatMessage } = useIntl();
|
|
12
|
+
return /*#__PURE__*/ jsx(AssetPickerDialog, {
|
|
13
|
+
open: true,
|
|
14
|
+
title: formatMessage({
|
|
15
|
+
id: getTranslationKey('asset-picker.title.insert'),
|
|
16
|
+
defaultMessage: 'Add assets'
|
|
17
|
+
}),
|
|
18
|
+
initialSelection: initiallySelectedAssets,
|
|
19
|
+
multiple: multiple,
|
|
20
|
+
allowedTypes: allowedTypes,
|
|
21
|
+
onClose: onClose,
|
|
22
|
+
onConfirm: onSelectAssets
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { MediaLibraryPickerDialog };
|
|
27
|
+
//# sourceMappingURL=MediaLibraryPickerDialog.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaLibraryPickerDialog.mjs","sources":["../../../../admin/src/components/AssetPickerDialog/MediaLibraryPickerDialog.tsx"],"sourcesContent":["import { useIntl } from 'react-intl';\n\nimport { getTranslationKey } from '../../utils/translations';\n\nimport { AssetPickerDialog } from './AssetPickerDialog';\n\nimport type { File } from '../../../../shared/contracts/files';\nimport type { MediaAllowedTypes } from '../../utils/isAllowedAssetType';\n\n/**\n * The `media-library` component contract, which the Wysiwyg and Blocks editors\n * render to insert images. Kept identical to the legacy `MediaLibraryDialog`.\n */\nexport interface MediaLibraryPickerDialogProps {\n allowedTypes?: MediaAllowedTypes;\n multiple?: boolean;\n initiallySelectedAssets?: File[];\n onClose: () => void;\n onSelectAssets: (selectedAssets: File[]) => void;\n}\n\n/**\n * The current asset picker behind the `media-library` component. The editors\n * insert assets rather than hold a value, and don't pass a field label, so the\n * title is generic.\n */\nexport const MediaLibraryPickerDialog = ({\n allowedTypes,\n multiple = true,\n initiallySelectedAssets,\n onClose,\n onSelectAssets,\n}: MediaLibraryPickerDialogProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <AssetPickerDialog\n open\n title={formatMessage({\n id: getTranslationKey('asset-picker.title.insert'),\n defaultMessage: 'Add assets',\n })}\n initialSelection={initiallySelectedAssets}\n multiple={multiple}\n allowedTypes={allowedTypes}\n onClose={onClose}\n onConfirm={onSelectAssets}\n />\n );\n};\n"],"names":["MediaLibraryPickerDialog","allowedTypes","multiple","initiallySelectedAssets","onClose","onSelectAssets","formatMessage","useIntl","_jsx","AssetPickerDialog","open","title","id","getTranslationKey","defaultMessage","initialSelection","onConfirm"],"mappings":";;;;;AAqBA;;;;AAIC,IACM,MAAMA,wBAAAA,GAA2B,CAAC,EACvCC,YAAY,EACZC,QAAAA,GAAW,IAAI,EACfC,uBAAuB,EACvBC,OAAO,EACPC,cAAc,EACgB,GAAA;IAC9B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,qBACEC,GAAA,CAACC,iBAAAA,EAAAA;QACCC,IAAI,EAAA,IAAA;AACJC,QAAAA,KAAAA,EAAOL,aAAAA,CAAc;AACnBM,YAAAA,EAAAA,EAAIC,iBAAAA,CAAkB,2BAAA,CAAA;YACtBC,cAAAA,EAAgB;AAClB,SAAA,CAAA;QACAC,gBAAAA,EAAkBZ,uBAAAA;QAClBD,QAAAA,EAAUA,QAAAA;QACVD,YAAAA,EAAcA,YAAAA;QACdG,OAAAA,EAASA,OAAAA;QACTY,SAAAA,EAAWX;;AAGjB;;;;"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var useAssetSelection = require('../../pages/Assets/hooks/useAssetSelection.js');
|
|
6
|
+
var selection = require('../../pages/Assets/utils/selection.js');
|
|
7
|
+
var isAllowedAssetType = require('../../utils/isAllowedAssetType.js');
|
|
8
|
+
var pickerSelection = require('./pickerSelection.js');
|
|
9
|
+
|
|
10
|
+
const PickerSelectionContext = /*#__PURE__*/ React.createContext(null);
|
|
11
|
+
const usePickerSelection = ()=>{
|
|
12
|
+
const context = React.useContext(PickerSelectionContext);
|
|
13
|
+
if (!context) {
|
|
14
|
+
throw new Error('usePickerSelection must be used within a PickerSelectionProvider');
|
|
15
|
+
}
|
|
16
|
+
return context;
|
|
17
|
+
};
|
|
18
|
+
const parseAssetId = (key)=>{
|
|
19
|
+
const [kind, id] = key.split(':');
|
|
20
|
+
return kind === 'asset' ? Number(id) : null;
|
|
21
|
+
};
|
|
22
|
+
const NO_FOLDERS = new Set();
|
|
23
|
+
/**
|
|
24
|
+
* The Content Manager picker's selection, behind the same `AssetSelection`
|
|
25
|
+
* interface the Media Library views read: only assets are selectable, assets
|
|
26
|
+
* outside `allowedTypes` are shown but cannot be picked, and the selection
|
|
27
|
+
* survives folder changes, search, filters and sort.
|
|
28
|
+
*/ const PickerSelectionProvider = ({ children, initialSelection, multiple, allowedTypes, knownFiles })=>{
|
|
29
|
+
const [selection$1, setSelection] = React.useState(initialSelection);
|
|
30
|
+
const filesById = React.useMemo(()=>{
|
|
31
|
+
const map = new Map();
|
|
32
|
+
[
|
|
33
|
+
...knownFiles,
|
|
34
|
+
...selection$1
|
|
35
|
+
].forEach((file)=>map.set(file.id, file));
|
|
36
|
+
return map;
|
|
37
|
+
}, [
|
|
38
|
+
knownFiles,
|
|
39
|
+
selection$1
|
|
40
|
+
]);
|
|
41
|
+
const selectedIds = React.useMemo(()=>new Set(selection$1.map((file)=>file.id)), [
|
|
42
|
+
selection$1
|
|
43
|
+
]);
|
|
44
|
+
const resolveSelectableFile = React.useCallback((key)=>{
|
|
45
|
+
const id = parseAssetId(key);
|
|
46
|
+
const file = id === null ? undefined : filesById.get(id);
|
|
47
|
+
return file && isAllowedAssetType.isAllowedAssetType(allowedTypes, file.mime) ? file : null;
|
|
48
|
+
}, [
|
|
49
|
+
allowedTypes,
|
|
50
|
+
filesById
|
|
51
|
+
]);
|
|
52
|
+
const getSelectability = React.useCallback((key)=>{
|
|
53
|
+
const id = parseAssetId(key);
|
|
54
|
+
if (id === null) {
|
|
55
|
+
return 'hidden';
|
|
56
|
+
}
|
|
57
|
+
// `allowedTypes` only stops adding an asset. One the field already holds,
|
|
58
|
+
// for example from before the schema was narrowed, must stay removable.
|
|
59
|
+
if (selectedIds.has(id)) {
|
|
60
|
+
return 'enabled';
|
|
61
|
+
}
|
|
62
|
+
const file = filesById.get(id);
|
|
63
|
+
return file && !isAllowedAssetType.isAllowedAssetType(allowedTypes, file.mime) ? 'disabled' : 'enabled';
|
|
64
|
+
}, [
|
|
65
|
+
allowedTypes,
|
|
66
|
+
filesById,
|
|
67
|
+
selectedIds
|
|
68
|
+
]);
|
|
69
|
+
const toggle = React.useCallback((key)=>{
|
|
70
|
+
const id = parseAssetId(key);
|
|
71
|
+
if (id !== null && selectedIds.has(id)) {
|
|
72
|
+
setSelection((prev)=>pickerSelection.removeFile(prev, id));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const file = resolveSelectableFile(key);
|
|
76
|
+
if (file) {
|
|
77
|
+
setSelection((prev)=>pickerSelection.toggleFile(prev, file, {
|
|
78
|
+
multiple
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
}, [
|
|
82
|
+
multiple,
|
|
83
|
+
resolveSelectableFile,
|
|
84
|
+
selectedIds
|
|
85
|
+
]);
|
|
86
|
+
// Select-all over the assets on screen that can be picked, appended in their
|
|
87
|
+
// on-screen order. Only a multiple-value field offers it.
|
|
88
|
+
const selectAll = React.useCallback((orderedKeys)=>{
|
|
89
|
+
if (!multiple) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const files = orderedKeys.map((key)=>resolveSelectableFile(key)).filter((file)=>file !== null);
|
|
93
|
+
setSelection((prev)=>pickerSelection.addFiles(prev, files));
|
|
94
|
+
}, [
|
|
95
|
+
multiple,
|
|
96
|
+
resolveSelectableFile
|
|
97
|
+
]);
|
|
98
|
+
const selectOnly = React.useCallback((key)=>{
|
|
99
|
+
const file = resolveSelectableFile(key);
|
|
100
|
+
if (file) {
|
|
101
|
+
setSelection([
|
|
102
|
+
file
|
|
103
|
+
]);
|
|
104
|
+
}
|
|
105
|
+
}, [
|
|
106
|
+
resolveSelectableFile
|
|
107
|
+
]);
|
|
108
|
+
const deselect = React.useCallback((key)=>{
|
|
109
|
+
const id = parseAssetId(key);
|
|
110
|
+
if (id !== null) {
|
|
111
|
+
setSelection((prev)=>pickerSelection.removeFile(prev, id));
|
|
112
|
+
}
|
|
113
|
+
}, []);
|
|
114
|
+
const deselectAll = React.useCallback((orderedKeys)=>{
|
|
115
|
+
const ids = new Set(orderedKeys.map((key)=>parseAssetId(key)).filter((id)=>id !== null));
|
|
116
|
+
setSelection((prev)=>pickerSelection.removeFiles(prev, ids));
|
|
117
|
+
}, []);
|
|
118
|
+
const clear = React.useCallback(()=>setSelection([]), []);
|
|
119
|
+
const selectedKeys = React.useMemo(()=>new Set(selection$1.map((file)=>selection.assetKey(file.id))), [
|
|
120
|
+
selection$1
|
|
121
|
+
]);
|
|
122
|
+
const isSelected = React.useCallback((key)=>{
|
|
123
|
+
const id = parseAssetId(key);
|
|
124
|
+
return id !== null && pickerSelection.hasFile(selection$1, id);
|
|
125
|
+
}, [
|
|
126
|
+
selection$1
|
|
127
|
+
]);
|
|
128
|
+
const assetSelection = React.useMemo(()=>({
|
|
129
|
+
isEnabled: true,
|
|
130
|
+
// A single-value field holds one asset: nothing to select all of.
|
|
131
|
+
canSelectAll: multiple,
|
|
132
|
+
getSelectability,
|
|
133
|
+
selectedKeys,
|
|
134
|
+
selectedIds,
|
|
135
|
+
selectedFolderIds: NO_FOLDERS,
|
|
136
|
+
anchorKey: null,
|
|
137
|
+
isSelected,
|
|
138
|
+
toggle,
|
|
139
|
+
// Picking is one asset at a time; a Shift+click range picks the target.
|
|
140
|
+
selectRange: (_orderedKeys, targetKey)=>toggle(targetKey),
|
|
141
|
+
selectAll,
|
|
142
|
+
selectOnly,
|
|
143
|
+
deselect,
|
|
144
|
+
deselectAll,
|
|
145
|
+
clear
|
|
146
|
+
}), [
|
|
147
|
+
multiple,
|
|
148
|
+
getSelectability,
|
|
149
|
+
selectedKeys,
|
|
150
|
+
selectedIds,
|
|
151
|
+
isSelected,
|
|
152
|
+
toggle,
|
|
153
|
+
selectAll,
|
|
154
|
+
selectOnly,
|
|
155
|
+
deselect,
|
|
156
|
+
deselectAll,
|
|
157
|
+
clear
|
|
158
|
+
]);
|
|
159
|
+
const moveSelectedFile = React.useCallback((activeId, overId)=>setSelection((prev)=>pickerSelection.moveFile(prev, activeId, overId)), []);
|
|
160
|
+
const pickerSelection$1 = React.useMemo(()=>({
|
|
161
|
+
selection: selection$1,
|
|
162
|
+
moveFile: moveSelectedFile
|
|
163
|
+
}), [
|
|
164
|
+
selection$1,
|
|
165
|
+
moveSelectedFile
|
|
166
|
+
]);
|
|
167
|
+
return /*#__PURE__*/ jsxRuntime.jsx(PickerSelectionContext.Provider, {
|
|
168
|
+
value: pickerSelection$1,
|
|
169
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(useAssetSelection.AssetSelectionContext.Provider, {
|
|
170
|
+
value: assetSelection,
|
|
171
|
+
children: children
|
|
172
|
+
})
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
exports.PickerSelectionProvider = PickerSelectionProvider;
|
|
177
|
+
exports.usePickerSelection = usePickerSelection;
|
|
178
|
+
//# sourceMappingURL=PickerSelectionProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PickerSelectionProvider.js","sources":["../../../../admin/src/components/AssetPickerDialog/PickerSelectionProvider.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useMemo, useState, type ReactNode } from 'react';\n\nimport {\n AssetSelectionContext,\n type AssetSelection,\n type Selectability,\n} from '../../pages/Assets/hooks/useAssetSelection';\nimport { assetKey, type ItemKey } from '../../pages/Assets/utils/selection';\nimport { isAllowedAssetType, type MediaAllowedTypes } from '../../utils/isAllowedAssetType';\n\nimport {\n addFiles,\n hasFile,\n moveFile,\n removeFile,\n removeFiles,\n toggleFile,\n type PickerSelection,\n} from './pickerSelection';\n\nimport type { File } from '../../../../shared/contracts/files';\n\ninterface PickerSelectionContextValue {\n selection: PickerSelection;\n moveFile: (activeId: number, overId: number) => void;\n}\n\nconst PickerSelectionContext = createContext<PickerSelectionContextValue | null>(null);\n\nexport const usePickerSelection = () => {\n const context = useContext(PickerSelectionContext);\n\n if (!context) {\n throw new Error('usePickerSelection must be used within a PickerSelectionProvider');\n }\n\n return context;\n};\n\nconst parseAssetId = (key: ItemKey): number | null => {\n const [kind, id] = key.split(':');\n\n return kind === 'asset' ? Number(id) : null;\n};\n\nconst NO_FOLDERS = new Set<number>();\n\ninterface PickerSelectionProviderProps {\n children: ReactNode;\n initialSelection: File[];\n multiple: boolean;\n allowedTypes?: MediaAllowedTypes | null;\n /**\n * The assets on screen. Views select by key, but the selection keeps whole\n * files, so a newly picked key is resolved against these.\n */\n knownFiles: File[];\n}\n\n/**\n * The Content Manager picker's selection, behind the same `AssetSelection`\n * interface the Media Library views read: only assets are selectable, assets\n * outside `allowedTypes` are shown but cannot be picked, and the selection\n * survives folder changes, search, filters and sort.\n */\nexport const PickerSelectionProvider = ({\n children,\n initialSelection,\n multiple,\n allowedTypes,\n knownFiles,\n}: PickerSelectionProviderProps) => {\n const [selection, setSelection] = useState<PickerSelection>(initialSelection);\n\n const filesById = useMemo(() => {\n const map = new Map<number, File>();\n [...knownFiles, ...selection].forEach((file) => map.set(file.id, file));\n return map;\n }, [knownFiles, selection]);\n\n const selectedIds = useMemo(() => new Set(selection.map((file) => file.id)), [selection]);\n\n const resolveSelectableFile = useCallback(\n (key: ItemKey): File | null => {\n const id = parseAssetId(key);\n const file = id === null ? undefined : filesById.get(id);\n\n return file && isAllowedAssetType(allowedTypes, file.mime) ? file : null;\n },\n [allowedTypes, filesById]\n );\n\n const getSelectability = useCallback(\n (key: ItemKey): Selectability => {\n const id = parseAssetId(key);\n\n if (id === null) {\n return 'hidden';\n }\n\n // `allowedTypes` only stops adding an asset. One the field already holds,\n // for example from before the schema was narrowed, must stay removable.\n if (selectedIds.has(id)) {\n return 'enabled';\n }\n\n const file = filesById.get(id);\n\n return file && !isAllowedAssetType(allowedTypes, file.mime) ? 'disabled' : 'enabled';\n },\n [allowedTypes, filesById, selectedIds]\n );\n\n const toggle = useCallback(\n (key: ItemKey) => {\n const id = parseAssetId(key);\n\n if (id !== null && selectedIds.has(id)) {\n setSelection((prev) => removeFile(prev, id));\n return;\n }\n\n const file = resolveSelectableFile(key);\n\n if (file) {\n setSelection((prev) => toggleFile(prev, file, { multiple }));\n }\n },\n [multiple, resolveSelectableFile, selectedIds]\n );\n\n // Select-all over the assets on screen that can be picked, appended in their\n // on-screen order. Only a multiple-value field offers it.\n const selectAll = useCallback(\n (orderedKeys: ItemKey[]) => {\n if (!multiple) {\n return;\n }\n\n const files = orderedKeys\n .map((key) => resolveSelectableFile(key))\n .filter((file): file is File => file !== null);\n\n setSelection((prev) => addFiles(prev, files));\n },\n [multiple, resolveSelectableFile]\n );\n\n const selectOnly = useCallback(\n (key: ItemKey) => {\n const file = resolveSelectableFile(key);\n\n if (file) {\n setSelection([file]);\n }\n },\n [resolveSelectableFile]\n );\n\n const deselect = useCallback((key: ItemKey) => {\n const id = parseAssetId(key);\n\n if (id !== null) {\n setSelection((prev) => removeFile(prev, id));\n }\n }, []);\n\n const deselectAll = useCallback((orderedKeys: ItemKey[]) => {\n const ids = new Set(\n orderedKeys.map((key) => parseAssetId(key)).filter((id): id is number => id !== null)\n );\n\n setSelection((prev) => removeFiles(prev, ids));\n }, []);\n\n const clear = useCallback(() => setSelection([]), []);\n\n const selectedKeys = useMemo(\n () => new Set(selection.map((file) => assetKey(file.id))),\n [selection]\n );\n\n const isSelected = useCallback(\n (key: ItemKey) => {\n const id = parseAssetId(key);\n\n return id !== null && hasFile(selection, id);\n },\n [selection]\n );\n\n const assetSelection = useMemo<AssetSelection>(\n () => ({\n isEnabled: true,\n // A single-value field holds one asset: nothing to select all of.\n canSelectAll: multiple,\n getSelectability,\n selectedKeys,\n selectedIds,\n selectedFolderIds: NO_FOLDERS,\n anchorKey: null,\n isSelected,\n toggle,\n // Picking is one asset at a time; a Shift+click range picks the target.\n selectRange: (_orderedKeys, targetKey) => toggle(targetKey),\n selectAll,\n selectOnly,\n deselect,\n deselectAll,\n clear,\n }),\n [\n multiple,\n getSelectability,\n selectedKeys,\n selectedIds,\n isSelected,\n toggle,\n selectAll,\n selectOnly,\n deselect,\n deselectAll,\n clear,\n ]\n );\n\n const moveSelectedFile = useCallback(\n (activeId: number, overId: number) => setSelection((prev) => moveFile(prev, activeId, overId)),\n []\n );\n\n const pickerSelection = useMemo(\n () => ({ selection, moveFile: moveSelectedFile }),\n [selection, moveSelectedFile]\n );\n\n return (\n <PickerSelectionContext.Provider value={pickerSelection}>\n <AssetSelectionContext.Provider value={assetSelection}>\n {children}\n </AssetSelectionContext.Provider>\n </PickerSelectionContext.Provider>\n );\n};\n"],"names":["PickerSelectionContext","createContext","usePickerSelection","context","useContext","Error","parseAssetId","key","kind","id","split","Number","NO_FOLDERS","Set","PickerSelectionProvider","children","initialSelection","multiple","allowedTypes","knownFiles","selection","setSelection","useState","filesById","useMemo","map","Map","forEach","file","set","selectedIds","resolveSelectableFile","useCallback","undefined","get","isAllowedAssetType","mime","getSelectability","has","toggle","prev","removeFile","toggleFile","selectAll","orderedKeys","files","filter","addFiles","selectOnly","deselect","deselectAll","ids","removeFiles","clear","selectedKeys","assetKey","isSelected","hasFile","assetSelection","isEnabled","canSelectAll","selectedFolderIds","anchorKey","selectRange","_orderedKeys","targetKey","moveSelectedFile","activeId","overId","moveFile","pickerSelection","_jsx","Provider","value","AssetSelectionContext"],"mappings":"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"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useMemo, useCallback, useContext, createContext } from 'react';
|
|
3
|
+
import { AssetSelectionContext } from '../../pages/Assets/hooks/useAssetSelection.mjs';
|
|
4
|
+
import { assetKey } from '../../pages/Assets/utils/selection.mjs';
|
|
5
|
+
import { isAllowedAssetType } from '../../utils/isAllowedAssetType.mjs';
|
|
6
|
+
import { removeFile, toggleFile, addFiles, removeFiles, hasFile, moveFile } from './pickerSelection.mjs';
|
|
7
|
+
|
|
8
|
+
const PickerSelectionContext = /*#__PURE__*/ createContext(null);
|
|
9
|
+
const usePickerSelection = ()=>{
|
|
10
|
+
const context = useContext(PickerSelectionContext);
|
|
11
|
+
if (!context) {
|
|
12
|
+
throw new Error('usePickerSelection must be used within a PickerSelectionProvider');
|
|
13
|
+
}
|
|
14
|
+
return context;
|
|
15
|
+
};
|
|
16
|
+
const parseAssetId = (key)=>{
|
|
17
|
+
const [kind, id] = key.split(':');
|
|
18
|
+
return kind === 'asset' ? Number(id) : null;
|
|
19
|
+
};
|
|
20
|
+
const NO_FOLDERS = new Set();
|
|
21
|
+
/**
|
|
22
|
+
* The Content Manager picker's selection, behind the same `AssetSelection`
|
|
23
|
+
* interface the Media Library views read: only assets are selectable, assets
|
|
24
|
+
* outside `allowedTypes` are shown but cannot be picked, and the selection
|
|
25
|
+
* survives folder changes, search, filters and sort.
|
|
26
|
+
*/ const PickerSelectionProvider = ({ children, initialSelection, multiple, allowedTypes, knownFiles })=>{
|
|
27
|
+
const [selection, setSelection] = useState(initialSelection);
|
|
28
|
+
const filesById = useMemo(()=>{
|
|
29
|
+
const map = new Map();
|
|
30
|
+
[
|
|
31
|
+
...knownFiles,
|
|
32
|
+
...selection
|
|
33
|
+
].forEach((file)=>map.set(file.id, file));
|
|
34
|
+
return map;
|
|
35
|
+
}, [
|
|
36
|
+
knownFiles,
|
|
37
|
+
selection
|
|
38
|
+
]);
|
|
39
|
+
const selectedIds = useMemo(()=>new Set(selection.map((file)=>file.id)), [
|
|
40
|
+
selection
|
|
41
|
+
]);
|
|
42
|
+
const resolveSelectableFile = useCallback((key)=>{
|
|
43
|
+
const id = parseAssetId(key);
|
|
44
|
+
const file = id === null ? undefined : filesById.get(id);
|
|
45
|
+
return file && isAllowedAssetType(allowedTypes, file.mime) ? file : null;
|
|
46
|
+
}, [
|
|
47
|
+
allowedTypes,
|
|
48
|
+
filesById
|
|
49
|
+
]);
|
|
50
|
+
const getSelectability = useCallback((key)=>{
|
|
51
|
+
const id = parseAssetId(key);
|
|
52
|
+
if (id === null) {
|
|
53
|
+
return 'hidden';
|
|
54
|
+
}
|
|
55
|
+
// `allowedTypes` only stops adding an asset. One the field already holds,
|
|
56
|
+
// for example from before the schema was narrowed, must stay removable.
|
|
57
|
+
if (selectedIds.has(id)) {
|
|
58
|
+
return 'enabled';
|
|
59
|
+
}
|
|
60
|
+
const file = filesById.get(id);
|
|
61
|
+
return file && !isAllowedAssetType(allowedTypes, file.mime) ? 'disabled' : 'enabled';
|
|
62
|
+
}, [
|
|
63
|
+
allowedTypes,
|
|
64
|
+
filesById,
|
|
65
|
+
selectedIds
|
|
66
|
+
]);
|
|
67
|
+
const toggle = useCallback((key)=>{
|
|
68
|
+
const id = parseAssetId(key);
|
|
69
|
+
if (id !== null && selectedIds.has(id)) {
|
|
70
|
+
setSelection((prev)=>removeFile(prev, id));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const file = resolveSelectableFile(key);
|
|
74
|
+
if (file) {
|
|
75
|
+
setSelection((prev)=>toggleFile(prev, file, {
|
|
76
|
+
multiple
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
}, [
|
|
80
|
+
multiple,
|
|
81
|
+
resolveSelectableFile,
|
|
82
|
+
selectedIds
|
|
83
|
+
]);
|
|
84
|
+
// Select-all over the assets on screen that can be picked, appended in their
|
|
85
|
+
// on-screen order. Only a multiple-value field offers it.
|
|
86
|
+
const selectAll = useCallback((orderedKeys)=>{
|
|
87
|
+
if (!multiple) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const files = orderedKeys.map((key)=>resolveSelectableFile(key)).filter((file)=>file !== null);
|
|
91
|
+
setSelection((prev)=>addFiles(prev, files));
|
|
92
|
+
}, [
|
|
93
|
+
multiple,
|
|
94
|
+
resolveSelectableFile
|
|
95
|
+
]);
|
|
96
|
+
const selectOnly = useCallback((key)=>{
|
|
97
|
+
const file = resolveSelectableFile(key);
|
|
98
|
+
if (file) {
|
|
99
|
+
setSelection([
|
|
100
|
+
file
|
|
101
|
+
]);
|
|
102
|
+
}
|
|
103
|
+
}, [
|
|
104
|
+
resolveSelectableFile
|
|
105
|
+
]);
|
|
106
|
+
const deselect = useCallback((key)=>{
|
|
107
|
+
const id = parseAssetId(key);
|
|
108
|
+
if (id !== null) {
|
|
109
|
+
setSelection((prev)=>removeFile(prev, id));
|
|
110
|
+
}
|
|
111
|
+
}, []);
|
|
112
|
+
const deselectAll = useCallback((orderedKeys)=>{
|
|
113
|
+
const ids = new Set(orderedKeys.map((key)=>parseAssetId(key)).filter((id)=>id !== null));
|
|
114
|
+
setSelection((prev)=>removeFiles(prev, ids));
|
|
115
|
+
}, []);
|
|
116
|
+
const clear = useCallback(()=>setSelection([]), []);
|
|
117
|
+
const selectedKeys = useMemo(()=>new Set(selection.map((file)=>assetKey(file.id))), [
|
|
118
|
+
selection
|
|
119
|
+
]);
|
|
120
|
+
const isSelected = useCallback((key)=>{
|
|
121
|
+
const id = parseAssetId(key);
|
|
122
|
+
return id !== null && hasFile(selection, id);
|
|
123
|
+
}, [
|
|
124
|
+
selection
|
|
125
|
+
]);
|
|
126
|
+
const assetSelection = useMemo(()=>({
|
|
127
|
+
isEnabled: true,
|
|
128
|
+
// A single-value field holds one asset: nothing to select all of.
|
|
129
|
+
canSelectAll: multiple,
|
|
130
|
+
getSelectability,
|
|
131
|
+
selectedKeys,
|
|
132
|
+
selectedIds,
|
|
133
|
+
selectedFolderIds: NO_FOLDERS,
|
|
134
|
+
anchorKey: null,
|
|
135
|
+
isSelected,
|
|
136
|
+
toggle,
|
|
137
|
+
// Picking is one asset at a time; a Shift+click range picks the target.
|
|
138
|
+
selectRange: (_orderedKeys, targetKey)=>toggle(targetKey),
|
|
139
|
+
selectAll,
|
|
140
|
+
selectOnly,
|
|
141
|
+
deselect,
|
|
142
|
+
deselectAll,
|
|
143
|
+
clear
|
|
144
|
+
}), [
|
|
145
|
+
multiple,
|
|
146
|
+
getSelectability,
|
|
147
|
+
selectedKeys,
|
|
148
|
+
selectedIds,
|
|
149
|
+
isSelected,
|
|
150
|
+
toggle,
|
|
151
|
+
selectAll,
|
|
152
|
+
selectOnly,
|
|
153
|
+
deselect,
|
|
154
|
+
deselectAll,
|
|
155
|
+
clear
|
|
156
|
+
]);
|
|
157
|
+
const moveSelectedFile = useCallback((activeId, overId)=>setSelection((prev)=>moveFile(prev, activeId, overId)), []);
|
|
158
|
+
const pickerSelection = useMemo(()=>({
|
|
159
|
+
selection,
|
|
160
|
+
moveFile: moveSelectedFile
|
|
161
|
+
}), [
|
|
162
|
+
selection,
|
|
163
|
+
moveSelectedFile
|
|
164
|
+
]);
|
|
165
|
+
return /*#__PURE__*/ jsx(PickerSelectionContext.Provider, {
|
|
166
|
+
value: pickerSelection,
|
|
167
|
+
children: /*#__PURE__*/ jsx(AssetSelectionContext.Provider, {
|
|
168
|
+
value: assetSelection,
|
|
169
|
+
children: children
|
|
170
|
+
})
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export { PickerSelectionProvider, usePickerSelection };
|
|
175
|
+
//# sourceMappingURL=PickerSelectionProvider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PickerSelectionProvider.mjs","sources":["../../../../admin/src/components/AssetPickerDialog/PickerSelectionProvider.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useMemo, useState, type ReactNode } from 'react';\n\nimport {\n AssetSelectionContext,\n type AssetSelection,\n type Selectability,\n} from '../../pages/Assets/hooks/useAssetSelection';\nimport { assetKey, type ItemKey } from '../../pages/Assets/utils/selection';\nimport { isAllowedAssetType, type MediaAllowedTypes } from '../../utils/isAllowedAssetType';\n\nimport {\n addFiles,\n hasFile,\n moveFile,\n removeFile,\n removeFiles,\n toggleFile,\n type PickerSelection,\n} from './pickerSelection';\n\nimport type { File } from '../../../../shared/contracts/files';\n\ninterface PickerSelectionContextValue {\n selection: PickerSelection;\n moveFile: (activeId: number, overId: number) => void;\n}\n\nconst PickerSelectionContext = createContext<PickerSelectionContextValue | null>(null);\n\nexport const usePickerSelection = () => {\n const context = useContext(PickerSelectionContext);\n\n if (!context) {\n throw new Error('usePickerSelection must be used within a PickerSelectionProvider');\n }\n\n return context;\n};\n\nconst parseAssetId = (key: ItemKey): number | null => {\n const [kind, id] = key.split(':');\n\n return kind === 'asset' ? Number(id) : null;\n};\n\nconst NO_FOLDERS = new Set<number>();\n\ninterface PickerSelectionProviderProps {\n children: ReactNode;\n initialSelection: File[];\n multiple: boolean;\n allowedTypes?: MediaAllowedTypes | null;\n /**\n * The assets on screen. Views select by key, but the selection keeps whole\n * files, so a newly picked key is resolved against these.\n */\n knownFiles: File[];\n}\n\n/**\n * The Content Manager picker's selection, behind the same `AssetSelection`\n * interface the Media Library views read: only assets are selectable, assets\n * outside `allowedTypes` are shown but cannot be picked, and the selection\n * survives folder changes, search, filters and sort.\n */\nexport const PickerSelectionProvider = ({\n children,\n initialSelection,\n multiple,\n allowedTypes,\n knownFiles,\n}: PickerSelectionProviderProps) => {\n const [selection, setSelection] = useState<PickerSelection>(initialSelection);\n\n const filesById = useMemo(() => {\n const map = new Map<number, File>();\n [...knownFiles, ...selection].forEach((file) => map.set(file.id, file));\n return map;\n }, [knownFiles, selection]);\n\n const selectedIds = useMemo(() => new Set(selection.map((file) => file.id)), [selection]);\n\n const resolveSelectableFile = useCallback(\n (key: ItemKey): File | null => {\n const id = parseAssetId(key);\n const file = id === null ? undefined : filesById.get(id);\n\n return file && isAllowedAssetType(allowedTypes, file.mime) ? file : null;\n },\n [allowedTypes, filesById]\n );\n\n const getSelectability = useCallback(\n (key: ItemKey): Selectability => {\n const id = parseAssetId(key);\n\n if (id === null) {\n return 'hidden';\n }\n\n // `allowedTypes` only stops adding an asset. One the field already holds,\n // for example from before the schema was narrowed, must stay removable.\n if (selectedIds.has(id)) {\n return 'enabled';\n }\n\n const file = filesById.get(id);\n\n return file && !isAllowedAssetType(allowedTypes, file.mime) ? 'disabled' : 'enabled';\n },\n [allowedTypes, filesById, selectedIds]\n );\n\n const toggle = useCallback(\n (key: ItemKey) => {\n const id = parseAssetId(key);\n\n if (id !== null && selectedIds.has(id)) {\n setSelection((prev) => removeFile(prev, id));\n return;\n }\n\n const file = resolveSelectableFile(key);\n\n if (file) {\n setSelection((prev) => toggleFile(prev, file, { multiple }));\n }\n },\n [multiple, resolveSelectableFile, selectedIds]\n );\n\n // Select-all over the assets on screen that can be picked, appended in their\n // on-screen order. Only a multiple-value field offers it.\n const selectAll = useCallback(\n (orderedKeys: ItemKey[]) => {\n if (!multiple) {\n return;\n }\n\n const files = orderedKeys\n .map((key) => resolveSelectableFile(key))\n .filter((file): file is File => file !== null);\n\n setSelection((prev) => addFiles(prev, files));\n },\n [multiple, resolveSelectableFile]\n );\n\n const selectOnly = useCallback(\n (key: ItemKey) => {\n const file = resolveSelectableFile(key);\n\n if (file) {\n setSelection([file]);\n }\n },\n [resolveSelectableFile]\n );\n\n const deselect = useCallback((key: ItemKey) => {\n const id = parseAssetId(key);\n\n if (id !== null) {\n setSelection((prev) => removeFile(prev, id));\n }\n }, []);\n\n const deselectAll = useCallback((orderedKeys: ItemKey[]) => {\n const ids = new Set(\n orderedKeys.map((key) => parseAssetId(key)).filter((id): id is number => id !== null)\n );\n\n setSelection((prev) => removeFiles(prev, ids));\n }, []);\n\n const clear = useCallback(() => setSelection([]), []);\n\n const selectedKeys = useMemo(\n () => new Set(selection.map((file) => assetKey(file.id))),\n [selection]\n );\n\n const isSelected = useCallback(\n (key: ItemKey) => {\n const id = parseAssetId(key);\n\n return id !== null && hasFile(selection, id);\n },\n [selection]\n );\n\n const assetSelection = useMemo<AssetSelection>(\n () => ({\n isEnabled: true,\n // A single-value field holds one asset: nothing to select all of.\n canSelectAll: multiple,\n getSelectability,\n selectedKeys,\n selectedIds,\n selectedFolderIds: NO_FOLDERS,\n anchorKey: null,\n isSelected,\n toggle,\n // Picking is one asset at a time; a Shift+click range picks the target.\n selectRange: (_orderedKeys, targetKey) => toggle(targetKey),\n selectAll,\n selectOnly,\n deselect,\n deselectAll,\n clear,\n }),\n [\n multiple,\n getSelectability,\n selectedKeys,\n selectedIds,\n isSelected,\n toggle,\n selectAll,\n selectOnly,\n deselect,\n deselectAll,\n clear,\n ]\n );\n\n const moveSelectedFile = useCallback(\n (activeId: number, overId: number) => setSelection((prev) => moveFile(prev, activeId, overId)),\n []\n );\n\n const pickerSelection = useMemo(\n () => ({ selection, moveFile: moveSelectedFile }),\n [selection, moveSelectedFile]\n );\n\n return (\n <PickerSelectionContext.Provider value={pickerSelection}>\n <AssetSelectionContext.Provider value={assetSelection}>\n {children}\n </AssetSelectionContext.Provider>\n </PickerSelectionContext.Provider>\n );\n};\n"],"names":["PickerSelectionContext","createContext","usePickerSelection","context","useContext","Error","parseAssetId","key","kind","id","split","Number","NO_FOLDERS","Set","PickerSelectionProvider","children","initialSelection","multiple","allowedTypes","knownFiles","selection","setSelection","useState","filesById","useMemo","map","Map","forEach","file","set","selectedIds","resolveSelectableFile","useCallback","undefined","get","isAllowedAssetType","mime","getSelectability","has","toggle","prev","removeFile","toggleFile","selectAll","orderedKeys","files","filter","addFiles","selectOnly","deselect","deselectAll","ids","removeFiles","clear","selectedKeys","assetKey","isSelected","hasFile","assetSelection","isEnabled","canSelectAll","selectedFolderIds","anchorKey","selectRange","_orderedKeys","targetKey","moveSelectedFile","activeId","overId","moveFile","pickerSelection","_jsx","Provider","value","AssetSelectionContext"],"mappings":"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"}
|