@strapi/upload 5.58.0 → 5.60.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/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/MediaLibraryInput/AddAssetMenu.js +142 -0
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs +140 -0
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs.map +1 -0
- 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 +156 -0
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs +154 -0
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs.map +1 -0
- 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 +211 -0
- package/dist/admin/components/MediaLibraryInput/AssetRow.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetRow.mjs +208 -0
- package/dist/admin/components/MediaLibraryInput/AssetRow.mjs.map +1 -0
- 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 +439 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +433 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -0
- 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/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/useAIMetadataAvailability.js +5 -1
- package/dist/admin/hooks/useAIMetadataAvailability.js.map +1 -1
- package/dist/admin/hooks/useAIMetadataAvailability.mjs +5 -1
- package/dist/admin/hooks/useAIMetadataAvailability.mjs.map +1 -1
- package/dist/admin/hooks/useAIMetadataEnabled.js +7 -1
- package/dist/admin/hooks/useAIMetadataEnabled.js.map +1 -1
- package/dist/admin/hooks/useAIMetadataEnabled.mjs +7 -1
- package/dist/admin/hooks/useAIMetadataEnabled.mjs.map +1 -1
- package/dist/admin/hooks/useMediaLibraryPermissions.js +16 -2
- package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -1
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs +16 -2
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -1
- package/dist/admin/hooks/useTracking.js +5 -1
- package/dist/admin/hooks/useTracking.js.map +1 -1
- package/dist/admin/hooks/useTracking.mjs +5 -1
- package/dist/admin/hooks/useTracking.mjs.map +1 -1
- package/dist/admin/index.js +7 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +7 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetCard/AssetCardBase.js.map +1 -1
- package/dist/admin/legacy/components/AssetCard/AssetCardBase.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetCard/VideoPreview.js +2 -1
- package/dist/admin/legacy/components/AssetCard/VideoPreview.js.map +1 -1
- package/dist/admin/legacy/components/AssetCard/VideoPreview.mjs +2 -1
- package/dist/admin/legacy/components/AssetCard/VideoPreview.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/AssetDialog.js +3 -1
- package/dist/admin/legacy/components/AssetDialog/AssetDialog.js.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/AssetDialog.mjs +3 -1
- package/dist/admin/legacy/components/AssetDialog/AssetDialog.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.js +3 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.mjs +3 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/Filters.js.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/Filters.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetGridList/AssetGridList.js +7 -6
- package/dist/admin/legacy/components/AssetGridList/AssetGridList.js.map +1 -1
- package/dist/admin/legacy/components/AssetGridList/AssetGridList.mjs +7 -6
- package/dist/admin/legacy/components/AssetGridList/AssetGridList.mjs.map +1 -1
- package/dist/admin/legacy/components/Breadcrumbs/CrumbSimpleMenuAsync.js +2 -1
- package/dist/admin/legacy/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -1
- package/dist/admin/legacy/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +2 -1
- package/dist/admin/legacy/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -1
- package/dist/admin/legacy/components/BulkMoveDialog/BulkMoveDialog.js +2 -1
- package/dist/admin/legacy/components/BulkMoveDialog/BulkMoveDialog.js.map +1 -1
- package/dist/admin/legacy/components/BulkMoveDialog/BulkMoveDialog.mjs +2 -1
- package/dist/admin/legacy/components/BulkMoveDialog/BulkMoveDialog.mjs.map +1 -1
- package/dist/admin/legacy/components/EditAssetDialog/EditAssetContent.js +3 -1
- package/dist/admin/legacy/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/legacy/components/EditAssetDialog/EditAssetContent.mjs +3 -1
- package/dist/admin/legacy/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/legacy/components/FilterList/FilterList.js.map +1 -1
- package/dist/admin/legacy/components/FilterList/FilterList.mjs.map +1 -1
- package/dist/admin/legacy/components/FilterPopover/FilterPopover.js.map +1 -1
- package/dist/admin/legacy/components/FilterPopover/FilterPopover.mjs.map +1 -1
- package/dist/admin/legacy/components/FilterPopover/FilterValueInput.js +2 -1
- package/dist/admin/legacy/components/FilterPopover/FilterValueInput.js.map +1 -1
- package/dist/admin/legacy/components/FilterPopover/FilterValueInput.mjs +2 -1
- package/dist/admin/legacy/components/FilterPopover/FilterValueInput.mjs.map +1 -1
- package/dist/admin/legacy/components/MediaLibraryDialog/MediaLibraryDialog.js +4 -2
- package/dist/admin/legacy/components/MediaLibraryDialog/MediaLibraryDialog.js.map +1 -1
- package/dist/admin/legacy/components/MediaLibraryDialog/MediaLibraryDialog.mjs +4 -2
- package/dist/admin/legacy/components/MediaLibraryDialog/MediaLibraryDialog.mjs.map +1 -1
- package/dist/admin/legacy/components/MediaLibraryInput/MediaLibraryInput.js +2 -1
- package/dist/admin/legacy/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
- package/dist/admin/legacy/components/MediaLibraryInput/MediaLibraryInput.mjs +2 -1
- package/dist/admin/legacy/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
- package/dist/admin/legacy/components/SelectTree/SelectTree.js +3 -1
- package/dist/admin/legacy/components/SelectTree/SelectTree.js.map +1 -1
- package/dist/admin/legacy/components/SelectTree/SelectTree.mjs +3 -1
- package/dist/admin/legacy/components/SelectTree/SelectTree.mjs.map +1 -1
- package/dist/admin/legacy/components/TableList/TableList.js +3 -1
- package/dist/admin/legacy/components/TableList/TableList.js.map +1 -1
- package/dist/admin/legacy/components/TableList/TableList.mjs +3 -1
- package/dist/admin/legacy/components/TableList/TableList.mjs.map +1 -1
- package/dist/admin/legacy/components/TableList/TableRows.js +3 -1
- package/dist/admin/legacy/components/TableList/TableRows.js.map +1 -1
- package/dist/admin/legacy/components/TableList/TableRows.mjs +3 -1
- package/dist/admin/legacy/components/TableList/TableRows.mjs.map +1 -1
- package/dist/admin/legacy/components/UploadAssetDialog/UploadAssetDialog.js +3 -1
- package/dist/admin/legacy/components/UploadAssetDialog/UploadAssetDialog.js.map +1 -1
- package/dist/admin/legacy/components/UploadAssetDialog/UploadAssetDialog.mjs +3 -1
- package/dist/admin/legacy/components/UploadAssetDialog/UploadAssetDialog.mjs.map +1 -1
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
- package/dist/admin/legacy/pages/App/components/BulkActions.js +2 -1
- package/dist/admin/legacy/pages/App/components/BulkActions.js.map +1 -1
- package/dist/admin/legacy/pages/App/components/BulkActions.mjs +2 -1
- package/dist/admin/legacy/pages/App/components/BulkActions.mjs.map +1 -1
- package/dist/admin/legacy/pages/App/components/BulkMoveButton.js +2 -1
- package/dist/admin/legacy/pages/App/components/BulkMoveButton.js.map +1 -1
- package/dist/admin/legacy/pages/App/components/BulkMoveButton.mjs +2 -1
- package/dist/admin/legacy/pages/App/components/BulkMoveButton.mjs.map +1 -1
- package/dist/admin/pages/Assets/AssetsPage.js +13 -302
- package/dist/admin/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/pages/Assets/AssetsPage.mjs +11 -280
- package/dist/admin/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.js +143 -31
- package/dist/admin/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs +146 -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 +60 -35
- package/dist/admin/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsTable.mjs +62 -37
- 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.js +3 -1
- package/dist/admin/pages/Assets/components/BulkActionsBar.js.map +1 -1
- package/dist/admin/pages/Assets/components/BulkActionsBar.mjs +4 -2
- package/dist/admin/pages/Assets/components/BulkActionsBar.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/BusyOverlay.mjs +1 -1
- package/dist/admin/pages/Assets/components/DateRangeCalendar.js +10 -7
- package/dist/admin/pages/Assets/components/DateRangeCalendar.js.map +1 -1
- package/dist/admin/pages/Assets/components/DateRangeCalendar.mjs +10 -7
- package/dist/admin/pages/Assets/components/DateRangeCalendar.mjs.map +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/DropZone/UploadDropZoneContext.js +4 -2
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -1
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +5 -3
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/FilterBadges.js +32 -3
- package/dist/admin/pages/Assets/components/FilterBadges.js.map +1 -1
- package/dist/admin/pages/Assets/components/FilterBadges.mjs +35 -6
- package/dist/admin/pages/Assets/components/FilterBadges.mjs.map +1 -1
- 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/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 +106 -11
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +105 -13
- 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/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/MediaLibraryInput/AddAssetMenu.d.ts +19 -0
- 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 +21 -0
- package/dist/admin/src/components/MediaLibraryInput/AssetPreview.d.ts +17 -0
- package/dist/admin/src/components/MediaLibraryInput/AssetRow.d.ts +25 -0
- package/dist/admin/src/components/MediaLibraryInput/FieldControls.d.ts +19 -0
- package/dist/admin/src/components/MediaLibraryInput/MediaLibraryInput.d.ts +28 -0
- package/dist/admin/src/components/MediaLibraryInput/UploadProgressBar.d.ts +7 -0
- package/dist/admin/src/components/MediaLibraryInput/useFieldUploads.d.ts +31 -0
- package/dist/admin/src/hooks/useMediaLibraryPermissions.d.ts +3 -0
- package/dist/admin/src/legacy/components/BulkMoveDialog/BulkMoveDialog.d.ts +1 -1
- package/dist/admin/src/legacy/pages/App/components/BulkActions.d.ts +1 -1
- 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/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 +30 -1
- package/dist/admin/src/store/uploadProgress.d.ts +14 -1
- package/dist/admin/src/utils/allowedMediaTypes.d.ts +16 -0
- 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/ca.json.js +3 -3
- package/dist/admin/translations/ca.json.mjs +3 -3
- package/dist/admin/translations/da.json.js +1 -1
- package/dist/admin/translations/da.json.mjs +1 -1
- package/dist/admin/translations/de.json.js +1 -1
- package/dist/admin/translations/de.json.mjs +1 -1
- package/dist/admin/translations/en.json.js +29 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +29 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +1 -1
- package/dist/admin/translations/es.json.mjs +1 -1
- package/dist/admin/translations/sk.json.js +2 -2
- package/dist/admin/translations/sk.json.mjs +2 -2
- package/dist/admin/translations/tr.json.js +2 -2
- package/dist/admin/translations/tr.json.mjs +2 -2
- package/dist/admin/translations/zh-Hans.json.js +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs +1 -1
- package/dist/admin/translations/zh.json.js +2 -2
- package/dist/admin/translations/zh.json.mjs +2 -2
- package/dist/admin/utils/allowedMediaTypes.js +42 -0
- package/dist/admin/utils/allowedMediaTypes.js.map +1 -0
- package/dist/admin/utils/allowedMediaTypes.mjs +39 -0
- package/dist/admin/utils/allowedMediaTypes.mjs.map +1 -0
- 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/config.js +6 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +6 -0
- package/dist/server/config.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/controllers/validation/admin/upload.js.map +1 -1
- package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
- package/dist/server/controllers/validation/content-api/upload.js.map +1 -1
- package/dist/server/controllers/validation/content-api/upload.mjs.map +1 -1
- package/dist/server/mcp/ambient-instance.js +7 -5
- package/dist/server/mcp/ambient-instance.js.map +1 -1
- package/dist/server/mcp/ambient-instance.mjs +7 -5
- package/dist/server/mcp/ambient-instance.mjs.map +1 -1
- package/dist/server/mcp/handlers/folder-handlers.js +4 -16
- package/dist/server/mcp/handlers/folder-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/folder-handlers.mjs +5 -17
- package/dist/server/mcp/handlers/folder-handlers.mjs.map +1 -1
- package/dist/server/mcp/handlers/read-handlers.js +6 -14
- package/dist/server/mcp/handlers/read-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/read-handlers.mjs +7 -15
- package/dist/server/mcp/handlers/read-handlers.mjs.map +1 -1
- package/dist/server/mcp/handlers/write-handlers.js +3 -13
- package/dist/server/mcp/handlers/write-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/write-handlers.mjs +3 -13
- package/dist/server/mcp/handlers/write-handlers.mjs.map +1 -1
- package/dist/server/mcp/register-upload-mcp-tools.js +215 -195
- package/dist/server/mcp/register-upload-mcp-tools.js.map +1 -1
- package/dist/server/mcp/register-upload-mcp-tools.mjs +215 -195
- package/dist/server/mcp/register-upload-mcp-tools.mjs.map +1 -1
- package/dist/server/services/image-manipulation.js +35 -16
- package/dist/server/services/image-manipulation.js.map +1 -1
- package/dist/server/services/image-manipulation.mjs +35 -16
- package/dist/server/services/image-manipulation.mjs.map +1 -1
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/config.d.ts +3 -0
- package/dist/server/src/config.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-api/upload.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/ambient-instance.d.ts +7 -5
- package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/folder-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/read-handlers.d.ts +3 -2
- package/dist/server/src/mcp/handlers/read-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/write-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/register-upload-mcp-tools.d.ts +9 -14
- package/dist/server/src/mcp/register-upload-mcp-tools.d.ts.map +1 -1
- package/dist/server/src/services/extensions/utils.d.ts +11 -11
- package/dist/server/src/services/image-manipulation.d.ts +1 -1
- package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -1
- package/dist/server/src/types.d.ts +64 -12
- package/dist/server/src/types.d.ts.map +1 -1
- package/package.json +8 -6
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
2
|
+
import { useMemo, useRef, useCallback, useEffect, useState, useId, createElement } from 'react';
|
|
3
|
+
import { useDroppable } from '@dnd-kit/core';
|
|
3
4
|
import { SubNav } from '@strapi/admin/strapi-admin';
|
|
4
|
-
import { Flex, Typography, Box, Loader, IconButton } from '@strapi/design-system';
|
|
5
|
-
import { House, Folder, ChevronDown } from '@strapi/icons';
|
|
5
|
+
import { Flex, Typography, Box, Loader, Tooltip, IconButton } from '@strapi/design-system';
|
|
6
|
+
import { House, Folder, More, ChevronRight, ChevronDown } from '@strapi/icons';
|
|
6
7
|
import { useIntl } from 'react-intl';
|
|
7
8
|
import { css, styled } from 'styled-components';
|
|
8
|
-
import { TruncatedText } from '../../../../components/TruncatedText.mjs';
|
|
9
9
|
import { useGetFolderStructureQuery } from '../../../../services/folders.mjs';
|
|
10
|
+
import { findFolderPath } from '../../../../utils/findFolderPath.mjs';
|
|
10
11
|
import { isEventFromWithin } from '../../../../utils/isEventFromWithin.mjs';
|
|
11
12
|
import { getTranslationKey } from '../../../../utils/translations.mjs';
|
|
12
13
|
import { useAssetsDndOptional } from '../Dnd/AssetsDndProvider.mjs';
|
|
14
|
+
import { toFolderTreeSummaryId } from '../Dnd/dndIds.mjs';
|
|
13
15
|
import { useFolderTreeDroppable } from '../Dnd/useFolderTreeDroppable.mjs';
|
|
16
|
+
import { getCollapsedBranch } from './collapsedBranch.mjs';
|
|
14
17
|
import { FolderTreeRowMenu } from './FolderTreeRowMenu.mjs';
|
|
15
18
|
import { useSpringLoadedExpand } from './useSpringLoadedExpand.mjs';
|
|
16
19
|
|
|
@@ -54,6 +57,13 @@ import { useSpringLoadedExpand } from './useSpringLoadedExpand.mjs';
|
|
|
54
57
|
outline-offset: -2px;
|
|
55
58
|
}
|
|
56
59
|
`;
|
|
60
|
+
// Squared where path rows meet, so the path reads as one block rather than a
|
|
61
|
+
// stack of separately highlighted rows.
|
|
62
|
+
const getOpenPathRadius = (segment, radius)=>({
|
|
63
|
+
start: `${radius} ${radius} 0 0`,
|
|
64
|
+
middle: '0',
|
|
65
|
+
end: `0 0 ${radius} ${radius}`
|
|
66
|
+
})[segment];
|
|
57
67
|
const TreeRow = styled(Flex)`
|
|
58
68
|
cursor: ${({ $isMovePending, $isInvalidDropCursor })=>{
|
|
59
69
|
if ($isMovePending) {
|
|
@@ -62,13 +72,28 @@ const TreeRow = styled(Flex)`
|
|
|
62
72
|
return $isInvalidDropCursor ? 'not-allowed' : 'default';
|
|
63
73
|
}};
|
|
64
74
|
pointer-events: ${({ $isMovePending })=>$isMovePending ? 'none' : 'auto'};
|
|
65
|
-
border-radius: ${({ theme })
|
|
66
|
-
background: ${({ $isActive, theme })
|
|
75
|
+
border-radius: ${({ $openPathSegment, theme })=>$openPathSegment ? getOpenPathRadius($openPathSegment, theme.borderRadius) : theme.borderRadius};
|
|
76
|
+
background: ${({ $isActive, $openPathSegment, theme })=>{
|
|
77
|
+
if ($isActive) {
|
|
78
|
+
return theme.colors.primary100;
|
|
79
|
+
}
|
|
80
|
+
// While a summary row is open, the path down to the open folder is tinted —
|
|
81
|
+
// the folders it reveals plus the parent — so the tint reads as "on the way
|
|
82
|
+
// here" and the open folder's own highlight as "here".
|
|
83
|
+
return $openPathSegment ? theme.colors.neutral100 : 'transparent';
|
|
84
|
+
}};
|
|
67
85
|
|
|
68
86
|
// The whole row lights up, so pointing anywhere along it — chevron, label or
|
|
69
|
-
// the actions trigger — reads as one target.
|
|
87
|
+
// the actions trigger — reads as one target. A path row steps past its tint
|
|
88
|
+
// rather than to primary100, which would make it look like a second open
|
|
89
|
+
// folder (and, in dark mode, is the same colour as the tint).
|
|
70
90
|
&:hover {
|
|
71
|
-
background: ${({ $isActive, theme })
|
|
91
|
+
background: ${({ $isActive, $openPathSegment, theme })=>{
|
|
92
|
+
if ($isActive) {
|
|
93
|
+
return theme.colors.primary100;
|
|
94
|
+
}
|
|
95
|
+
return $openPathSegment ? theme.colors.neutral150 : theme.colors.neutral100;
|
|
96
|
+
}};
|
|
72
97
|
}
|
|
73
98
|
|
|
74
99
|
${({ $isValidDropTarget, theme })=>$isValidDropTarget && css`
|
|
@@ -83,31 +108,14 @@ const TreeRow = styled(Flex)`
|
|
|
83
108
|
`;
|
|
84
109
|
/* -------------------------------------------------------------------------------------------------
|
|
85
110
|
* useExpandedFolders — local expand/collapse state
|
|
86
|
-
* -----------------------------------------------------------------------------------------------*/ const
|
|
87
|
-
for (const node of nodes){
|
|
88
|
-
if (node.id === targetId) {
|
|
89
|
-
return trail;
|
|
90
|
-
}
|
|
91
|
-
if (node.children?.length) {
|
|
92
|
-
const nextTrail = node.id != null ? [
|
|
93
|
-
...trail,
|
|
94
|
-
node.id
|
|
95
|
-
] : trail;
|
|
96
|
-
const found = findAncestorIds(node.children, targetId, nextTrail);
|
|
97
|
-
if (found !== null) {
|
|
98
|
-
return found;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
103
|
-
};
|
|
104
|
-
const useExpandedFolders = (folderStructure, currentFolderId)=>{
|
|
111
|
+
* -----------------------------------------------------------------------------------------------*/ const useExpandedFolders = (folderStructure, currentFolderId)=>{
|
|
105
112
|
const [expandedIds, setExpandedIds] = useState(()=>new Set());
|
|
106
113
|
useEffect(()=>{
|
|
107
114
|
if (currentFolderId == null) {
|
|
108
115
|
return;
|
|
109
116
|
}
|
|
110
|
-
|
|
117
|
+
// The path ends with the current folder itself, which needs no expanding.
|
|
118
|
+
const ancestors = findFolderPath(folderStructure, currentFolderId)?.slice(0, -1).map((folder)=>folder.id).filter((id)=>id != null);
|
|
111
119
|
if (!ancestors || ancestors.length === 0) {
|
|
112
120
|
return;
|
|
113
121
|
}
|
|
@@ -182,6 +190,11 @@ const useExpandedFolders = (folderStructure, currentFolderId)=>{
|
|
|
182
190
|
/* -------------------------------------------------------------------------------------------------
|
|
183
191
|
* FolderTreeItem — single tree row (internal)
|
|
184
192
|
* -----------------------------------------------------------------------------------------------*/ const INDENT_PER_LEVEL_REM = 1.6;
|
|
193
|
+
/**
|
|
194
|
+
* Deeper rows keep this level's indent, so a name never runs out of room however
|
|
195
|
+
* deep the tree goes. Rows past it stay readable through their path tooltip.
|
|
196
|
+
*/ const MAX_VISUAL_LEVEL = 4;
|
|
197
|
+
const getIndentRem = (level)=>Math.min(level, MAX_VISUAL_LEVEL) * INDENT_PER_LEVEL_REM;
|
|
185
198
|
/**
|
|
186
199
|
* Breathing room between the row's highlight and the controls at either end.
|
|
187
200
|
* Asymmetric on purpose: the chevron reads as part of the indent, while the
|
|
@@ -232,7 +245,7 @@ const RotatingChevron = styled(ChevronDown)`
|
|
|
232
245
|
transform: rotate(${({ $expanded })=>$expanded ? '0deg' : '-90deg'});
|
|
233
246
|
transition: transform 0.2s ease;
|
|
234
247
|
`;
|
|
235
|
-
const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, currentFolderId, showActiveFolder, isExpanded, onToggle, onExpand, onSelect, isMovePending })=>{
|
|
248
|
+
const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, currentFolderId, showActiveFolder, isExpanded, onToggle, onExpand, onSelect, isMovePending, ancestorNames, isHiddenAncestor = false, openPathSegment, subtree })=>{
|
|
236
249
|
const { formatMessage } = useIntl();
|
|
237
250
|
const hasChildren = folderChildren.length > 0;
|
|
238
251
|
// A folder keeps its entry in the expanded set after its last subfolder is
|
|
@@ -240,6 +253,14 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
240
253
|
// show" — otherwise the chevron stays rotated on what is now a leaf.
|
|
241
254
|
const isFolderExpanded = isExpanded(id) && hasChildren;
|
|
242
255
|
const isActive = showActiveFolder && currentFolderId === id;
|
|
256
|
+
const pathLabel = [
|
|
257
|
+
formatMessage({
|
|
258
|
+
id: getTranslationKey('plugin.name'),
|
|
259
|
+
defaultMessage: 'Media Library'
|
|
260
|
+
}),
|
|
261
|
+
...ancestorNames,
|
|
262
|
+
name
|
|
263
|
+
].join(' / ');
|
|
243
264
|
const { droppable: { setNodeRef }, isOver, showValidDropHighlight, showInvalidDropCursor } = useFolderTreeDroppable({
|
|
244
265
|
id,
|
|
245
266
|
name
|
|
@@ -254,7 +275,7 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
254
275
|
const rowButtonRef = useRef(null);
|
|
255
276
|
useSpringLoadedExpand({
|
|
256
277
|
isOver,
|
|
257
|
-
canExpand: hasChildren && !isFolderExpanded,
|
|
278
|
+
canExpand: !isHiddenAncestor && hasChildren && !isFolderExpanded,
|
|
258
279
|
onExpand: handleExpand
|
|
259
280
|
});
|
|
260
281
|
// TODO: full `role="tree"` + arrow-key treeview navigation before revamp GA
|
|
@@ -267,10 +288,11 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
267
288
|
alignItems: "center",
|
|
268
289
|
// Indent plus the row's own inset, so the chevron never sits flush
|
|
269
290
|
// against the edge of the highlight at any depth.
|
|
270
|
-
paddingLeft: `${level
|
|
291
|
+
paddingLeft: `${getIndentRem(level) + ROW_INSET_LEFT_REM}rem`,
|
|
271
292
|
paddingRight: `${ROW_INSET_RIGHT_REM}rem`,
|
|
272
293
|
gap: 1,
|
|
273
294
|
$isActive: isActive,
|
|
295
|
+
$openPathSegment: openPathSegment,
|
|
274
296
|
$isValidDropTarget: showValidDropHighlight,
|
|
275
297
|
$isInvalidDropCursor: showInvalidDropCursor,
|
|
276
298
|
$isMovePending: isMovePending,
|
|
@@ -285,7 +307,9 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
285
307
|
});
|
|
286
308
|
},
|
|
287
309
|
children: [
|
|
288
|
-
/*#__PURE__*/ jsx(
|
|
310
|
+
isHiddenAncestor ? /*#__PURE__*/ jsx(IconSlot, {
|
|
311
|
+
"aria-hidden": true
|
|
312
|
+
}) : /*#__PURE__*/ jsx(ChevronButton, {
|
|
289
313
|
label: hasChildren ? formatMessage({
|
|
290
314
|
id: getTranslationKey(isFolderExpanded ? 'sidebar.tree.collapse' : 'sidebar.tree.expand'),
|
|
291
315
|
defaultMessage: isFolderExpanded ? 'Collapse {name}' : 'Expand {name}'
|
|
@@ -313,21 +337,25 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
313
337
|
/*#__PURE__*/ jsx(Box, {
|
|
314
338
|
flex: "1",
|
|
315
339
|
minWidth: 0,
|
|
316
|
-
children: /*#__PURE__*/ jsx(
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
340
|
+
children: /*#__PURE__*/ jsx(Tooltip, {
|
|
341
|
+
label: pathLabel,
|
|
342
|
+
children: /*#__PURE__*/ jsx(RowButton, {
|
|
343
|
+
ref: rowButtonRef,
|
|
344
|
+
type: "button",
|
|
345
|
+
$isActive: isActive,
|
|
346
|
+
$isValidDropTarget: showValidDropHighlight,
|
|
347
|
+
$isInvalidDropCursor: showInvalidDropCursor,
|
|
348
|
+
$isMovePending: isMovePending,
|
|
349
|
+
"aria-current": isActive ? 'page' : undefined,
|
|
350
|
+
onClick: ()=>onSelect(id),
|
|
351
|
+
"data-testid": `folder-tree-node-${id}`,
|
|
352
|
+
"data-folder-id": id,
|
|
353
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
354
|
+
ellipsis: true,
|
|
355
|
+
variant: "omega",
|
|
356
|
+
fontWeight: isActive ? 'semiBold' : 'regular',
|
|
357
|
+
children: name
|
|
358
|
+
})
|
|
331
359
|
})
|
|
332
360
|
})
|
|
333
361
|
}),
|
|
@@ -343,7 +371,7 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
343
371
|
})
|
|
344
372
|
]
|
|
345
373
|
}),
|
|
346
|
-
hasChildren && isFolderExpanded && /*#__PURE__*/ jsx(NavList, {
|
|
374
|
+
hasChildren && isFolderExpanded && !isHiddenAncestor && (subtree ?? /*#__PURE__*/ jsx(NavList, {
|
|
347
375
|
children: folderChildren.map((child)=>/*#__PURE__*/ jsx(FolderTreeItem, {
|
|
348
376
|
node: child,
|
|
349
377
|
parentId: id,
|
|
@@ -354,9 +382,13 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
354
382
|
onToggle: onToggle,
|
|
355
383
|
onExpand: onExpand,
|
|
356
384
|
onSelect: onSelect,
|
|
357
|
-
isMovePending: isMovePending
|
|
385
|
+
isMovePending: isMovePending,
|
|
386
|
+
ancestorNames: [
|
|
387
|
+
...ancestorNames,
|
|
388
|
+
name
|
|
389
|
+
]
|
|
358
390
|
}, child.id ?? child.name))
|
|
359
|
-
})
|
|
391
|
+
}))
|
|
360
392
|
]
|
|
361
393
|
});
|
|
362
394
|
};
|
|
@@ -371,6 +403,155 @@ const FolderTreeItem = ({ node, ...props })=>{
|
|
|
371
403
|
folderChildren: node.children ?? []
|
|
372
404
|
});
|
|
373
405
|
};
|
|
406
|
+
/* -------------------------------------------------------------------------------------------------
|
|
407
|
+
* CollapsedAncestors — the "N parent folders" row of a deep branch (internal)
|
|
408
|
+
* -----------------------------------------------------------------------------------------------*/ const SummaryLabel = styled(Typography)`
|
|
409
|
+
font-style: italic;
|
|
410
|
+
`;
|
|
411
|
+
const SummaryChevron = styled(ChevronRight)`
|
|
412
|
+
transform: rotate(${({ $expanded })=>$expanded ? '90deg' : '0deg'});
|
|
413
|
+
transition: transform 0.2s ease;
|
|
414
|
+
`;
|
|
415
|
+
/**
|
|
416
|
+
* Stands in for the folders between a deep branch's root and the selected
|
|
417
|
+
* folder's parent, and lists them in place when opened.
|
|
418
|
+
*/ const CollapsedAncestors = ({ branch, isOpen, onOpenChange, ...itemProps })=>{
|
|
419
|
+
const { formatMessage } = useIntl();
|
|
420
|
+
const listId = useId();
|
|
421
|
+
const open = useCallback(()=>onOpenChange(true), [
|
|
422
|
+
onOpenChange
|
|
423
|
+
]);
|
|
424
|
+
const rootName = branch.root.name ?? '';
|
|
425
|
+
const hiddenNames = branch.hidden.map((node)=>node.name ?? '');
|
|
426
|
+
// Without this the hidden folders would be unreachable mid-drag, since the row
|
|
427
|
+
// can't be clicked while dragging. It never resolves to a destination.
|
|
428
|
+
const { setNodeRef, isOver } = useDroppable({
|
|
429
|
+
id: toFolderTreeSummaryId(branch.root.id),
|
|
430
|
+
disabled: itemProps.isMovePending
|
|
431
|
+
});
|
|
432
|
+
useSpringLoadedExpand({
|
|
433
|
+
isOver,
|
|
434
|
+
canExpand: !isOpen,
|
|
435
|
+
onExpand: open
|
|
436
|
+
});
|
|
437
|
+
return /*#__PURE__*/ jsxs("li", {
|
|
438
|
+
children: [
|
|
439
|
+
/*#__PURE__*/ jsx(TreeRow, {
|
|
440
|
+
ref: setNodeRef,
|
|
441
|
+
"data-native-context-menu": true,
|
|
442
|
+
alignItems: "center",
|
|
443
|
+
paddingLeft: `${getIndentRem(1) + ROW_INSET_LEFT_REM}rem`,
|
|
444
|
+
paddingRight: `${ROW_INSET_RIGHT_REM}rem`,
|
|
445
|
+
$isInvalidDropCursor: isOver,
|
|
446
|
+
$isMovePending: itemProps.isMovePending,
|
|
447
|
+
children: /*#__PURE__*/ jsx(Tooltip, {
|
|
448
|
+
label: hiddenNames.join(' / '),
|
|
449
|
+
children: /*#__PURE__*/ jsxs(RowButton, {
|
|
450
|
+
type: "button",
|
|
451
|
+
$isActive: false,
|
|
452
|
+
$isInvalidDropCursor: isOver,
|
|
453
|
+
$isMovePending: itemProps.isMovePending,
|
|
454
|
+
"aria-expanded": isOpen,
|
|
455
|
+
"aria-controls": isOpen ? listId : undefined,
|
|
456
|
+
onClick: ()=>onOpenChange(!isOpen),
|
|
457
|
+
"data-testid": "folder-tree-hidden-ancestors",
|
|
458
|
+
children: [
|
|
459
|
+
/*#__PURE__*/ jsx(IconSlot, {
|
|
460
|
+
children: /*#__PURE__*/ jsx(More, {
|
|
461
|
+
"aria-hidden": true,
|
|
462
|
+
fill: "neutral500"
|
|
463
|
+
})
|
|
464
|
+
}),
|
|
465
|
+
/*#__PURE__*/ jsx(Box, {
|
|
466
|
+
flex: "1",
|
|
467
|
+
minWidth: 0,
|
|
468
|
+
children: /*#__PURE__*/ jsx(SummaryLabel, {
|
|
469
|
+
ellipsis: true,
|
|
470
|
+
variant: "omega",
|
|
471
|
+
textColor: "neutral600",
|
|
472
|
+
children: formatMessage({
|
|
473
|
+
id: getTranslationKey('sidebar.tree.hidden-ancestors'),
|
|
474
|
+
defaultMessage: '{count, plural, one {# parent folder} other {# parent folders}}'
|
|
475
|
+
}, {
|
|
476
|
+
count: branch.hidden.length
|
|
477
|
+
})
|
|
478
|
+
})
|
|
479
|
+
}),
|
|
480
|
+
/*#__PURE__*/ jsx(IconSlot, {
|
|
481
|
+
children: /*#__PURE__*/ jsx(SummaryChevron, {
|
|
482
|
+
"aria-hidden": true,
|
|
483
|
+
$expanded: isOpen,
|
|
484
|
+
fill: "neutral500"
|
|
485
|
+
})
|
|
486
|
+
})
|
|
487
|
+
]
|
|
488
|
+
})
|
|
489
|
+
})
|
|
490
|
+
}),
|
|
491
|
+
isOpen && /*#__PURE__*/ jsx(NavList, {
|
|
492
|
+
id: listId,
|
|
493
|
+
children: branch.hidden.map((node, index)=>/*#__PURE__*/ createElement(FolderTreeItem, {
|
|
494
|
+
...itemProps,
|
|
495
|
+
key: node.id ?? node.name,
|
|
496
|
+
node: node,
|
|
497
|
+
parentId: (index === 0 ? branch.root.id : branch.hidden[index - 1].id) ?? null,
|
|
498
|
+
// All at one level: they are a list of the path, not a nested tree.
|
|
499
|
+
level: 2,
|
|
500
|
+
ancestorNames: [
|
|
501
|
+
rootName,
|
|
502
|
+
...hiddenNames.slice(0, index)
|
|
503
|
+
],
|
|
504
|
+
isHiddenAncestor: true,
|
|
505
|
+
openPathSegment: index === 0 ? 'start' : 'middle'
|
|
506
|
+
}))
|
|
507
|
+
})
|
|
508
|
+
]
|
|
509
|
+
});
|
|
510
|
+
};
|
|
511
|
+
/**
|
|
512
|
+
* The root folder of a deep branch, with everything between it and the selected
|
|
513
|
+
* folder's parent folded into one row. See `getCollapsedBranch`.
|
|
514
|
+
*/ const CollapsedBranchItem = ({ branch, ...itemProps })=>{
|
|
515
|
+
const { currentFolderId } = itemProps;
|
|
516
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
517
|
+
// Closed again on every new selection, clicking a hidden folder included.
|
|
518
|
+
// Reset during render rather than in an effect, so the list never paints open
|
|
519
|
+
// for a folder it wasn't opened on.
|
|
520
|
+
const [openedOn, setOpenedOn] = useState(currentFolderId);
|
|
521
|
+
if (openedOn !== currentFolderId) {
|
|
522
|
+
setOpenedOn(currentFolderId);
|
|
523
|
+
setIsOpen(false);
|
|
524
|
+
}
|
|
525
|
+
const ancestorNamesOfParent = [
|
|
526
|
+
branch.root,
|
|
527
|
+
...branch.hidden
|
|
528
|
+
].map((node)=>node.name ?? '');
|
|
529
|
+
return /*#__PURE__*/ jsx(FolderTreeItem, {
|
|
530
|
+
...itemProps,
|
|
531
|
+
node: branch.root,
|
|
532
|
+
parentId: null,
|
|
533
|
+
level: 0,
|
|
534
|
+
ancestorNames: [],
|
|
535
|
+
subtree: /*#__PURE__*/ jsxs(NavList, {
|
|
536
|
+
children: [
|
|
537
|
+
/*#__PURE__*/ jsx(CollapsedAncestors, {
|
|
538
|
+
...itemProps,
|
|
539
|
+
branch: branch,
|
|
540
|
+
isOpen: isOpen,
|
|
541
|
+
onOpenChange: setIsOpen
|
|
542
|
+
}),
|
|
543
|
+
/*#__PURE__*/ jsx(FolderTreeItem, {
|
|
544
|
+
...itemProps,
|
|
545
|
+
node: branch.parent,
|
|
546
|
+
parentId: branch.hidden[branch.hidden.length - 1]?.id ?? branch.root.id ?? null,
|
|
547
|
+
level: 2,
|
|
548
|
+
ancestorNames: ancestorNamesOfParent,
|
|
549
|
+
openPathSegment: isOpen ? 'end' : undefined
|
|
550
|
+
})
|
|
551
|
+
]
|
|
552
|
+
})
|
|
553
|
+
});
|
|
554
|
+
};
|
|
374
555
|
const FOLDER_TREE_ROOT_SELECTOR = '[data-folder-tree-root]';
|
|
375
556
|
/**
|
|
376
557
|
* Left-rail navigation for the Media Library. Fetches folder structure internally
|
|
@@ -395,6 +576,45 @@ const FOLDER_TREE_ROOT_SELECTOR = '[data-folder-tree-root]';
|
|
|
395
576
|
const { isMovePending } = useAssetsDndOptional() ?? {
|
|
396
577
|
isMovePending: false
|
|
397
578
|
};
|
|
579
|
+
const collapsedBranch = useMemo(()=>getCollapsedBranch(folderStructure, currentFolderId), [
|
|
580
|
+
folderStructure,
|
|
581
|
+
currentFolderId
|
|
582
|
+
]);
|
|
583
|
+
// A selection that folds or unfolds a branch remounts the selected row, which
|
|
584
|
+
// drops focus to <body>. Whether focus was in the tree has to be read before
|
|
585
|
+
// the selection, since by the time the new row renders the old one is gone.
|
|
586
|
+
const restoreFocusRef = useRef(false);
|
|
587
|
+
const handleSelectFolder = useCallback((folderId)=>{
|
|
588
|
+
// Re-selecting the open folder renders nothing new, so a flag set here
|
|
589
|
+
// would linger and pull focus back on a later, unrelated navigation.
|
|
590
|
+
restoreFocusRef.current = folderId !== currentFolderId && document.activeElement?.closest(FOLDER_TREE_ROOT_SELECTOR) != null;
|
|
591
|
+
onSelectFolder(folderId);
|
|
592
|
+
}, [
|
|
593
|
+
currentFolderId,
|
|
594
|
+
onSelectFolder
|
|
595
|
+
]);
|
|
596
|
+
useEffect(()=>{
|
|
597
|
+
if (!restoreFocusRef.current || currentFolderId == null) {
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
restoreFocusRef.current = false;
|
|
601
|
+
// Only take back the focus the remount dropped, never steal it from elsewhere.
|
|
602
|
+
if (document.activeElement !== document.body) {
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
document.querySelector(`${FOLDER_TREE_ROOT_SELECTOR} [data-folder-id="${currentFolderId}"]`)?.focus();
|
|
606
|
+
}, [
|
|
607
|
+
currentFolderId
|
|
608
|
+
]);
|
|
609
|
+
const sharedItemProps = {
|
|
610
|
+
currentFolderId,
|
|
611
|
+
showActiveFolder,
|
|
612
|
+
isExpanded,
|
|
613
|
+
onToggle: toggleExpanded,
|
|
614
|
+
onExpand: expandFolder,
|
|
615
|
+
onSelect: handleSelectFolder,
|
|
616
|
+
isMovePending
|
|
617
|
+
};
|
|
398
618
|
const isHomeActive = showActiveFolder && currentFolderId == null;
|
|
399
619
|
const homeLabel = formatMessage({
|
|
400
620
|
id: getTranslationKey('sidebar.home'),
|
|
@@ -529,18 +749,16 @@ const FOLDER_TREE_ROOT_SELECTOR = '[data-folder-tree-root]';
|
|
|
529
749
|
})
|
|
530
750
|
})
|
|
531
751
|
}) : /*#__PURE__*/ jsx(NavList, {
|
|
532
|
-
children: folderStructure.map((node)
|
|
752
|
+
children: folderStructure.map((node)=>collapsedBranch && node.id === collapsedBranch.root.id ? /*#__PURE__*/ jsx(CollapsedBranchItem, {
|
|
753
|
+
branch: collapsedBranch,
|
|
754
|
+
...sharedItemProps
|
|
755
|
+
}, node.id) : /*#__PURE__*/ jsx(FolderTreeItem, {
|
|
533
756
|
node: node,
|
|
534
757
|
// Top of the tree — these sit at the library root.
|
|
535
758
|
parentId: null,
|
|
536
759
|
level: 0,
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
isExpanded: isExpanded,
|
|
540
|
-
onToggle: toggleExpanded,
|
|
541
|
-
onExpand: expandFolder,
|
|
542
|
-
onSelect: onSelectFolder,
|
|
543
|
-
isMovePending: isMovePending
|
|
760
|
+
ancestorNames: [],
|
|
761
|
+
...sharedItemProps
|
|
544
762
|
}, node.id ?? node.name))
|
|
545
763
|
})
|
|
546
764
|
]
|
|
@@ -552,5 +770,5 @@ const FOLDER_TREE_ROOT_SELECTOR = '[data-folder-tree-root]';
|
|
|
552
770
|
});
|
|
553
771
|
};
|
|
554
772
|
|
|
555
|
-
export { FOLDER_TREE_ROOT_SELECTOR, FolderTree };
|
|
773
|
+
export { FOLDER_TREE_ROOT_SELECTOR, FolderTree, getIndentRem };
|
|
556
774
|
//# sourceMappingURL=FolderTree.mjs.map
|