{"version":3,"file":"control.mjs","sources":["../../../../../../packages/components/video/src/control.vue"],"sourcesContent":["<template>\n  <VideoTimer\n    v-if=\"name === 'timer'\"\n    :time=\"currentTime\"\n    :duration=\"duration\"\n    :disabled=\"!canPlay\"\n    @change=\"changeTime\"\n  />\n\n  <VideoVolume\n    v-else-if=\"name === 'volume'\"\n    ref=\"volumeRef\"\n    :volume=\"currentVolume\"\n    @change=\"changeVolume\"\n  />\n\n  <VideoControl\n    v-else-if=\"controlAttrs\"\n    :class=\"controlAttrs.class || ns.e(name)\"\n    :label=\"controlAttrs.label\"\n    :shortcut=\"controlAttrs.shortcut\"\n    :disabled=\"controlAttrs.disabled\"\n    :type=\"controlAttrs.type\"\n    :value=\"controlAttrs.value\"\n    :options=\"controlAttrs.options\"\n    @button-click=\"controlAttrs.onClick\"\n    @select=\"controlAttrs.onSelect\"\n  >\n    <lt-icon v-if=\"name === 'play-prev'\" :size=\"18\"><Back /></lt-icon>\n    <lt-icon v-if=\"name === 'play-next'\" :size=\"18\"><Right /></lt-icon>\n    <lt-icon v-if=\"name === 'play'\" :size=\"18\">\n      <VideoPause v-if=\"playing\" />\n      <VideoPlay v-else />\n    </lt-icon>\n    <lt-icon v-if=\"name === 'refresh'\" :size=\"18\"><Refresh /></lt-icon>\n\n    <img\n      v-if=\"name === 'flip'\"\n      src=\"https://image.whzb.com/chain/lit-element/js/img/flip.png\"\n      alt=\"\"\n      style=\"width: 18px\"\n    />\n\n    <img\n      v-if=\"name === 'pip'\"\n      src=\"https://image.whzb.com/chain/lit-element/js/img/pip.png\"\n      alt=\"\"\n      style=\"width: 18px\"\n    />\n    <img\n      v-if=\"name === 'full-window'\"\n      src=\"https://image.whzb.com/chain/lit-element/js/img/fullWindow.png\"\n      alt=\"\"\n      style=\"width: 16px\"\n    />\n\n    <img\n      v-if=\"name === 'full-browser'\"\n      src=\"https://image.whzb.com/chain/lit-element/js/img/fullscreen.png\"\n      alt=\"\"\n      style=\"width: 16px\"\n    />\n  </VideoControl>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { decimalLength } from '@lit-element/components/captcha/src/hooks/number'\nimport { useNamespace } from '@lit-element/hooks'\nimport { LtIcon } from '@lit-element/components/icon'\nimport {\n  Back,\n  Refresh,\n  Right,\n  VideoPause,\n  VideoPlay,\n} from '@inte-cloud/icons-vue'\nimport VideoControl from './video-control.vue'\nimport VideoTimer from './video-timer.vue'\nimport { localeVideo } from './symbol'\nimport VideoVolume from './video-volume.vue'\nimport type { VideoControlConfig, VideoPlaybackRate } from './symbol'\nimport type { PropType } from 'vue'\n\nconst props = defineProps({\n  name: String as PropType<VideoControlConfig>,\n  playPrevDisabled: Boolean,\n  playNextDisabled: Boolean,\n  currentTime: Number,\n  currentVolume: Number,\n  pip: Boolean,\n  canPlay: Boolean,\n  playing: Boolean,\n  duration: Number,\n  shortcuts: Object,\n  playbackRates: Array,\n  playbackRate: Number,\n  full: [String, Boolean],\n})\n\nconst emit = defineEmits([\n  'next',\n  'toggleFull',\n  'refresh',\n  'prev',\n  'togglePlaying',\n  'changeRate',\n  'changeTime',\n  'togglePip',\n  'changeVolume',\n  'toggleFlip',\n])\n\nconst ns = useNamespace('video')\nconst currentRate = ref(props.playbackRate)\n\nconst volumeRef = ref<InstanceType<typeof VideoVolume>>()\n\nconst controlAttrs = computed<any>(() => {\n  const n: any = props.name\n  const shortcut = props.shortcuts?.[n]\n  if (n === 'play-prev') {\n    return {\n      label: localeVideo.playPrev,\n      shortcut,\n      disabled: !!props.playPrevDisabled,\n      onClick: playPrev,\n    }\n  }\n  if (n === 'play') {\n    return {\n      label: props.playing ? localeVideo.pause : localeVideo.play,\n      shortcut,\n      disabled: !props.canPlay,\n      onClick: togglePlaying,\n    }\n  }\n  if (n === 'play-next') {\n    return {\n      label: localeVideo.playNext,\n      shortcut,\n      disabled: !!props.playNextDisabled,\n      onClick: playNext,\n    }\n  }\n\n  if (n === 'refresh') {\n    return {\n      class: ns.e('play-refresh'),\n      label: localeVideo.refresh,\n      shortcut,\n      onClick: handleRefresh,\n    }\n  }\n  if (n === 'playback-rate') {\n    return {\n      type: 'select',\n      value: currentRate.value,\n      options: rateOptions.value,\n      onSelect: (rate: VideoPlaybackRate) => changeRate(rate.value),\n    }\n  }\n\n  if (n === 'flip') {\n    return {\n      label: localeVideo.flip,\n      shortcut,\n      onClick: toggleFlip,\n    }\n  }\n  if (n === 'pip') {\n    return {\n      label: props.pip ? localeVideo.exitPip : localeVideo.requestPip,\n      shortcut,\n      disabled: !props.canPlay,\n      onClick: togglePip,\n    }\n  }\n\n  if (n === 'full-window') {\n    return {\n      label:\n        props.full === 'window'\n          ? localeVideo.fullWindowExit\n          : localeVideo.fullWindow,\n      shortcut,\n      onClick: () => toggleFull('onlyShowContainer'),\n    }\n  }\n  if (n === 'full-browser') {\n    return {\n      label:\n        props.full === 'browser'\n          ? localeVideo.fullScreenExit\n          : localeVideo.fullScreen,\n      shortcut,\n      onClick: () => toggleFull('fullScreen'),\n    }\n  }\n  return null\n})\n\nconst rateOptions = computed(() => {\n  const rates =\n    props.playbackRates\n      ?.map((raw: any) => {\n        const rate = typeof raw === 'number' ? { value: raw } : raw\n\n        rate.value = Number(rate.value)\n        rate.label =\n          rate.label ||\n          `${decimalLength(rate.value) ? rate.value : rate.value.toFixed(1)}x`\n\n        return rate\n      })\n      .filter((rate: any) => rate.value > 0)\n      .sort((prev: any, next: any) => next.value - prev.value) || []\n\n  if (!rates.some((rate: any) => rate.value === 1)) {\n    const index = rates.findIndex((rate: any) => rate.value < 1)\n\n    rates.splice((index + rates.length) % rates.length, 0, {\n      value: 1,\n      label: '1.0x',\n    })\n  }\n  return rates\n})\n\nwatch(\n  () => props.playbackRate,\n  (value: any) => changeRate(value, false)\n)\n\nfunction togglePlaying() {\n  emit('togglePlaying', !props.playing)\n}\n\nfunction togglePip() {\n  emit('togglePip')\n}\n\nfunction changeRate(rate: number, dispatch = true) {\n  currentRate.value = rate\n  emit('changeRate', rate, dispatch)\n}\n\nfunction changeTime(time: number, dispatch = true) {\n  emit('changeTime', time, dispatch)\n}\n\nfunction changeVolume(volume: number, dispatch = true) {\n  emit('changeVolume', volume, dispatch)\n}\n\nfunction toggleFlip(value: any, dispatch = true) {\n  emit('toggleFlip', value, dispatch)\n}\n\nfunction playPrev() {\n  emit('prev')\n}\n\nfunction playNext() {\n  emit('next')\n}\n\nfunction toggleFull(type: any) {\n  emit('toggleFull', type)\n}\n\nfunction handleRefresh() {\n  emit('refresh')\n}\n\ndefineExpose({\n  volumeRef,\n})\n</script>\n"],"names":[],"mappings":"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"}