{"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,gBAAAA,GAAmB,CAAA;AAUlB,MAAMC,YAAAA,GAAe,CAAC,EAC3BC,GAAG,EACHC,IAAI,EACJC,cAAAA,GAAiB,KAAO,CAAC,EACzBC,GAAG,EACH,GAAGC,KAAAA,EACe,GAAA;AAClB,IAAA,MAAMC,mBAAmB,CAACC,CAAAA,GAAAA;AACxB,QAAA,IAAIA,CAAAA,CAAEC,aAAa,CAACC,WAAW,GAAG,CAAA,EAAG;YACnC,MAAMC,KAAAA,GAAQH,EAAEC,aAAa;YAC7B,MAAMG,MAAAA,GAASC,QAAAA,CAASC,aAAa,CAAC,QAAA,CAAA;YAEtCF,MAAAA,CAAOG,MAAM,GAAGJ,KAAAA,CAAMK,WAAW;YACjCJ,MAAAA,CAAOK,KAAK,GAAGN,KAAAA,CAAMO,UAAU;YAC/BN,MAAAA,CAAOO,UAAU,CAAC,IAAA,CAAA,EAAOC,SAAAA,CAAUT,KAAAA,EAAO,CAAA,EAAG,CAAA,EAAGA,KAAAA,CAAMO,UAAU,EAAEP,KAAAA,CAAMK,WAAW,CAAA;AAEnFL,YAAAA,KAAAA,CAAMU,WAAW,CAACT,MAAAA,CAAAA;YAClBR,cAAAA,IAAkBA,cAAAA,CAAeO,MAAMW,QAAQ,CAAA;AACjD,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMC,4BAA4B,CAACf,CAAAA,GAAAA;QACjC,MAAMG,KAAAA,GAAQH,EAAEC,aAAa;QAE7B,IAAIE,KAAAA,CAAMa,UAAU,GAAGxB,gBAAAA,EAAkB;AAEzCW,QAAAA,KAAAA,CAAMc,IAAI,EAAA;AACZ,IAAA,CAAA;AAEA,IAAA,qBACEC,IAAA,CAACC,GAAAA,EAAAA;QAAIC,GAAAA,EAAI,QAAA;AAAoB,QAAA,GAAGtB,KAAK;;0BACnCuB,GAAA,CAAClB,OAAAA,EAAAA;gBACCmB,KAAK,EAAA,IAAA;gBACLC,YAAAA,EAAcR,yBAAAA;gBACdS,GAAAA,EAAK9B,GAAAA;gBACL+B,WAAAA,EAAY,WAAA;gBACZC,YAAAA,EAAc3B,gBAAAA;AAEd,gBAAA,QAAA,gBAAAsB,GAAA,CAACM,QAAAA,EAAAA;oBAAOC,IAAAA,EAAMjC;;;0BAEhB0B,GAAA,CAACQ,cAAAA,EAAAA;gBAAeT,GAAAA,EAAI,YAAA;AAAcvB,gBAAAA,QAAAA,EAAAA;;;AAVbH,KAAAA,EAAAA,GAAAA,CAAAA;AAa3B;;;;"}