{"version":3,"file":"Media.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n  id?: Data.ID;\n  alternativeText?: string;\n  ext: string;\n  formats: {\n    thumbnail?: {\n      url?: string;\n    };\n  };\n  mime?: string | null;\n  name?: string | null;\n  url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n  const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n  if (mime?.includes('image')) {\n    const thumbnail = formats?.thumbnail?.url;\n    const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n    const mediaLabel = alternativeText || name || undefined;\n\n    return <Avatar.Item src={mediaURL} alt={mediaLabel} fallback={mediaLabel} preview />;\n  }\n\n  const fileExtension = getFileExtension(ext);\n  const fileName = name && name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n  return (\n    <Tooltip label={fileName}>\n      <span>\n        <FileWrapper>{fileExtension}</FileWrapper>\n      </span>\n    </Tooltip>\n  );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n  return (\n    <Flex\n      tag=\"span\"\n      position=\"relative\"\n      borderRadius=\"50%\"\n      width=\"26px\"\n      height=\"26px\"\n      borderColor=\"neutral200\"\n      background=\"neutral150\"\n      paddingLeft=\"1px\"\n      justifyContent=\"center\"\n      alignItems=\"center\"\n    >\n      <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n        {children}\n      </FileTypography>\n    </Flex>\n  );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n  font-size: 0.9rem;\n  line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n  content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n  return (\n    <Avatar.Group>\n      {content.map((file, index) => {\n        const key = `${file.id}${index}`;\n\n        if (index === 3) {\n          const remainingFiles = `+${content.length - 3}`;\n\n          return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n        }\n\n        if (index > 3) {\n          return null;\n        }\n\n        return <MediaSingle key={key} {...file} />;\n      })}\n    </Avatar.Group>\n  );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","mediaLabel","undefined","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","label","span","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}