{"version":3,"file":"video2.mjs","sources":["../../../../../../packages/components/video/src/video.vue"],"sourcesContent":["<template>\n  <FullScreen\n    ref=\"screen\"\n    @pointermove=\"handleInteract\"\n    @pointerleave=\"handlePointerLeave\"\n  >\n    <div :class=\"className\">\n      <div :class=\"ns.e('main')\">\n        <div\n          :class=\"[ns.e('player'), flipped ? ns.em('player', 'flipped') : '']\"\n          @click=\"() => togglePlaying()\"\n        >\n          <slot name=\"player\">\n            <video\n              ref=\"video\"\n              v-bind=\"videoAttrs\"\n              :class=\"ns.e('video')\"\n              :src=\"currentSrc || videoAttrs?.src\"\n            >\n              <slot />\n            </video>\n          </slot>\n        </div>\n\n        <div\n          v-if=\"!hasPlayed && (poster || $slots.poster)\"\n          :class=\"ns.e('poster')\"\n        >\n          <slot name=\"poster\">\n            <img :src=\"poster\" />\n          </slot>\n        </div>\n\n        <Transition\n          :name=\"ns.b('state-effect')\"\n          @after-leave=\"() => (stateHidden = true)\"\n        >\n          <div v-if=\"canPlay && stateShow\" :class=\"ns.e('state')\">\n            <slot name=\"state\" :active=\"stateShow\">\n              <lt-icon :size=\"56\">\n                <VideoPause v-if=\"playing\" />\n                <VideoPlay v-else />\n              </lt-icon>\n            </slot>\n          </div>\n        </Transition>\n\n        <Transition :name=\"`${defaultNamespace}-fade`\">\n          <div\n            v-if=\"(!canPlay && !stateShow) || (loading && stateHidden)\"\n            :class=\"ns.e('loading')\"\n          >\n            <slot name=\"loading\">\n              <lt-icon :size=\"56\"><Loading /></lt-icon>\n            </slot>\n          </div>\n        </Transition>\n\n        <Progress\n          v-if=\"noControls\"\n          :class=\"ns.e('progress-line')\"\n          :percentage=\"percent\"\n          :stroke-width=\"3\"\n          :show-text=\"false\"\n        />\n\n        <div\n          v-else\n          :class=\"{\n            [ns.e('controls')]: true,\n            [ns.em('controls', 'collapsed')]: hasPlayed && !interacting,\n          }\"\n        >\n          <section :class=\"ns.e('controls-top')\">\n            <VideoProgress\n              :time=\"currentTime\"\n              :duration=\"duration\"\n              :segments=\"segments\"\n              @change=\"changeTime\"\n            />\n          </section>\n\n          <section :class=\"ns.e('controls-bottom')\">\n            <div\n              v-for=\"(item, k) in controlBottomList\"\n              :key=\"k\"\n              :class=\"item.class\"\n            >\n              <template v-for=\"(name, i) in item.list || []\" :key=\"i\">\n                <slot :name=\"`control-${name}`\" v-bind=\"slotParams\">\n                  <control\n                    :key=\"i\"\n                    :name=\"name\"\n                    :full=\"full\"\n                    :current-time=\"currentTime\"\n                    :current-volume=\"currentVolume\"\n                    :can-play=\"canPlay\"\n                    :pip=\"pip\"\n                    :playing=\"playing\"\n                    :duration=\"duration\"\n                    :play-prev-disabled=\"!srcList || !srcIndex\"\n                    :play-next-disabled=\"\n                      !srcList || srcIndex === srcFullList.length - 1\n                    \"\n                    :shortcuts=\"shortcuts\"\n                    :playback-rates=\"playbackRates\"\n                    :playback-rate=\"playbackRate\"\n                    @prev=\"playPrev\"\n                    @next=\"playNext\"\n                    @toggle-flip=\"toggleFlip\"\n                    @toggle-full=\"toggleFull\"\n                    @change-rate=\"handleChangeRate\"\n                    @change-time=\"changeTime\"\n                    @toggle-pip=\"togglePip\"\n                    @change-volume=\"changeVolume\"\n                    @refresh=\"handleRefresh\"\n                  />\n                </slot>\n              </template>\n            </div>\n          </section>\n        </div>\n        <slot name=\"extra\" />\n      </div>\n    </div>\n  </FullScreen>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  computed,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  shallowReadonly,\n  watch,\n} from 'vue'\nimport FullScreen from '@lit-element/components/fullScreen'\nimport { defaultNamespace, useNamespace } from '@lit-element/hooks'\nimport { isClient } from '@vueuse/core'\nimport { NOOP } from '@lit-element/utils'\nimport Progress from '@lit-element/components/progress'\nimport { LtIcon } from '@lit-element/components/icon'\nimport { useSetTimeout } from '@lit-element/components/captcha/src/hooks/useSetTimeout'\nimport { Loading, VideoPause, VideoPlay } from '@inte-cloud/icons-vue'\nimport { useListener } from './hooks/listener'\nimport { useModifier } from './hooks/modifier'\nimport VideoProgress from './video-progress.vue'\nimport { VIDEO_STATE, decide, videoDefaultShortcuts } from './symbol'\nimport { videoProps } from './video'\nimport Control from './control.vue'\n\ndefineOptions({ name: 'LtVideo' })\nconst props = defineProps(videoProps)\nconst emit = defineEmits([\n  'play',\n  'pause',\n  'ended',\n  'prev',\n  'next',\n  'refresh',\n  'togglePip',\n  'toggleFlip',\n  'toggleFull',\n  'update:src',\n  'update:time',\n  'update:volume',\n  'update:playback-rate',\n])\n\nconst ns = useNamespace('video')\n\nconst { timer } = useSetTimeout()\n\nconst pipEnabled = isClient && document.pictureInPictureEnabled\n\nconst currentSrc = ref(\n  props.src || props.srcList?.[0] || (props.videoAttrs?.src as string) || ''\n)\nconst playing = ref(false)\nconst currentTime = ref(props.time)\nconst canPlay = ref(false)\nconst duration = ref(0)\nconst currentVolume = ref(props.volume) // 0 ~ 1\nconst pip = ref(false)\nconst stateShow = ref(true)\nconst stateHidden = ref(false)\nconst interacting = ref(false)\nconst hasPlayed = ref(false)\nconst flipped = ref(false)\nconst iconScale = ref(1.3)\n\nconst screen = ref()\nconst wrapper = computed(() => screen.value?.containerElement)\nconst video = ref<HTMLVideoElement>()\n\nconst controlBottomList = computed(() => [\n  {\n    class: ns.e('controls-left'),\n    list: props.controlLayout.left,\n  },\n  {\n    class: ns.e('controls-center'),\n    list: props.controlLayout.center,\n  },\n  {\n    class: ns.e('controls-right'),\n    list: props.controlLayout.right,\n  },\n])\n\nconst placeId = computed(() => screen.value?.placeId)\nconst full = computed<false | any>(() => {\n  const s = screen.value\n  if (s) {\n    if (s.isOnlyShowContainer) {\n      return 'window'\n    }\n    if (s.isFullScreen) {\n      return 'browser'\n    }\n  }\n  return false\n})\nconst videoRef = computed(() => video.value || props.video)\n\nconst shortcutRecord = reactive({} as Record<string, () => void>)\nconst shortcuts = computed(() => ({\n  ...videoDefaultShortcuts,\n  ...props.shortcuts,\n}))\n\nconst slotParams = shallowReadonly(\n  reactive({\n    playing,\n    currentTime,\n    currentVolume,\n    // currentRate,\n    interacting,\n    flipped,\n    canPlay,\n    duration,\n    pip,\n    hasPlayed,\n    togglePlaying,\n    togglePip,\n    // changeRate,\n    changeTime,\n    changeVolume,\n    toggleFull,\n  })\n)\n\nfunction addShortcut(key: string, cb: () => void) {\n  if (shortcutRecord[key]) {\n    console.warn(\n      `[vexip-ui:Video] duplicate shortcut key '${key}' and it will be ignored`\n    )\n\n    return NOOP\n  }\n\n  shortcutRecord[key] = cb\n\n  return () => {\n    delete shortcutRecord[key]\n  }\n}\n\nuseModifier({\n  target: wrapper,\n  passive: false,\n  onKeyDown: (event: any, modifier: any) => {\n    if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) return\n\n    decide(\n      [\n        [\n          () => modifier.up,\n          () => {\n            currentVolume.value = Math.min(1, currentVolume.value + 0.05)\n          },\n        ],\n        [\n          () => modifier.down,\n          () => (currentVolume.value = Math.max(0, currentVolume.value - 0.05)),\n        ],\n        [\n          () => modifier.right,\n          () =>\n            (currentTime.value = Math.min(\n              duration.value,\n              currentTime.value + 5\n            )),\n        ],\n        [\n          () => modifier.left,\n          () => (currentTime.value = Math.max(0, currentTime.value - 5)),\n        ],\n        // [\n        //   () => modifier[shortcuts.value.volume || 'M'],\n        //   () => volumeRef.value?.toggleMute(),\n        // ],\n        ...Object.keys(shortcutRecord).map((key) => {\n          return [() => modifier[key], shortcutRecord[key]] as [\n            () => boolean,\n            () => void\n          ]\n        }),\n      ],\n      { afterMatchAny: modifier.resetAll }\n    )\n  },\n})\n\nconst className = computed(() => {\n  return [\n    ns.b(),\n    ns.b('vars'),\n    {\n      [ns.m('loading')]: props.loading,\n    },\n  ]\n})\n\nconst segments = computed(() => {\n  return props.segments\n    .map((segment: any) =>\n      typeof segment === 'number' ? { time: segment } : segment\n    )\n    .filter((segment) => segment.time >= 0 && segment.time <= duration.value)\n    .sort((prev, next) => prev.time - next.time)\n})\nconst percent = computed(() => {\n  return duration.value ? (currentTime.value / duration.value) * 100 : 0\n})\nconst srcFullList = computed(() => {\n  const src: any = props.src || (props.videoAttrs?.src as string) || ''\n\n  if (src && props.srcList && !props.srcList.includes(src)) {\n    return [src].concat(props.srcList)\n  }\n\n  return props.srcList || [src]\n})\nconst srcIndex = computed(() => {\n  return srcFullList.value ? srcFullList.value.indexOf(currentSrc.value) : -1\n})\n\nwatch(\n  () => props.src,\n  (value: any) => {\n    resetMetaState()\n    currentSrc.value = value\n  },\n  { flush: 'pre' }\n)\nwatch(\n  () => props.time,\n  (value) => changeTime(value, false)\n)\nwatch(\n  () => props.volume,\n  (value) => {\n    changeVolume(value, false)\n  }\n)\n\nwatch(playing, (value) => {\n  if (value) {\n    requestAnimationFrame(() => {\n      stateShow.value = false\n    })\n  } else {\n    stateShow.value = true\n  }\n})\nwatch(canPlay, (value) => {\n  if (!value) {\n    playing.value = false\n  }\n})\nwatch(stateShow, (value) => {\n  if (value) {\n    stateHidden.value = false\n  }\n})\n\nonMounted(() => {\n  nextTick(() => {\n    if (videoRef.value && currentTime.value > 0) {\n      videoRef.value.currentTime = currentTime.value\n    }\n\n    console.log(wrapper.value)\n  })\n})\n\nprovide(VIDEO_STATE, reactive({ placeId, iconScale, addShortcut }))\n\nuseListener(videoRef, 'canplay', () => {\n  canPlay.value = true\n  duration.value = videoRef.value?.duration ?? 0\n})\nuseListener(videoRef, 'timeupdate', () => {\n  currentTime.value = videoRef.value?.currentTime ?? 0\n  emit('update:time', currentTime.value)\n})\nuseListener(videoRef, 'ended', handleEnded)\n\nuseListener(videoRef, 'enterpictureinpicture', () => {\n  pip.value = true\n  emit('togglePip', true)\n})\nuseListener(videoRef, 'leavepictureinpicture', () => {\n  pip.value = false\n  emit('togglePip', false)\n})\n\ndefineExpose({\n  currentSrc,\n  playing,\n  currentTime,\n  duration,\n  pip,\n  interacting,\n  stateHidden,\n  wrapper,\n  video,\n  resetMetaState,\n})\n\nfunction toggleFlip(value = !flipped.value, dispatch = true) {\n  flipped.value = value\n  if (dispatch) {\n    emit('toggleFlip', flipped.value)\n  }\n}\n\nasync function togglePip() {\n  if (!pipEnabled || !videoRef.value) return\n\n  if (pip.value) {\n    await document.exitPictureInPicture()\n  } else {\n    await videoRef.value.requestPictureInPicture()\n  }\n}\n\nfunction togglePlaying(value = !playing.value) {\n  if (!canPlay.value) {\n    playing.value = false\n\n    return\n  }\n\n  playing.value = value\n\n  if (playing.value) {\n    hasPlayed.value = true\n    videoRef.value?.play()\n  } else {\n    videoRef.value?.pause()\n  }\n  wrapper.value?.focus()\n  emit(playing.value ? 'play' : 'pause')\n}\n\nfunction handleEnded() {\n  playing.value = false\n\n  videoRef.value?.pause()\n  emit('ended')\n}\n\nfunction changeTime(time: number, dispatch = true) {\n  currentTime.value = time\n\n  if (videoRef.value && time !== videoRef.value.currentTime) {\n    videoRef.value.currentTime = time\n    time = videoRef.value.currentTime\n  }\n  if (dispatch) {\n    emit('update:time', time)\n  }\n}\n\nfunction changeVolume(volume: number, dispatch = true) {\n  currentVolume.value = volume\n\n  if (videoRef.value) {\n    videoRef.value.volume = volume\n  }\n\n  if (dispatch) {\n    emit('update:volume', volume)\n  }\n}\n\nfunction resetMetaState() {\n  playing.value = false\n  currentTime.value = 0\n  canPlay.value = false\n  duration.value = 0\n  // loadedData.value = false\n  pip.value = false\n  hasPlayed.value = false\n\n  videoRef.value?.pause()\n}\nfunction handleInteract() {\n  clearTimeout(timer.interact)\n\n  interacting.value = true\n  timer.interact = setTimeout(() => {\n    interacting.value = false\n  }, 3000)\n}\n\nfunction handlePointerLeave() {\n  clearTimeout(timer.interact)\n  timer.interact = setTimeout(() => {\n    interacting.value = false\n  }, 500)\n}\nfunction adjustSrc(amount: number) {\n  const list = srcFullList.value\n\n  if (props.srcList) {\n    currentSrc.value =\n      list[(srcIndex.value + amount + list.length) % list.length]\n    emit('update:src', currentSrc.value)\n  }\n}\n\nfunction playPrev() {\n  adjustSrc(-1)\n  emit('prev')\n}\n\nfunction playNext() {\n  adjustSrc(1)\n  emit('next')\n}\n\nfunction handleChangeRate(rate: number, dispatch = true) {\n  if (videoRef.value) {\n    videoRef.value.playbackRate = rate\n  }\n  if (dispatch) {\n    emit('update:playback-rate', rate)\n  }\n}\n\nfunction toggleFull(type: any) {\n  screen.value?.toggleMode(type)\n  wrapper.value?.focus()\n  nextTick(() => {\n    emit('toggleFull', full.value)\n  })\n}\n\nfunction handleRefresh() {\n  emit('refresh')\n}\n</script>\n"],"names":["DO_defineComponent","_openBlock","_unref","FullScreen","_withCtx","_createElementVNode","_normalizeClass"],"mappings":"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"}