@ezuikit/player-theme 3.1.2-beta.2 → 3.1.2-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.umd.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.2-beta.2
3
- * Copyright (c) 2026-08-12 04:37:54 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.2-beta.4
3
+ * Copyright (c) 2026-08-16 15:20:04 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  (function (global, factory) {
@@ -641,7 +641,7 @@
641
641
  function Control(options) {
642
642
  var _this;
643
643
  var _this___options;
644
- _this = EventEmitter.call(this) || this, /** 具体语言对应的值 */ _this.locale = null, _this.__options = {}, _this._disabled = false, _this._active = false, _this._camelCaseName = '';
644
+ _this = EventEmitter.call(this) || this, /** 具体语言对应的值 */ _this.locale = null, _this.__options = {}, _this._disabled = false, _this._active = false, _this._camelCaseName = '', /** click 监听引用,销毁时需显式移除 */ _this._onClickHandler = null;
645
645
  _this.__options = options;
646
646
  _this.locale = getLocale(_this.__options.locales, _this.__options.language);
647
647
  _this._camelCaseName = _this.__options.classNameSuffix ? _this.__options.classNameSuffix.replace(/[-_\s]+(.)?/g, function(_, c) {
@@ -730,6 +730,12 @@
730
730
  this.emit("Control." + this._camelCaseName + "Destroy");
731
731
  }
732
732
  if (((_this___options = this.__options) == null ? void 0 : _this___options.controlType) !== 'block') this.$container.removeEventListener('dblclick', this._onDBlClick);
733
+ // 移除 click 监听
734
+ if (this._onClickHandler) {
735
+ var _this_$container1;
736
+ (_this_$container1 = this.$container) == null ? void 0 : _this_$container1.removeEventListener('click', this._onClickHandler);
737
+ this._onClickHandler = null;
738
+ }
733
739
  this._active = false;
734
740
  this.removeAllListeners();
735
741
  (_this_$container = this.$container) == null ? void 0 : (_this_$container_remove = _this_$container.remove) == null ? void 0 : _this_$container_remove.call(_this_$container);
@@ -758,14 +764,16 @@
758
764
  * 当点击 Control 时 触发子类的 _onControlClick
759
765
  */ _proto._onClick = function _onClick() {
760
766
  var _this = this;
761
- this.$container.addEventListener('click', function(e) {
767
+ // 使用具名 handler 便于在 destroy 时精确移除,避免匿名监听残留
768
+ this._onClickHandler = function(e) {
762
769
  var _this_$container;
763
770
  // prettier-ignore
764
771
  if (!((_this_$container = _this.$container) == null ? void 0 : _this_$container.classList.contains("" + PREFIX_CLASS + "-disabled"))) {
765
772
  // _onControlClick 来源自子类中
766
773
  _this._onControlClick == null ? void 0 : _this._onControlClick.call(_this, e);
767
774
  }
768
- });
775
+ };
776
+ this.$container.addEventListener('click', this._onClickHandler);
769
777
  };
770
778
  _proto._onDBlClick = function _onDBlClick(e) {
771
779
  e.stopPropagation();
@@ -5765,6 +5773,7 @@
5765
5773
  var // rerender 画面
5766
5774
  _theme_contentControl_emit, _theme_contentControl;
5767
5775
  (_theme_contentControl = theme.contentControl) == null ? void 0 : (_theme_contentControl_emit = _theme_contentControl.emit) == null ? void 0 : _theme_contentControl_emit.call(_theme_contentControl, EVENTS$2.videoInfo, info.width, info.height);
5776
+ theme._videoInfo = info;
5768
5777
  }
5769
5778
  });
5770
5779
  theme == null ? void 0 : theme.on(EVENTS$2.resize, function() {
@@ -6096,8 +6105,14 @@
6096
6105
  }
6097
6106
  // 播放地址切换后同步 Live/RecDropdown 激活状态
6098
6107
  // changePlayUrl 后 urlInfo 已更新,firstFrameDisplay 表示新地址播放成功
6108
+ // 注意:_controlEventemitter 每次 _renderTheme 都会执行,这里的监听挂在 theme 上,
6109
+ // 必须先移除上一次的引用,避免 changeTheme 反复切换导致监听器无限累积(内存泄漏 + 重复执行)。
6110
+ if (theme._onFirstFrameSync) {
6111
+ theme.removeListener(EVENTS$2.firstFrameDisplay, theme._onFirstFrameSync);
6112
+ theme._onFirstFrameSync = null;
6113
+ }
6099
6114
  if (((_theme_controls11 = theme.controls) == null ? void 0 : _theme_controls11.liveControl) || ((_theme_controls12 = theme.controls) == null ? void 0 : _theme_controls12.recDropdownControl)) {
6100
- theme.on(EVENTS$2.firstFrameDisplay, function() {
6115
+ theme._onFirstFrameSync = function() {
6101
6116
  var _theme_controls, _theme_controls1;
6102
6117
  var urlInfo = theme.urlInfo;
6103
6118
  if ((_theme_controls = theme.controls) == null ? void 0 : _theme_controls.liveControl) {
@@ -6106,7 +6121,8 @@
6106
6121
  if ((_theme_controls1 = theme.controls) == null ? void 0 : _theme_controls1.recDropdownControl) {
6107
6122
  theme.controls.recDropdownControl._syncActiveByUrlInfo(urlInfo);
6108
6123
  }
6109
- });
6124
+ };
6125
+ theme.on(EVENTS$2.firstFrameDisplay, theme._onFirstFrameSync);
6110
6126
  }
6111
6127
  // 缩放控件
6112
6128
  if ((_theme_controls13 = theme.controls) == null ? void 0 : _theme_controls13.zoomControl) {
@@ -6686,15 +6702,20 @@
6686
6702
  * @returns
6687
6703
  */ function getThemeDataByTemplate(theme, id) {
6688
6704
  return _async_to_generator$7(function() {
6689
- var _theme_options_token_httpToken, _theme_options_token, url;
6705
+ var _theme_options_token_httpToken, _theme_options_token, // 中止上一个在途请求,并为本次请求创建可中止的信号(destroy 时会 abort)
6706
+ _theme__templateAbortController, url, controller;
6690
6707
  return _ts_generator$7(this, function(_state) {
6691
6708
  switch(_state.label){
6692
6709
  case 0:
6693
6710
  url = theme.options.env.domain + "/api/service/media/template/getDetail?accessToken=" + (theme.options.accessToken || ((_theme_options_token = theme.options.token) == null ? void 0 : (_theme_options_token_httpToken = _theme_options_token.httpToken) == null ? void 0 : _theme_options_token_httpToken.url)) + "&id=" + id;
6711
+ (_theme__templateAbortController = theme._templateAbortController) == null ? void 0 : _theme__templateAbortController.abort();
6712
+ controller = new AbortController();
6713
+ theme._templateAbortController = controller;
6694
6714
  return [
6695
6715
  4,
6696
6716
  fetch(url, {
6697
- method: 'GET'
6717
+ method: 'GET',
6718
+ signal: controller == null ? void 0 : controller.signal
6698
6719
  }).then(function(response) {
6699
6720
  return _async_to_generator$7(function() {
6700
6721
  return _ts_generator$7(this, function(_state) {
@@ -6998,7 +7019,7 @@
6998
7019
  * @returns
6999
7020
  */ function getThemeData(theme, data) {
7000
7021
  return _async_to_generator$6(function() {
7001
- var themeData, _theme_logger, template;
7022
+ var themeData, _theme_logger, template, e;
7002
7023
  return _ts_generator$6(this, function(_state) {
7003
7024
  switch(_state.label){
7004
7025
  case 0:
@@ -7044,13 +7065,23 @@
7044
7065
  2,
7045
7066
  template
7046
7067
  ];
7068
+ // 请求返回前已销毁则静默返回,不在已释放的 theme 上派发事件
7069
+ if (theme.destroyed) return [
7070
+ 2,
7071
+ null
7072
+ ];
7047
7073
  theme.emit(EVENTS$2.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
7048
7074
  return [
7049
7075
  2,
7050
7076
  null
7051
7077
  ];
7052
7078
  case 4:
7053
- _state.sent();
7079
+ e = _state.sent();
7080
+ // 请求被中止(destroy/重新渲染)或已销毁:静默返回
7081
+ if (theme.destroyed || (e == null ? void 0 : e.name) === 'AbortError') return [
7082
+ 2,
7083
+ null
7084
+ ];
7054
7085
  theme.emit(EVENTS$2.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
7055
7086
  return [
7056
7087
  2,
@@ -11589,6 +11620,11 @@
11589
11620
  if (theme._onPauseTimingFunc) {
11590
11621
  theme._onPauseTimingFunc = null;
11591
11622
  }
11623
+ // 移除首帧同步监听(挂在 theme 上,需显式解绑,避免 changeTheme 累积)
11624
+ if (theme._onFirstFrameSync) {
11625
+ theme.removeListener(EVENTS$2.firstFrameDisplay, theme._onFirstFrameSync);
11626
+ theme._onFirstFrameSync = null;
11627
+ }
11592
11628
  if (hasControls) {
11593
11629
  theme.emit(EVENTS$2.control.unmountedControls);
11594
11630
  }
@@ -11859,6 +11895,10 @@
11859
11895
  ];
11860
11896
  case 1:
11861
11897
  themeData = _state.sent();
11898
+ // 异步获取主题数据期间可能已 destroy(),避免在已释放的 theme 上继续渲染/emit
11899
+ if (theme.destroyed) return [
11900
+ 2
11901
+ ];
11862
11902
  _unmountedControls(theme);
11863
11903
  if (Object.prototype.toString.call(themeData) !== '[object Object]') {
11864
11904
  // 主题空
@@ -12521,7 +12561,15 @@
12521
12561
  // _recMonthObj: Record<string, string[]> = {};
12522
12562
  /**
12523
12563
  * 录像回放的月份列表 @private
12524
- */ _this.recMonth = [], /** 清理 header/footer 动画 定时器 @private */ _this._onPauseTimingFunc = null, /** 销毁标识 @readonly */ _this.destroyed = false, _this.scaleMode = 0;
12564
+ */ _this.recMonth = [], /** 清理 header/footer 动画 定时器 @private */ _this._onPauseTimingFunc = null, /**
12565
+ * 首帧同步 Live/RecDropdown 激活态的监听器引用。
12566
+ * 每次 `_renderTheme` 重新绑定前需先移除旧引用,避免 changeTheme 累积监听。
12567
+ * @private
12568
+ */ _this._onFirstFrameSync = null, /**
12569
+ * 模板请求(getDetail)的中止控制器。
12570
+ * 重新渲染或销毁时中止在途请求,避免请求返回后在已销毁/已切换的 theme 上继续操作。
12571
+ * @private
12572
+ */ _this._templateAbortController = null, /** 销毁标识 @readonly */ _this.destroyed = false, _this.scaleMode = 0, _this._videoInfo = {};
12525
12573
  _this._initOptions(options);
12526
12574
  if (_this.options.type === 'ezopen') {
12527
12575
  var _this_urlInfo_searchParams1, _this_urlInfo1, _this_urlInfo2;
@@ -12564,7 +12612,7 @@
12564
12612
  _this._muted = (_ref1 = (_this_options_volumeOptions_muted = (_this_options_volumeOptions1 = _this.options.volumeOptions) == null ? void 0 : _this_options_volumeOptions1.muted) != null ? _this_options_volumeOptions_muted : _this.options.muted) != null ? _ref1 : false;
12565
12613
  var _this_options_speedOptions_value, _ref2;
12566
12614
  // playbackSpeed 是 萤石标准流倍速字段
12567
- _this._speed = (_ref2 = (_this_options_speedOptions_value = (_this_options_speedOptions = _this.options.speedOptions) == null ? void 0 : _this_options_speedOptions.value) != null ? _this_options_speedOptions_value : (_this_urlInfo = _this.urlInfo) == null ? void 0 : (_this_urlInfo_searchParams = _this_urlInfo.searchParams) == null ? void 0 : _this_urlInfo_searchParams.playbackSpeed) != null ? _ref2 : 1;
12615
+ _this._speed = +((_ref2 = (_this_options_speedOptions_value = (_this_options_speedOptions = _this.options.speedOptions) == null ? void 0 : _this_options_speedOptions.value) != null ? _this_options_speedOptions_value : (_this_urlInfo = _this.urlInfo) == null ? void 0 : (_this_urlInfo_searchParams = _this_urlInfo.searchParams) == null ? void 0 : _this_urlInfo_searchParams.playbackSpeed) != null ? _ref2 : 1);
12568
12616
  _this._mobileInnerWidthHeight = _this._mobileInnerWidthHeight.bind(_this);
12569
12617
  _this._throttleMobileInnerWidthHeight = throttle(_this._mobileInnerWidthHeight, 20).bind(_this);
12570
12618
  _this._onDblClickFullscreen = debounce(_this._onDblClickFullscreen, 20).bind(_this);
@@ -12776,12 +12824,15 @@
12776
12824
  * ```
12777
12825
  */ _proto.destroy = function destroy() {
12778
12826
  var _this = this;
12779
- var _this_contentControl, _this_$container;
12827
+ var // 中止在途的模板请求,避免其回调在已销毁的 theme 上继续执行
12828
+ _this__templateAbortController, _this_contentControl, _this_$container;
12780
12829
  if (!this.$container || this.destroyed) {
12781
12830
  // 防止多次销毁
12782
12831
  return;
12783
12832
  }
12784
12833
  this.emit(EVENTS$2.theme.beforeDestroy);
12834
+ (_this__templateAbortController = this._templateAbortController) == null ? void 0 : _this__templateAbortController.abort();
12835
+ this._templateAbortController = null;
12785
12836
  this._removeEventListener();
12786
12837
  _unmountedControls(this);
12787
12838
  (_this_contentControl = this.contentControl) == null ? void 0 : _this_contentControl.destroy();
@@ -12802,6 +12853,8 @@
12802
12853
  if (this.i18n) this.i18n = null;
12803
12854
  this.recType = '';
12804
12855
  this.recMonth = []; // 清空数据
12856
+ // 重置
12857
+ this._videoInfo = {};
12805
12858
  this.emit(EVENTS$2.theme.destroyed);
12806
12859
  this.removeAllListeners();
12807
12860
  if (this.logger) this.logger = null;
@@ -12814,7 +12867,12 @@
12814
12867
  /** 初始化配置项 */ _proto._initOptions = function _initOptions(options) {
12815
12868
  if (options === void 0) options = {};
12816
12869
  var _this_options_loggerOptions, _this_options_definitionOptions_list, _this_options_definitionOptions, _this_options_videoLevelList;
12817
- this.options = deepmerge(THEME_DEFAULT_OPTIONS, options, {
12870
+ // 先对模块级默认配置做一次深拷贝,得到全新的嵌套对象/数组,
12871
+ // 避免 this.options 与 THEME_DEFAULT_OPTIONS(如 mobileExtendOptions.controls、env、loggerOptions)
12872
+ // 共享引用而在多实例间相互污染。
12873
+ // 仍对用户 options 使用 clone:false —— container 可能是 DOM 节点/函数,深拷贝会破坏它。
12874
+ var defaults = deepmerge({}, THEME_DEFAULT_OPTIONS);
12875
+ this.options = deepmerge(defaults, options, {
12818
12876
  clone: false
12819
12877
  });
12820
12878
  this._url = this.options.url;
@@ -12849,10 +12907,12 @@
12849
12907
  this.logger.log('[options] \n', this.options);
12850
12908
  }
12851
12909
  var language = this.options.language || 'zh';
12852
- var locales = deepmerge({
12910
+ // 深拷贝内置语言包,避免与模块级 zh/en 常量共享引用(I18n 若对其做合并/修改会污染全局)
12911
+ var baseLocales = deepmerge({}, {
12853
12912
  zh: zh,
12854
12913
  en: en
12855
- }, this.options.locales || {}, {
12914
+ });
12915
+ var locales = deepmerge(baseLocales, this.options.locales || {}, {
12856
12916
  clone: false
12857
12917
  });
12858
12918
  // prettier-ignore
@@ -13418,6 +13478,41 @@
13418
13478
  return this._height;
13419
13479
  }
13420
13480
  },
13481
+ {
13482
+ key: "videoInfo",
13483
+ get: /**
13484
+ * 视频信息
13485
+ * @version 3.1.2
13486
+ * ```ts
13487
+ * theme.videoInfo // ThemeVideoInfo
13488
+ * ```
13489
+ */ function get() {
13490
+ return this._videoInfo || {};
13491
+ }
13492
+ },
13493
+ {
13494
+ key: "videoWidth",
13495
+ get: /**
13496
+ * 视频分辨率 宽
13497
+ *
13498
+ * @version 3.1.2
13499
+ *
13500
+ * ```ts
13501
+ * theme.videoWidth // number
13502
+ * ```
13503
+ */ function get() {
13504
+ return this._videoInfo.width || 0;
13505
+ }
13506
+ },
13507
+ {
13508
+ key: "videoHeight",
13509
+ get: /**
13510
+ * 视频分辨率 高
13511
+ * @version 3.1.2
13512
+ */ function get() {
13513
+ return this._videoInfo.height || 0;
13514
+ }
13515
+ },
13421
13516
  {
13422
13517
  key: "playing",
13423
13518
  get: /**
@@ -13682,13 +13777,13 @@
13682
13777
  {
13683
13778
  key: "speed",
13684
13779
  get: function get() {
13685
- return this._speed;
13780
+ return +this._speed;
13686
13781
  },
13687
13782
  set: /**
13688
13783
  * 倍速
13689
13784
  */ function set(speed) {
13690
13785
  speed = +speed;
13691
- if (speed !== this._speed) {
13786
+ if (speed !== +this._speed) {
13692
13787
  this._speed = speed;
13693
13788
  this.emit(EVENTS$2.speedChange, speed);
13694
13789
  }
@@ -13835,7 +13930,7 @@
13835
13930
  zh: zh,
13836
13931
  en: en
13837
13932
  };
13838
- /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.2-beta.2';
13933
+ /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.2-beta.4';
13839
13934
 
13840
13935
  // 不要动这里的代码, 这个出口是为了编译成 umd 规范的文件
13841
13936
 
package/dist/style.css CHANGED
@@ -1,7 +1,7 @@
1
1
  :root{--ezplayer-default-color:#fff;--ezplayer-primary-color:#407aff;--ezplayer-active-color:var(--ezplayer-primary-color,#407aff);--ezplayer-disabled-color:#aaa;--ezplayer-font-size:14px;--ezplayer-icon-font-size:24px;--ezplayer-btn-height:var(--ezplayer-icon-font-size,24px);--ezplayer-border-radius:8px;--ezplayer-control-space:16px;--ezplayer-header-height:46px;--ezplayer-footer-height:80px;--ezplayer-fullscreen-control-space:26px;--ezplayer-panel-bg-color:rgba(0,0,0,.7);--ezplayer-mobile-control-space:16px;--ezplayer-mobile-header-height:45px;--ezplayer-mobile-footer-height:54px;--ezplayer-mobile-fullscreen-header-height:75px;--ezplayer-mobile-fullscreen-footer-height:110px;--ezplayer-mobile-fullscreen-control-space:26px;--ezplayer-mobile-extend-bg-color:#f5f7fa;--ezplayer-mobile-extend-default-color:#2c2c2c}
2
2
  body.ezplayer-body-mobile-noscroll{background-color:#000!important;height:100vh;overflow:hidden;touch-action:none}.ezplayer,.ezplayer-mobile-extend{background-color:#000;box-sizing:border-box;color:var(--ezplayer-default-color,#fff);display:flex;flex-direction:column;font-size:14px;font-size:var(--ezplayer-font-size,14px);padding:0;position:relative;--webkit-tap-highlight-color:transparent;outline:none}.ezplayer *,.ezplayer-mobile-extend *{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ezplayer:-webkit-full-screen{height:100%!important;width:100%!important}.ezplayer *{box-sizing:border-box}.ezplayer li,.ezplayer ul{box-sizing:border-box;list-style:none;margin:0;padding:0}.ezplayer-control{align-items:center;cursor:pointer;display:inline-flex;justify-content:center}.ezplayer-control-block,.ezplayer-control-text{cursor:unset}.ezplayer-control-block{align-items:center;box-sizing:border-box;color:var(--ezplayer-default-color,#fff);display:flex;flex-direction:column;justify-content:center;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ezplayer-btn,.ezplayer-icon,.ezplayer-text{display:inline-flex;transition:color .2s ease-in-out}.ezplayer-btn{cursor:pointer}.ezplayer-btn,.ezplayer-text{font-size:var(--ezplayer-font-size,14px)}.ezplayer-btn{align-items:center;border:1px solid var(--ezplayer-default-color,#fff);border-radius:12px;border-radius:calc(var(--ezplayer-btn-height, 24px)/2);display:inline-flex;height:var(--ezplayer-btn-height,26px);justify-content:center;padding:2px 10px;white-space:nowrap}.ezplayer-active{border-color:var(--ezplayer-active-color,#0099e5)!important;color:var(--ezplayer-active-color,#0099e5)!important}.ezplayer-disabled,.ezplayer-disabled .ezplayer-btn,.ezplayer-disabled .ezplayer-icon,.ezplayer-disabled .ezplayer-text{border-color:var(--ezplayer-disabled-color,#aaa)!important;color:var(--ezplayer-disabled-color)!important;cursor:not-allowed!important}.ezplayer-hide{display:none!important}.ezplayer-hide-transition{opacity:0!important;pointer-events:none!important}.ezplayer-overflow-hidden{overflow:hidden}.ezplayer-global-fullscreen .ezplayer-footer,.ezplayer-global-fullscreen .ezplayer-header,.ezplayer-global-fullscreen .ezplayer-rec-footer{display:none}.ezplayer-mobile .ezplayer-control-global-fullscreen{display:none!important}.ezplayer-mobile.ezplayer-fullscreen.ezplayer-angle-0,.ezplayer-mobile.ezplayer-fullscreen.ezplayer-angle-180{background-color:#000!important;bottom:0!important;height:100vw!important;height:var(--ezplayer-mobile-inner-width,100vw)!important;left:0!important;overflow:hidden;padding-right:env(safe-area-inset-bottom);position:fixed!important;right:0!important;top:0!important;transform:rotate(90.001deg) translateY(-100%)!important;-webkit-transform:rotate(90.001deg) translateY(-100%)!important;transform-origin:0 0!important;-webkit-transform-origin:0 0!important;width:100vh!important;width:var(--ezplayer-mobile-inner-height,100vh)!important;z-index:9999}.ezplayer-mobile.ezplayer-fullscreen.ezplayer-angle-270,.ezplayer-mobile.ezplayer-fullscreen.ezplayer-angle-90{background-color:#000!important;bottom:0!important;height:100vh!important;height:var(--ezplayer-mobile-inner-height,100vh)!important;left:0!important;overflow:hidden;position:fixed!important;right:0!important;top:0!important;transform:rotate(0deg) translateY(0)!important;-webkit-transform:rotate(0deg) translateY(0)!important;transform-origin:0 0!important;-webkit-transform-origin:0 0!important;width:100vw!important;width:var(--ezplayer-mobile-inner-width,100vw)!important;z-index:9999}
3
3
  .ezplayer-footer,.ezplayer-header{align-items:center;box-sizing:border-box;color:var(--ezplayer-default-color,#fff);display:flex;flex-wrap:nowrap;font-size:24px;justify-content:space-between;left:0;opacity:1;position:absolute;right:0;transition:opacity .3s ease;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:20}.ezplayer-footer-left,.ezplayer-footer-right,.ezplayer-header-left,.ezplayer-header-right{display:inline-flex;flex-direction:row;flex-wrap:nowrap}.ezplayer-footer-left,.ezplayer-header-left{padding-left:20px}.ezplayer-footer-left .ezplayer-control,.ezplayer-header-left .ezplayer-control{margin-right:16px}.ezplayer-footer-left .ezplayer-control:last-child,.ezplayer-header-left .ezplayer-control:last-child{margin-right:0!important}.ezplayer-footer-right,.ezplayer-header-right{padding-right:20px}.ezplayer-footer-right .ezplayer-control,.ezplayer-header-right .ezplayer-control{margin-left:16px}.ezplayer-footer-right .ezplayer-control:first-child,.ezplayer-header-right .ezplayer-control:first-child{margin-left:0!important}.ezplayer-footer .ezplayer-control,.ezplayer-header .ezplayer-control{padding:2px}.ezplayer-footer .ezplayer-control-text+.ezplayer-control-text,.ezplayer-header .ezplayer-control-text+.ezplayer-control-text{margin-left:8px}.ezplayer-footer-more,.ezplayer-header-more{align-items:center;display:flex;flex-direction:row}.ezplayer-header{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAMAAADeMYNYAAAAbFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0Iv+qAAAAJHRSTlOBdGtiTDoxGxIJy8bCvbm0sKyno56alZGMiHtbV1JFQSomIQDNbq/TAAAAPklEQVQI1xXBhQHAIAAEsau7uwv778iTkFNQUlHT0NLRMzAyMbOwsuHseOproAcnF6HePEQa68vHT6KpZmosd8UCpGNSKboAAAAASUVORK5CYII=");box-sizing:border-box;height:46px;margin:0;top:0}.ezplayer-header-left,.ezplayer-header-right{max-width:50%}.ezplayer-header .ezplayer-icon{font-size:22px}.ezplayer-control-rec .ezplayer-icon:first-child{margin-left:0}.ezplayer-footer{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABQCAQAAAByztdQAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAACYktHRAD/h4/MvwAAAAd0SU1FB+kGBAsQDlySUqoAAAABb3JOVAHPoneaAAAAHElEQVQI12NgYGRiYGZiYGJiYEZiYJLECw5q9QCpgAFr/pGonwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNS0wNi0wNFQxMToxNTo1OCswMDowMBLJutIAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjUtMDYtMDRUMTE6MTU6NTgrMDA6MDBjlAJuAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI1LTA2LTA0VDExOjE2OjE0KzAwOjAwnFz8PAAAAABJRU5ErkJggg==");bottom:0;box-sizing:border-box;height:80px;margin:0;padding-top:20px}.ezplayer-mobile .ezplayer-footer,.ezplayer-mobile .ezplayer-header{font-size:24px}.ezplayer-mobile .ezplayer-footer-left .ezplayer-control,.ezplayer-mobile .ezplayer-footer-right .ezplayer-control,.ezplayer-mobile .ezplayer-header-left .ezplayer-control,.ezplayer-mobile .ezplayer-header-right .ezplayer-control{height:24px;padding:0}.ezplayer-mobile .ezplayer-footer-left,.ezplayer-mobile .ezplayer-header-left{padding-left:15px}.ezplayer-mobile .ezplayer-footer-left .ezplayer-control,.ezplayer-mobile .ezplayer-header-left .ezplayer-control{margin-right:15px}.ezplayer-mobile .ezplayer-footer-right,.ezplayer-mobile .ezplayer-header-right{padding-right:15px}.ezplayer-mobile .ezplayer-footer-right .ezplayer-control,.ezplayer-mobile .ezplayer-header-right .ezplayer-control{margin-left:15px}.ezplayer-mobile .ezplayer-footer .ezplayer-control,.ezplayer-mobile .ezplayer-header .ezplayer-control{height:24px;min-width:24px}.ezplayer-mobile .ezplayer-footer .ezplayer-control-text,.ezplayer-mobile .ezplayer-header .ezplayer-control-text{font-size:14px}.ezplayer-mobile .ezplayer-header{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAtCAMAAACzkkr1AAAAV1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOl5NtAAAAHXRSTlOWj4JzaV9YUUQ9MywlGxQKioZ8eW9kTUk4IA8FAKPHi9EAAABMSURBVAjXJcKFDcAwAAOwjKHM+P+dUzTL+C0LWwvnsK7sPULAtnGM2HdOCcfB58nXxTmjFNw3Pw/XivdlIVhKbg1KsdbcO4zhMTDnB9pJBB0jNaXIAAAAAElFTkSuQmCC");background:linear-gradient(180deg,rgba(0,0,0,.6) 0,transparent);height:45px;margin:0;padding:0}.ezplayer-mobile .ezplayer-footer{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAA2CAQAAABHVIAUAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAACYktHRAD/h4/MvwAAAAd0SU1FB+kHGQYOGOvM7YUAAAABb3JOVAHPoneaAAAAFUlEQVQY02NkYGRgYGFgxkUwjShZAMFnAW71uqvOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI1LTA3LTI1VDA2OjE0OjAwKzAwOjAwy873zwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNS0wNy0yNVQwNjoxNDowMCswMDowMLqTT3MAAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjUtMDctMjVUMDY6MTQ6MjQrMDA6MDBb7E3CAAAAAElFTkSuQmCC");background:linear-gradient(180deg,transparent 0,rgba(0,0,0,.6));height:54px;padding-top:0}.ezplayer-mobile.ezplayer-fullscreen .ezplayer-header{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAABLCAQAAADw6J4LAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAACYktHRAD/h4/MvwAAAAd0SU1FB+kHGQYYHh43/WcAAAABb3JOVAHPoneaAAAAKUlEQVQY02NkOM3AwMLwF5X4h5dLOyXD13JmBiaG/8wMjAz/GRkYGRgADI9KMQ6gLKQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjUtMDctMjVUMDY6MjQ6MTQrMDA6MDBqybVDAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDI1LTA3LTI1VDA2OjI0OjE0KzAwOjAwG5QN/wAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyNS0wNy0yNVQwNjoyNDozMCswMDowMPrrD04AAAAASUVORK5CYII=");background:linear-gradient(180deg,rgba(0,0,0,.8) 0,transparent);height:75px}.ezplayer-mobile.ezplayer-fullscreen .ezplayer-footer{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAABuCAMAAAA6XjI3AAAAaVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnbPKNAAAAI3RSTlMAQrRXSTozKxUHxb+spqCNh4F1ZVAgDbqTenBqJRvKm5dgXO7N8BQAAABzSURBVBjThcRFDsQwFATRH2Z2mHP/Q447bmuWKT2VfJdIYg0DxTHt2g59T9sGUSQRDmFoBRJYjvPn+6SUKHNPPOt54L6h62hdYdEWaFuaZ2gaacxrqV9VJZX5JNPruuA8oSypKCjPyXVp1EbIMkpTOg7tB7gTDCt3nEtMAAAAAElFTkSuQmCC");background:linear-gradient(180deg,transparent 9%,rgba(0,0,0,.8));height:110px;padding-top:18px}.ezplayer-mobile.ezplayer-fullscreen .ezplayer-footer-left,.ezplayer-mobile.ezplayer-fullscreen .ezplayer-header-left{padding-left:50px}.ezplayer-mobile.ezplayer-fullscreen .ezplayer-footer-left .ezplayer-control,.ezplayer-mobile.ezplayer-fullscreen .ezplayer-header-left .ezplayer-control{margin-right:30px}.ezplayer-mobile.ezplayer-fullscreen .ezplayer-footer-right,.ezplayer-mobile.ezplayer-fullscreen .ezplayer-header-right{padding-right:50px}.ezplayer-mobile.ezplayer-fullscreen .ezplayer-footer-right .ezplayer-control,.ezplayer-mobile.ezplayer-fullscreen .ezplayer-header-right .ezplayer-control{margin-left:30px}.ezplayer-fullscreen:not(.ezplayer-mobile) .ezplayer-footer-left .ezplayer-control,.ezplayer-fullscreen:not(.ezplayer-mobile) .ezplayer-header-left .ezplayer-control{margin-right:26px}.ezplayer-fullscreen:not(.ezplayer-mobile) .ezplayer-footer-right .ezplayer-control,.ezplayer-fullscreen:not(.ezplayer-mobile) .ezplayer-header-right .ezplayer-control{margin-left:26px}
4
- .ezplayer-content{align-items:center;justify-content:center}.ezplayer-content,.ezplayer-content-wrapper{box-sizing:border-box;display:flex;flex:1 1 auto;height:100%;margin:0;outline:none;overflow:hidden;padding:0;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:0}.ezplayer-content-wrapper{background-color:#000}.ezplayer-content-video{align-items:center;box-sizing:border-box;display:flex;flex:1 1 auto;height:100%;justify-content:center;margin:0;outline:none;padding:0;width:100%}
4
+ .ezplayer-content{align-items:center;justify-content:center}.ezplayer-content,.ezplayer-content-wrapper{box-sizing:border-box;display:flex;flex:1 1 auto;height:100%;margin:0;outline:none;overflow:hidden;padding:0;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:0}.ezplayer-content-wrapper{background-color:#000}.ezplayer-content-video{align-items:center;box-sizing:border-box;display:flex;flex:1 1 auto;height:100%;justify-content:center;margin:0;outline:none;padding:0;position:absolute!important;width:100%}
5
5
  .ezplayer-mobile-extend{background-color:#639;background-color:var(--ezplayer-mobile-extend-bg-color,#f5f7fa);color:var(--ezplayer-mobile-extend-default-color,#2c2c2c);display:flex;flex-direction:column}.ezplayer-mobile-extend-controls{background-color:#639;display:flex;height:66px;justify-content:space-around}.ezplayer-mobile-extend-controls .ezplayer-control{width:75px}.ezplayer-mobile-extend-control-panel{align-items:center;display:flex;flex-direction:column;min-height:390px}.ezplayer-mobile-extend-control-top{align-items:center;display:flex;height:36px;justify-content:space-between;padding-top:10px}.ezplayer-mobile-extend-control-top-left{display:inline-flex;padding-left:15px}.ezplayer-mobile-extend-control-top-right{display:inline-flex;justify-content:flex-end;padding-right:15px}.ezplayer-mobile-extend-control-content{display:flex;flex:1 1 auto;flex-direction:column;width:100%}
6
6
  .ezplayer-rec-footer{background-color:#000;box-sizing:border-box;display:flex;flex-direction:row;height:36px;position:relative}.ezplayer-rec-footer-time-line{display:flex;flex:1 1 auto;height:36px}.ezplayer-rec-footer-right{align-items:center;display:flex;flex:0 0 auto;flex-direction:row;height:36px}.ezplayer-rec-footer-date-picker{align-items:center;display:flex;height:36px;padding-left:8px}.ezplayer-rec-footer-date-picker .ezplayer-icon-date{font-size:20px;margin-top:-5px}.ezplayer-rec-footer-time-picker{align-items:center;display:flex;height:36px;padding-left:8px}.ezplayer-rec-footer-time-picker .ezplayer-icon-time{font-size:20px;margin-top:-5px}.ezplayer-rec-footer-btn:last-child{padding-right:20px}
7
7
  .epicker-body-noscroll{overflow:hidden;touch-action:none}.epicker{box-shadow:0 9px 28px 8px #0000000d;display:none;margin:0;opacity:0;padding:0;position:absolute;transition:opacity .3s ease;vertical-align:top;z-index:1000}.epicker,.epicker-body{box-sizing:border-box;flex-direction:column}.epicker-body{display:flex}.epicker.epicker-mobile .epicker-mask{background:#0000004d;bottom:0;box-sizing:border-box;height:100%;left:0;position:fixed;right:0;top:0;width:100%;z-index:9998}.epicker.epicker-mobile .epicker-body{align-items:center;bottom:0;left:0;position:fixed;right:0;z-index:9999}
package/dist/style.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.2-beta.2
3
- * Copyright (c) 2026-08-12 04:37:54 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.2-beta.4
3
+ * Copyright (c) 2026-08-16 15:20:04 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  require("./style.css");