@strapi/upload 5.59.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 +4 -3
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs +4 -3
- 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 +130 -88
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +129 -91
- 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/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/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 +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/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/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/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/useFieldUploads.d.ts +31 -0
- package/dist/admin/src/hooks/useMediaLibraryPermissions.d.ts +2 -0
- 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 +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 +20 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +20 -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/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/image-manipulation.js +2 -2
- package/dist/server/services/image-manipulation.js.map +1 -1
- package/dist/server/services/image-manipulation.mjs +2 -2
- 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/controllers/admin-settings.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +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 +63 -12
- package/dist/server/src/types.d.ts.map +1 -1
- package/package.json +8 -6
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js +0 -45
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js.map +0 -1
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs +0 -43
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs.map +0 -1
- package/dist/admin/src/components/MediaLibraryInput/NoLibraryAccessDialog.d.ts +0 -10
|
@@ -1,13 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `bar` on an empty field, `tile` after a multiple field's cards, `stacked`
|
|
3
|
+
* below them when the field is too narrow for both on one row.
|
|
4
|
+
*/
|
|
5
|
+
export type ZoneVariant = 'bar' | 'tile' | 'stacked';
|
|
1
6
|
interface AssetDropZoneProps {
|
|
7
|
+
variant?: ZoneVariant;
|
|
2
8
|
disabled?: boolean;
|
|
3
|
-
onClick: () => void;
|
|
4
9
|
onDropFiles: (files: globalThis.File[]) => void;
|
|
5
10
|
}
|
|
6
11
|
/**
|
|
7
|
-
* The field's own drop target.
|
|
12
|
+
* The field's own drop target. It only takes drops: browsing and picking files
|
|
13
|
+
* go through the "Add asset" menu, so the field has one way in, not two.
|
|
14
|
+
*
|
|
15
|
+
* Deliberately not the Media Library page's
|
|
8
16
|
* `UploadDropZoneProvider`: that one covers a whole route and paints a
|
|
9
17
|
* full-surface overlay, where this has to stay inside one field on a form that
|
|
10
18
|
* may hold several of them.
|
|
11
19
|
*/
|
|
12
|
-
export declare const AssetDropZone: ({
|
|
20
|
+
export declare const AssetDropZone: ({ variant, disabled, onDropFiles, }: AssetDropZoneProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
21
|
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { File } from '../../../../shared/contracts/files';
|
|
2
|
+
type PreviewSize = 'S' | 'L';
|
|
3
|
+
interface AssetPreviewProps {
|
|
4
|
+
asset: File;
|
|
5
|
+
size: PreviewSize;
|
|
6
|
+
}
|
|
7
|
+
export declare const AssetPreview: ({ asset, size }: AssetPreviewProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
interface UploadPreviewProps {
|
|
9
|
+
file?: globalThis.File;
|
|
10
|
+
size: PreviewSize;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Previews a file that has not reached the server yet, straight from the
|
|
14
|
+
* user's disk.
|
|
15
|
+
*/
|
|
16
|
+
export declare const UploadPreview: ({ file, size }: UploadPreviewProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FieldUpload } from './useFieldUploads';
|
|
1
2
|
import type { File } from '../../../../shared/contracts/files';
|
|
2
3
|
interface AssetRowProps {
|
|
3
4
|
asset: File;
|
|
@@ -7,9 +8,18 @@ interface AssetRowProps {
|
|
|
7
8
|
onRemove: (asset: File) => void;
|
|
8
9
|
}
|
|
9
10
|
/**
|
|
10
|
-
*
|
|
11
|
-
* design also specifies are not here yet — while an upload runs, the global
|
|
12
|
-
* progress dialog is what reports it.
|
|
11
|
+
* The asset a single-value field holds.
|
|
13
12
|
*/
|
|
14
13
|
export declare const AssetRow: ({ asset, disabled, onCopyLink, onEdit, onRemove, }: AssetRowProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
interface UploadRowProps {
|
|
15
|
+
upload: FieldUpload;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
onCancel: (upload: FieldUpload) => void;
|
|
18
|
+
onRetry: (upload: FieldUpload) => void;
|
|
19
|
+
onRemove: (upload: FieldUpload) => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A file a single-value field is uploading, or failed to upload.
|
|
23
|
+
*/
|
|
24
|
+
export declare const UploadRow: ({ upload, disabled, onCancel, onRetry, onRemove, }: UploadRowProps) => import("react/jsx-runtime").JSX.Element;
|
|
15
25
|
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Menu } from '@strapi/design-system';
|
|
2
|
+
/**
|
|
3
|
+
* A ghost `IconButton` that stays a bare icon when disabled. The design system
|
|
4
|
+
* paints every disabled button, ghost included, as a bordered grey plate.
|
|
5
|
+
*/
|
|
6
|
+
export declare const GhostIconButton: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<Omit<Omit<import("@strapi/design-system").IconButtonProps<import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements>>, "ref"> & import("react").RefAttributes<unknown>, "ref"> & {
|
|
7
|
+
ref?: ((instance: unknown) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<unknown> | null | undefined;
|
|
8
|
+
}, string | number | symbol> & Omit<Omit<import("@strapi/design-system").IconButtonProps<import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements>>, "ref"> & import("react").RefAttributes<unknown>, "ref"> & {
|
|
9
|
+
ref?: ((instance: unknown) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<unknown> | null | undefined;
|
|
10
|
+
}, "variant"> & Partial<Pick<import("styled-components").FastOmit<Omit<Omit<import("@strapi/design-system").IconButtonProps<import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements>>, "ref"> & import("react").RefAttributes<unknown>, "ref"> & {
|
|
11
|
+
ref?: ((instance: unknown) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<unknown> | null | undefined;
|
|
12
|
+
}, string | number | symbol> & Omit<Omit<import("@strapi/design-system").IconButtonProps<import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements>>, "ref"> & import("react").RefAttributes<unknown>, "ref"> & {
|
|
13
|
+
ref?: ((instance: unknown) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<unknown> | null | undefined;
|
|
14
|
+
}, "variant">>> & string & Omit<(<C extends React.ElementType<any, keyof React.JSX.IntrinsicElements> = "button">(props: React.PropsWithoutRef<import("@strapi/design-system").IconButtonProps<C>> & React.RefAttributes<unknown>) => React.ReactNode), keyof import("react").Component<any, {}, any>>;
|
|
15
|
+
/**
|
|
16
|
+
* A `Menu.Item` whose label greys out with its icon when disabled. The design
|
|
17
|
+
* system computes a disabled text colour, then its own stylesheet overrides it.
|
|
18
|
+
*/
|
|
19
|
+
export declare const FieldMenuItem: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Menu.ItemProps<(props: Omit<import("@strapi/design-system").BaseLinkProps<"a">, "ref"> & React.RefAttributes<HTMLAnchorElement>) => React.ReactNode> & import("styled-components/dist/types").BaseObject, never> & Partial<Pick<Menu.ItemProps<(props: Omit<import("@strapi/design-system").BaseLinkProps<"a">, "ref"> & React.RefAttributes<HTMLAnchorElement>) => React.ReactNode> & import("styled-components/dist/types").BaseObject, never>>> & string & Omit<({ onSelect, disabled, isLink, startIcon, endIcon, isExternal, variant, ...props }: Menu.ItemProps) => import("react/jsx-runtime").JSX.Element, keyof import("react").Component<any, {}, any>>;
|
|
@@ -11,6 +11,8 @@ export interface MediaLibraryInputProps {
|
|
|
11
11
|
allowedTypes?: AllowedMediaType[] | null;
|
|
12
12
|
multiple?: boolean;
|
|
13
13
|
};
|
|
14
|
+
/** The field's width in the edit layout, out of 12. Set by the Content Manager. */
|
|
15
|
+
layoutSize?: number;
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* The Content Manager's `media` field, on the current Media Library stack.
|
|
@@ -23,4 +25,4 @@ export interface MediaLibraryInputProps {
|
|
|
23
25
|
* The legacy input is still registered when `useLegacyMediaLibrary` is on, and
|
|
24
26
|
* is untouched by this.
|
|
25
27
|
*/
|
|
26
|
-
export declare const MediaLibraryInput: ({ name, label, labelAction, hint, required, disabled, attribute, }: MediaLibraryInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export declare const MediaLibraryInput: ({ name, label, labelAction, hint, required, disabled, attribute, layoutSize, }: MediaLibraryInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface UploadProgressBarProps {
|
|
2
|
+
/** 0–100, or `null` for an upload whose size is not known. */
|
|
3
|
+
progress: number | null;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const UploadProgressBar: ({ progress, label }: UploadProgressBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface FieldUpload {
|
|
2
|
+
key: string;
|
|
3
|
+
uploadId: number;
|
|
4
|
+
index: number;
|
|
5
|
+
name: string;
|
|
6
|
+
status: 'uploading' | 'failed';
|
|
7
|
+
/** 0–100, or `null` while the size is unknown. */
|
|
8
|
+
progress: number | null;
|
|
9
|
+
/** The file the user picked, for the preview. Gone once the page reloads. */
|
|
10
|
+
sourceFile?: globalThis.File;
|
|
11
|
+
/** Whether the progress store still holds the row, i.e. it can be retried in place. */
|
|
12
|
+
isInStore: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The uploads a field started, read from the shared progress store so the field
|
|
16
|
+
* and the progress dialog always agree.
|
|
17
|
+
*
|
|
18
|
+
* The store only holds the latest batch, and closing the dialog empties it. Rows
|
|
19
|
+
* are therefore remembered here once seen: a failed upload stays on the field
|
|
20
|
+
* until the user retries or removes it, whatever happened to the dialog. A row
|
|
21
|
+
* that vanished while still in flight was cancelled along with its batch.
|
|
22
|
+
*
|
|
23
|
+
* Completed rows leave the list. Attaching them to the field is the upload's
|
|
24
|
+
* `onFileUploaded`, which outlives the input.
|
|
25
|
+
*/
|
|
26
|
+
export declare const useFieldUploads: (owner: string) => {
|
|
27
|
+
uploads: FieldUpload[];
|
|
28
|
+
cancel: ({ uploadId, index }: FieldUpload) => void;
|
|
29
|
+
retry: (upload: FieldUpload, reupload: (file: globalThis.File) => void) => Promise<void>;
|
|
30
|
+
dismiss: (key: string) => void;
|
|
31
|
+
};
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* hook is what keeps the UI honest so users don't discover a missing
|
|
7
7
|
* permission through a 403.
|
|
8
8
|
*
|
|
9
|
+
* - `canRead` — browse the library (the Content Manager asset picker needs
|
|
10
|
+
* nothing more)
|
|
9
11
|
* - `canCreate` — upload (files, from URL) and New folder
|
|
10
12
|
* - `canUpdate` — edit details, replace, crop, move (dnd + bulk), delete
|
|
11
13
|
* (single + bulk), AI metadata — the `assets.update` action covers
|
|
@@ -3,10 +3,12 @@ import type { File } from '../../../../../shared/contracts/files';
|
|
|
3
3
|
import type { Folder } from '../../../../../shared/contracts/folders';
|
|
4
4
|
interface AssetsGridProps {
|
|
5
5
|
assets: File[];
|
|
6
|
+
/** Shown in the "Assets (n)" heading; falls back to the loaded count. */
|
|
7
|
+
assetsTotal?: number;
|
|
6
8
|
folders?: Folder[];
|
|
7
9
|
/** Keys of the rendered items, in render order. Owned by the view. */
|
|
8
10
|
renderedKeys?: ItemKey[];
|
|
9
11
|
onAssetItemClick: (assetId: number) => void;
|
|
10
12
|
}
|
|
11
|
-
export declare const AssetsGrid: ({ assets, folders, renderedKeys, onAssetItemClick, }: AssetsGridProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
13
|
+
export declare const AssetsGrid: ({ assets, assetsTotal, folders, renderedKeys, onAssetItemClick, }: AssetsGridProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
12
14
|
export {};
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
+
interface AssetsSearchInputProps {
|
|
2
|
+
/**
|
|
3
|
+
* Starts as an icon button that opens the field, which folds back once it
|
|
4
|
+
* loses focus empty, like the admin's own `SearchInput` in list views. Used
|
|
5
|
+
* where the toolbar is narrow (the Content Manager asset picker). Mobile
|
|
6
|
+
* always shows the field.
|
|
7
|
+
*/
|
|
8
|
+
collapsible?: boolean;
|
|
9
|
+
}
|
|
1
10
|
/**
|
|
2
11
|
* Keyword search over the whole Media Library. Owns the typing state and the
|
|
3
12
|
* debounce; `useAssetSearch` owns the `?_q=` URL param.
|
|
4
13
|
*/
|
|
5
|
-
export declare const AssetsSearchInput: () => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare const AssetsSearchInput: ({ collapsible }: AssetsSearchInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ItemLocations } from '../../../utils/itemLocations';
|
|
2
|
+
import { type FoldersPosition } from '../hooks/useListSort';
|
|
3
|
+
import type { File } from '../../../../../shared/contracts/files';
|
|
4
|
+
import type { Folder } from '../../../../../shared/contracts/folders';
|
|
5
|
+
interface AssetsViewProps {
|
|
6
|
+
view: number;
|
|
7
|
+
folders: Folder[];
|
|
8
|
+
isLoadingFolders: boolean;
|
|
9
|
+
assets: File[];
|
|
10
|
+
/** Total matching assets on the server, beyond the pages loaded so far. */
|
|
11
|
+
assetsTotal?: number;
|
|
12
|
+
isLoadingAssets: boolean;
|
|
13
|
+
isFetchingMore: boolean;
|
|
14
|
+
hasNextPage: boolean;
|
|
15
|
+
fetchNextPage: () => void;
|
|
16
|
+
error: unknown;
|
|
17
|
+
locations: ItemLocations;
|
|
18
|
+
searchQuery: string;
|
|
19
|
+
assetsSort: string;
|
|
20
|
+
foldersPosition: FoldersPosition;
|
|
21
|
+
hasActiveFilters: boolean;
|
|
22
|
+
onClearFilters: () => void;
|
|
23
|
+
onAssetItemClick: (assetId: number) => void;
|
|
24
|
+
onAddAssets: () => void;
|
|
25
|
+
canAddAssets: boolean;
|
|
26
|
+
onClearSearch: () => void;
|
|
27
|
+
}
|
|
28
|
+
export declare const AssetsView: ({ view, folders, isLoadingFolders, assets, assetsTotal, isLoadingAssets, isFetchingMore, hasNextPage, fetchNextPage, error, locations, searchQuery, assetsSort, foldersPosition, hasActiveFilters, onClearFilters, onAssetItemClick, onAddAssets, canAddAssets, onClearSearch, }: AssetsViewProps) => import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AssetSortable } from './assetSortable';
|
|
2
|
+
interface ReorderHandleProps {
|
|
3
|
+
name: string;
|
|
4
|
+
handle: AssetSortable['handle'];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The keyboard path into reordering (Space picks the item up, arrows move it,
|
|
8
|
+
* Space drops it). Pointer drags start from anywhere on the item, this grip
|
|
9
|
+
* included.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ReorderHandle: ({ name, handle }: ReorderHandleProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type CSSProperties, type KeyboardEvent, type SyntheticEvent } from 'react';
|
|
2
|
+
import type { DraggableAttributes, DraggableSyntheticListeners } from '@dnd-kit/core';
|
|
3
|
+
/**
|
|
4
|
+
* What a list item needs to take part in reordering: the whole item drags with
|
|
5
|
+
* the pointer, and a grip button carries the keyboard path (Space to pick up,
|
|
6
|
+
* arrows to move) so it doesn't collide with the item's own Space/click.
|
|
7
|
+
*/
|
|
8
|
+
export interface AssetSortable {
|
|
9
|
+
setNodeRef: (node: HTMLElement | null) => void;
|
|
10
|
+
isDragging: boolean;
|
|
11
|
+
style: CSSProperties;
|
|
12
|
+
/** Pointer activation, for the item itself. */
|
|
13
|
+
listeners: DraggableSyntheticListeners;
|
|
14
|
+
handle: Partial<DraggableAttributes> & {
|
|
15
|
+
ref: (node: HTMLElement | null) => void;
|
|
16
|
+
onKeyDown?: (event: KeyboardEvent) => void;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
type UseAssetSortable = (assetId: number) => AssetSortable | null;
|
|
20
|
+
/**
|
|
21
|
+
* Holds the hook that makes an asset sortable, rather than a value: the hook
|
|
22
|
+
* needs each item's id. A given subtree always gets the same hook, so calling
|
|
23
|
+
* it from `useAssetSortable` keeps the rules of hooks.
|
|
24
|
+
*/
|
|
25
|
+
export declare const AssetSortableContext: import("react").Context<UseAssetSortable>;
|
|
26
|
+
export declare const useAssetSortable: (assetId: number) => AssetSortable | null;
|
|
27
|
+
/** Marks the reorder grip, so the item can tell its keys apart. */
|
|
28
|
+
export declare const REORDER_HANDLE_PROPS: {
|
|
29
|
+
"data-reorder-handle": string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Keys pressed on the grip, including the arrows and the drop key mid-drag,
|
|
33
|
+
* belong to reordering. The item must not also read them as its own
|
|
34
|
+
* Enter/Space.
|
|
35
|
+
*/
|
|
36
|
+
export declare const isFromReorderHandle: (event: SyntheticEvent) => boolean;
|
|
37
|
+
export {};
|
|
@@ -3,5 +3,10 @@ export declare const toFolderDraggableId: (id: number) => `folder:${number}`;
|
|
|
3
3
|
export declare const toFolderTargetId: (id: number) => `folder-target:${number}`;
|
|
4
4
|
export declare const parseFolderTargetId: (dndId: string | number) => number | null;
|
|
5
5
|
export declare const toFolderTreeTargetId: (id: number) => `folder-tree-target:${number}`;
|
|
6
|
+
/**
|
|
7
|
+
* The "N parent folders" row in the sidebar. Only there so hovering it during a
|
|
8
|
+
* drag opens it; no parser recognises it, so a drop on it moves nothing.
|
|
9
|
+
*/
|
|
10
|
+
export declare const toFolderTreeSummaryId: (rootId: number) => `folder-tree-summary:${number}`;
|
|
6
11
|
export declare const HOME_TREE_TARGET_ID: "folder-tree-target:home";
|
|
7
12
|
export declare const parseFolderTreeTargetId: (dndId: string | number) => number | "root" | null;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type DraggableAttributes } from '@dnd-kit/core';
|
|
1
2
|
import type { DragFileData, DragFolderData } from '../../../../types/dnd';
|
|
2
3
|
export declare const useFileDraggable: (asset: {
|
|
3
4
|
id: number;
|
|
@@ -6,11 +7,31 @@ export declare const useFileDraggable: (asset: {
|
|
|
6
7
|
id?: number;
|
|
7
8
|
} | null;
|
|
8
9
|
}) => {
|
|
10
|
+
setNodeRef: (node: HTMLElement | null) => void;
|
|
11
|
+
isDragging: boolean;
|
|
12
|
+
listeners: import("@dnd-kit/core").DraggableSyntheticListeners;
|
|
13
|
+
dragStyle: import("react").CSSProperties;
|
|
14
|
+
dragHandle: Partial<DraggableAttributes> & {
|
|
15
|
+
ref: (node: HTMLElement | null) => void;
|
|
16
|
+
onKeyDown?: (event: import("react").KeyboardEvent) => void;
|
|
17
|
+
};
|
|
18
|
+
dragData: DragFileData;
|
|
19
|
+
active: import("@dnd-kit/core").Active | null;
|
|
20
|
+
activatorEvent: Event | null;
|
|
21
|
+
activeNodeRect: import("@dnd-kit/core").ClientRect | null;
|
|
22
|
+
attributes: DraggableAttributes;
|
|
23
|
+
node: import("react").MutableRefObject<HTMLElement | null>;
|
|
24
|
+
over: import("@dnd-kit/core").Over | null;
|
|
25
|
+
setActivatorNodeRef: (element: HTMLElement | null) => void;
|
|
26
|
+
transform: import("@dnd-kit/utilities").Transform | null;
|
|
27
|
+
} | {
|
|
28
|
+
dragStyle: undefined;
|
|
29
|
+
dragHandle: undefined;
|
|
9
30
|
dragData: DragFileData;
|
|
10
31
|
active: import("@dnd-kit/core").Active | null;
|
|
11
32
|
activatorEvent: Event | null;
|
|
12
33
|
activeNodeRect: import("@dnd-kit/core").ClientRect | null;
|
|
13
|
-
attributes:
|
|
34
|
+
attributes: DraggableAttributes;
|
|
14
35
|
isDragging: boolean;
|
|
15
36
|
listeners: import("@dnd-kit/core/dist/hooks/utilities").SyntheticListenerMap | undefined;
|
|
16
37
|
node: import("react").MutableRefObject<HTMLElement | null>;
|
|
@@ -31,7 +52,7 @@ export declare const useFolderDraggableDroppable: (folder: {
|
|
|
31
52
|
active: import("@dnd-kit/core").Active | null;
|
|
32
53
|
activatorEvent: Event | null;
|
|
33
54
|
activeNodeRect: import("@dnd-kit/core").ClientRect | null;
|
|
34
|
-
attributes:
|
|
55
|
+
attributes: DraggableAttributes;
|
|
35
56
|
isDragging: boolean;
|
|
36
57
|
listeners: import("@dnd-kit/core/dist/hooks/utilities").SyntheticListenerMap | undefined;
|
|
37
58
|
node: import("react").MutableRefObject<HTMLElement | null>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { FolderNode } from '../../../../../../shared/contracts/folders';
|
|
2
|
+
/**
|
|
3
|
+
* Depth (0 = a root folder) from which the selected folder's ancestors fold into
|
|
4
|
+
* a single "N parent folders" row in the sidebar. Picked so the deepest visible
|
|
5
|
+
* row still has room for a readable name in the 23.2rem rail.
|
|
6
|
+
*/
|
|
7
|
+
export declare const COLLAPSE_FROM_DEPTH = 4;
|
|
8
|
+
export interface CollapsedBranch {
|
|
9
|
+
root: FolderNode;
|
|
10
|
+
/** Between `root` and `parent`, shallowest first. */
|
|
11
|
+
hidden: FolderNode[];
|
|
12
|
+
/** The selected folder's parent. */
|
|
13
|
+
parent: FolderNode;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* How the selected folder's branch folds once it is deep enough: the root stays,
|
|
17
|
+
* everything between the root and the parent is hidden, and the parent stays so
|
|
18
|
+
* the selected folder is shown alongside its siblings. `null` means the branch
|
|
19
|
+
* renders in full.
|
|
20
|
+
*/
|
|
21
|
+
export declare const getCollapsedBranch: (nodes: FolderNode[], selectedId: number | null) => CollapsedBranch | null;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface ViewToggleProps {
|
|
2
|
+
view: number;
|
|
3
|
+
onChange: (view: number) => void;
|
|
4
|
+
/** Drops the visible labels at every width, for narrow hosts like a modal. */
|
|
5
|
+
iconsOnly?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const ViewToggle: ({ view, onChange, iconsOnly }: ViewToggleProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -12,7 +12,21 @@ import { type ItemKey } from '../utils/selection';
|
|
|
12
12
|
* ordered key array from the caller (the view owns the rendered order), keeping
|
|
13
13
|
* the context data-source-agnostic.
|
|
14
14
|
*/
|
|
15
|
+
/**
|
|
16
|
+
* How an item takes part in selection: `enabled` shows a working checkbox,
|
|
17
|
+
* `disabled` shows it greyed out (the item cannot be chosen here), `hidden`
|
|
18
|
+
* shows none (the item is not something this selection is about).
|
|
19
|
+
*/
|
|
20
|
+
export type Selectability = 'enabled' | 'disabled' | 'hidden';
|
|
15
21
|
export interface AssetSelection {
|
|
22
|
+
/**
|
|
23
|
+
* Whether selection is on at all. Views show the checkbox column and
|
|
24
|
+
* select-all only when it is.
|
|
25
|
+
*/
|
|
26
|
+
isEnabled: boolean;
|
|
27
|
+
/** Whether the table offers a select-all header (not on a single-value picker). */
|
|
28
|
+
canSelectAll: boolean;
|
|
29
|
+
getSelectability: (key: ItemKey) => Selectability;
|
|
16
30
|
/** Every selected item key (assets and folders), render-order agnostic. */
|
|
17
31
|
selectedKeys: Set<ItemKey>;
|
|
18
32
|
/** Selected asset ids, derived from {@link selectedKeys}. */
|
|
@@ -34,9 +48,21 @@ export interface AssetSelection {
|
|
|
34
48
|
selectOnly: (key: ItemKey) => void;
|
|
35
49
|
/** Row-level "..." menu — drops one key when its item leaves the list (move, delete). */
|
|
36
50
|
deselect: (key: ItemKey) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Header checkbox, when everything it covers is selected. The host decides how
|
|
53
|
+
* far that reaches: the Media Library page clears the whole selection, because
|
|
54
|
+
* it can still hold keys that left the list without being deselected (moved or
|
|
55
|
+
* deleted from the details drawer). The picker drops only these keys.
|
|
56
|
+
*/
|
|
57
|
+
deselectAll: (orderedKeys: ItemKey[]) => void;
|
|
37
58
|
/** Close button / folder navigation / list-identity changes. */
|
|
38
59
|
clear: () => void;
|
|
39
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Exported so a host with its own selection rules (the Content Manager asset
|
|
63
|
+
* picker) can feed the same views a different implementation.
|
|
64
|
+
*/
|
|
65
|
+
export declare const AssetSelectionContext: import("react").Context<AssetSelection | null>;
|
|
40
66
|
interface AssetSelectionProviderProps {
|
|
41
67
|
children: ReactNode;
|
|
42
68
|
/**
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The list behind the Media Library page and the Content Manager asset picker:
|
|
3
|
+
* the current folder, search, sort and filters, and the folders and assets they
|
|
4
|
+
* select. Where that query state lives (URL or memory) is decided by
|
|
5
|
+
* `ListQueryStateProvider`, not here.
|
|
6
|
+
*/
|
|
7
|
+
export declare const useAssetsList: () => {
|
|
8
|
+
listSort: import("./useListSort").ListSort;
|
|
9
|
+
listFilters: import("./useListFilters").ListFilters;
|
|
10
|
+
assets: import("../../../../../shared/contracts/files").File[];
|
|
11
|
+
subscribers: import("react").FunctionComponentElement<{
|
|
12
|
+
children?: import("react").ReactNode | undefined;
|
|
13
|
+
}> | null;
|
|
14
|
+
pagination: import("../../../../../shared/contracts/files").Pagination | undefined;
|
|
15
|
+
isLoadingAssets: boolean;
|
|
16
|
+
isFetchingMore: boolean;
|
|
17
|
+
hasNextPage: boolean;
|
|
18
|
+
fetchNextPage: () => void;
|
|
19
|
+
assetsError: import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError | undefined;
|
|
20
|
+
folders: import("../../../../../shared/contracts/folders").Folder[];
|
|
21
|
+
isLoadingFolders: boolean;
|
|
22
|
+
searchQuery: string;
|
|
23
|
+
isSearching: boolean;
|
|
24
|
+
setSearchQuery: (value: string) => void;
|
|
25
|
+
clearSearch: () => void;
|
|
26
|
+
currentFolderId: number | null;
|
|
27
|
+
navigateToFolder: (folder: import("../../../../../shared/contracts/folders").Folder) => void;
|
|
28
|
+
navigateToRoot: () => void;
|
|
29
|
+
navigateToFolderId: (folderId: number | null) => void;
|
|
30
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Dispatch, type ReactNode, type SetStateAction } from 'react';
|
|
2
|
+
interface ListQueryState {
|
|
3
|
+
search: string;
|
|
4
|
+
setSearch: Dispatch<SetStateAction<string>>;
|
|
5
|
+
}
|
|
6
|
+
interface ListQueryStateProviderProps {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Keeps the list query (folder, search, filters, sort) in memory instead of the
|
|
11
|
+
* URL, for surfaces hosted inside another page — the Content Manager asset
|
|
12
|
+
* picker would otherwise overwrite the entry's own URL. Without this provider,
|
|
13
|
+
* `useListQueryParams` falls back to the URL, which is what the Media Library
|
|
14
|
+
* page relies on.
|
|
15
|
+
*/
|
|
16
|
+
export declare const ListQueryStateProvider: ({ children }: ListQueryStateProviderProps) => import("react").FunctionComponentElement<import("react").ProviderProps<ListQueryState | null>>;
|
|
17
|
+
/**
|
|
18
|
+
* Drop-in for `useQueryParams` used by the list hooks. The in-memory store keeps
|
|
19
|
+
* a serialized search string and goes through the same `qs` round trip as the
|
|
20
|
+
* URL, so callers that pre-encode values (`withEncodedUserParams`,
|
|
21
|
+
* `encodeSearchQuery`) read back exactly what they would from the URL.
|
|
22
|
+
*/
|
|
23
|
+
export declare const useListQueryParams: <TQuery extends object>() => readonly [{
|
|
24
|
+
readonly query: TQuery;
|
|
25
|
+
readonly rawQuery: string;
|
|
26
|
+
}, (nextParams: TQuery, method?: "push" | "remove", replace?: boolean) => void];
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
interface ListSettings {
|
|
3
|
+
/**
|
|
4
|
+
* Management affordances on list items: the right-click menu and the bulk
|
|
5
|
+
* actions bar. A picker hosted elsewhere (the Content Manager asset picker)
|
|
6
|
+
* turns them off — choosing an asset is not the place to delete or move it.
|
|
7
|
+
*/
|
|
8
|
+
showItemActions: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* "Folders (n)" / "Assets (n)" headings above each grid section, with a
|
|
11
|
+
* divider between them. The page carries the count in its own header instead.
|
|
12
|
+
*/
|
|
13
|
+
showSectionHeadings: boolean;
|
|
14
|
+
/** Narrowest a grid tile may get before the grid drops a column. */
|
|
15
|
+
gridMinTileWidth: string;
|
|
16
|
+
/**
|
|
17
|
+
* A "Select all" checkbox beside the grid's "Assets (n)" heading, the grid's
|
|
18
|
+
* counterpart of the table's header checkbox. The page reaches select-all
|
|
19
|
+
* from its bulk actions bar instead.
|
|
20
|
+
*/
|
|
21
|
+
showGridSelectAll: boolean;
|
|
22
|
+
}
|
|
23
|
+
interface ListSettingsProviderProps extends Partial<ListSettings> {
|
|
24
|
+
children: ReactNode;
|
|
25
|
+
}
|
|
26
|
+
export declare const ListSettingsProvider: ({ children, showItemActions, showSectionHeadings, gridMinTileWidth, showGridSelectAll, }: ListSettingsProviderProps) => import("react").FunctionComponentElement<import("react").ProviderProps<ListSettings>>;
|
|
27
|
+
/** Without a provider, returns the Media Library page's settings. */
|
|
28
|
+
export declare const useListSettings: () => ListSettings;
|
|
29
|
+
export {};
|
|
@@ -15,6 +15,8 @@ interface UploadFilesArgs {
|
|
|
15
15
|
* a later retry uploads after the call itself has resolved.
|
|
16
16
|
*/
|
|
17
17
|
onFileUploaded?: (file: UploadedFile) => void;
|
|
18
|
+
/** Tags the batch's rows in the progress store, see `FileProgress.owner`. */
|
|
19
|
+
owner?: string;
|
|
18
20
|
}
|
|
19
21
|
interface UploadFromUrlsArgs {
|
|
20
22
|
urls: string[];
|
|
@@ -37,6 +39,16 @@ interface UploadEntry {
|
|
|
37
39
|
* Called from the UploadProgressDialog when the user clicks cancel or close.
|
|
38
40
|
*/
|
|
39
41
|
export declare const abortUpload: (uploadId: number) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Aborts one file of a batch. Pair it with `cancelFile` to mark the row, the
|
|
44
|
+
* same way `abortUpload` pairs with `cancelUpload`.
|
|
45
|
+
*/
|
|
46
|
+
export declare const abortUploadFile: (uploadId: number, index: number) => void;
|
|
47
|
+
/**
|
|
48
|
+
* The file the user picked for a row, kept so it can be previewed while it
|
|
49
|
+
* uploads and replayed on retry.
|
|
50
|
+
*/
|
|
51
|
+
export declare const getUploadSourceFile: (uploadId: number, index: number) => File | undefined;
|
|
40
52
|
/**
|
|
41
53
|
* Kicks off AI metadata generation for a freshly uploaded file.
|
|
42
54
|
*
|
|
@@ -79,6 +91,14 @@ declare const uploadApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/t
|
|
|
79
91
|
* through the same upload pool with a fresh AbortController.
|
|
80
92
|
*/
|
|
81
93
|
retryCancelledFiles: import("@reduxjs/toolkit/query").MutationDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">;
|
|
94
|
+
/**
|
|
95
|
+
* Retry one cancelled or failed file of the current batch. Queued behind
|
|
96
|
+
* whatever the batch still has in flight, so `concurrency` keeps holding.
|
|
97
|
+
*/
|
|
98
|
+
retryUploadFile: import("@reduxjs/toolkit/query").MutationDefinition<{
|
|
99
|
+
uploadId: number;
|
|
100
|
+
index: number;
|
|
101
|
+
}, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">;
|
|
82
102
|
/**
|
|
83
103
|
* Upload files from URLs.
|
|
84
104
|
* Sends URLs to the server which fetches and uploads them (SSE flow, unchanged).
|
|
@@ -99,7 +119,10 @@ declare const uploadApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/t
|
|
|
99
119
|
fileIds: number[];
|
|
100
120
|
}, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", GenerateAIMetadata.FileResult[], "adminApi">;
|
|
101
121
|
}, "adminApi", "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", typeof import("@reduxjs/toolkit/query").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react").reactHooksModuleName>;
|
|
102
|
-
export declare const useUploadFilesMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UploadFilesArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">>, useUploadFileSilentlyMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UploadEntry, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile, "adminApi">>, useRetryCancelledFilesMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">>,
|
|
122
|
+
export declare const useUploadFilesMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UploadFilesArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">>, useUploadFileSilentlyMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UploadEntry, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile, "adminApi">>, useRetryCancelledFilesMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">>, useRetryUploadFileMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<{
|
|
123
|
+
uploadId: number;
|
|
124
|
+
index: number;
|
|
125
|
+
}, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">>, useUploadFromUrlsMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UploadFromUrlsArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", CreateFilesStream.Response, "adminApi">>, useGenerateAiMetadataMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<{
|
|
103
126
|
fileIds: number[];
|
|
104
127
|
}, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", GenerateAIMetadata.FileResult[], "adminApi">>;
|
|
105
128
|
export { uploadApi };
|
|
@@ -23,6 +23,11 @@ export interface FileProgress {
|
|
|
23
23
|
completedAt?: number;
|
|
24
24
|
error?: string;
|
|
25
25
|
metadataStatus?: FileMetadataStatus;
|
|
26
|
+
/**
|
|
27
|
+
* Who started the row, when that is not the progress dialog alone. The Content
|
|
28
|
+
* Manager field tags its own uploads so it can show their state in place.
|
|
29
|
+
*/
|
|
30
|
+
owner?: string;
|
|
26
31
|
}
|
|
27
32
|
export interface UploadProgressState {
|
|
28
33
|
isVisible: boolean;
|
|
@@ -157,10 +162,12 @@ export declare const openUploadProgress: import("@reduxjs/toolkit").ActionCreato
|
|
|
157
162
|
totalFiles: number;
|
|
158
163
|
fileNames: string[];
|
|
159
164
|
fileSizes?: number[];
|
|
165
|
+
owner?: string;
|
|
160
166
|
}, "uploadProgress/openUploadProgress">, appendUploadFiles: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
161
167
|
uploadId: number;
|
|
162
168
|
fileNames: string[];
|
|
163
169
|
fileSizes?: number[];
|
|
170
|
+
owner?: string;
|
|
164
171
|
}, "uploadProgress/appendUploadFiles">, setFileUploading: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
165
172
|
name: string;
|
|
166
173
|
index: number;
|
|
@@ -190,7 +197,13 @@ export declare const openUploadProgress: import("@reduxjs/toolkit").ActionCreato
|
|
|
190
197
|
status: FileMetadataResultStatus;
|
|
191
198
|
}, "uploadProgress/setFileMetadataResult">, addUploadErrors: import("@reduxjs/toolkit").ActionCreatorWithPayload<FileUploadError[], "uploadProgress/addUploadErrors">, closeUploadProgress: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/closeUploadProgress">, toggleMinimize: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/toggleMinimize">, cancelUpload: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/cancelUpload">, setUploadFailed: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
192
199
|
message: string;
|
|
193
|
-
}, "uploadProgress/setUploadFailed">,
|
|
200
|
+
}, "uploadProgress/setUploadFailed">, cancelFile: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
201
|
+
index: number;
|
|
202
|
+
uploadId: number;
|
|
203
|
+
}, "uploadProgress/cancelFile">, retryFile: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
204
|
+
index: number;
|
|
205
|
+
uploadId: number;
|
|
206
|
+
}, "uploadProgress/retryFile">, retryCancelledFiles: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/retryCancelledFiles">;
|
|
194
207
|
/**
|
|
195
208
|
* The merge/reset switch. Errored and cancelled rows count as settled, so a
|
|
196
209
|
* batch that finished badly is still replaced by the next drop.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FolderNode } from '../../../shared/contracts/folders';
|
|
2
|
+
/**
|
|
3
|
+
* The chain of folders from the library root down to `targetId`, inclusive, or
|
|
4
|
+
* `null` when the folder is not in the tree (deleted, or not loaded yet).
|
|
5
|
+
*/
|
|
6
|
+
export declare const findFolderPath: (nodes: FolderNode[], targetId: number, trail?: FolderNode[]) => FolderNode[] | null;
|