import { h, Host } from '@stencil/core';
import classNames from 'classnames';
import { throttle } from '../../utils';
import { formatTime, calcDist, normalizeNumber, screenFn, isHls, scene } from './utils';
export class Video {
  constructor() {
    this.currentTime = 0;
    this.isDraggingProgress = false;
    this.gestureType = 'none';
    this.analyzeGesture = (e) => {
      var _a;
      const obj = {
        type: 'none'
      };
      const nowX = e.touches[0].screenX;
      const nowY = e.touches[0].screenY;
      const distX = nowX - this.lastTouchScreenX;
      const distY = nowY - this.lastTouchScreenY;
      const enableVslideGesture = this.isFullScreen ? this.vslideGestureInFullscreen : this.vslideGesture;
      if (this.gestureType === 'none') {
        // 两点间距离
        const dist = calcDist(distX, distY);
        // 没有移动
        if (dist < 10)
          return obj;
        if (Math.abs(distY) >= Math.abs(distX)) {
          // 垂直方向移动：调整音量
          if (enableVslideGesture) {
            this.gestureType = 'adjustVolume';
            this.lastVolume = this.videoRef.volume;
          }
          else {
            return obj;
          }
        }
        else if (Math.abs(distY) < Math.abs(distX)) {
          // 水平方向移动：调整进度
          if (this.enableProgressGesture) {
            this.gestureType = 'adjustProgress';
            this.lastPercentage = this.currentTime / ((_a = this.duration) !== null && _a !== void 0 ? _a : this._duration);
          }
          else {
            return obj;
          }
        }
      }
      obj.type = this.gestureType;
      obj.dataX = normalizeNumber(distX / 200);
      obj.dataY = normalizeNumber(distY / 200);
      return obj;
    };
    this.loadNativePlayer = () => {
      var _a, _b;
      if (this.videoRef) {
        this.videoRef.src = this.src;
        (_b = (_a = this.videoRef).load) === null || _b === void 0 ? void 0 : _b.call(_a);
      }
    };
    this.init = () => {
      const { src, videoRef } = this;
      if (isHls(src)) {
        import('hls.js').then(e => {
          const Hls = e.default;
          this.HLS = Hls;
          if (Hls.isSupported()) {
            if (this.hls) {
              this.hls.destroy();
            }
            this.hls = new Hls();
            this.hls.loadSource(src);
            this.hls.attachMedia(videoRef);
            this.hls.on(Hls.Events.MANIFEST_PARSED, () => {
              this.autoplay && this.play();
            });
            this.hls.on(Hls.Events.ERROR, (_, data) => {
              this.handleError(data);
            });
          }
          else if (videoRef.canPlayType('application/vnd.apple.mpegurl')) {
            this.loadNativePlayer();
          }
          else {
            console.error('该浏览器不支持 HLS 播放');
          }
        });
      }
      else {
        this.loadNativePlayer();
      }
    };
    this.handlePlay = () => {
      this.isPlaying = true;
      this.isFirst = false;
      this.controlsRef.toggleVisibility(true);
      this.onPlay.emit();
    };
    this.handlePause = () => {
      this.isPlaying = false;
      this.controlsRef.toggleVisibility(true);
      this.onPause.emit();
    };
    this.handleEnded = () => {
      this.isFirst = true;
      this.pause();
      this.controlsRef.toggleVisibility();
      this.onEnded.emit();
    };
    this.handleTimeUpdate = throttle(async (e) => {
      var _a, _b;
      this.currentTime = this.videoRef.currentTime;
      const duration = this.duration || this._duration;
      const isControlDragging = await this.controlsRef.getIsDraggingProgressBall();
      if (this.controls && this.showProgress) {
        if (!isControlDragging && !this.isDraggingProgress) {
          this.controlsRef.setProgressBall(this.currentTime / duration);
          this.controlsRef.setCurrentTime(this.currentTime);
        }
      }
      this.danmuRef.tick(this.currentTime);
      this.onTimeUpdate.emit({
        duration: (_a = e.target) === null || _a === void 0 ? void 0 : _a.duration,
        currentTime: (_b = e.target) === null || _b === void 0 ? void 0 : _b.currentTime
      });
      if (this.duration) {
        if (this.currentTime >= this.duration) {
          this.seek(0);
          this.handleEnded();
        }
      }
    }, 250);
    this.handleError = e => {
      var _a, _b;
      if (this.hls) {
        switch (e.type) {
          case this.HLS.ErrorTypes.NETWORK_ERROR:
            // try to recover network error
            this.onError.emit({ errMsg: e.response });
            this.hls.startLoad();
            break;
          case this.HLS.ErrorTypes.MEDIA_ERROR:
            this.onError.emit({ errMsg: e.reason || '媒体错误,请重试' });
            this.hls.recoverMediaError();
            break;
          default:
            break;
        }
      }
      else {
        this.onError.emit({
          errMsg: (_b = (_a = e.target) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.message,
        });
      }
    };
    this.handleDurationChange = () => {
      this._duration = this.videoRef.duration;
    };
    this.handleProgress = () => {
      this.onProgress.emit();
    };
    this.handleLoadedMetaData = (e) => {
      const target = e.target;
      this.onLoadedMetaData.emit({
        width: target.videoWidth,
        height: target.videoHeight,
        duration: target.duration
      });
    };
    this._play = () => this.videoRef.play();
    this._pause = () => this.videoRef.pause();
    this._stop = () => {
      this.videoRef.pause();
      this._seek(0);
    };
    this._seek = (position) => {
      this.videoRef.currentTime = position;
    };
    this.onTouchStartContainer = (e) => {
      this.lastTouchScreenX = e.touches[0].screenX;
      this.lastTouchScreenY = e.touches[0].screenY;
    };
    this.onClickContainer = () => {
      if (this.enablePlayGesture) {
        const now = Date.now();
        if (now - this.lastClickedTime < 300) {
          // 双击
          this.isPlaying ? this.pause() : this.play();
        }
        this.lastClickedTime = now;
      }
      this.controlsRef.toggleVisibility();
    };
    this.onClickFullScreenBtn = (e) => {
      e.stopPropagation();
      this.toggleFullScreen();
    };
    this.handleFullScreenChange = e => {
      // 全屏后，"退出"走的是浏览器事件，在此同步状态
      const timestamp = new Date().getTime();
      if (!e.detail && this.isFullScreen && !document[screenFn.fullscreenElement] && timestamp - this.fullScreenTimestamp > 100) {
        this.toggleFullScreen(false);
      }
    };
    this.toggleFullScreen = (isFullScreen = !this.isFullScreen) => {
      this.isFullScreen = isFullScreen; // this.videoRef?.['webkitDisplayingFullscreen']
      this.controlsRef.toggleVisibility(true);
      this.fullScreenTimestamp = new Date().getTime();
      this.onFullScreenChange.emit({
        fullScreen: this.isFullScreen,
        direction: 'vertical'
      });
      if (this.isFullScreen && !document[screenFn.fullscreenElement]) {
        setTimeout(() => {
          this.videoRef[screenFn.requestFullscreen]({ navigationUI: 'auto' });
        }, 0);
      }
    };
    this.toggleMute = (e) => {
      e.stopPropagation();
      this.videoRef.muted = !this.isMute;
      this.controlsRef.toggleVisibility(true);
      this.isMute = !this.isMute;
    };
    this.toggleDanmu = (e) => {
      e.stopPropagation();
      this.controlsRef.toggleVisibility(true);
      this._enableDanmu = !this._enableDanmu;
    };
    this.src = undefined;
    this.duration = undefined;
    this.controls = true;
    this.autoplay = false;
    this.loop = false;
    this.muted = false;
    this.initialTime = 0;
    this.poster = undefined;
    this.objectFit = 'contain';
    this.showProgress = true;
    this.showFullscreenBtn = true;
    this.showPlayBtn = true;
    this.showCenterPlayBtn = true;
    this.showMuteBtn = false;
    this.danmuList = undefined;
    this.danmuBtn = false;
    this.enableDanmu = false;
    this.enablePlayGesture = false;
    this.enableProgressGesture = true;
    this.vslideGesture = false;
    this.vslideGestureInFullscreen = true;
    this.nativeProps = {};
    this._duration = undefined;
    this._enableDanmu = false;
    this.isPlaying = false;
    this.isFirst = true;
    this.isFullScreen = false;
    this.fullScreenTimestamp = new Date().getTime();
    this.isMute = false;
  }
  componentWillLoad() {
    this._enableDanmu = this.enableDanmu;
  }
  componentDidLoad() {
    var _a, _b;
    this.init();
    if (this.initialTime) {
      this.videoRef.currentTime = this.initialTime;
    }
    // 目前只支持 danmuList 初始化弹幕列表，还未支持更新弹幕列表
    (_b = (_a = this.danmuRef).sendDanmu) === null || _b === void 0 ? void 0 : _b.call(_a, this.danmuList);
    if (document.addEventListener) {
      document.addEventListener(screenFn.fullscreenchange, this.handleFullScreenChange);
    }
    if (this.videoRef && scene === 'iOS') {
      // NOTE: iOS 场景下 fullscreenchange 并不会在退出全屏状态下触发，仅 webkitpresentationmodechanged 与 webkitendfullscreen 可替代
      this.videoRef.addEventListener('webkitendfullscreen', this.handleFullScreenChange);
    }
  }
  componentDidRender() {
  }
  disconnectedCallback() {
    if (document.removeEventListener) {
      document.removeEventListener(screenFn.fullscreenchange, this.handleFullScreenChange);
    }
    if (this.videoRef && scene === 'iOS') {
      this.videoRef.removeEventListener('webkitendfullscreen', this.handleFullScreenChange);
    }
  }
  watchEnableDanmu(newVal) {
    this._enableDanmu = newVal;
  }
  watchSrc() {
    this.init();
  }
  async onDocumentTouchMove(e) {
    if (this.lastTouchScreenX === undefined || this.lastTouchScreenY === undefined)
      return;
    if (await this.controlsRef.getIsDraggingProgressBall())
      return;
    const gestureObj = this.analyzeGesture(e);
    if (gestureObj.type === 'adjustVolume') {
      this.toastVolumeRef.style.visibility = 'visible';
      const nextVolume = Math.max(Math.min(this.lastVolume - gestureObj.dataY, 1), 0);
      this.videoRef.volume = nextVolume;
      this.toastVolumeBarRef.style.width = `${nextVolume * 100}%`;
    }
    else if (gestureObj.type === 'adjustProgress') {
      this.isDraggingProgress = true;
      this.nextPercentage = Math.max(Math.min(this.lastPercentage + (gestureObj.dataX || 0), 1), 0);
      if (this.controls && this.showProgress) {
        this.controlsRef.setProgressBall(this.nextPercentage);
        this.controlsRef.toggleVisibility(true);
      }
      const duration = this.duration || this._duration;
      this.toastProgressTitleRef.innerHTML = `${formatTime(this.nextPercentage * duration)} / ${formatTime(duration)}`;
      this.toastProgressRef.style.visibility = 'visible';
    }
  }
  onDocumentTouchEnd() {
    var _a;
    if (this.gestureType === 'adjustVolume') {
      this.toastVolumeRef.style.visibility = 'hidden';
    }
    else if (this.gestureType === 'adjustProgress') {
      this.toastProgressRef.style.visibility = 'hidden';
    }
    if (this.isDraggingProgress) {
      this.isDraggingProgress = false;
      this.seek(this.nextPercentage * ((_a = this.duration) !== null && _a !== void 0 ? _a : this._duration));
    }
    this.gestureType = 'none';
    this.lastTouchScreenX = undefined;
    this.lastTouchScreenY = undefined;
  }
  async getHlsObject() {
    // Note: H5 端专属方法，获取 HLS 实例 fix #11894
    return this.hls;
  }
  /** 播放视频 */
  async play() {
    this._play();
  }
  /** 暂停视频 */
  async pause() {
    this._pause();
  }
  /** 停止视频 */
  async stop() {
    this._stop();
  }
  /** 跳转到指定位置 */
  async seek(position) {
    this._seek(position);
  }
  /** 进入全屏。若有自定义内容需在全屏时展示，需将内容节点放置到 video 节点内。 */
  async requestFullScreen() {
    this.toggleFullScreen(true);
  }
  /** 退出全屏 */
  async exitFullScreen() {
    this.toggleFullScreen(false);
  }
  render() {
    const { controls, autoplay, loop, muted, poster, objectFit, isFirst, isMute, isFullScreen, showCenterPlayBtn, isPlaying, _enableDanmu, showMuteBtn, danmuBtn, showFullscreenBtn, nativeProps } = this;
    const duration = this.duration || this._duration;
    const durationTime = formatTime(duration);
    return (h(Host, { class: classNames('taro-video-container', {
        'taro-video-type-fullscreen': isFullScreen
      }), onTouchStart: this.onTouchStartContainer, onClick: this.onClickContainer }, h("video", Object.assign({ class: 'taro-video-video', style: {
        'object-fit': objectFit
      }, ref: dom => {
        if (dom) {
          this.videoRef = dom;
        }
      }, autoplay: autoplay, loop: loop, muted: muted, poster: controls ? poster : undefined, playsinline: true, "webkit-playsinline": true, onPlay: this.handlePlay, onPause: this.handlePause, onEnded: this.handleEnded, onTimeUpdate: this.handleTimeUpdate, onError: this.handleError, onDurationChange: this.handleDurationChange, onProgress: this.handleProgress, onLoadedMetaData: this.handleLoadedMetaData }, nativeProps), "\u6682\u65F6\u4E0D\u652F\u6301\u64AD\u653E\u8BE5\u89C6\u9891"), h("taro-video-danmu", { ref: dom => {
        if (dom) {
          this.danmuRef = dom;
        }
      }, enable: _enableDanmu }), isFirst && showCenterPlayBtn && !isPlaying && (h("div", { class: 'taro-video-cover' }, h("div", { class: 'taro-video-cover-play-button', onClick: () => this.play() }), h("p", { class: 'taro-video-cover-duration' }, durationTime))), h("taro-video-control", { ref: dom => {
        if (dom) {
          this.controlsRef = dom;
        }
      }, controls: controls, currentTime: this.currentTime, duration: duration, isPlaying: this.isPlaying, pauseFunc: this._pause, playFunc: this._play, seekFunc: this._seek, showPlayBtn: this.showPlayBtn, showProgress: this.showProgress }, showMuteBtn && (h("div", { class: classNames('taro-video-mute', {
        'taro-video-type-mute': isMute
      }), onClick: this.toggleMute })), danmuBtn && (h("div", { class: classNames('taro-video-danmu-button', {
        'taro-video-danmu-button-active': _enableDanmu
      }), onClick: this.toggleDanmu }, "\u5F39\u5E55")), showFullscreenBtn && (h("div", { class: classNames('taro-video-fullscreen', {
        'taro-video-type-fullscreen': isFullScreen
      }), onClick: this.onClickFullScreenBtn }))), h("div", { class: 'taro-video-toast taro-video-toast-volume', ref: dom => {
        if (dom) {
          this.toastVolumeRef = dom;
        }
      } }, h("div", { class: 'taro-video-toast-title' }, "\u97F3\u91CF"), h("div", { class: 'taro-video-toast-icon' }), h("div", { class: 'taro-video-toast-value' }, h("div", { class: 'taro-video-toast-value-content', ref: dom => {
        if (dom) {
          this.toastVolumeBarRef = dom;
        }
      } }, h("div", { class: 'taro-video-toast-volume-grids' }, Array(10).fill(1).map(() => (h("div", { class: 'taro-video-toast-volume-grids-item' }))))))), h("div", { class: 'taro-video-toast taro-video-toast-progress', ref: dom => {
        if (dom) {
          this.toastProgressRef = dom;
        }
      } }, h("div", { class: 'taro-video-toast-title', ref: dom => {
        if (dom) {
          this.toastProgressTitleRef = dom;
        }
      } }))));
  }
  static get is() { return "taro-video-core"; }
  static get originalStyleUrls() {
    return {
      "$": ["./style/index.scss"]
    };
  }
  static get styleUrls() {
    return {
      "$": ["./style/index.css"]
    };
  }
  static get properties() {
    return {
      "src": {
        "type": "string",
        "mutable": false,
        "complexType": {
          "original": "string",
          "resolved": "string",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u8981\u64AD\u653E\u89C6\u9891\u7684\u8D44\u6E90\u5730\u5740"
        },
        "attribute": "src",
        "reflect": false
      },
      "duration": {
        "type": "number",
        "mutable": false,
        "complexType": {
          "original": "number",
          "resolved": "number",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u6307\u5B9A\u89C6\u9891\u65F6\u957F"
        },
        "attribute": "duration",
        "reflect": false
      },
      "controls": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u663E\u793A\u9ED8\u8BA4\u64AD\u653E\u63A7\u4EF6\uFF08\u64AD\u653E/\u6682\u505C\u6309\u94AE\u3001\u64AD\u653E\u8FDB\u5EA6\u3001\u65F6\u95F4\uFF09"
        },
        "attribute": "controls",
        "reflect": false,
        "defaultValue": "true"
      },
      "autoplay": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u81EA\u52A8\u64AD\u653E"
        },
        "attribute": "autoplay",
        "reflect": false,
        "defaultValue": "false"
      },
      "loop": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u5FAA\u73AF\u64AD\u653E"
        },
        "attribute": "loop",
        "reflect": false,
        "defaultValue": "false"
      },
      "muted": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u9759\u97F3\u64AD\u653E"
        },
        "attribute": "muted",
        "reflect": false,
        "defaultValue": "false"
      },
      "initialTime": {
        "type": "number",
        "mutable": false,
        "complexType": {
          "original": "number",
          "resolved": "number",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u6307\u5B9A\u89C6\u9891\u521D\u59CB\u64AD\u653E\u4F4D\u7F6E"
        },
        "attribute": "initial-time",
        "reflect": false,
        "defaultValue": "0"
      },
      "poster": {
        "type": "string",
        "mutable": false,
        "complexType": {
          "original": "string",
          "resolved": "string",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u89C6\u9891\u5C01\u9762\u7684\u56FE\u7247\u7F51\u7EDC\u8D44\u6E90\u5730\u5740\u6216\u4E91\u6587\u4EF6ID\uFF082.3.0\uFF09\u3002\u82E5 controls \u5C5E\u6027\u503C\u4E3A false \u5219\u8BBE\u7F6E poster \u65E0\u6548"
        },
        "attribute": "poster",
        "reflect": false
      },
      "objectFit": {
        "type": "string",
        "mutable": false,
        "complexType": {
          "original": "'contain' | 'fill' | 'cover'",
          "resolved": "\"contain\" | \"cover\" | \"fill\"",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u5F53\u89C6\u9891\u5927\u5C0F\u4E0E video \u5BB9\u5668\u5927\u5C0F\u4E0D\u4E00\u81F4\u65F6\uFF0C\u89C6\u9891\u7684\u8868\u73B0\u5F62\u5F0F"
        },
        "attribute": "object-fit",
        "reflect": false,
        "defaultValue": "'contain'"
      },
      "showProgress": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u82E5\u4E0D\u8BBE\u7F6E\uFF0C\u5BBD\u5EA6\u5927\u4E8E 240 \u65F6\u624D\u4F1A\u663E\u793A"
        },
        "attribute": "show-progress",
        "reflect": false,
        "defaultValue": "true"
      },
      "showFullscreenBtn": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u663E\u793A\u5168\u5C4F\u6309\u94AE"
        },
        "attribute": "show-fullscreen-btn",
        "reflect": false,
        "defaultValue": "true"
      },
      "showPlayBtn": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u663E\u793A\u89C6\u9891\u5E95\u90E8\u63A7\u5236\u680F\u7684\u64AD\u653E\u6309\u94AE"
        },
        "attribute": "show-play-btn",
        "reflect": false,
        "defaultValue": "true"
      },
      "showCenterPlayBtn": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u663E\u793A\u89C6\u9891\u4E2D\u95F4\u7684\u64AD\u653E\u6309\u94AE"
        },
        "attribute": "show-center-play-btn",
        "reflect": false,
        "defaultValue": "true"
      },
      "showMuteBtn": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u663E\u793A\u9759\u97F3\u6309\u94AE"
        },
        "attribute": "show-mute-btn",
        "reflect": false,
        "defaultValue": "false"
      },
      "danmuList": {
        "type": "unknown",
        "mutable": false,
        "complexType": {
          "original": "[]",
          "resolved": "[]",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u5F39\u5E55\u5217\u8868"
        }
      },
      "danmuBtn": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u663E\u793A\u5F39\u5E55\u6309\u94AE"
        },
        "attribute": "danmu-btn",
        "reflect": false,
        "defaultValue": "false"
      },
      "enableDanmu": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u5C55\u793A\u5F39\u5E55"
        },
        "attribute": "enable-danmu",
        "reflect": false,
        "defaultValue": "false"
      },
      "enablePlayGesture": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u5F00\u542F\u64AD\u653E\u624B\u52BF\uFF0C\u5373\u53CC\u51FB\u5207\u6362\u64AD\u653E/\u6682\u505C"
        },
        "attribute": "enable-play-gesture",
        "reflect": false,
        "defaultValue": "false"
      },
      "enableProgressGesture": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u662F\u5426\u5F00\u542F\u63A7\u5236\u8FDB\u5EA6\u7684\u624B\u52BF"
        },
        "attribute": "enable-progress-gesture",
        "reflect": false,
        "defaultValue": "true"
      },
      "vslideGesture": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u5728\u975E\u5168\u5C4F\u6A21\u5F0F\u4E0B\uFF0C\u662F\u5426\u5F00\u542F\u4EAE\u5EA6\u4E0E\u97F3\u91CF\u8C03\u8282\u624B\u52BF"
        },
        "attribute": "vslide-gesture",
        "reflect": false,
        "defaultValue": "false"
      },
      "vslideGestureInFullscreen": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "\u5728\u5168\u5C4F\u6A21\u5F0F\u4E0B\uFF0C\u662F\u5426\u5F00\u542F\u4EAE\u5EA6\u4E0E\u97F3\u91CF\u8C03\u8282\u624B\u52BF"
        },
        "attribute": "vslide-gesture-in-fullscreen",
        "reflect": false,
        "defaultValue": "true"
      },
      "nativeProps": {
        "type": "unknown",
        "mutable": false,
        "complexType": {
          "original": "{}",
          "resolved": "{}",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": ""
        },
        "defaultValue": "{}"
      }
    };
  }
  static get states() {
    return {
      "_duration": {},
      "_enableDanmu": {},
      "isPlaying": {},
      "isFirst": {},
      "isFullScreen": {},
      "fullScreenTimestamp": {},
      "isMute": {}
    };
  }
  static get events() {
    return [{
        "method": "onPlay",
        "name": "play",
        "bubbles": true,
        "cancelable": true,
        "composed": true,
        "docs": {
          "tags": [],
          "text": ""
        },
        "complexType": {
          "original": "any",
          "resolved": "any",
          "references": {}
        }
      }, {
        "method": "onPause",
        "name": "pause",
        "bubbles": true,
        "cancelable": true,
        "composed": true,
        "docs": {
          "tags": [],
          "text": ""
        },
        "complexType": {
          "original": "any",
          "resolved": "any",
          "references": {}
        }
      }, {
        "method": "onEnded",
        "name": "ended",
        "bubbles": true,
        "cancelable": true,
        "composed": true,
        "docs": {
          "tags": [],
          "text": ""
        },
        "complexType": {
          "original": "any",
          "resolved": "any",
          "references": {}
        }
      }, {
        "method": "onTimeUpdate",
        "name": "timeupdate",
        "bubbles": true,
        "cancelable": true,
        "composed": true,
        "docs": {
          "tags": [],
          "text": ""
        },
        "complexType": {
          "original": "any",
          "resolved": "any",
          "references": {}
        }
      }, {
        "method": "onError",
        "name": "error",
        "bubbles": true,
        "cancelable": true,
        "composed": true,
        "docs": {
          "tags": [],
          "text": ""
        },
        "complexType": {
          "original": "any",
          "resolved": "any",
          "references": {}
        }
      }, {
        "method": "onFullScreenChange",
        "name": "fullscreenchange",
        "bubbles": true,
        "cancelable": true,
        "composed": true,
        "docs": {
          "tags": [],
          "text": ""
        },
        "complexType": {
          "original": "any",
          "resolved": "any",
          "references": {}
        }
      }, {
        "method": "onProgress",
        "name": "progress",
        "bubbles": true,
        "cancelable": true,
        "composed": true,
        "docs": {
          "tags": [],
          "text": ""
        },
        "complexType": {
          "original": "any",
          "resolved": "any",
          "references": {}
        }
      }, {
        "method": "onLoadedMetaData",
        "name": "loadedmetadata",
        "bubbles": true,
        "cancelable": true,
        "composed": true,
        "docs": {
          "tags": [],
          "text": ""
        },
        "complexType": {
          "original": "any",
          "resolved": "any",
          "references": {}
        }
      }];
  }
  static get methods() {
    return {
      "getHlsObject": {
        "complexType": {
          "signature": "() => Promise<HLS>",
          "parameters": [],
          "references": {
            "Promise": {
              "location": "global"
            },
            "HLS": {
              "location": "global"
            }
          },
          "return": "Promise<Hls>"
        },
        "docs": {
          "text": "",
          "tags": []
        }
      },
      "play": {
        "complexType": {
          "signature": "() => Promise<void>",
          "parameters": [],
          "references": {
            "Promise": {
              "location": "global"
            }
          },
          "return": "Promise<void>"
        },
        "docs": {
          "text": "\u64AD\u653E\u89C6\u9891",
          "tags": []
        }
      },
      "pause": {
        "complexType": {
          "signature": "() => Promise<void>",
          "parameters": [],
          "references": {
            "Promise": {
              "location": "global"
            }
          },
          "return": "Promise<void>"
        },
        "docs": {
          "text": "\u6682\u505C\u89C6\u9891",
          "tags": []
        }
      },
      "stop": {
        "complexType": {
          "signature": "() => Promise<void>",
          "parameters": [],
          "references": {
            "Promise": {
              "location": "global"
            }
          },
          "return": "Promise<void>"
        },
        "docs": {
          "text": "\u505C\u6B62\u89C6\u9891",
          "tags": []
        }
      },
      "seek": {
        "complexType": {
          "signature": "(position: number) => Promise<void>",
          "parameters": [{
              "tags": [],
              "text": ""
            }],
          "references": {
            "Promise": {
              "location": "global"
            }
          },
          "return": "Promise<void>"
        },
        "docs": {
          "text": "\u8DF3\u8F6C\u5230\u6307\u5B9A\u4F4D\u7F6E",
          "tags": []
        }
      },
      "requestFullScreen": {
        "complexType": {
          "signature": "() => Promise<void>",
          "parameters": [],
          "references": {
            "Promise": {
              "location": "global"
            }
          },
          "return": "Promise<void>"
        },
        "docs": {
          "text": "\u8FDB\u5165\u5168\u5C4F\u3002\u82E5\u6709\u81EA\u5B9A\u4E49\u5185\u5BB9\u9700\u5728\u5168\u5C4F\u65F6\u5C55\u793A\uFF0C\u9700\u5C06\u5185\u5BB9\u8282\u70B9\u653E\u7F6E\u5230 video \u8282\u70B9\u5185\u3002",
          "tags": []
        }
      },
      "exitFullScreen": {
        "complexType": {
          "signature": "() => Promise<void>",
          "parameters": [],
          "references": {
            "Promise": {
              "location": "global"
            }
          },
          "return": "Promise<void>"
        },
        "docs": {
          "text": "\u9000\u51FA\u5168\u5C4F",
          "tags": []
        }
      }
    };
  }
  static get elementRef() { return "el"; }
  static get watchers() {
    return [{
        "propName": "enableDanmu",
        "methodName": "watchEnableDanmu"
      }, {
        "propName": "src",
        "methodName": "watchSrc"
      }];
  }
  static get listeners() {
    return [{
        "name": "touchmove",
        "method": "onDocumentTouchMove",
        "target": "document",
        "capture": false,
        "passive": true
      }, {
        "name": "touchend",
        "method": "onDocumentTouchEnd",
        "target": "document",
        "capture": false,
        "passive": true
      }, {
        "name": "touchcancel",
        "method": "onDocumentTouchEnd",
        "target": "document",
        "capture": false,
        "passive": true
      }];
  }
}
//# sourceMappingURL=video.js.map
