{"version":3,"file":"video.cjs","sources":["../../../components/video/video.tsx"],"sourcesContent":["import { FullScreen } from '@/components/full-screen'\nimport { Icon } from '@/components/icon'\nimport { Progress } from '@/components/progress'\nimport { Renderer } from '@/components/renderer'\n\nimport {\n  Transition,\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  watch,\n} from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport VideoControl from './video-control.vue'\nimport VideoProgress from './video-progress.vue'\nimport VideoTimer from './video-timer.vue'\nimport VideoVolume from './video-volume.vue'\nimport { createSlotRender, useListener, useModifier, useSetTimeout } from '@vexip-ui/hooks'\nimport { decide, decimalLength, isClient, noop, toCapitalCase, toNumber } from '@vexip-ui/utils'\nimport { videoProps } from './props'\nimport { VIDEO_STATE, videoDefaultControlLayout, videoDefaultShortcuts } from './symbol'\n\nimport type { FullScreenExposed, FullScreenType } from '@/components/full-screen'\nimport type { VideoControlConfig, VideoPlaybackRate } from './symbol'\n\nexport default defineComponent({\n  name: 'Video',\n  props: videoProps,\n  emits: ['update:src', 'update:time', 'update:volume', 'update:playback-rate'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('video', _props, {\n      src: {\n        static: true,\n        default: '',\n      },\n      srcList: {\n        static: true,\n        default: null,\n      },\n      noControls: false,\n      videoAttrs: null,\n      time: {\n        static: true,\n        default: 0,\n      },\n      volume: 1,\n      playbackRate: 1,\n      playbackRates: () => [0.5, 1, 1.25, 1.5, 2],\n      // kernel: null,\n      controlLayout: () => videoDefaultControlLayout,\n      poster: '',\n      video: {\n        static: true,\n        default: null,\n      },\n      segments: () => [],\n      loading: false,\n      loadingIcon: null,\n      loadingEffect: null,\n      shortcuts: () => ({}),\n      slots: () => ({}),\n    })\n\n    const nh = useNameHelper('video')\n    const locale = useLocale('video')\n    const icons = useIcons()\n\n    const { timer } = useSetTimeout()\n\n    const pipEnabled = isClient && document.pictureInPictureEnabled\n\n    const currentSrc = ref(\n      props.src || props.srcList?.[0] || (props.videoAttrs?.src as string) || '',\n    )\n    const playing = ref(false)\n    const currentTime = ref(props.time)\n    const canPlay = ref(false)\n    const duration = ref(0)\n    const currentVolume = ref(props.volume) // 0 ~ 1\n    const pip = ref(false)\n    const stateShow = ref(true)\n    // record the state is invisible (whether finish transition)\n    const stateHidden = ref(false)\n    const currentRate = ref(props.playbackRate)\n    // const loadedData = ref(false)\n    const interacting = ref(false)\n    const hasPlayed = ref(false)\n    const flipped = ref(false)\n    const iconScale = ref(1.3)\n\n    const screen = ref<FullScreenExposed>()\n    const wrapper = computed(() => screen.value?.wrapper as HTMLElement | undefined)\n    const video = ref<HTMLVideoElement>()\n    const volumeRef = ref<InstanceType<typeof VideoVolume>>()\n\n    const placeId = computed(() => screen.value?.placeId)\n    const full = computed<false | FullScreenType>(() => screen.value?.full ?? false)\n    const videoRef = computed<HTMLVideoElement | undefined>(() => video.value || props.video)\n\n    const shortcutRecord = reactive({} as Record<string, () => void>)\n    const shortcuts = computed(() => ({ ...videoDefaultShortcuts, ...props.shortcuts }))\n\n    function addShortcut(key: string, cb: () => void) {\n      if (shortcutRecord[key]) {\n        console.warn(`[vexip-ui:Video] duplicate shortcut key '${key}' and it will be ignored`)\n\n        return noop\n      }\n\n      shortcutRecord[key] = cb\n\n      return () => {\n        delete shortcutRecord[key]\n      }\n    }\n\n    useModifier({\n      target: wrapper,\n      passive: false,\n      onKeyDown: (event, modifier) => {\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              () => (currentTime.value = Math.min(duration.value, currentTime.value + 5)),\n            ],\n            [() => modifier.left, () => (currentTime.value = Math.max(0, currentTime.value - 5))],\n            [() => modifier[shortcuts.value.volume || 'M'], () => volumeRef.value?.toggleMute()],\n            ...Object.keys(shortcutRecord).map(key => {\n              return [() => modifier[key], shortcutRecord[key]] as [() => boolean, () => void]\n            }),\n          ],\n          { afterMatchAny: modifier.resetAll },\n        )\n      },\n    })\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('loading')]: props.loading,\n        },\n      ]\n    })\n    const playIcon = computed(() => (playing.value ? icons.value.pause : icons.value.play))\n    const stateIcon = computed(() => {\n      return playing.value ? icons.value.pauseState : icons.value.playState\n    })\n    const rateOptions = computed(() => {\n      const rates = props.playbackRates\n        .map(raw => {\n          const rate = typeof raw === 'number' ? { value: raw } : raw\n\n          rate.value = toNumber(rate.value)\n          rate.label =\n            rate.label || `${decimalLength(rate.value) ? rate.value : rate.value.toFixed(1)}x`\n\n          return rate\n        })\n        .filter(rate => rate.value > 0)\n        .sort((prev, next) => next.value - prev.value)\n\n      if (!rates.find(rate => rate.value === 1)) {\n        const index = rates.findIndex(rate => rate.value < 1)\n\n        rates.splice((index + rates.length) % rates.length, 0, { value: 1, label: '1.0x' })\n      }\n\n      return rates\n    })\n    const segments = computed(() => {\n      return props.segments\n        .map(segment => (typeof segment === 'number' ? { time: segment } : segment))\n        .filter(segment => segment.time >= 0 && segment.time <= duration.value)\n        .sort((prev, next) => prev.time - next.time)\n    })\n    const percent = computed(() => {\n      return duration.value ? (currentTime.value / duration.value) * 100 : 0\n    })\n    const srcFullList = computed(() => {\n      const src = 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    })\n    const srcIndex = computed(() => {\n      return srcFullList.value ? srcFullList.value.indexOf(currentSrc.value) : -1\n    })\n\n    const 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\n    watch(\n      () => props.src,\n      value => {\n        resetMetaState()\n        currentSrc.value = value\n      },\n      { flush: 'pre' },\n    )\n    watch(\n      () => props.time,\n      value => {\n        changeTime(value, false)\n      },\n    )\n    watch(\n      () => props.volume,\n      value => {\n        changeVolume(value, false)\n      },\n    )\n    watch(\n      () => props.playbackRate,\n      value => {\n        changeRate(value, false)\n      },\n    )\n    watch(playing, value => {\n      if (value) {\n        requestAnimationFrame(() => {\n          stateShow.value = false\n        })\n      } else {\n        stateShow.value = true\n      }\n    })\n    watch(canPlay, value => {\n      if (!value) {\n        playing.value = false\n      }\n    })\n    watch(stateShow, value => {\n      if (value) {\n        stateHidden.value = false\n      }\n    })\n\n    onMounted(() => {\n      nextTick(() => {\n        if (isClient && !videoRef.value && screen.value?.wrapper) {\n          video.value = (screen.value.wrapper as HTMLElement).querySelector('video') ?? undefined\n        }\n\n        if (videoRef.value && currentTime.value > 0) {\n          videoRef.value.currentTime = currentTime.value\n        }\n      })\n    })\n\n    provide(VIDEO_STATE, reactive({ placeId, iconScale, addShortcut }))\n\n    useListener(videoRef, 'canplay', () => {\n      canPlay.value = true\n      duration.value = videoRef.value?.duration ?? 0\n    })\n    useListener(videoRef, 'timeupdate', () => {\n      currentTime.value = videoRef.value?.currentTime ?? 0\n\n      emit('update:time', currentTime.value)\n      emitEvent(props.onTimeChange, currentTime.value)\n    })\n    useListener(videoRef, 'ended', handleEnded)\n    // useListener(videoRef, 'loadeddata', () => {\n    //   loadedData.value = true\n    // })\n    useListener(videoRef, 'enterpictureinpicture', () => {\n      pip.value = true\n      emitEvent(props.onTogglePip, true)\n    })\n    useListener(videoRef, 'leavepictureinpicture', () => {\n      pip.value = false\n      emitEvent(props.onTogglePip, false)\n    })\n\n    expose({\n      currentSrc,\n      playing,\n      currentTime,\n      duration,\n      pip,\n      interacting,\n      stateHidden,\n      wrapper,\n      video,\n      resetMetaState,\n    })\n\n    function 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\n      wrapper.value?.focus()\n      emitEvent(playing.value ? props.onPlay : props.onPause)\n    }\n\n    function handleEnded() {\n      playing.value = false\n\n      videoRef.value?.pause()\n      emitEvent(props.onEnded)\n    }\n\n    async 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\n    function changeRate(rate: number, dispatch = true) {\n      currentRate.value = rate\n\n      if (videoRef.value) {\n        videoRef.value.playbackRate = rate\n      }\n\n      if (dispatch) {\n        emit('update:playback-rate', rate)\n        emitEvent(props.onRateChange, rate)\n      }\n    }\n\n    function 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\n      if (dispatch) {\n        emit('update:time', time)\n        emitEvent(props.onTimeChange, time)\n      }\n    }\n\n    function 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        emitEvent(props.onVolumeChange, volume)\n      }\n    }\n\n    function toggleFlip(value = !flipped.value, dispatch = true) {\n      flipped.value = value\n\n      if (dispatch) {\n        emitEvent(props.onToggleFlip, flipped.value)\n      }\n    }\n\n    function onFullChange(full: false | FullScreenType) {\n      nextTick(() => {\n        wrapper.value?.focus()\n        emitEvent(props.onToggleFull, full)\n      })\n    }\n\n    function 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    }\n\n    function handleInteract() {\n      clearTimeout(timer.interact)\n\n      interacting.value = true\n      timer.interact = setTimeout(() => {\n        interacting.value = false\n      }, 3000)\n    }\n\n    function handlePointerLeave() {\n      clearTimeout(timer.interact)\n      timer.interact = setTimeout(() => {\n        interacting.value = false\n      }, 500)\n    }\n\n    function adjustSrc(amount: number) {\n      const list = srcFullList.value\n\n      if (props.srcList) {\n        currentSrc.value = list[(srcIndex.value + amount + list.length) % list.length]\n        emit('update:src', currentSrc.value)\n      }\n    }\n\n    function playPrev() {\n      adjustSrc(-1)\n      emitEvent(props.onPrev)\n    }\n\n    function playNext() {\n      adjustSrc(1)\n      emitEvent(props.onNext)\n    }\n\n    function toggleFull(type: FullScreenType) {\n      screen.value?.toggle(type)\n    }\n\n    function handleRefresh() {\n      emitEvent(props.onRefresh)\n    }\n\n    function renderPlayPrev() {\n      return (\n        <VideoControl\n          class={nh.be('play-prev')}\n          label={locale.value.playPrev}\n          shortcut={shortcuts.value['play-prev']}\n          disabled={!!props.srcList && !srcIndex.value}\n          onClick={playPrev}\n        >\n          <Icon\n            {...icons.value.playPrev}\n            scale={+(icons.value.playPrev.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderPlay() {\n      return (\n        <VideoControl\n          class={nh.be('play')}\n          label={playing.value ? locale.value.pause : locale.value.play}\n          shortcut={shortcuts.value.play}\n          disabled={!canPlay.value}\n          onClick={togglePlaying}\n        >\n          <Icon\n            {...playIcon.value}\n            scale={+(playIcon.value.scale || 1) * iconScale.value * 1.16}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderPlayNext() {\n      return (\n        <VideoControl\n          class={nh.be('play-next')}\n          label={locale.value.playNext}\n          shortcut={shortcuts.value['play-next']}\n          disabled={!!props.srcList && srcIndex.value === srcFullList.value.length - 1}\n          onClick={playNext}\n        >\n          <Icon\n            {...icons.value.playNext}\n            scale={+(icons.value.playNext.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderRefresh() {\n      return (\n        <VideoControl\n          class={nh.be('play-refresh')}\n          label={locale.value.refresh}\n          shortcut={shortcuts.value.refresh}\n          onClick={handleRefresh}\n        >\n          <Icon\n            {...icons.value.refresh}\n            scale={+(icons.value.refresh.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderTimer() {\n      return (\n        <VideoTimer\n          time={currentTime.value}\n          duration={duration.value}\n          disabled={!canPlay.value}\n          onChange={changeTime}\n        ></VideoTimer>\n      )\n    }\n\n    function renderPlaybackRate() {\n      return (\n        <VideoControl\n          class={nh.be('playback-rate')}\n          type={'select'}\n          value={currentRate.value}\n          options={rateOptions.value}\n          onSelect={(rate: VideoPlaybackRate) => changeRate(rate.value)}\n        ></VideoControl>\n      )\n    }\n\n    function renderVolume() {\n      return (\n        <VideoVolume\n          ref={volumeRef}\n          volume={currentVolume.value}\n          onChange={changeVolume}\n        ></VideoVolume>\n      )\n    }\n\n    function renderFlip() {\n      return (\n        <VideoControl\n          class={nh.be('flip')}\n          label={locale.value.flip}\n          shortcut={shortcuts.value.flip}\n          onClick={toggleFlip}\n        >\n          <Icon\n            {...icons.value.flipX}\n            scale={+(icons.value.flipX.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderPip() {\n      if (!pipEnabled || !video.value) return null\n\n      return (\n        <VideoControl\n          class={nh.be('pip')}\n          label={pip.value ? locale.value.exitPip : locale.value.requestPip}\n          shortcut={shortcuts.value.pip}\n          disabled={!canPlay.value}\n          onClick={togglePip}\n        >\n          <Icon {...icons.value.pip} scale={+(icons.value.pip.scale || 1) * iconScale.value}></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderFullWindow() {\n      return (\n        <VideoControl\n          class={nh.be('full-window')}\n          label={full.value === 'window' ? locale.value.fullWindowExit : locale.value.fullWindow}\n          shortcut={shortcuts.value['full-window']}\n          onClick={() => toggleFull('window')}\n        >\n          <Icon\n            {...icons.value.fullWindow}\n            scale={+(icons.value.fullWindow.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderFullBrowser() {\n      return (\n        <VideoControl\n          class={nh.be('full-browser')}\n          label={full.value === 'browser' ? locale.value.fullScreenExit : locale.value.fullScreen}\n          shortcut={shortcuts.value['full-browser']}\n          onClick={() => toggleFull('browser')}\n        >\n          <Icon\n            {...icons.value.fullScreen}\n            scale={+(icons.value.fullScreen.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderControl(name: VideoControlConfig) {\n      switch (name) {\n        case 'play-prev':\n          return renderPlayPrev()\n        case 'play':\n          return renderPlay()\n        case 'play-next':\n          return renderPlayNext()\n        case 'refresh':\n          return renderRefresh()\n        case 'timer':\n          return renderTimer()\n        case 'playback-rate':\n          return renderPlaybackRate()\n        case 'volume':\n          return renderVolume()\n        case 'flip':\n          return renderFlip()\n        case 'pip':\n          return renderPip()\n        case 'full-window':\n          return renderFullWindow()\n        case 'full-browser':\n          return renderFullBrowser()\n        default:\n          return createSlotRender(slots, [\n            `control-${name}`,\n            `control${toCapitalCase(name as string)}`,\n          ])?.(slotParams)\n      }\n    }\n\n    function renderControls() {\n      if (props.noControls) {\n        return (\n          <Progress\n            class={nh.be('progress-line')}\n            percentage={percent.value}\n            stroke-width={1}\n            info-type={'none'}\n          ></Progress>\n        )\n      }\n\n      return (\n        <div\n          class={{\n            [nh.be('controls')]: true,\n            [nh.bem('controls', 'collapsed')]: hasPlayed.value && !interacting.value,\n          }}\n        >\n          <section class={nh.be('controls-top')}>\n            <VideoProgress\n              time={currentTime.value}\n              duration={duration.value}\n              segments={segments.value}\n              onChange={changeTime}\n            ></VideoProgress>\n          </section>\n          <section class={nh.be('controls-bottom')}>\n            <div class={nh.be('controls-left')}>\n              {(props.controlLayout.left ?? videoDefaultControlLayout.left).map(renderControl)}\n            </div>\n            <div class={nh.be('controls-center')}>\n              {(props.controlLayout.center ?? videoDefaultControlLayout.center).map(renderControl)}\n            </div>\n            <div class={nh.be('controls-right')}>\n              {(props.controlLayout.right ?? videoDefaultControlLayout.right).map(renderControl)}\n            </div>\n          </section>\n        </div>\n      )\n    }\n\n    function renderMain() {\n      return (\n        <div class={nh.be('main')}>\n          <div\n            class={[nh.be('player'), flipped.value && nh.bem('player', 'flipped')]}\n            onClick={() => togglePlaying()}\n          >\n            {renderSlot(slots, 'player', {}, () => [\n              <video\n                {...props.videoAttrs}\n                ref={video}\n                class={nh.be('video')}\n                src={currentSrc.value || props.videoAttrs?.src}\n              >\n                {renderSlot(slots, 'default')}\n              </video>,\n            ])}\n          </div>\n          {!hasPlayed.value && (props.poster || slots.poster || props.slots.poster) && (\n            <div class={nh.be('poster')}>\n              {renderSlot(slots, 'poster', undefined, () => [\n                <Renderer renderer={props.slots.poster}>\n                  <img src={props.poster} />\n                </Renderer>,\n              ])}\n            </div>\n          )}\n          <Transition name={nh.bs('state-effect')} onAfterLeave={() => (stateHidden.value = true)}>\n            {canPlay.value && stateShow.value && (\n              <div class={nh.be('state')}>\n                {renderSlot(slots, 'state', { active: stateShow.value }, () => [\n                  <Icon {...stateIcon.value} scale={+(stateIcon.value.scale || 1) * 5}></Icon>,\n                ])}\n              </div>\n            )}\n          </Transition>\n          <Transition name={nh.ns('fade')}>\n            {((!canPlay.value && !stateShow.value) || (props.loading && stateHidden.value)) && (\n              <div class={nh.be('loading')}>\n                {renderSlot(slots, 'loading', {}, () => [\n                  <Icon\n                    {...icons.value.loading}\n                    icon={props.loadingIcon || icons.value.loading.icon}\n                    label={'loading'}\n                    effect={props.loadingEffect || icons.value.loading.effect}\n                    scale={+(stateIcon.value.scale || 1) * 5}\n                  ></Icon>,\n                ])}\n              </div>\n            )}\n          </Transition>\n          {renderControls()}\n          {renderSlot(slots, 'extra')}\n        </div>\n      )\n    }\n\n    return () => {\n      return (\n        <FullScreen\n          ref={screen}\n          class={className.value}\n          tabindex={'-1'}\n          onToggle={onFullChange}\n          onPointermove={handleInteract}\n          onPointerleave={handlePointerLeave}\n        >\n          {{ default: renderMain }}\n        </FullScreen>\n      )\n    }\n  },\n})\n"],"names":["defineComponent","name","props","videoProps","emits","setup","_props","slots","emit","expose","useProps","src","static","default","srcList","noControls","videoAttrs","time","volume","playbackRate","playbackRates","controlLayout","videoDefaultControlLayout","poster","video","segments","loading","loadingIcon","loadingEffect","shortcuts","nh","useNameHelper","locale","useLocale","icons","useIcons","timer","useSetTimeout","pipEnabled","isClient","document","pictureInPictureEnabled","currentSrc","ref","playing","currentTime","canPlay","duration","currentVolume","pip","stateShow","stateHidden","currentRate","interacting","hasPlayed","flipped","iconScale","screen","wrapper","computed","value","volumeRef","placeId","full","videoRef","shortcutRecord","reactive","videoDefaultShortcuts","addShortcut","key","cb","console","warn","noop","useModifier","target","passive","onKeyDown","event","modifier","ctrlKey","shiftKey","altKey","metaKey","decide","up","Math","min","down","max","right","left","toggleMute","Object","keys","map","afterMatchAny","resetAll","className","b","bs","bm","playIcon","pause","play","stateIcon","pauseState","playState","rateOptions","rates","raw","rate","toNumber","label","decimalLength","toFixed","filter","sort","prev","next","find","index","findIndex","splice","length","segment","percent","srcFullList","includes","concat","srcIndex","indexOf","slotParams","shallowReadonly","togglePlaying","togglePip","changeRate","changeTime","changeVolume","toggleFull","watch","resetMetaState","flush","requestAnimationFrame","onMounted","nextTick","querySelector","undefined","provide","VIDEO_STATE","useListener","emitEvent","onTimeChange","handleEnded","onTogglePip","focus","onPlay","onPause","onEnded","exitPictureInPicture","requestPictureInPicture","dispatch","onRateChange","onVolumeChange","toggleFlip","onToggleFlip","onFullChange","onToggleFull","handleInteract","clearTimeout","interact","setTimeout","handlePointerLeave","adjustSrc","amount","list","playPrev","onPrev","playNext","onNext","type","toggle","handleRefresh","onRefresh","renderPlayPrev","_createVNode","VideoControl","be","Icon","_mergeProps","scale","renderPlay","renderPlayNext","renderRefresh","refresh","renderTimer","VideoTimer","renderPlaybackRate","renderVolume","VideoVolume","renderFlip","flip","flipX","renderPip","exitPip","requestPip","renderFullWindow","fullWindowExit","fullWindow","onClick","renderFullBrowser","fullScreenExit","fullScreen","renderControl","createSlotRender","toCapitalCase","renderControls","Progress","bem","VideoProgress","center","renderMain","renderSlot","Renderer","Transition","onAfterLeave","active","ns","icon","effect","FullScreen"],"mappings":"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"}