{"version":3,"file":"video.mjs","sources":["../../../../../../packages/components/video/src/video.vue"],"sourcesContent":["<template>\n  <div :class=\"ns.b()\">\n    <div v-if=\"hasPoster\" :class=\"ns.e('poster')\">\n      <slot name=\"poster\">\n        <img :src=\"poster\" v-bind=\"posterProps\" />\n      </slot>\n    </div>\n\n    <slot name=\"duration\" v-bind=\"{ formatDuration }\">\n      <span v-if=\"hasDuration\" :class=\"ns.e('duration')\">\n        {{ formatDuration }}\n      </span>\n    </slot>\n\n    <div v-if=\"!readonly\" :class=\"ns.e('player')\">\n      <video\n        ref=\"videoRef\"\n        controls\n        :class=\"ns.e('video')\"\n        :src=\"src\"\n        :hidden=\"hasPoster\"\n        @ended=\"handlePause\"\n        @pause=\"handlePause\"\n        @play=\"handlePlay\"\n      >\n        <slot />\n      </video>\n    </div>\n\n    <div v-if=\"hasPoster\" :class=\"ns.e('action')\" @click=\"handleClick\">\n      <slot name=\"play-icon\" v-bind=\"{ handleClick }\">\n        <el-icon\n          :class=\"ns.e('btn')\"\n          size=\"42\"\n          color=\"rgba(0,0,0,0.6)\"\n          v-bind=\"iconProps\"\n        >\n          <VideoPlayer />\n        </el-icon>\n      </slot>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { ElIcon, useNamespace } from 'element-plus'\nimport { isNumber } from '@element-plus/utils/element-plus'\nimport { formatTime } from '@element-plus/utils/date-time'\nimport * as IconsVue from '@element-plus/components/icons-vue/index'\nimport { videoProps } from './video'\n\ndefineOptions({\n  name: 'ElVideo',\n})\n\nconst { VideoPlayer } = IconsVue\nconst props = defineProps(videoProps)\nconst ns = useNamespace('video')\n\nconst isPlayed = ref(false)\nconst paused = ref(true)\nconst videoRef = ref<HTMLVideoElement | null>(null)\n\nconst setPaused = (bool: boolean) => (paused.value = bool)\nconst setIsPlayed = (bool: boolean) => (isPlayed.value = bool)\n\nconst hasPoster = computed(() => !isPlayed.value && !!props.poster)\nconst hasDuration = computed(() => hasPoster.value && !!props.duration)\n\nconst formatDuration = computed(() =>\n  isNumber(props.duration) ? formatTime(props.duration) : props.duration\n)\n\nconst handlePlay = () => setPaused(false)\n\nconst handlePause = () => setPaused(true)\n\nconst handleClick = (e: any) => {\n  if (props.readonly) {\n    props.onClick?.(e)\n    return\n  }\n\n  setIsPlayed(true)\n  const video = videoRef.value\n\n  if (video) {\n    if (video.ended || video.paused) {\n      video.play()\n    } else {\n      video.pause()\n    }\n  }\n  props.onClick?.(e)\n}\n\ndefineExpose({\n  video: videoRef,\n})\n</script>\n"],"names":["IconsVue"],"mappings":";;;;;;;;mCAoDc,CAAA;AAAA,EACZ,IAAM,EAAA,SAAA;AACR,CAAA,CAAA,CAAA;;;;;AAEM,IAAA,MAAA,EAAE,aAAgB,GAAAA,KAAA,CAAA;AACxB,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AACR,IAAA,MAAA,EAAA,GAAK,aAAa,OAAO,CAAA,CAAA;AAEzB,IAAA,MAAA,QAAA,GAAW,IAAI,KAAK,CAAA,CAAA;AACpB,IAAA,MAAA,MAAA,GAAS,IAAI,IAAI,CAAA,CAAA;AACjB,IAAA,MAAA,QAAA,GAAW,IAA6B,IAAI,CAAA,CAAA;AAElD,IAAA,MAAM,SAAY,GAAA,CAAC,IAAmB,KAAA,MAAA,CAAO,KAAQ,GAAA,IAAA,CAAA;AACrD,IAAA,MAAM,WAAc,GAAA,CAAC,IAAmB,KAAA,QAAA,CAAS,KAAQ,GAAA,IAAA,CAAA;AAEnD,IAAA,MAAA,SAAA,GAAY,SAAS,MAAM,CAAC,SAAS,KAAS,IAAA,CAAC,CAAC,KAAA,CAAM,MAAM,CAAA,CAAA;AAC5D,IAAA,MAAA,WAAA,GAAc,SAAS,MAAM,SAAA,CAAU,SAAS,CAAC,CAAC,MAAM,QAAQ,CAAA,CAAA;AAEtE,IAAA,MAAM,cAAiB,GAAA,QAAA;AAAA,MAAS,MAC9B,SAAS,KAAM,CAAA,QAAQ,IAAI,UAAW,CAAA,KAAA,CAAM,QAAQ,CAAA,GAAI,KAAM,CAAA,QAAA;AAAA,KAChE,CAAA;AAEM,IAAA,MAAA,UAAA,GAAa,MAAM,SAAA,CAAU,KAAK,CAAA,CAAA;AAElC,IAAA,MAAA,WAAA,GAAc,MAAM,SAAA,CAAU,IAAI,CAAA,CAAA;AAElC,IAAA,MAAA,WAAA,GAAc,CAAC,CAAW,KAAA;;AAC9B,MAAA,IAAI,MAAM,QAAU,EAAA;AAClB,QAAA,CAAA,EAAA,GAAA,KAAA,CAAM,YAAN,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAA,CAAA,CAAA,CAAA;AAChB,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAChB,MAAA,MAAM,QAAQ,QAAS,CAAA,KAAA,CAAA;AAEvB,MAAA,IAAI,KAAO,EAAA;AACL,QAAA,IAAA,KAAA,CAAM,KAAS,IAAA,KAAA,CAAM,MAAQ,EAAA;AAC/B,UAAA,KAAA,CAAM,IAAK,EAAA,CAAA;AAAA,SACN,MAAA;AACL,UAAA,KAAA,CAAM,KAAM,EAAA,CAAA;AAAA,SACd;AAAA,OACF;AACA,MAAA,CAAA,EAAA,GAAA,KAAA,CAAM,YAAN,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAA,CAAA,CAAA,CAAA;AAAA,KAClB,CAAA;AAEa,IAAA,QAAA,CAAA;AAAA,MACX,KAAO,EAAA,QAAA;AAAA,KACR,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}