@strapi/upload 5.30.0 → 5.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/ai/components/AIAssetCard.js +27 -7
- package/dist/admin/ai/components/AIAssetCard.js.map +1 -1
- package/dist/admin/ai/components/AIAssetCard.mjs +21 -1
- package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -1
- package/dist/admin/ai/components/AIUploadModal.js +1 -1
- package/dist/admin/ai/components/AIUploadModal.js.map +1 -1
- package/dist/admin/ai/components/AIUploadModal.mjs +1 -1
- package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -1
- package/dist/admin/components/AssetCard/AssetCard.js +5 -4
- package/dist/admin/components/AssetCard/AssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/AssetCard.mjs +2 -1
- package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/AssetCardBase.js +1 -1
- package/dist/admin/components/AssetCard/AssetCardBase.mjs +1 -1
- package/dist/admin/components/AssetCard/DocAssetCard.js +3 -7
- package/dist/admin/components/AssetCard/DocAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/DocAssetCard.mjs +3 -7
- package/dist/admin/components/AssetCard/DocAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.js +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.js +5 -4
- package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.mjs +2 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.js +1 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.mjs +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.js +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js +2 -0
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs +2 -0
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.js +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs +1 -1
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js +1 -1
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs +1 -1
- package/dist/admin/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/admin/components/Breadcrumbs/Breadcrumbs.mjs.map +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +1 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js +1 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs +1 -1
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.js +1 -1
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js +15 -34
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs +15 -34
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +3 -2
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +2 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js +1 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs +1 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.js +1 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs +1 -1
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js +1 -1
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs +1 -1
- package/dist/admin/components/EmptyAssets/EmptyAssetGrid.js.map +1 -1
- package/dist/admin/components/EmptyAssets/EmptyAssetGrid.mjs.map +1 -1
- package/dist/admin/components/FilterList/FilterList.js.map +1 -1
- package/dist/admin/components/FilterList/FilterList.mjs.map +1 -1
- package/dist/admin/components/FilterList/FilterTag.js.map +1 -1
- package/dist/admin/components/FilterList/FilterTag.mjs.map +1 -1
- package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.js.map +1 -1
- package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.mjs.map +1 -1
- package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js.map +1 -1
- package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +8 -10
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +5 -7
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
- package/dist/admin/components/SelectTree/Option.js.map +1 -1
- package/dist/admin/components/SelectTree/Option.mjs.map +1 -1
- package/dist/admin/components/SelectTree/SelectTree.js.map +1 -1
- package/dist/admin/components/SelectTree/SelectTree.mjs.map +1 -1
- package/dist/admin/components/SelectTree/utils/flattenTree.js.map +1 -1
- package/dist/admin/components/SelectTree/utils/flattenTree.mjs.map +1 -1
- package/dist/admin/components/SortPicker/SortPicker.js +1 -0
- package/dist/admin/components/SortPicker/SortPicker.js.map +1 -1
- package/dist/admin/components/SortPicker/SortPicker.mjs +1 -0
- package/dist/admin/components/SortPicker/SortPicker.mjs.map +1 -1
- package/dist/admin/components/TableList/CellContent.js +1 -1
- package/dist/admin/components/TableList/CellContent.mjs +1 -1
- package/dist/admin/components/TableList/PreviewCell.js +5 -4
- package/dist/admin/components/TableList/PreviewCell.js.map +1 -1
- package/dist/admin/components/TableList/PreviewCell.mjs +2 -1
- package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -1
- package/dist/admin/components/TableList/TableList.js +1 -0
- package/dist/admin/components/TableList/TableList.js.map +1 -1
- package/dist/admin/components/TableList/TableList.mjs +1 -0
- package/dist/admin/components/TableList/TableList.mjs.map +1 -1
- package/dist/admin/components/TableList/TableRows.js +1 -0
- package/dist/admin/components/TableList/TableRows.js.map +1 -1
- package/dist/admin/components/TableList/TableRows.mjs +1 -0
- package/dist/admin/components/TableList/TableRows.mjs.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +1 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +1 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +1 -1
- package/dist/admin/components/UploadProgress/UploadProgress.js.map +1 -1
- package/dist/admin/components/UploadProgress/UploadProgress.mjs.map +1 -1
- package/dist/admin/constants.js +5 -10
- package/dist/admin/constants.js.map +1 -1
- package/dist/admin/constants.mjs +5 -11
- package/dist/admin/constants.mjs.map +1 -1
- package/dist/admin/enums.js +20 -0
- package/dist/admin/enums.js.map +1 -0
- package/dist/admin/enums.mjs +17 -0
- package/dist/admin/enums.mjs.map +1 -0
- package/dist/admin/hooks/useBulkEdit.js +1 -1
- package/dist/admin/hooks/useBulkEdit.mjs +1 -1
- package/dist/admin/hooks/useBulkMove.js +1 -1
- package/dist/admin/hooks/useBulkMove.mjs +1 -1
- package/dist/admin/hooks/useBulkRemove.js +1 -1
- package/dist/admin/hooks/useBulkRemove.mjs +1 -1
- package/dist/admin/hooks/useEditAsset.js +1 -1
- package/dist/admin/hooks/useEditAsset.js.map +1 -1
- package/dist/admin/hooks/useEditAsset.mjs +1 -1
- package/dist/admin/hooks/useEditAsset.mjs.map +1 -1
- package/dist/admin/hooks/useEditFolder.js.map +1 -1
- package/dist/admin/hooks/useEditFolder.mjs.map +1 -1
- package/dist/admin/hooks/useFolder.js +1 -1
- package/dist/admin/hooks/useFolder.js.map +1 -1
- package/dist/admin/hooks/useFolder.mjs +1 -1
- package/dist/admin/hooks/useFolder.mjs.map +1 -1
- package/dist/admin/hooks/useFolderStructure.js +1 -1
- package/dist/admin/hooks/useFolderStructure.mjs +1 -1
- package/dist/admin/hooks/useRemoveAsset.js.map +1 -1
- package/dist/admin/hooks/useRemoveAsset.mjs.map +1 -1
- package/dist/admin/hooks/useTracking.js +4 -1
- package/dist/admin/hooks/useTracking.js.map +1 -1
- package/dist/admin/hooks/useTracking.mjs +5 -2
- package/dist/admin/hooks/useTracking.mjs.map +1 -1
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/hooks/useUpload.mjs.map +1 -1
- package/dist/admin/index.js +1 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/package.json.js +5 -5
- package/dist/admin/package.json.mjs +5 -5
- package/dist/admin/pages/App/App.js +1 -1
- package/dist/admin/pages/App/App.mjs +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.js +1 -0
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs +1 -0
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.mjs.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +1 -0
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +1 -0
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/BulkActions.js +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/BulkActions.mjs +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.mjs +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Filters.js +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Filters.mjs +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Header.js +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Header.js.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Header.mjs +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Header.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.js +1 -0
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs +1 -0
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
- package/dist/admin/src/components/AssetCard/UploadingAssetCard.d.ts +1 -1
- package/dist/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.d.ts +1 -1
- package/dist/admin/src/constants.d.ts +0 -6
- package/dist/admin/src/enums.d.ts +12 -0
- package/dist/admin/src/utils/icons.d.ts +14 -0
- package/dist/admin/src/utils/rawFileToAsset.d.ts +1 -1
- package/dist/admin/src/utils/typeFromMime.d.ts +2 -2
- package/dist/admin/src/utils/urlsToAssets.d.ts +1 -1
- package/dist/admin/translations/pt-BR.json.js +75 -7
- package/dist/admin/translations/pt-BR.json.js.map +1 -1
- package/dist/admin/translations/pt-BR.json.mjs +75 -7
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -1
- package/dist/admin/utils/formatBytes.js.map +1 -1
- package/dist/admin/utils/formatBytes.mjs.map +1 -1
- package/dist/admin/utils/formatDuration.js.map +1 -1
- package/dist/admin/utils/formatDuration.mjs.map +1 -1
- package/dist/admin/utils/getFolderURL.js.map +1 -1
- package/dist/admin/utils/getFolderURL.mjs.map +1 -1
- package/dist/admin/utils/getTrad.js.map +1 -1
- package/dist/admin/utils/getTrad.mjs.map +1 -1
- package/dist/admin/utils/icons.js +23 -0
- package/dist/admin/utils/icons.js.map +1 -0
- package/dist/admin/utils/icons.mjs +19 -0
- package/dist/admin/utils/icons.mjs.map +1 -0
- package/dist/admin/utils/normalizeAPIError.js.map +1 -1
- package/dist/admin/utils/normalizeAPIError.mjs.map +1 -1
- package/dist/admin/utils/prefixFileUrlWithBackendUrl.js.map +1 -1
- package/dist/admin/utils/prefixFileUrlWithBackendUrl.mjs.map +1 -1
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
- package/dist/admin/utils/typeFromMime.js +15 -11
- package/dist/admin/utils/typeFromMime.js.map +1 -1
- package/dist/admin/utils/typeFromMime.mjs +15 -11
- package/dist/admin/utils/typeFromMime.mjs.map +1 -1
- package/dist/server/controllers/admin-folder-file.js.map +1 -1
- package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
- package/dist/server/controllers/utils/folders.js.map +1 -1
- package/dist/server/controllers/utils/folders.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/folder-file.js.map +1 -1
- package/dist/server/controllers/validation/admin/folder-file.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/folder.js +1 -1
- package/dist/server/controllers/validation/admin/folder.js.map +1 -1
- package/dist/server/controllers/validation/admin/folder.mjs +1 -1
- package/dist/server/controllers/validation/admin/folder.mjs.map +1 -1
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/services/ai-metadata.js.map +1 -1
- package/dist/server/services/ai-metadata.mjs.map +1 -1
- package/dist/server/services/api-upload-folder.js.map +1 -1
- package/dist/server/services/api-upload-folder.mjs.map +1 -1
- package/dist/server/services/folder.js.map +1 -1
- package/dist/server/services/folder.mjs.map +1 -1
- package/dist/server/services/image-manipulation.js.map +1 -1
- package/dist/server/services/image-manipulation.mjs.map +1 -1
- package/dist/server/services/metrics.js +4 -1
- package/dist/server/services/metrics.js.map +1 -1
- package/dist/server/services/metrics.mjs +4 -1
- package/dist/server/services/metrics.mjs.map +1 -1
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/utils/cron.js.map +1 -1
- package/dist/server/utils/cron.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewBox.js","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { Crop as Resize, Download as DownloadIcon, Trash } from '@strapi/icons';\nimport cropperjscss from 'cropperjs/dist/cropper.css?raw';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { AssetType } from '../../../constants';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { createAssetUrl, getTrad, downloadFile } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress/UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport { CroppingActions } from './CroppingActions';\nimport {\n ActionRow,\n BadgeOverride,\n RelativeBox,\n UploadProgressWrapper,\n Wrapper,\n} from './PreviewComponents';\n\nimport type { File as FileDefinition, RawFile } from '../../../../../shared/contracts/files';\n\ninterface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface PreviewBoxProps {\n asset: Asset;\n canUpdate: boolean;\n canCopyLink: boolean;\n canDownload: boolean;\n replacementFile?: File;\n onDelete: (asset?: Asset | null) => void;\n onCropFinish: () => void;\n onCropStart: () => void;\n onCropCancel: () => void;\n trackedLocation?: string;\n}\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}: PreviewBoxProps) => {\n const CropperjsStyle = createGlobalStyle`${cropperjscss}`;\n const { trackUsage } = useTracking();\n const previewRef = React.useRef(null);\n const [isCropImageReady, setIsCropImageReady] = React.useState(false);\n const [hasCropIntent, setHasCropIntent] = React.useState<boolean | null>(null);\n const [assetUrl, setAssetUrl] = React.useState(createAssetUrl(asset, false));\n const [thumbnailUrl, setThumbnailUrl] = React.useState(createAssetUrl(asset, true));\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.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 React.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 React.useEffect(() => {\n if (hasCropIntent === false) {\n stopCropping();\n onCropCancel();\n }\n }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n React.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!)) as File;\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(\n nextAsset.name,\n nextAsset.mime!,\n nextAsset.updatedAt!\n )) as RawFile;\n\n await upload({ name: file.name, rawFile: file }, asset.folder?.id ? asset.folder.id : null);\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 <CropperjsStyle />\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 onClick={() => setShowConfirmDialog(true)}\n >\n <Trash />\n </IconButton>\n )}\n\n {canDownload && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.download'),\n defaultMessage: 'Download',\n })}\n onClick={() => downloadFile(assetUrl!, asset.name)}\n >\n <DownloadIcon />\n </IconButton>\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 onClick={handleCropStart}\n >\n <Resize />\n </IconButton>\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 <RemoveAssetDialog\n open={showConfirmDialog}\n onClose={() => {\n setShowConfirmDialog(false);\n onDelete(null);\n }}\n asset={asset}\n />\n </>\n );\n};\n"],"names":["PreviewBox","asset","canUpdate","canCopyLink","canDownload","onDelete","onCropFinish","onCropStart","onCropCancel","replacementFile","trackedLocation","CropperjsStyle","createGlobalStyle","cropperjscss","trackUsage","useTracking","previewRef","React","useRef","isCropImageReady","setIsCropImageReady","useState","hasCropIntent","setHasCropIntent","assetUrl","setAssetUrl","createAssetUrl","thumbnailUrl","setThumbnailUrl","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","crop","produceFile","stopCropping","isCropping","isCropperReady","width","height","useCropImg","editAsset","error","isLoading","progress","cancel","useEditAsset","upload","isLoadingUpload","cancelUpload","uploadError","progressUpload","useUpload","useEffect","fileLocalUrl","URL","createObjectURL","isLocal","url","current","handleCropping","nextAsset","folder","id","file","name","mime","updatedAt","optimizedCachingImage","optimizedCachingThumbnailImage","rawFile","duplicatedFile","location","updatedAsset","isInCroppingMode","handleDuplication","handleCropCancel","handleCropStart","_jsxs","_Fragment","_jsx","RelativeBox","hasRadius","background","borderColor","CroppingActions","onValidate","onDuplicate","undefined","onCancel","ActionRow","paddingLeft","paddingRight","justifyContent","Flex","gap","IconButton","label","defaultMessage","onClick","Trash","getTrad","downloadFile","DownloadIcon","CopyLinkButton","includes","AssetType","Image","Resize","Wrapper","UploadProgressWrapper","UploadProgress","AssetPreview","ref","onLoad","$blurry","BadgeOverride","color","RemoveAssetDialog","open","onClose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PreviewBox.js","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { Crop as Resize, Download as DownloadIcon, Trash } from '@strapi/icons';\nimport cropperjscss from 'cropperjs/dist/cropper.css?raw';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { createAssetUrl, getTrad, downloadFile } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress/UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport { CroppingActions } from './CroppingActions';\nimport {\n ActionRow,\n BadgeOverride,\n RelativeBox,\n UploadProgressWrapper,\n Wrapper,\n} from './PreviewComponents';\n\nimport type { File as FileDefinition, RawFile } from '../../../../../shared/contracts/files';\n\ninterface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface PreviewBoxProps {\n asset: Asset;\n canUpdate: boolean;\n canCopyLink: boolean;\n canDownload: boolean;\n replacementFile?: File;\n onDelete: (asset?: Asset | null) => void;\n onCropFinish: () => void;\n onCropStart: () => void;\n onCropCancel: () => void;\n trackedLocation?: string;\n}\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}: PreviewBoxProps) => {\n const CropperjsStyle = createGlobalStyle`${cropperjscss}`;\n const { trackUsage } = useTracking();\n const previewRef = React.useRef(null);\n const [isCropImageReady, setIsCropImageReady] = React.useState(false);\n const [hasCropIntent, setHasCropIntent] = React.useState<boolean | null>(null);\n const [assetUrl, setAssetUrl] = React.useState(createAssetUrl(asset, false));\n const [thumbnailUrl, setThumbnailUrl] = React.useState(createAssetUrl(asset, true));\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.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 React.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 React.useEffect(() => {\n if (hasCropIntent === false) {\n stopCropping();\n onCropCancel();\n }\n }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n React.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!)) as File;\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(\n nextAsset.name,\n nextAsset.mime!,\n nextAsset.updatedAt!\n )) as RawFile;\n\n await upload({ name: file.name, rawFile: file }, asset.folder?.id ? asset.folder.id : null);\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 <CropperjsStyle />\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 onClick={() => setShowConfirmDialog(true)}\n >\n <Trash />\n </IconButton>\n )}\n\n {canDownload && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.download'),\n defaultMessage: 'Download',\n })}\n onClick={() => downloadFile(assetUrl!, asset.name)}\n >\n <DownloadIcon />\n </IconButton>\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 onClick={handleCropStart}\n >\n <Resize />\n </IconButton>\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 <RemoveAssetDialog\n open={showConfirmDialog}\n onClose={() => {\n setShowConfirmDialog(false);\n onDelete(null);\n }}\n asset={asset}\n />\n </>\n );\n};\n"],"names":["PreviewBox","asset","canUpdate","canCopyLink","canDownload","onDelete","onCropFinish","onCropStart","onCropCancel","replacementFile","trackedLocation","CropperjsStyle","createGlobalStyle","cropperjscss","trackUsage","useTracking","previewRef","React","useRef","isCropImageReady","setIsCropImageReady","useState","hasCropIntent","setHasCropIntent","assetUrl","setAssetUrl","createAssetUrl","thumbnailUrl","setThumbnailUrl","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","crop","produceFile","stopCropping","isCropping","isCropperReady","width","height","useCropImg","editAsset","error","isLoading","progress","cancel","useEditAsset","upload","isLoadingUpload","cancelUpload","uploadError","progressUpload","useUpload","useEffect","fileLocalUrl","URL","createObjectURL","isLocal","url","current","handleCropping","nextAsset","folder","id","file","name","mime","updatedAt","optimizedCachingImage","optimizedCachingThumbnailImage","rawFile","duplicatedFile","location","updatedAsset","isInCroppingMode","handleDuplication","handleCropCancel","handleCropStart","_jsxs","_Fragment","_jsx","RelativeBox","hasRadius","background","borderColor","CroppingActions","onValidate","onDuplicate","undefined","onCancel","ActionRow","paddingLeft","paddingRight","justifyContent","Flex","gap","IconButton","label","defaultMessage","onClick","Trash","getTrad","downloadFile","DownloadIcon","CopyLinkButton","includes","AssetType","Image","Resize","Wrapper","UploadProgressWrapper","UploadProgress","AssetPreview","ref","onLoad","$blurry","BadgeOverride","color","RemoveAssetDialog","open","onClose"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { Trash, Download, Crop } from '@strapi/icons';
|
|
|
5
5
|
import cropperjscss from 'cropperjs/dist/cropper.css?raw';
|
|
6
6
|
import { useIntl } from 'react-intl';
|
|
7
7
|
import { createGlobalStyle } from 'styled-components';
|
|
8
|
-
import { AssetType } from '../../../
|
|
8
|
+
import { AssetType } from '../../../enums.mjs';
|
|
9
9
|
import { useCropImg } from '../../../hooks/useCropImg.mjs';
|
|
10
10
|
import { useEditAsset } from '../../../hooks/useEditAsset.mjs';
|
|
11
11
|
import { useTracking } from '../../../hooks/useTracking.mjs';
|
|
@@ -16,6 +16,7 @@ import 'byte-size';
|
|
|
16
16
|
import 'date-fns';
|
|
17
17
|
import { getTrad } from '../../../utils/getTrad.mjs';
|
|
18
18
|
import 'qs';
|
|
19
|
+
import '../../../utils/typeFromMime.mjs';
|
|
19
20
|
import '../../../utils/urlYupSchema.mjs';
|
|
20
21
|
import { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton.mjs';
|
|
21
22
|
import { UploadProgress } from '../../UploadProgress/UploadProgress.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewBox.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { Crop as Resize, Download as DownloadIcon, Trash } from '@strapi/icons';\nimport cropperjscss from 'cropperjs/dist/cropper.css?raw';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { AssetType } from '../../../constants';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { createAssetUrl, getTrad, downloadFile } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress/UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport { CroppingActions } from './CroppingActions';\nimport {\n ActionRow,\n BadgeOverride,\n RelativeBox,\n UploadProgressWrapper,\n Wrapper,\n} from './PreviewComponents';\n\nimport type { File as FileDefinition, RawFile } from '../../../../../shared/contracts/files';\n\ninterface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface PreviewBoxProps {\n asset: Asset;\n canUpdate: boolean;\n canCopyLink: boolean;\n canDownload: boolean;\n replacementFile?: File;\n onDelete: (asset?: Asset | null) => void;\n onCropFinish: () => void;\n onCropStart: () => void;\n onCropCancel: () => void;\n trackedLocation?: string;\n}\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}: PreviewBoxProps) => {\n const CropperjsStyle = createGlobalStyle`${cropperjscss}`;\n const { trackUsage } = useTracking();\n const previewRef = React.useRef(null);\n const [isCropImageReady, setIsCropImageReady] = React.useState(false);\n const [hasCropIntent, setHasCropIntent] = React.useState<boolean | null>(null);\n const [assetUrl, setAssetUrl] = React.useState(createAssetUrl(asset, false));\n const [thumbnailUrl, setThumbnailUrl] = React.useState(createAssetUrl(asset, true));\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.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 React.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 React.useEffect(() => {\n if (hasCropIntent === false) {\n stopCropping();\n onCropCancel();\n }\n }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n React.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!)) as File;\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(\n nextAsset.name,\n nextAsset.mime!,\n nextAsset.updatedAt!\n )) as RawFile;\n\n await upload({ name: file.name, rawFile: file }, asset.folder?.id ? asset.folder.id : null);\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 <CropperjsStyle />\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 onClick={() => setShowConfirmDialog(true)}\n >\n <Trash />\n </IconButton>\n )}\n\n {canDownload && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.download'),\n defaultMessage: 'Download',\n })}\n onClick={() => downloadFile(assetUrl!, asset.name)}\n >\n <DownloadIcon />\n </IconButton>\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 onClick={handleCropStart}\n >\n <Resize />\n </IconButton>\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 <RemoveAssetDialog\n open={showConfirmDialog}\n onClose={() => {\n setShowConfirmDialog(false);\n onDelete(null);\n }}\n asset={asset}\n />\n </>\n );\n};\n"],"names":["PreviewBox","asset","canUpdate","canCopyLink","canDownload","onDelete","onCropFinish","onCropStart","onCropCancel","replacementFile","trackedLocation","CropperjsStyle","createGlobalStyle","cropperjscss","trackUsage","useTracking","previewRef","React","useRef","isCropImageReady","setIsCropImageReady","useState","hasCropIntent","setHasCropIntent","assetUrl","setAssetUrl","createAssetUrl","thumbnailUrl","setThumbnailUrl","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","crop","produceFile","stopCropping","isCropping","isCropperReady","width","height","useCropImg","editAsset","error","isLoading","progress","cancel","useEditAsset","upload","isLoadingUpload","cancelUpload","uploadError","progressUpload","useUpload","useEffect","fileLocalUrl","URL","createObjectURL","isLocal","url","current","handleCropping","nextAsset","folder","id","file","name","mime","updatedAt","optimizedCachingImage","optimizedCachingThumbnailImage","rawFile","duplicatedFile","location","updatedAsset","isInCroppingMode","handleDuplication","handleCropCancel","handleCropStart","_jsxs","_Fragment","_jsx","RelativeBox","hasRadius","background","borderColor","CroppingActions","onValidate","onDuplicate","undefined","onCancel","ActionRow","paddingLeft","paddingRight","justifyContent","Flex","gap","IconButton","label","defaultMessage","onClick","Trash","getTrad","downloadFile","DownloadIcon","CopyLinkButton","includes","AssetType","Image","Resize","Wrapper","UploadProgressWrapper","UploadProgress","AssetPreview","ref","onLoad","$blurry","BadgeOverride","color","RemoveAssetDialog","open","onClose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PreviewBox.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { Crop as Resize, Download as DownloadIcon, Trash } from '@strapi/icons';\nimport cropperjscss from 'cropperjs/dist/cropper.css?raw';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { createAssetUrl, getTrad, downloadFile } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress/UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport { CroppingActions } from './CroppingActions';\nimport {\n ActionRow,\n BadgeOverride,\n RelativeBox,\n UploadProgressWrapper,\n Wrapper,\n} from './PreviewComponents';\n\nimport type { File as FileDefinition, RawFile } from '../../../../../shared/contracts/files';\n\ninterface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface PreviewBoxProps {\n asset: Asset;\n canUpdate: boolean;\n canCopyLink: boolean;\n canDownload: boolean;\n replacementFile?: File;\n onDelete: (asset?: Asset | null) => void;\n onCropFinish: () => void;\n onCropStart: () => void;\n onCropCancel: () => void;\n trackedLocation?: string;\n}\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}: PreviewBoxProps) => {\n const CropperjsStyle = createGlobalStyle`${cropperjscss}`;\n const { trackUsage } = useTracking();\n const previewRef = React.useRef(null);\n const [isCropImageReady, setIsCropImageReady] = React.useState(false);\n const [hasCropIntent, setHasCropIntent] = React.useState<boolean | null>(null);\n const [assetUrl, setAssetUrl] = React.useState(createAssetUrl(asset, false));\n const [thumbnailUrl, setThumbnailUrl] = React.useState(createAssetUrl(asset, true));\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.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 React.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 React.useEffect(() => {\n if (hasCropIntent === false) {\n stopCropping();\n onCropCancel();\n }\n }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n React.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!)) as File;\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(\n nextAsset.name,\n nextAsset.mime!,\n nextAsset.updatedAt!\n )) as RawFile;\n\n await upload({ name: file.name, rawFile: file }, asset.folder?.id ? asset.folder.id : null);\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 <CropperjsStyle />\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 onClick={() => setShowConfirmDialog(true)}\n >\n <Trash />\n </IconButton>\n )}\n\n {canDownload && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.download'),\n defaultMessage: 'Download',\n })}\n onClick={() => downloadFile(assetUrl!, asset.name)}\n >\n <DownloadIcon />\n </IconButton>\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 onClick={handleCropStart}\n >\n <Resize />\n </IconButton>\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 <RemoveAssetDialog\n open={showConfirmDialog}\n onClose={() => {\n setShowConfirmDialog(false);\n onDelete(null);\n }}\n asset={asset}\n />\n </>\n );\n};\n"],"names":["PreviewBox","asset","canUpdate","canCopyLink","canDownload","onDelete","onCropFinish","onCropStart","onCropCancel","replacementFile","trackedLocation","CropperjsStyle","createGlobalStyle","cropperjscss","trackUsage","useTracking","previewRef","React","useRef","isCropImageReady","setIsCropImageReady","useState","hasCropIntent","setHasCropIntent","assetUrl","setAssetUrl","createAssetUrl","thumbnailUrl","setThumbnailUrl","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","crop","produceFile","stopCropping","isCropping","isCropperReady","width","height","useCropImg","editAsset","error","isLoading","progress","cancel","useEditAsset","upload","isLoadingUpload","cancelUpload","uploadError","progressUpload","useUpload","useEffect","fileLocalUrl","URL","createObjectURL","isLocal","url","current","handleCropping","nextAsset","folder","id","file","name","mime","updatedAt","optimizedCachingImage","optimizedCachingThumbnailImage","rawFile","duplicatedFile","location","updatedAsset","isInCroppingMode","handleDuplication","handleCropCancel","handleCropStart","_jsxs","_Fragment","_jsx","RelativeBox","hasRadius","background","borderColor","CroppingActions","onValidate","onDuplicate","undefined","onCancel","ActionRow","paddingLeft","paddingRight","justifyContent","Flex","gap","IconButton","label","defaultMessage","onClick","Trash","getTrad","downloadFile","DownloadIcon","CopyLinkButton","includes","AssetType","Image","Resize","Wrapper","UploadProgressWrapper","UploadProgress","AssetPreview","ref","onLoad","$blurry","BadgeOverride","color","RemoveAssetDialog","open","onClose"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ require('byte-size');
|
|
|
9
9
|
require('date-fns');
|
|
10
10
|
var getTrad = require('../../utils/getTrad.js');
|
|
11
11
|
require('qs');
|
|
12
|
-
require('../../
|
|
12
|
+
require('../../utils/typeFromMime.js');
|
|
13
13
|
require('../../utils/urlYupSchema.js');
|
|
14
14
|
|
|
15
15
|
function _interopNamespaceDefault(e) {
|
|
@@ -7,7 +7,7 @@ import 'byte-size';
|
|
|
7
7
|
import 'date-fns';
|
|
8
8
|
import { getTrad } from '../../utils/getTrad.mjs';
|
|
9
9
|
import 'qs';
|
|
10
|
-
import '../../
|
|
10
|
+
import '../../utils/typeFromMime.mjs';
|
|
11
11
|
import '../../utils/urlYupSchema.mjs';
|
|
12
12
|
|
|
13
13
|
const ReplaceMediaButton = ({ onSelectMedia, acceptedMime, trackedLocation, ...props })=>{
|
|
@@ -19,7 +19,7 @@ require('date-fns');
|
|
|
19
19
|
var getAPIInnerErrors = require('../../utils/getAPIInnerErrors.js');
|
|
20
20
|
var getTrad = require('../../utils/getTrad.js');
|
|
21
21
|
require('qs');
|
|
22
|
-
require('../../
|
|
22
|
+
require('../../utils/typeFromMime.js');
|
|
23
23
|
require('../../utils/urlYupSchema.js');
|
|
24
24
|
var ContextInfo = require('../ContextInfo/ContextInfo.js');
|
|
25
25
|
var SelectTree = require('../SelectTree/SelectTree.js');
|
|
@@ -17,7 +17,7 @@ import 'date-fns';
|
|
|
17
17
|
import { getAPIInnerErrors } from '../../utils/getAPIInnerErrors.mjs';
|
|
18
18
|
import { getTrad } from '../../utils/getTrad.mjs';
|
|
19
19
|
import 'qs';
|
|
20
|
-
import '../../
|
|
20
|
+
import '../../utils/typeFromMime.mjs';
|
|
21
21
|
import '../../utils/urlYupSchema.mjs';
|
|
22
22
|
import { ContextInfo } from '../ContextInfo/ContextInfo.mjs';
|
|
23
23
|
import { SelectTree } from '../SelectTree/SelectTree.mjs';
|
|
@@ -7,7 +7,7 @@ require('byte-size');
|
|
|
7
7
|
require('date-fns');
|
|
8
8
|
var getTrad = require('../../../utils/getTrad.js');
|
|
9
9
|
require('qs');
|
|
10
|
-
require('../../../
|
|
10
|
+
require('../../../utils/typeFromMime.js');
|
|
11
11
|
require('../../../utils/urlYupSchema.js');
|
|
12
12
|
|
|
13
13
|
const EditFolderModalHeader = ({ isEditing = false })=>{
|
|
@@ -5,7 +5,7 @@ import 'byte-size';
|
|
|
5
5
|
import 'date-fns';
|
|
6
6
|
import { getTrad } from '../../../utils/getTrad.mjs';
|
|
7
7
|
import 'qs';
|
|
8
|
-
import '../../../
|
|
8
|
+
import '../../../utils/typeFromMime.mjs';
|
|
9
9
|
import '../../../utils/urlYupSchema.mjs';
|
|
10
10
|
|
|
11
11
|
const EditFolderModalHeader = ({ isEditing = false })=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyAssetGrid.js","sources":["../../../../admin/src/components/EmptyAssets/EmptyAssetGrid.tsx"],"sourcesContent":["import { Layouts } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\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 PlaceholderSize = {\n S: 138,\n M: 234,\n};\n\ninterface EmptyAssetGridProps {\n count: number;\n size: 'S' | 'M';\n}\n\nexport const EmptyAssetGrid = ({ count, size }: EmptyAssetGridProps) => {\n return (\n <Layouts.Grid 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 </Layouts.Grid>\n );\n};\n"],"names":["EmptyAssetCard","styled","Box","theme","colors","neutral200","PlaceholderSize","S","M","EmptyAssetGrid","count","size","_jsx","Layouts","Grid","Array","fill","map","_","idx","height","hasRadius"],"mappings":";;;;;;;AAIA,MAAMA,cAAAA,GAAiBC,uBAAOC,CAAAA,gBAAAA,CAAI;;;;IAI9B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;;AAG7C,CAAC;AAED,MAAMC,eAAkB,GAAA;IACtBC,CAAG,EAAA,GAAA;IACHC,CAAG,EAAA;AACL,CAAA;MAOaC,cAAiB,GAAA,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAuB,GAAA;IACjE,qBACEC,cAAA,CAACC,oBAAQC,IAAI,EAAA;QAACH,IAAMA,EAAAA,IAAAA;kBACjBI,KAAML,CAAAA,KAAAA,CAAAA,CACJM,IAAI,CAAC,IAAA,CAAA,CACLC,GAAG,CAAC,CAACC,CAAGC,EAAAA,GAAAA,iBACPP,cAACZ,CAAAA,cAAAA,EAAAA;AAGCoB,gBAAAA,MAAAA,EAAQ,
|
|
1
|
+
{"version":3,"file":"EmptyAssetGrid.js","sources":["../../../../admin/src/components/EmptyAssets/EmptyAssetGrid.tsx"],"sourcesContent":["import { Layouts } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\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 PlaceholderSize = {\n S: 138,\n M: 234,\n};\n\ninterface EmptyAssetGridProps {\n count: number;\n size: 'S' | 'M';\n}\n\nexport const EmptyAssetGrid = ({ count, size }: EmptyAssetGridProps) => {\n return (\n <Layouts.Grid 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 </Layouts.Grid>\n );\n};\n"],"names":["EmptyAssetCard","styled","Box","theme","colors","neutral200","PlaceholderSize","S","M","EmptyAssetGrid","count","size","_jsx","Layouts","Grid","Array","fill","map","_","idx","height","hasRadius"],"mappings":";;;;;;;AAIA,MAAMA,cAAAA,GAAiBC,uBAAOC,CAAAA,gBAAAA,CAAI;;;;IAI9B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;;AAG7C,CAAC;AAED,MAAMC,eAAkB,GAAA;IACtBC,CAAG,EAAA,GAAA;IACHC,CAAG,EAAA;AACL,CAAA;MAOaC,cAAiB,GAAA,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAuB,GAAA;IACjE,qBACEC,cAAA,CAACC,oBAAQC,IAAI,EAAA;QAACH,IAAMA,EAAAA,IAAAA;kBACjBI,KAAML,CAAAA,KAAAA,CAAAA,CACJM,IAAI,CAAC,IAAA,CAAA,CACLC,GAAG,CAAC,CAACC,CAAGC,EAAAA,GAAAA,iBACPP,cAACZ,CAAAA,cAAAA,EAAAA;AAGCoB,gBAAAA,MAAAA,EAAQ,GAAGd,eAAe,CAACK,IAAK,CAAA,CAAC,EAAE,CAAC;gBACpCU,SAAS,EAAA;eAFJ,CAAC,iBAAiB,EAAEF,GAAK,CAAA,CAAA,CAAA;;AAO1C;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyAssetGrid.mjs","sources":["../../../../admin/src/components/EmptyAssets/EmptyAssetGrid.tsx"],"sourcesContent":["import { Layouts } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\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 PlaceholderSize = {\n S: 138,\n M: 234,\n};\n\ninterface EmptyAssetGridProps {\n count: number;\n size: 'S' | 'M';\n}\n\nexport const EmptyAssetGrid = ({ count, size }: EmptyAssetGridProps) => {\n return (\n <Layouts.Grid 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 </Layouts.Grid>\n );\n};\n"],"names":["EmptyAssetCard","styled","Box","theme","colors","neutral200","PlaceholderSize","S","M","EmptyAssetGrid","count","size","_jsx","Layouts","Grid","Array","fill","map","_","idx","height","hasRadius"],"mappings":";;;;;AAIA,MAAMA,cAAAA,GAAiBC,MAAOC,CAAAA,GAAAA,CAAI;;;;IAI9B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;;AAG7C,CAAC;AAED,MAAMC,eAAkB,GAAA;IACtBC,CAAG,EAAA,GAAA;IACHC,CAAG,EAAA;AACL,CAAA;MAOaC,cAAiB,GAAA,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAuB,GAAA;IACjE,qBACEC,GAAA,CAACC,QAAQC,IAAI,EAAA;QAACH,IAAMA,EAAAA,IAAAA;kBACjBI,KAAML,CAAAA,KAAAA,CAAAA,CACJM,IAAI,CAAC,IAAA,CAAA,CACLC,GAAG,CAAC,CAACC,CAAGC,EAAAA,GAAAA,iBACPP,GAACZ,CAAAA,cAAAA,EAAAA;AAGCoB,gBAAAA,MAAAA,EAAQ,
|
|
1
|
+
{"version":3,"file":"EmptyAssetGrid.mjs","sources":["../../../../admin/src/components/EmptyAssets/EmptyAssetGrid.tsx"],"sourcesContent":["import { Layouts } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\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 PlaceholderSize = {\n S: 138,\n M: 234,\n};\n\ninterface EmptyAssetGridProps {\n count: number;\n size: 'S' | 'M';\n}\n\nexport const EmptyAssetGrid = ({ count, size }: EmptyAssetGridProps) => {\n return (\n <Layouts.Grid 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 </Layouts.Grid>\n );\n};\n"],"names":["EmptyAssetCard","styled","Box","theme","colors","neutral200","PlaceholderSize","S","M","EmptyAssetGrid","count","size","_jsx","Layouts","Grid","Array","fill","map","_","idx","height","hasRadius"],"mappings":";;;;;AAIA,MAAMA,cAAAA,GAAiBC,MAAOC,CAAAA,GAAAA,CAAI;;;;IAI9B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;;AAG7C,CAAC;AAED,MAAMC,eAAkB,GAAA;IACtBC,CAAG,EAAA,GAAA;IACHC,CAAG,EAAA;AACL,CAAA;MAOaC,cAAiB,GAAA,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAuB,GAAA;IACjE,qBACEC,GAAA,CAACC,QAAQC,IAAI,EAAA;QAACH,IAAMA,EAAAA,IAAAA;kBACjBI,KAAML,CAAAA,KAAAA,CAAAA,CACJM,IAAI,CAAC,IAAA,CAAA,CACLC,GAAG,CAAC,CAACC,CAAGC,EAAAA,GAAAA,iBACPP,GAACZ,CAAAA,cAAAA,EAAAA;AAGCoB,gBAAAA,MAAAA,EAAQ,GAAGd,eAAe,CAACK,IAAK,CAAA,CAAC,EAAE,CAAC;gBACpCU,SAAS,EAAA;eAFJ,CAAC,iBAAiB,EAAEF,GAAK,CAAA,CAAA,CAAA;;AAO1C;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterList.js","sources":["../../../../admin/src/components/FilterList/FilterList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterList\n *\n */\nimport { FilterTag } from './FilterTag';\n\ntype NumberKeyedObject = Record<number, string>;\n\ntype StringFilter = {\n [key: string]: string;\n};\n\ntype MimeFilter = {\n [key: string]:\n | string\n | NumberKeyedObject\n | Record<string, string | NumberKeyedObject>\n | undefined;\n};\n\nexport type FilterStructure = {\n [key: string]: MimeFilter | StringFilter | undefined;\n};\n\nexport interface FilterListProps {\n appliedFilters: FilterStructure[];\n filtersSchema: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema?: {\n type?: string;\n mainField?: {\n name: string;\n type: string;\n };\n options?: {\n label: string;\n value: string;\n }[];\n };\n }[];\n onRemoveFilter: (filters: FilterStructure[]) => void;\n}\n\nexport const FilterList = ({ appliedFilters, filtersSchema, onRemoveFilter }: FilterListProps) => {\n const handleClick = (filter: FilterStructure) => {\n const nextFilters = appliedFilters.filter((prevFilter) => {\n const name = Object.keys(filter)[0];\n const filterName = filter[name];\n if (filterName !== undefined) {\n const filterType = Object.keys(filterName)[0];\n const filterValue = filterName[filterType];\n if (typeof filterValue === 'string') {\n const decodedValue = decodeURIComponent(filterValue);\n return prevFilter[name]?.[filterType] !== decodedValue;\n }\n }\n\n return true;\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 if (!attribute) {\n // Handle the case where attribute is undefined\n return null;\n }\n\n const filterObj = filter[attributeName];\n const operator = Object.keys(filterObj!)[0];\n let value = filterObj![operator];\n\n if (Array.isArray(value)) {\n value = value.join(', ');\n } else if (typeof value === 'object') {\n value = Object.values(value).join(', ');\n } else {\n value =\n Array.isArray(value) || typeof value === 'object'\n ? Object.values(value).join(', ')\n : decodeURIComponent(value!);\n }\n\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 as string}\n />\n );\n });\n};\n"],"names":["FilterList","appliedFilters","filtersSchema","onRemoveFilter","handleClick","filter","nextFilters","prevFilter","name","Object","keys","filterName","undefined","filterType","filterValue","decodedValue","decodeURIComponent","map","i","attributeName","attribute","find","filterObj","operator","value","Array","isArray","join","values","displayedOperator","includes","_jsx","FilterTag","onClick"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"FilterList.js","sources":["../../../../admin/src/components/FilterList/FilterList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterList\n *\n */\nimport { FilterTag } from './FilterTag';\n\ntype NumberKeyedObject = Record<number, string>;\n\ntype StringFilter = {\n [key: string]: string;\n};\n\ntype MimeFilter = {\n [key: string]:\n | string\n | NumberKeyedObject\n | Record<string, string | NumberKeyedObject>\n | undefined;\n};\n\nexport type FilterStructure = {\n [key: string]: MimeFilter | StringFilter | undefined;\n};\n\nexport interface FilterListProps {\n appliedFilters: FilterStructure[];\n filtersSchema: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema?: {\n type?: string;\n mainField?: {\n name: string;\n type: string;\n };\n options?: {\n label: string;\n value: string;\n }[];\n };\n }[];\n onRemoveFilter: (filters: FilterStructure[]) => void;\n}\n\nexport const FilterList = ({ appliedFilters, filtersSchema, onRemoveFilter }: FilterListProps) => {\n const handleClick = (filter: FilterStructure) => {\n const nextFilters = appliedFilters.filter((prevFilter) => {\n const name = Object.keys(filter)[0];\n const filterName = filter[name];\n if (filterName !== undefined) {\n const filterType = Object.keys(filterName)[0];\n const filterValue = filterName[filterType];\n if (typeof filterValue === 'string') {\n const decodedValue = decodeURIComponent(filterValue);\n return prevFilter[name]?.[filterType] !== decodedValue;\n }\n }\n\n return true;\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 if (!attribute) {\n // Handle the case where attribute is undefined\n return null;\n }\n\n const filterObj = filter[attributeName];\n const operator = Object.keys(filterObj!)[0];\n let value = filterObj![operator];\n\n if (Array.isArray(value)) {\n value = value.join(', ');\n } else if (typeof value === 'object') {\n value = Object.values(value).join(', ');\n } else {\n value =\n Array.isArray(value) || typeof value === 'object'\n ? Object.values(value).join(', ')\n : decodeURIComponent(value!);\n }\n\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 as string}\n />\n );\n });\n};\n"],"names":["FilterList","appliedFilters","filtersSchema","onRemoveFilter","handleClick","filter","nextFilters","prevFilter","name","Object","keys","filterName","undefined","filterType","filterValue","decodedValue","decodeURIComponent","map","i","attributeName","attribute","find","filterObj","operator","value","Array","isArray","join","values","displayedOperator","includes","_jsx","FilterTag","onClick"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterList.mjs","sources":["../../../../admin/src/components/FilterList/FilterList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterList\n *\n */\nimport { FilterTag } from './FilterTag';\n\ntype NumberKeyedObject = Record<number, string>;\n\ntype StringFilter = {\n [key: string]: string;\n};\n\ntype MimeFilter = {\n [key: string]:\n | string\n | NumberKeyedObject\n | Record<string, string | NumberKeyedObject>\n | undefined;\n};\n\nexport type FilterStructure = {\n [key: string]: MimeFilter | StringFilter | undefined;\n};\n\nexport interface FilterListProps {\n appliedFilters: FilterStructure[];\n filtersSchema: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema?: {\n type?: string;\n mainField?: {\n name: string;\n type: string;\n };\n options?: {\n label: string;\n value: string;\n }[];\n };\n }[];\n onRemoveFilter: (filters: FilterStructure[]) => void;\n}\n\nexport const FilterList = ({ appliedFilters, filtersSchema, onRemoveFilter }: FilterListProps) => {\n const handleClick = (filter: FilterStructure) => {\n const nextFilters = appliedFilters.filter((prevFilter) => {\n const name = Object.keys(filter)[0];\n const filterName = filter[name];\n if (filterName !== undefined) {\n const filterType = Object.keys(filterName)[0];\n const filterValue = filterName[filterType];\n if (typeof filterValue === 'string') {\n const decodedValue = decodeURIComponent(filterValue);\n return prevFilter[name]?.[filterType] !== decodedValue;\n }\n }\n\n return true;\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 if (!attribute) {\n // Handle the case where attribute is undefined\n return null;\n }\n\n const filterObj = filter[attributeName];\n const operator = Object.keys(filterObj!)[0];\n let value = filterObj![operator];\n\n if (Array.isArray(value)) {\n value = value.join(', ');\n } else if (typeof value === 'object') {\n value = Object.values(value).join(', ');\n } else {\n value =\n Array.isArray(value) || typeof value === 'object'\n ? Object.values(value).join(', ')\n : decodeURIComponent(value!);\n }\n\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 as string}\n />\n );\n });\n};\n"],"names":["FilterList","appliedFilters","filtersSchema","onRemoveFilter","handleClick","filter","nextFilters","prevFilter","name","Object","keys","filterName","undefined","filterType","filterValue","decodedValue","decodeURIComponent","map","i","attributeName","attribute","find","filterObj","operator","value","Array","isArray","join","values","displayedOperator","includes","_jsx","FilterTag","onClick"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"FilterList.mjs","sources":["../../../../admin/src/components/FilterList/FilterList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterList\n *\n */\nimport { FilterTag } from './FilterTag';\n\ntype NumberKeyedObject = Record<number, string>;\n\ntype StringFilter = {\n [key: string]: string;\n};\n\ntype MimeFilter = {\n [key: string]:\n | string\n | NumberKeyedObject\n | Record<string, string | NumberKeyedObject>\n | undefined;\n};\n\nexport type FilterStructure = {\n [key: string]: MimeFilter | StringFilter | undefined;\n};\n\nexport interface FilterListProps {\n appliedFilters: FilterStructure[];\n filtersSchema: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema?: {\n type?: string;\n mainField?: {\n name: string;\n type: string;\n };\n options?: {\n label: string;\n value: string;\n }[];\n };\n }[];\n onRemoveFilter: (filters: FilterStructure[]) => void;\n}\n\nexport const FilterList = ({ appliedFilters, filtersSchema, onRemoveFilter }: FilterListProps) => {\n const handleClick = (filter: FilterStructure) => {\n const nextFilters = appliedFilters.filter((prevFilter) => {\n const name = Object.keys(filter)[0];\n const filterName = filter[name];\n if (filterName !== undefined) {\n const filterType = Object.keys(filterName)[0];\n const filterValue = filterName[filterType];\n if (typeof filterValue === 'string') {\n const decodedValue = decodeURIComponent(filterValue);\n return prevFilter[name]?.[filterType] !== decodedValue;\n }\n }\n\n return true;\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 if (!attribute) {\n // Handle the case where attribute is undefined\n return null;\n }\n\n const filterObj = filter[attributeName];\n const operator = Object.keys(filterObj!)[0];\n let value = filterObj![operator];\n\n if (Array.isArray(value)) {\n value = value.join(', ');\n } else if (typeof value === 'object') {\n value = Object.values(value).join(', ');\n } else {\n value =\n Array.isArray(value) || typeof value === 'object'\n ? Object.values(value).join(', ')\n : decodeURIComponent(value!);\n }\n\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 as string}\n />\n );\n });\n};\n"],"names":["FilterList","appliedFilters","filtersSchema","onRemoveFilter","handleClick","filter","nextFilters","prevFilter","name","Object","keys","filterName","undefined","filterType","filterValue","decodedValue","decodeURIComponent","map","i","attributeName","attribute","find","filterObj","operator","value","Array","isArray","join","values","displayedOperator","includes","_jsx","FilterTag","onClick"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterTag.js","sources":["../../../../admin/src/components/FilterList/FilterTag.tsx"],"sourcesContent":["import { Tag } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { FilterStructure } from './FilterList';\n\ntype FilterTagAttribute = {\n fieldSchema?: {\n type?: string; // \"date\" | \"enumeration\"\n options?: {\n label: string; // \"audio\" | \"video\" | \"image\" | \"file\"\n value: string; // \"audio\" | \"video\" | \"image\" | \"file\"\n }[];\n };\n metadatas?: {\n label?: string; // \"createdAt\" | \"updatedAt\" | \"type\"\n };\n name: string; // \"createdAt\" | \"updatedAt\" | \"mime\"\n};\n\ninterface FilterTagProps {\n attribute: FilterTagAttribute;\n operator: string;\n value: string;\n filter: FilterStructure;\n onClick: (filter: FilterStructure) => void;\n}\n\nexport const FilterTag = ({ attribute, filter, onClick, operator, value }: FilterTagProps) => {\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(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\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 <Tag onClick={handleClick} icon={<Cross />} padding={1}>\n {content}\n </Tag>\n );\n};\n"],"names":["FilterTag","attribute","filter","onClick","operator","value","formatMessage","formatDate","formatTime","useIntl","handleClick","fieldSchema","type","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","content","metadatas","label","id","defaultMessage","_jsx","Tag","icon","Cross","padding"],"mappings":";;;;;;;AA4BaA,MAAAA,SAAAA,GAAY,CAAC,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,KAAK,EAAkB,GAAA;AACvF,IAAA,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGC,iBAAAA,EAAAA;AAElD,IAAA,MAAMC,WAAc,GAAA,IAAA;QAClBP,OAAQD,CAAAA,MAAAA,CAAAA;AACV,KAAA;IAEA,MAAM,EAAES,WAAW,EAAE,GAAGV,SAAAA;AAExB,IAAA,MAAMW,OAAOD,WAAaC,EAAAA,IAAAA;AAE1B,IAAA,IAAIC,cAAiBR,GAAAA,KAAAA;AAErB,IAAA,IAAIO,SAAS,MAAQ,EAAA;AACnBC,QAAAA,cAAAA,GAAiBN,WAAWF,KAAO,EAAA;YAAES,SAAW,EAAA;AAAO,SAAA,CAAA;AACzD;AAEA,IAAA,IAAIF,SAAS,UAAY,EAAA;AACvBC,QAAAA,cAAAA,GAAiBN,WAAWF,KAAO,EAAA;YAAES,SAAW,EAAA,MAAA;YAAQC,SAAW,EAAA;AAAQ,SAAA,CAAA;AAC7E;AAEA,IAAA,IAAIH,SAAS,MAAQ,EAAA;AACnB,QAAA,MAAM,CAACI,IAAMC,EAAAA,MAAAA,CAAO,GAAGZ,KAAAA,CAAMa,KAAK,CAAC,GAAA,CAAA;AACnC,QAAA,MAAMC,OAAO,IAAIC,IAAAA,EAAAA;QACjBD,IAAKE,CAAAA,QAAQ,CAACC,MAAON,CAAAA,IAAAA,CAAAA,CAAAA;QACrBG,IAAKI,CAAAA,UAAU,CAACD,MAAOL,CAAAA,MAAAA,CAAAA,CAAAA;AAEvBJ,QAAAA,cAAAA,GAAiBL,WAAWW,IAAM,EAAA;YAChCH,IAAM,EAAA,SAAA;YACNC,MAAQ,EAAA;AACV,SAAA,CAAA;AACF;IAEA,MAAMO,OAAAA,GAAU,
|
|
1
|
+
{"version":3,"file":"FilterTag.js","sources":["../../../../admin/src/components/FilterList/FilterTag.tsx"],"sourcesContent":["import { Tag } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { FilterStructure } from './FilterList';\n\ntype FilterTagAttribute = {\n fieldSchema?: {\n type?: string; // \"date\" | \"enumeration\"\n options?: {\n label: string; // \"audio\" | \"video\" | \"image\" | \"file\"\n value: string; // \"audio\" | \"video\" | \"image\" | \"file\"\n }[];\n };\n metadatas?: {\n label?: string; // \"createdAt\" | \"updatedAt\" | \"type\"\n };\n name: string; // \"createdAt\" | \"updatedAt\" | \"mime\"\n};\n\ninterface FilterTagProps {\n attribute: FilterTagAttribute;\n operator: string;\n value: string;\n filter: FilterStructure;\n onClick: (filter: FilterStructure) => void;\n}\n\nexport const FilterTag = ({ attribute, filter, onClick, operator, value }: FilterTagProps) => {\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(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\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 <Tag onClick={handleClick} icon={<Cross />} padding={1}>\n {content}\n </Tag>\n );\n};\n"],"names":["FilterTag","attribute","filter","onClick","operator","value","formatMessage","formatDate","formatTime","useIntl","handleClick","fieldSchema","type","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","content","metadatas","label","id","defaultMessage","_jsx","Tag","icon","Cross","padding"],"mappings":";;;;;;;AA4BaA,MAAAA,SAAAA,GAAY,CAAC,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,KAAK,EAAkB,GAAA;AACvF,IAAA,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGC,iBAAAA,EAAAA;AAElD,IAAA,MAAMC,WAAc,GAAA,IAAA;QAClBP,OAAQD,CAAAA,MAAAA,CAAAA;AACV,KAAA;IAEA,MAAM,EAAES,WAAW,EAAE,GAAGV,SAAAA;AAExB,IAAA,MAAMW,OAAOD,WAAaC,EAAAA,IAAAA;AAE1B,IAAA,IAAIC,cAAiBR,GAAAA,KAAAA;AAErB,IAAA,IAAIO,SAAS,MAAQ,EAAA;AACnBC,QAAAA,cAAAA,GAAiBN,WAAWF,KAAO,EAAA;YAAES,SAAW,EAAA;AAAO,SAAA,CAAA;AACzD;AAEA,IAAA,IAAIF,SAAS,UAAY,EAAA;AACvBC,QAAAA,cAAAA,GAAiBN,WAAWF,KAAO,EAAA;YAAES,SAAW,EAAA,MAAA;YAAQC,SAAW,EAAA;AAAQ,SAAA,CAAA;AAC7E;AAEA,IAAA,IAAIH,SAAS,MAAQ,EAAA;AACnB,QAAA,MAAM,CAACI,IAAMC,EAAAA,MAAAA,CAAO,GAAGZ,KAAAA,CAAMa,KAAK,CAAC,GAAA,CAAA;AACnC,QAAA,MAAMC,OAAO,IAAIC,IAAAA,EAAAA;QACjBD,IAAKE,CAAAA,QAAQ,CAACC,MAAON,CAAAA,IAAAA,CAAAA,CAAAA;QACrBG,IAAKI,CAAAA,UAAU,CAACD,MAAOL,CAAAA,MAAAA,CAAAA,CAAAA;AAEvBJ,QAAAA,cAAAA,GAAiBL,WAAWW,IAAM,EAAA;YAChCH,IAAM,EAAA,SAAA;YACNC,MAAQ,EAAA;AACV,SAAA,CAAA;AACF;IAEA,MAAMO,OAAAA,GAAU,GAAGvB,SAAUwB,CAAAA,SAAS,EAAEC,KAAM,CAAA,CAAC,EAAEpB,aAAc,CAAA;QAC7DqB,EAAI,EAAA,CAAC,sCAAsC,EAAEvB,QAAU,CAAA,CAAA;QACvDwB,cAAgBxB,EAAAA;KACf,CAAA,CAAA,CAAC,EAAES,cAAgB,CAAA,CAAA;AAEtB,IAAA,qBACEgB,cAACC,CAAAA,gBAAAA,EAAAA;QAAI3B,OAASO,EAAAA,WAAAA;AAAaqB,QAAAA,IAAAA,gBAAMF,cAACG,CAAAA,WAAAA,EAAAA,EAAAA,CAAAA;QAAUC,OAAS,EAAA,CAAA;AAClDT,QAAAA,QAAAA,EAAAA;;AAGP;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterTag.mjs","sources":["../../../../admin/src/components/FilterList/FilterTag.tsx"],"sourcesContent":["import { Tag } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { FilterStructure } from './FilterList';\n\ntype FilterTagAttribute = {\n fieldSchema?: {\n type?: string; // \"date\" | \"enumeration\"\n options?: {\n label: string; // \"audio\" | \"video\" | \"image\" | \"file\"\n value: string; // \"audio\" | \"video\" | \"image\" | \"file\"\n }[];\n };\n metadatas?: {\n label?: string; // \"createdAt\" | \"updatedAt\" | \"type\"\n };\n name: string; // \"createdAt\" | \"updatedAt\" | \"mime\"\n};\n\ninterface FilterTagProps {\n attribute: FilterTagAttribute;\n operator: string;\n value: string;\n filter: FilterStructure;\n onClick: (filter: FilterStructure) => void;\n}\n\nexport const FilterTag = ({ attribute, filter, onClick, operator, value }: FilterTagProps) => {\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(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\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 <Tag onClick={handleClick} icon={<Cross />} padding={1}>\n {content}\n </Tag>\n );\n};\n"],"names":["FilterTag","attribute","filter","onClick","operator","value","formatMessage","formatDate","formatTime","useIntl","handleClick","fieldSchema","type","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","content","metadatas","label","id","defaultMessage","_jsx","Tag","icon","Cross","padding"],"mappings":";;;;;AA4BaA,MAAAA,SAAAA,GAAY,CAAC,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,KAAK,EAAkB,GAAA;AACvF,IAAA,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGC,OAAAA,EAAAA;AAElD,IAAA,MAAMC,WAAc,GAAA,IAAA;QAClBP,OAAQD,CAAAA,MAAAA,CAAAA;AACV,KAAA;IAEA,MAAM,EAAES,WAAW,EAAE,GAAGV,SAAAA;AAExB,IAAA,MAAMW,OAAOD,WAAaC,EAAAA,IAAAA;AAE1B,IAAA,IAAIC,cAAiBR,GAAAA,KAAAA;AAErB,IAAA,IAAIO,SAAS,MAAQ,EAAA;AACnBC,QAAAA,cAAAA,GAAiBN,WAAWF,KAAO,EAAA;YAAES,SAAW,EAAA;AAAO,SAAA,CAAA;AACzD;AAEA,IAAA,IAAIF,SAAS,UAAY,EAAA;AACvBC,QAAAA,cAAAA,GAAiBN,WAAWF,KAAO,EAAA;YAAES,SAAW,EAAA,MAAA;YAAQC,SAAW,EAAA;AAAQ,SAAA,CAAA;AAC7E;AAEA,IAAA,IAAIH,SAAS,MAAQ,EAAA;AACnB,QAAA,MAAM,CAACI,IAAMC,EAAAA,MAAAA,CAAO,GAAGZ,KAAAA,CAAMa,KAAK,CAAC,GAAA,CAAA;AACnC,QAAA,MAAMC,OAAO,IAAIC,IAAAA,EAAAA;QACjBD,IAAKE,CAAAA,QAAQ,CAACC,MAAON,CAAAA,IAAAA,CAAAA,CAAAA;QACrBG,IAAKI,CAAAA,UAAU,CAACD,MAAOL,CAAAA,MAAAA,CAAAA,CAAAA;AAEvBJ,QAAAA,cAAAA,GAAiBL,WAAWW,IAAM,EAAA;YAChCH,IAAM,EAAA,SAAA;YACNC,MAAQ,EAAA;AACV,SAAA,CAAA;AACF;IAEA,MAAMO,OAAAA,GAAU,
|
|
1
|
+
{"version":3,"file":"FilterTag.mjs","sources":["../../../../admin/src/components/FilterList/FilterTag.tsx"],"sourcesContent":["import { Tag } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { FilterStructure } from './FilterList';\n\ntype FilterTagAttribute = {\n fieldSchema?: {\n type?: string; // \"date\" | \"enumeration\"\n options?: {\n label: string; // \"audio\" | \"video\" | \"image\" | \"file\"\n value: string; // \"audio\" | \"video\" | \"image\" | \"file\"\n }[];\n };\n metadatas?: {\n label?: string; // \"createdAt\" | \"updatedAt\" | \"type\"\n };\n name: string; // \"createdAt\" | \"updatedAt\" | \"mime\"\n};\n\ninterface FilterTagProps {\n attribute: FilterTagAttribute;\n operator: string;\n value: string;\n filter: FilterStructure;\n onClick: (filter: FilterStructure) => void;\n}\n\nexport const FilterTag = ({ attribute, filter, onClick, operator, value }: FilterTagProps) => {\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(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\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 <Tag onClick={handleClick} icon={<Cross />} padding={1}>\n {content}\n </Tag>\n );\n};\n"],"names":["FilterTag","attribute","filter","onClick","operator","value","formatMessage","formatDate","formatTime","useIntl","handleClick","fieldSchema","type","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","content","metadatas","label","id","defaultMessage","_jsx","Tag","icon","Cross","padding"],"mappings":";;;;;AA4BaA,MAAAA,SAAAA,GAAY,CAAC,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,KAAK,EAAkB,GAAA;AACvF,IAAA,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGC,OAAAA,EAAAA;AAElD,IAAA,MAAMC,WAAc,GAAA,IAAA;QAClBP,OAAQD,CAAAA,MAAAA,CAAAA;AACV,KAAA;IAEA,MAAM,EAAES,WAAW,EAAE,GAAGV,SAAAA;AAExB,IAAA,MAAMW,OAAOD,WAAaC,EAAAA,IAAAA;AAE1B,IAAA,IAAIC,cAAiBR,GAAAA,KAAAA;AAErB,IAAA,IAAIO,SAAS,MAAQ,EAAA;AACnBC,QAAAA,cAAAA,GAAiBN,WAAWF,KAAO,EAAA;YAAES,SAAW,EAAA;AAAO,SAAA,CAAA;AACzD;AAEA,IAAA,IAAIF,SAAS,UAAY,EAAA;AACvBC,QAAAA,cAAAA,GAAiBN,WAAWF,KAAO,EAAA;YAAES,SAAW,EAAA,MAAA;YAAQC,SAAW,EAAA;AAAQ,SAAA,CAAA;AAC7E;AAEA,IAAA,IAAIH,SAAS,MAAQ,EAAA;AACnB,QAAA,MAAM,CAACI,IAAMC,EAAAA,MAAAA,CAAO,GAAGZ,KAAAA,CAAMa,KAAK,CAAC,GAAA,CAAA;AACnC,QAAA,MAAMC,OAAO,IAAIC,IAAAA,EAAAA;QACjBD,IAAKE,CAAAA,QAAQ,CAACC,MAAON,CAAAA,IAAAA,CAAAA,CAAAA;QACrBG,IAAKI,CAAAA,UAAU,CAACD,MAAOL,CAAAA,MAAAA,CAAAA,CAAAA;AAEvBJ,QAAAA,cAAAA,GAAiBL,WAAWW,IAAM,EAAA;YAChCH,IAAM,EAAA,SAAA;YACNC,MAAQ,EAAA;AACV,SAAA,CAAA;AACF;IAEA,MAAMO,OAAAA,GAAU,GAAGvB,SAAUwB,CAAAA,SAAS,EAAEC,KAAM,CAAA,CAAC,EAAEpB,aAAc,CAAA;QAC7DqB,EAAI,EAAA,CAAC,sCAAsC,EAAEvB,QAAU,CAAA,CAAA;QACvDwB,cAAgBxB,EAAAA;KACf,CAAA,CAAA,CAAC,EAAES,cAAgB,CAAA,CAAA;AAEtB,IAAA,qBACEgB,GAACC,CAAAA,GAAAA,EAAAA;QAAI3B,OAASO,EAAAA,WAAAA;AAAaqB,QAAAA,IAAAA,gBAAMF,GAACG,CAAAA,KAAAA,EAAAA,EAAAA,CAAAA;QAAUC,OAAS,EAAA,CAAA;AAClDT,QAAAA,QAAAA,EAAAA;;AAGP;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FolderCardBody.js","sources":["../../../../../admin/src/components/FolderCard/FolderCardBody/FolderCardBody.tsx"],"sourcesContent":["import { Flex, FlexProps } 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: FlexProps) => {\n const { id } = useFolderCard();\n\n return (\n <StyledBox\n {...props}\n id={`${id}-title`}\n data-testid={`${id}-title`}\n alignItems=\"flex-start\"\n direction=\"column\"\n maxWidth=\"100%\"\n overflow=\"hidden\"\n position=\"relative\"\n />\n );\n};\n"],"names":["StyledBox","styled","Flex","FolderCardBody","props","id","useFolderCard","_jsx","data-testid","alignItems","direction","maxWidth","overflow","position"],"mappings":";;;;;;;AAKA,MAAMA,SAAAA,GAAYC,uBAAOC,CAAAA,iBAAAA,CAAK;;AAE9B,CAAC;AAEM,MAAMC,iBAAiB,CAACC,KAAAA,GAAAA;IAC7B,MAAM,EAAEC,EAAE,EAAE,GAAGC,wBAAAA,EAAAA;AAEf,IAAA,qBACEC,cAACP,CAAAA,SAAAA,EAAAA;AACE,QAAA,GAAGI,KAAK;
|
|
1
|
+
{"version":3,"file":"FolderCardBody.js","sources":["../../../../../admin/src/components/FolderCard/FolderCardBody/FolderCardBody.tsx"],"sourcesContent":["import { Flex, FlexProps } 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: FlexProps) => {\n const { id } = useFolderCard();\n\n return (\n <StyledBox\n {...props}\n id={`${id}-title`}\n data-testid={`${id}-title`}\n alignItems=\"flex-start\"\n direction=\"column\"\n maxWidth=\"100%\"\n overflow=\"hidden\"\n position=\"relative\"\n />\n );\n};\n"],"names":["StyledBox","styled","Flex","FolderCardBody","props","id","useFolderCard","_jsx","data-testid","alignItems","direction","maxWidth","overflow","position"],"mappings":";;;;;;;AAKA,MAAMA,SAAAA,GAAYC,uBAAOC,CAAAA,iBAAAA,CAAK;;AAE9B,CAAC;AAEM,MAAMC,iBAAiB,CAACC,KAAAA,GAAAA;IAC7B,MAAM,EAAEC,EAAE,EAAE,GAAGC,wBAAAA,EAAAA;AAEf,IAAA,qBACEC,cAACP,CAAAA,SAAAA,EAAAA;AACE,QAAA,GAAGI,KAAK;QACTC,EAAI,EAAA,CAAA,EAAGA,EAAG,CAAA,MAAM,CAAC;QACjBG,aAAa,EAAA,CAAA,EAAGH,EAAG,CAAA,MAAM,CAAC;QAC1BI,UAAW,EAAA,YAAA;QACXC,SAAU,EAAA,QAAA;QACVC,QAAS,EAAA,MAAA;QACTC,QAAS,EAAA,QAAA;QACTC,QAAS,EAAA;;AAGf;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FolderCardBody.mjs","sources":["../../../../../admin/src/components/FolderCard/FolderCardBody/FolderCardBody.tsx"],"sourcesContent":["import { Flex, FlexProps } 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: FlexProps) => {\n const { id } = useFolderCard();\n\n return (\n <StyledBox\n {...props}\n id={`${id}-title`}\n data-testid={`${id}-title`}\n alignItems=\"flex-start\"\n direction=\"column\"\n maxWidth=\"100%\"\n overflow=\"hidden\"\n position=\"relative\"\n />\n );\n};\n"],"names":["StyledBox","styled","Flex","FolderCardBody","props","id","useFolderCard","_jsx","data-testid","alignItems","direction","maxWidth","overflow","position"],"mappings":";;;;;AAKA,MAAMA,SAAAA,GAAYC,MAAOC,CAAAA,IAAAA,CAAK;;AAE9B,CAAC;AAEM,MAAMC,iBAAiB,CAACC,KAAAA,GAAAA;IAC7B,MAAM,EAAEC,EAAE,EAAE,GAAGC,aAAAA,EAAAA;AAEf,IAAA,qBACEC,GAACP,CAAAA,SAAAA,EAAAA;AACE,QAAA,GAAGI,KAAK;
|
|
1
|
+
{"version":3,"file":"FolderCardBody.mjs","sources":["../../../../../admin/src/components/FolderCard/FolderCardBody/FolderCardBody.tsx"],"sourcesContent":["import { Flex, FlexProps } 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: FlexProps) => {\n const { id } = useFolderCard();\n\n return (\n <StyledBox\n {...props}\n id={`${id}-title`}\n data-testid={`${id}-title`}\n alignItems=\"flex-start\"\n direction=\"column\"\n maxWidth=\"100%\"\n overflow=\"hidden\"\n position=\"relative\"\n />\n );\n};\n"],"names":["StyledBox","styled","Flex","FolderCardBody","props","id","useFolderCard","_jsx","data-testid","alignItems","direction","maxWidth","overflow","position"],"mappings":";;;;;AAKA,MAAMA,SAAAA,GAAYC,MAAOC,CAAAA,IAAAA,CAAK;;AAE9B,CAAC;AAEM,MAAMC,iBAAiB,CAACC,KAAAA,GAAAA;IAC7B,MAAM,EAAEC,EAAE,EAAE,GAAGC,aAAAA,EAAAA;AAEf,IAAA,qBACEC,GAACP,CAAAA,SAAAA,EAAAA;AACE,QAAA,GAAGI,KAAK;QACTC,EAAI,EAAA,CAAA,EAAGA,EAAG,CAAA,MAAM,CAAC;QACjBG,aAAa,EAAA,CAAA,EAAGH,EAAG,CAAA,MAAM,CAAC;QAC1BI,UAAW,EAAA,YAAA;QACXC,SAAU,EAAA,QAAA;QACVC,QAAS,EAAA,MAAA;QACTC,QAAS,EAAA,QAAA;QACTC,QAAS,EAAA;;AAGf;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FolderCardCheckbox.js","sources":["../../../../../admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.tsx"],"sourcesContent":["import { Checkbox, Box, CheckboxProps } from '@strapi/design-system';\n\nimport { useFolderCard } from '../contexts/FolderCard';\n\nexport const FolderCardCheckbox = (props: CheckboxProps) => {\n const { id } = useFolderCard();\n\n return (\n <Box position=\"relative\" zIndex={2}>\n <Checkbox aria-labelledby={`${id}-title`} {...props} />\n </Box>\n );\n};\n"],"names":["FolderCardCheckbox","props","id","useFolderCard","_jsx","Box","position","zIndex","Checkbox","aria-labelledby"],"mappings":";;;;;;AAIO,MAAMA,qBAAqB,CAACC,KAAAA,GAAAA;IACjC,MAAM,EAAEC,EAAE,EAAE,GAAGC,wBAAAA,EAAAA;AAEf,IAAA,qBACEC,cAACC,CAAAA,gBAAAA,EAAAA;QAAIC,QAAS,EAAA,UAAA;QAAWC,MAAQ,EAAA,CAAA;AAC/B,QAAA,QAAA,gBAAAH,cAACI,CAAAA,qBAAAA,EAAAA;
|
|
1
|
+
{"version":3,"file":"FolderCardCheckbox.js","sources":["../../../../../admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.tsx"],"sourcesContent":["import { Checkbox, Box, CheckboxProps } from '@strapi/design-system';\n\nimport { useFolderCard } from '../contexts/FolderCard';\n\nexport const FolderCardCheckbox = (props: CheckboxProps) => {\n const { id } = useFolderCard();\n\n return (\n <Box position=\"relative\" zIndex={2}>\n <Checkbox aria-labelledby={`${id}-title`} {...props} />\n </Box>\n );\n};\n"],"names":["FolderCardCheckbox","props","id","useFolderCard","_jsx","Box","position","zIndex","Checkbox","aria-labelledby"],"mappings":";;;;;;AAIO,MAAMA,qBAAqB,CAACC,KAAAA,GAAAA;IACjC,MAAM,EAAEC,EAAE,EAAE,GAAGC,wBAAAA,EAAAA;AAEf,IAAA,qBACEC,cAACC,CAAAA,gBAAAA,EAAAA;QAAIC,QAAS,EAAA,UAAA;QAAWC,MAAQ,EAAA,CAAA;AAC/B,QAAA,QAAA,gBAAAH,cAACI,CAAAA,qBAAAA,EAAAA;YAASC,iBAAiB,EAAA,CAAA,EAAGP,EAAG,CAAA,MAAM,CAAC;AAAG,YAAA,GAAGD;;;AAGpD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FolderCardCheckbox.mjs","sources":["../../../../../admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.tsx"],"sourcesContent":["import { Checkbox, Box, CheckboxProps } from '@strapi/design-system';\n\nimport { useFolderCard } from '../contexts/FolderCard';\n\nexport const FolderCardCheckbox = (props: CheckboxProps) => {\n const { id } = useFolderCard();\n\n return (\n <Box position=\"relative\" zIndex={2}>\n <Checkbox aria-labelledby={`${id}-title`} {...props} />\n </Box>\n );\n};\n"],"names":["FolderCardCheckbox","props","id","useFolderCard","_jsx","Box","position","zIndex","Checkbox","aria-labelledby"],"mappings":";;;;AAIO,MAAMA,qBAAqB,CAACC,KAAAA,GAAAA;IACjC,MAAM,EAAEC,EAAE,EAAE,GAAGC,aAAAA,EAAAA;AAEf,IAAA,qBACEC,GAACC,CAAAA,GAAAA,EAAAA;QAAIC,QAAS,EAAA,UAAA;QAAWC,MAAQ,EAAA,CAAA;AAC/B,QAAA,QAAA,gBAAAH,GAACI,CAAAA,QAAAA,EAAAA;
|
|
1
|
+
{"version":3,"file":"FolderCardCheckbox.mjs","sources":["../../../../../admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.tsx"],"sourcesContent":["import { Checkbox, Box, CheckboxProps } from '@strapi/design-system';\n\nimport { useFolderCard } from '../contexts/FolderCard';\n\nexport const FolderCardCheckbox = (props: CheckboxProps) => {\n const { id } = useFolderCard();\n\n return (\n <Box position=\"relative\" zIndex={2}>\n <Checkbox aria-labelledby={`${id}-title`} {...props} />\n </Box>\n );\n};\n"],"names":["FolderCardCheckbox","props","id","useFolderCard","_jsx","Box","position","zIndex","Checkbox","aria-labelledby"],"mappings":";;;;AAIO,MAAMA,qBAAqB,CAACC,KAAAA,GAAAA;IACjC,MAAM,EAAEC,EAAE,EAAE,GAAGC,aAAAA,EAAAA;AAEf,IAAA,qBACEC,GAACC,CAAAA,GAAAA,EAAAA;QAAIC,QAAS,EAAA,UAAA;QAAWC,MAAQ,EAAA,CAAA;AAC/B,QAAA,QAAA,gBAAAH,GAACI,CAAAA,QAAAA,EAAAA;YAASC,iBAAiB,EAAA,CAAA,EAAGP,EAAG,CAAA,MAAM,CAAC;AAAG,YAAA,GAAGD;;;AAGpD;;;;"}
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var designSystem = require('@strapi/design-system');
|
|
5
|
-
var icons = require('@strapi/icons');
|
|
6
5
|
var styledComponents = require('styled-components');
|
|
7
|
-
var
|
|
6
|
+
var enums = require('../../../enums.js');
|
|
8
7
|
var createAssetUrl = require('../../../utils/createAssetUrl.js');
|
|
9
8
|
require('byte-size');
|
|
10
9
|
require('date-fns');
|
|
11
10
|
require('qs');
|
|
11
|
+
require('../../../utils/typeFromMime.js');
|
|
12
12
|
require('../../../utils/urlYupSchema.js');
|
|
13
|
+
var icons = require('../../../utils/icons.js');
|
|
13
14
|
var AudioPreview = require('../../AssetCard/AudioPreview.js');
|
|
14
15
|
var VideoPreview = require('../../AssetCard/VideoPreview.js');
|
|
15
16
|
|
|
@@ -30,7 +31,7 @@ const AudioPreviewWrapper = styledComponents.styled(designSystem.Box)`
|
|
|
30
31
|
}
|
|
31
32
|
`;
|
|
32
33
|
const CarouselAsset = ({ asset })=>{
|
|
33
|
-
if (asset.mime?.includes(
|
|
34
|
+
if (asset.mime?.includes(enums.AssetType.Video)) {
|
|
34
35
|
return /*#__PURE__*/ jsxRuntime.jsx(VideoPreviewWrapper, {
|
|
35
36
|
height: "100%",
|
|
36
37
|
children: /*#__PURE__*/ jsxRuntime.jsx(VideoPreview.VideoPreview, {
|
|
@@ -40,7 +41,7 @@ const CarouselAsset = ({ asset })=>{
|
|
|
40
41
|
})
|
|
41
42
|
});
|
|
42
43
|
}
|
|
43
|
-
if (asset.mime?.includes(
|
|
44
|
+
if (asset.mime?.includes(enums.AssetType.Audio)) {
|
|
44
45
|
return /*#__PURE__*/ jsxRuntime.jsx(AudioPreviewWrapper, {
|
|
45
46
|
children: /*#__PURE__*/ jsxRuntime.jsx(AudioPreview.AudioPreview, {
|
|
46
47
|
url: createAssetUrl.createAssetUrl(asset, true),
|
|
@@ -48,7 +49,7 @@ const CarouselAsset = ({ asset })=>{
|
|
|
48
49
|
})
|
|
49
50
|
});
|
|
50
51
|
}
|
|
51
|
-
if (asset.mime?.includes(
|
|
52
|
+
if (asset.mime?.includes(enums.AssetType.Image)) {
|
|
52
53
|
const assetUrl = createAssetUrl.createAssetUrl(asset, true);
|
|
53
54
|
if (!assetUrl) return null;
|
|
54
55
|
// Adding a param to the url to bust the cache and force the refresh of the image when replaced
|
|
@@ -62,16 +63,13 @@ const CarouselAsset = ({ asset })=>{
|
|
|
62
63
|
alt: asset.alternativeText || asset.name
|
|
63
64
|
});
|
|
64
65
|
}
|
|
66
|
+
const IconComponent = icons.getFileIconComponent(asset.ext);
|
|
65
67
|
return /*#__PURE__*/ jsxRuntime.jsx(DocAsset, {
|
|
66
68
|
width: "100%",
|
|
67
69
|
height: "100%",
|
|
68
70
|
justifyContent: "center",
|
|
69
71
|
hasRadius: true,
|
|
70
|
-
children:
|
|
71
|
-
"aria-label": asset.alternativeText || asset.name,
|
|
72
|
-
width: "24px",
|
|
73
|
-
height: "32px"
|
|
74
|
-
}) : /*#__PURE__*/ jsxRuntime.jsx(icons.File, {
|
|
72
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(IconComponent, {
|
|
75
73
|
"aria-label": asset.alternativeText || asset.name,
|
|
76
74
|
width: "24px",
|
|
77
75
|
height: "32px"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CarouselAsset.js","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.tsx"],"sourcesContent":["import { Box, Flex } from '@strapi/design-system';\nimport {
|
|
1
|
+
{"version":3,"file":"CarouselAsset.js","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.tsx"],"sourcesContent":["import { Box, Flex } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { createAssetUrl } from '../../../utils';\nimport { getFileIconComponent } from '../../../utils/icons';\nimport { AudioPreview } from '../../AssetCard/AudioPreview';\nimport { VideoPreview } from '../../AssetCard/VideoPreview';\n\nimport type { File as FileAsset } from '../../../../../shared/contracts/files';\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 }: { asset: FileAsset }) => {\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\n url={createAssetUrl(asset, true)!}\n alt={asset.alternativeText || asset.name}\n />\n </AudioPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(AssetType.Image)) {\n const assetUrl = createAssetUrl(asset, true);\n if (!assetUrl) return null;\n\n // Adding a param to the url to bust the cache and force the refresh of the image when replaced\n // Only add updatedAt parameter if the URL is not signed to prevent signature invalidation\n const cacheBustedUrl = asset.isUrlSigned\n ? assetUrl\n : `${assetUrl}${assetUrl.includes('?') ? '&' : '?'}updatedAt=${asset.updatedAt}`;\n\n return (\n <Box\n tag=\"img\"\n maxHeight=\"100%\"\n maxWidth=\"100%\"\n src={cacheBustedUrl}\n alt={asset.alternativeText || asset.name}\n />\n );\n }\n\n const IconComponent = getFileIconComponent(asset.ext);\n\n return (\n <DocAsset width=\"100%\" height=\"100%\" justifyContent=\"center\" hasRadius>\n <IconComponent aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n </DocAsset>\n );\n};\n"],"names":["DocAsset","styled","Flex","VideoPreviewWrapper","Box","AudioPreviewWrapper","CarouselAsset","asset","mime","includes","AssetType","Video","_jsx","height","VideoPreview","url","createAssetUrl","alt","alternativeText","name","Audio","AudioPreview","Image","assetUrl","cacheBustedUrl","isUrlSigned","updatedAt","tag","maxHeight","maxWidth","src","IconComponent","getFileIconComponent","ext","width","justifyContent","hasRadius","aria-label"],"mappings":";;;;;;;;;;;;;;;;AAWA,MAAMA,QAAAA,GAAWC,uBAAOC,CAAAA,iBAAAA,CAAK;;AAE7B,CAAC;AAED,MAAMC,mBAAAA,GAAsBF,uBAAOG,CAAAA,gBAAAA,CAAI;;;;;;AAMvC,CAAC;AAED,MAAMC,mBAAAA,GAAsBJ,uBAAOG,CAAAA,gBAAAA,CAAI;;;;;AAKvC,CAAC;AAEYE,MAAAA,aAAAA,GAAgB,CAAC,EAAEC,KAAK,EAAwB,GAAA;AAC3D,IAAA,IAAIA,MAAMC,IAAI,EAAEC,QAASC,CAAAA,eAAAA,CAAUC,KAAK,CAAG,EAAA;AACzC,QAAA,qBACEC,cAACT,CAAAA,mBAAAA,EAAAA;YAAoBU,MAAO,EAAA,MAAA;AAC1B,YAAA,QAAA,gBAAAD,cAACE,CAAAA,yBAAAA,EAAAA;AACCC,gBAAAA,GAAAA,EAAKC,8BAAeT,KAAO,EAAA,IAAA,CAAA;AAC3BC,gBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAChBS,gBAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAASC,CAAAA,eAAAA,CAAUU,KAAK,CAAG,EAAA;AACzC,QAAA,qBACER,cAACP,CAAAA,mBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAO,cAACS,CAAAA,yBAAAA,EAAAA;AACCN,gBAAAA,GAAAA,EAAKC,8BAAeT,KAAO,EAAA,IAAA,CAAA;AAC3BU,gBAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAASC,CAAAA,eAAAA,CAAUY,KAAK,CAAG,EAAA;QACzC,MAAMC,QAAAA,GAAWP,8BAAeT,KAAO,EAAA,IAAA,CAAA;QACvC,IAAI,CAACgB,UAAU,OAAO,IAAA;;;AAItB,QAAA,MAAMC,iBAAiBjB,KAAMkB,CAAAA,WAAW,GACpCF,QAAAA,GACA,GAAGA,QAAWA,CAAAA,EAAAA,QAAAA,CAASd,QAAQ,CAAC,OAAO,GAAM,GAAA,GAAA,CAAI,UAAU,EAAEF,KAAAA,CAAMmB,SAAS,CAAE,CAAA;AAElF,QAAA,qBACEd,cAACR,CAAAA,gBAAAA,EAAAA;YACCuB,GAAI,EAAA,KAAA;YACJC,SAAU,EAAA,MAAA;YACVC,QAAS,EAAA,MAAA;YACTC,GAAKN,EAAAA,cAAAA;AACLP,YAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;AAG1C;IAEA,MAAMY,aAAAA,GAAgBC,0BAAqBzB,CAAAA,KAAAA,CAAM0B,GAAG,CAAA;AAEpD,IAAA,qBACErB,cAACZ,CAAAA,QAAAA,EAAAA;QAASkC,KAAM,EAAA,MAAA;QAAOrB,MAAO,EAAA,MAAA;QAAOsB,cAAe,EAAA,QAAA;QAASC,SAAS,EAAA,IAAA;AACpE,QAAA,QAAA,gBAAAxB,cAACmB,CAAAA,aAAAA,EAAAA;AAAcM,YAAAA,YAAAA,EAAY9B,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY,IAAI;YAAEe,KAAM,EAAA,MAAA;YAAOrB,MAAO,EAAA;;;AAG1F;;;;"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Flex, Box } from '@strapi/design-system';
|
|
3
|
-
import { FilePdf, File } from '@strapi/icons';
|
|
4
3
|
import { styled } from 'styled-components';
|
|
5
|
-
import { AssetType } from '../../../
|
|
4
|
+
import { AssetType } from '../../../enums.mjs';
|
|
6
5
|
import { createAssetUrl } from '../../../utils/createAssetUrl.mjs';
|
|
7
6
|
import 'byte-size';
|
|
8
7
|
import 'date-fns';
|
|
9
8
|
import 'qs';
|
|
9
|
+
import '../../../utils/typeFromMime.mjs';
|
|
10
10
|
import '../../../utils/urlYupSchema.mjs';
|
|
11
|
+
import { getFileIconComponent } from '../../../utils/icons.mjs';
|
|
11
12
|
import { AudioPreview } from '../../AssetCard/AudioPreview.mjs';
|
|
12
13
|
import { VideoPreview } from '../../AssetCard/VideoPreview.mjs';
|
|
13
14
|
|
|
@@ -60,16 +61,13 @@ const CarouselAsset = ({ asset })=>{
|
|
|
60
61
|
alt: asset.alternativeText || asset.name
|
|
61
62
|
});
|
|
62
63
|
}
|
|
64
|
+
const IconComponent = getFileIconComponent(asset.ext);
|
|
63
65
|
return /*#__PURE__*/ jsx(DocAsset, {
|
|
64
66
|
width: "100%",
|
|
65
67
|
height: "100%",
|
|
66
68
|
justifyContent: "center",
|
|
67
69
|
hasRadius: true,
|
|
68
|
-
children:
|
|
69
|
-
"aria-label": asset.alternativeText || asset.name,
|
|
70
|
-
width: "24px",
|
|
71
|
-
height: "32px"
|
|
72
|
-
}) : /*#__PURE__*/ jsx(File, {
|
|
70
|
+
children: /*#__PURE__*/ jsx(IconComponent, {
|
|
73
71
|
"aria-label": asset.alternativeText || asset.name,
|
|
74
72
|
width: "24px",
|
|
75
73
|
height: "32px"
|