{"version":3,"file":"AIAssetCard.mjs","sources":["../../../../admin/src/ai/components/AIAssetCard.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { ConfirmDialog } from '@strapi/admin/strapi-admin';\nimport {\n  Box,\n  Card,\n  CardAction,\n  CardAsset,\n  CardBadge,\n  CardBody,\n  CardContent,\n  CardHeader,\n  CardSubtitle,\n  CardTitle,\n  CardTimer,\n  Field,\n  Flex,\n  Grid,\n  TextInput,\n  Typography,\n  IconButton,\n  Dialog,\n  Modal,\n} from '@strapi/design-system';\nimport { Pencil, Sparkle, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AudioPreview } from '../../components/AssetCard/AudioPreview';\nimport { VideoPreview } from '../../components/AssetCard/VideoPreview';\nimport { type Asset, EditAssetContent } from '../../components/EditAssetDialog/EditAssetContent';\nimport { AssetType, DocType } from '../../enums';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { useRemoveAsset } from '../../hooks/useRemoveAsset';\nimport {\n  formatBytes,\n  formatDuration,\n  getFileExtension,\n  getTrad,\n  prefixFileUrlWithBackendUrl,\n} from '../../utils';\nimport { typeFromMime } from '../../utils/typeFromMime';\n\nimport { useAIUploadModalContext } from './AIUploadModal';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst CardActionsContainer = styled(CardAction)`\n  opacity: 0;\n  z-index: 1;\n\n  &:focus-within {\n    opacity: 1;\n  }\n`;\n\nconst CardContainer = styled(Box)`\n  background: ${({ theme }) => theme.colors.neutral0};\n  border: 1px solid ${({ theme }) => theme.colors.neutral150};\n  border-radius: ${({ theme }) => theme.borderRadius};\n\n  &:hover {\n    ${CardActionsContainer} {\n      opacity: 1;\n    }\n  }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AssetCardActions\n * -----------------------------------------------------------------------------------------------*/\n\nconst AssetCardActions = ({ asset }: { asset: File }) => {\n  const { formatMessage } = useIntl();\n  const dispatch = useAIUploadModalContext('AssetCardActions', (s) => s.dispatch);\n  const state = useAIUploadModalContext('AssetCardActions', (s) => s.state);\n  const onClose = useAIUploadModalContext('AssetCardActions', (s) => s.onClose);\n  const { canUpdate, canCopyLink, canDownload } = useMediaLibraryPermissions();\n\n  const [isEditModalOpen, setIsEditModalOpen] = React.useState(false);\n\n  const { removeAsset } = useRemoveAsset(() => {});\n\n  const handleConfirmRemove = async (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n    event?.preventDefault();\n    await removeAsset(asset.id);\n    dispatch({\n      type: 'remove_uploaded_asset',\n      payload: { id: asset.id },\n    });\n\n    // Close modal if this was the last asset\n    if (state.uploadedAssets.length === 1) {\n      onClose();\n    }\n  };\n\n  const handlePropagationClick = (event: React.MouseEvent) => {\n    event.stopPropagation();\n  };\n\n  const handleEditAsset = (editedAsset?: File | null) => {\n    if (editedAsset) {\n      dispatch({\n        type: 'edit_uploaded_asset',\n        payload: { editedAsset },\n      });\n\n      setIsEditModalOpen(false);\n    }\n  };\n\n  return (\n    <CardActionsContainer onClick={handlePropagationClick} position=\"end\">\n      <Dialog.Root>\n        <Dialog.Trigger>\n          <IconButton\n            label={formatMessage({\n              id: getTrad('control-card.remove-selection'),\n              defaultMessage: 'Remove from selection',\n            })}\n          >\n            <Trash />\n          </IconButton>\n        </Dialog.Trigger>\n        <ConfirmDialog onConfirm={handleConfirmRemove} />\n      </Dialog.Root>\n\n      <Modal.Root open={isEditModalOpen} onOpenChange={setIsEditModalOpen}>\n        <Modal.Trigger>\n          <IconButton\n            label={formatMessage({ id: getTrad('control-card.edit'), defaultMessage: 'Edit' })}\n          >\n            <Pencil />\n          </IconButton>\n        </Modal.Trigger>\n        <Modal.Content>\n          <EditAssetContent\n            // Is Local must be set to false to trigger the correct branch of logic in the EditAssetContent on submit\n            asset={\n              {\n                ...asset,\n                isLocal: false,\n                folder: typeof asset.folder === 'number' ? { id: asset.folder } : asset.folder,\n              } as Asset\n            }\n            onClose={(arg) => handleEditAsset(arg as File)}\n            canUpdate={canUpdate}\n            canCopyLink={canCopyLink}\n            canDownload={canDownload}\n            omitFields={['caption', 'alternativeText']}\n            omitActions={['replace']}\n          />\n        </Modal.Content>\n      </Modal.Root>\n    </CardActionsContainer>\n  );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Asset\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetProps {\n  assetType: AssetType | DocType;\n  thumbnailUrl: string;\n  assetUrl: string;\n  asset: File;\n}\n\ninterface AssetCardProps {\n  asset: File;\n  onCaptionChange: (caption: string) => void;\n  onAltTextChange: (altText: string) => void;\n  wasCaptionChanged: boolean;\n  wasAltTextChanged: boolean;\n}\n\nconst Extension = styled.span`\n  text-transform: uppercase;\n`;\n\nconst VideoPreviewWrapper = styled(Box)`\n  position: relative;\n  height: 100%;\n  overflow: hidden;\n\n  canvas,\n  video {\n    display: block;\n    pointer-events: none;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    border-radius: ${({ theme }) => theme.borderRadius};\n  }\n`;\n\nconst VideoTimerOverlay = styled(CardTimer)`\n  position: absolute;\n  bottom: 0.5rem;\n  right: 0.5rem;\n`;\n\nconst AudioPreviewWrapper = styled(Box)`\n  height: 100%;\n  overflow: hidden;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  canvas,\n  audio {\n    display: block;\n    max-width: 100%;\n    max-height: 100%;\n  }\n`;\n\nconst Asset = ({ assetType, thumbnailUrl, assetUrl, asset }: AssetProps) => {\n  const [duration, setDuration] = React.useState<number>();\n  const formattedDuration = duration ? formatDuration(duration) : undefined;\n\n  switch (assetType) {\n    case AssetType.Image:\n      return <CardAsset src={thumbnailUrl} size=\"S\" alt={asset.alternativeText || asset.name} />;\n    case AssetType.Video:\n      return (\n        <CardAsset size=\"S\">\n          <VideoPreviewWrapper>\n            <VideoPreview\n              url={assetUrl}\n              mime={asset.mime || 'video/mp4'}\n              onLoadDuration={setDuration}\n              alt={asset.alternativeText || asset.name}\n            />\n            {formattedDuration && <VideoTimerOverlay>{formattedDuration}</VideoTimerOverlay>}\n          </VideoPreviewWrapper>\n        </CardAsset>\n      );\n    case AssetType.Audio:\n      return (\n        <CardAsset size=\"S\">\n          <AudioPreviewWrapper>\n            <AudioPreview url={assetUrl} alt={asset.alternativeText || asset.name} />\n          </AudioPreviewWrapper>\n        </CardAsset>\n      );\n    default:\n      return <CardAsset src={thumbnailUrl} size=\"S\" alt={asset.alternativeText || asset.name} />;\n  }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetCard\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledCardBody = styled(CardBody)`\n  display: flex;\n  padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst StyledCard = styled(Card)`\n  width: 100%;\n  height: 100%;\n  border: none;\n  box-shadow: none;\n  border-radius: 0;\n  padding: 0;\n`;\n\nconst getAssetBadgeLabel = (assetType: AssetType | DocType) => {\n  switch (assetType) {\n    case AssetType.Image:\n      return { id: getTrad('settings.section.image.label'), defaultMessage: 'IMAGE' };\n    case AssetType.Video:\n      return { id: getTrad('settings.section.video.label'), defaultMessage: 'VIDEO' };\n    case AssetType.Audio:\n      return { id: getTrad('settings.section.audio.label'), defaultMessage: 'AUDIO' };\n    case DocType.Pdf:\n      return { id: getTrad('settings.section.pdf.label'), defaultMessage: 'PDF' };\n    case DocType.Csv:\n      return { id: getTrad('settings.section.csv.label'), defaultMessage: 'CSV' };\n    case DocType.Xls:\n      return { id: getTrad('settings.section.xls.label'), defaultMessage: 'XLS' };\n    case DocType.Zip:\n      return { id: getTrad('settings.section.zip.label'), defaultMessage: 'ZIP' };\n    default:\n      return { id: getTrad('settings.section.doc.label'), defaultMessage: 'DOC' };\n  }\n};\n\nexport const AIAssetCard = ({\n  asset,\n  onCaptionChange,\n  onAltTextChange,\n  wasAltTextChanged,\n  wasCaptionChanged,\n}: AssetCardProps) => {\n  const { formatMessage } = useIntl();\n\n  const assetType = typeFromMime(asset.mime || '');\n  const thumbnailUrl =\n    prefixFileUrlWithBackendUrl(asset?.formats?.thumbnail?.url || asset.url) || '';\n  const assetUrl = prefixFileUrlWithBackendUrl(asset.url) || '';\n  const subtitle = asset.height && asset.width ? ` - ${asset.width}x${asset.height}` : '';\n  const formattedSize = asset.size ? formatBytes(asset.size) : '';\n  const fullSubtitle = `${subtitle}${subtitle && formattedSize ? ' - ' : ''}${formattedSize}`;\n\n  const [caption, setCaption] = React.useState(asset.caption || '');\n  React.useEffect(() => {\n    onCaptionChange(caption);\n  }, [caption, onCaptionChange]);\n\n  const [altText, setAltText] = React.useState(asset.alternativeText || '');\n  React.useEffect(() => {\n    onAltTextChange(altText);\n  }, [altText, onAltTextChange]);\n\n  return (\n    <CardContainer>\n      <Grid.Root>\n        <Grid.Item m={5} xs={12} alignItems=\"stretch\">\n          <StyledCard width=\"100%\" height=\"100%\" shadow=\"none\" borderRadius={0} padding={0}>\n            <CardHeader style={{ borderStyle: 'none' }}>\n              <AssetCardActions asset={asset} />\n              <Asset\n                assetType={assetType}\n                thumbnailUrl={thumbnailUrl}\n                assetUrl={assetUrl}\n                asset={asset}\n              />\n            </CardHeader>\n            <StyledCardBody>\n              <CardContent width=\"100%\">\n                <Flex justifyContent=\"space-between\" alignItems=\"start\">\n                  <Typography tag=\"h2\">\n                    <CardTitle tag=\"span\">{asset.name}</CardTitle>\n                  </Typography>\n                  <CardBadge>{formatMessage(getAssetBadgeLabel(assetType))}</CardBadge>\n                </Flex>\n                <Flex>\n                  <CardSubtitle>\n                    <Extension>{getFileExtension(asset.ext)}</Extension>\n                    {fullSubtitle}\n                  </CardSubtitle>\n                </Flex>\n              </CardContent>\n            </StyledCardBody>\n          </StyledCard>\n        </Grid.Item>\n\n        <Grid.Item m={7} xs={12} flex={1}>\n          <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\" flex={1} padding={4} gap={2}>\n            <Field.Root name=\"caption\">\n              <Flex alignItems=\"center\" gap={2}>\n                <Field.Label>\n                  {formatMessage({\n                    id: getTrad('form.input.label.file-caption'),\n                    defaultMessage: 'Caption',\n                  })}\n                </Field.Label>\n              </Flex>\n              <TextInput\n                value={caption}\n                onChange={(e) => setCaption(e.target.value)}\n                placeholder={formatMessage({\n                  id: getTrad('form.input.placeholder.file-caption'),\n                  defaultMessage: 'Enter caption',\n                })}\n                endAction={\n                  !wasCaptionChanged &&\n                  asset.caption && <Sparkle width=\"16px\" height=\"16px\" fill=\"#AC73E6\" />\n                }\n                type=\"text\"\n              />\n            </Field.Root>\n\n            <Field.Root\n              name=\"alternativeText\"\n              hint={formatMessage({\n                id: getTrad('form.input.description.file-alt'),\n                defaultMessage: \"This text will be displayed if the asset can't be shown.\",\n              })}\n            >\n              <Flex alignItems=\"center\" gap={2}>\n                <Field.Label>\n                  {formatMessage({\n                    id: getTrad('form.input.label.file-alt'),\n                    defaultMessage: 'Alternative text',\n                  })}\n                </Field.Label>\n              </Flex>\n\n              <TextInput\n                value={altText}\n                onChange={(e) => setAltText(e.target.value)}\n                placeholder={formatMessage({\n                  id: getTrad('form.input.placeholder.file-alt'),\n                  defaultMessage: 'Enter alternative text',\n                })}\n                endAction={\n                  !wasAltTextChanged &&\n                  asset.alternativeText && <Sparkle width=\"16px\" height=\"16px\" fill=\"#AC73E6\" />\n                }\n                type=\"text\"\n              />\n              <Field.Hint />\n            </Field.Root>\n          </Flex>\n        </Grid.Item>\n      </Grid.Root>\n    </CardContainer>\n  );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetCardSkeletons\n * -----------------------------------------------------------------------------------------------*/\n\nconst SkeletonBox = styled(Box)<{ width?: string; height?: string }>`\n  background: linear-gradient(\n    90deg,\n    ${({ theme }) => theme.colors.neutral100} 25%,\n    ${({ theme }) => theme.colors.neutral150} 50%,\n    ${({ theme }) => theme.colors.neutral100} 75%\n  );\n  background-size: 200% 100%;\n  animation: loading 1.5s infinite;\n  border-radius: ${({ theme }) => theme.borderRadius};\n  width: ${({ width }) => width || '100%'};\n  height: ${({ height }) => height || '1rem'};\n\n  @keyframes loading {\n    0% {\n      background-position: 200% 0;\n    }\n    100% {\n      background-position: -200% 0;\n    }\n  }\n`;\n\nexport const AIAssetCardSkeletons = ({ count = 1 }: { count?: number }) => {\n  const skeletons = Array.from({ length: count }, (_, i) => i);\n\n  return skeletons.map((index) => (\n    <Box\n      key={index}\n      background=\"neutral0\"\n      borderColor=\"neutral150\"\n      borderStyle=\"solid\"\n      borderWidth=\"1px\"\n      borderRadius=\"4px\"\n      marginBottom={4}\n    >\n      <Grid.Root>\n        <Grid.Item col={5} alignItems=\"stretch\">\n          <Card\n            height=\"100%\"\n            width=\"100%\"\n            borderStyle=\"none\"\n            shadow=\"none\"\n            borderRadius={0}\n            padding={2}\n          >\n            <Box height=\"150px\" padding={2}>\n              <SkeletonBox height=\"100%\" />\n            </Box>\n            <CardBody style={{ display: 'flex', padding: '8px 4px' }}>\n              <CardContent width=\"100%\">\n                <Flex justifyContent=\"space-between\" alignItems=\"start\" marginBottom={1}>\n                  <SkeletonBox width=\"60%\" height=\"18px\" />\n                  <SkeletonBox width=\"40px\" height=\"16px\" />\n                </Flex>\n                <SkeletonBox width=\"80%\" height=\"14px\" />\n              </CardContent>\n            </CardBody>\n          </Card>\n        </Grid.Item>\n\n        <Grid.Item m={7} xs={12} flex={1}>\n          <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\" flex={1} padding={4} gap={2}>\n            <Box>\n              <SkeletonBox width=\"60px\" height=\"16px\" marginBottom={1} />\n              <SkeletonBox height=\"32px\" />\n            </Box>\n\n            <Box>\n              <SkeletonBox width=\"100px\" height=\"16px\" marginBottom={1} />\n              <SkeletonBox height=\"32px\" />\n              <Box marginTop={1}>\n                <SkeletonBox width=\"70%\" height=\"12px\" />\n              </Box>\n            </Box>\n          </Flex>\n        </Grid.Item>\n      </Grid.Root>\n    </Box>\n  ));\n};\n"],"names":["CardActionsContainer","styled","CardAction","CardContainer","Box","theme","colors","neutral0","neutral150","borderRadius","AssetCardActions","asset","formatMessage","useIntl","dispatch","useAIUploadModalContext","s","state","onClose","canUpdate","canCopyLink","canDownload","useMediaLibraryPermissions","isEditModalOpen","setIsEditModalOpen","React","useState","removeAsset","useRemoveAsset","handleConfirmRemove","event","preventDefault","id","type","payload","uploadedAssets","length","handlePropagationClick","stopPropagation","handleEditAsset","editedAsset","_jsxs","onClick","position","Dialog","Root","_jsx","Trigger","IconButton","label","getTrad","defaultMessage","Trash","ConfirmDialog","onConfirm","Modal","open","onOpenChange","Pencil","Content","EditAssetContent","isLocal","folder","arg","omitFields","omitActions","Extension","span","VideoPreviewWrapper","VideoTimerOverlay","CardTimer","AudioPreviewWrapper","Asset","assetType","thumbnailUrl","assetUrl","duration","setDuration","formattedDuration","formatDuration","undefined","AssetType","Image","CardAsset","src","size","alt","alternativeText","name","Video","VideoPreview","url","mime","onLoadDuration","Audio","AudioPreview","StyledCardBody","CardBody","spaces","StyledCard","Card","getAssetBadgeLabel","DocType","Pdf","Csv","Xls","Zip","AIAssetCard","onCaptionChange","onAltTextChange","wasAltTextChanged","wasCaptionChanged","typeFromMime","prefixFileUrlWithBackendUrl","formats","thumbnail","subtitle","height","width","formattedSize","formatBytes","fullSubtitle","caption","setCaption","useEffect","altText","setAltText","Grid","Item","m","xs","alignItems","shadow","padding","CardHeader","style","borderStyle","CardContent","Flex","justifyContent","Typography","tag","CardTitle","CardBadge","CardSubtitle","getFileExtension","ext","flex","direction","gap","Field","Label","TextInput","value","onChange","e","target","placeholder","endAction","Sparkle","fill","hint","Hint","SkeletonBox","neutral100","AIAssetCardSkeletons","count","skeletons","Array","from","_","i","map","index","background","borderColor","borderWidth","marginBottom","col","display","marginTop"],"mappings":"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"}