{"version":3,"file":"VideoPreview.mjs","sources":["../../../../admin/src/components/AssetCard/VideoPreview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, VisuallyHidden } from '@strapi/design-system';\n\n// According to MDN\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState#value\nconst HAVE_FUTURE_DATA = 3;\n\ninterface VideoPreviewProps {\n  alt: string;\n  url: string;\n  mime: string;\n  onLoadDuration?: (duration?: number) => void;\n  size?: 'S' | 'M';\n}\n\nexport const VideoPreview = ({\n  url,\n  mime,\n  onLoadDuration = () => {},\n  alt,\n  ...props\n}: VideoPreviewProps) => {\n  const handleTimeUpdate = (e: React.SyntheticEvent<HTMLVideoElement>) => {\n    if (e.currentTarget.currentTime > 0) {\n      const video = e.currentTarget;\n      const canvas = document.createElement('canvas');\n\n      canvas.height = video.videoHeight;\n      canvas.width = video.videoWidth;\n      canvas.getContext('2d')?.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n\n      video.replaceWith(canvas);\n      onLoadDuration && onLoadDuration(video.duration);\n    }\n  };\n\n  const handleThumbnailVisibility = (e: React.SyntheticEvent<HTMLVideoElement>) => {\n    const video = e.currentTarget;\n\n    if (video.readyState < HAVE_FUTURE_DATA) return;\n\n    video.play();\n  };\n\n  return (\n    <Box tag=\"figure\" key={url} {...props}>\n      <video\n        muted\n        onLoadedData={handleThumbnailVisibility}\n        src={url}\n        crossOrigin=\"anonymous\"\n        onTimeUpdate={handleTimeUpdate}\n      >\n        <source type={mime} />\n      </video>\n      <VisuallyHidden tag=\"figcaption\">{alt}</VisuallyHidden>\n    </Box>\n  );\n};\n"],"names":["HAVE_FUTURE_DATA","VideoPreview","url","mime","onLoadDuration","alt","props","handleTimeUpdate","e","currentTarget","currentTime","video","canvas","document","createElement","height","videoHeight","width","videoWidth","getContext","drawImage","replaceWith","duration","handleThumbnailVisibility","readyState","play","_jsxs","Box","tag","_jsx","muted","onLoadedData","src","crossOrigin","onTimeUpdate","source","type","VisuallyHidden"],"mappings":";;;;AAIA;AACA;AACA,MAAMA,gBAAmB,GAAA,CAAA;AAUZC,MAAAA,YAAAA,GAAe,CAAC,EAC3BC,GAAG,EACHC,IAAI,EACJC,cAAAA,GAAiB,MAAQ,EACzBC,GAAG,EACH,GAAGC,KACe,EAAA,GAAA;AAClB,IAAA,MAAMC,mBAAmB,CAACC,CAAAA,GAAAA;AACxB,QAAA,IAAIA,CAAEC,CAAAA,aAAa,CAACC,WAAW,GAAG,CAAG,EAAA;YACnC,MAAMC,KAAAA,GAAQH,EAAEC,aAAa;YAC7B,MAAMG,MAAAA,GAASC,QAASC,CAAAA,aAAa,CAAC,QAAA,CAAA;YAEtCF,MAAOG,CAAAA,MAAM,GAAGJ,KAAAA,CAAMK,WAAW;YACjCJ,MAAOK,CAAAA,KAAK,GAAGN,KAAAA,CAAMO,UAAU;YAC/BN,MAAOO,CAAAA,UAAU,CAAC,IAAA,CAAA,EAAOC,SAAUT,CAAAA,KAAAA,EAAO,CAAG,EAAA,CAAA,EAAGA,KAAMO,CAAAA,UAAU,EAAEP,KAAAA,CAAMK,WAAW,CAAA;AAEnFL,YAAAA,KAAAA,CAAMU,WAAW,CAACT,MAAAA,CAAAA;YAClBR,cAAkBA,IAAAA,cAAAA,CAAeO,MAAMW,QAAQ,CAAA;AACjD;AACF,KAAA;AAEA,IAAA,MAAMC,4BAA4B,CAACf,CAAAA,GAAAA;QACjC,MAAMG,KAAAA,GAAQH,EAAEC,aAAa;QAE7B,IAAIE,KAAAA,CAAMa,UAAU,GAAGxB,gBAAkB,EAAA;AAEzCW,QAAAA,KAAAA,CAAMc,IAAI,EAAA;AACZ,KAAA;AAEA,IAAA,qBACEC,IAACC,CAAAA,GAAAA,EAAAA;QAAIC,GAAI,EAAA,QAAA;AAAoB,QAAA,GAAGtB,KAAK;;0BACnCuB,GAAClB,CAAAA,OAAAA,EAAAA;gBACCmB,KAAK,EAAA,IAAA;gBACLC,YAAcR,EAAAA,yBAAAA;gBACdS,GAAK9B,EAAAA,GAAAA;gBACL+B,WAAY,EAAA,WAAA;gBACZC,YAAc3B,EAAAA,gBAAAA;AAEd,gBAAA,QAAA,gBAAAsB,GAACM,CAAAA,QAAAA,EAAAA;oBAAOC,IAAMjC,EAAAA;;;0BAEhB0B,GAACQ,CAAAA,cAAAA,EAAAA;gBAAeT,GAAI,EAAA,YAAA;AAAcvB,gBAAAA,QAAAA,EAAAA;;;AAVbH,KAAAA,EAAAA,GAAAA,CAAAA;AAa3B;;;;"}