{"version":3,"file":"index-EumNBdBa.mjs","sources":["../../admin/src/utils/appendSearchParamsToUrl.js","../../admin/src/utils/containsAssetFilter.js","../../admin/src/utils/createAssetUrl.js","../../admin/src/utils/findRecursiveFolderByValue.js","../../admin/src/utils/formatBytes.js","../../admin/src/utils/formatDuration.js","../../admin/src/pluginId.js","../../admin/src/utils/getTrad.js","../../admin/src/utils/getBreadcrumbDataCM.js","../../admin/src/utils/getFolderURL.js","../../admin/src/components/SelectTree/utils/flattenTree.js","../../admin/src/utils/getFolderParents.js","../../admin/src/utils/toSingularTypes.js","../../admin/src/constants.js","../../admin/src/hooks/useAssets.js","../../admin/src/hooks/useFolders.js","../../admin/src/hooks/useMediaLibraryPermissions.js","../../admin/src/hooks/useConfig.js","../../admin/src/hooks/useModalQueryParams.js","../../admin/src/utils/getAllowedFiles.js","../../admin/src/utils/moveElement.js","../../admin/src/hooks/useEditAsset.js","../../admin/src/hooks/utils/rename-keys.js","../../admin/src/hooks/useFolderStructure.js","../../admin/src/components/ContextInfo/ContextInfo.jsx","../../admin/src/components/SelectTree/Option.jsx","../../admin/src/components/SelectTree/utils/getOpenValues.js","../../admin/src/components/SelectTree/utils/getValuesToClose.js","../../admin/src/components/SelectTree/SelectTree.jsx","../../admin/src/components/EditAssetDialog/DialogHeader.jsx","../../admin/src/hooks/useCropImg.js","../../admin/src/hooks/useUpload.js","../../admin/src/utils/downloadFile.js","../../admin/src/components/CopyLinkButton/index.jsx","../../admin/src/components/UploadProgress/index.jsx","../../admin/src/utils/deleteRequest.js","../../admin/src/hooks/useRemoveAsset.js","../../admin/src/components/EditAssetDialog/RemoveAssetDialog.jsx","../../admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.jsx","../../admin/src/components/EditAssetDialog/PreviewBox/components.jsx","../../admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.jsx","../../admin/src/components/EditAssetDialog/PreviewBox/index.jsx","../../admin/src/components/EditAssetDialog/ReplaceMediaButton.jsx","../../admin/src/components/EditAssetDialog/index.jsx","../../admin/src/hooks/useBulkRemove.js","../../admin/src/hooks/useEditFolder.js","../../admin/src/components/EditFolderDialog/ModalHeader/ModalHeader.jsx","../../admin/src/components/EditFolderDialog/RemoveFolderDialog.jsx","../../admin/src/components/EditFolderDialog/EditFolderDialog.jsx","../../admin/src/hooks/useFolder.js","../../admin/src/components/AssetCard/AssetCardBase.jsx","../../admin/src/components/AssetCard/AudioPreview.jsx","../../admin/src/components/AssetCard/AudioAssetCard.jsx","../../admin/src/components/AssetCard/DocAssetCard.jsx","../../admin/src/components/AssetCard/ImageAssetCard.jsx","../../admin/src/components/AssetCard/VideoPreview.jsx","../../admin/src/components/AssetCard/VideoAssetCard.jsx","../../admin/src/components/AssetCard/AssetCard.jsx","../../admin/src/components/AssetGridList/Draggable.jsx","../../admin/src/components/AssetGridList/index.jsx","../../admin/src/components/Breadcrumbs/CrumbSimpleMenuAsync.jsx","../../admin/src/components/Breadcrumbs/Breadcrumbs.jsx","../../admin/src/components/EmptyAssets/EmptyAssetGrid.jsx","../../admin/src/components/EmptyAssets/index.jsx","../../admin/src/components/FolderCard/contexts/FolderCard.jsx","../../admin/src/components/FolderCard/hooks/useId.js","../../admin/src/components/FolderCard/FolderCard/FolderCard.jsx","../../admin/src/components/FolderCard/FolderCardBody/FolderCardBody.jsx","../../admin/src/components/FolderCard/FolderCardBodyAction/index.jsx","../../admin/src/components/FolderGridList/FolderGridList.jsx","../../admin/src/components/SortPicker/index.jsx","../../admin/src/components/TableList/PreviewCell.jsx","../../admin/src/components/TableList/CellContent.jsx","../../admin/src/components/TableList/TableRows.jsx","../../admin/src/components/TableList/index.jsx","../../admin/src/utils/displayedFilters.js","../../admin/src/components/FilterList/FilterTag.jsx","../../admin/src/components/FilterList/index.jsx","../../admin/src/components/FilterPopover/FilterValueInput.jsx","../../admin/src/components/FilterPopover/utils/getFilterList.js","../../admin/src/components/FilterPopover/index.jsx","../../admin/src/components/AssetDialog/BrowseStep/Filters.jsx","../../admin/src/components/AssetDialog/BrowseStep/PageSize.jsx","../../admin/src/components/AssetDialog/BrowseStep/PaginationFooter/PaginationContext.jsx","../../admin/src/components/AssetDialog/BrowseStep/PaginationFooter/components.jsx","../../admin/src/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.jsx","../../admin/src/components/AssetDialog/BrowseStep/PaginationFooter/index.jsx","../../admin/src/components/AssetDialog/BrowseStep/SearchAsset/index.jsx","../../admin/src/components/AssetDialog/BrowseStep/utils/isSelectable.js","../../admin/src/components/AssetDialog/BrowseStep/index.jsx","../../admin/src/components/AssetDialog/DialogFooter.jsx","../../admin/src/components/AssetDialog/SelectedStep/index.jsx","../../admin/src/components/AssetDialog/index.jsx","../../admin/src/utils/typeFromMime.js","../../admin/src/utils/rawFileToAsset.js","../../admin/src/components/UploadAssetDialog/AddAssetStep/FromComputerForm.jsx","../../admin/src/utils/urlsToAssets.js","../../admin/src/utils/urlYupSchema.js","../../admin/src/components/UploadAssetDialog/AddAssetStep/FromUrlForm.jsx","../../admin/src/components/UploadAssetDialog/AddAssetStep/AddAssetStep.jsx","../../admin/src/components/AssetCard/UploadingAssetCard.jsx","../../admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.jsx","../../admin/src/components/UploadAssetDialog/UploadAssetDialog.jsx","../../admin/src/components/MediaLibraryDialog/index.jsx","../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.jsx","../../admin/src/components/MediaLibraryInput/Carousel/CarouselAssetActions.jsx","../../admin/src/components/MediaLibraryInput/Carousel/EmptyStateAsset.jsx","../../admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.jsx","../../admin/src/components/MediaLibraryInput/index.jsx","../../admin/src/components/PluginIcon/index.jsx","../../admin/src/index.js"],"sourcesContent":["/**\n * Append the given search params to the given URL.\n *\n * @param {String} url The URL string to append the search params to\n * @param {Object} params The object of search params to append to the URL\n * @returns {String} A string representing the URL with the search params appended\n */\nconst appendSearchParamsToUrl = ({ url, params }) => {\n  if (url === undefined || typeof params !== 'object') {\n    return url;\n  }\n\n  const urlObj = new URL(url, window.strapi.backendURL);\n\n  Object.entries(params).forEach(([key, value]) => {\n    if (value !== undefined) {\n      urlObj.searchParams.append(key, value);\n    }\n  });\n\n  return urlObj.toString();\n};\n\nexport { appendSearchParamsToUrl };\n","const containsMimeTypeFilter = (query) => {\n  const filters = query?.filters?.$and;\n\n  if (!filters) {\n    return false;\n  }\n\n  const result = filters.find((filter) => {\n    return Object.keys(filter).includes('mime');\n  });\n\n  return !!result;\n};\n\nconst containsAssetFilter = (query) => {\n  return containsMimeTypeFilter(query);\n};\n\nexport default containsAssetFilter;\n","import { prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin';\n\n/**\n * Create image URL for asset\n * @param {Object} asset\n * @param {Boolean} forThumbnail - if true, return URL for thumbnail\n * if there's no thumbnail, return the URL of the original image.\n * @return {String} URL\n */\nconst createAssetUrl = (asset, forThumbnail = true) => {\n  if (asset.isLocal) {\n    return asset.url;\n  }\n\n  const assetUrl = forThumbnail ? asset?.formats?.thumbnail?.url || asset.url : asset.url;\n\n  return prefixFileUrlWithBackendUrl(assetUrl);\n};\n\nexport default createAssetUrl;\n","export default function findRecursiveFolderByValue(data, value) {\n  let result;\n\n  function iter(a) {\n    if (a.value === value) {\n      result = a;\n\n      return true;\n    }\n\n    return Array.isArray(a.children) && a.children.some(iter);\n  }\n\n  data.some(iter);\n\n  return result;\n}\n","import byteSize from 'byte-size';\n\nfunction formatBytes(receivedBytes, decimals = 0) {\n  const { value, unit } = byteSize(receivedBytes * 1000, { precision: decimals });\n\n  if (!unit) {\n    return '0B';\n  }\n\n  return `${value}${unit.toUpperCase()}`;\n}\n\nexport default formatBytes;\n","import { intervalToDuration } from 'date-fns';\n\nconst zeroPad = (num) => String(num).padStart(2, '0');\n\nexport const formatDuration = (durationInSecond) => {\n  const duration = intervalToDuration({ start: 0, end: durationInSecond * 1000 });\n\n  return `${zeroPad(duration.hours)}:${zeroPad(duration.minutes)}:${zeroPad(duration.seconds)}`;\n};\n","import pluginPkg from '../../package.json';\n\nconst pluginId = pluginPkg.name.replace(/^@strapi\\/plugin-/i, '');\n\nexport default pluginId;\n","import pluginId from '../pluginId';\n\nconst getTrad = (id) => `${pluginId}.${id}`;\n\nexport default getTrad;\n","import getTrad from './getTrad';\n\nconst getBreadcrumbDataML = (folder) => {\n  let data = [\n    {\n      id: null,\n      label: { id: getTrad('plugin.name'), defaultMessage: 'Media Library' },\n    },\n  ];\n\n  if (folder?.parent?.parent) {\n    data.push([]);\n  }\n\n  if (folder?.parent) {\n    data.push({\n      id: folder.parent.id,\n      label: folder.parent.name,\n      path: folder.parent.path,\n    });\n  }\n\n  if (folder) {\n    data.push({\n      id: folder.id,\n      label: folder.name,\n      path: folder.path,\n    });\n  }\n\n  return data;\n};\n\nexport default getBreadcrumbDataML;\n","/**\n * @param {string} pathname\n * @param {object} currentQuery\n * @param {string} query._q Search value of the query\n * @param {object} newQuery\n * @param {string} newQuery.folder\n * @param {string} newQuery.folderPath\n * @returns {string}\n */\n\nimport { stringify } from 'qs';\n\nconst getFolderURL = (pathname, currentQuery, { folder, folderPath } = {}) => {\n  const { _q, ...queryParamsWithoutQ } = currentQuery;\n  const queryParamsString = stringify(\n    {\n      ...queryParamsWithoutQ,\n      folder,\n      folderPath,\n    },\n    { encode: false }\n  );\n\n  // Search query will always fetch the same results\n  // we remove it here to allow navigating in a folder and see the result of this navigation\n  return `${pathname}${queryParamsString ? `?${queryParamsString}` : ''}`;\n};\n\nexport default getFolderURL;\n","export default function flattenTree(tree, parent, depth = 0) {\n  return tree.flatMap((item) =>\n    item.children\n      ? [{ ...item, parent: parent?.value, depth }, ...flattenTree(item.children, item, depth + 1)]\n      : { ...item, depth, parent: parent?.value }\n  );\n}\n","import flattenTree from '../components/SelectTree/utils/flattenTree';\n\nconst getFolderParents = (folders, currentFolderId) => {\n  const parents = [];\n  const flatFolders = flattenTree(folders);\n  const currentFolder = flatFolders.find((folder) => folder.value === currentFolderId);\n\n  if (!currentFolder) {\n    return [];\n  }\n\n  let { parent } = currentFolder;\n\n  while (parent !== undefined) {\n    // eslint-disable-next-line no-loop-func\n    let parentToStore = flatFolders.find(({ value }) => value === parent);\n    parents.push({ id: parentToStore.value, label: parentToStore.label });\n    parent = parentToStore.parent;\n  }\n\n  return parents.reverse();\n};\n\nexport default getFolderParents;\n","/**\n * Transforms an arrays of plural type to singular one\n * @param {Object[]} types\n * @returns Object[]\n */\nconst toSingularTypes = (types) => {\n  if (!types) {\n    return [];\n  }\n\n  return types.map((type) => type.substring(0, type.length - 1));\n};\n\nexport default toSingularTypes;\n","import PropTypes from 'prop-types';\n\nimport { getTrad } from './utils';\n\nexport const AssetType = {\n  Video: 'video',\n  Image: 'image',\n  Document: 'doc',\n  Audio: 'audio',\n};\n\nexport const AssetSource = {\n  Url: 'url',\n  Computer: 'computer',\n};\n\nconst ParentFolderShape = {\n  id: PropTypes.number.isRequired,\n  createdAt: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n  updatedAt: PropTypes.string.isRequired,\n  pathId: PropTypes.number.isRequired,\n  path: PropTypes.string.isRequired,\n};\n\nParentFolderShape.parent = PropTypes.shape(ParentFolderShape);\n\nconst FolderShape = {\n  id: PropTypes.number.isRequired,\n  children: PropTypes.shape({\n    count: PropTypes.number.isRequired,\n  }),\n  createdAt: PropTypes.string.isRequired,\n  createdBy: PropTypes.shape(),\n  files: PropTypes.shape({\n    count: PropTypes.number.isRequired,\n  }),\n  name: PropTypes.string.isRequired,\n  updatedAt: PropTypes.string.isRequired,\n  updatedBy: PropTypes.shape(),\n  pathId: PropTypes.number.isRequired,\n  path: PropTypes.string.isRequired,\n};\n\nFolderShape.parent = PropTypes.shape(ParentFolderShape);\n\nexport const FolderDefinition = PropTypes.shape(FolderShape);\n\nconst FolderStructure = PropTypes.shape({\n  value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  label: PropTypes.string.isRequired,\n  children: PropTypes.array,\n});\n\nFolderStructure.children = PropTypes.arrayOf(PropTypes.shape(FolderStructure));\nFolderStructure.defaultProps = {\n  children: undefined,\n};\n\nexport const FolderStructureDefinition = PropTypes.arrayOf(FolderStructure);\n\nexport const AssetDefinition = PropTypes.shape({\n  id: PropTypes.number,\n  height: PropTypes.number,\n  width: PropTypes.number,\n  size: PropTypes.number,\n  createdAt: PropTypes.string,\n  ext: PropTypes.string,\n  mime: PropTypes.string,\n  name: PropTypes.string,\n  url: PropTypes.string,\n  updatedAt: PropTypes.string,\n  alternativeText: PropTypes.string,\n  caption: PropTypes.string,\n  folder: PropTypes.shape(FolderDefinition),\n  formats: PropTypes.shape({\n    thumbnail: PropTypes.shape({\n      url: PropTypes.string,\n    }),\n  }),\n});\n\nexport const CrumbDefinition = PropTypes.shape({\n  id: PropTypes.number,\n  label: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.shape({\n      id: PropTypes.string.isRequired,\n      defaultMessage: PropTypes.string.isRequired,\n    }),\n  ]).isRequired,\n  href: PropTypes.string,\n});\n\nexport const CrumbMenuDefinition = PropTypes.arrayOf(CrumbDefinition);\n\nexport const BreadcrumbsDefinition = PropTypes.arrayOf(\n  PropTypes.oneOfType([CrumbDefinition, CrumbMenuDefinition])\n);\n\nexport const viewOptions = {\n  GRID: 0,\n  LIST: 1,\n};\nexport const tableHeaders = [\n  {\n    name: 'preview',\n    key: 'preview',\n    metadatas: {\n      label: { id: getTrad('list.table.header.preview'), defaultMessage: 'preview' },\n      isSortable: false,\n    },\n    type: 'image',\n  },\n  {\n    name: 'name',\n    key: 'name',\n    metadatas: {\n      label: { id: getTrad('list.table.header.name'), defaultMessage: 'name' },\n      isSortable: true,\n    },\n    type: 'text',\n  },\n  {\n    name: 'ext',\n    key: 'extension',\n    metadatas: {\n      label: { id: getTrad('list.table.header.ext'), defaultMessage: 'extension' },\n      isSortable: false,\n    },\n    type: 'ext',\n  },\n  {\n    name: 'size',\n    key: 'size',\n    metadatas: {\n      label: { id: getTrad('list.table.header.size'), defaultMessage: 'size' },\n      isSortable: false,\n    },\n    type: 'size',\n  },\n  {\n    name: 'createdAt',\n    key: 'createdAt',\n    metadatas: {\n      label: { id: getTrad('list.table.header.createdAt'), defaultMessage: 'created' },\n      isSortable: true,\n    },\n    type: 'date',\n  },\n  {\n    name: 'updatedAt',\n    key: 'updatedAt',\n    metadatas: {\n      label: { id: getTrad('list.table.header.updatedAt'), defaultMessage: 'last update' },\n      isSortable: true,\n    },\n    type: 'date',\n  },\n];\n\nexport const pageSizes = [10, 20, 50, 100];\n\nexport const sortOptions = [\n  { key: 'sort.created_at_desc', value: 'createdAt:DESC' },\n  { key: 'sort.created_at_asc', value: 'createdAt:ASC' },\n  { key: 'sort.name_asc', value: 'name:ASC' },\n  { key: 'sort.name_desc', value: 'name:DESC' },\n  { key: 'sort.updated_at_desc', value: 'updatedAt:DESC' },\n  { key: 'sort.updated_at_asc', value: 'updatedAt:ASC' },\n];\n\nexport const localStorageKeys = {\n  modalView: `STRAPI_UPLOAD_MODAL_VIEW`,\n  view: `STRAPI_UPLOAD_LIBRARY_VIEW`,\n};\n\nexport const PERMISSIONS = {\n  // This permission regards the main component (App) and is used to tell\n  // If the plugin link should be displayed in the menu\n  // And also if the plugin is accessible. This use case is found when a user types the url of the\n  // plugin directly in the browser\n  main: [\n    { action: 'plugin::upload.read', subject: null },\n    {\n      action: 'plugin::upload.assets.create',\n      subject: null,\n    },\n    {\n      action: 'plugin::upload.assets.update',\n      subject: null,\n    },\n  ],\n  copyLink: [\n    {\n      action: 'plugin::upload.assets.copy-link',\n      subject: null,\n    },\n  ],\n  create: [\n    {\n      action: 'plugin::upload.assets.create',\n      subject: null,\n    },\n  ],\n  download: [\n    {\n      action: 'plugin::upload.assets.download',\n      subject: null,\n    },\n  ],\n  read: [{ action: 'plugin::upload.read', subject: null }],\n  configureView: [{ action: 'plugin::upload.configure-view', subject: null }],\n  settings: [{ action: 'plugin::upload.settings.read', subject: null }],\n  update: [{ action: 'plugin::upload.assets.update', subject: null, fields: null }],\n};\n","import { useEffect } from 'react';\n\nimport { useNotifyAT } from '@strapi/design-system';\nimport { useFetchClient, useNotification } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport pluginId from '../pluginId';\n\nexport const useAssets = ({ skipWhen = false, query = {} } = {}) => {\n  const { formatMessage } = useIntl();\n  const toggleNotification = useNotification();\n  const { notifyStatus } = useNotifyAT();\n  const { get } = useFetchClient();\n  const { folderPath, _q, ...paramsExceptFolderAndQ } = query;\n\n  let params;\n\n  if (_q) {\n    params = {\n      ...paramsExceptFolderAndQ,\n      _q: encodeURIComponent(_q),\n    };\n  } else {\n    params = {\n      ...paramsExceptFolderAndQ,\n      filters: {\n        $and: [\n          ...(paramsExceptFolderAndQ?.filters?.$and ?? []),\n          {\n            folderPath: { $eq: folderPath ?? '/' },\n          },\n        ],\n      },\n    };\n  }\n\n  const { data, error, isLoading } = useQuery(\n    [pluginId, 'assets', params],\n    async () => {\n      const { data } = await get('/upload/files', { params });\n\n      return data;\n    },\n    {\n      enabled: !skipWhen,\n      staleTime: 0,\n      cacheTime: 0,\n      select(data) {\n        if (data?.results && Array.isArray(data.results)) {\n          return {\n            ...data,\n            results: data.results\n              /**\n               * Filter out assets that don't have a name.\n               * So we don't try to render them as assets\n               * and get errors.\n               */\n              .filter((asset) => asset.name)\n              .map((asset) => ({\n                ...asset,\n                /**\n                 * Mime and ext cannot be null in the front-end because\n                 * we expect them to be strings and use the `includes` method.\n                 */\n                mime: asset.mime ?? '',\n                ext: asset.ext ?? '',\n              })),\n          };\n        }\n\n        return data;\n      },\n    }\n  );\n\n  useEffect(() => {\n    if (data) {\n      notifyStatus(\n        formatMessage({\n          id: 'list.asset.at.finished',\n          defaultMessage: 'The assets have finished loading.',\n        })\n      );\n    }\n  }, [data, formatMessage, notifyStatus]);\n\n  useEffect(() => {\n    if (error) {\n      toggleNotification({\n        type: 'warning',\n        message: { id: 'notification.error' },\n      });\n    }\n  }, [error, toggleNotification]);\n\n  return { data, error, isLoading };\n};\n","import * as React from 'react';\n\nimport { useNotifyAT } from '@strapi/design-system';\nimport { useFetchClient, useNotification } from '@strapi/helper-plugin';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport pluginId from '../pluginId';\n\nexport const useFolders = ({ enabled = true, query = {} } = {}) => {\n  const { formatMessage } = useIntl();\n  const toggleNotification = useNotification();\n  const { notifyStatus } = useNotifyAT();\n  const { folder, _q, ...paramsExceptFolderAndQ } = query;\n  const { get } = useFetchClient();\n\n  let params;\n\n  if (_q) {\n    params = {\n      ...paramsExceptFolderAndQ,\n      pagination: {\n        pageSize: -1,\n      },\n      _q,\n    };\n  } else {\n    params = {\n      ...paramsExceptFolderAndQ,\n      pagination: {\n        pageSize: -1,\n      },\n      filters: {\n        $and: [\n          ...(paramsExceptFolderAndQ?.filters?.$and ?? []),\n          {\n            parent: {\n              id: folder ?? {\n                $null: true,\n              },\n            },\n          },\n        ],\n      },\n    };\n  }\n\n  const { data, error, isLoading } = useQuery(\n    [pluginId, 'folders', stringify(params)],\n    async () => {\n      const {\n        data: { data },\n      } = await get('/upload/folders', { params });\n\n      return data;\n    },\n    {\n      enabled,\n      staleTime: 0,\n      cacheTime: 0,\n      onError() {\n        toggleNotification({\n          type: 'warning',\n          message: { id: 'notification.error' },\n        });\n      },\n    }\n  );\n\n  React.useEffect(() => {\n    if (data) {\n      notifyStatus(\n        formatMessage({\n          id: 'list.asset.at.finished',\n          defaultMessage: 'The folders have finished loading.',\n        })\n      );\n    }\n  }, [data, formatMessage, notifyStatus]);\n\n  return { data, error, isLoading };\n};\n","import { useRBAC } from '@strapi/helper-plugin';\n\nimport { PERMISSIONS } from '../constants';\n\nconst { main, ...restPermissions } = PERMISSIONS;\n\nexport const useMediaLibraryPermissions = () => {\n  const { allowedActions, isLoading } = useRBAC(restPermissions);\n\n  return { ...allowedActions, isLoading };\n};\n","import { useFetchClient, useNotification, useTracking } from '@strapi/helper-plugin';\nimport { useMutation, useQuery } from 'react-query';\n\nimport pluginId from '../pluginId';\n\nconst endpoint = `/${pluginId}/configuration`;\nconst queryKey = [pluginId, 'configuration'];\n\nexport const useConfig = () => {\n  const { trackUsage } = useTracking();\n  const toggleNotification = useNotification();\n  const { get, put } = useFetchClient();\n\n  const config = useQuery(\n    queryKey,\n    async () => {\n      const res = await get(endpoint);\n\n      return res.data.data;\n    },\n    {\n      onError() {\n        return toggleNotification({\n          type: 'warning',\n          message: { id: 'notification.error' },\n        });\n      },\n      /**\n       * We're cementing that we always expect an object to be returned.\n       */\n      select: (data) => (!data ? {} : data),\n    }\n  );\n\n  const putMutation = useMutation(\n    async (body) => {\n      await put(endpoint, body);\n    },\n    {\n      onSuccess() {\n        trackUsage('didEditMediaLibraryConfig');\n        config.refetch();\n      },\n      onError() {\n        return toggleNotification({\n          type: 'warning',\n          message: { id: 'notification.error' },\n        });\n      },\n    }\n  );\n\n  return {\n    config,\n    mutateConfig: putMutation,\n  };\n};\n","import { useEffect, useState } from 'react';\n\nimport { useTracking } from '@strapi/helper-plugin';\nimport { stringify } from 'qs';\n\nimport { useConfig } from './useConfig';\n\nconst useModalQueryParams = (initialState) => {\n  const { trackUsage } = useTracking();\n  const {\n    config: { data: config },\n  } = useConfig();\n\n  const [queryObject, setQueryObject] = useState({\n    page: 1,\n    sort: 'updatedAt:DESC',\n    pageSize: 10,\n    filters: {\n      $and: [],\n    },\n    ...initialState,\n  });\n\n  useEffect(() => {\n    if (config) {\n      setQueryObject((prevQuery) => ({\n        ...prevQuery,\n        sort: config.sort,\n        pageSize: config.pageSize,\n      }));\n    }\n  }, [config]);\n\n  const handleChangeFilters = (nextFilters) => {\n    trackUsage('didFilterMediaLibraryElements', {\n      location: 'content-manager',\n      filter: Object.keys(nextFilters[nextFilters.length - 1])[0],\n    });\n    setQueryObject((prev) => ({ ...prev, page: 1, filters: { $and: nextFilters } }));\n  };\n\n  const handleChangePageSize = (pageSize) => {\n    setQueryObject((prev) => ({ ...prev, pageSize: parseInt(pageSize, 10), page: 1 }));\n  };\n\n  const handeChangePage = (page) => {\n    setQueryObject((prev) => ({ ...prev, page }));\n  };\n\n  const handleChangeSort = (sort) => {\n    trackUsage('didSortMediaLibraryElements', {\n      location: 'content-manager',\n      sort,\n    });\n    setQueryObject((prev) => ({ ...prev, sort }));\n  };\n\n  const handleChangeSearch = (_q) => {\n    if (_q) {\n      setQueryObject((prev) => ({ ...prev, _q, page: 1 }));\n    } else {\n      const newState = { page: 1 };\n\n      Object.keys(queryObject).forEach((key) => {\n        if (!['page', '_q'].includes(key)) {\n          newState[key] = queryObject[key];\n        }\n      });\n\n      setQueryObject(newState);\n    }\n  };\n\n  const handleChangeFolder = (folder, folderPath) => {\n    setQueryObject((prev) => ({ ...prev, folder: folder ?? null, folderPath }));\n  };\n\n  return [\n    { queryObject, rawQuery: stringify(queryObject, { encode: false }) },\n    {\n      onChangeFilters: handleChangeFilters,\n      onChangeFolder: handleChangeFolder,\n      onChangePage: handeChangePage,\n      onChangePageSize: handleChangePageSize,\n      onChangeSort: handleChangeSort,\n      onChangeSearch: handleChangeSearch,\n    },\n  ];\n};\n\nexport default useModalQueryParams;\n","import toSingularTypes from './toSingularTypes';\n\n/**\n * Returns the files that can be added to the media field\n * @param {Object[]} pluralTypes Array of string (allowedTypes)\n * @param {Object[]} files Array of files\n * @returns Object[]\n */\nconst getAllowedFiles = (pluralTypes, files) => {\n  const singularTypes = toSingularTypes(pluralTypes);\n\n  const allowedFiles = files.filter((file) => {\n    const fileType = file.mime.split('/')[0];\n\n    if (singularTypes.includes('file') && !['video', 'image', 'audio'].includes(fileType)) {\n      return true;\n    }\n\n    return singularTypes.includes(fileType);\n  });\n\n  return allowedFiles;\n};\n\nexport default getAllowedFiles;\n","const move = (array, oldIndex, newIndex) => {\n  if (newIndex >= array.length) {\n    newIndex = array.length - 1;\n  }\n  array.splice(newIndex, 0, array.splice(oldIndex, 1)[0]);\n\n  return array;\n};\n\nexport const moveElement = (array, index, offset) => {\n  const newIndex = index + offset;\n\n  return move(array, index, newIndex);\n};\n","import { useRef, useState } from 'react';\n\nimport { useFetchClient, useNotification } from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport pluginId from '../pluginId';\nimport { getTrad } from '../utils';\n\nconst editAssetRequest = (asset, file, cancelToken, onProgress, post) => {\n  const endpoint = `/${pluginId}?id=${asset.id}`;\n\n  const formData = new FormData();\n\n  if (file) {\n    formData.append('files', file);\n  }\n\n  formData.append(\n    'fileInfo',\n    JSON.stringify({\n      alternativeText: asset.alternativeText,\n      caption: asset.caption,\n      folder: asset.folder,\n      name: asset.name,\n    })\n  );\n\n  return post(endpoint, formData, {\n    cancelToken: cancelToken.token,\n    onUploadProgress({ total, loaded }) {\n      onProgress((loaded / total) * 100);\n    },\n    headers: {\n      'Content-Type': 'multipart/form-data',\n    },\n  }).then((res) => res.data);\n};\n\nexport const useEditAsset = () => {\n  const [progress, setProgress] = useState(0);\n  const { formatMessage } = useIntl();\n  const toggleNotification = useNotification();\n  const queryClient = useQueryClient();\n  const tokenRef = useRef(axios.CancelToken.source());\n  const { post } = useFetchClient();\n\n  const mutation = useMutation(\n    ({ asset, file }) => editAssetRequest(asset, file, tokenRef.current, setProgress, post),\n    {\n      onSuccess() {\n        queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n        queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n        queryClient.refetchQueries([pluginId, 'folders'], { active: true });\n      },\n      onError(reason) {\n        if (reason.response.status === 403) {\n          toggleNotification({\n            type: 'info',\n            message: { id: getTrad('permissions.not-allowed.update') },\n          });\n        } else {\n          toggleNotification({ type: 'warning', message: reason.message });\n        }\n      },\n    }\n  );\n\n  const editAsset = (asset, file) => mutation.mutateAsync({ asset, file });\n\n  const cancel = () =>\n    tokenRef.current.cancel(\n      formatMessage({ id: getTrad('modal.upload.cancelled'), defaultMessage: '' })\n    );\n\n  return { ...mutation, cancel, editAsset, progress, status: mutation.status };\n};\n","export const recursiveRenameKeys = (obj, fn) =>\n  Object.fromEntries(\n    Object.entries(obj).map(([key, value]) => {\n      const getValue = (v) =>\n        typeof v === 'object' && v !== null ? recursiveRenameKeys(v, fn) : v;\n\n      return [fn(key), Array.isArray(value) ? value.map((val) => getValue(val)) : getValue(value)];\n    })\n  );\n","import { useFetchClient } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport pluginId from '../pluginId';\nimport { getTrad } from '../utils';\n\nimport { recursiveRenameKeys } from './utils/rename-keys';\n\nconst FIELD_MAPPING = {\n  name: 'label',\n  id: 'value',\n};\n\nexport const useFolderStructure = ({ enabled = true } = {}) => {\n  const { formatMessage } = useIntl();\n  const { get } = useFetchClient();\n\n  const fetchFolderStructure = async () => {\n    const {\n      data: { data },\n    } = await get('/upload/folder-structure');\n\n    const children = data.map((f) => recursiveRenameKeys(f, (key) => FIELD_MAPPING?.[key] ?? key));\n\n    return [\n      {\n        value: null,\n        label: formatMessage({\n          id: getTrad('form.input.label.folder-location-default-label'),\n          defaultMessage: 'Media Library',\n        }),\n        children,\n      },\n    ];\n  };\n\n  const { data, error, isLoading } = useQuery(\n    [pluginId, 'folder', 'structure'],\n    fetchFolderStructure,\n    {\n      enabled,\n      staleTime: 0,\n      cacheTime: 0,\n    }\n  );\n\n  return { data, error, isLoading };\n};\n","import React from 'react';\n\nimport { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nexport const ContextInfo = ({ blocks }) => {\n  return (\n    <Box\n      hasRadius\n      paddingLeft={6}\n      paddingRight={6}\n      paddingTop={4}\n      paddingBottom={4}\n      background=\"neutral100\"\n    >\n      <Grid gap={4}>\n        {blocks.map(({ label, value }) => (\n          <GridItem col={6} xs={12} key={label}>\n            <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n              <Typography variant=\"sigma\" textColor=\"neutral600\">\n                {label}\n              </Typography>\n              <Typography variant=\"pi\" textColor=\"neutral700\">\n                {value}\n              </Typography>\n            </Flex>\n          </GridItem>\n        ))}\n      </Grid>\n    </Box>\n  );\n};\n\nContextInfo.propTypes = {\n  blocks: PropTypes.arrayOf(\n    PropTypes.shape({\n      label: PropTypes.string,\n      value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    })\n  ).isRequired,\n};\n","import React from 'react';\n\nimport { Flex, Icon, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { ChevronDown, ChevronUp } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { components } from 'react-select';\nimport styled from 'styled-components';\n\nconst ToggleButton = styled(Flex)`\n  align-self: flex-end;\n  height: ${pxToRem(22)};\n  width: ${pxToRem(28)};\n\n  &:hover,\n  &:focus {\n    background-color: ${({ theme }) => theme.colors.primary200};\n  }\n`;\n\nconst Option = ({ children, data, selectProps, ...props }) => {\n  const { formatMessage } = useIntl();\n  const { depth, value, children: options } = data;\n  const { maxDisplayDepth, openValues, onOptionToggle } = selectProps;\n  const isOpen = openValues.includes(value);\n\n  return (\n    <components.Option {...props}>\n      <Flex alignItems=\"start\">\n        <Typography textColor=\"neutral800\" ellipsis>\n          <span style={{ paddingLeft: `${Math.min(depth, maxDisplayDepth) * 14}px` }}>\n            {children}\n          </span>\n        </Typography>\n\n        {options?.length > 0 && (\n          <ToggleButton\n            aria-label={formatMessage({\n              id: 'app.utils.toggle',\n              defaultMessage: 'Toggle',\n            })}\n            as=\"button\"\n            alignItems=\"center\"\n            hasRadius\n            justifyContent=\"center\"\n            marginLeft=\"auto\"\n            onClick={(event) => {\n              event.preventDefault();\n              event.stopPropagation();\n\n              onOptionToggle(value);\n            }}\n          >\n            <Icon width={pxToRem(14)} color=\"neutral500\" as={isOpen ? ChevronUp : ChevronDown} />\n          </ToggleButton>\n        )}\n      </Flex>\n    </components.Option>\n  );\n};\n\nOption.propTypes = {\n  children: PropTypes.node.isRequired,\n  data: PropTypes.object.isRequired,\n  onToggle: PropTypes.func.isRequired,\n  selectProps: PropTypes.shape({\n    maxDisplayDepth: PropTypes.number,\n    openValues: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),\n    onOptionToggle: PropTypes.func,\n  }).isRequired,\n};\n\nexport default Option;\n","function getOpenValues(options, defaultValue = {}) {\n  let values = [];\n  const { value } = defaultValue;\n  const option = options.find((option) => option.value === value);\n\n  if (!option) {\n    return values;\n  }\n\n  values.push(option.value);\n\n  let { parent } = option;\n\n  while (parent !== undefined) {\n    // eslint-disable-next-line no-loop-func\n    const option = options.find(({ value }) => value === parent);\n\n    values.push(option.value);\n    parent = option.parent;\n  }\n\n  return values.reverse();\n}\n\nexport default getOpenValues;\n","function getValuesToClose(options, value) {\n  const optionForValue = options.find((option) => option.value === value);\n\n  return options\n    .filter((option) => option.depth >= optionForValue.depth)\n    .map((option) => option.value);\n}\n\nexport default getValuesToClose;\n","import React, { useEffect, useMemo, useState } from 'react';\n\n/**\n * @note – This component is way too complex to convert to the DS version.\n */\n// eslint-disable-next-line no-restricted-imports\nimport { ReactSelect as Select } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\n\nimport Option from './Option';\nimport flattenTree from './utils/flattenTree';\nimport getOpenValues from './utils/getOpenValues';\nimport getValuesToClose from './utils/getValuesToClose';\n\nconst hasParent = (option) => !option.parent;\n\nconst SelectTree = ({ options: defaultOptions, maxDisplayDepth, defaultValue, ...props }) => {\n  const flatDefaultOptions = useMemo(() => flattenTree(defaultOptions), [defaultOptions]);\n  const optionsFiltered = useMemo(() => flatDefaultOptions.filter(hasParent), [flatDefaultOptions]);\n  const [options, setOptions] = useState(optionsFiltered);\n  const [openValues, setOpenValues] = useState(getOpenValues(flatDefaultOptions, defaultValue));\n\n  useEffect(() => {\n    if (openValues.length === 0) {\n      setOptions(flatDefaultOptions.filter((option) => option.parent === undefined));\n    } else {\n      const allOpenValues = openValues.reduce((acc, value) => {\n        const options = flatDefaultOptions.filter(\n          (option) => option.value === value || option.parent === value\n        );\n\n        options.forEach((option) => {\n          const values = getOpenValues(flatDefaultOptions, option);\n          acc = [...acc, ...values];\n        });\n\n        return acc;\n      }, []);\n\n      const nextOptions = flatDefaultOptions.filter((option) =>\n        allOpenValues.includes(option.value)\n      );\n\n      setOptions(nextOptions);\n    }\n  }, [openValues, flatDefaultOptions, optionsFiltered]);\n\n  const handleToggle = (value) => {\n    if (openValues.includes(value)) {\n      const valuesToClose = getValuesToClose(flatDefaultOptions, value);\n      setOpenValues((prev) => prev.filter((prevData) => !valuesToClose.includes(prevData)));\n    } else {\n      setOpenValues((prev) => [...prev, value]);\n    }\n  };\n\n  return (\n    <Select\n      components={{ Option }}\n      options={options}\n      defaultValue={defaultValue}\n      isSearchable={false}\n      /* -- custom props, used by the Option component */\n      maxDisplayDepth={maxDisplayDepth}\n      openValues={openValues}\n      onOptionToggle={handleToggle}\n      /* -- / custom props */\n      {...props}\n    />\n  );\n};\n\nconst OptionShape = PropTypes.shape({\n  value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  label: PropTypes.string.isRequired,\n  children: PropTypes.array,\n});\n\nOptionShape.children = PropTypes.arrayOf(PropTypes.shape(OptionShape));\n\nOptionShape.defaultProps = {\n  children: undefined,\n};\n\nSelectTree.defaultProps = {\n  defaultValue: undefined,\n  maxDisplayDepth: 5,\n};\n\nSelectTree.propTypes = {\n  defaultValue: PropTypes.shape({\n    value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  }),\n  maxDisplayDepth: PropTypes.number,\n  options: PropTypes.arrayOf(OptionShape).isRequired,\n};\n\nexport default SelectTree;\n","import React from 'react';\n\nimport { ModalHeader, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nexport const DialogHeader = () => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <ModalHeader>\n      <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n        {formatMessage({ id: 'global.details', defaultMessage: 'Details' })}\n      </Typography>\n    </ModalHeader>\n  );\n};\n","import { useEffect, useRef, useState } from 'react';\n\nimport Cropper from 'cropperjs';\n\nconst QUALITY = 1;\n\nexport const useCropImg = () => {\n  const cropperRef = useRef();\n  const [isCropping, setIsCropping] = useState(false);\n  const [size, setSize] = useState({ width: undefined, height: undefined });\n\n  useEffect(() => {\n    return () => {\n      if (cropperRef.current) {\n        cropperRef.current.destroy();\n      }\n    };\n  }, []);\n\n  const handleResize = ({ detail: { height, width } }) => {\n    const roundedDataWidth = Math.round(width);\n    const roundedDataHeight = Math.round(height);\n\n    setSize({ width: roundedDataWidth, height: roundedDataHeight });\n  };\n\n  const crop = (image) => {\n    if (!cropperRef.current) {\n      cropperRef.current = new Cropper(image, {\n        modal: true,\n        initialAspectRatio: 16 / 9,\n        movable: true,\n        zoomable: false,\n        cropBoxResizable: true,\n        background: false,\n        checkCrossOrigin: false,\n        crop: handleResize,\n      });\n\n      setIsCropping(true);\n    }\n  };\n\n  const stopCropping = () => {\n    if (cropperRef.current) {\n      cropperRef.current.destroy();\n      cropperRef.current = undefined;\n      setIsCropping(false);\n    }\n  };\n\n  const produceFile = (name, mimeType, lastModifiedDate) =>\n    new Promise((resolve, reject) => {\n      if (!cropperRef.current) {\n        reject(\n          new Error(\n            'The cropper has not been instantiated: make sure to call the crop() function before calling produceFile().'\n          )\n        );\n      } else {\n        const canvas = cropperRef.current.getCroppedCanvas();\n\n        canvas.toBlob(\n          (blob) => {\n            resolve(\n              new File([blob], name, {\n                type: mimeType,\n                lastModifiedDate,\n              })\n            );\n          },\n          mimeType,\n          QUALITY\n        );\n      }\n    });\n\n  return {\n    crop,\n    produceFile,\n    stopCropping,\n    isCropping,\n    isCropperReady: Boolean(cropperRef.current),\n    ...size,\n  };\n};\n","import { useRef, useState } from 'react';\n\nimport { useFetchClient } from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport pluginId from '../pluginId';\nimport { getTrad } from '../utils';\n\nconst endpoint = `/${pluginId}`;\n\nconst uploadAsset = (asset, folderId, cancelToken, onProgress, post) => {\n  const { rawFile, caption, name, alternativeText } = asset;\n  const formData = new FormData();\n\n  formData.append('files', rawFile);\n\n  formData.append(\n    'fileInfo',\n    JSON.stringify({\n      name,\n      caption,\n      alternativeText,\n      folder: folderId,\n    })\n  );\n\n  return post(endpoint, formData, {\n    headers: {\n      'Content-Type': 'multipart/form-data',\n    },\n    cancelToken: cancelToken.token,\n    onUploadProgress({ total, loaded }) {\n      onProgress((loaded / total) * 100);\n    },\n  }).then((res) => res.data);\n};\n\nexport const useUpload = () => {\n  const [progress, setProgress] = useState(0);\n  const { formatMessage } = useIntl();\n  const queryClient = useQueryClient();\n  const tokenRef = useRef(axios.CancelToken.source());\n  const { post } = useFetchClient();\n\n  const mutation = useMutation(\n    ({ asset, folderId }) => {\n      return uploadAsset(asset, folderId, tokenRef.current, setProgress, post);\n    },\n    {\n      onSuccess() {\n        queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n        queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n      },\n    }\n  );\n\n  const upload = (asset, folderId) => mutation.mutateAsync({ asset, folderId });\n\n  const cancel = () =>\n    tokenRef.current.cancel(\n      formatMessage({ id: getTrad('modal.upload.cancelled'), defaultMessage: '' })\n    );\n\n  return {\n    upload,\n    cancel,\n    error: mutation.error,\n    progress,\n    status: mutation.status,\n  };\n};\n","export const downloadFile = async (url, fileName) => {\n  const fileBlob = await fetch(url).then((res) => res.blob());\n  const urlDownload = window.URL.createObjectURL(fileBlob);\n  const link = document.createElement('a');\n\n  link.href = urlDownload;\n  link.setAttribute('download', fileName);\n  link.click();\n};\n","import React from 'react';\n\nimport { IconButton } from '@strapi/design-system';\nimport { useClipboard, useNotification } from '@strapi/helper-plugin';\nimport { Link as LinkIcon } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport getTrad from '../../utils/getTrad';\n\nexport const CopyLinkButton = ({ url }) => {\n  const toggleNotification = useNotification();\n  const { formatMessage } = useIntl();\n  const { copy } = useClipboard();\n\n  const handleClick = async () => {\n    const didCopy = await copy(url);\n\n    if (didCopy) {\n      toggleNotification({\n        type: 'success',\n        message: {\n          id: 'notification.link-copied',\n          defaultMessage: 'Link copied into the clipboard',\n        },\n      });\n    }\n  };\n\n  return (\n    <IconButton\n      label={formatMessage({\n        id: getTrad('control-card.copy-link'),\n        defaultMessage: 'Copy link',\n      })}\n      onClick={handleClick}\n    >\n      <LinkIcon />\n    </IconButton>\n  );\n};\n\nCopyLinkButton.propTypes = {\n  url: PropTypes.string.isRequired,\n};\n","import React from 'react';\n\nimport { Flex, ProgressBar, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst BoxWrapper = styled(Flex)`\n  border-radius: ${({ theme }) => `${theme.borderRadius} ${theme.borderRadius} 0 0`};\n  width: 100%;\n  height: 100%;\n\n  svg {\n    path {\n      fill: ${({ theme, error }) => (error ? theme.colors.danger600 : undefined)};\n    }\n  }\n`;\n\nconst CancelButton = styled.button`\n  border: none;\n  background: none;\n  width: min-content;\n  color: ${({ theme }) => theme.colors.neutral600};\n\n  &:hover,\n  &:focus {\n    color: ${({ theme }) => theme.colors.neutral700};\n  }\n\n  svg {\n    height: 10px;\n    width: 10px;\n\n    path {\n      fill: currentColor;\n    }\n  }\n`;\n\nexport const UploadProgress = ({ onCancel, progress, error }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <BoxWrapper alignItems=\"center\" background={error ? 'danger100' : 'neutral150'} error={error}>\n      {error ? (\n        <Cross aria-label={error?.message} />\n      ) : (\n        <Flex direction=\"column\" alignItems=\"center\" gap={2} width=\"100%\">\n          <ProgressBar value={progress}>{`${progress}/100%`}</ProgressBar>\n\n          <CancelButton type=\"button\" onClick={onCancel}>\n            <Flex gap={2}>\n              <Typography variant=\"pi\" as=\"span\" textColor=\"inherit\">\n                {formatMessage({\n                  id: 'app.components.Button.cancel',\n                  defaultMessage: 'Cancel',\n                })}\n              </Typography>\n\n              <Cross aria-hidden />\n            </Flex>\n          </CancelButton>\n        </Flex>\n      )}\n    </BoxWrapper>\n  );\n};\n\nUploadProgress.defaultProps = {\n  error: undefined,\n  progress: 0,\n};\n\nUploadProgress.propTypes = {\n  error: PropTypes.instanceOf(Error),\n  onCancel: PropTypes.func.isRequired,\n  progress: PropTypes.number,\n};\n","import { getFetchClient } from '@strapi/helper-plugin';\n\nexport const deleteRequest = (type, id) => {\n  const { del } = getFetchClient();\n\n  return del(`/upload/${type}/${id}`);\n};\n","import { useNotification } from '@strapi/helper-plugin';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport pluginId from '../pluginId';\nimport { deleteRequest } from '../utils/deleteRequest';\n\nexport const useRemoveAsset = (onSuccess) => {\n  const toggleNotification = useNotification();\n  const queryClient = useQueryClient();\n\n  const mutation = useMutation((assetId) => deleteRequest('files', assetId), {\n    onSuccess() {\n      queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n      queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n\n      toggleNotification({\n        type: 'success',\n        message: {\n          id: 'modal.remove.success-label',\n          defaultMessage: 'Elements have been successfully deleted.',\n        },\n      });\n\n      onSuccess();\n    },\n    onError(error) {\n      toggleNotification({ type: 'warning', message: error.message });\n    },\n  });\n\n  const removeAsset = (assetId) => mutation.mutate(assetId);\n\n  return { ...mutation, removeAsset };\n};\n","import React from 'react';\n\nimport { ConfirmDialog } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\n\nimport { useRemoveAsset } from '../../hooks/useRemoveAsset';\n\nexport const RemoveAssetDialog = ({ onClose, asset }) => {\n  // `null` means asset is deleted\n  const { isLoading, removeAsset } = useRemoveAsset(() => onClose(null));\n\n  const handleConfirm = () => {\n    removeAsset(asset.id);\n  };\n\n  return (\n    <ConfirmDialog\n      isConfirmButtonLoading={isLoading}\n      isOpen\n      onToggleDialog={onClose}\n      onConfirm={handleConfirm}\n    />\n  );\n};\n\nRemoveAssetDialog.propTypes = {\n  onClose: PropTypes.func.isRequired,\n  asset: PropTypes.shape({\n    id: PropTypes.number,\n    height: PropTypes.number,\n    width: PropTypes.number,\n    size: PropTypes.number,\n    createdAt: PropTypes.string,\n    ext: PropTypes.string,\n    name: PropTypes.string,\n    url: PropTypes.string,\n  }).isRequired,\n};\n","/* eslint-disable jsx-a11y/media-has-caption */\nimport React, { forwardRef } from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { usePersistentState } from '@strapi/helper-plugin';\nimport { File, FilePdf } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { AssetType } from '../../../constants';\n\nconst CardAsset = styled(Flex)`\n  border-radius: ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius} 0 0;\n  background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);\n`;\n\nexport const AssetPreview = forwardRef(({ mime, url, name, ...props }, ref) => {\n  const [lang] = usePersistentState('strapi-admin-language', 'en');\n\n  if (mime.includes(AssetType.Image)) {\n    return <img ref={ref} src={url} alt={name} {...props} />;\n  }\n\n  if (mime.includes(AssetType.Video)) {\n    return (\n      <video controls src={url} ref={ref} {...props}>\n        <track label={name} default kind=\"captions\" srcLang={lang} src=\"\" />\n      </video>\n    );\n  }\n\n  if (mime.includes(AssetType.Audio)) {\n    return (\n      <audio controls src={url} ref={ref} {...props}>\n        {name}\n      </audio>\n    );\n  }\n\n  if (mime.includes('pdf')) {\n    return (\n      <CardAsset justifyContent=\"center\" {...props}>\n        <FilePdf aria-label={name} />\n      </CardAsset>\n    );\n  }\n\n  return (\n    <CardAsset justifyContent=\"center\" {...props}>\n      <File aria-label={name} />\n    </CardAsset>\n  );\n});\n\nAssetPreview.displayName = 'AssetPreview';\n\nAssetPreview.propTypes = {\n  mime: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n  url: PropTypes.string.isRequired,\n};\n","import { Badge, Box, Flex } from '@strapi/design-system';\nimport styled from 'styled-components';\n\nexport const RelativeBox = styled(Box)`\n  position: relative;\n`;\n\nexport const Wrapper = styled.div`\n  position: relative;\n  text-align: center;\n  background: repeating-conic-gradient(\n      ${({ theme }) => theme.colors.neutral100} 0% 25%,\n      transparent 0% 50%\n    )\n    50% / 20px 20px;\n\n  svg {\n    font-size: 3rem;\n    height: ${264 / 16}rem;\n  }\n\n  img,\n  video {\n    margin: 0;\n    padding: 0;\n    max-height: ${264 / 16}rem;\n    max-width: 100%;\n  }\n`;\n\nexport const ActionRow = styled(Flex)`\n  height: ${52 / 16}rem;\n  background-color: ${({ blurry }) => (blurry ? `rgba(33, 33, 52, 0.4)` : undefined)};\n`;\n\nexport const CroppingActionRow = styled(Flex)`\n  z-index: 1;\n  height: ${52 / 16}rem;\n  position: absolute;\n  background-color: rgba(33, 33, 52, 0.4);\n  width: 100%;\n`;\n\n// TODO: fix in parts, this shouldn't happen\nexport const BadgeOverride = styled(Badge)`\n  span {\n    color: inherit;\n    font-weight: ${({ theme }) => theme.fontWeights.regular};\n  }\n`;\n\nexport const UploadProgressWrapper = styled.div`\n  position: absolute;\n  z-index: 2;\n  height: 100%;\n  width: 100%;\n`;\n","import React from 'react';\n\nimport { Flex, FocusTrap, IconButton, VisuallyHidden } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { Check, Cross } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport getTrad from '../../../utils/getTrad';\n\nimport { CroppingActionRow } from './components';\n\nexport const CroppingActions = ({ onCancel, onValidate, onDuplicate }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <FocusTrap onEscape={onCancel}>\n      <CroppingActionRow justifyContent=\"flex-end\" paddingLeft={3} paddingRight={3}>\n        <Flex gap={1}>\n          <IconButton\n            label={formatMessage({\n              id: getTrad('control-card.stop-crop'),\n              defaultMessage: 'Stop cropping',\n            })}\n            icon={<Cross />}\n            onClick={onCancel}\n          />\n\n          <Menu.Root>\n            <Trigger variant=\"tertiary\" paddingLeft={2} paddingRight={2} endIcon={null}>\n              <VisuallyHidden as=\"span\">\n                {formatMessage({\n                  id: getTrad('control-card.crop'),\n                  defaultMessage: 'Crop',\n                })}\n              </VisuallyHidden>\n              <Check\n                aria-hidden\n                focusable={false}\n                style={{ position: 'relative', top: 2 }}\n                fill=\"#C0C0D0\"\n              />\n            </Trigger>\n            <Menu.Content zIndex={5}>\n              <Menu.Item onSelect={onValidate}>\n                {formatMessage({\n                  id: getTrad('checkControl.crop-original'),\n                  defaultMessage: 'Crop the original asset',\n                })}\n              </Menu.Item>\n\n              {onDuplicate && (\n                <Menu.Item onSelect={onDuplicate}>\n                  {formatMessage({\n                    id: getTrad('checkControl.crop-duplicate'),\n                    defaultMessage: 'Duplicate & crop the asset',\n                  })}\n                </Menu.Item>\n              )}\n            </Menu.Content>\n          </Menu.Root>\n        </Flex>\n      </CroppingActionRow>\n    </FocusTrap>\n  );\n};\n\nconst Trigger = styled(Menu.Trigger)`\n  svg {\n    > g,\n    path {\n      fill: ${({ theme }) => theme.colors.neutral500};\n    }\n  }\n\n  &:hover {\n    svg {\n      > g,\n      path {\n        fill: ${({ theme }) => theme.colors.neutral600};\n      }\n    }\n  }\n\n  &:active {\n    svg {\n      > g,\n      path {\n        fill: ${({ theme }) => theme.colors.neutral400};\n      }\n    }\n  }\n`;\n\nCroppingActions.defaultProps = {\n  onDuplicate: undefined,\n};\n\nCroppingActions.propTypes = {\n  onCancel: PropTypes.func.isRequired,\n  onDuplicate: PropTypes.func,\n  onValidate: PropTypes.func.isRequired,\n};\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Crop as Resize, Download as DownloadIcon, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition, AssetType } from '../../../constants';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { createAssetUrl } from '../../../utils';\nimport { downloadFile } from '../../../utils/downloadFile';\nimport getTrad from '../../../utils/getTrad';\nimport { CopyLinkButton } from '../../CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport {\n  ActionRow,\n  BadgeOverride,\n  RelativeBox,\n  UploadProgressWrapper,\n  Wrapper,\n} from './components';\nimport { CroppingActions } from './CroppingActions';\n\nimport 'cropperjs/dist/cropper.css';\n\nexport const PreviewBox = ({\n  asset,\n  canUpdate,\n  canCopyLink,\n  canDownload,\n  onDelete,\n  onCropFinish,\n  onCropStart,\n  onCropCancel,\n  replacementFile,\n  trackedLocation,\n}) => {\n  const { trackUsage } = useTracking();\n  const previewRef = useRef(null);\n  const [isCropImageReady, setIsCropImageReady] = useState(false);\n  const [hasCropIntent, setHasCropIntent] = useState(null);\n  const [assetUrl, setAssetUrl] = useState(createAssetUrl(asset, false));\n  const [thumbnailUrl, setThumbnailUrl] = useState(createAssetUrl(asset, true));\n  const { formatMessage } = useIntl();\n  const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n  const { crop, produceFile, stopCropping, isCropping, isCropperReady, width, height } =\n    useCropImg();\n  const { editAsset, error, isLoading, progress, cancel } = useEditAsset();\n\n  const {\n    upload,\n    isLoading: isLoadingUpload,\n    cancel: cancelUpload,\n    error: uploadError,\n    progress: progressUpload,\n  } = useUpload();\n\n  useEffect(() => {\n    // Whenever a replacementUrl is set, make sure to permutate the real asset.url by\n    // the locally generated one\n    if (replacementFile) {\n      const fileLocalUrl = URL.createObjectURL(replacementFile);\n\n      if (asset.isLocal) {\n        asset.url = fileLocalUrl;\n      }\n\n      setAssetUrl(fileLocalUrl);\n      setThumbnailUrl(fileLocalUrl);\n    }\n  }, [replacementFile, asset]);\n\n  useEffect(() => {\n    if (hasCropIntent === false) {\n      stopCropping();\n      onCropCancel();\n    }\n  }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n  useEffect(() => {\n    if (hasCropIntent && isCropImageReady) {\n      crop(previewRef.current);\n      onCropStart();\n    }\n  }, [isCropImageReady, hasCropIntent, onCropStart, crop]);\n\n  const handleCropping = async () => {\n    const nextAsset = { ...asset, width, height, folder: asset.folder?.id };\n    const file = await produceFile(nextAsset.name, nextAsset.mime, nextAsset.updatedAt);\n\n    // Making sure that when persisting the new asset, the URL changes with width and height\n    // So that the browser makes a request and handle the image caching correctly at the good size\n    let optimizedCachingImage;\n    let optimizedCachingThumbnailImage;\n\n    if (asset.isLocal) {\n      optimizedCachingImage = URL.createObjectURL(file);\n      optimizedCachingThumbnailImage = optimizedCachingImage;\n      asset.url = optimizedCachingImage;\n      asset.rawFile = file;\n\n      trackUsage('didCropFile', { duplicatedFile: null, location: trackedLocation });\n    } else {\n      const updatedAsset = await editAsset(nextAsset, file);\n      optimizedCachingImage = createAssetUrl(updatedAsset, false);\n      optimizedCachingThumbnailImage = createAssetUrl(updatedAsset, true);\n\n      trackUsage('didCropFile', { duplicatedFile: false, location: trackedLocation });\n    }\n\n    setAssetUrl(optimizedCachingImage);\n    setThumbnailUrl(optimizedCachingThumbnailImage);\n    setHasCropIntent(false);\n  };\n\n  const isInCroppingMode = isCropping && !isLoading;\n\n  const handleDuplication = async () => {\n    const nextAsset = { ...asset, width, height };\n    const file = await produceFile(nextAsset.name, nextAsset.mime, nextAsset.updatedAt);\n\n    await upload({ name: file.name, rawFile: file }, asset.folder?.id);\n\n    trackUsage('didCropFile', { duplicatedFile: true, location: trackedLocation });\n\n    setHasCropIntent(false);\n    onCropFinish();\n  };\n\n  const handleCropCancel = () => {\n    setHasCropIntent(false);\n  };\n\n  const handleCropStart = () => {\n    setHasCropIntent(true);\n  };\n\n  return (\n    <>\n      <RelativeBox hasRadius background=\"neutral150\" borderColor=\"neutral200\">\n        {isCropperReady && isInCroppingMode && (\n          <CroppingActions\n            onValidate={handleCropping}\n            onDuplicate={asset.isLocal ? undefined : handleDuplication}\n            onCancel={handleCropCancel}\n          />\n        )}\n\n        <ActionRow paddingLeft={3} paddingRight={3} justifyContent=\"flex-end\">\n          <Flex gap={1}>\n            {canUpdate && !asset.isLocal && (\n              <IconButton\n                label={formatMessage({\n                  id: 'global.delete',\n                  defaultMessage: 'Delete',\n                })}\n                icon={<Trash />}\n                onClick={() => setShowConfirmDialog(true)}\n              />\n            )}\n\n            {canDownload && (\n              <IconButton\n                label={formatMessage({\n                  id: getTrad('control-card.download'),\n                  defaultMessage: 'Download',\n                })}\n                icon={<DownloadIcon />}\n                onClick={() => downloadFile(assetUrl, asset.name)}\n              />\n            )}\n\n            {canCopyLink && <CopyLinkButton url={assetUrl} />}\n\n            {canUpdate && asset.mime.includes(AssetType.Image) && (\n              <IconButton\n                label={formatMessage({ id: getTrad('control-card.crop'), defaultMessage: 'Crop' })}\n                icon={<Resize />}\n                onClick={handleCropStart}\n              />\n            )}\n          </Flex>\n        </ActionRow>\n\n        <Wrapper>\n          {/* This one is for editting an asset */}\n          {isLoading && (\n            <UploadProgressWrapper>\n              <UploadProgress error={error} onCancel={cancel} progress={progress} />\n            </UploadProgressWrapper>\n          )}\n\n          {/* This one is for duplicating an asset after cropping */}\n          {isLoadingUpload && (\n            <UploadProgressWrapper>\n              <UploadProgress\n                error={uploadError}\n                onCancel={cancelUpload}\n                progress={progressUpload}\n              />\n            </UploadProgressWrapper>\n          )}\n\n          <AssetPreview\n            ref={previewRef}\n            mime={asset.mime}\n            name={asset.name}\n            url={hasCropIntent ? assetUrl : thumbnailUrl}\n            onLoad={() => {\n              if (asset.isLocal || hasCropIntent) {\n                setIsCropImageReady(true);\n              }\n            }}\n          />\n        </Wrapper>\n\n        <ActionRow\n          paddingLeft={2}\n          paddingRight={2}\n          justifyContent=\"flex-end\"\n          blurry={isInCroppingMode}\n        >\n          {isInCroppingMode && width && height && (\n            <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n              {width && height ? `${height}✕${width}` : 'N/A'}\n            </BadgeOverride>\n          )}\n        </ActionRow>\n      </RelativeBox>\n\n      {showConfirmDialog && (\n        <RemoveAssetDialog\n          onClose={() => {\n            setShowConfirmDialog(false);\n            onDelete(null);\n          }}\n          asset={asset}\n        />\n      )}\n    </>\n  );\n};\n\nPreviewBox.defaultProps = {\n  replacementFile: undefined,\n  trackedLocation: undefined,\n};\n\nPreviewBox.propTypes = {\n  canUpdate: PropTypes.bool.isRequired,\n  canCopyLink: PropTypes.bool.isRequired,\n  canDownload: PropTypes.bool.isRequired,\n  replacementFile: PropTypes.instanceOf(File),\n  asset: AssetDefinition.isRequired,\n  onDelete: PropTypes.func.isRequired,\n  onCropFinish: PropTypes.func.isRequired,\n  onCropStart: PropTypes.func.isRequired,\n  onCropCancel: PropTypes.func.isRequired,\n  trackedLocation: PropTypes.string,\n};\n","import React, { useRef } from 'react';\n\nimport { Button, VisuallyHidden } from '@strapi/design-system';\nimport { useTracking } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\n\nexport const ReplaceMediaButton = ({ onSelectMedia, acceptedMime, trackedLocation, ...props }) => {\n  const { formatMessage } = useIntl();\n  const inputRef = useRef(null);\n  const { trackUsage } = useTracking();\n\n  const handleClick = (e) => {\n    e.preventDefault();\n\n    if (trackedLocation) {\n      trackUsage('didReplaceMedia', { location: trackedLocation });\n    }\n\n    inputRef.current.click();\n  };\n\n  const handleChange = () => {\n    const file = inputRef.current.files[0];\n\n    onSelectMedia(file);\n  };\n\n  return (\n    <>\n      <Button variant=\"secondary\" onClick={handleClick} {...props}>\n        {formatMessage({\n          id: getTrad('control-card.replace-media'),\n          defaultMessage: 'Replace media',\n        })}\n      </Button>\n      <VisuallyHidden>\n        <input\n          accept={acceptedMime}\n          type=\"file\"\n          name=\"file\"\n          tabIndex={-1}\n          ref={inputRef}\n          onChange={handleChange}\n          aria-hidden\n        />\n      </VisuallyHidden>\n    </>\n  );\n};\n\nReplaceMediaButton.defaultProps = {\n  trackedLocation: undefined,\n};\n\nReplaceMediaButton.propTypes = {\n  acceptedMime: PropTypes.string.isRequired,\n  onSelectMedia: PropTypes.func.isRequired,\n  trackedLocation: PropTypes.string,\n};\n","/**\n *\n * EditAssetDialog\n *\n */\n\nimport React, { useRef, useState } from 'react';\n\nimport {\n  Button,\n  FieldLabel,\n  Flex,\n  Grid,\n  GridItem,\n  Loader,\n  ModalBody,\n  ModalFooter,\n  ModalLayout,\n  TextInput,\n  VisuallyHidden,\n} from '@strapi/design-system';\nimport { Form, getFileExtension, pxToRem, useTracking } from '@strapi/helper-plugin';\nimport { Formik } from 'formik';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { AssetDefinition } from '../../constants';\nimport { useEditAsset } from '../../hooks/useEditAsset';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { findRecursiveFolderByValue, getTrad } from '../../utils';\nimport formatBytes from '../../utils/formatBytes';\nimport { ContextInfo } from '../ContextInfo';\nimport SelectTree from '../SelectTree';\n\nimport { DialogHeader } from './DialogHeader';\nimport { PreviewBox } from './PreviewBox';\nimport { ReplaceMediaButton } from './ReplaceMediaButton';\n\nconst LoadingBody = styled(Flex)`\n  /* 80px are coming from the Tabs component that is not included in the ModalBody */\n  min-height: ${() => `calc(60vh + ${pxToRem(80)})`};\n`;\n\nconst fileInfoSchema = yup.object({\n  name: yup.string().required(),\n  alternativeText: yup.string(),\n  caption: yup.string(),\n  folder: yup.number(),\n});\n\nexport const EditAssetDialog = ({\n  onClose,\n  asset,\n  canUpdate,\n  canCopyLink,\n  canDownload,\n  trackedLocation,\n}) => {\n  const { formatMessage, formatDate } = useIntl();\n  const { trackUsage } = useTracking();\n  const submitButtonRef = useRef(null);\n  const [isCropping, setIsCropping] = useState(false);\n  const [replacementFile, setReplacementFile] = useState();\n  const { editAsset, isLoading } = useEditAsset();\n\n  const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n    enabled: true,\n  });\n\n  const handleSubmit = async (values) => {\n    const nextAsset = { ...asset, ...values, folder: values.parent.value };\n\n    if (asset.isLocal) {\n      onClose(nextAsset);\n    } else {\n      const editedAsset = await editAsset(nextAsset, replacementFile);\n\n      const assetType = asset?.mime.split('/')[0];\n      // if the folder parent was the root of Media Library, its id is null\n      // we know it changed location if the new parent value exists\n      const didChangeLocation = asset?.folder?.id\n        ? asset.folder.id !== values.parent.value\n        : asset.folder === null && !!values.parent.value;\n\n      trackUsage('didEditMediaLibraryElements', {\n        location: trackedLocation,\n        type: assetType,\n        changeLocation: didChangeLocation,\n      });\n\n      onClose(editedAsset);\n    }\n  };\n\n  const handleStartCropping = () => {\n    setIsCropping(true);\n  };\n\n  const handleCancelCropping = () => {\n    setIsCropping(false);\n  };\n\n  const handleFinishCropping = () => {\n    setIsCropping(false);\n    onClose();\n  };\n\n  const formDisabled = !canUpdate || isCropping;\n\n  const handleConfirmClose = () => {\n    // eslint-disable-next-line no-alert\n    const confirm = window.confirm(\n      formatMessage({\n        id: 'window.confirm.close-modal.file',\n        defaultMessage: 'Are you sure? Your changes will be lost.',\n      })\n    );\n\n    if (confirm) {\n      onClose();\n    }\n  };\n\n  const activeFolderId = asset?.folder?.id;\n  const initialFormData = !folderStructureIsLoading && {\n    name: asset.name,\n    alternativeText: asset.alternativeText ?? undefined,\n    caption: asset.caption ?? undefined,\n    parent: {\n      value: activeFolderId ?? undefined,\n      label:\n        findRecursiveFolderByValue(folderStructure, activeFolderId)?.label ??\n        folderStructure[0].label,\n    },\n  };\n\n  const handleClose = (values) => {\n    if (!isEqual(initialFormData, values)) {\n      handleConfirmClose();\n    } else {\n      onClose();\n    }\n  };\n\n  if (folderStructureIsLoading) {\n    return (\n      <ModalLayout onClose={() => handleClose()} labelledBy=\"title\">\n        <DialogHeader />\n        <LoadingBody minHeight=\"60vh\" justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n          <Loader>\n            {formatMessage({\n              id: getTrad('content.isLoading'),\n              defaultMessage: 'Content is loading.',\n            })}\n          </Loader>\n        </LoadingBody>\n        <ModalFooter\n          startActions={\n            <Button onClick={() => handleClose()} variant=\"tertiary\">\n              {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n            </Button>\n          }\n        />\n      </ModalLayout>\n    );\n  }\n\n  return (\n    <Formik\n      validationSchema={fileInfoSchema}\n      validateOnChange={false}\n      onSubmit={handleSubmit}\n      initialValues={initialFormData}\n    >\n      {({ values, errors, handleChange, setFieldValue }) => (\n        <ModalLayout onClose={() => handleClose(values)} labelledBy=\"title\">\n          <DialogHeader />\n          <ModalBody>\n            <Grid gap={4}>\n              <GridItem xs={12} col={6}>\n                <PreviewBox\n                  asset={asset}\n                  canUpdate={canUpdate}\n                  canCopyLink={canCopyLink}\n                  canDownload={canDownload}\n                  onDelete={onClose}\n                  onCropFinish={handleFinishCropping}\n                  onCropStart={handleStartCropping}\n                  onCropCancel={handleCancelCropping}\n                  replacementFile={replacementFile}\n                  trackedLocation={trackedLocation}\n                />\n              </GridItem>\n              <GridItem xs={12} col={6}>\n                <Form noValidate>\n                  <Flex direction=\"column\" alignItems=\"stretch\" gap={3}>\n                    <ContextInfo\n                      blocks={[\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.file-details.size'),\n                            defaultMessage: 'Size',\n                          }),\n                          value: formatBytes(asset.size),\n                        },\n\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.file-details.dimensions'),\n                            defaultMessage: 'Dimensions',\n                          }),\n                          value:\n                            asset.height && asset.width ? `${asset.width}✕${asset.height}` : null,\n                        },\n\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.file-details.date'),\n                            defaultMessage: 'Date',\n                          }),\n                          value: formatDate(new Date(asset.createdAt)),\n                        },\n\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.file-details.extension'),\n                            defaultMessage: 'Extension',\n                          }),\n                          value: getFileExtension(asset.ext),\n                        },\n\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.file-details.id'),\n                            defaultMessage: 'Asset ID',\n                          }),\n                          value: asset.id,\n                        },\n                      ]}\n                    />\n\n                    <TextInput\n                      label={formatMessage({\n                        id: getTrad('form.input.label.file-name'),\n                        defaultMessage: 'File name',\n                      })}\n                      name=\"name\"\n                      value={values.name}\n                      error={errors.name}\n                      onChange={handleChange}\n                      disabled={formDisabled}\n                    />\n\n                    <TextInput\n                      label={formatMessage({\n                        id: getTrad('form.input.label.file-alt'),\n                        defaultMessage: 'Alternative text',\n                      })}\n                      name=\"alternativeText\"\n                      hint={formatMessage({\n                        id: getTrad('form.input.decription.file-alt'),\n                        defaultMessage: 'This text will be displayed if the asset can’t be shown.',\n                      })}\n                      value={values.alternativeText}\n                      error={errors.alternativeText}\n                      onChange={handleChange}\n                      disabled={formDisabled}\n                    />\n\n                    <TextInput\n                      label={formatMessage({\n                        id: getTrad('form.input.label.file-caption'),\n                        defaultMessage: 'Caption',\n                      })}\n                      name=\"caption\"\n                      value={values.caption}\n                      error={errors.caption}\n                      onChange={handleChange}\n                      disabled={formDisabled}\n                    />\n\n                    <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n                      <FieldLabel htmlFor=\"asset-folder\">\n                        {formatMessage({\n                          id: getTrad('form.input.label.file-location'),\n                          defaultMessage: 'Location',\n                        })}\n                      </FieldLabel>\n\n                      <SelectTree\n                        name=\"parent\"\n                        defaultValue={values.parent}\n                        options={folderStructure}\n                        onChange={(value) => {\n                          setFieldValue('parent', value);\n                        }}\n                        menuPortalTarget={document.querySelector('body')}\n                        inputId=\"asset-folder\"\n                        isDisabled={formDisabled}\n                        error={errors?.parent}\n                        ariaErrorMessage=\"folder-parent-error\"\n                      />\n                    </Flex>\n                  </Flex>\n\n                  <VisuallyHidden>\n                    <button\n                      type=\"submit\"\n                      tabIndex={-1}\n                      ref={submitButtonRef}\n                      disabled={formDisabled}\n                    >\n                      {formatMessage({ id: 'submit', defaultMessage: 'Submit' })}\n                    </button>\n                  </VisuallyHidden>\n                </Form>\n              </GridItem>\n            </Grid>\n          </ModalBody>\n          <ModalFooter\n            startActions={\n              <Button onClick={() => handleClose(values)} variant=\"tertiary\">\n                {formatMessage({ id: 'global.cancel', defaultMessage: 'Cancel' })}\n              </Button>\n            }\n            endActions={\n              <>\n                <ReplaceMediaButton\n                  onSelectMedia={setReplacementFile}\n                  acceptedMime={asset.mime}\n                  disabled={formDisabled}\n                  trackedLocation={trackedLocation}\n                />\n\n                <Button\n                  onClick={() => submitButtonRef.current.click()}\n                  loading={isLoading}\n                  disabled={formDisabled}\n                >\n                  {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n                </Button>\n              </>\n            }\n          />\n        </ModalLayout>\n      )}\n    </Formik>\n  );\n};\n\nEditAssetDialog.defaultProps = {\n  trackedLocation: undefined,\n};\n\nEditAssetDialog.propTypes = {\n  asset: AssetDefinition.isRequired,\n  canUpdate: PropTypes.bool.isRequired,\n  canCopyLink: PropTypes.bool.isRequired,\n  canDownload: PropTypes.bool.isRequired,\n  onClose: PropTypes.func.isRequired,\n  trackedLocation: PropTypes.string,\n};\n","import { useFetchClient, useNotification } from '@strapi/helper-plugin';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport pluginId from '../pluginId';\nimport { getTrad } from '../utils';\n\nexport const useBulkRemove = () => {\n  const toggleNotification = useNotification();\n  const queryClient = useQueryClient();\n  const { post } = useFetchClient();\n\n  const bulkRemoveQuery = (filesAndFolders) => {\n    const payload = filesAndFolders.reduce((acc, selected) => {\n      const { id, type } = selected;\n      const key = type === 'asset' ? 'fileIds' : 'folderIds';\n\n      if (!acc[key]) {\n        acc[key] = [];\n      }\n\n      acc[key].push(id);\n\n      return acc;\n    }, {});\n\n    return post('/upload/actions/bulk-delete', payload);\n  };\n\n  const mutation = useMutation(bulkRemoveQuery, {\n    onSuccess(res) {\n      const {\n        data: { data },\n      } = res;\n\n      if (data?.files?.length > 0) {\n        queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n        queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n      }\n\n      if (data?.folders?.length > 0) {\n        queryClient.refetchQueries([pluginId, 'folders'], { active: true });\n      }\n\n      toggleNotification({\n        type: 'success',\n        message: {\n          id: getTrad('modal.remove.success-label'),\n          defaultMessage: 'Elements have been successfully deleted.',\n        },\n      });\n    },\n    onError(error) {\n      toggleNotification({ type: 'warning', message: error.message });\n    },\n  });\n\n  const remove = (...args) => mutation.mutateAsync(...args);\n\n  return { ...mutation, remove };\n};\n","import { useFetchClient } from '@strapi/helper-plugin';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport pluginId from '../pluginId';\n\nconst editFolderRequest = (put, post, { attrs, id }) => {\n  const isEditing = !!id;\n  const method = isEditing ? put : post;\n\n  return method(`/upload/folders/${id ?? ''}`, attrs).then((res) => res.data);\n};\n\nexport const useEditFolder = () => {\n  const queryClient = useQueryClient();\n  const { put, post } = useFetchClient();\n\n  const mutation = useMutation((...args) => editFolderRequest(put, post, ...args), {\n    onSuccess() {\n      queryClient.refetchQueries([pluginId, 'folders'], { active: true });\n      queryClient.refetchQueries([pluginId, 'folder', 'structure'], { active: true });\n    },\n  });\n\n  const editFolder = (attrs, id) => mutation.mutateAsync({ attrs, id });\n\n  return { ...mutation, editFolder, status: mutation.status };\n};\n","import React from 'react';\n\nimport { ModalHeader, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nexport const EditFolderModalHeader = ({ isEditing }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <ModalHeader>\n      <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n        {formatMessage(\n          isEditing\n            ? {\n                id: getTrad('modal.folder.edit.title'),\n                defaultMessage: 'Edit folder',\n              }\n            : {\n                id: getTrad('modal.folder.create.title'),\n                defaultMessage: 'Add new folder',\n              }\n        )}\n      </Typography>\n    </ModalHeader>\n  );\n};\n\nEditFolderModalHeader.defaultProps = {\n  isEditing: false,\n};\n\nEditFolderModalHeader.propTypes = {\n  isEditing: PropTypes.bool,\n};\n","import React from 'react';\n\nimport { ConfirmDialog } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\n\nexport const RemoveFolderDialog = ({ onClose, onConfirm }) => {\n  return (\n    <ConfirmDialog\n      isConfirmButtonLoading={false}\n      isOpen\n      onToggleDialog={onClose}\n      onConfirm={onConfirm}\n    />\n  );\n};\n\nRemoveFolderDialog.propTypes = {\n  onClose: PropTypes.func.isRequired,\n  onConfirm: PropTypes.func.isRequired,\n};\n\nexport default RemoveFolderDialog;\n","import React, { useState } from 'react';\n\nimport {\n  Button,\n  FieldLabel,\n  Flex,\n  Grid,\n  GridItem,\n  Loader,\n  ModalBody,\n  ModalFooter,\n  ModalLayout,\n  TextInput,\n  Typography,\n} from '@strapi/design-system';\nimport { Form, getAPIInnerErrors, useNotification, useTracking } from '@strapi/helper-plugin';\nimport { Formik } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { FolderDefinition } from '../../constants';\nimport { useBulkRemove } from '../../hooks/useBulkRemove';\nimport { useEditFolder } from '../../hooks/useEditFolder';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { findRecursiveFolderByValue, getTrad } from '../../utils';\nimport { ContextInfo } from '../ContextInfo';\nimport SelectTree from '../SelectTree';\n\nimport { EditFolderModalHeader } from './ModalHeader';\nimport RemoveFolderDialog from './RemoveFolderDialog';\n\nconst folderSchema = yup.object({\n  name: yup.string().required(),\n  parent: yup\n    .object({\n      label: yup.string(),\n      value: yup.number().nullable(true),\n    })\n    .nullable(true),\n});\n\nexport const EditFolderDialog = ({ onClose, folder, location, parentFolderId }) => {\n  const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n    enabled: true,\n  });\n  const { canCreate, isLoading: isLoadingPermissions, canUpdate } = useMediaLibraryPermissions();\n  const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n  const { formatMessage, formatDate } = useIntl();\n  const { trackUsage } = useTracking();\n  const { editFolder, isLoading: isEditFolderLoading } = useEditFolder();\n  const { remove } = useBulkRemove();\n  const toggleNotification = useNotification();\n  const isLoading = isLoadingPermissions || folderStructureIsLoading;\n  const isEditing = !!folder;\n  const formDisabled = (folder && !canUpdate) || (!folder && !canCreate);\n  const initialFormData = !folderStructureIsLoading && {\n    name: folder?.name ?? '',\n    parent: {\n      /* ideally we would use folderStructure[0].value, but since it is null\n         react complains about rendering null as field value */\n      value: parentFolderId ? parseInt(parentFolderId, 10) : undefined,\n      label: parentFolderId\n        ? findRecursiveFolderByValue(folderStructure, parseInt(parentFolderId, 10))?.label\n        : folderStructure[0].label,\n    },\n  };\n\n  const handleSubmit = async (values, { setErrors }) => {\n    try {\n      await editFolder(\n        {\n          ...values,\n          parent: values.parent.value ?? null,\n        },\n        folder?.id\n      );\n\n      toggleNotification({\n        type: 'success',\n        message: isEditing\n          ? formatMessage({\n              id: getTrad('modal.folder-notification-edited-success'),\n              defaultMessage: 'Folder successfully edited',\n            })\n          : formatMessage({\n              id: getTrad('modal.folder-notification-created-success'),\n              defaultMessage: 'Folder successfully created',\n            }),\n      });\n\n      if (isEditing) {\n        const didChangeLocation = parentFolderId\n          ? parseInt(parentFolderId, 10) !== values.parent.value\n          : parentFolderId === null && !!values.parent.value;\n\n        trackUsage('didEditMediaLibraryElements', {\n          location,\n          type: 'folder',\n          changeLocation: didChangeLocation,\n        });\n      } else {\n        trackUsage('didAddMediaLibraryFolders', { location });\n      }\n\n      onClose({ created: true });\n    } catch (err) {\n      const errors = getAPIInnerErrors(err, { getTrad });\n      const formikErrors = Object.entries(errors).reduce((acc, [key, error]) => {\n        acc[key] = error.defaultMessage;\n\n        return acc;\n      }, {});\n\n      if (!isEmpty(formikErrors)) {\n        setErrors(formikErrors);\n      }\n    }\n  };\n\n  const handleDelete = async () => {\n    await remove([folder]);\n\n    setShowConfirmDialog(false);\n    onClose();\n  };\n\n  if (isLoading) {\n    return (\n      <ModalLayout onClose={() => onClose()} labelledBy=\"title\">\n        <EditFolderModalHeader isEditing={isEditing} />\n\n        <ModalBody>\n          <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n            <Loader>\n              {formatMessage({\n                id: getTrad('content.isLoading'),\n                defaultMessage: 'Content is loading.',\n              })}\n            </Loader>\n          </Flex>\n        </ModalBody>\n      </ModalLayout>\n    );\n  }\n\n  return (\n    <ModalLayout onClose={() => onClose()} labelledBy=\"title\">\n      <Formik\n        validationSchema={folderSchema}\n        validateOnChange={false}\n        onSubmit={handleSubmit}\n        initialValues={initialFormData}\n      >\n        {({ values, errors, handleChange, setFieldValue }) => (\n          <Form noValidate>\n            <EditFolderModalHeader isEditing={isEditing} />\n\n            <ModalBody>\n              <Grid gap={4}>\n                {isEditing && (\n                  <GridItem xs={12} col={12}>\n                    <ContextInfo\n                      blocks={[\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.folder.create.elements'),\n                            defaultMessage: 'Elements',\n                          }),\n                          value: formatMessage(\n                            {\n                              id: getTrad('modal.folder.elements.count'),\n                              defaultMessage: '{folderCount} folders, {assetCount} assets',\n                            },\n                            {\n                              assetCount: folder?.files?.count ?? 0,\n                              folderCount: folder?.children?.count ?? 0,\n                            }\n                          ),\n                        },\n\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.folder.create.creation-date'),\n                            defaultMessage: 'Creation Date',\n                          }),\n                          value: formatDate(new Date(folder.createdAt)),\n                        },\n                      ]}\n                    />\n                  </GridItem>\n                )}\n\n                <GridItem xs={12} col={6}>\n                  <TextInput\n                    label={formatMessage({\n                      id: getTrad('form.input.label.folder-name'),\n                      defaultMessage: 'Name',\n                    })}\n                    name=\"name\"\n                    value={values.name}\n                    error={errors.name}\n                    onChange={handleChange}\n                    disabled={formDisabled}\n                  />\n                </GridItem>\n\n                <GridItem xs={12} col={6}>\n                  <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n                    <FieldLabel htmlFor=\"folder-parent\">\n                      {formatMessage({\n                        id: getTrad('form.input.label.folder-location'),\n                        defaultMessage: 'Location',\n                      })}\n                    </FieldLabel>\n\n                    <SelectTree\n                      options={folderStructure}\n                      onChange={(value) => {\n                        setFieldValue('parent', value);\n                      }}\n                      isDisabled={formDisabled}\n                      defaultValue={values.parent}\n                      name=\"parent\"\n                      menuPortalTarget={document.querySelector('body')}\n                      inputId=\"folder-parent\"\n                      disabled={formDisabled}\n                      error={errors?.parent}\n                      ariaErrorMessage=\"folder-parent-error\"\n                    />\n\n                    {errors.parent && (\n                      <Typography\n                        variant=\"pi\"\n                        as=\"p\"\n                        id=\"folder-parent-error\"\n                        textColor=\"danger600\"\n                      >\n                        {errors.parent}\n                      </Typography>\n                    )}\n                  </Flex>\n                </GridItem>\n              </Grid>\n            </ModalBody>\n\n            <ModalFooter\n              startActions={\n                <Button onClick={() => onClose()} variant=\"tertiary\" name=\"cancel\">\n                  {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n                </Button>\n              }\n              endActions={\n                <Flex gap={2}>\n                  {isEditing && canUpdate && (\n                    <Button\n                      type=\"button\"\n                      variant=\"danger-light\"\n                      onClick={() => setShowConfirmDialog(true)}\n                      name=\"delete\"\n                      disabled={!canUpdate || isEditFolderLoading}\n                    >\n                      {formatMessage({\n                        id: getTrad('modal.folder.create.delete'),\n                        defaultMessage: 'Delete folder',\n                      })}\n                    </Button>\n                  )}\n\n                  <Button\n                    name=\"submit\"\n                    loading={isEditFolderLoading}\n                    disabled={formDisabled}\n                    type=\"submit\"\n                  >\n                    {formatMessage(\n                      isEditing\n                        ? { id: getTrad('modal.folder.edit.submit'), defaultMessage: 'Save' }\n                        : { id: getTrad('modal.folder.create.submit'), defaultMessage: 'Create' }\n                    )}\n                  </Button>\n                </Flex>\n              }\n            />\n          </Form>\n        )}\n      </Formik>\n      {showConfirmDialog && (\n        <RemoveFolderDialog onClose={() => setShowConfirmDialog(false)} onConfirm={handleDelete} />\n      )}\n    </ModalLayout>\n  );\n};\n\nEditFolderDialog.defaultProps = {\n  folder: undefined,\n  location: undefined,\n  parentFolderId: null,\n};\n\nEditFolderDialog.propTypes = {\n  folder: FolderDefinition,\n  location: PropTypes.string,\n  onClose: PropTypes.func.isRequired,\n  parentFolderId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n","import { useFetchClient, useNotification } from '@strapi/helper-plugin';\nimport { useQuery } from 'react-query';\n\nimport pluginId from '../pluginId';\nimport { getTrad } from '../utils';\n\nexport const useFolder = (id, { enabled = true } = {}) => {\n  const toggleNotification = useNotification();\n  const { get } = useFetchClient();\n\n  const { data, error, isLoading } = useQuery(\n    [pluginId, 'folder', id],\n    async () => {\n      const {\n        data: { data },\n      } = await get(`/upload/folders/${id}`, {\n        params: {\n          populate: {\n            parent: {\n              populate: {\n                parent: '*',\n              },\n            },\n          },\n        },\n      });\n\n      return data;\n    },\n    {\n      retry: false,\n      enabled,\n      staleTime: 0,\n      cacheTime: 0,\n      onError() {\n        toggleNotification({\n          type: 'warning',\n          message: {\n            id: getTrad('notification.warning.404'),\n            defaultMessage: 'Not found',\n          },\n        });\n      },\n    }\n  );\n\n  return { data, error, isLoading };\n};\n","import React from 'react';\n\nimport {\n  Box,\n  Card,\n  CardAction,\n  CardBadge,\n  CardBody,\n  CardCheckbox,\n  CardContent,\n  CardHeader,\n  CardSubtitle,\n  CardTitle,\n  Flex,\n  IconButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../utils';\n\nconst Extension = styled.span`\n  text-transform: uppercase;\n`;\n\nconst CardActionsContainer = styled(CardAction)`\n  opacity: 0;\n\n  &:focus-within {\n    opacity: 1;\n  }\n`;\n\nconst CardContainer = styled(Card)`\n  cursor: pointer;\n\n  &:hover {\n    ${CardActionsContainer} {\n      opacity: 1;\n    }\n  }\n`;\n\nexport const AssetCardBase = ({\n  children,\n  extension,\n  isSelectable,\n  name,\n  onSelect,\n  onRemove,\n  onEdit,\n  selected,\n  subtitle,\n  variant,\n}) => {\n  const { formatMessage } = useIntl();\n\n  /** @type {import(\"react\").MouseEventHandler<HTMLDivElement> } */\n  const handleClick = (e) => {\n    if (onEdit) {\n      onEdit(e);\n    }\n  };\n\n  /**\n   * @type {import(\"react\").MouseEventHandler<HTMLDivElement> }\n   *\n   * This is required because we need to stop the propagation of the event\n   * bubbling to the `CardContainer`, however the `CardCheckbox` only returns\n   * the `boolean` value as opposed to the event itself.\n   */\n  const handlePropagationClick = (e) => {\n    e.stopPropagation();\n  };\n\n  return (\n    <CardContainer role=\"button\" height=\"100%\" tabIndex={-1} onClick={handleClick}>\n      <CardHeader>\n        {isSelectable && (\n          // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n          <div onClick={handlePropagationClick}>\n            <CardCheckbox value={selected} onValueChange={onSelect} />\n          </div>\n        )}\n        {(onRemove || onEdit) && (\n          <CardActionsContainer onClick={handlePropagationClick} position=\"end\">\n            {onRemove && (\n              <IconButton\n                label={formatMessage({\n                  id: getTrad('control-card.remove-selection'),\n                  defaultMessage: 'Remove from selection',\n                })}\n                icon={<Trash />}\n                onClick={onRemove}\n              />\n            )}\n\n            {onEdit && (\n              <IconButton\n                label={formatMessage({ id: getTrad('control-card.edit'), defaultMessage: 'Edit' })}\n                icon={<Pencil />}\n                onClick={onEdit}\n              />\n            )}\n          </CardActionsContainer>\n        )}\n        {children}\n      </CardHeader>\n      <CardBody>\n        <CardContent>\n          <Box paddingTop={1}>\n            <CardTitle as=\"h2\">{name}</CardTitle>\n          </Box>\n          <CardSubtitle>\n            <Extension>{extension}</Extension>\n            {subtitle}\n          </CardSubtitle>\n        </CardContent>\n        <Flex paddingTop={1} grow={1}>\n          <CardBadge>\n            {formatMessage({\n              id: getTrad(`settings.section.${variant.toLowerCase()}.label`),\n              defaultMessage: variant,\n            })}\n          </CardBadge>\n        </Flex>\n      </CardBody>\n    </CardContainer>\n  );\n};\n\nAssetCardBase.defaultProps = {\n  children: undefined,\n  isSelectable: true,\n  onEdit: undefined,\n  onSelect: undefined,\n  onRemove: undefined,\n  selected: false,\n  subtitle: '',\n  variant: 'Image',\n};\n\nAssetCardBase.propTypes = {\n  children: PropTypes.node,\n  extension: PropTypes.string.isRequired,\n  isSelectable: PropTypes.bool,\n  name: PropTypes.string.isRequired,\n  onEdit: PropTypes.func,\n  onSelect: PropTypes.func,\n  onRemove: PropTypes.func,\n  selected: PropTypes.bool,\n  subtitle: PropTypes.string,\n  variant: PropTypes.oneOf(['Image', 'Video', 'Audio', 'Doc']),\n};\n","/* eslint-disable jsx-a11y/media-has-caption */\nimport React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nexport const AudioPreview = ({ url, alt }) => {\n  return (\n    <Box>\n      <audio controls src={url}>\n        {alt}\n      </audio>\n    </Box>\n  );\n};\n\nAudioPreview.defaultProps = {};\n\nAudioPreview.propTypes = {\n  alt: PropTypes.string.isRequired,\n  url: PropTypes.string.isRequired,\n};\n","import React from 'react';\n\nimport { Box, CardAsset } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { AssetCardBase } from './AssetCardBase';\nimport { AudioPreview } from './AudioPreview';\n\nconst AudioPreviewWrapper = styled(Box)`\n  canvas,\n  audio {\n    display: block;\n    max-width: 100%;\n    max-height: ${({ size }) => (size === 'M' ? 164 / 16 : 88 / 16)}rem;\n  }\n`;\n\nexport const AudioAssetCard = ({ name, url, size, ...restProps }) => {\n  return (\n    <AssetCardBase name={name} {...restProps} variant=\"Audio\">\n      <CardAsset size={size}>\n        <AudioPreviewWrapper size={size}>\n          <AudioPreview url={url} alt={name} />\n        </AudioPreviewWrapper>\n      </CardAsset>\n    </AssetCardBase>\n  );\n};\n\nAudioAssetCard.defaultProps = {\n  onSelect: undefined,\n  onEdit: undefined,\n  onRemove: undefined,\n  selected: false,\n  size: 'M',\n};\n\nAudioAssetCard.propTypes = {\n  extension: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n  onSelect: PropTypes.func,\n  onEdit: PropTypes.func,\n  onRemove: PropTypes.func,\n  url: PropTypes.string.isRequired,\n  selected: PropTypes.bool,\n  size: PropTypes.oneOf(['S', 'M']),\n};\n","import React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { File, FilePdf } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { AssetCardBase } from './AssetCardBase';\n\nconst IconWrapper = styled.span`\n  svg {\n    font-size: 3rem;\n  }\n`;\n\nconst CardAsset = styled(Flex)`\n  border-radius: ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius} 0 0;\n  background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);\n`;\n\nexport const DocAssetCard = ({ name, extension, size, ...restProps }) => {\n  return (\n    <AssetCardBase name={name} extension={extension} {...restProps} variant=\"Doc\">\n      <CardAsset\n        width=\"100%\"\n        height={size === 'S' ? pxToRem(88) : pxToRem(164)}\n        justifyContent=\"center\"\n      >\n        <IconWrapper>\n          {extension === 'pdf' ? <FilePdf aria-label={name} /> : <File aria-label={name} />}\n        </IconWrapper>\n      </CardAsset>\n    </AssetCardBase>\n  );\n};\n\nDocAssetCard.defaultProps = {\n  selected: false,\n  onEdit: undefined,\n  onSelect: undefined,\n  onRemove: undefined,\n  size: 'M',\n};\n\nDocAssetCard.propTypes = {\n  extension: PropTypes.string.isRequired,\n  onEdit: PropTypes.func,\n  onSelect: PropTypes.func,\n  onRemove: PropTypes.func,\n  selected: PropTypes.bool,\n  name: PropTypes.string.isRequired,\n  size: PropTypes.oneOf(['S', 'M']),\n};\n","import React from 'react';\n\nimport { CardAsset } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport { appendSearchParamsToUrl } from '../../utils';\n\nimport { AssetCardBase } from './AssetCardBase';\n\nexport const ImageAssetCard = ({ height, width, thumbnail, size, alt, isUrlSigned, ...props }) => {\n  // appending the updatedAt param to the thumbnail URL prevents it from being cached by the browser (cache busting)\n  // applied only if the url is not signed to prevent the signature from being invalidated\n  const thumbnailUrl = isUrlSigned\n    ? thumbnail\n    : appendSearchParamsToUrl({\n        url: thumbnail,\n        params: { updatedAt: props.updatedAt },\n      });\n\n  return (\n    <AssetCardBase {...props} subtitle={height && width && ` - ${width}✕${height}`} variant=\"Image\">\n      <CardAsset src={thumbnailUrl} size={size} alt={alt} />\n    </AssetCardBase>\n  );\n};\n\nImageAssetCard.defaultProps = {\n  height: undefined,\n  width: undefined,\n  selected: false,\n  onEdit: undefined,\n  onSelect: undefined,\n  onRemove: undefined,\n  size: 'M',\n  updatedAt: undefined,\n};\n\nImageAssetCard.propTypes = {\n  alt: PropTypes.string.isRequired,\n  extension: PropTypes.string.isRequired,\n  height: PropTypes.number,\n  name: PropTypes.string.isRequired,\n  onEdit: PropTypes.func,\n  onSelect: PropTypes.func,\n  onRemove: PropTypes.func,\n  width: PropTypes.number,\n  thumbnail: PropTypes.string.isRequired,\n  selected: PropTypes.bool,\n  size: PropTypes.oneOf(['S', 'M']),\n  updatedAt: PropTypes.string,\n  isUrlSigned: PropTypes.bool.isRequired,\n};\n","/* eslint-disable jsx-a11y/media-has-caption */\nimport React from 'react';\n\nimport { Box, VisuallyHidden } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\n// According to MDN\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState#value\nconst HAVE_FUTURE_DATA = 3;\n\nexport const VideoPreview = ({ url, mime, onLoadDuration, alt, ...props }) => {\n  const handleTimeUpdate = (e) => {\n    if (e.target.currentTime > 0) {\n      const video = e.target;\n      const canvas = document.createElement('canvas');\n\n      canvas.height = video.videoHeight;\n      canvas.width = video.videoWidth;\n      canvas.getContext('2d').drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n\n      video.replaceWith(canvas);\n      onLoadDuration(video.duration);\n    }\n  };\n\n  const handleThumbnailVisibility = (e) => {\n    const video = e.target;\n\n    if (video.readyState < HAVE_FUTURE_DATA) return;\n\n    video.play();\n  };\n\n  return (\n    <Box as=\"figure\" {...props} key={url}>\n      <video\n        muted\n        onLoadedData={handleThumbnailVisibility}\n        src={url}\n        crossOrigin=\"anonymous\"\n        onTimeUpdate={handleTimeUpdate}\n      >\n        <source type={mime} />\n      </video>\n      <VisuallyHidden as=\"figcaption\">{alt}</VisuallyHidden>\n    </Box>\n  );\n};\n\nVideoPreview.defaultProps = {\n  onLoadDuration() {},\n  size: 'M',\n};\n\nVideoPreview.propTypes = {\n  alt: PropTypes.string.isRequired,\n  url: PropTypes.string.isRequired,\n  mime: PropTypes.string.isRequired,\n  onLoadDuration: PropTypes.func,\n  size: PropTypes.oneOf(['S', 'M']),\n};\n","import React, { useState } from 'react';\n\nimport { Box, CardAsset, CardTimer } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { formatDuration } from '../../utils';\n\nimport { AssetCardBase } from './AssetCardBase';\nimport { VideoPreview } from './VideoPreview';\n\nconst VideoPreviewWrapper = styled(Box)`\n  canvas,\n  video {\n    display: block;\n    pointer-events: none;\n    max-width: 100%;\n    max-height: ${({ size }) => (size === 'M' ? 164 / 16 : 88 / 16)}rem;\n  }\n`;\n\nexport const VideoAssetCard = ({ name, url, mime, size, ...props }) => {\n  const [duration, setDuration] = useState();\n\n  const formattedDuration = duration && formatDuration(duration);\n\n  return (\n    <AssetCardBase name={name} {...props} variant=\"Video\">\n      <CardAsset size={size}>\n        <VideoPreviewWrapper size={size}>\n          <VideoPreview url={url} mime={mime} onLoadDuration={setDuration} alt={name} />\n        </VideoPreviewWrapper>\n      </CardAsset>\n      <CardTimer>{formattedDuration || '...'}</CardTimer>\n    </AssetCardBase>\n  );\n};\n\nVideoAssetCard.defaultProps = {\n  onSelect: undefined,\n  onEdit: undefined,\n  onRemove: undefined,\n  selected: false,\n  size: 'M',\n};\n\nVideoAssetCard.propTypes = {\n  extension: PropTypes.string.isRequired,\n  mime: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n  onSelect: PropTypes.func,\n  onEdit: PropTypes.func,\n  onRemove: PropTypes.func,\n  url: PropTypes.string.isRequired,\n  selected: PropTypes.bool,\n  size: PropTypes.oneOf(['S', 'M']),\n};\n","import React from 'react';\n\nimport { getFileExtension, prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\n\nimport { AssetDefinition, AssetType } from '../../constants';\nimport { createAssetUrl } from '../../utils';\n\nimport { AudioAssetCard } from './AudioAssetCard';\nimport { DocAssetCard } from './DocAssetCard';\nimport { ImageAssetCard } from './ImageAssetCard';\nimport { VideoAssetCard } from './VideoAssetCard';\n\nexport const AssetCard = ({ asset, isSelected, onSelect, onEdit, onRemove, size, local }) => {\n  const handleSelect = onSelect ? () => onSelect(asset) : undefined;\n\n  const commonAssetCardProps = {\n    id: asset.id,\n    isSelectable: asset.isSelectable,\n    extension: getFileExtension(asset.ext),\n    key: asset.id,\n    name: asset.name,\n    url: local ? asset.url : createAssetUrl(asset, true),\n    mime: asset.mime,\n    onEdit: onEdit ? () => onEdit(asset) : undefined,\n    onSelect: handleSelect,\n    onRemove: onRemove ? () => onRemove(asset) : undefined,\n    selected: isSelected,\n    size,\n  };\n\n  if (asset.mime.includes(AssetType.Video)) {\n    return <VideoAssetCard {...commonAssetCardProps} />;\n  }\n\n  if (asset.mime.includes(AssetType.Image)) {\n    return (\n      <ImageAssetCard\n        {...commonAssetCardProps}\n        alt={asset.alternativeText || asset.name}\n        height={asset.height}\n        thumbnail={prefixFileUrlWithBackendUrl(asset?.formats?.thumbnail?.url || asset.url)}\n        width={asset.width}\n        updatedAt={asset.updatedAt}\n        isUrlSigned={asset?.isUrlSigned || false}\n      />\n    );\n  }\n\n  if (asset.mime.includes(AssetType.Audio)) {\n    return <AudioAssetCard {...commonAssetCardProps} />;\n  }\n\n  return <DocAssetCard {...commonAssetCardProps} />;\n};\n\nAssetCard.defaultProps = {\n  isSelected: false,\n  // Determine if the asset is loaded locally or from a remote resource\n  local: false,\n  onSelect: undefined,\n  onEdit: undefined,\n  onRemove: undefined,\n  size: 'M',\n};\n\nAssetCard.propTypes = {\n  asset: AssetDefinition.isRequired,\n  local: PropTypes.bool,\n  onSelect: PropTypes.func,\n  onEdit: PropTypes.func,\n  onRemove: PropTypes.func,\n  isSelected: PropTypes.bool,\n  size: PropTypes.oneOf(['S', 'M']),\n};\n","import React, { useRef } from 'react';\n\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\n\nexport const Draggable = ({ children, id, index, moveItem }) => {\n  const ref = useRef(null);\n\n  const [, drop] = useDrop({\n    accept: 'draggable',\n    hover(hoveredOverItem) {\n      if (!ref.current) {\n        return;\n      }\n\n      if (hoveredOverItem.id !== id) {\n        moveItem(hoveredOverItem.index, index);\n\n        hoveredOverItem.index = index;\n      }\n    },\n  });\n\n  const [{ isDragging }, drag] = useDrag({\n    type: 'draggable',\n    item() {\n      return { index, id };\n    },\n    collect: (monitor) => ({\n      isDragging: monitor.isDragging(),\n    }),\n  });\n\n  const opacity = isDragging ? 0.2 : 1;\n\n  drag(drop(ref));\n\n  return (\n    <div ref={ref} style={{ opacity, cursor: 'move' }}>\n      {children}\n    </div>\n  );\n};\n\nDraggable.propTypes = {\n  id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n  index: PropTypes.number.isRequired,\n  children: PropTypes.node.isRequired,\n  moveItem: PropTypes.func.isRequired,\n};\n","import React from 'react';\n\nimport { Box, Grid, GridItem, KeyboardNavigable, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport { AssetCard } from '../AssetCard/AssetCard';\n\nimport { Draggable } from './Draggable';\n\nexport const AssetGridList = ({\n  allowedTypes,\n  assets,\n  onEditAsset,\n  onSelectAsset,\n  selectedAssets,\n  size,\n  onReorderAsset,\n  title,\n}) => {\n  return (\n    <KeyboardNavigable tagName=\"article\">\n      {title && (\n        <Box paddingTop={2} paddingBottom={2}>\n          <Typography as=\"h2\" variant=\"delta\" fontWeight=\"semiBold\">\n            {title}\n          </Typography>\n        </Box>\n      )}\n\n      <Grid gap={4}>\n        {assets.map((asset, index) => {\n          const isSelected = !!selectedAssets.find((currentAsset) => currentAsset.id === asset.id);\n\n          if (onReorderAsset) {\n            return (\n              <GridItem key={asset.id} col={3} height=\"100%\">\n                <Draggable index={index} moveItem={onReorderAsset} id={asset.id}>\n                  <AssetCard\n                    allowedTypes={allowedTypes}\n                    asset={asset}\n                    isSelected={isSelected}\n                    onEdit={onEditAsset ? () => onEditAsset(asset) : undefined}\n                    onSelect={() => onSelectAsset(asset)}\n                    size={size}\n                  />\n                </Draggable>\n              </GridItem>\n            );\n          }\n\n          return (\n            <GridItem col={3} key={asset.id} height=\"100%\">\n              <AssetCard\n                key={asset.id}\n                allowedTypes={allowedTypes}\n                asset={asset}\n                isSelected={isSelected}\n                onEdit={onEditAsset ? () => onEditAsset(asset) : undefined}\n                onSelect={() => onSelectAsset(asset)}\n                size={size}\n              />\n            </GridItem>\n          );\n        })}\n      </Grid>\n    </KeyboardNavigable>\n  );\n};\n\nAssetGridList.defaultProps = {\n  allowedTypes: ['images', 'files', 'videos', 'audios'],\n  onEditAsset: undefined,\n  size: 'M',\n  onReorderAsset: undefined,\n  title: null,\n};\n\nAssetGridList.propTypes = {\n  allowedTypes: PropTypes.arrayOf(PropTypes.string),\n  assets: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n  onEditAsset: PropTypes.func,\n  onSelectAsset: PropTypes.func.isRequired,\n  selectedAssets: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n  size: PropTypes.oneOf(['S', 'M']),\n  onReorderAsset: PropTypes.func,\n  title: PropTypes.string,\n};\n","import React, { useState } from 'react';\n\nimport { Loader } from '@strapi/design-system';\nimport { CrumbSimpleMenu, MenuItem } from '@strapi/design-system/v2';\nimport { useQueryParams } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\n\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { getFolderParents, getFolderURL, getTrad } from '../../utils';\n\nexport const CrumbSimpleMenuAsync = ({ parentsToOmit, currentFolderId, onChangeFolder }) => {\n  const [shouldFetch, setShouldFetch] = useState(false);\n  const { data, isLoading } = useFolderStructure({ enabled: shouldFetch });\n  const { pathname } = useLocation();\n  const [{ query }] = useQueryParams();\n  const { formatMessage } = useIntl();\n\n  const allAscendants = data && getFolderParents(data, currentFolderId);\n  const filteredAscendants =\n    allAscendants &&\n    allAscendants.filter(\n      (ascendant) => !parentsToOmit.includes(ascendant.id) && ascendant.id !== null\n    );\n\n  return (\n    <CrumbSimpleMenu\n      onOpen={() => setShouldFetch(true)}\n      onClose={() => setShouldFetch(false)}\n      aria-label={formatMessage({\n        id: getTrad('header.breadcrumbs.menu.label'),\n        defaultMessage: 'Get more ascendants folders',\n      })}\n      label=\"...\"\n    >\n      {isLoading && (\n        <MenuItem>\n          <Loader small>\n            {formatMessage({\n              id: getTrad('content.isLoading'),\n              defaultMessage: 'Content is loading.',\n            })}\n          </Loader>\n        </MenuItem>\n      )}\n      {filteredAscendants &&\n        filteredAscendants.map((ascendant) => {\n          if (onChangeFolder) {\n            return (\n              <MenuItem\n                as=\"button\"\n                type=\"button\"\n                onClick={() => onChangeFolder(ascendant.id, ascendant.path)}\n                key={ascendant.id}\n              >\n                {ascendant.label}\n              </MenuItem>\n            );\n          }\n\n          const url = getFolderURL(pathname, query, {\n            folder: ascendant?.id,\n            folderPath: ascendant?.path,\n          });\n\n          return (\n            <MenuItem isLink as={NavLink} to={url} key={ascendant.id}>\n              {ascendant.label}\n            </MenuItem>\n          );\n        })}\n    </CrumbSimpleMenu>\n  );\n};\n\nCrumbSimpleMenuAsync.defaultProps = {\n  currentFolderId: undefined,\n  onChangeFolder: undefined,\n  parentsToOmit: [],\n};\n\nCrumbSimpleMenuAsync.propTypes = {\n  currentFolderId: PropTypes.number,\n  onChangeFolder: PropTypes.func,\n  parentsToOmit: PropTypes.arrayOf(PropTypes.number),\n};\n","import React from 'react';\n\nimport { Breadcrumbs as BaseBreadcrumbs, Crumb, CrumbLink } from '@strapi/design-system/v2';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { BreadcrumbsDefinition } from '../../constants';\n\nimport { CrumbSimpleMenuAsync } from './CrumbSimpleMenuAsync';\n\nexport const Breadcrumbs = ({ breadcrumbs, onChangeFolder, currentFolderId, ...props }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <BaseBreadcrumbs {...props}>\n      {breadcrumbs.map((crumb, index) => {\n        if (Array.isArray(crumb)) {\n          return (\n            <CrumbSimpleMenuAsync\n              parentsToOmit={[...breadcrumbs]\n                .splice(index + 1, breadcrumbs.length - 1)\n                .map((parent) => parent.id)}\n              key={`breadcrumb-${crumb?.id ?? 'menu'}`}\n              currentFolderId={currentFolderId}\n              onChangeFolder={onChangeFolder}\n            />\n          );\n        }\n\n        const isCurrentFolderMediaLibrary = crumb.id === null && currentFolderId === undefined;\n\n        if (currentFolderId !== crumb.id && !isCurrentFolderMediaLibrary) {\n          return (\n            <CrumbLink\n              key={`breadcrumb-${crumb?.id ?? 'root'}`}\n              as={onChangeFolder ? 'button' : NavLink}\n              type={onChangeFolder && 'button'}\n              to={onChangeFolder ? undefined : crumb.href}\n              onClick={onChangeFolder && (() => onChangeFolder(crumb.id, crumb.path))}\n            >\n              {crumb.label?.id ? formatMessage(crumb.label) : crumb.label}\n            </CrumbLink>\n          );\n        }\n\n        return (\n          <Crumb\n            key={`breadcrumb-${crumb?.id ?? 'root'}`}\n            isCurrent={index + 1 === breadcrumbs.length}\n          >\n            {crumb.label?.id ? formatMessage(crumb.label) : crumb.label}\n          </Crumb>\n        );\n      })}\n    </BaseBreadcrumbs>\n  );\n};\n\nBreadcrumbs.defaultProps = {\n  currentFolderId: undefined,\n  onChangeFolder: undefined,\n};\n\nBreadcrumbs.propTypes = {\n  breadcrumbs: BreadcrumbsDefinition.isRequired,\n  currentFolderId: PropTypes.number,\n  onChangeFolder: PropTypes.func,\n};\n","import React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst EmptyAssetCard = styled(Box)`\n  background: linear-gradient(\n    180deg,\n    rgba(234, 234, 239, 0) 0%,\n    ${({ theme }) => theme.colors.neutral200} 100%\n  );\n  opacity: 0.33;\n`;\n\nconst GridColSize = {\n  S: 180,\n  M: 250,\n};\n\nconst PlaceholderSize = {\n  S: 138,\n  M: 234,\n};\n\nconst GridLayout = styled(Box)`\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(${({ size }) => `${GridColSize[size]}px`}, 1fr));\n  grid-gap: ${({ theme }) => theme.spaces[4]};\n`;\n\nexport const EmptyAssetGrid = ({ count, size }) => {\n  return (\n    <GridLayout size={size}>\n      {Array(count)\n        .fill(null)\n        .map((_, idx) => (\n          <EmptyAssetCard\n            // eslint-disable-next-line react/no-array-index-key\n            key={`empty-asset-card-${idx}`}\n            height={`${PlaceholderSize[size]}px`}\n            hasRadius\n          />\n        ))}\n    </GridLayout>\n  );\n};\n\nEmptyAssetGrid.propTypes = {\n  count: PropTypes.number.isRequired,\n  size: PropTypes.string.isRequired,\n};\n","import React from 'react';\n\nimport { Box, Flex, Icon, Typography } from '@strapi/design-system';\nimport { EmptyDocuments } from '@strapi/icons';\nimport PropTypes from 'prop-types';\n\nimport { EmptyAssetGrid } from './EmptyAssetGrid';\n\nexport const EmptyAssets = ({ icon, content, action, size, count }) => {\n  return (\n    <Box position=\"relative\">\n      <EmptyAssetGrid size={size} count={count} />\n\n      <Box position=\"absolute\" top={11} width=\"100%\">\n        <Flex direction=\"column\" alignItems=\"center\" gap={4} textAlign=\"center\">\n          <Flex direction=\"column\" alignItems=\"center\" gap={6}>\n            <Icon as={icon || EmptyDocuments} color=\"\" width=\"160px\" height=\"88px\" />\n\n            <Typography variant=\"delta\" as=\"p\" textColor=\"neutral600\">\n              {content}\n            </Typography>\n          </Flex>\n\n          {action}\n        </Flex>\n      </Box>\n    </Box>\n  );\n};\n\nEmptyAssets.defaultProps = {\n  action: undefined,\n  icon: undefined,\n  size: 'M',\n  count: 12,\n};\n\nEmptyAssets.propTypes = {\n  action: PropTypes.node,\n  icon: PropTypes.func,\n  content: PropTypes.string.isRequired,\n  size: PropTypes.string,\n  count: PropTypes.number,\n};\n","import { createContext, useContext } from 'react';\n\nexport const FolderCardContext = createContext({});\n\nexport function useFolderCard() {\n  return useContext(FolderCardContext);\n}\n","import { useRef } from 'react';\n\nlet id = 0;\n\nconst genId = () => ++id;\n\nconst useId = (initialId) => {\n  const idRef = useRef(`${initialId}-${genId()}`);\n\n  return idRef.current;\n};\n\nexport default useId;\n","import React, { forwardRef, useMemo } from 'react';\n\nimport { Box, CardAction, Flex } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Folder } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { FolderCardContext } from '../contexts/FolderCard';\nimport useId from '../hooks/useId';\n\nconst FauxClickWrapper = styled.button`\n  height: 100%;\n  left: 0;\n  position: absolute;\n  opacity: 0;\n  top: 0;\n  width: 100%;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n`;\n\nconst StyledFolder = styled(Folder)`\n  path {\n    fill: currentColor;\n  }\n`;\n\nconst CardActionDisplay = styled(Box)`\n  display: none;\n`;\n\nconst Card = styled(Box)`\n  &:hover,\n  &:focus-within {\n    ${CardActionDisplay} {\n      display: ${({ isCardActions }) => (isCardActions ? 'block' : '')};\n    }\n  }\n`;\n\nexport const FolderCard = forwardRef(\n  ({ children, id, startAction, cardActions, ariaLabel, onClick, to, ...props }, ref) => {\n    const generatedId = useId(id);\n    const fodlerCtxValue = useMemo(() => ({ id: generatedId }), [generatedId]);\n\n    return (\n      <FolderCardContext.Provider value={fodlerCtxValue}>\n        <Card position=\"relative\" tabIndex={0} isCardActions={!!cardActions} ref={ref} {...props}>\n          <FauxClickWrapper\n            to={to || undefined}\n            as={to ? NavLink : 'button'}\n            type={to ? undefined : 'button'}\n            onClick={onClick}\n            tabIndex={-1}\n            aria-label={ariaLabel}\n            aria-hidden\n          />\n\n          <Flex\n            hasRadius\n            borderStyle=\"solid\"\n            borderWidth=\"1px\"\n            borderColor=\"neutral150\"\n            background=\"neutral0\"\n            shadow=\"tableShadow\"\n            padding={3}\n            gap={2}\n            cursor=\"pointer\"\n          >\n            {startAction}\n\n            <Box\n              hasRadius\n              background=\"secondary100\"\n              color=\"secondary500\"\n              paddingBottom={2}\n              paddingLeft={3}\n              paddingRight={3}\n              paddingTop={2}\n            >\n              <StyledFolder width={pxToRem(24)} height={pxToRem(24)} />\n            </Box>\n\n            {children}\n\n            <CardActionDisplay>\n              <CardAction right={4}>{cardActions}</CardAction>\n            </CardActionDisplay>\n          </Flex>\n        </Card>\n      </FolderCardContext.Provider>\n    );\n  }\n);\n\nFolderCard.defaultProps = {\n  id: undefined,\n  cardActions: null,\n  startAction: null,\n  to: undefined,\n  onClick: undefined,\n};\n\nFolderCard.propTypes = {\n  ariaLabel: PropTypes.string.isRequired,\n  children: PropTypes.node.isRequired,\n  id: PropTypes.string,\n  onClick: PropTypes.func,\n  startAction: PropTypes.element,\n  cardActions: PropTypes.element,\n  to: PropTypes.string,\n};\n","import React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport styled from 'styled-components';\n\nimport { useFolderCard } from '../contexts/FolderCard';\n\nconst StyledBox = styled(Flex)`\n  user-select: none;\n`;\n\nexport const FolderCardBody = (props) => {\n  const { id } = useFolderCard();\n\n  return (\n    <StyledBox\n      {...props}\n      id={`${id}-title`}\n      alignItems=\"flex-start\"\n      direction=\"column\"\n      maxWidth=\"100%\"\n      overflow=\"hidden\"\n      position=\"relative\"\n    />\n  );\n};\n","import React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nconst BoxOutline = styled(Box)`\n  &:focus {\n    outline: 2px solid ${({ theme }) => theme.colors.primary600};\n    outline-offset: -2px;\n  }\n`;\n\nconst BoxTextDecoration = styled(BoxOutline)`\n  text-decoration: none;\n`;\n\nexport const FolderCardBodyAction = ({ to, ...props }) => {\n  if (to) {\n    return (\n      <BoxTextDecoration\n        // padding needed to give outline space to appear\n        // since FolderCardBody needs overflow hidden property\n        padding={1}\n        as={NavLink}\n        maxWidth=\"100%\"\n        to={to}\n        {...props}\n      />\n    );\n  }\n\n  return <BoxOutline padding={1} as=\"button\" type=\"button\" maxWidth=\"100%\" {...props} />;\n};\n\nFolderCardBodyAction.defaultProps = {\n  to: undefined,\n};\n\nFolderCardBodyAction.propTypes = {\n  to: PropTypes.string,\n};\n","import React from 'react';\n\nimport { Box, Grid, KeyboardNavigable, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nexport const FolderGridList = ({ title, children }) => {\n  return (\n    <KeyboardNavigable tagName=\"article\">\n      {title && (\n        <Box paddingBottom={2}>\n          <Typography as=\"h2\" variant=\"delta\" fontWeight=\"semiBold\">\n            {title}\n          </Typography>\n        </Box>\n      )}\n\n      <Grid gap={4}>{children}</Grid>\n    </KeyboardNavigable>\n  );\n};\n\nFolderGridList.defaultProps = {\n  title: null,\n};\n\nFolderGridList.propTypes = {\n  children: PropTypes.node.isRequired,\n  title: PropTypes.string,\n};\n","import React from 'react';\n\nimport { SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { sortOptions } from '../../constants';\nimport { getTrad } from '../../utils';\n\nconst SortPicker = ({ onChangeSort, value }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <SingleSelect\n      size=\"S\"\n      value={value}\n      onChange={(value) => onChangeSort(value)}\n      aria-label={formatMessage({\n        id: getTrad('sort.label'),\n        defaultMessage: 'Sort by',\n      })}\n      placeholder={formatMessage({\n        id: getTrad('sort.label'),\n        defaultMessage: 'Sort by',\n      })}\n    >\n      {sortOptions.map((filter) => (\n        <SingleSelectOption key={filter.key} value={filter.value}>\n          {formatMessage({ id: getTrad(filter.key), defaultMessage: `${filter.value}` })}\n        </SingleSelectOption>\n      ))}\n    </SingleSelect>\n  );\n};\n\nSortPicker.defaultProps = {\n  value: undefined,\n};\n\nSortPicker.propTypes = {\n  onChangeSort: PropTypes.func.isRequired,\n  value: PropTypes.string,\n};\n\nexport default SortPicker;\n","import React from 'react';\n\nimport { Avatar, Box, Icon, Initials } from '@strapi/design-system';\nimport { getFileExtension, prefixFileUrlWithBackendUrl, pxToRem } from '@strapi/helper-plugin';\nimport { Folder } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { AssetType } from '../../constants';\nimport { createAssetUrl } from '../../utils';\nimport { VideoPreview } from '../AssetCard/VideoPreview';\n\nconst VideoPreviewWrapper = styled(Box)`\n  figure {\n    width: ${({ theme }) => theme.spaces[7]};\n    height: ${({ theme }) => theme.spaces[7]};\n  }\n\n  canvas,\n  video {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    border-radius: 50%;\n  }\n`;\n\nexport const PreviewCell = ({ type, content }) => {\n  if (type === 'folder') {\n    return (\n      <Initials background=\"secondary100\" textColor=\"secondary600\">\n        <Icon color=\"secondary500\" width={pxToRem(16)} height={pxToRem(16)} as={Folder} />\n      </Initials>\n    );\n  }\n\n  const { alternativeText, ext, formats, mime, name, url } = content;\n\n  if (mime.includes(AssetType.Image)) {\n    const mediaURL =\n      prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n    return <Avatar src={mediaURL} alt={alternativeText} preview />;\n  }\n\n  if (mime.includes(AssetType.Video)) {\n    return (\n      <VideoPreviewWrapper>\n        <VideoPreview\n          url={createAssetUrl(content, true)}\n          mime={mime}\n          alt={alternativeText ?? name}\n        />\n      </VideoPreviewWrapper>\n    );\n  }\n\n  return (\n    <Initials background=\"secondary100\" textColor=\"secondary600\">\n      {getFileExtension(ext)}\n    </Initials>\n  );\n};\n\nPreviewCell.propTypes = {\n  content: PropTypes.shape({\n    alternativeText: PropTypes.string,\n    ext: PropTypes.string,\n    formats: PropTypes.shape({\n      thumbnail: PropTypes.shape({\n        url: PropTypes.string,\n      }),\n    }),\n    mime: PropTypes.string,\n    name: PropTypes.string,\n    url: PropTypes.string,\n  }).isRequired,\n  type: PropTypes.string.isRequired,\n};\n","import React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { getFileExtension } from '@strapi/helper-plugin';\nimport parseISO from 'date-fns/parseISO';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { formatBytes } from '../../utils';\n\nimport { PreviewCell } from './PreviewCell';\n\nexport const CellContent = ({ cellType, contentType, content, name }) => {\n  const { formatDate, formatMessage } = useIntl();\n\n  switch (cellType) {\n    case 'image':\n      return <PreviewCell type={contentType} content={content} />;\n\n    case 'date':\n      return <Typography>{formatDate(parseISO(content[name]), { dateStyle: 'full' })}</Typography>;\n\n    case 'size':\n      if (contentType === 'folder')\n        return (\n          <Typography\n            aria-label={formatMessage({\n              id: 'list.table.content.empty-label',\n              defaultMessage: 'This field is empty',\n            })}\n          >\n            -\n          </Typography>\n        );\n\n      return <Typography>{formatBytes(content[name])}</Typography>;\n\n    case 'ext':\n      if (contentType === 'folder')\n        return (\n          <Typography\n            aria-label={formatMessage({\n              id: 'list.table.content.empty-label',\n              defaultMessage: 'This field is empty',\n            })}\n          >\n            -\n          </Typography>\n        );\n\n      return <Typography>{getFileExtension(content[name]).toUpperCase()}</Typography>;\n\n    case 'text':\n      return <Typography>{content[name]}</Typography>;\n\n    default:\n      return (\n        <Typography\n          aria-label={formatMessage({\n            id: 'list.table.content.empty-label',\n            defaultMessage: 'This field is empty',\n          })}\n        >\n          -\n        </Typography>\n      );\n  }\n};\n\nCellContent.propTypes = {\n  cellType: PropTypes.string.isRequired,\n  contentType: PropTypes.string.isRequired,\n  content: PropTypes.shape({\n    alternativeText: PropTypes.string,\n    ext: PropTypes.string,\n    formats: PropTypes.shape({\n      thumbnail: PropTypes.shape({\n        url: PropTypes.string,\n      }),\n    }),\n    mime: PropTypes.string,\n    url: PropTypes.string,\n  }).isRequired,\n  name: PropTypes.string.isRequired,\n};\n","import React from 'react';\n\nimport { BaseCheckbox, Flex, IconButton, Tbody, Td, Tr } from '@strapi/design-system';\nimport { onRowClick, stopPropagation } from '@strapi/helper-plugin';\nimport { Eye, Pencil } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { AssetDefinition, FolderDefinition, tableHeaders as cells } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport { CellContent } from './CellContent';\n\nexport const TableRows = ({\n  onChangeFolder,\n  onEditAsset,\n  onEditFolder,\n  onSelectOne,\n  rows,\n  selected,\n}) => {\n  const { formatMessage } = useIntl();\n\n  const handleRowClickFn = (element, elementType, id, path) => {\n    if (elementType === 'asset') {\n      onEditAsset(element);\n    } else {\n      onChangeFolder(id, path);\n    }\n  };\n\n  return (\n    <Tbody>\n      {rows.map((element) => {\n        const { path, id, isSelectable, name, folderURL, type: contentType } = element;\n\n        const isSelected = !!selected.find(\n          (currentRow) => currentRow.id === id && currentRow.type === contentType\n        );\n\n        return (\n          <Tr\n            key={id}\n            {...onRowClick({\n              fn: () => handleRowClickFn(element, contentType, id, path),\n            })}\n          >\n            <Td onClick={(e) => e.stopPropagation()}>\n              <BaseCheckbox\n                aria-label={formatMessage(\n                  {\n                    id: contentType === 'asset' ? 'list-assets-select' : 'list.folder.select',\n                    defaultMessage:\n                      contentType === 'asset' ? 'Select {name} asset' : 'Select {name} folder',\n                  },\n                  { name }\n                )}\n                disabled={!isSelectable}\n                onValueChange={() => onSelectOne(element)}\n                checked={isSelected}\n              />\n            </Td>\n            {cells.map(({ name, type: cellType }) => {\n              return (\n                <Td key={name}>\n                  <CellContent\n                    content={element}\n                    cellType={cellType}\n                    contentType={contentType}\n                    name={name}\n                  />\n                </Td>\n              );\n            })}\n\n            <Td {...stopPropagation}>\n              <Flex justifyContent=\"flex-end\">\n                {contentType === 'folder' && (\n                  <IconButton\n                    as={folderURL ? Link : undefined}\n                    label={formatMessage({\n                      id: getTrad('list.folders.link-label'),\n                      defaultMessage: 'Access folder',\n                    })}\n                    to={folderURL}\n                    onClick={() => !folderURL && onChangeFolder(id)}\n                    noBorder\n                  >\n                    <Eye />\n                  </IconButton>\n                )}\n                <IconButton\n                  label={formatMessage({\n                    id: getTrad('control-card.edit'),\n                    defaultMessage: 'Edit',\n                  })}\n                  onClick={() =>\n                    contentType === 'asset' ? onEditAsset(element) : onEditFolder(element)\n                  }\n                  noBorder\n                >\n                  <Pencil />\n                </IconButton>\n              </Flex>\n            </Td>\n          </Tr>\n        );\n      })}\n    </Tbody>\n  );\n};\n\nTableRows.defaultProps = {\n  onChangeFolder: null,\n  rows: [],\n  selected: [],\n};\n\nTableRows.propTypes = {\n  onChangeFolder: PropTypes.func,\n  onEditAsset: PropTypes.func.isRequired,\n  onEditFolder: PropTypes.func.isRequired,\n  onSelectOne: PropTypes.func.isRequired,\n  rows: PropTypes.arrayOf(AssetDefinition, FolderDefinition),\n  selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition),\n};\n","import React from 'react';\n\nimport {\n  BaseCheckbox,\n  IconButton,\n  Table,\n  Th,\n  Thead,\n  Tooltip,\n  Tr,\n  Typography,\n  VisuallyHidden,\n} from '@strapi/design-system';\nimport { CarretDown, CarretUp } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition, FolderDefinition, tableHeaders } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport { TableRows } from './TableRows';\n\nexport const TableList = ({\n  assetCount,\n  folderCount,\n  indeterminate,\n  onChangeSort,\n  onChangeFolder,\n  onEditAsset,\n  onEditFolder,\n  onSelectAll,\n  onSelectOne,\n  rows,\n  selected,\n  shouldDisableBulkSelect,\n  sortQuery,\n}) => {\n  const { formatMessage } = useIntl();\n  const [sortBy, sortOrder] = sortQuery.split(':');\n\n  const handleClickSort = (isSorted, name) => {\n    const nextSortOrder = isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC';\n    const nextSort = `${name}:${nextSortOrder}`;\n\n    onChangeSort(nextSort);\n  };\n\n  return (\n    <Table colCount={tableHeaders.length + 2} rowCount={assetCount + folderCount + 1}>\n      <Thead>\n        <Tr>\n          <Th>\n            <BaseCheckbox\n              aria-label={formatMessage({\n                id: getTrad('bulk.select.label'),\n                defaultMessage: 'Select all folders & assets',\n              })}\n              disabled={shouldDisableBulkSelect}\n              indeterminate={indeterminate && !shouldDisableBulkSelect}\n              onChange={(e) => onSelectAll(e, rows)}\n              value={\n                (assetCount > 0 || folderCount > 0) && selected.length === assetCount + folderCount\n              }\n            />\n          </Th>\n          {tableHeaders.map(({ metadatas: { label, isSortable }, name, key }) => {\n            const isSorted = sortBy === name;\n            const isUp = sortOrder === 'ASC';\n            const tableHeaderLabel = formatMessage(label);\n            const sortLabel = formatMessage(\n              { id: 'list.table.header.sort', defaultMessage: 'Sort on {label}' },\n              { label: tableHeaderLabel }\n            );\n\n            return (\n              <Th\n                action={\n                  isSorted && (\n                    <IconButton\n                      label={sortLabel}\n                      onClick={() => handleClickSort(isSorted, name)}\n                      noBorder\n                    >\n                      {isUp ? <CarretUp /> : <CarretDown />}\n                    </IconButton>\n                  )\n                }\n                key={key}\n              >\n                <Tooltip label={isSortable ? sortLabel : tableHeaderLabel}>\n                  {isSortable ? (\n                    <Typography\n                      onClick={() => handleClickSort(isSorted, name)}\n                      as={isSorted ? 'span' : 'button'}\n                      label={!isSorted ? sortLabel : ''}\n                      textColor=\"neutral600\"\n                      variant=\"sigma\"\n                    >\n                      {tableHeaderLabel}\n                    </Typography>\n                  ) : (\n                    <Typography textColor=\"neutral600\" variant=\"sigma\">\n                      {tableHeaderLabel}\n                    </Typography>\n                  )}\n                </Tooltip>\n              </Th>\n            );\n          })}\n          <Th>\n            <VisuallyHidden>\n              {formatMessage({\n                id: getTrad('list.table.header.actions'),\n                defaultMessage: 'actions',\n              })}\n            </VisuallyHidden>\n          </Th>\n        </Tr>\n      </Thead>\n      <TableRows\n        onChangeFolder={onChangeFolder}\n        onEditAsset={onEditAsset}\n        onEditFolder={onEditFolder}\n        rows={rows}\n        onSelectOne={onSelectOne}\n        selected={selected}\n      />\n    </Table>\n  );\n};\n\nTableList.defaultProps = {\n  assetCount: 0,\n  folderCount: 0,\n  indeterminate: false,\n  onChangeSort: null,\n  onChangeFolder: null,\n  onEditAsset: null,\n  onEditFolder: null,\n  rows: [],\n  selected: [],\n  shouldDisableBulkSelect: false,\n  sortQuery: '',\n};\n\nTableList.propTypes = {\n  assetCount: PropTypes.number,\n  folderCount: PropTypes.number,\n  indeterminate: PropTypes.bool,\n  onChangeSort: PropTypes.func,\n  onChangeFolder: PropTypes.func,\n  onEditAsset: PropTypes.func,\n  onEditFolder: PropTypes.func,\n  onSelectAll: PropTypes.func.isRequired,\n  onSelectOne: PropTypes.func.isRequired,\n  rows: PropTypes.arrayOf(AssetDefinition, FolderDefinition),\n  selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition),\n  shouldDisableBulkSelect: PropTypes.bool,\n  sortQuery: PropTypes.string,\n};\n","const displayedFilters = [\n  {\n    name: 'createdAt',\n    fieldSchema: {\n      type: 'date',\n    },\n    metadatas: { label: 'createdAt' },\n  },\n  {\n    name: 'updatedAt',\n    fieldSchema: {\n      type: 'date',\n    },\n    metadatas: { label: 'updatedAt' },\n  },\n  {\n    name: 'mime',\n    fieldSchema: {\n      type: 'enumeration',\n      options: [\n        { label: 'audio', value: 'audio' },\n        { label: 'file', value: 'file' },\n        { label: 'image', value: 'image' },\n        { label: 'video', value: 'video' },\n      ],\n    },\n    metadatas: { label: 'type' },\n  },\n];\n\nexport default displayedFilters;\n","import React from 'react';\n\nimport { Box, Tag } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst FilterTag = ({ attribute, filter, onClick, operator, value }) => {\n  const { formatMessage, formatDate, formatTime } = useIntl();\n\n  const handleClick = () => {\n    onClick(filter);\n  };\n\n  const { fieldSchema } = attribute;\n\n  const type = fieldSchema.type;\n\n  let formattedValue = value;\n\n  if (type === 'date') {\n    formattedValue = formatDate(value, { dateStyle: 'full' });\n  }\n\n  if (type === 'datetime') {\n    formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n  }\n\n  if (type === 'time') {\n    const [hour, minute] = value.split(':');\n    const date = new Date();\n    date.setHours(hour);\n    date.setMinutes(minute);\n\n    formattedValue = formatTime(date, {\n      numeric: 'auto',\n      style: 'short',\n    });\n  }\n\n  const content = `${attribute.metadatas.label} ${formatMessage({\n    id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n    defaultMessage: operator,\n  })} ${formattedValue}`;\n\n  return (\n    <Box padding={1}>\n      <Tag onClick={handleClick} icon={<Cross />}>\n        {content}\n      </Tag>\n    </Box>\n  );\n};\n\nFilterTag.propTypes = {\n  attribute: PropTypes.shape({\n    name: PropTypes.string.isRequired,\n    fieldSchema: PropTypes.object.isRequired,\n    metadatas: PropTypes.shape({ label: PropTypes.string.isRequired }).isRequired,\n  }).isRequired,\n  filter: PropTypes.object.isRequired,\n  onClick: PropTypes.func.isRequired,\n  operator: PropTypes.string.isRequired,\n  value: PropTypes.string.isRequired,\n};\n\nexport default FilterTag;\n","/**\n *\n * FilterList\n *\n */\n\nimport React from 'react';\n\nimport PropTypes from 'prop-types';\n\nimport FilterTag from './FilterTag';\n\nconst FilterList = ({ appliedFilters, filtersSchema, onRemoveFilter }) => {\n  const handleClick = (filter) => {\n    const nextFilters = appliedFilters.filter((prevFilter) => {\n      const name = Object.keys(filter)[0];\n      const filterType = Object.keys(filter[name])[0];\n      const value = filter[name][filterType];\n\n      return prevFilter[name]?.[filterType] !== value;\n    });\n\n    onRemoveFilter(nextFilters);\n  };\n\n  return appliedFilters.map((filter, i) => {\n    const attributeName = Object.keys(filter)[0];\n    const attribute = filtersSchema.find(({ name }) => name === attributeName);\n\n    const filterObj = filter[attributeName];\n    const operator = Object.keys(filterObj)[0];\n    let value = filterObj[operator];\n    let displayedOperator = operator;\n\n    if (attribute.name === 'mime') {\n      displayedOperator = operator === '$contains' ? '$eq' : '$ne';\n\n      // Type is file\n      // The filter for the file is the following: { mime: {$not: {$contains: ['image', 'video']}}}\n      if (operator === '$not') {\n        value = 'file';\n        displayedOperator = '$eq';\n      }\n\n      // Here the type is file and the filter is not file\n      // { mime: {$contains: ['image', 'video'] }}\n      if (['image', 'video'].includes(value[0]) && ['image', 'video'].includes(value[1])) {\n        value = 'file';\n        displayedOperator = '$ne';\n      }\n    }\n\n    return (\n      <FilterTag\n        // eslint-disable-next-line react/no-array-index-key\n        key={`${attributeName}-${i}`}\n        attribute={attribute}\n        filter={filter}\n        onClick={handleClick}\n        operator={displayedOperator}\n        value={value}\n      />\n    );\n  });\n};\n\nFilterList.defaultProps = {\n  filtersSchema: [],\n};\n\nFilterList.propTypes = {\n  appliedFilters: PropTypes.array.isRequired,\n  filtersSchema: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string.isRequired,\n      metadatas: PropTypes.shape({ label: PropTypes.string }),\n      fieldSchema: PropTypes.shape({\n        type: PropTypes.string,\n        mainField: PropTypes.shape({\n          name: PropTypes.string,\n          type: PropTypes.string,\n        }),\n      }),\n    })\n  ),\n  onRemoveFilter: PropTypes.func.isRequired,\n};\n\nexport default FilterList;\n","import React from 'react';\n\nimport { DateTimePicker, Option, Select } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst FilterValueInput = ({ label, onChange, options, type, value }) => {\n  const { formatMessage } = useIntl();\n\n  if (type === 'date') {\n    return (\n      <DateTimePicker\n        clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n        ariaLabel={label}\n        name=\"datetimepicker\"\n        onChange={(date) => {\n          const formattedDate = date ? new Date(date).toISOString() : '';\n\n          onChange(formattedDate);\n        }}\n        onClear={() => onChange('')}\n        value={value ? new Date(value) : undefined}\n        selectedDateLabel={(formattedDate) => `Date picker, current is ${formattedDate}`}\n        selectButtonTitle={formatMessage({ id: 'selectButtonTitle', defaultMessage: 'Select' })}\n      />\n    );\n  }\n\n  return (\n    <Select aria-label={label} onChange={onChange} value={value}>\n      {options.map((option) => {\n        return (\n          <Option key={option.value} value={option.value}>\n            {option.label}\n          </Option>\n        );\n      })}\n    </Select>\n  );\n};\n\nFilterValueInput.defaultProps = {\n  label: '',\n  options: [],\n  value: '',\n};\n\nFilterValueInput.propTypes = {\n  label: PropTypes.string,\n  onChange: PropTypes.func.isRequired,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({ label: PropTypes.string.isRequired, value: PropTypes.string.isRequired })\n  ),\n  type: PropTypes.string.isRequired,\n  value: PropTypes.any,\n};\n\nexport default FilterValueInput;\n","/**\n * Depending on the selected field find the possible filters to apply\n * @param {Object} fieldSchema.type the type of the filter\n * @returns {Object[]}\n */\nconst getFilterList = ({ fieldSchema: { type: fieldType, mainField } }) => {\n  const type = mainField?.schema.type ? mainField.schema.type : fieldType;\n\n  switch (type) {\n    case 'enumeration': {\n      return [\n        {\n          intlLabel: {\n            id: 'components.FilterOptions.FILTER_TYPES.$eq',\n            defaultMessage: 'is',\n          },\n          value: '$contains',\n        },\n        {\n          intlLabel: {\n            id: 'components.FilterOptions.FILTER_TYPES.$ne',\n            defaultMessage: 'is not',\n          },\n          value: '$notContains',\n        },\n      ];\n    }\n\n    case 'date': {\n      return [\n        {\n          intlLabel: { id: 'components.FilterOptions.FILTER_TYPES.$eq', defaultMessage: 'is' },\n          value: '$eq',\n        },\n        {\n          intlLabel: { id: 'components.FilterOptions.FILTER_TYPES.$ne', defaultMessage: 'is not' },\n          value: '$ne',\n        },\n        {\n          intlLabel: {\n            id: 'components.FilterOptions.FILTER_TYPES.$gt',\n            defaultMessage: 'is greater than',\n          },\n          value: '$gt',\n        },\n        {\n          intlLabel: {\n            id: 'components.FilterOptions.FILTER_TYPES.$gte',\n            defaultMessage: 'is greater than or equal to',\n          },\n          value: '$gte',\n        },\n        {\n          intlLabel: {\n            id: 'components.FilterOptions.FILTER_TYPES.$lt',\n            defaultMessage: 'is less than',\n          },\n          value: '$lt',\n        },\n        {\n          intlLabel: {\n            id: 'components.FilterOptions.FILTER_TYPES.$lte',\n            defaultMessage: 'is less than or equal to',\n          },\n          value: '$lte',\n        },\n      ];\n    }\n\n    default:\n      return [\n        {\n          intlLabel: { id: 'components.FilterOptions.FILTER_TYPES.$eq', defaultMessage: 'is' },\n          value: '$eq',\n        },\n        {\n          intlLabel: {\n            id: 'components.FilterOptions.FILTER_TYPES.$eqi',\n            defaultMessage: 'is (case insensitive)',\n          },\n          value: '$eqi',\n        },\n        {\n          intlLabel: { id: 'components.FilterOptions.FILTER_TYPES.$ne', defaultMessage: 'is not' },\n          value: '$ne',\n        },\n        {\n          intlLabel: {\n            id: 'components.FilterOptions.FILTER_TYPES.$null',\n            defaultMessage: 'is null',\n          },\n          value: '$null',\n        },\n        {\n          intlLabel: {\n            id: 'components.FilterOptions.FILTER_TYPES.$notNull',\n            defaultMessage: 'is not null',\n          },\n          value: '$notNull',\n        },\n      ];\n  }\n};\n\nexport default getFilterList;\n","/**\n *\n * FilterPopover\n *\n */\n\nimport React, { useState } from 'react';\n\nimport { Box, Button, Flex, Option, Popover, Select } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport FilterValueInput from './FilterValueInput';\nimport getFilterList from './utils/getFilterList';\n\nconst FilterPopover = ({ displayedFilters, filters, onSubmit, onToggle, source }) => {\n  const { formatMessage } = useIntl();\n\n  const [modifiedData, setModifiedData] = useState({\n    name: 'createdAt',\n    filter: '$eq',\n    value: '',\n  });\n\n  const handleChangeFilterField = (value) => {\n    const nextField = displayedFilters.find((f) => f.name === value);\n    const {\n      fieldSchema: { type, options },\n    } = nextField;\n    let filterValue = '';\n\n    if (type === 'enumeration') {\n      filterValue = options[0].value;\n    }\n\n    const filter = getFilterList(nextField)[0].value;\n\n    setModifiedData({ name: value, filter, value: filterValue });\n  };\n\n  const handleChangeOperator = (operator) => {\n    if (modifiedData.name === 'mime') {\n      setModifiedData((prev) => ({ ...prev, filter: operator, value: 'image' }));\n    } else {\n      setModifiedData((prev) => ({ ...prev, filter: operator, value: '' }));\n    }\n  };\n\n  const handleSubmit = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    if (modifiedData.value) {\n      if (modifiedData.name === 'mime') {\n        const alreadyAppliedFilters = filters.filter((filter) => {\n          return Object.keys(filter)[0] === 'mime';\n        });\n\n        if (modifiedData.value === 'file') {\n          const filtersWithoutMimeType = filters.filter((filter) => {\n            return Object.keys(filter)[0] !== 'mime';\n          });\n\n          let hasCurrentFilter = false;\n\n          let filterToAdd;\n\n          if (modifiedData.filter === '$contains') {\n            hasCurrentFilter =\n              alreadyAppliedFilters.find((filter) => {\n                return filter.mime?.$not?.$contains !== undefined;\n              }) !== undefined;\n\n            filterToAdd = {\n              mime: {\n                $not: {\n                  $contains: ['image', 'video'],\n                },\n              },\n            };\n          } else {\n            hasCurrentFilter =\n              alreadyAppliedFilters.find((filter) => {\n                return Array.isArray(filter.mime?.$contains);\n              }) !== undefined;\n\n            filterToAdd = {\n              mime: {\n                $contains: ['image', 'video'],\n              },\n            };\n          }\n\n          if (hasCurrentFilter) {\n            onToggle();\n\n            return;\n          }\n\n          const nextFilters = [...filtersWithoutMimeType, filterToAdd];\n          onSubmit(nextFilters);\n\n          onToggle();\n\n          return;\n        }\n\n        const hasFilter =\n          alreadyAppliedFilters.find((filter) => {\n            return filter.mime[modifiedData.filter] === modifiedData.value;\n          }) !== undefined;\n\n        // Don't apply the same filter twice\n        if (hasFilter) {\n          onToggle();\n\n          return;\n        }\n\n        const filtersWithoutFile = filters.filter((filter) => {\n          const filterType = Object.keys(filter)[0];\n\n          if (filterType !== 'mime') {\n            return true;\n          }\n\n          if (filter.mime?.$not?.$contains !== undefined) {\n            return false;\n          }\n\n          if (Array.isArray(filter?.mime?.$contains)) {\n            return false;\n          }\n\n          return true;\n        });\n\n        const oppositeFilter = modifiedData.filter === '$contains' ? '$notContains' : '$contains';\n\n        const oppositeFilterIndex = filtersWithoutFile.findIndex((filter) => {\n          return filter.mime?.[oppositeFilter] === modifiedData.value;\n        });\n        const hasOppositeFilter = oppositeFilterIndex !== -1;\n\n        let filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: modifiedData.value } };\n\n        if (!hasOppositeFilter) {\n          const nextFilters = [...filtersWithoutFile, filterToAdd];\n\n          onSubmit(nextFilters);\n\n          onToggle();\n\n          return;\n        }\n\n        if (hasOppositeFilter) {\n          const nextFilters = filtersWithoutFile.slice();\n          nextFilters.splice(oppositeFilterIndex, 1, filterToAdd);\n          onSubmit(nextFilters);\n\n          onToggle();\n        }\n\n        return;\n      }\n\n      const hasFilter =\n        filters.find((filter) => {\n          return (\n            filter[modifiedData.name] &&\n            filter[modifiedData.name]?.[modifiedData.filter] === modifiedData.value\n          );\n        }) !== undefined;\n\n      if (!hasFilter) {\n        let filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: modifiedData.value } };\n\n        const nextFilters = [...filters, filterToAdd];\n\n        onSubmit(nextFilters);\n      }\n    }\n\n    onToggle();\n  };\n\n  const appliedFilter = displayedFilters.find((filter) => filter.name === modifiedData.name);\n\n  return (\n    <Popover onDismiss={onToggle} source={source} padding={3} spacing={4}>\n      <form onSubmit={handleSubmit}>\n        <Flex direction=\"column\" alignItems=\"stretch\" gap={1} style={{ minWidth: 184 }}>\n          <Box>\n            <Select\n              aria-label={formatMessage({\n                id: 'app.utils.select-field',\n                defaultMessage: 'Select field',\n              })}\n              name=\"name\"\n              size=\"M\"\n              onChange={handleChangeFilterField}\n              value={modifiedData.name}\n            >\n              {displayedFilters.map((filter) => {\n                return (\n                  <Option key={filter.name} value={filter.name}>\n                    {filter.metadatas.label}\n                  </Option>\n                );\n              })}\n            </Select>\n          </Box>\n          <Box>\n            <Select\n              aria-label={formatMessage({\n                id: 'app.utils.select-filter',\n                defaultMessage: 'Select filter',\n              })}\n              name=\"filter\"\n              size=\"M\"\n              value={modifiedData.filter}\n              onChange={handleChangeOperator}\n            >\n              {getFilterList(appliedFilter).map((option) => {\n                return (\n                  <Option key={option.value} value={option.value}>\n                    {formatMessage(option.intlLabel)}\n                  </Option>\n                );\n              })}\n            </Select>\n          </Box>\n          <Box>\n            <FilterValueInput\n              {...appliedFilter.metadatas}\n              {...appliedFilter.fieldSchema}\n              value={modifiedData.value}\n              onChange={(value) => setModifiedData((prev) => ({ ...prev, value }))}\n            />\n          </Box>\n          <Box>\n            <Button size=\"L\" variant=\"secondary\" startIcon={<Plus />} type=\"submit\" fullWidth>\n              {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n            </Button>\n          </Box>\n        </Flex>\n      </form>\n    </Popover>\n  );\n};\n\nFilterPopover.propTypes = {\n  displayedFilters: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string.isRequired,\n      metadatas: PropTypes.shape({ label: PropTypes.string }),\n      fieldSchema: PropTypes.shape({ type: PropTypes.string }),\n    })\n  ).isRequired,\n  filters: PropTypes.array.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  onToggle: PropTypes.func.isRequired,\n  source: PropTypes.shape({ current: PropTypes.instanceOf(Element) }).isRequired,\n};\n\nexport default FilterPopover;\n","import React, { useRef, useState } from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { Filter } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport displayedFilters from '../../../utils/displayedFilters';\nimport FilterList from '../../FilterList';\nimport FilterPopover from '../../FilterPopover';\n\nexport const Filters = ({ appliedFilters, onChangeFilters }) => {\n  const buttonRef = useRef(null);\n  const [isVisible, setVisible] = useState(false);\n  const { formatMessage } = useIntl();\n\n  const toggleFilter = () => setVisible((prev) => !prev);\n\n  return (\n    <>\n      <Button\n        variant=\"tertiary\"\n        ref={buttonRef}\n        startIcon={<Filter />}\n        onClick={toggleFilter}\n        size=\"S\"\n      >\n        {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n      </Button>\n      {isVisible && (\n        <FilterPopover\n          displayedFilters={displayedFilters}\n          filters={appliedFilters}\n          onSubmit={onChangeFilters}\n          onToggle={toggleFilter}\n          source={buttonRef}\n        />\n      )}\n\n      {appliedFilters && (\n        <FilterList\n          appliedFilters={appliedFilters}\n          filtersSchema={displayedFilters}\n          onRemoveFilter={onChangeFilters}\n        />\n      )}\n    </>\n  );\n};\n\nFilters.propTypes = {\n  appliedFilters: PropTypes.array.isRequired,\n  onChangeFilters: PropTypes.func.isRequired,\n};\n","/**\n *\n * PageSize\n *\n */\n\nimport React from 'react';\n\nimport { Box, Flex, Option, Select, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst PageSize = ({ onChangePageSize, pageSize }) => {\n  const { formatMessage } = useIntl();\n\n  const handleChange = (value) => {\n    onChangePageSize(value);\n  };\n\n  return (\n    <Flex>\n      <Select\n        size=\"S\"\n        aria-label={formatMessage({\n          id: 'components.PageFooter.select',\n          defaultMessage: 'Entries per page',\n        })}\n        onChange={handleChange}\n        value={pageSize.toString()}\n      >\n        <Option value=\"10\">10</Option>\n        <Option value=\"20\">20</Option>\n        <Option value=\"50\">50</Option>\n        <Option value=\"100\">100</Option>\n      </Select>\n      <Box paddingLeft={2}>\n        <Typography textColor=\"neutral600\" as=\"label\" htmlFor=\"page-size\">\n          {formatMessage({\n            id: 'components.PageFooter.select',\n            defaultMessage: 'Entries per page',\n          })}\n        </Typography>\n      </Box>\n    </Flex>\n  );\n};\n\nPageSize.propTypes = {\n  onChangePageSize: PropTypes.func.isRequired,\n  pageSize: PropTypes.number.isRequired,\n};\n\nexport default PageSize;\n","import { createContext, useContext } from 'react';\n\nexport const PaginationContext = createContext({ activePage: 1, pageCount: 1 });\nexport const usePagination = () => useContext(PaginationContext);\n","import React from 'react';\n\nimport { buttonFocusStyle, Typography, VisuallyHidden } from '@strapi/design-system';\nimport { ChevronLeft, ChevronRight } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { usePagination } from './PaginationContext';\n\nconst PaginationText = styled(Typography)`\n  line-height: revert;\n`;\n\nconst LinkWrapper = styled.button`\n  padding: ${({ theme }) => theme.spaces[3]};\n  border-radius: ${({ theme }) => theme.borderRadius};\n  box-shadow: ${({ active, theme }) => (active ? theme.shadows.filterShadow : undefined)};\n  text-decoration: none;\n  display: flex;\n\n  ${buttonFocusStyle}\n`;\n\nLinkWrapper.defaultProps = { type: 'button' };\n\nconst PageLinkWrapper = styled(LinkWrapper)`\n  color: ${({ theme, active }) => (active ? theme.colors.primary700 : theme.colors.neutral800)};\n  background: ${({ theme, active }) => (active ? theme.colors.neutral0 : undefined)};\n\n  &:hover {\n    box-shadow: ${({ theme }) => theme.shadows.filterShadow};\n  }\n`;\n\nconst ActionLinkWrapper = styled(LinkWrapper)`\n  font-size: 0.7rem;\n  svg path {\n    fill: ${(p) => (p['aria-disabled'] ? p.theme.colors.neutral300 : p.theme.colors.neutral600)};\n  }\n\n  &:focus,\n  &:hover {\n    svg path {\n      fill: ${(p) => (p['aria-disabled'] ? p.theme.colors.neutral300 : p.theme.colors.neutral700)};\n    }\n  }\n\n  ${(p) =>\n    p['aria-disabled']\n      ? `\n  pointer-events: none;\n    `\n      : undefined}\n`;\n\nconst DotsWrapper = styled(LinkWrapper)`\n  color: ${({ theme }) => theme.colors.neutral800};\n`;\n\nexport const PreviousLink = ({ children, ...props }) => {\n  const { activePage } = usePagination();\n\n  const disabled = activePage === 1;\n\n  return (\n    <li>\n      <ActionLinkWrapper aria-disabled={disabled} tabIndex={disabled ? -1 : undefined} {...props}>\n        <VisuallyHidden>{children}</VisuallyHidden>\n        <ChevronLeft aria-hidden />\n      </ActionLinkWrapper>\n    </li>\n  );\n};\n\nexport const NextLink = ({ children, ...props }) => {\n  const { activePage, pageCount } = usePagination();\n\n  const disabled = activePage === pageCount;\n\n  return (\n    <li>\n      <ActionLinkWrapper aria-disabled={disabled} tabIndex={disabled ? -1 : undefined} {...props}>\n        <VisuallyHidden>{children}</VisuallyHidden>\n        <ChevronRight aria-hidden />\n      </ActionLinkWrapper>\n    </li>\n  );\n};\n\nexport const PageLink = ({ number, children, ...props }) => {\n  const { activePage } = usePagination();\n\n  const isActive = activePage === number;\n\n  return (\n    <li>\n      <PageLinkWrapper {...props} active={isActive}>\n        <VisuallyHidden>{children}</VisuallyHidden>\n        <PaginationText aria-hidden variant=\"pi\" fontWeight={isActive ? 'bold' : ''}>\n          {number}\n        </PaginationText>\n      </PageLinkWrapper>\n    </li>\n  );\n};\n\nexport const Dots = ({ children, ...props }) => (\n  <li>\n    <DotsWrapper {...props} as=\"div\">\n      <VisuallyHidden>{children}</VisuallyHidden>\n      <PaginationText aria-hidden small>\n        …\n      </PaginationText>\n    </DotsWrapper>\n  </li>\n);\n\nPageLink.propTypes = {\n  children: PropTypes.node.isRequired,\n  number: PropTypes.number.isRequired,\n};\n\nconst sharedPropTypes = {\n  children: PropTypes.node.isRequired,\n};\n\nNextLink.propTypes = sharedPropTypes;\nPreviousLink.propTypes = sharedPropTypes;\n\nDots.propTypes = {\n  children: PropTypes.node.isRequired,\n};\n","import React, { useMemo } from 'react';\n\nimport { Box, Flex } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport { PaginationContext } from './PaginationContext';\n\nexport const Pagination = ({ children, label, activePage, pageCount }) => {\n  const paginationValue = useMemo(() => ({ activePage, pageCount }), [activePage, pageCount]);\n\n  return (\n    <PaginationContext.Provider value={paginationValue}>\n      <Box as=\"nav\" aria-label={label}>\n        <Flex as=\"ul\" gap={1}>\n          {children}\n        </Flex>\n      </Box>\n    </PaginationContext.Provider>\n  );\n};\n\nPagination.defaultProps = {\n  label: 'pagination',\n};\n\nPagination.propTypes = {\n  activePage: PropTypes.number.isRequired,\n  children: PropTypes.node.isRequired,\n  label: PropTypes.string,\n  pageCount: PropTypes.number.isRequired,\n};\n","/**\n * The component works as follows: this is a duplicate of the helper-plugin one but without the router\n * `1` , 2, 3, ... 10\n * 1, `2`, 3, ... 10\n * 1, 2, `3`, 4, ... 10\n * 1, 2, 3, `4`, 5, ... 10\n * 1, ..,4, `5`, 6, ... 10\n *\n * 1, ...., 8, 9, `10`\n * 1, ...., 8, `9`, 10\n * 1, ...., 7, `8`, 9, 10\n * 1, ... 6, `7`, 8, 9, 10\n */\nimport React from 'react';\n\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { Dots, NextLink, PageLink, PreviousLink } from './components';\nimport { Pagination } from './Pagination';\n\nconst PaginationFooter = ({ activePage, onChangePage, pagination: { pageCount } }) => {\n  const { formatMessage } = useIntl();\n\n  const previousActivePage = activePage - 1;\n  const nextActivePage = activePage + 1;\n\n  const firstLinks = [\n    <PageLink\n      key={1}\n      number={1}\n      onClick={() => {\n        onChangePage(1);\n      }}\n    >\n      {formatMessage(\n        { id: 'components.pagination.go-to', defaultMessage: 'Go to page {page}' },\n        { page: 1 }\n      )}\n    </PageLink>,\n  ];\n\n  if (pageCount <= 4) {\n    const links = Array.from({ length: pageCount })\n      .map((_, i) => i + 1)\n      .map((number) => {\n        return (\n          <PageLink key={number} number={number} onClick={() => onChangePage(number)}>\n            {formatMessage(\n              { id: 'components.pagination.go-to', defaultMessage: 'Go to page {page}' },\n              { page: number }\n            )}\n          </PageLink>\n        );\n      });\n\n    return (\n      <Pagination activePage={activePage} pageCount={pageCount}>\n        <PreviousLink onClick={() => onChangePage(previousActivePage)}>\n          {formatMessage({\n            id: 'components.pagination.go-to-previous',\n            defaultMessage: 'Go to previous page',\n          })}\n        </PreviousLink>\n        {links}\n        <NextLink onClick={() => onChangePage(nextActivePage)}>\n          {formatMessage({\n            id: 'components.pagination.go-to-next',\n            defaultMessage: 'Go to next page',\n          })}\n        </NextLink>\n      </Pagination>\n    );\n  }\n\n  let firstLinksToCreate = [];\n  let lastLinks = [];\n  let lastLinksToCreate = [];\n  const middleLinks = [];\n\n  if (pageCount > 1) {\n    lastLinks.push(\n      <PageLink key={pageCount} number={pageCount} onClick={() => onChangePage(pageCount)}>\n        {formatMessage(\n          { id: 'components.pagination.go-to', defaultMessage: 'Go to page {page}' },\n          { page: pageCount }\n        )}\n      </PageLink>\n    );\n  }\n\n  if (activePage === 1 && pageCount >= 3) {\n    firstLinksToCreate = [2];\n  }\n\n  if (activePage === 2 && pageCount >= 3) {\n    if (pageCount === 5) {\n      firstLinksToCreate = [2, 3, 4];\n    } else if (pageCount === 3) {\n      firstLinksToCreate = [2];\n    } else {\n      firstLinksToCreate = [2, 3];\n    }\n  }\n\n  if (activePage === 4 && pageCount >= 3) {\n    firstLinksToCreate = [2];\n  }\n\n  if (activePage === pageCount && pageCount >= 3) {\n    lastLinksToCreate = [pageCount - 1];\n  }\n\n  if (activePage === pageCount - 2 && pageCount > 3) {\n    lastLinksToCreate = [activePage + 1, activePage, activePage - 1];\n  }\n\n  if (activePage === pageCount - 3 && pageCount > 3 && activePage > 5) {\n    lastLinksToCreate = [activePage + 2, activePage + 1, activePage, activePage - 1];\n  }\n\n  if (activePage === pageCount - 1 && pageCount > 3) {\n    lastLinksToCreate = [activePage, activePage - 1];\n  }\n\n  lastLinksToCreate.forEach((number) => {\n    lastLinks.unshift(\n      <PageLink key={number} number={number} onClick={() => onChangePage(number)}>\n        Go to page {number}\n      </PageLink>\n    );\n  });\n\n  firstLinksToCreate.forEach((number) => {\n    firstLinks.push(\n      <PageLink key={number} number={number} onClick={() => onChangePage(number)}>\n        {formatMessage(\n          { id: 'components.pagination.go-to', defaultMessage: 'Go to page {page}' },\n          { page: number }\n        )}\n      </PageLink>\n    );\n  });\n\n  if (\n    ![1, 2].includes(activePage) &&\n    activePage <= pageCount - 3 &&\n    firstLinks.length + lastLinks.length < 6\n  ) {\n    const middleLinksToCreate = [activePage - 1, activePage, activePage + 1];\n\n    middleLinksToCreate.forEach((number) => {\n      middleLinks.push(\n        <PageLink key={number} number={number} onClick={() => onChangePage(number)}>\n          {formatMessage(\n            { id: 'components.pagination.go-to', defaultMessage: 'Go to page {page}' },\n            { page: number }\n          )}\n        </PageLink>\n      );\n    });\n  }\n\n  const shouldShowDotsAfterFirstLink =\n    pageCount > 5 || (pageCount === 5 && (activePage === 1 || activePage === 5));\n  const shouldShowMiddleDots = middleLinks.length > 2 && activePage > 4 && pageCount > 5;\n\n  const beforeDotsLinksLength = shouldShowMiddleDots\n    ? pageCount - activePage - 1\n    : pageCount - firstLinks.length - lastLinks.length;\n  const afterDotsLength = shouldShowMiddleDots\n    ? pageCount - firstLinks.length - lastLinks.length\n    : pageCount - activePage - 1;\n\n  return (\n    <Pagination activePage={activePage} pageCount={pageCount}>\n      <PreviousLink onClick={() => onChangePage(previousActivePage)}>\n        {formatMessage({\n          id: 'components.pagination.go-to-previous',\n          defaultMessage: 'Go to previous page',\n        })}\n      </PreviousLink>\n      {firstLinks}\n      {shouldShowMiddleDots && (\n        <Dots>\n          {formatMessage(\n            {\n              id: 'components.pagination.remaining-links',\n              defaultMessage: 'And {number} other links',\n            },\n            { number: beforeDotsLinksLength }\n          )}\n        </Dots>\n      )}\n      {middleLinks}\n      {shouldShowDotsAfterFirstLink && (\n        <Dots>\n          {formatMessage(\n            {\n              id: 'components.pagination.remaining-links',\n              defaultMessage: 'And {number} other links',\n            },\n            { number: afterDotsLength }\n          )}\n        </Dots>\n      )}\n      {lastLinks}\n      <NextLink onClick={() => onChangePage(nextActivePage)}>\n        {formatMessage({\n          id: 'components.pagination.go-to-next',\n          defaultMessage: 'Go to next page',\n        })}\n      </NextLink>\n    </Pagination>\n  );\n};\n\nPaginationFooter.propTypes = {\n  activePage: PropTypes.number.isRequired,\n  onChangePage: PropTypes.func.isRequired,\n  pagination: PropTypes.shape({ pageCount: PropTypes.number.isRequired }).isRequired,\n};\n\nexport default PaginationFooter;\n","import React, { useLayoutEffect, useRef, useState } from 'react';\n\nimport { IconButton, Searchbar, SearchForm } from '@strapi/design-system';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Search } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport getTrad from '../../../../utils/getTrad';\n\nconst SearchAsset = ({ onChangeSearch, queryValue }) => {\n  const { formatMessage } = useIntl();\n  const { trackUsage } = useTracking();\n  const [isOpen, setIsOpen] = useState(!!queryValue);\n  const [value, setValue] = useState(queryValue || '');\n  const wrapperRef = useRef(null);\n\n  useLayoutEffect(() => {\n    if (isOpen) {\n      setTimeout(() => {\n        wrapperRef.current.querySelector('input').focus();\n      }, 0);\n    }\n  }, [isOpen]);\n\n  const handleToggle = () => {\n    setIsOpen((prev) => !prev);\n  };\n\n  const handleClear = () => {\n    handleToggle();\n    onChangeSearch(null);\n  };\n\n  const handleSubmit = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    trackUsage('didSearchMediaLibraryElements', { location: 'content-manager' });\n    onChangeSearch(value);\n  };\n\n  if (isOpen) {\n    return (\n      <div ref={wrapperRef}>\n        <SearchForm onSubmit={handleSubmit}>\n          <Searchbar\n            name=\"search\"\n            onClear={handleClear}\n            onChange={(e) => setValue(e.target.value)}\n            clearLabel={formatMessage({\n              id: getTrad('search.clear.label'),\n              defaultMessage: 'Clear the search',\n            })}\n            size=\"S\"\n            value={value}\n            placeholder={formatMessage({\n              id: getTrad('search.placeholder'),\n              defaultMessage: 'e.g: the first dog on the moon',\n            })}\n          >\n            {formatMessage({ id: getTrad('search.label'), defaultMessage: 'Search for an asset' })}\n          </Searchbar>\n        </SearchForm>\n      </div>\n    );\n  }\n\n  return <IconButton icon={<Search />} label=\"Search\" onClick={handleToggle} />;\n};\n\nSearchAsset.defaultProps = {\n  queryValue: null,\n};\n\nSearchAsset.propTypes = {\n  onChangeSearch: PropTypes.func.isRequired,\n  queryValue: PropTypes.string,\n};\n\nexport default SearchAsset;\n","/**\n * @param {string[]} allowedTypes\n * @param {string} mime\n * @returns {boolean}\n */\n\nexport const isSelectable = (allowedTypes, mime = '') => {\n  if (!mime) return false;\n\n  const fileType = mime.split('/')[0];\n\n  return (\n    allowedTypes.includes(fileType) ||\n    (allowedTypes.includes('file') && !['video', 'image', 'audio'].includes(fileType))\n  );\n};\n","import React from 'react';\n\nimport {\n  BaseCheckbox,\n  Box,\n  Button,\n  Divider,\n  Flex,\n  GridItem,\n  IconButton,\n  Typography,\n  VisuallyHidden,\n} from '@strapi/design-system';\nimport { usePersistentState } from '@strapi/helper-plugin';\nimport { Grid, List, Pencil, Plus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport {\n  AssetDefinition,\n  FolderDefinition,\n  localStorageKeys,\n  viewOptions,\n} from '../../../constants';\nimport { useFolder } from '../../../hooks/useFolder';\nimport { getBreadcrumbDataCM, toSingularTypes } from '../../../utils';\nimport getAllowedFiles from '../../../utils/getAllowedFiles';\nimport getTrad from '../../../utils/getTrad';\nimport { AssetGridList } from '../../AssetGridList';\nimport { Breadcrumbs } from '../../Breadcrumbs';\nimport { EmptyAssets } from '../../EmptyAssets';\nimport { FolderCard, FolderCardBody, FolderCardBodyAction } from '../../FolderCard';\nimport { FolderGridList } from '../../FolderGridList';\nimport SortPicker from '../../SortPicker';\nimport { TableList } from '../../TableList';\n\nimport { Filters } from './Filters';\nimport PageSize from './PageSize';\nimport PaginationFooter from './PaginationFooter';\nimport SearchAsset from './SearchAsset';\nimport { isSelectable } from './utils/isSelectable';\n\nconst TypographyMaxWidth = styled(Typography)`\n  max-width: 100%;\n`;\n\nconst ActionContainer = styled(Box)`\n  svg {\n    path {\n      fill: ${({ theme }) => theme.colors.neutral500};\n    }\n  }\n`;\n\nexport const BrowseStep = ({\n  allowedTypes,\n  assets: rawAssets,\n  canCreate,\n  canRead,\n  folders,\n  multiple,\n  onAddAsset,\n  onChangeFilters,\n  onChangePage,\n  onChangePageSize,\n  onChangeSearch,\n  onChangeSort,\n  onChangeFolder,\n  onEditAsset,\n  onEditFolder,\n  onSelectAllAsset,\n  onSelectAsset,\n  pagination,\n  queryObject,\n  selectedAssets,\n}) => {\n  const { formatMessage } = useIntl();\n  const [view, setView] = usePersistentState(localStorageKeys.modalView, viewOptions.GRID);\n  const isGridView = view === viewOptions.GRID;\n\n  const { data: currentFolder, isLoading: isCurrentFolderLoading } = useFolder(\n    queryObject?.folder,\n    {\n      enabled: canRead && !!queryObject?.folder,\n    }\n  );\n\n  const singularTypes = toSingularTypes(allowedTypes);\n  const assets = rawAssets.map((asset) => ({\n    ...asset,\n    isSelectable: isSelectable(singularTypes, asset?.mime),\n    type: 'asset',\n  }));\n\n  const breadcrumbs = !isCurrentFolderLoading && getBreadcrumbDataCM(currentFolder);\n\n  const allAllowedAsset = getAllowedFiles(allowedTypes, assets);\n  const areAllAssetSelected =\n    allAllowedAsset.length > 0 &&\n    selectedAssets.length > 0 &&\n    allAllowedAsset.every(\n      (asset) => selectedAssets.findIndex((currAsset) => currAsset.id === asset.id) !== -1\n    );\n  const hasSomeAssetSelected = allAllowedAsset.some(\n    (asset) => selectedAssets.findIndex((currAsset) => currAsset.id === asset.id) !== -1\n  );\n  const isSearching = !!queryObject?._q;\n  const isFiltering = queryObject?.filters?.$and?.length > 0;\n  const isSearchingOrFiltering = isSearching || isFiltering;\n  const assetCount = assets.length;\n  const folderCount = folders.length;\n  const handleClickFolderCard = (...args) => {\n    // Search query will always fetch the same results\n    // we remove it here to allow navigating in a folder and see the result of this navigation\n    onChangeSearch('');\n    onChangeFolder(...args);\n  };\n\n  return (\n    <Box>\n      {onSelectAllAsset && (\n        <Box paddingBottom={4}>\n          <Flex justifyContent=\"space-between\" alignItems=\"flex-start\">\n            {(assetCount > 0 || folderCount > 0 || isFiltering) && (\n              <Flex gap={2} wrap=\"wrap\">\n                {multiple && isGridView && (\n                  <Flex\n                    paddingLeft={2}\n                    paddingRight={2}\n                    background=\"neutral0\"\n                    hasRadius\n                    borderColor=\"neutral200\"\n                    height={`${32 / 16}rem`}\n                  >\n                    <BaseCheckbox\n                      aria-label={formatMessage({\n                        id: getTrad('bulk.select.label'),\n                        defaultMessage: 'Select all assets',\n                      })}\n                      indeterminate={!areAllAssetSelected && hasSomeAssetSelected}\n                      value={areAllAssetSelected}\n                      onChange={onSelectAllAsset}\n                    />\n                  </Flex>\n                )}\n                {isGridView && <SortPicker onChangeSort={onChangeSort} value={queryObject?.sort} />}\n                <Filters\n                  appliedFilters={queryObject?.filters?.$and}\n                  onChangeFilters={onChangeFilters}\n                />\n              </Flex>\n            )}\n\n            {(assetCount > 0 || folderCount > 0 || isSearching) && (\n              <Flex marginLeft=\"auto\" shrink={0}>\n                <ActionContainer paddingTop={1} paddingBottom={1}>\n                  <IconButton\n                    icon={isGridView ? <List /> : <Grid />}\n                    label={\n                      isGridView\n                        ? formatMessage({\n                            id: 'view-switch.list',\n                            defaultMessage: 'List View',\n                          })\n                        : formatMessage({\n                            id: 'view-switch.grid',\n                            defaultMessage: 'Grid View',\n                          })\n                    }\n                    onClick={() => setView(isGridView ? viewOptions.LIST : viewOptions.GRID)}\n                  />\n                </ActionContainer>\n                <SearchAsset onChangeSearch={onChangeSearch} queryValue={queryObject._q || ''} />\n              </Flex>\n            )}\n          </Flex>\n        </Box>\n      )}\n\n      {canRead && breadcrumbs?.length > 0 && currentFolder && (\n        <Box paddingTop={3}>\n          <Breadcrumbs\n            onChangeFolder={onChangeFolder}\n            as=\"nav\"\n            label={formatMessage({\n              id: getTrad('header.breadcrumbs.nav.label'),\n              defaultMessage: 'Folders navigation',\n            })}\n            breadcrumbs={breadcrumbs}\n            currentFolderId={queryObject?.folder}\n          />\n        </Box>\n      )}\n\n      {assetCount === 0 && folderCount === 0 && (\n        <Box paddingBottom={6}>\n          <EmptyAssets\n            size=\"S\"\n            count={6}\n            action={\n              canCreate &&\n              !isFiltering &&\n              !isSearching && (\n                <Button variant=\"secondary\" startIcon={<Plus />} onClick={onAddAsset}>\n                  {formatMessage({\n                    id: getTrad('header.actions.add-assets'),\n                    defaultMessage: 'Add new assets',\n                  })}\n                </Button>\n              )\n            }\n            content={\n              // eslint-disable-next-line no-nested-ternary\n              isSearchingOrFiltering\n                ? formatMessage({\n                    id: getTrad('list.assets-empty.title-withSearch'),\n                    defaultMessage: 'There are no assets with the applied filters',\n                  })\n                : canCreate && !isSearching\n                ? formatMessage({\n                    id: getTrad('list.assets.empty'),\n                    defaultMessage: 'Upload your first assets...',\n                  })\n                : formatMessage({\n                    id: getTrad('list.assets.empty.no-permissions'),\n                    defaultMessage: 'The asset list is empty',\n                  })\n            }\n          />\n        </Box>\n      )}\n\n      {!isGridView && (folderCount > 0 || assetCount > 0) && (\n        <TableList\n          allowedTypes={allowedTypes}\n          assetCount={assetCount}\n          folderCount={folderCount}\n          indeterminate={!areAllAssetSelected && hasSomeAssetSelected}\n          isFolderSelectionAllowed={false}\n          onChangeSort={onChangeSort}\n          onChangeFolder={handleClickFolderCard}\n          onEditAsset={onEditAsset}\n          onEditFolder={onEditFolder}\n          onSelectOne={onSelectAsset}\n          onSelectAll={onSelectAllAsset}\n          rows={[...folders.map((folder) => ({ ...folder, type: 'folder' })), ...assets]}\n          selected={selectedAssets}\n          shouldDisableBulkSelect={!multiple}\n          sortQuery={queryObject?.sort ?? ''}\n        />\n      )}\n\n      {isGridView && (\n        <>\n          {folderCount > 0 && (\n            <FolderGridList\n              title={\n                (((isSearchingOrFiltering && assetCount > 0) || !isSearchingOrFiltering) &&\n                  formatMessage(\n                    {\n                      id: getTrad('list.folders.title'),\n                      defaultMessage: 'Folders ({count})',\n                    },\n                    { count: folderCount }\n                  )) ||\n                ''\n              }\n            >\n              {folders.map((folder) => {\n                return (\n                  <GridItem col={3} key={`folder-${folder.id}`}>\n                    <FolderCard\n                      ariaLabel={folder.name}\n                      id={`folder-${folder.id}`}\n                      onClick={() => handleClickFolderCard(folder.id, folder.path)}\n                      cardActions={\n                        onEditFolder && (\n                          <IconButton\n                            icon={<Pencil />}\n                            aria-label={formatMessage({\n                              id: getTrad('list.folder.edit'),\n                              defaultMessage: 'Edit folder',\n                            })}\n                            onClick={() => onEditFolder(folder)}\n                          />\n                        )\n                      }\n                    >\n                      <FolderCardBody>\n                        <FolderCardBodyAction\n                          onClick={() => handleClickFolderCard(folder.id, folder.path)}\n                        >\n                          <Flex as=\"h2\" direction=\"column\" alignItems=\"start\" maxWidth=\"100%\">\n                            <TypographyMaxWidth fontWeight=\"semiBold\" ellipsis>\n                              {folder.name}\n                              {/* VisuallyHidden dash here allows to separate folder title and count informations\n                              for voice reading structure purpose */}\n                              <VisuallyHidden>-</VisuallyHidden>\n                            </TypographyMaxWidth>\n                            <TypographyMaxWidth\n                              as=\"span\"\n                              textColor=\"neutral600\"\n                              variant=\"pi\"\n                              ellipsis\n                            >\n                              {formatMessage(\n                                {\n                                  id: getTrad('list.folder.subtitle'),\n                                  defaultMessage:\n                                    '{folderCount, plural, =0 {# folder} one {# folder} other {# folders}}, {filesCount, plural, =0 {# asset} one {# asset} other {# assets}}',\n                                },\n                                {\n                                  folderCount: folder.children.count,\n                                  filesCount: folder.files.count,\n                                }\n                              )}\n                            </TypographyMaxWidth>\n                          </Flex>\n                        </FolderCardBodyAction>\n                      </FolderCardBody>\n                    </FolderCard>\n                  </GridItem>\n                );\n              })}\n            </FolderGridList>\n          )}\n\n          {assetCount > 0 && folderCount > 0 && (\n            <Box paddingTop={6}>\n              <Divider />\n            </Box>\n          )}\n\n          {assetCount > 0 && (\n            <Box paddingTop={6}>\n              <AssetGridList\n                allowedTypes={allowedTypes}\n                size=\"S\"\n                assets={assets}\n                onSelectAsset={onSelectAsset}\n                selectedAssets={selectedAssets}\n                onEditAsset={onEditAsset}\n                title={\n                  ((!isSearchingOrFiltering || (isSearchingOrFiltering && folderCount > 0)) &&\n                    queryObject.page === 1 &&\n                    formatMessage(\n                      {\n                        id: getTrad('list.assets.title'),\n                        defaultMessage: 'Assets ({count})',\n                      },\n                      { count: assetCount }\n                    )) ||\n                  ''\n                }\n              />\n            </Box>\n          )}\n        </>\n      )}\n\n      {pagination.pageCount > 0 && (\n        <Flex justifyContent=\"space-between\" paddingTop={4}>\n          <PageSize pageSize={queryObject.pageSize} onChangePageSize={onChangePageSize} />\n          <PaginationFooter\n            activePage={queryObject.page}\n            onChangePage={onChangePage}\n            pagination={pagination}\n          />\n        </Flex>\n      )}\n    </Box>\n  );\n};\n\nBrowseStep.defaultProps = {\n  allowedTypes: [],\n  folders: [],\n  multiple: false,\n  onSelectAllAsset: undefined,\n};\nBrowseStep.propTypes = {\n  allowedTypes: PropTypes.arrayOf(PropTypes.string),\n  assets: PropTypes.arrayOf(AssetDefinition).isRequired,\n  canCreate: PropTypes.bool.isRequired,\n  canRead: PropTypes.bool.isRequired,\n  folders: PropTypes.arrayOf(FolderDefinition),\n  multiple: PropTypes.bool,\n  onAddAsset: PropTypes.func.isRequired,\n  onChangeFilters: PropTypes.func.isRequired,\n  onChangeFolder: PropTypes.func.isRequired,\n  onChangePage: PropTypes.func.isRequired,\n  onChangePageSize: PropTypes.func.isRequired,\n  onChangeSort: PropTypes.func.isRequired,\n  onChangeSearch: PropTypes.func.isRequired,\n  onEditAsset: PropTypes.func.isRequired,\n  onEditFolder: PropTypes.func.isRequired,\n  onSelectAsset: PropTypes.func.isRequired,\n  onSelectAllAsset: PropTypes.func,\n  queryObject: PropTypes.shape({\n    filters: PropTypes.object,\n    page: PropTypes.number.isRequired,\n    pageSize: PropTypes.number.isRequired,\n    _q: PropTypes.string,\n    sort: PropTypes.string,\n    folder: PropTypes.number,\n  }).isRequired,\n  pagination: PropTypes.shape({ pageCount: PropTypes.number.isRequired }).isRequired,\n  selectedAssets: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n};\n","import React from 'react';\n\nimport { Button, ModalFooter } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nexport const DialogFooter = ({ onClose, onValidate }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <ModalFooter\n      startActions={\n        <Button onClick={onClose} variant=\"tertiary\">\n          {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n        </Button>\n      }\n      endActions={\n        onValidate && (\n          <Button onClick={onValidate}>\n            {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n          </Button>\n        )\n      }\n    />\n  );\n};\n\nDialogFooter.defaultProps = {\n  onValidate: undefined,\n};\n\nDialogFooter.propTypes = {\n  onClose: PropTypes.func.isRequired,\n  onValidate: PropTypes.func,\n};\n","import React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport getTrad from '../../../utils/getTrad';\nimport { AssetGridList } from '../../AssetGridList';\n\nexport const SelectedStep = ({ selectedAssets, onSelectAsset, onReorderAsset }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n      <Flex gap={0}>\n        <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n          {formatMessage(\n            {\n              id: getTrad('list.assets.to-upload'),\n              defaultMessage:\n                '{number, plural, =0 {No asset} one {1 asset} other {# assets}} ready to upload',\n            },\n            { number: selectedAssets.length }\n          )}\n        </Typography>\n        <Typography variant=\"pi\" textColor=\"neutral600\">\n          {formatMessage({\n            id: getTrad('modal.upload-list.sub-header-subtitle'),\n            defaultMessage: 'Manage the assets before adding them to the Media Library',\n          })}\n        </Typography>\n      </Flex>\n\n      <AssetGridList\n        size=\"S\"\n        assets={selectedAssets}\n        onSelectAsset={onSelectAsset}\n        selectedAssets={selectedAssets}\n        onReorderAsset={onReorderAsset}\n      />\n    </Flex>\n  );\n};\n\nSelectedStep.defaultProps = {\n  onReorderAsset: undefined,\n};\n\nSelectedStep.propTypes = {\n  onSelectAsset: PropTypes.func.isRequired,\n  selectedAssets: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n  onReorderAsset: PropTypes.func,\n};\n","import React, { useState } from 'react';\n\nimport {\n  Badge,\n  Button,\n  Divider,\n  Flex,\n  Loader,\n  ModalBody,\n  ModalHeader,\n  ModalLayout,\n  Tab,\n  TabGroup,\n  TabPanel,\n  TabPanels,\n  Tabs,\n  Typography,\n} from '@strapi/design-system';\nimport { AnErrorOccurred, NoPermissions, pxToRem, useSelectionState } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { AssetDefinition } from '../../constants';\nimport { useAssets } from '../../hooks/useAssets';\nimport { useFolders } from '../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport useModalQueryParams from '../../hooks/useModalQueryParams';\nimport { containsAssetFilter, getTrad } from '../../utils';\nimport getAllowedFiles from '../../utils/getAllowedFiles';\nimport { moveElement } from '../../utils/moveElement';\nimport { EditAssetDialog } from '../EditAssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog';\n\nimport { BrowseStep } from './BrowseStep';\nimport { DialogFooter } from './DialogFooter';\nimport { SelectedStep } from './SelectedStep';\n\nconst LoadingBody = styled(Flex)`\n  /* 80px are coming from the Tabs component that is not included in the ModalBody */\n  min-height: ${() => `calc(60vh + ${pxToRem(80)})`};\n`;\n\nexport const AssetDialog = ({\n  allowedTypes,\n  folderId,\n  onClose,\n  onAddAsset,\n  onAddFolder,\n  onChangeFolder,\n  onValidate,\n  multiple,\n  initiallySelectedAssets,\n  trackedLocation,\n}) => {\n  const [assetToEdit, setAssetToEdit] = useState(undefined);\n  const [folderToEdit, setFolderToEdit] = useState(undefined);\n  const { formatMessage } = useIntl();\n  const {\n    canRead,\n    canCreate,\n    isLoading: isLoadingPermissions,\n    canUpdate,\n    canCopyLink,\n    canDownload,\n  } = useMediaLibraryPermissions();\n\n  const [\n    { queryObject },\n    {\n      onChangeFilters,\n      onChangePage,\n      onChangePageSize,\n      onChangeSort,\n      onChangeSearch,\n      onChangeFolder: onChangeFolderParam,\n    },\n  ] = useModalQueryParams({ folder: folderId });\n\n  const {\n    data: { pagination, results: assets } = {},\n    isLoading: isLoadingAssets,\n    error: errorAssets,\n  } = useAssets({ skipWhen: !canRead, query: queryObject });\n\n  const {\n    data: folders,\n    isLoading: isLoadingFolders,\n    error: errorFolders,\n  } = useFolders({\n    enabled: canRead && !containsAssetFilter(queryObject) && pagination?.page === 1,\n    query: queryObject,\n  });\n\n  const [\n    selectedAssets,\n    { selectOne, selectOnly, setSelections, selectMultiple, deselectMultiple },\n  ] = useSelectionState(['id'], initiallySelectedAssets);\n\n  const [initialSelectedTabIndex, setInitialSelectedTabIndex] = useState(\n    selectedAssets.length > 0 ? 1 : 0\n  );\n\n  const handleSelectAllAssets = () => {\n    const allowedAssets = getAllowedFiles(allowedTypes, assets);\n\n    if (!multiple) {\n      return undefined;\n    }\n\n    // selected files in current folder\n    const alreadySelected = allowedAssets.filter(\n      (asset) => selectedAssets.findIndex((selectedAsset) => selectedAsset.id === asset.id) !== -1\n    );\n\n    if (alreadySelected.length > 0) {\n      deselectMultiple(alreadySelected);\n    } else {\n      selectMultiple(allowedAssets);\n    }\n  };\n\n  const handleSelectAsset = (asset) => {\n    return multiple ? selectOne(asset) : selectOnly(asset);\n  };\n\n  const isLoading = isLoadingPermissions || isLoadingAssets || isLoadingFolders;\n  const hasError = errorAssets || errorFolders;\n\n  if (isLoading) {\n    return (\n      <ModalLayout onClose={onClose} labelledBy=\"asset-dialog-title\" aria-busy>\n        <ModalHeader>\n          <Typography fontWeight=\"bold\">\n            {formatMessage({\n              id: getTrad('header.actions.add-assets'),\n              defaultMessage: 'Add new assets',\n            })}\n          </Typography>\n        </ModalHeader>\n        <LoadingBody justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n          <Loader>\n            {formatMessage({\n              id: getTrad('content.isLoading'),\n              defaultMessage: 'Content is loading.',\n            })}\n          </Loader>\n        </LoadingBody>\n        <DialogFooter onClose={onClose} />\n      </ModalLayout>\n    );\n  }\n\n  if (hasError) {\n    return (\n      <ModalLayout onClose={onClose} labelledBy=\"asset-dialog-title\">\n        <ModalHeader>\n          <Typography fontWeight=\"bold\">\n            {formatMessage({\n              id: getTrad('header.actions.add-assets'),\n              defaultMessage: 'Add new assets',\n            })}\n          </Typography>\n        </ModalHeader>\n        <AnErrorOccurred />\n        <DialogFooter onClose={onClose} />\n      </ModalLayout>\n    );\n  }\n\n  if (!canRead) {\n    return (\n      <ModalLayout onClose={onClose} labelledBy=\"asset-dialog-title\">\n        <ModalHeader fontWeight=\"bold\">\n          <Typography>\n            {formatMessage({\n              id: getTrad('header.actions.add-assets'),\n              defaultMessage: 'Add new assets',\n            })}\n          </Typography>\n        </ModalHeader>\n        <NoPermissions />\n        <DialogFooter onClose={onClose} />\n      </ModalLayout>\n    );\n  }\n\n  if (assetToEdit) {\n    return (\n      <EditAssetDialog\n        onClose={() => setAssetToEdit(undefined)}\n        asset={assetToEdit}\n        canUpdate={canUpdate}\n        canCopyLink={canCopyLink}\n        canDownload={canDownload}\n        trackedLocation={trackedLocation}\n      />\n    );\n  }\n\n  if (folderToEdit) {\n    return (\n      <EditFolderDialog\n        folder={folderToEdit}\n        onClose={() => setFolderToEdit(undefined)}\n        location=\"content-manager\"\n        parentFolderId={queryObject?.folder}\n      />\n    );\n  }\n\n  const handleMoveItem = (hoverIndex, destIndex) => {\n    const offset = destIndex - hoverIndex;\n    const orderedAssetsClone = selectedAssets.slice();\n    const nextAssets = moveElement(orderedAssetsClone, hoverIndex, offset);\n    setSelections(nextAssets);\n  };\n\n  const handleFolderChange = (folderId, folderPath) => {\n    onChangeFolder(folderId);\n    onChangeFolderParam(folderId, folderPath);\n  };\n\n  return (\n    <ModalLayout onClose={onClose} labelledBy=\"asset-dialog-title\" aria-busy={isLoading}>\n      <ModalHeader>\n        <Typography fontWeight=\"bold\">\n          {formatMessage({\n            id: getTrad('header.actions.add-assets'),\n            defaultMessage: 'Add new assets',\n          })}\n        </Typography>\n      </ModalHeader>\n\n      <TabGroup\n        label={formatMessage({\n          id: getTrad('tabs.title'),\n          defaultMessage: 'How do you want to upload your assets?',\n        })}\n        variant=\"simple\"\n        initialSelectedTabIndex={initialSelectedTabIndex}\n        onTabChange={() => setInitialSelectedTabIndex(0)}\n      >\n        <Flex paddingLeft={8} paddingRight={8} paddingTop={6} justifyContent=\"space-between\">\n          <Tabs>\n            <Tab>\n              {formatMessage({\n                id: getTrad('modal.nav.browse'),\n                defaultMessage: 'Browse',\n              })}\n            </Tab>\n            <Tab>\n              {formatMessage({\n                id: getTrad('modal.header.select-files'),\n                defaultMessage: 'Selected files',\n              })}\n              <Badge marginLeft={2}>{selectedAssets.length}</Badge>\n            </Tab>\n          </Tabs>\n          <Flex gap={2}>\n            <Button\n              variant=\"secondary\"\n              onClick={() => onAddFolder({ folderId: queryObject?.folder })}\n            >\n              {formatMessage({\n                id: getTrad('modal.upload-list.sub-header.add-folder'),\n                defaultMessage: 'Add folder',\n              })}\n            </Button>\n            <Button onClick={() => onAddAsset({ folderId: queryObject?.folder })}>\n              {formatMessage({\n                id: getTrad('modal.upload-list.sub-header.button'),\n                defaultMessage: 'Add more assets',\n              })}\n            </Button>\n          </Flex>\n        </Flex>\n        <Divider />\n        <TabPanels>\n          <TabPanel>\n            <ModalBody>\n              <BrowseStep\n                allowedTypes={allowedTypes}\n                assets={assets}\n                canCreate={canCreate}\n                canRead={canRead}\n                folders={folders}\n                onSelectAsset={handleSelectAsset}\n                selectedAssets={selectedAssets}\n                multiple={multiple}\n                onSelectAllAsset={handleSelectAllAssets}\n                onEditAsset={setAssetToEdit}\n                onEditFolder={setFolderToEdit}\n                pagination={pagination}\n                queryObject={queryObject}\n                onAddAsset={onAddAsset}\n                onChangeFilters={onChangeFilters}\n                onChangeFolder={handleFolderChange}\n                onChangePage={onChangePage}\n                onChangePageSize={onChangePageSize}\n                onChangeSort={onChangeSort}\n                onChangeSearch={onChangeSearch}\n              />\n            </ModalBody>\n          </TabPanel>\n          <TabPanel>\n            <ModalBody>\n              <SelectedStep\n                selectedAssets={selectedAssets}\n                onSelectAsset={handleSelectAsset}\n                onReorderAsset={handleMoveItem}\n              />\n            </ModalBody>\n          </TabPanel>\n        </TabPanels>\n      </TabGroup>\n      <DialogFooter onClose={onClose} onValidate={() => onValidate(selectedAssets)} />\n    </ModalLayout>\n  );\n};\n\nAssetDialog.defaultProps = {\n  allowedTypes: [],\n  folderId: null,\n  initiallySelectedAssets: [],\n  multiple: false,\n  trackedLocation: undefined,\n};\n\nAssetDialog.propTypes = {\n  allowedTypes: PropTypes.arrayOf(PropTypes.string),\n  folderId: PropTypes.number,\n  initiallySelectedAssets: PropTypes.arrayOf(AssetDefinition),\n  multiple: PropTypes.bool,\n  onAddAsset: PropTypes.func.isRequired,\n  onAddFolder: PropTypes.func.isRequired,\n  onChangeFolder: PropTypes.func.isRequired,\n  onClose: PropTypes.func.isRequired,\n  onValidate: PropTypes.func.isRequired,\n  trackedLocation: PropTypes.string,\n};\n","import { AssetType } from '../constants';\n\nexport const typeFromMime = (mime) => {\n  if (mime.includes(AssetType.Image)) {\n    return AssetType.Image;\n  }\n  if (mime.includes(AssetType.Video)) {\n    return AssetType.Video;\n  }\n  if (mime.includes(AssetType.Audio)) {\n    return AssetType.Audio;\n  }\n\n  return AssetType.Document;\n};\n","import { typeFromMime } from './typeFromMime';\n\nexport const rawFileToAsset = (rawFile, assetSource) => {\n  return {\n    size: rawFile.size / 1000,\n    createdAt: new Date(rawFile.lastModified).toISOString(),\n    name: rawFile.name,\n    source: assetSource,\n    type: typeFromMime(rawFile.type),\n    url: URL.createObjectURL(rawFile),\n    ext: rawFile.name.split('.').pop(),\n    mime: rawFile.type,\n    rawFile,\n    isLocal: true,\n  };\n};\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useRef, useState } from 'react';\n\nimport { Box, Button, Flex, ModalFooter, Typography } from '@strapi/design-system';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { PicturePlus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { AssetSource } from '../../../constants';\nimport getTrad from '../../../utils/getTrad';\nimport { rawFileToAsset } from '../../../utils/rawFileToAsset';\n\nconst Wrapper = styled(Flex)`\n  flex-direction: column;\n`;\n\nconst IconWrapper = styled.div`\n  font-size: ${60 / 16}rem;\n\n  svg path {\n    fill: ${({ theme }) => theme.colors.primary600};\n  }\n`;\n\nconst MediaBox = styled(Box)`\n  border-style: dashed;\n`;\n\nconst OpaqueBox = styled(Box)`\n  opacity: 0;\n  cursor: pointer;\n`;\n\nexport const FromComputerForm = ({ onClose, onAddAssets, trackedLocation }) => {\n  const { formatMessage } = useIntl();\n  const [dragOver, setDragOver] = useState(false);\n  const inputRef = useRef(null);\n  const { trackUsage } = useTracking();\n\n  const handleDragOver = (event) => {\n    event.preventDefault();\n  };\n\n  const handleDragEnter = (event) => {\n    event.preventDefault();\n    setDragOver(true);\n  };\n\n  const handleDragLeave = () => setDragOver(false);\n\n  const handleClick = (e) => {\n    e.preventDefault();\n    inputRef.current.click();\n  };\n\n  const handleChange = () => {\n    const files = inputRef.current.files;\n    const assets = [];\n\n    for (let i = 0; i < files.length; i++) {\n      const file = files.item(i);\n      const asset = rawFileToAsset(file, AssetSource.Computer);\n\n      assets.push(asset);\n    }\n\n    if (trackedLocation) {\n      trackUsage('didSelectFile', { source: 'computer', location: trackedLocation });\n    }\n\n    onAddAssets(assets);\n  };\n\n  const handleDrop = (e) => {\n    e.preventDefault();\n\n    if (e?.dataTransfer?.files) {\n      const files = e.dataTransfer.files;\n      const assets = [];\n\n      for (let i = 0; i < files.length; i++) {\n        const file = files.item(i);\n        const asset = rawFileToAsset(file, AssetSource.Computer);\n\n        assets.push(asset);\n      }\n\n      onAddAssets(assets);\n    }\n\n    setDragOver(false);\n  };\n\n  return (\n    <form>\n      <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n        <label>\n          <MediaBox\n            paddingTop={11}\n            paddingBottom={11}\n            hasRadius\n            justifyContent=\"center\"\n            borderColor={dragOver ? 'primary500' : 'neutral300'}\n            background={dragOver ? 'primary100' : 'neutral100'}\n            position=\"relative\"\n            onDragEnter={handleDragEnter}\n            onDragLeave={handleDragLeave}\n            onDragOver={handleDragOver}\n            onDrop={handleDrop}\n          >\n            <Flex justifyContent=\"center\">\n              <Wrapper>\n                <IconWrapper>\n                  <PicturePlus aria-hidden />\n                </IconWrapper>\n\n                <Box paddingTop={3} paddingBottom={5}>\n                  <Typography variant=\"delta\" textColor=\"neutral600\" as=\"span\">\n                    {formatMessage({\n                      id: getTrad('input.label'),\n                      defaultMessage: 'Drag & Drop here or',\n                    })}\n                  </Typography>\n                </Box>\n\n                <OpaqueBox\n                  as=\"input\"\n                  position=\"absolute\"\n                  left={0}\n                  right={0}\n                  bottom={0}\n                  top={0}\n                  width=\"100%\"\n                  type=\"file\"\n                  multiple\n                  name=\"files\"\n                  tabIndex={-1}\n                  ref={inputRef}\n                  zIndex={1}\n                  onChange={handleChange}\n                />\n\n                <Box position=\"relative\">\n                  <Button type=\"button\" onClick={handleClick}>\n                    {formatMessage({\n                      id: getTrad('input.button.label'),\n                      defaultMessage: 'Browse files',\n                    })}\n                  </Button>\n                </Box>\n              </Wrapper>\n            </Flex>\n          </MediaBox>\n        </label>\n      </Box>\n\n      <ModalFooter\n        startActions={\n          <Button onClick={onClose} variant=\"tertiary\">\n            {formatMessage({\n              id: 'app.components.Button.cancel',\n              defaultMessage: 'cancel',\n            })}\n          </Button>\n        }\n      />\n    </form>\n  );\n};\n\nFromComputerForm.defaultProps = {\n  trackedLocation: undefined,\n};\n\nFromComputerForm.propTypes = {\n  onClose: PropTypes.func.isRequired,\n  onAddAssets: PropTypes.func.isRequired,\n  trackedLocation: PropTypes.string,\n};\n","import { AssetSource } from '../constants';\n\nimport { typeFromMime } from './typeFromMime';\n\nfunction getFilenameFromURL(url) {\n  return new URL(url).pathname.split('/').pop();\n}\n\nexport const urlsToAssets = async (urls) => {\n  const assetPromises = urls.map((url) =>\n    fetch(url).then(async (res) => {\n      const blob = await res.blob();\n\n      const loadedFile = new File([blob], getFilenameFromURL(res.url), {\n        type: res.headers.get('content-type'),\n      });\n\n      return {\n        name: loadedFile.name,\n        url: res.url,\n        mime: res.headers.get('content-type'),\n        rawFile: loadedFile,\n      };\n    })\n  );\n  // Retrieve the assets metadata\n  const assetsResults = await Promise.all(assetPromises);\n\n  const assets = assetsResults.map((fullFilledAsset) => ({\n    source: AssetSource.Url,\n    name: fullFilledAsset.name,\n    type: typeFromMime(fullFilledAsset.mime),\n    url: fullFilledAsset.url,\n    ext: fullFilledAsset.url.split('.').pop(),\n    mime: fullFilledAsset.mime,\n    rawFile: fullFilledAsset.rawFile,\n  }));\n\n  return assets;\n};\n","import { translatedErrors as errorsTrads } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nimport getTrad from './getTrad';\n\nexport const urlSchema = yup.object().shape({\n  urls: yup.string().test({\n    name: 'isUrlValid',\n    message: '${path}',\n    test(values = '') {\n      const urls = values.split(/\\r?\\n/);\n\n      if (urls.length === 0) {\n        return this.createError({\n          path: this.path,\n          message: errorsTrads.min,\n        });\n      }\n\n      if (urls.length > 20) {\n        return this.createError({\n          path: this.path,\n          message: errorsTrads.max,\n        });\n      }\n\n      const filtered = urls.filter((val) => {\n        try {\n          // eslint-disable-next-line no-new\n          new URL(val);\n\n          return false;\n        } catch (err) {\n          // invalid url\n          return true;\n        }\n      });\n\n      const filteredLength = filtered.length;\n\n      if (filteredLength === 0) {\n        return true;\n      }\n\n      const errorMessage =\n        filteredLength > 1\n          ? 'form.upload-url.error.url.invalids'\n          : 'form.upload-url.error.url.invalid';\n\n      return this.createError({\n        path: this.path,\n        message: getTrad(errorMessage),\n        params: { number: filtered.length },\n      });\n    },\n  }),\n});\n","import React, { useState } from 'react';\n\nimport { Box, Button, ModalFooter, Textarea } from '@strapi/design-system';\nimport { Form, useTracking } from '@strapi/helper-plugin';\nimport { Formik } from 'formik';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport getTrad from '../../../utils/getTrad';\nimport { urlsToAssets } from '../../../utils/urlsToAssets';\nimport { urlSchema } from '../../../utils/urlYupSchema';\n\nexport const FromUrlForm = ({ onClose, onAddAsset, trackedLocation }) => {\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState(undefined);\n  const { formatMessage } = useIntl();\n  const { trackUsage } = useTracking();\n\n  const handleSubmit = async ({ urls }) => {\n    setLoading(true);\n    const urlArray = urls.split(/\\r?\\n/);\n    try {\n      const assets = await urlsToAssets(urlArray);\n\n      if (trackedLocation) {\n        trackUsage('didSelectFile', { source: 'url', location: trackedLocation });\n      }\n\n      // no need to set the loading to false since the component unmounts\n      onAddAsset(assets);\n    } catch (e) {\n      setError(e);\n      setLoading(false);\n    }\n  };\n\n  return (\n    <Formik\n      enableReinitialize\n      initialValues={{\n        urls: '',\n      }}\n      onSubmit={handleSubmit}\n      validationSchema={urlSchema}\n      validateOnChange={false}\n    >\n      {({ values, errors, handleChange }) => (\n        <Form noValidate>\n          <Box paddingLeft={8} paddingRight={8} paddingBottom={6} paddingTop={6}>\n            <Textarea\n              label={formatMessage({ id: getTrad('input.url.label'), defaultMessage: 'URL' })}\n              id=\"urls\"\n              hint={formatMessage({\n                id: getTrad('input.url.description'),\n                defaultMessage: 'Separate your URL links by a carriage return.',\n              })}\n              error={\n                error?.message ||\n                (errors.urls\n                  ? formatMessage({ id: errors.urls, defaultMessage: 'An error occured' })\n                  : undefined)\n              }\n              onChange={handleChange}\n              value={values.urls}\n            />\n          </Box>\n\n          <ModalFooter\n            startActions={\n              <Button onClick={onClose} variant=\"tertiary\">\n                {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'cancel' })}\n              </Button>\n            }\n            endActions={\n              <Button type=\"submit\" loading={loading}>\n                {formatMessage({\n                  id: getTrad('button.next'),\n                  defaultMessage: 'Next',\n                })}\n              </Button>\n            }\n          />\n        </Form>\n      )}\n    </Formik>\n  );\n};\n\nFromUrlForm.defaultProps = {\n  trackedLocation: undefined,\n};\n\nFromUrlForm.propTypes = {\n  onClose: PropTypes.func.isRequired,\n  onAddAsset: PropTypes.func.isRequired,\n  trackedLocation: PropTypes.string,\n};\n","import React from 'react';\n\nimport {\n  Box,\n  Divider,\n  ModalHeader,\n  Tab,\n  TabGroup,\n  TabPanel,\n  TabPanels,\n  Tabs,\n  Typography,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport getTrad from '../../../utils/getTrad';\n\nimport { FromComputerForm } from './FromComputerForm';\nimport { FromUrlForm } from './FromUrlForm';\n\nexport const AddAssetStep = ({ onClose, onAddAsset, trackedLocation }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <>\n      <ModalHeader>\n        <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n          {formatMessage({\n            id: getTrad('header.actions.add-assets'),\n            defaultMessage: 'Add new assets',\n          })}\n        </Typography>\n      </ModalHeader>\n\n      <TabGroup\n        label={formatMessage({\n          id: getTrad('tabs.title'),\n          defaultMessage: 'How do you want to upload your assets?',\n        })}\n        variant=\"simple\"\n      >\n        <Box paddingLeft={8} paddingRight={8} paddingTop={6}>\n          <Tabs>\n            <Tab>\n              {formatMessage({\n                id: getTrad('modal.nav.computer'),\n                defaultMessage: 'From computer',\n              })}\n            </Tab>\n            <Tab>\n              {formatMessage({\n                id: getTrad('modal.nav.url'),\n                defaultMessage: 'From URL',\n              })}\n            </Tab>\n          </Tabs>\n\n          <Divider />\n        </Box>\n        <TabPanels>\n          <TabPanel>\n            <FromComputerForm\n              onClose={onClose}\n              onAddAssets={onAddAsset}\n              trackedLocation={trackedLocation}\n            />\n          </TabPanel>\n          <TabPanel>\n            <FromUrlForm\n              onClose={onClose}\n              onAddAsset={onAddAsset}\n              trackedLocation={trackedLocation}\n            />\n          </TabPanel>\n        </TabPanels>\n      </TabGroup>\n    </>\n  );\n};\n\nAddAssetStep.defaultProps = {\n  trackedLocation: undefined,\n};\n\nAddAssetStep.propTypes = {\n  onClose: PropTypes.func.isRequired,\n  onAddAsset: PropTypes.func.isRequired,\n  trackedLocation: PropTypes.string,\n};\n","import React, { useEffect } from 'react';\n\nimport {\n  Box,\n  Card,\n  CardBadge,\n  CardBody,\n  CardContent,\n  CardHeader,\n  CardSubtitle,\n  CardTitle,\n  Flex,\n  Typography,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { AssetType } from '../../constants';\nimport { useUpload } from '../../hooks/useUpload';\nimport { getTrad } from '../../utils';\nimport { UploadProgress } from '../UploadProgress';\n\nconst UploadProgressWrapper = styled.div`\n  height: ${88 / 16}rem;\n  width: 100%;\n`;\n\nconst Extension = styled.span`\n  text-transform: uppercase;\n`;\n\nexport const UploadingAssetCard = ({\n  asset,\n  onCancel,\n  onStatusChange,\n  addUploadedFiles,\n  folderId,\n}) => {\n  const { upload, cancel, error, progress, status } = useUpload();\n  const { formatMessage } = useIntl();\n\n  let badgeContent = formatMessage({\n    id: getTrad('settings.section.doc.label'),\n    defaultMessage: 'Doc',\n  });\n\n  if (asset.type === AssetType.Image) {\n    badgeContent = formatMessage({\n      id: getTrad('settings.section.image.label'),\n      defaultMessage: 'Image',\n    });\n  } else if (asset.type === AssetType.Video) {\n    badgeContent = formatMessage({\n      id: getTrad('settings.section.video.label'),\n      defaultMessage: 'Video',\n    });\n  } else if (asset.type === AssetType.Audio) {\n    badgeContent = formatMessage({\n      id: getTrad('settings.section.audio.label'),\n      defaultMessage: 'Audio',\n    });\n  }\n\n  useEffect(() => {\n    const uploadFile = async () => {\n      const files = await upload(asset, folderId);\n\n      if (addUploadedFiles) {\n        addUploadedFiles(files);\n      }\n    };\n\n    uploadFile();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    onStatusChange(status);\n  }, [status, onStatusChange]);\n\n  const handleCancel = () => {\n    cancel();\n    onCancel(asset.rawFile);\n  };\n\n  return (\n    <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n      <Card borderColor={error ? 'danger600' : 'neutral150'}>\n        <CardHeader>\n          <UploadProgressWrapper>\n            <UploadProgress error={error} onCancel={handleCancel} progress={progress} />\n          </UploadProgressWrapper>\n        </CardHeader>\n        <CardBody>\n          <CardContent>\n            <Box paddingTop={1}>\n              <CardTitle as=\"h2\">{asset.name}</CardTitle>\n            </Box>\n            <CardSubtitle>\n              <Extension>{asset.ext}</Extension>\n            </CardSubtitle>\n          </CardContent>\n          <Flex paddingTop={1} grow={1}>\n            <CardBadge>{badgeContent}</CardBadge>\n          </Flex>\n        </CardBody>\n      </Card>\n      {error ? (\n        <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"danger600\">\n          {formatMessage(\n            error?.response?.data?.error?.message\n              ? {\n                  id: getTrad(`apiError.${error.response.data.error.message}`),\n                  defaultMessage: error.response.data.error.message,\n                  /* See issue: https://github.com/strapi/strapi/issues/13867\n             A proxy might return an error, before the request reaches Strapi\n             and therefore we need to handle errors gracefully.\n          */\n                }\n              : {\n                  id: getTrad('upload.generic-error'),\n                  defaultMessage: 'An error occured while uploading the file.',\n                }\n          )}\n        </Typography>\n      ) : undefined}\n    </Flex>\n  );\n};\n\nUploadingAssetCard.defaultProps = {\n  addUploadedFiles: undefined,\n  folderId: null,\n};\n\nUploadingAssetCard.propTypes = {\n  addUploadedFiles: PropTypes.func,\n  asset: PropTypes.shape({\n    name: PropTypes.string,\n    ext: PropTypes.string,\n    rawFile: PropTypes.instanceOf(File),\n    type: PropTypes.oneOf(Object.values(AssetType)),\n  }).isRequired,\n  folderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  onCancel: PropTypes.func.isRequired,\n  onStatusChange: PropTypes.func.isRequired,\n};\n","import React, { useRef, useState } from 'react';\n\nimport {\n  Button,\n  Flex,\n  Grid,\n  GridItem,\n  KeyboardNavigable,\n  ModalBody,\n  ModalFooter,\n  ModalHeader,\n  Typography,\n} from '@strapi/design-system';\nimport { useTracking } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition } from '../../../constants';\nimport getTrad from '../../../utils/getTrad';\nimport { AssetCard } from '../../AssetCard/AssetCard';\nimport { UploadingAssetCard } from '../../AssetCard/UploadingAssetCard';\n\nconst Status = {\n  Idle: 'IDLE',\n  Uploading: 'UPLOADING',\n  Intermediate: 'INTERMEDIATE',\n};\n\nexport const PendingAssetStep = ({\n  addUploadedFiles,\n  folderId,\n  onClose,\n  onEditAsset,\n  onRemoveAsset,\n  assets,\n  onClickAddAsset,\n  onCancelUpload,\n  onUploadSucceed,\n  trackedLocation,\n}) => {\n  const assetCountRef = useRef(0);\n  const { formatMessage } = useIntl();\n  const { trackUsage } = useTracking();\n  const [uploadStatus, setUploadStatus] = useState(Status.Idle);\n\n  const handleSubmit = async (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    const assetsCountByType = assets.reduce((acc, asset) => {\n      const { type } = asset;\n\n      if (!acc[type]) {\n        acc[type] = 0;\n      }\n\n      // values need to be stringified because Amplitude ignores number values\n      acc[type] = `${parseInt(acc[type], 10) + 1}`;\n\n      return acc;\n    }, {});\n\n    trackUsage('willAddMediaLibraryAssets', {\n      location: trackedLocation,\n      ...assetsCountByType,\n    });\n\n    setUploadStatus(Status.Uploading);\n  };\n\n  const handleStatusChange = (status, file) => {\n    if (status === 'success' || status === 'error') {\n      assetCountRef.current++;\n\n      // There's no \"terminated\" status. When all the files have called their\n      // onUploadSucceed callback, the parent component filters the asset list\n      // and closes the modal when the asset list is empty\n      if (assetCountRef.current === assets.length) {\n        assetCountRef.current = 0;\n        setUploadStatus(Status.Intermediate);\n      }\n    }\n\n    if (status === 'success') {\n      onUploadSucceed(file);\n    }\n  };\n\n  return (\n    <form onSubmit={handleSubmit}>\n      <ModalHeader>\n        <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n          {formatMessage({\n            id: getTrad('header.actions.add-assets'),\n            defaultMessage: 'Add new assets',\n          })}\n        </Typography>\n      </ModalHeader>\n\n      <ModalBody>\n        <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n          <Flex justifyContent=\"space-between\">\n            <Flex direction=\"column\" alignItems=\"stretch\" gap={0}>\n              <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n                {formatMessage(\n                  {\n                    id: getTrad('list.assets.to-upload'),\n                    defaultMessage:\n                      '{number, plural, =0 {No asset} one {1 asset} other {# assets}} ready to upload',\n                  },\n                  { number: assets.length }\n                )}\n              </Typography>\n              <Typography variant=\"pi\" textColor=\"neutral600\">\n                {formatMessage({\n                  id: getTrad('modal.upload-list.sub-header-subtitle'),\n                  defaultMessage: 'Manage the assets before adding them to the Media Library',\n                })}\n              </Typography>\n            </Flex>\n            <Button size=\"S\" onClick={onClickAddAsset}>\n              {formatMessage({\n                id: getTrad('header.actions.add-assets'),\n                defaultMessage: 'Add new assets',\n              })}\n            </Button>\n          </Flex>\n          <KeyboardNavigable tagName=\"article\">\n            <Grid gap={4}>\n              {assets.map((asset) => {\n                const assetKey = asset.url;\n\n                if (uploadStatus === Status.Uploading || uploadStatus === Status.Intermediate) {\n                  return (\n                    <GridItem col={4} key={assetKey}>\n                      <UploadingAssetCard\n                        // Props used to store the newly uploaded files\n                        addUploadedFiles={addUploadedFiles}\n                        asset={asset}\n                        id={assetKey}\n                        onCancel={onCancelUpload}\n                        onStatusChange={(status) => handleStatusChange(status, asset.rawFile)}\n                        size=\"S\"\n                        folderId={folderId}\n                      />\n                    </GridItem>\n                  );\n                }\n\n                return (\n                  <GridItem col={4} key={assetKey}>\n                    <AssetCard\n                      asset={asset}\n                      size=\"S\"\n                      key={assetKey}\n                      local\n                      alt={asset.name}\n                      onEdit={onEditAsset}\n                      onRemove={onRemoveAsset}\n                    />\n                  </GridItem>\n                );\n              })}\n            </Grid>\n          </KeyboardNavigable>\n        </Flex>\n      </ModalBody>\n\n      <ModalFooter\n        startActions={\n          <Button onClick={onClose} variant=\"tertiary\">\n            {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'cancel' })}\n          </Button>\n        }\n        endActions={\n          <Button type=\"submit\" loading={uploadStatus === Status.Uploading}>\n            {formatMessage(\n              {\n                id: getTrad('modal.upload-list.footer.button'),\n                defaultMessage:\n                  'Upload {number, plural, one {# asset} other {# assets}} to the library',\n              },\n              { number: assets.length }\n            )}\n          </Button>\n        }\n      />\n    </form>\n  );\n};\n\nPendingAssetStep.defaultProps = {\n  addUploadedFiles: undefined,\n  folderId: null,\n  trackedLocation: undefined,\n};\n\nPendingAssetStep.propTypes = {\n  addUploadedFiles: PropTypes.func,\n  assets: PropTypes.arrayOf(AssetDefinition).isRequired,\n  folderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  onClose: PropTypes.func.isRequired,\n  onEditAsset: PropTypes.func.isRequired,\n  onRemoveAsset: PropTypes.func.isRequired,\n  onClickAddAsset: PropTypes.func.isRequired,\n  onUploadSucceed: PropTypes.func.isRequired,\n  onCancelUpload: PropTypes.func.isRequired,\n  trackedLocation: PropTypes.string,\n};\n","import React, { useState } from 'react';\n\nimport { ModalLayout } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition } from '../../constants';\nimport { EditAssetDialog } from '../EditAssetDialog';\n\nimport { AddAssetStep } from './AddAssetStep/AddAssetStep';\nimport { PendingAssetStep } from './PendingAssetStep/PendingAssetStep';\n\nconst Steps = {\n  AddAsset: 'AddAsset',\n  PendingAsset: 'PendingAsset',\n};\n\nexport const UploadAssetDialog = ({\n  initialAssetsToAdd,\n  folderId,\n  onClose,\n  addUploadedFiles,\n  trackedLocation,\n  validateAssetsTypes = (_, cb) => cb(),\n}) => {\n  const { formatMessage } = useIntl();\n  const [step, setStep] = useState(initialAssetsToAdd ? Steps.PendingAsset : Steps.AddAsset);\n  const [assets, setAssets] = useState(initialAssetsToAdd || []);\n  const [assetToEdit, setAssetToEdit] = useState(undefined);\n\n  const handleAddToPendingAssets = (nextAssets) => {\n    validateAssetsTypes(nextAssets, () => {\n      setAssets((prevAssets) => prevAssets.concat(nextAssets));\n      setStep(Steps.PendingAsset);\n    });\n  };\n\n  const moveToAddAsset = () => {\n    setStep(Steps.AddAsset);\n  };\n\n  const handleCancelUpload = (file) => {\n    const nextAssets = assets.filter((asset) => asset.rawFile !== file);\n    setAssets(nextAssets);\n\n    // When there's no asset, transition to the AddAsset step\n    if (nextAssets.length === 0) {\n      moveToAddAsset();\n    }\n  };\n\n  const handleUploadSuccess = (file) => {\n    const nextAssets = assets.filter((asset) => asset.rawFile !== file);\n    setAssets(nextAssets);\n\n    if (nextAssets.length === 0) {\n      onClose();\n    }\n  };\n\n  const handleAssetEditValidation = (nextAsset) => {\n    if (nextAsset) {\n      const nextAssets = assets.map((asset) => (asset === assetToEdit ? nextAsset : asset));\n      setAssets(nextAssets);\n    }\n\n    setAssetToEdit(undefined);\n  };\n\n  const handleClose = () => {\n    if (step === Steps.PendingAsset && assets.length > 0) {\n      // eslint-disable-next-line no-alert\n      const confirm = window.confirm(\n        formatMessage({\n          id: 'window.confirm.close-modal.files',\n          defaultMessage: 'Are you sure? You have some files that have not been uploaded yet.',\n        })\n      );\n\n      if (confirm) {\n        onClose();\n      }\n    } else {\n      onClose();\n    }\n  };\n\n  const handleRemoveAsset = (assetToRemove) => {\n    const nextAssets = assets.filter((asset) => asset !== assetToRemove);\n    setAssets(nextAssets);\n  };\n\n  return (\n    <ModalLayout onClose={handleClose} labelledBy=\"title\">\n      {step === Steps.AddAsset && (\n        <AddAssetStep\n          onClose={onClose}\n          onAddAsset={handleAddToPendingAssets}\n          trackedLocation={trackedLocation}\n        />\n      )}\n\n      {step === Steps.PendingAsset && (\n        <PendingAssetStep\n          onClose={handleClose}\n          assets={assets}\n          onEditAsset={setAssetToEdit}\n          onRemoveAsset={handleRemoveAsset}\n          onClickAddAsset={moveToAddAsset}\n          onCancelUpload={handleCancelUpload}\n          onUploadSucceed={handleUploadSuccess}\n          initialAssetsToAdd={initialAssetsToAdd}\n          addUploadedFiles={addUploadedFiles}\n          folderId={folderId}\n          trackedLocation={trackedLocation}\n        />\n      )}\n\n      {assetToEdit && (\n        <EditAssetDialog\n          onClose={handleAssetEditValidation}\n          asset={assetToEdit}\n          canUpdate\n          canCopyLink={false}\n          canDownload={false}\n          trackedLocation={trackedLocation}\n        />\n      )}\n    </ModalLayout>\n  );\n};\n\nUploadAssetDialog.defaultProps = {\n  addUploadedFiles: undefined,\n  folderId: null,\n  initialAssetsToAdd: undefined,\n  onClose() {},\n  trackedLocation: undefined,\n  validateAssetsTypes: undefined,\n};\n\nUploadAssetDialog.propTypes = {\n  addUploadedFiles: PropTypes.func,\n  folderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  initialAssetsToAdd: PropTypes.arrayOf(AssetDefinition),\n  onClose: PropTypes.func,\n  trackedLocation: PropTypes.string,\n  validateAssetsTypes: PropTypes.func,\n};\n","import React, { useState } from 'react';\n\nimport PropTypes from 'prop-types';\n\nimport { AssetDialog } from '../AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog';\nimport { UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog';\n\nconst STEPS = {\n  AssetSelect: 'SelectAsset',\n  AssetUpload: 'UploadAsset',\n  FolderCreate: 'FolderCreate',\n};\n\nexport const MediaLibraryDialog = ({ onClose, onSelectAssets, allowedTypes }) => {\n  const [step, setStep] = useState(STEPS.AssetSelect);\n  const [folderId, setFolderId] = useState(null);\n\n  switch (step) {\n    case STEPS.AssetSelect:\n      return (\n        <AssetDialog\n          allowedTypes={allowedTypes}\n          folderId={folderId}\n          onClose={() => {\n            setStep(undefined);\n            setFolderId(null);\n            onClose();\n          }}\n          onValidate={onSelectAssets}\n          onAddAsset={() => setStep(STEPS.AssetUpload)}\n          onAddFolder={() => setStep(STEPS.FolderCreate)}\n          onChangeFolder={(folderId) => setFolderId(folderId)}\n          multiple\n        />\n      );\n\n    case STEPS.FolderCreate:\n      return (\n        <EditFolderDialog onClose={() => setStep(STEPS.AssetSelect)} parentFolderId={folderId} />\n      );\n\n    default:\n      return <UploadAssetDialog onClose={() => setStep(STEPS.AssetSelect)} folderId={folderId} />;\n  }\n};\n\nMediaLibraryDialog.defaultProps = {\n  allowedTypes: ['files', 'images', 'videos', 'audios'],\n};\n\nMediaLibraryDialog.propTypes = {\n  allowedTypes: PropTypes.arrayOf(PropTypes.string),\n  onClose: PropTypes.func.isRequired,\n  onSelectAssets: PropTypes.func.isRequired,\n};\n","import React from 'react';\n\nimport { Box, Flex } from '@strapi/design-system';\nimport { File, FilePdf } from '@strapi/icons';\nimport styled from 'styled-components';\n\nimport { AssetDefinition, AssetType } from '../../../constants';\nimport { createAssetUrl } from '../../../utils';\nimport { AudioPreview } from '../../AssetCard/AudioPreview';\nimport { VideoPreview } from '../../AssetCard/VideoPreview';\n\nconst DocAsset = styled(Flex)`\n  background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);\n`;\n\nconst VideoPreviewWrapper = styled(Box)`\n  canvas,\n  video {\n    max-width: 100%;\n    height: 124px;\n  }\n`;\n\nconst AudioPreviewWrapper = styled(Box)`\n  canvas,\n  audio {\n    max-width: 100%;\n  }\n`;\n\nexport const CarouselAsset = ({ asset }) => {\n  if (asset.mime.includes(AssetType.Video)) {\n    return (\n      <VideoPreviewWrapper height=\"100%\">\n        <VideoPreview\n          url={createAssetUrl(asset, true)}\n          mime={asset.mime}\n          alt={asset.alternativeText || asset.name}\n        />\n      </VideoPreviewWrapper>\n    );\n  }\n\n  if (asset.mime.includes(AssetType.Audio)) {\n    return (\n      <AudioPreviewWrapper>\n        <AudioPreview url={createAssetUrl(asset, true)} alt={asset.alternativeText || asset.name} />\n      </AudioPreviewWrapper>\n    );\n  }\n\n  if (asset.mime.includes(AssetType.Image)) {\n    return (\n      <Box\n        as=\"img\"\n        maxHeight=\"100%\"\n        maxWidth=\"100%\"\n        src={createAssetUrl(asset, true)}\n        alt={asset.alternativeText || asset.name}\n      />\n    );\n  }\n\n  return (\n    <DocAsset width=\"100%\" height=\"100%\" justifyContent=\"center\" hasRadius>\n      {asset.ext.includes('pdf') ? (\n        <FilePdf aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n      ) : (\n        <File aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n      )}\n    </DocAsset>\n  );\n};\n\nCarouselAsset.propTypes = {\n  asset: AssetDefinition.isRequired,\n};\n","import React from 'react';\n\nimport { CarouselActions, IconButton } from '@strapi/design-system';\nimport { prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition } from '../../../constants';\nimport getTrad from '../../../utils/getTrad';\nimport { CopyLinkButton } from '../../CopyLinkButton';\n\nexport const CarouselAssetActions = ({ asset, onDeleteAsset, onAddAsset, onEditAsset }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <CarouselActions>\n      {onAddAsset && (\n        <IconButton\n          label={formatMessage({\n            id: getTrad('control-card.add'),\n            defaultMessage: 'Add',\n          })}\n          icon={<Plus />}\n          onClick={() => onAddAsset(asset)}\n        />\n      )}\n\n      <CopyLinkButton url={prefixFileUrlWithBackendUrl(asset.url)} />\n\n      {onDeleteAsset && (\n        <IconButton\n          label={formatMessage({\n            id: 'global.delete',\n            defaultMessage: 'Delete',\n          })}\n          icon={<Trash />}\n          onClick={() => onDeleteAsset(asset)}\n        />\n      )}\n\n      {onEditAsset && (\n        <IconButton\n          label={formatMessage({\n            id: getTrad('control-card.edit'),\n            defaultMessage: 'edit',\n          })}\n          icon={<Pencil />}\n          onClick={onEditAsset}\n        />\n      )}\n    </CarouselActions>\n  );\n};\n\nCarouselAssetActions.defaultProps = {\n  onAddAsset: undefined,\n  onDeleteAsset: undefined,\n  onEditAsset: undefined,\n};\n\nCarouselAssetActions.propTypes = {\n  asset: AssetDefinition.isRequired,\n  onAddAsset: PropTypes.func,\n  onEditAsset: PropTypes.func,\n  onDeleteAsset: PropTypes.func,\n};\n","import React, { useState } from 'react';\n\nimport { Flex, Icon, Typography } from '@strapi/design-system';\nimport { PicturePlus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { AssetSource } from '../../../constants';\nimport getTrad from '../../../utils/getTrad';\nimport { rawFileToAsset } from '../../../utils/rawFileToAsset';\n\nconst TextAlignTypography = styled(Typography)`\n  align-items: center;\n`;\n\nexport const EmptyStateAsset = ({ disabled, onClick, onDropAsset }) => {\n  const { formatMessage } = useIntl();\n  const [dragOver, setDragOver] = useState(false);\n\n  const handleDragEnter = (e) => {\n    e.preventDefault();\n    setDragOver(true);\n  };\n\n  const handleDragLeave = (e) => {\n    if (!e.currentTarget.contains(e.relatedTarget)) {\n      setDragOver(false);\n    }\n  };\n\n  const handleDragOver = (e) => {\n    e.preventDefault();\n  };\n\n  const handleDrop = (e) => {\n    e.preventDefault();\n\n    if (e?.dataTransfer?.files) {\n      const files = e.dataTransfer.files;\n      const assets = [];\n\n      for (let i = 0; i < files.length; i++) {\n        const file = files.item(i);\n        const asset = rawFileToAsset(file, AssetSource.Computer);\n\n        assets.push(asset);\n      }\n\n      onDropAsset(assets);\n    }\n\n    setDragOver(false);\n  };\n\n  return (\n    <Flex\n      borderStyle={dragOver ? 'dashed' : undefined}\n      borderWidth={dragOver ? '1px' : undefined}\n      borderColor={dragOver ? 'primary600' : undefined}\n      direction=\"column\"\n      justifyContent=\"center\"\n      alignItems=\"center\"\n      height=\"100%\"\n      width=\"100%\"\n      as=\"button\"\n      type=\"button\"\n      disabled={disabled}\n      onClick={onClick}\n      onDragEnter={handleDragEnter}\n      onDragLeave={handleDragLeave}\n      onDragOver={handleDragOver}\n      onDrop={handleDrop}\n      style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n    >\n      <Icon\n        as={PicturePlus}\n        aria-hidden\n        width=\"30px\"\n        height=\"24px\"\n        color={disabled ? 'neutral400' : 'primary600'}\n        marginBottom={3}\n      />\n      <TextAlignTypography\n        variant=\"pi\"\n        fontWeight=\"bold\"\n        textColor=\"neutral600\"\n        style={{ textAlign: 'center' }}\n        as=\"span\"\n      >\n        {formatMessage({\n          id: getTrad('mediaLibraryInput.placeholder'),\n          defaultMessage: 'Click to add an asset or drag and drop one in this area',\n        })}\n      </TextAlignTypography>\n    </Flex>\n  );\n};\n\nEmptyStateAsset.defaultProps = {\n  disabled: false,\n  onDropAsset: undefined,\n};\n\nEmptyStateAsset.propTypes = {\n  disabled: PropTypes.bool,\n  onClick: PropTypes.func.isRequired,\n  onDropAsset: PropTypes.func,\n};\n","import React, { forwardRef, useState } from 'react';\n\nimport { CarouselInput, CarouselSlide } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition } from '../../../constants';\nimport getTrad from '../../../utils/getTrad';\nimport { EditAssetDialog } from '../../EditAssetDialog';\n\nimport { CarouselAsset } from './CarouselAsset';\nimport { CarouselAssetActions } from './CarouselAssetActions';\nimport { EmptyStateAsset } from './EmptyStateAsset';\n\nexport const CarouselAssets = forwardRef(\n  (\n    {\n      assets,\n      disabled,\n      error,\n      hint,\n      label,\n      labelAction,\n      onAddAsset,\n      onDeleteAsset,\n      onDeleteAssetFromMediaLibrary,\n      onDropAsset,\n      onEditAsset,\n      onNext,\n      onPrevious,\n      required,\n      selectedAssetIndex,\n      trackedLocation,\n    },\n    forwardedRef\n  ) => {\n    const { formatMessage } = useIntl();\n    const [isEditingAsset, setIsEditingAsset] = useState(false);\n\n    const currentAsset = assets[selectedAssetIndex];\n\n    return (\n      <>\n        <CarouselInput\n          ref={forwardedRef}\n          label={label}\n          labelAction={labelAction}\n          secondaryLabel={currentAsset?.name}\n          selectedSlide={selectedAssetIndex}\n          previousLabel={formatMessage({\n            id: getTrad('mediaLibraryInput.actions.previousSlide'),\n            defaultMessage: 'Previous slide',\n          })}\n          nextLabel={formatMessage({\n            id: getTrad('mediaLibraryInput.actions.nextSlide'),\n            defaultMessage: 'Next slide',\n          })}\n          onNext={onNext}\n          onPrevious={onPrevious}\n          hint={hint}\n          error={error}\n          required={required}\n          actions={\n            currentAsset ? (\n              <CarouselAssetActions\n                asset={currentAsset}\n                onDeleteAsset={disabled ? undefined : onDeleteAsset}\n                onAddAsset={disabled ? undefined : onAddAsset}\n                onEditAsset={onEditAsset ? () => setIsEditingAsset(true) : undefined}\n              />\n            ) : undefined\n          }\n        >\n          {assets.length === 0 ? (\n            <CarouselSlide\n              label={formatMessage(\n                {\n                  id: getTrad('mediaLibraryInput.slideCount'),\n                  defaultMessage: '{n} of {m} slides',\n                },\n                { n: 1, m: 1 }\n              )}\n            >\n              <EmptyStateAsset disabled={disabled} onClick={onAddAsset} onDropAsset={onDropAsset} />\n            </CarouselSlide>\n          ) : (\n            assets.map((asset, index) => (\n              <CarouselSlide\n                key={asset.id}\n                label={formatMessage(\n                  {\n                    id: getTrad('mediaLibraryInput.slideCount'),\n                    defaultMessage: '{n} of {m} slides',\n                  },\n                  { n: index + 1, m: assets.length }\n                )}\n              >\n                <CarouselAsset asset={asset} />\n              </CarouselSlide>\n            ))\n          )}\n        </CarouselInput>\n\n        {isEditingAsset && (\n          <EditAssetDialog\n            onClose={(editedAsset) => {\n              setIsEditingAsset(false);\n\n              // The asset has been deleted\n              if (editedAsset === null) {\n                onDeleteAssetFromMediaLibrary();\n              }\n\n              if (editedAsset) {\n                onEditAsset(editedAsset);\n              }\n            }}\n            asset={currentAsset}\n            canUpdate\n            canCopyLink\n            canDownload\n            trackedLocation={trackedLocation}\n          />\n        )}\n      </>\n    );\n  }\n);\n\nCarouselAssets.defaultProps = {\n  disabled: false,\n  error: undefined,\n  hint: undefined,\n  labelAction: undefined,\n  onDropAsset: undefined,\n  required: false,\n  trackedLocation: undefined,\n};\n\nCarouselAssets.propTypes = {\n  assets: PropTypes.arrayOf(AssetDefinition).isRequired,\n  disabled: PropTypes.bool,\n  error: PropTypes.string,\n  hint: PropTypes.string,\n  label: PropTypes.string.isRequired,\n  labelAction: PropTypes.node,\n  onAddAsset: PropTypes.func.isRequired,\n  onDeleteAsset: PropTypes.func.isRequired,\n  onDeleteAssetFromMediaLibrary: PropTypes.func.isRequired,\n  onDropAsset: PropTypes.func,\n  onEditAsset: PropTypes.func.isRequired,\n  onNext: PropTypes.func.isRequired,\n  onPrevious: PropTypes.func.isRequired,\n  required: PropTypes.bool,\n  selectedAssetIndex: PropTypes.number.isRequired,\n  trackedLocation: PropTypes.string,\n};\n","import React, { forwardRef, useEffect, useState } from 'react';\n\nimport { useNotification } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition } from '../../constants';\nimport getAllowedFiles from '../../utils/getAllowedFiles';\nimport getTrad from '../../utils/getTrad';\nimport { AssetDialog } from '../AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog';\nimport { UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets } from './Carousel/CarouselAssets';\n\nconst STEPS = {\n  AssetSelect: 'SelectAsset',\n  AssetUpload: 'UploadAsset',\n  FolderCreate: 'FolderCreate',\n};\n\nexport const MediaLibraryInput = forwardRef(\n  (\n    {\n      attribute: { allowedTypes },\n      intlLabel,\n      description,\n      disabled,\n      error,\n      labelAction,\n      multiple,\n      name,\n      onChange,\n      value,\n      required,\n    },\n    forwardedRef\n  ) => {\n    const fieldAllowedTypes = allowedTypes || ['files', 'images', 'videos', 'audios'];\n    const [uploadedFiles, setUploadedFiles] = useState([]);\n    const [step, setStep] = useState(undefined);\n    const [selectedIndex, setSelectedIndex] = useState(0);\n    const [droppedAssets, setDroppedAssets] = useState();\n    const [folderId, setFolderId] = useState(null);\n    const { formatMessage } = useIntl();\n    const toggleNotification = useNotification();\n\n    useEffect(() => {\n      // Clear the uploaded files on close\n      if (step === undefined) {\n        setUploadedFiles([]);\n      }\n    }, [step]);\n\n    const selectedAssets = Array.isArray(value) ? value : [value];\n\n    const handleValidation = (nextSelectedAssets) => {\n      onChange({\n        target: { name, value: multiple ? nextSelectedAssets : nextSelectedAssets[0] },\n      });\n      setStep(undefined);\n    };\n\n    const handleDeleteAssetFromMediaLibrary = () => {\n      let nextValue;\n\n      if (multiple) {\n        const nextSelectedAssets = selectedAssets.filter(\n          (_, assetIndex) => assetIndex !== selectedIndex\n        );\n        nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n      } else {\n        nextValue = null;\n      }\n\n      onChange({\n        target: { name, value: nextValue },\n      });\n\n      setSelectedIndex(0);\n    };\n\n    const handleDeleteAsset = (asset) => {\n      let nextValue;\n\n      if (multiple) {\n        const nextSelectedAssets = selectedAssets.filter((prevAsset) => prevAsset.id !== asset.id);\n\n        nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n      } else {\n        nextValue = null;\n      }\n\n      onChange({\n        target: { name, value: nextValue },\n      });\n\n      setSelectedIndex(0);\n    };\n\n    const handleAssetEdit = (asset) => {\n      const nextSelectedAssets = selectedAssets.map((prevAsset) =>\n        prevAsset.id === asset.id ? asset : prevAsset\n      );\n\n      onChange({\n        target: { name, value: multiple ? nextSelectedAssets : nextSelectedAssets[0] },\n      });\n    };\n\n    const validateAssetsTypes = (assets, callback) => {\n      const allowedAssets = getAllowedFiles(fieldAllowedTypes, assets);\n\n      if (allowedAssets.length > 0) {\n        callback(allowedAssets);\n      } else {\n        toggleNotification({\n          type: 'warning',\n          timeout: 4000,\n          message: {\n            id: getTrad('input.notification.not-supported'),\n            defaultMessage: `You can't upload this type of file.`,\n            values: {\n              fileTypes: fieldAllowedTypes.join(','),\n            },\n          },\n        });\n      }\n    };\n\n    const handleAssetDrop = (assets) => {\n      validateAssetsTypes(assets, (allowedAssets) => {\n        setDroppedAssets(allowedAssets);\n        setStep(STEPS.AssetUpload);\n      });\n    };\n\n    let label = intlLabel.id ? formatMessage(intlLabel) : '';\n\n    if (multiple && selectedAssets.length > 0) {\n      label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;\n    }\n\n    const handleNext = () => {\n      setSelectedIndex((current) => (current < selectedAssets.length - 1 ? current + 1 : 0));\n    };\n\n    const handlePrevious = () => {\n      setSelectedIndex((current) => (current > 0 ? current - 1 : selectedAssets.length - 1));\n    };\n\n    const handleFilesUploadSucceeded = (uploadedFiles) => {\n      setUploadedFiles((prev) => [...prev, ...uploadedFiles]);\n    };\n\n    const hint = description\n      ? formatMessage(\n          { id: description.id, defaultMessage: description.defaultMessage },\n          { ...description.values }\n        )\n      : '';\n\n    let initiallySelectedAssets = selectedAssets;\n\n    if (uploadedFiles.length > 0) {\n      const allowedUploadedFiles = getAllowedFiles(fieldAllowedTypes, uploadedFiles);\n\n      initiallySelectedAssets = multiple\n        ? [...allowedUploadedFiles, ...selectedAssets]\n        : [allowedUploadedFiles[0]];\n    }\n\n    return (\n      <>\n        <CarouselAssets\n          ref={forwardedRef}\n          assets={selectedAssets}\n          disabled={disabled}\n          label={label}\n          labelAction={labelAction}\n          onDeleteAsset={handleDeleteAsset}\n          onDeleteAssetFromMediaLibrary={handleDeleteAssetFromMediaLibrary}\n          onAddAsset={() => setStep(STEPS.AssetSelect)}\n          onDropAsset={handleAssetDrop}\n          onEditAsset={handleAssetEdit}\n          onNext={handleNext}\n          onPrevious={handlePrevious}\n          error={error}\n          hint={hint}\n          required={required}\n          selectedAssetIndex={selectedIndex}\n          trackedLocation=\"content-manager\"\n        />\n\n        {step === STEPS.AssetSelect && (\n          <AssetDialog\n            allowedTypes={fieldAllowedTypes}\n            initiallySelectedAssets={initiallySelectedAssets}\n            folderId={folderId}\n            onClose={() => {\n              setStep(undefined);\n              setFolderId(null);\n            }}\n            onValidate={handleValidation}\n            multiple={multiple}\n            onAddAsset={() => setStep(STEPS.AssetUpload)}\n            onAddFolder={() => setStep(STEPS.FolderCreate)}\n            onChangeFolder={(folder) => setFolderId(folder)}\n            trackedLocation=\"content-manager\"\n          />\n        )}\n\n        {step === STEPS.AssetUpload && (\n          <UploadAssetDialog\n            onClose={() => setStep(STEPS.AssetSelect)}\n            initialAssetsToAdd={droppedAssets}\n            addUploadedFiles={handleFilesUploadSucceeded}\n            trackedLocation=\"content-manager\"\n            folderId={folderId}\n            validateAssetsTypes={validateAssetsTypes}\n          />\n        )}\n\n        {step === STEPS.FolderCreate && (\n          <EditFolderDialog onClose={() => setStep(STEPS.AssetSelect)} parentFolderId={folderId} />\n        )}\n      </>\n    );\n  }\n);\n\nMediaLibraryInput.defaultProps = {\n  attribute: { allowedTypes: ['videos', 'files', 'images', 'audios'] },\n  disabled: false,\n  description: undefined,\n  error: undefined,\n  intlLabel: undefined,\n  labelAction: undefined,\n  multiple: false,\n  required: false,\n  value: [],\n};\n\nMediaLibraryInput.propTypes = {\n  attribute: PropTypes.shape({ allowedTypes: PropTypes.arrayOf(PropTypes.string) }),\n  disabled: PropTypes.bool,\n  description: PropTypes.shape({\n    id: PropTypes.string,\n    defaultMessage: PropTypes.string,\n    values: PropTypes.shape({}),\n  }),\n  error: PropTypes.string,\n  intlLabel: PropTypes.shape({ id: PropTypes.string, defaultMessage: PropTypes.string }),\n  labelAction: PropTypes.node,\n  multiple: PropTypes.bool,\n  onChange: PropTypes.func.isRequired,\n  name: PropTypes.string.isRequired,\n  required: PropTypes.bool,\n  value: PropTypes.oneOfType([PropTypes.arrayOf(AssetDefinition), AssetDefinition]),\n};\n","/**\n *\n * PluginIcon\n *\n */\n\nimport React from 'react';\n\nimport { Landscape } from '@strapi/icons';\n\nconst PluginIcon = () => <Landscape />;\n\nexport default PluginIcon;\n","// NOTE TO PLUGINS DEVELOPERS:\n// If you modify this file by adding new options to the plugin entry point\n// Here's the file: strapi/docs/3.0.0-beta.x/plugin-development/frontend-field-api.md\n// Here's the file: strapi/docs/3.0.0-beta.x/guides/registering-a-field-in-admin.md\n// Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated\n// IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED\nimport { prefixPluginTranslations } from '@strapi/helper-plugin';\n\nimport pluginPkg from '../../package.json';\n\nimport { MediaLibraryDialog } from './components/MediaLibraryDialog';\nimport { MediaLibraryInput } from './components/MediaLibraryInput';\nimport PluginIcon from './components/PluginIcon';\nimport { PERMISSIONS } from './constants';\nimport pluginId from './pluginId';\nimport getTrad from './utils/getTrad';\n\nconst name = pluginPkg.strapi.name;\n\nexport default {\n  register(app) {\n    app.addMenuLink({\n      to: `/plugins/${pluginId}`,\n      icon: PluginIcon,\n      intlLabel: {\n        id: `${pluginId}.plugin.name`,\n        defaultMessage: 'Media Library',\n      },\n      permissions: PERMISSIONS.main,\n      async Component() {\n        const component = await import('./pages/App');\n\n        return component;\n      },\n    });\n\n    app.addFields({ type: 'media', Component: MediaLibraryInput });\n    app.addComponents([{ name: 'media-library', Component: MediaLibraryDialog }]);\n\n    app.registerPlugin({\n      id: pluginId,\n      name,\n    });\n  },\n  bootstrap(app) {\n    app.addSettingsLink('global', {\n      id: 'media-library-settings',\n      intlLabel: {\n        id: getTrad('plugin.name'),\n        defaultMessage: 'Media Library',\n      },\n      to: '/settings/media-library',\n      async Component() {\n        const component = await import('./pages/SettingsPage');\n\n        return component;\n      },\n      permissions: PERMISSIONS.settings,\n    });\n  },\n  async registerTrads({ locales }) {\n    const importedTrads = await Promise.all(\n      locales.map((locale) => {\n        return import(`./translations/${locale}.json`)\n          .then(({ default: data }) => {\n            return {\n              data: prefixPluginTranslations(data, pluginId),\n              locale,\n            };\n          })\n          .catch(() => {\n            return {\n              data: {},\n              locale,\n            };\n          });\n      })\n    );\n\n    return Promise.resolve(importedTrads);\n  },\n};\n"],"names":["id","data","endpoint","index","option","value","options","Select","name","LinkIcon","CardAsset","File","Wrapper","UploadProgressWrapper","DownloadIcon","Resize","LoadingBody","Extension","Card","isSelectable","AudioPreviewWrapper","IconWrapper","VideoPreviewWrapper","BaseBreadcrumbs","cells","Link","Option","displayedFilters","filterToAdd","hasFilter","getBreadcrumbDataCM","Grid","folderId","errorsTrads","STEPS","description","uploadedFiles"],"mappings":"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"}