@ezuikit/player-theme 3.1.4-beta.2 → 3.1.5-beta.1

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/constant.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.4-beta.2
3
- * Copyright (c) 2026-08-27 19:42:35 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.5-beta.1
3
+ * Copyright (c) 2026-09-03 20:27:16 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  /**
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.4-beta.2
3
- * Copyright (c) 2026-08-27 19:42:35 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.5-beta.1
3
+ * Copyright (c) 2026-09-03 20:27:16 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  'use strict';
@@ -2142,11 +2142,10 @@ var Provider = /*#__PURE__*/ function() {
2142
2142
  return item.element === element;
2143
2143
  });
2144
2144
  if (index >= 0) {
2145
- if (!this.fullscreens[index].onChange) {
2146
- this.fullscreens[index].onChange = [];
2147
- this.fullscreens[index].onChange.push(onChange);
2148
- } else {
2149
- this.fullscreens[index].onChange.push(onChange);
2145
+ var target = this.fullscreens[index];
2146
+ target.onChange = Array.isArray(target.onChange) ? target.onChange : [];
2147
+ if (!target.onChange.includes(onChange)) {
2148
+ target.onChange.push(onChange);
2150
2149
  }
2151
2150
  } else {
2152
2151
  this.fullscreens.push({
@@ -4774,7 +4773,7 @@ function debounce(func, wait) {
4774
4773
  theme.emit(EVENTS.control.dateChange, date);
4775
4774
  });
4776
4775
  theme.controls.dateControl.on(EVENTS.control.dateDestroy, function() {
4777
- theme.emit(EVENTS.control.recDestroy);
4776
+ theme.emit(EVENTS.control.dateDestroy);
4778
4777
  });
4779
4778
  }
4780
4779
  // 时间控件
@@ -5576,7 +5575,7 @@ function _filterLeftRightControls(btnList) {
5576
5575
  2,
5577
5576
  null
5578
5577
  ];
5579
- theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
5578
+ theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
5580
5579
  return [
5581
5580
  2,
5582
5581
  null
@@ -5588,7 +5587,7 @@ function _filterLeftRightControls(btnList) {
5588
5587
  2,
5589
5588
  null
5590
5589
  ];
5591
- theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
5590
+ theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
5592
5591
  return [
5593
5592
  2,
5594
5593
  null
@@ -5913,32 +5912,29 @@ function interactiveHF($container, second, callback) {
5913
5912
  if (Utils.isMobile && _touchStart) {
5914
5913
  var eventName = "click";
5915
5914
  $container.removeEventListener(eventName, _touchStart);
5916
- if (_$footer && _setTimeoutShow) {
5915
+ if (_$footer && _headerFooterTouchStart) {
5917
5916
  _$footer.removeEventListener(eventName, _headerFooterTouchStart);
5918
5917
  }
5919
- if (_$header && _setTimeoutShow) {
5918
+ if (_$header && _headerFooterTouchStart) {
5920
5919
  _$header.removeEventListener(eventName, _headerFooterTouchStart);
5921
5920
  }
5922
5921
  }
5923
- if (_setTimeoutShow) {
5922
+ if (_hide || _setTimeoutShow) {
5924
5923
  var eventName1 = window.PointerEvent ? "pointerdown" : "click";
5925
5924
  $container.removeEventListener(eventName1, _setTimeoutShow);
5926
5925
  $container.removeEventListener('mousemove', _setTimeoutShow); // 不要被 header 和 footer 冒泡过来
5927
5926
  $container.removeEventListener('mouseleave', _hide);
5928
- if (_$footer && _clearTimeout) {
5927
+ if (_$footer && _headerFooterMousemove) {
5929
5928
  var _$footer_removeEventListener, _$footer_removeEventListener1;
5930
5929
  _$footer == null ? void 0 : (_$footer_removeEventListener = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener.call(_$footer, eventName1, _headerFooterMousemove);
5931
5930
  _$footer == null ? void 0 : (_$footer_removeEventListener1 = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener1.call(_$footer, "mousemove", _headerFooterMousemove);
5932
5931
  }
5933
- if (_$header && _clearTimeout) {
5932
+ if (_$header && _headerFooterMousemove) {
5934
5933
  var _$header_removeEventListener, _$header_removeEventListener1;
5935
5934
  _$header == null ? void 0 : (_$header_removeEventListener = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener.call(_$header, eventName1, _headerFooterMousemove);
5936
5935
  _$header == null ? void 0 : (_$header_removeEventListener1 = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener1.call(_$header, "mousemove", _headerFooterMousemove);
5937
5936
  }
5938
5937
  }
5939
- if (_hide) {
5940
- $container.removeEventListener('mouseleave', _hide);
5941
- }
5942
5938
  _touchStart = null;
5943
5939
  _setTimeoutShow = null;
5944
5940
  _hide = null;
@@ -11435,7 +11431,6 @@ var THEME_DEFAULT_OPTIONS = {
11435
11431
  * theme.on(Theme.EVENTS.loading, (loading: boolean) => {})
11436
11432
  * ```
11437
11433
  */ function set(loading) {
11438
- this._loading = loading;
11439
11434
  if (loading) {
11440
11435
  var _this__loadingControl;
11441
11436
  (_this__loadingControl = this._loadingControl) == null ? void 0 : _this__loadingControl.show();
@@ -11444,6 +11439,7 @@ var THEME_DEFAULT_OPTIONS = {
11444
11439
  (_this__loadingControl1 = this._loadingControl) == null ? void 0 : _this__loadingControl1.hide();
11445
11440
  }
11446
11441
  if (this._loading !== loading) {
11442
+ this._loading = loading;
11447
11443
  this.emit(EVENTS.loading, loading);
11448
11444
  }
11449
11445
  }
@@ -11740,7 +11736,9 @@ var THEME_DEFAULT_OPTIONS = {
11740
11736
  },
11741
11737
  {
11742
11738
  key: "isEzopen",
11743
- get: function get() {
11739
+ get: /**
11740
+ * 私有流地址
11741
+ */ function get() {
11744
11742
  // 私有流地址
11745
11743
  return /^ezopen:\/\//.test(this._url);
11746
11744
  }
@@ -11751,21 +11749,26 @@ var THEME_DEFAULT_OPTIONS = {
11751
11749
  * 判断播放地址是萤石的播放地址
11752
11750
  * @since 3.1.2
11753
11751
  */ function get() {
11754
- var path = this._url.split('?')[0];
11755
- var queryStr = this._url.split('?')[1];
11756
- var lastPath = path.split('/')[path.split('/').length - 1];
11757
- // ezopen://open.ys7.com/BC7799091/1.rec
11758
- // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
11759
- // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
11760
- // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
11761
- // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
11762
- if (// 私有流地址
11763
- /^ezopen:\/\//.test(path) || // 标准流地址
11764
- path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
11765
- utilsTools.isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
11766
- return true;
11752
+ try {
11753
+ var _this__url_split, _this__url_split1, _path_split;
11754
+ var path = (_this__url_split = this._url.split('?')) == null ? void 0 : _this__url_split[0];
11755
+ var queryStr = (_this__url_split1 = this._url.split('?')) == null ? void 0 : _this__url_split1[1];
11756
+ var lastPath = (_path_split = path.split('/')) == null ? void 0 : _path_split[path.split('/').length - 1];
11757
+ // ezopen://open.ys7.com/BC7799091/1.rec
11758
+ // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
11759
+ // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
11760
+ // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
11761
+ // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
11762
+ if (// 私有流地址
11763
+ /^ezopen:\/\//.test(path) || // 标准流地址
11764
+ path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
11765
+ utilsTools.isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
11766
+ return true;
11767
+ }
11768
+ return false;
11769
+ } catch (error) {
11770
+ return false;
11767
11771
  }
11768
- return false;
11769
11772
  }
11770
11773
  }
11771
11774
  ]);
@@ -11777,7 +11780,7 @@ var THEME_DEFAULT_OPTIONS = {
11777
11780
  zh: zh,
11778
11781
  en: en
11779
11782
  };
11780
- /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.4-beta.2';
11783
+ /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.5-beta.1';
11781
11784
 
11782
11785
  exports.Control = Control;
11783
11786
  exports.EVENTS = EVENTS;
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.4-beta.2
3
- * Copyright (c) 2026-08-27 19:42:35 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.5-beta.1
3
+ * Copyright (c) 2026-09-03 20:27:16 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  import EventEmitter from 'eventemitter3';
@@ -2140,11 +2140,10 @@ var Provider = /*#__PURE__*/ function() {
2140
2140
  return item.element === element;
2141
2141
  });
2142
2142
  if (index >= 0) {
2143
- if (!this.fullscreens[index].onChange) {
2144
- this.fullscreens[index].onChange = [];
2145
- this.fullscreens[index].onChange.push(onChange);
2146
- } else {
2147
- this.fullscreens[index].onChange.push(onChange);
2143
+ var target = this.fullscreens[index];
2144
+ target.onChange = Array.isArray(target.onChange) ? target.onChange : [];
2145
+ if (!target.onChange.includes(onChange)) {
2146
+ target.onChange.push(onChange);
2148
2147
  }
2149
2148
  } else {
2150
2149
  this.fullscreens.push({
@@ -4772,7 +4771,7 @@ function debounce(func, wait) {
4772
4771
  theme.emit(EVENTS.control.dateChange, date);
4773
4772
  });
4774
4773
  theme.controls.dateControl.on(EVENTS.control.dateDestroy, function() {
4775
- theme.emit(EVENTS.control.recDestroy);
4774
+ theme.emit(EVENTS.control.dateDestroy);
4776
4775
  });
4777
4776
  }
4778
4777
  // 时间控件
@@ -5574,7 +5573,7 @@ function _filterLeftRightControls(btnList) {
5574
5573
  2,
5575
5574
  null
5576
5575
  ];
5577
- theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
5576
+ theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
5578
5577
  return [
5579
5578
  2,
5580
5579
  null
@@ -5586,7 +5585,7 @@ function _filterLeftRightControls(btnList) {
5586
5585
  2,
5587
5586
  null
5588
5587
  ];
5589
- theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
5588
+ theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
5590
5589
  return [
5591
5590
  2,
5592
5591
  null
@@ -5911,32 +5910,29 @@ function interactiveHF($container, second, callback) {
5911
5910
  if (Utils.isMobile && _touchStart) {
5912
5911
  var eventName = "click";
5913
5912
  $container.removeEventListener(eventName, _touchStart);
5914
- if (_$footer && _setTimeoutShow) {
5913
+ if (_$footer && _headerFooterTouchStart) {
5915
5914
  _$footer.removeEventListener(eventName, _headerFooterTouchStart);
5916
5915
  }
5917
- if (_$header && _setTimeoutShow) {
5916
+ if (_$header && _headerFooterTouchStart) {
5918
5917
  _$header.removeEventListener(eventName, _headerFooterTouchStart);
5919
5918
  }
5920
5919
  }
5921
- if (_setTimeoutShow) {
5920
+ if (_hide || _setTimeoutShow) {
5922
5921
  var eventName1 = window.PointerEvent ? "pointerdown" : "click";
5923
5922
  $container.removeEventListener(eventName1, _setTimeoutShow);
5924
5923
  $container.removeEventListener('mousemove', _setTimeoutShow); // 不要被 header 和 footer 冒泡过来
5925
5924
  $container.removeEventListener('mouseleave', _hide);
5926
- if (_$footer && _clearTimeout) {
5925
+ if (_$footer && _headerFooterMousemove) {
5927
5926
  var _$footer_removeEventListener, _$footer_removeEventListener1;
5928
5927
  _$footer == null ? void 0 : (_$footer_removeEventListener = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener.call(_$footer, eventName1, _headerFooterMousemove);
5929
5928
  _$footer == null ? void 0 : (_$footer_removeEventListener1 = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener1.call(_$footer, "mousemove", _headerFooterMousemove);
5930
5929
  }
5931
- if (_$header && _clearTimeout) {
5930
+ if (_$header && _headerFooterMousemove) {
5932
5931
  var _$header_removeEventListener, _$header_removeEventListener1;
5933
5932
  _$header == null ? void 0 : (_$header_removeEventListener = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener.call(_$header, eventName1, _headerFooterMousemove);
5934
5933
  _$header == null ? void 0 : (_$header_removeEventListener1 = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener1.call(_$header, "mousemove", _headerFooterMousemove);
5935
5934
  }
5936
5935
  }
5937
- if (_hide) {
5938
- $container.removeEventListener('mouseleave', _hide);
5939
- }
5940
5936
  _touchStart = null;
5941
5937
  _setTimeoutShow = null;
5942
5938
  _hide = null;
@@ -11433,7 +11429,6 @@ var THEME_DEFAULT_OPTIONS = {
11433
11429
  * theme.on(Theme.EVENTS.loading, (loading: boolean) => {})
11434
11430
  * ```
11435
11431
  */ function set(loading) {
11436
- this._loading = loading;
11437
11432
  if (loading) {
11438
11433
  var _this__loadingControl;
11439
11434
  (_this__loadingControl = this._loadingControl) == null ? void 0 : _this__loadingControl.show();
@@ -11442,6 +11437,7 @@ var THEME_DEFAULT_OPTIONS = {
11442
11437
  (_this__loadingControl1 = this._loadingControl) == null ? void 0 : _this__loadingControl1.hide();
11443
11438
  }
11444
11439
  if (this._loading !== loading) {
11440
+ this._loading = loading;
11445
11441
  this.emit(EVENTS.loading, loading);
11446
11442
  }
11447
11443
  }
@@ -11738,7 +11734,9 @@ var THEME_DEFAULT_OPTIONS = {
11738
11734
  },
11739
11735
  {
11740
11736
  key: "isEzopen",
11741
- get: function get() {
11737
+ get: /**
11738
+ * 私有流地址
11739
+ */ function get() {
11742
11740
  // 私有流地址
11743
11741
  return /^ezopen:\/\//.test(this._url);
11744
11742
  }
@@ -11749,21 +11747,26 @@ var THEME_DEFAULT_OPTIONS = {
11749
11747
  * 判断播放地址是萤石的播放地址
11750
11748
  * @since 3.1.2
11751
11749
  */ function get() {
11752
- var path = this._url.split('?')[0];
11753
- var queryStr = this._url.split('?')[1];
11754
- var lastPath = path.split('/')[path.split('/').length - 1];
11755
- // ezopen://open.ys7.com/BC7799091/1.rec
11756
- // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
11757
- // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
11758
- // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
11759
- // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
11760
- if (// 私有流地址
11761
- /^ezopen:\/\//.test(path) || // 标准流地址
11762
- path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
11763
- isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
11764
- return true;
11750
+ try {
11751
+ var _this__url_split, _this__url_split1, _path_split;
11752
+ var path = (_this__url_split = this._url.split('?')) == null ? void 0 : _this__url_split[0];
11753
+ var queryStr = (_this__url_split1 = this._url.split('?')) == null ? void 0 : _this__url_split1[1];
11754
+ var lastPath = (_path_split = path.split('/')) == null ? void 0 : _path_split[path.split('/').length - 1];
11755
+ // ezopen://open.ys7.com/BC7799091/1.rec
11756
+ // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
11757
+ // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
11758
+ // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
11759
+ // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
11760
+ if (// 私有流地址
11761
+ /^ezopen:\/\//.test(path) || // 标准流地址
11762
+ path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
11763
+ isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
11764
+ return true;
11765
+ }
11766
+ return false;
11767
+ } catch (error) {
11768
+ return false;
11765
11769
  }
11766
- return false;
11767
11770
  }
11768
11771
  }
11769
11772
  ]);
@@ -11775,6 +11778,6 @@ var THEME_DEFAULT_OPTIONS = {
11775
11778
  zh: zh,
11776
11779
  en: en
11777
11780
  };
11778
- /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.4-beta.2';
11781
+ /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.5-beta.1';
11779
11782
 
11780
11783
  export { Control, EVENTS, Fullscreen, Loading, Message, Play, Poster, Rec, Theme, Utils, Volume };
package/dist/index.umd.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.4-beta.2
3
- * Copyright (c) 2026-08-27 19:42:35 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.5-beta.1
3
+ * Copyright (c) 2026-09-03 20:27:16 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  (function (global, factory) {
@@ -2406,9 +2406,9 @@
2406
2406
  var dist$3 = {};
2407
2407
 
2408
2408
  /*
2409
- * @ezuikit/utils-tools v2.0.6
2409
+ * @ezuikit/utils-tools v2.0.7
2410
2410
  * tools utils
2411
- * Copyright (c) 2026-08-02 Ezviz-OpenBiz
2411
+ * Copyright (c) 2026-09-02 Ezviz-OpenBiz
2412
2412
  * Released under the MIT License.
2413
2413
  */
2414
2414
 
@@ -2417,7 +2417,7 @@
2417
2417
  function requireDist$3 () {
2418
2418
  if (hasRequiredDist$3) return dist$3;
2419
2419
  hasRequiredDist$3 = 1;
2420
- function isHttp(url){return /^http[s]?:\/\//.test(url)}var getQuery=function(url){var query=url.split("?")[1],obj={};if(query)for(var vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");obj[pair[0]]=decodeURIComponent(pair[1]);}return obj};function parseEzopenUrl(url){var obj={};if(/^ezopen:\/\//.test(url)){if(url.includes("@")){var endIndex=url.indexOf("@"),startIndex=url.indexOf("//");obj.validateCode=url.substring(startIndex+2,endIndex),url=url.replace(obj.validateCode+"@","");}obj.protocol=url.split("//")[0],obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url;var pathnames=obj.pathname.split("/"),lastPath=pathnames[2].split(".");return obj.deviceSerial=pathnames[1],obj.channelNo=lastPath[0],obj.type=lastPath[lastPath.length-1],"live"===obj.type&&(obj.definition=lastPath.length>2?lastPath[1]:"sd"),"rec"===obj.type&&pathnames[2]&&(obj.recType=pathnames[2].includes(".cloud.")?"cloud":""),obj.searchParams=getQuery(url),obj}if(isHttp(url))try{var u=new URL(url),file=u.pathname.split("/").pop();if(file){var m=file.match(/^([^_]+)_(\d+)_(\d+)\./);if(m){var deviceSerial=m[1],channelNo=m[2],quality=m[3];return obj.deviceSerial=deviceSerial,obj.channelNo=channelNo,u.searchParams.get("code")&&(obj.validateCode=u.searchParams.get("code")),obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.protocol=url.split("//")[0],obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url,obj.type="live",(url.includes("rec=local")||url.includes("rec=cloud"))&&(obj.type="rec",url.includes("rec=cloud")?obj.recType="cloud":obj.recType=""),"live"===obj.type&&(obj.definition="1"===quality?"hd":"sd"),obj.searchParams=getQuery(url),obj}}}catch(e){}return {}}var codec={h264:1,h265:2,h266:4,vp8:8,vp9:16,av1:32},getQueryVC=function(CODECS){return CODECS.reduce((function(acc,key){return key=key.toLowerCase(),acc+(codec[key]||0)}),0)};function _array_like_to_array(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _instanceof(left,right){return null!=right&&"undefined"!=typeof Symbol&&right[Symbol.hasInstance]?!!right[Symbol.hasInstance](left):left instanceof right}function _create_for_of_iterator_helper_loose(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(it)return (it=it.call(o)).next.bind(it);if(Array.isArray(o)||(it=function(o,minLen){if(o){if("string"==typeof o)return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return "Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_array_like_to_array(o,minLen):void 0}}(o))||allowArrayLike){it&&(o=it);var i=0;return function(){return i>=o.length?{done:true}:{done:false,value:o[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var DateTime=function(){function DateTime(){}return DateTime.normalizeUnit=function(unit){return "year"===unit||"y"===unit||"年"===unit?"year":"month"===unit||"M"===unit||"月"===unit?"month":"day"===unit||"d"===unit||"日"===unit?"day":"hour"===unit||"h"===unit||"时"===unit?"hour":"minute"===unit||"m"===unit||"分"===unit?"minute":"second"},DateTime.daysInMonth=function(year,month){return new Date(year,month+1,0).getDate()},DateTime.shiftMonth=function(baseDate,months){var result=new Date(baseDate.getTime()),currentDate=result.getDate();result.setDate(1),result.setMonth(result.getMonth()+months);var maxDate=DateTime.daysInMonth(result.getFullYear(),result.getMonth());return result.setDate(Math.min(currentDate,maxDate)),result},DateTime.add=function(input,value,unit){if(void 0===unit&&(unit="day"),!Number.isFinite(value))throw new Error("Invalid value");var baseDate=DateTime.toDate(input),normalizedUnit=DateTime.normalizeUnit(unit);if("year"===normalizedUnit)return DateTime.shiftMonth(baseDate,12*value);if("month"===normalizedUnit)return DateTime.shiftMonth(baseDate,value);var result=new Date(baseDate.getTime());return result.setTime(result.getTime()+value*{day:864e5,hour:36e5,minute:6e4,second:1e3}[normalizedUnit]),result},DateTime.subtract=function(input,value,unit){return void 0===unit&&(unit="day"),DateTime.add(input,-value,unit)},DateTime.fillZero=function(num,len){return void 0===len&&(len=2),num.toString().padStart(len,"0")},DateTime.format=function(input,format){var date;if(_instanceof(input,Date))date=input;else {if("number"!=typeof input&&"string"!=typeof input)throw new Error("Invalid date input");date=DateTime.toDate(input+"");}for(var _step,result=format,_iterator=_create_for_of_iterator_helper_loose([[/(yyyy|YYYY)/g,function(){return DateTime.fillZero(date.getFullYear(),4)}],[/(yy|YY)/g,function(){return DateTime.fillZero(date.getFullYear()%100,2)}],[/(MM)/g,function(){return DateTime.fillZero(date.getMonth()+1,2)}],[/(M)/g,function(){return (date.getMonth()+1).toString()}],[/(dd|DD)/g,function(){return DateTime.fillZero(date.getDate(),2)}],[/(d|D)/g,function(){return date.getDate().toString()}],[/(HH|hh)/g,function(){return DateTime.fillZero(date.getHours(),2)}],[/(H|h)/g,function(){return date.getHours().toString()}],[/(mm)/g,function(){return DateTime.fillZero(date.getMinutes(),2)}],[/(m)/g,function(){return date.getMinutes().toString()}],[/(ss|SS)/g,function(){return DateTime.fillZero(date.getSeconds(),2)}],[/(s|S)/g,function(){return date.getSeconds().toString()}],[/(fff)/g,function(){return DateTime.fillZero(date.getMilliseconds(),3)}]]);!(_step=_iterator()).done;){var _step_value=_step.value,regexp=_step_value[0],fn=_step_value[1];result=result.replace(regexp,fn);}return result},DateTime.toDate=function(str){if(_instanceof(str,Date))return str;str=(str+"").trim().replace(/\/|\./gi,"-"),/^\d{4}$/.test(str)&&(str+="-01"),/^\d{4}-\d{2}$/.test(str)&&(str+="-01");try{return /^\d{4}-\d{2}-\d{2}$/.test(str)?new Date(+str.slice(0,4),+str.slice(5,7)-1,+str.slice(8,10),0,0,0):/^\d{8}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),0,0,0)):/^\d{14}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),+str.slice(8,10),+str.slice(10,12),+str.slice(12,14))):/^\d{13}$/.test(str)?new Date(Number(str)):/^\d{10}$/.test(str)?new Date(1e3*Number(str)):new Date(str)}catch(error){throw new Error("Invalid date string")}},DateTime.diff=function(date1,date2,type){ void 0===type&&(type="second");var d1=DateTime.toDate(date1),d2=DateTime.toDate(date2);return "second"===type?Math.floor((d1.getTime()-d2.getTime())/1e3):"minute"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60):"hour"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60):"day"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60/24):Math.abs(d1.getTime()-d2.getTime())},DateTime}();dist$3.DateTime=DateTime,dist$3.addVc=function(url,codecs){ void 0===codecs&&(codecs=["h264"]);var vc=getQueryVC(codecs||["h264"]),host=url.split("?")[0],query=url.split("?")[1];return query=(query||"").split("&").filter((function(item){return !/^vc=\d?/.test(item)})).join("&"),host+"?"+(query+=(query?"&":"")+"vc="+vc)},dist$3.getQuery=getQuery,dist$3.getQueryVC=getQueryVC,dist$3.getStaticPath=function(path,base){ void 0===base&&(base="");var protocolReg=/^(https?:\/\/|^\/\/)/;if(""===path||void 0===path)return "";if(protocolReg.test(path))return path;path=path.replace(/\/+/g,"/"),base=protocolReg.test(base||"")?base:window.location.href;try{return new URL(path,base).href}catch(error){return path}},dist$3.isEmpty=function(param){return void 0===param||""===param||null===param},dist$3.isHttp=isHttp,dist$3.isMobile=function(agent){var _navigator,_navigator1,_navigator2,_window,_navigator_maxTouchPoints;return /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone|Opera Mini)/i.test(null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)||/Macintosh/i.test(agent||(null==(_navigator1=navigator)?void 0:_navigator1.userAgent))&&(null!=(_navigator_maxTouchPoints=null==(_navigator2=navigator)?void 0:_navigator2.maxTouchPoints)?_navigator_maxTouchPoints:0)>1||!!(null==(_window=window)?void 0:_window.__IS_MOBILE_SIMULATOR__)},dist$3.isRealMobile=function(agent){var _navigator,_ref,ua=(null!=(_ref=null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)?_ref:"").toLowerCase();if(/ipad|tablet|playbook|silk|android(?!.*mobile)/i.test(ua))return false;var hasTouch="ontouchstart"in window||navigator.maxTouchPoints>0;return /android|webos|iphone|ipod|blackberry|iemobile|opera mini/i.test(ua)&&hasTouch},dist$3.objectIsNull=function(obj){try{return "{}"===JSON.stringify(obj)}catch(error){return false}},dist$3.parseEzopenUrl=parseEzopenUrl,dist$3.pick=function(obj,keys){return Object.entries(obj).reduce((function(acc,param){var key=param[0],value=param[1];return keys.includes(key)&&(acc[key]=value),acc}),{})},dist$3.switchEzopenUrl=function(url,options){var _ref=null!=options?options:{},type=_ref.type,recType=_ref.recType,search=_ref.search,definition=_ref.definition,channelNo=_ref.channelNo,deviceSerial=_ref.deviceSerial,validateCode=_ref.validateCode,obj=parseEzopenUrl(url);if(search){var ns=Object.assign({},obj.searchParams,getQuery("?"+search.replace("?","")));search=Object.entries(ns).reduce((function(acc,param){var key=param[0],value=param[1];return ""===value?acc:acc+=key+"="+encodeURIComponent(value)+"&"}),"?").replace(/&$/,"");}else search=obj.search;return type=type||obj.type,recType=null!=recType?recType:obj.recType,definition=null!=definition?definition:obj.definition,channelNo=channelNo||obj.channelNo,deviceSerial=deviceSerial||obj.deviceSerial,validateCode=null!=validateCode?validateCode:obj.validateCode,obj.protocol+"//"+(validateCode?validateCode+"@":"")+obj.hostname+"/"+deviceSerial+"/"+channelNo+("rec"===type&&recType?"."+recType:"")+("live"===type&&"hd"===definition?"."+definition:"")+"."+type+search};
2420
+ function isHttp(url){return /^http[s]?:\/\//.test(url)}var getQuery=function(url){var query=url.split("?")[1],obj={};if(query)for(var vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");obj[pair[0]]=decodeURIComponent(pair[1]);}return obj};function parseEzopenUrl(url){var obj={};if(/^ezopen:\/\//.test(url)){if(url.includes("@")){var endIndex=url.indexOf("@"),startIndex=url.indexOf("//");obj.validateCode=url.substring(startIndex+2,endIndex),url=url.replace(obj.validateCode+"@","");}obj.protocol=url.split("//")[0],obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url;var pathnames=obj.pathname.split("/"),lastPath=pathnames[2].split(".");return obj.deviceSerial=pathnames[1],obj.channelNo=lastPath[0],obj.streamTypeIn=pathnames[2].includes(".hd.")?1:2,obj.type=lastPath[lastPath.length-1],"live"===obj.type&&(obj.definition=lastPath.length>2?lastPath[1]:"sd"),"rec"===obj.type&&pathnames[2]&&(obj.recType=pathnames[2].includes(".cloud.")?"cloud":""),obj.searchParams=getQuery(url),obj}if(isHttp(url))try{var u=new URL(url),file=u.pathname.split("/").pop();if(file&&["live","playback","cloudplayback","download"].includes(file)&&u.search.includes("dev=")&&u.search.includes("stream=")){var deviceSerial=u.searchParams.get("dev"),channelNo=u.searchParams.get("chn")||"1",sessionToken=u.searchParams.get("ssn"),stream=u.searchParams.get("stream"),streamTypeIn=Number(stream);if("https:"!==u.protocol||!deviceSerial||!channelNo||!sessionToken)return {};var searchParams={};u.searchParams.forEach((function(value,key){searchParams[key]=value;})),obj.protocol=u.protocol,obj.search=u.search,obj.searchParams=searchParams,obj.pathname=u.pathname,obj.origin=u.origin,obj.href=url,obj.hostname=u.host,obj.deviceSerial=deviceSerial,obj.channelNo=channelNo,obj.streamTypeIn=streamTypeIn;var validateCode=u.searchParams.get("code");return validateCode&&(obj.validateCode=validateCode),"live"===file?(obj.type="live",obj.definition=1===streamTypeIn?"hd":"sd"):"playback"===file?(obj.type="rec",obj.recType=""):"cloudplayback"===file?(obj.type="rec",obj.recType="cloud"):obj.type="download",obj}if(file){var m=file.match(/^([^_]+)_(\d+)_(\d+)\./);if(m){var deviceSerial1=m[1],channelNo1=m[2],quality=m[3];return obj.deviceSerial=deviceSerial1,obj.channelNo=channelNo1,obj.streamTypeIn=+quality,u.searchParams.get("code")&&(obj.validateCode=u.searchParams.get("code")),obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.protocol=url.split("//")[0],obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url,obj.type="live",(url.includes("rec=local")||url.includes("rec=cloud"))&&(obj.type="rec",url.includes("rec=cloud")?obj.recType="cloud":obj.recType=""),"live"===obj.type&&(obj.definition="1"===quality?"hd":"sd"),obj.searchParams=getQuery(url),obj}}}catch(e){}return {}}var codec={h264:1,h265:2,h266:4,vp8:8,vp9:16,av1:32},getQueryVC=function(CODECS){return CODECS.reduce((function(acc,key){return key=key.toLowerCase(),acc+(codec[key]||0)}),0)};function _array_like_to_array(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _instanceof(left,right){return null!=right&&"undefined"!=typeof Symbol&&right[Symbol.hasInstance]?!!right[Symbol.hasInstance](left):left instanceof right}function _create_for_of_iterator_helper_loose(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(it)return (it=it.call(o)).next.bind(it);if(Array.isArray(o)||(it=function(o,minLen){if(o){if("string"==typeof o)return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return "Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_array_like_to_array(o,minLen):void 0}}(o))||allowArrayLike){it&&(o=it);var i=0;return function(){return i>=o.length?{done:true}:{done:false,value:o[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var DateTime=function(){function DateTime(){}return DateTime.normalizeUnit=function(unit){return "year"===unit||"y"===unit||"年"===unit?"year":"month"===unit||"M"===unit||"月"===unit?"month":"day"===unit||"d"===unit||"日"===unit?"day":"hour"===unit||"h"===unit||"时"===unit?"hour":"minute"===unit||"m"===unit||"分"===unit?"minute":"second"},DateTime.daysInMonth=function(year,month){return new Date(year,month+1,0).getDate()},DateTime.shiftMonth=function(baseDate,months){var result=new Date(baseDate.getTime()),currentDate=result.getDate();result.setDate(1),result.setMonth(result.getMonth()+months);var maxDate=DateTime.daysInMonth(result.getFullYear(),result.getMonth());return result.setDate(Math.min(currentDate,maxDate)),result},DateTime.add=function(input,value,unit){if(void 0===unit&&(unit="day"),!Number.isFinite(value))throw new Error("Invalid value");var baseDate=DateTime.toDate(input),normalizedUnit=DateTime.normalizeUnit(unit);if("year"===normalizedUnit)return DateTime.shiftMonth(baseDate,12*value);if("month"===normalizedUnit)return DateTime.shiftMonth(baseDate,value);var result=new Date(baseDate.getTime());return result.setTime(result.getTime()+value*{day:864e5,hour:36e5,minute:6e4,second:1e3}[normalizedUnit]),result},DateTime.subtract=function(input,value,unit){return void 0===unit&&(unit="day"),DateTime.add(input,-value,unit)},DateTime.fillZero=function(num,len){return void 0===len&&(len=2),num.toString().padStart(len,"0")},DateTime.format=function(input,format){var date;if(_instanceof(input,Date))date=input;else {if("number"!=typeof input&&"string"!=typeof input)throw new Error("Invalid date input");date=DateTime.toDate(input+"");}for(var _step,result=format,_iterator=_create_for_of_iterator_helper_loose([[/(yyyy|YYYY)/g,function(){return DateTime.fillZero(date.getFullYear(),4)}],[/(yy|YY)/g,function(){return DateTime.fillZero(date.getFullYear()%100,2)}],[/(MM)/g,function(){return DateTime.fillZero(date.getMonth()+1,2)}],[/(M)/g,function(){return (date.getMonth()+1).toString()}],[/(dd|DD)/g,function(){return DateTime.fillZero(date.getDate(),2)}],[/(d|D)/g,function(){return date.getDate().toString()}],[/(HH|hh)/g,function(){return DateTime.fillZero(date.getHours(),2)}],[/(H|h)/g,function(){return date.getHours().toString()}],[/(mm)/g,function(){return DateTime.fillZero(date.getMinutes(),2)}],[/(m)/g,function(){return date.getMinutes().toString()}],[/(ss|SS)/g,function(){return DateTime.fillZero(date.getSeconds(),2)}],[/(s|S)/g,function(){return date.getSeconds().toString()}],[/(fff)/g,function(){return DateTime.fillZero(date.getMilliseconds(),3)}]]);!(_step=_iterator()).done;){var _step_value=_step.value,regexp=_step_value[0],fn=_step_value[1];result=result.replace(regexp,fn);}return result},DateTime.toDate=function(str){if(_instanceof(str,Date))return str;str=(str+"").trim().replace(/\/|\./gi,"-"),/^\d{4}$/.test(str)&&(str+="-01"),/^\d{4}-\d{2}$/.test(str)&&(str+="-01");try{return /^\d{4}-\d{2}-\d{2}$/.test(str)?new Date(+str.slice(0,4),+str.slice(5,7)-1,+str.slice(8,10),0,0,0):/^\d{8}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),0,0,0)):/^\d{14}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),+str.slice(8,10),+str.slice(10,12),+str.slice(12,14))):/^\d{13}$/.test(str)?new Date(Number(str)):/^\d{10}$/.test(str)?new Date(1e3*Number(str)):new Date(str)}catch(error){throw new Error("Invalid date string")}},DateTime.diff=function(date1,date2,type){ void 0===type&&(type="second");var d1=DateTime.toDate(date1),d2=DateTime.toDate(date2);return "second"===type?Math.floor((d1.getTime()-d2.getTime())/1e3):"minute"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60):"hour"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60):"day"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60/24):Math.abs(d1.getTime()-d2.getTime())},DateTime}();dist$3.DateTime=DateTime,dist$3.addVc=function(url,codecs){ void 0===codecs&&(codecs=["h264"]);var vc=getQueryVC(codecs||["h264"]),host=url.split("?")[0],query=url.split("?")[1];return query=(query||"").split("&").filter((function(item){return !/^vc=\d?/.test(item)})).join("&"),host+"?"+(query+=(query?"&":"")+"vc="+vc)},dist$3.getQuery=getQuery,dist$3.getQueryVC=getQueryVC,dist$3.getStaticPath=function(path,base){ void 0===base&&(base="");var protocolReg=/^(https?:\/\/|^\/\/)/;if(""===path||void 0===path)return "";if(protocolReg.test(path))return path;path=path.replace(/\/+/g,"/"),base=protocolReg.test(base||"")?base:window.location.href;try{return new URL(path,base).href}catch(error){return path}},dist$3.isEmpty=function(param){return void 0===param||""===param||null===param},dist$3.isHttp=isHttp,dist$3.isMobile=function(agent){var _navigator,_navigator1,_navigator2,_window,_navigator_maxTouchPoints;return /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone|Opera Mini)/i.test(null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)||/Macintosh/i.test(agent||(null==(_navigator1=navigator)?void 0:_navigator1.userAgent))&&(null!=(_navigator_maxTouchPoints=null==(_navigator2=navigator)?void 0:_navigator2.maxTouchPoints)?_navigator_maxTouchPoints:0)>1||!!(null==(_window=window)?void 0:_window.__IS_MOBILE_SIMULATOR__)},dist$3.isRealMobile=function(agent){var _navigator,_ref,ua=(null!=(_ref=null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)?_ref:"").toLowerCase();if(/ipad|tablet|playbook|silk|android(?!.*mobile)/i.test(ua))return false;var hasTouch="ontouchstart"in window||navigator.maxTouchPoints>0;return /android|webos|iphone|ipod|blackberry|iemobile|opera mini/i.test(ua)&&hasTouch},dist$3.objectIsNull=function(obj){try{return "{}"===JSON.stringify(obj)}catch(error){return false}},dist$3.parseEzopenUrl=parseEzopenUrl,dist$3.pick=function(obj,keys){return Object.entries(obj).reduce((function(acc,param){var key=param[0],value=param[1];return keys.includes(key)&&(acc[key]=value),acc}),{})},dist$3.switchEzopenUrl=function(url,options){var _ref=null!=options?options:{},type=_ref.type,recType=_ref.recType,search=_ref.search,definition=_ref.definition,channelNo=_ref.channelNo,deviceSerial=_ref.deviceSerial,validateCode=_ref.validateCode,obj=parseEzopenUrl(url);if(search){var ns=Object.assign({},obj.searchParams,getQuery("?"+search.replace("?","")));search=Object.entries(ns).reduce((function(acc,param){var key=param[0],value=param[1];return ""===value?acc:acc+=key+"="+encodeURIComponent(value)+"&"}),"?").replace(/&$/,"");}else search=obj.search;return type=type||obj.type,recType=null!=recType?recType:obj.recType,definition=null!=definition?definition:obj.definition,channelNo=channelNo||obj.channelNo,deviceSerial=deviceSerial||obj.deviceSerial,validateCode=null!=validateCode?validateCode:obj.validateCode,obj.protocol+"//"+(validateCode?validateCode+"@":"")+obj.hostname+"/"+deviceSerial+"/"+channelNo+("rec"===type&&recType?"."+recType:"")+("live"===type&&"hd"===definition?"."+definition:"")+"."+type+search};
2421
2421
  return dist$3;
2422
2422
  }
2423
2423
 
@@ -3588,11 +3588,10 @@
3588
3588
  return item.element === element;
3589
3589
  });
3590
3590
  if (index >= 0) {
3591
- if (!this.fullscreens[index].onChange) {
3592
- this.fullscreens[index].onChange = [];
3593
- this.fullscreens[index].onChange.push(onChange);
3594
- } else {
3595
- this.fullscreens[index].onChange.push(onChange);
3591
+ var target = this.fullscreens[index];
3592
+ target.onChange = Array.isArray(target.onChange) ? target.onChange : [];
3593
+ if (!target.onChange.includes(onChange)) {
3594
+ target.onChange.push(onChange);
3596
3595
  }
3597
3596
  } else {
3598
3597
  this.fullscreens.push({
@@ -6261,7 +6260,7 @@
6261
6260
  theme.emit(EVENTS$2.control.dateChange, date);
6262
6261
  });
6263
6262
  theme.controls.dateControl.on(EVENTS$2.control.dateDestroy, function() {
6264
- theme.emit(EVENTS$2.control.recDestroy);
6263
+ theme.emit(EVENTS$2.control.dateDestroy);
6265
6264
  });
6266
6265
  }
6267
6266
  // 时间控件
@@ -7070,7 +7069,7 @@
7070
7069
  2,
7071
7070
  null
7072
7071
  ];
7073
- theme.emit(EVENTS$2.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
7072
+ theme.emit(EVENTS$2.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
7074
7073
  return [
7075
7074
  2,
7076
7075
  null
@@ -7082,7 +7081,7 @@
7082
7081
  2,
7083
7082
  null
7084
7083
  ];
7085
- theme.emit(EVENTS$2.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
7084
+ theme.emit(EVENTS$2.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
7086
7085
  return [
7087
7086
  2,
7088
7087
  null
@@ -7407,32 +7406,29 @@
7407
7406
  if (Utils.isMobile && _touchStart) {
7408
7407
  var eventName = "click";
7409
7408
  $container.removeEventListener(eventName, _touchStart);
7410
- if (_$footer && _setTimeoutShow) {
7409
+ if (_$footer && _headerFooterTouchStart) {
7411
7410
  _$footer.removeEventListener(eventName, _headerFooterTouchStart);
7412
7411
  }
7413
- if (_$header && _setTimeoutShow) {
7412
+ if (_$header && _headerFooterTouchStart) {
7414
7413
  _$header.removeEventListener(eventName, _headerFooterTouchStart);
7415
7414
  }
7416
7415
  }
7417
- if (_setTimeoutShow) {
7416
+ if (_hide || _setTimeoutShow) {
7418
7417
  var eventName1 = window.PointerEvent ? "pointerdown" : "click";
7419
7418
  $container.removeEventListener(eventName1, _setTimeoutShow);
7420
7419
  $container.removeEventListener('mousemove', _setTimeoutShow); // 不要被 header 和 footer 冒泡过来
7421
7420
  $container.removeEventListener('mouseleave', _hide);
7422
- if (_$footer && _clearTimeout) {
7421
+ if (_$footer && _headerFooterMousemove) {
7423
7422
  var _$footer_removeEventListener, _$footer_removeEventListener1;
7424
7423
  _$footer == null ? void 0 : (_$footer_removeEventListener = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener.call(_$footer, eventName1, _headerFooterMousemove);
7425
7424
  _$footer == null ? void 0 : (_$footer_removeEventListener1 = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener1.call(_$footer, "mousemove", _headerFooterMousemove);
7426
7425
  }
7427
- if (_$header && _clearTimeout) {
7426
+ if (_$header && _headerFooterMousemove) {
7428
7427
  var _$header_removeEventListener, _$header_removeEventListener1;
7429
7428
  _$header == null ? void 0 : (_$header_removeEventListener = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener.call(_$header, eventName1, _headerFooterMousemove);
7430
7429
  _$header == null ? void 0 : (_$header_removeEventListener1 = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener1.call(_$header, "mousemove", _headerFooterMousemove);
7431
7430
  }
7432
7431
  }
7433
- if (_hide) {
7434
- $container.removeEventListener('mouseleave', _hide);
7435
- }
7436
7432
  _touchStart = null;
7437
7433
  _setTimeoutShow = null;
7438
7434
  _hide = null;
@@ -13434,7 +13430,6 @@
13434
13430
  * theme.on(Theme.EVENTS.loading, (loading: boolean) => {})
13435
13431
  * ```
13436
13432
  */ function set(loading) {
13437
- this._loading = loading;
13438
13433
  if (loading) {
13439
13434
  var _this__loadingControl;
13440
13435
  (_this__loadingControl = this._loadingControl) == null ? void 0 : _this__loadingControl.show();
@@ -13443,6 +13438,7 @@
13443
13438
  (_this__loadingControl1 = this._loadingControl) == null ? void 0 : _this__loadingControl1.hide();
13444
13439
  }
13445
13440
  if (this._loading !== loading) {
13441
+ this._loading = loading;
13446
13442
  this.emit(EVENTS$2.loading, loading);
13447
13443
  }
13448
13444
  }
@@ -13739,7 +13735,9 @@
13739
13735
  },
13740
13736
  {
13741
13737
  key: "isEzopen",
13742
- get: function get() {
13738
+ get: /**
13739
+ * 私有流地址
13740
+ */ function get() {
13743
13741
  // 私有流地址
13744
13742
  return /^ezopen:\/\//.test(this._url);
13745
13743
  }
@@ -13750,21 +13748,26 @@
13750
13748
  * 判断播放地址是萤石的播放地址
13751
13749
  * @since 3.1.2
13752
13750
  */ function get() {
13753
- var path = this._url.split('?')[0];
13754
- var queryStr = this._url.split('?')[1];
13755
- var lastPath = path.split('/')[path.split('/').length - 1];
13756
- // ezopen://open.ys7.com/BC7799091/1.rec
13757
- // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
13758
- // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
13759
- // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
13760
- // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
13761
- if (// 私有流地址
13762
- /^ezopen:\/\//.test(path) || // 标准流地址
13763
- path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
13764
- distExports$3.isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
13765
- return true;
13751
+ try {
13752
+ var _this__url_split, _this__url_split1, _path_split;
13753
+ var path = (_this__url_split = this._url.split('?')) == null ? void 0 : _this__url_split[0];
13754
+ var queryStr = (_this__url_split1 = this._url.split('?')) == null ? void 0 : _this__url_split1[1];
13755
+ var lastPath = (_path_split = path.split('/')) == null ? void 0 : _path_split[path.split('/').length - 1];
13756
+ // ezopen://open.ys7.com/BC7799091/1.rec
13757
+ // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
13758
+ // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
13759
+ // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
13760
+ // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
13761
+ if (// 私有流地址
13762
+ /^ezopen:\/\//.test(path) || // 标准流地址
13763
+ path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
13764
+ distExports$3.isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
13765
+ return true;
13766
+ }
13767
+ return false;
13768
+ } catch (error) {
13769
+ return false;
13766
13770
  }
13767
- return false;
13768
13771
  }
13769
13772
  }
13770
13773
  ]);
@@ -13776,7 +13779,7 @@
13776
13779
  zh: zh,
13777
13780
  en: en
13778
13781
  };
13779
- /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.4-beta.2';
13782
+ /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.5-beta.1';
13780
13783
 
13781
13784
  // 不要动这里的代码, 这个出口是为了编译成 umd 规范的文件
13782
13785
 
package/dist/style.css CHANGED
@@ -22,7 +22,7 @@ body.ezplayer-body-mobile-noscroll{background-color:#000!important;height:100vh;
22
22
  .ezplayer-icon{align-items:center;color:inherit;display:inline-flex;font-size:var(--ezplayer-icon-font-size,24px);font-style:normal;line-height:0;text-align:center;text-rendering:optimizeLegibility;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
23
23
  .ezplayer-select-panel{background-color:var(--ezplayer-panel-bg-color,rgba(0,0,0,.7));border-radius:var(--ezplayer-border-radius,8px);color:var(--ezplayer-default-color,#fff);display:flex;flex-direction:column;overflow-x:hidden;overflow-y:auto;position:relative}.ezplayer-select-btn{width:50px}.ezplayer-select-btn span{display:inline-block;font-size:12px;font-size:calc(var(--ezplayer-font-size, 14px) - 2px);line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ezplayer-select-list{align-items:center;display:flex;flex-direction:column;font-size:var(--ezplayer-font-size,14px);list-style:none;margin:0;padding:12px 0!important;width:100%}.ezplayer-select-option{box-sizing:border-box;cursor:pointer;display:inline-flex;height:28px;justify-content:center;line-height:18px;list-style:none;padding:5px 20px!important;transition:color .3s ease;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.ezplayer-select-option span{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ezplayer-select-option:hover{color:var(--ezplayer-active-color)}.ezplayer-select-cancel,.ezplayer-select-close{display:none}.ezplayer-select-cancel{font-size:var(--ezplayer-font-size,14px)}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-panel{background-color:transparent;max-width:400px;padding-bottom:calc(54px + env(safe-area-inset-bottom));width:90%}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-list{align-items:center;background-color:#fff;border-radius:var(--ezplayer-border-radius,8px);display:flex;flex-direction:column;font-size:var(--ezplayer-font-size,14px);max-height:70vh;max-height:calc(90vh - 108px);overflow-x:hidden;overflow-y:auto;padding:20px 0!important}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-cancel,.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-option{align-items:center;box-sizing:border-box;color:#2c2c2c;display:inline-flex;height:36px;justify-content:center;line-height:26px;padding:5px 20px!important}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-option{--webkit-tap-highlight-color:transparent!important}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-option:hover{color:#2c2c2c}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-option:active{background-color:#f8f8f8}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-cancel{background-color:#fff;border-radius:var(--ezplayer-border-radius,8px);display:flex;height:54px;margin-top:8px}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-cancel:active{color:var(--ezplayer-active-color)}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .epicker-body{bottom:0;left:unset;right:0;top:0;width:240px}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-panel{align-items:center;background-color:var(--ezplayer-panel-bg-color,rgba(0,0,0,.7));border-bottom-right-radius:0;border-top-right-radius:0;height:100%;justify-content:center;padding-bottom:env(safe-area-inset-bottom);width:100%}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-list{background-color:transparent;border-radius:0;color:#fff;height:auto;margin:0;max-height:100%;width:100%}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-option,.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-option:hover{color:#fff}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-option:active{background-color:transparent;color:var(--ezplayer-active-color)}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-cancel{display:none}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-close{display:inline-flex;left:10px;position:absolute;top:10px}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-close:active{color:var(--ezplayer-active-color)}
24
24
  .ezplayer-control-fullscreen .ezplayer-icon-exit-fullscreen,.ezplayer-control-global-fullscreen .ezplayer-icon-exit-global-fullscreen{display:none}.ezplayer-fullscreen .ezplayer-icon-exit-fullscreen{display:inline-flex}.ezplayer-fullscreen .ezplayer-icon-fullscreen{display:none}.ezplayer-global-fullscreen .ezplayer-icon-exit-global-fullscreen{display:inline-flex}.ezplayer-global-fullscreen .ezplayer-icon-global-fullscreen{display:none}
25
- .ezplayer-loading{background-color:rgba(0,0,0,.5);bottom:0;color:#fff;display:none;font-size:14px;height:100%;left:0;position:absolute;right:0;top:0;transition:transform .3s cubic-bezier(.78,.14,.15,.86);vertical-align:middle;width:100%;z-index:4}.ezplayer-loading-dot{display:inline-block;font-size:25px;height:25px;position:relative;width:25px}.ezplayer-loading-dot-item{background-color:#fff;border-radius:2px;display:block;height:10px;position:absolute;transform-origin:50% 50%;width:10px}.ezplayer-loading-dot-item:first-child{animation:animationShape1 2s linear 0s infinite normal;left:0;opacity:1;top:0}.ezplayer-loading-dot-item:nth-child(2){animation:animationShape2 2s linear 0s infinite normal;left:15px;opacity:.8;top:0}.ezplayer-loading-dot-item:nth-child(3){animation:animationShape3 2s linear 0s infinite normal;left:0;opacity:.5;top:15px}.ezplayer-loading-dot-item:nth-child(4){animation:animationShape4 2s linear 0s infinite normal;left:15px;opacity:.3;top:15px}.ezplayer-loading-dot-load{animation:rotation 1s infinite}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ezplayer-load-blur{background:#fff;opacity:.5}}@keyframes ezdSpinMove{to{opacity:1}}@keyframes ezdRotate{to{transform:rotate(405deg)}}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes animationShape1{0%{transform:translate(0)}25%{transform:translateY(15px)}50%{transform:translate(15px,15px)}75%{transform:translate(15px)}to{transform:translate(translate)}}@keyframes animationShape2{0%{transform:translate(0)}25%{transform:translate(-15px)}50%{transform:translate(-15px,15px)}75%{transform:translateY(15px)}}@keyframes animationShape3{0%{transform:translate(0)}25%{transform:translate(15px)}50%{transform:translate(15px,-15px)}75%{transform:translateY(-15px)}}@keyframes animationShape4{0%{transform:translate(0)}25%{transform:translateY(-15px)}50%{transform:translate(-15px,-15px)}75%{transform:translate(-15px)}}.ezplayer-loading-text{margin-top:20px}
25
+ .ezplayer-loading{background-color:rgba(0,0,0,.5);bottom:0;color:#fff;display:none;font-size:14px;height:100%;left:0;position:absolute;right:0;top:0;transition:transform .3s cubic-bezier(.78,.14,.15,.86);vertical-align:middle;width:100%;z-index:4}.ezplayer-loading-dot{display:inline-block;font-size:25px;height:25px;position:relative;width:25px}.ezplayer-loading-dot-item{background-color:#fff;border-radius:2px;display:block;height:10px;position:absolute;transform-origin:50% 50%;width:10px}.ezplayer-loading-dot-item:first-child{animation:animationShape1 2s linear 0s infinite normal!important;left:0;opacity:1;top:0}.ezplayer-loading-dot-item:nth-child(2){animation:animationShape2 2s linear 0s infinite normal!important;left:15px;opacity:.8;top:0}.ezplayer-loading-dot-item:nth-child(3){animation:animationShape3 2s linear 0s infinite normal!important;left:0;opacity:.5;top:15px}.ezplayer-loading-dot-item:nth-child(4){animation:animationShape4 2s linear 0s infinite normal!important;left:15px;opacity:.3;top:15px}.ezplayer-loading-dot-load{animation:rotation 1s infinite!important}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ezplayer-load-blur{background:#fff;opacity:.5}}@keyframes ezdSpinMove{to{opacity:1}}@keyframes ezdRotate{to{transform:rotate(405deg)}}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes animationShape1{0%{transform:translate(0)}25%{transform:translateY(15px)}50%{transform:translate(15px,15px)}75%{transform:translate(15px)}to{transform:translate(translate)}}@keyframes animationShape2{0%{transform:translate(0)}25%{transform:translate(-15px)}50%{transform:translate(-15px,15px)}75%{transform:translateY(15px)}}@keyframes animationShape3{0%{transform:translate(0)}25%{transform:translate(15px)}50%{transform:translate(15px,-15px)}75%{transform:translateY(-15px)}}@keyframes animationShape4{0%{transform:translate(0)}25%{transform:translateY(-15px)}50%{transform:translate(-15px,-15px)}75%{transform:translate(-15px)}}.ezplayer-loading-text{margin-top:20px}
26
26
  .ezplayer-message{background-color:rgba(0,0,0,.4);bottom:0;color:#fff;display:none;font-size:16px;height:100%;left:0;overflow:hidden;position:absolute;right:0;top:0;width:100%;z-index:5}.ezplayer-message-content{align-items:center;display:flex;flex-direction:column;justify-content:center}.ezplayer-message-msg{display:-webkit-box;-webkit-line-clamp:2;margin-top:15px;max-width:500px;overflow:hidden;word-break:break-all;-webkit-box-orient:vertical;padding:0 20px}.ezplayer-message-error{color:#ff4d4f}.ezplayer-toast{background-color:rgba(0,0,0,.8);border-radius:var(--ezplayer-border-radius,8px);box-shadow:0 9px 28px 8px rgba(0,0,0,.05),0 3px 16px 0 rgba(0,0,0,.03),0 3px 7px -4px rgba(0,0,0,.05);color:#fff;display:flex;font-size:14px;left:50%;line-height:22px;max-width:450px;overflow:hidden;padding:9px 16px;position:absolute;top:50px;transform:translateX(-50%);z-index:6}.ezplayer-toast-content{padding-left:24px;position:relative}.ezplayer-toast .ezplayer-icon{font-size:16px;left:0;position:absolute;top:3px}.ezplayer-toast .ezplayer-icon-info-circle{color:var(--ezplayer-default-color,#fff)}.ezplayer-toast .ezplayer-icon-warn-circle{color:#faad14}.ezplayer-toast .ezplayer-icon-close-circle{color:#ff4d4f}.ezplayer-mobile .ezplayer-toast{font-size:12px;line-height:20px}.ezplayer-mobile .ezplayer-toast-content{padding-left:20px}.ezplayer-mobile .ezplayer-toast .ezplayer-icon{font-size:14px}
27
27
  .ezplayer-poster{bottom:0;display:none;height:100%;left:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:2}.ezplayer-poster img{border:0;font-size:0;height:100%;outline:none;pointer-events:none;width:100%}
28
28
  .ezplayer-icon-volume{position:relative}.ezplayer-icon-volume svg .ezplayer-icon-volume-high,.ezplayer-icon-volume svg .ezplayer-icon-volume-low,.ezplayer-icon-volume svg .ezplayer-icon-volume-muted{display:none}.ezplayer-icon-volume.ezplayer-icon-volume-high svg .ezplayer-icon-volume-high,.ezplayer-icon-volume.ezplayer-icon-volume-high svg .ezplayer-icon-volume-low,.ezplayer-icon-volume.ezplayer-icon-volume-low svg .ezplayer-icon-volume-low,.ezplayer-icon-volume.ezplayer-icon-volume-muted svg .ezplayer-icon-volume-muted,.ezplayer-icon-volume.ezplayer-icon-volume-zero svg .ezplayer-icon-volume-muted{display:inline}.ezplayer-volume-progress{height:126px}
package/dist/style.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.4-beta.2
3
- * Copyright (c) 2026-08-27 19:42:35 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.5-beta.1
3
+ * Copyright (c) 2026-09-03 20:27:16 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  require("./style.css");
@@ -1500,7 +1500,7 @@ declare class Theme extends EventEmitter {
1500
1500
  readonly zoomingChange: "zoomingChange";
1501
1501
  readonly zoomTranslateChange: "zoomTranslateChange";
1502
1502
  readonly audioInfo: "audioInfo";
1503
- readonly videoInfo: "videoInfo"; /** 语言包 @since 0.0.1 */
1503
+ readonly videoInfo: "videoInfo";
1504
1504
  readonly firstFrameDisplay: "firstFrameDisplay";
1505
1505
  readonly fullscreen: "fullscreen";
1506
1506
  readonly exitFullscreen: "exitFullscreen";
@@ -1512,7 +1512,7 @@ declare class Theme extends EventEmitter {
1512
1512
  readonly recTypeChange: "recTypeChange";
1513
1513
  readonly definitionChange: "definitionChange";
1514
1514
  readonly speedChange: "speedChange";
1515
- readonly recordingChange: "recordingChange";
1515
+ readonly recordingChange: "recordingChange"; /** 封面控件 @since 0.0.1 @private */
1516
1516
  readonly talkingChange: "talkingChange";
1517
1517
  readonly talkVolumeChange: "talkVolumeChange";
1518
1518
  readonly broadcastChange: "broadcastChange";
@@ -1527,7 +1527,10 @@ declare class Theme extends EventEmitter {
1527
1527
  readonly setVideoLevelList: "setVideoLevelList";
1528
1528
  readonly currentVideoLevel: "currentVideoLevel";
1529
1529
  readonly currentVideoLevelAuto: "currentVideoLevelAuto";
1530
- readonly setAllDayRecTimes: "setAllDayRecTimes";
1530
+ readonly setAllDayRecTimes: "setAllDayRecTimes"; /**
1531
+ * 移动端扩展容器, 扩展的控件渲染在指定容器以外, 仅只用端适用, 为了可以放置大的控件和方便开发接入
1532
+ * @private
1533
+ */
1531
1534
  readonly getOSDTime: "getOSDTime";
1532
1535
  readonly playbackEnd: "playbackEnd";
1533
1536
  readonly control: {
@@ -1536,12 +1539,12 @@ declare class Theme extends EventEmitter {
1536
1539
  readonly capturePicture: "Control.capturePicture";
1537
1540
  readonly capturePictureResult: "Control.capturePictureResult";
1538
1541
  readonly capturePictureDestroy: "Control.capturePictureDestroy";
1539
- readonly volumechange: "Control.volumechange"; /** 当前容器的全屏状态 true: 全屏, false: 非全屏 */
1542
+ readonly volumechange: "Control.volumechange";
1540
1543
  readonly volumePanelOpenChange: "Control.volumePanelOpenChange";
1541
1544
  readonly volumeDestroy: "Control.volumeDestroy";
1542
1545
  readonly controlsBarOpenChange: "Control.controlsBarOpenChange";
1543
1546
  readonly headerMoreShowControlsChange: "Control.headerMoreShowControlsChange";
1544
- readonly headerMorePanelOpenChange: "Control.headerMorePanelOpenChange"; /** 倍速 @private */
1547
+ readonly headerMorePanelOpenChange: "Control.headerMorePanelOpenChange"; /** 电子放大倍数 @private */
1545
1548
  readonly footerMoreShowControlsChange: "Control.footerMoreShowControlsChange";
1546
1549
  readonly footerMorePanelOpenChange: "Control.footerMorePanelOpenChange";
1547
1550
  readonly deviceDestroy: "Control.deviceDestroy";
@@ -1749,7 +1752,7 @@ declare class Theme extends EventEmitter {
1749
1752
  DEVICE_ENCRYPTED: string;
1750
1753
  NO_RECORD: string;
1751
1754
  PLAY_FAILED: string;
1752
- PLAY_SUCCESS: string;
1755
+ PLAY_SUCCESS: string; /** 语言包 @since 0.0.1 */
1753
1756
  STOP_SUCCESS: string;
1754
1757
  CHANGE_PLAYURL_SUCCESS: string;
1755
1758
  CHANGE_PLAYURL_FAILED: string;
@@ -1760,17 +1763,18 @@ declare class Theme extends EventEmitter {
1760
1763
  SPEED: string;
1761
1764
  SPEED_RATE: string;
1762
1765
  SPEED_CANCEL: string;
1763
- GET_SPEED: string; /** 所有控件列表, 所有控件名称规则(`${iconId}Control`), 如音量控件 this.controls["volumeControl"] @since 0.0.1 */
1766
+ GET_SPEED: string;
1764
1767
  MAX_SPEED_LIMIT: string;
1765
1768
  MIN_SPEED_LIMIT: string;
1766
1769
  SEEK_CANNOT_CROSS_DAYS: string;
1770
+ /** 所有控件列表, 所有控件名称规则(`${iconId}Control`), 如音量控件 this.controls["volumeControl"] @since 0.0.1 */
1767
1771
  SEEK_TIMEFORMAT_ERROR: string;
1768
1772
  PAUSE: string;
1769
1773
  PAUSE_FAILED: string;
1770
1774
  RESUME: string;
1771
1775
  RESUME_FAILED: string;
1772
1776
  CALL_END: string;
1773
- USER_DO_NOT_OWN_DEVICE: string; /** 消息提示控件 @since 0.0.1 @private */
1777
+ USER_DO_NOT_OWN_DEVICE: string; /** 加载控件 @since 0.0.1 @private */
1774
1778
  NO_CLOUD_RECORD: string;
1775
1779
  CHANGE_VIDEO_LEVEL: string;
1776
1780
  CHANGE_VIDEO_LEVEL_FAIL: string;
@@ -1786,6 +1790,11 @@ declare class Theme extends EventEmitter {
1786
1790
  VIDEO_LEVEL_3K: string;
1787
1791
  VIDEO_LEVEL_4k: string;
1788
1792
  RESET_THEME: string;
1793
+ /**
1794
+ * 更多控件(header more)
1795
+ * @since 0.0.1
1796
+ * @private
1797
+ */
1789
1798
  BTN_PLAY: string;
1790
1799
  BTN_PAUSE: string;
1791
1800
  BTN_VOLUME: string;
@@ -1798,7 +1807,7 @@ declare class Theme extends EventEmitter {
1798
1807
  BTN_LIVE: string;
1799
1808
  BTN_REC_DROPDOWN: string;
1800
1809
  BTN_ALARM_MESSAGE: string;
1801
- REC_DROPDOWN_CLOUD_REC: string;
1810
+ REC_DROPDOWN_CLOUD_REC: string; /** 低部控件 @since 0.0.1 @private */
1802
1811
  REC_DROPDOWN_CLOUD_RECORD: string;
1803
1812
  REC_DROPDOWN_LOCAL_REC: string;
1804
1813
  BTN_ZOOM: string;
@@ -1815,7 +1824,7 @@ declare class Theme extends EventEmitter {
1815
1824
  BTN_REC: string;
1816
1825
  BTN_CALENDAR: string;
1817
1826
  BTN_TIME: string;
1818
- BTN_MORE: string; /** resizeObserver 监听销毁 */
1827
+ BTN_MORE: string;
1819
1828
  DEVICE_NAME: string;
1820
1829
  DEVICE_ID: string;
1821
1830
  CAPTURE_SUCCESS: string;
@@ -1827,7 +1836,7 @@ declare class Theme extends EventEmitter {
1827
1836
  RECORD_TIPS: string;
1828
1837
  RECORDS: string;
1829
1838
  OPEN_SOUND: string;
1830
- CLOSE_SOUND: string; /** 屏幕旋转角度 0 | 90 | 180 | 270 */
1839
+ CLOSE_SOUND: string; /** 容器的宽 */
1831
1840
  SOUND_OPENED: string;
1832
1841
  ZOOM: string;
1833
1842
  START_ZOOM: string;
@@ -1854,25 +1863,38 @@ declare class Theme extends EventEmitter {
1854
1863
  GET_WEB_FULLSCREEN_STATUS: string;
1855
1864
  WEB_FULLSCREEN: string;
1856
1865
  WEB_FULLSCREEN_EXIT: string;
1857
- DESTROY: string; /** 窗口尺寸变化时,设置窗口超出隐藏,防止出现滚动条 */
1866
+ DESTROY: string;
1858
1867
  GET_CAPACITY: string;
1859
1868
  GET_PTZ_STATUS: string;
1860
1869
  GET_PTZ_STATUS_FAILED: string;
1861
- /**
1862
- * 录像回放的月份列表 @private
1863
- */
1864
1870
  MOBILE_HIDE_PTZ: string;
1865
1871
  OPTION_PTZ_FAILED: string;
1866
1872
  MOBILE_PTZ_TIPS: string;
1867
1873
  PTZ_FAST: string;
1868
1874
  PTZ_MID: string;
1869
1875
  PTZ_SLOW: string;
1870
- PTZ_SPEED: string;
1876
+ PTZ_SPEED: string; /**
1877
+ // * 记录回放的月份
1878
+ // *
1879
+ // * key: {序列号}_{通道号}_{rec | cloud | cloudRecord} 比如:BC7799091_1_rec BC7799091_1_cloud BC7799091_1_cloudRecord
1880
+ // *
1881
+ // * value: 月份列表 比如 ["2025-12-01", "2025-12-02"]
1882
+ // * @private
1883
+ // */
1884
+ /**
1885
+ * 录像回放的月份列表 @private
1886
+ */
1871
1887
  DEVICE_ZOOM: string;
1888
+ /**
1889
+ * 录像回放的月份列表 @private
1890
+ */
1872
1891
  DEVICE_FOCUS: string;
1873
1892
  NOT_SUPPORT_DEVICE_ZOOM: string;
1874
1893
  NOT_SUPPORT_FOCUS: string;
1875
1894
  MIRROR: string;
1895
+ /**
1896
+ * 录像回放的月份列表 @private
1897
+ */
1876
1898
  MIRROR_TYPE_ERROR: string;
1877
1899
  CHANGE_FEC_TYPE: string;
1878
1900
  DEVICE_NOT_SUPPORT: string;
@@ -1926,6 +1948,40 @@ declare class Theme extends EventEmitter {
1926
1948
  395506: string;
1927
1949
  395507: string;
1928
1950
  395530: string;
1951
+ /**
1952
+ * 播放器主题
1953
+ * @class Theme
1954
+ * @category Theme
1955
+ * @remarks
1956
+ * 萤石播放器主题,主要用于播放器的 UI 展示和交互,支持 flv, hls, mp4, ezopen 等流类型。
1957
+ * 提供了丰富的控件和配置选项,支持多语言和自定义样式。
1958
+ *
1959
+ * @example
1960
+ * ```ts
1961
+ * // import css file
1962
+ * import "@ezuikit/player-theme/dist/style.js"
1963
+ * import Theme from '@ezuikit/player-theme';
1964
+ *
1965
+ * // class Player extends Theme {}
1966
+ *
1967
+ * const theme = new Theme({
1968
+ * container: () => document.querySelector('.player'),
1969
+ * type: 'flv',
1970
+ * });
1971
+ * ```
1972
+ *
1973
+ * ```html
1974
+ * <!-- html script, static in `@ezuikit/player-theme/dist` -->
1975
+ * <link rel="stylesheet" href="./assets/@ezuikit/player-theme/dist/style.css" />
1976
+ * <script src="./assets/@ezuikit/player-theme/dist/index.umd.js"></script>
1977
+ * <script>
1978
+ * const theme = new Theme({
1979
+ * container: () => document.querySelector('.player'),
1980
+ * type: 'flv',
1981
+ * });
1982
+ * </script>
1983
+ * ```
1984
+ */
1929
1985
  395544: string;
1930
1986
  395545: string;
1931
1987
  395546: string;
@@ -1936,14 +1992,14 @@ declare class Theme extends EventEmitter {
1936
1992
  395560: string;
1937
1993
  395561: string;
1938
1994
  395562: string;
1939
- 395563: string; /** 语言包 @since 0.0.1 */
1995
+ 395563: string;
1940
1996
  395564: string;
1941
1997
  395566: string;
1942
1998
  395567: string;
1943
1999
  395568: string;
1944
2000
  395569: string;
1945
2001
  395600: string;
1946
- 395601: string; /** 内容控件 @since 0.0.1 */
2002
+ 395601: string;
1947
2003
  395602: string;
1948
2004
  395610: string;
1949
2005
  395620: string;
@@ -1963,7 +2019,7 @@ declare class Theme extends EventEmitter {
1963
2019
  396109: string;
1964
2020
  396110: string;
1965
2021
  396501: string;
1966
- 396502: string; /** 容器的宽 */
2022
+ 396502: string;
1967
2023
  396503: string;
1968
2024
  396504: string;
1969
2025
  396505: string;
@@ -1976,12 +2032,15 @@ declare class Theme extends EventEmitter {
1976
2032
  396513: string;
1977
2033
  396514: string;
1978
2034
  396515: string;
1979
- 396516: string; /** 窗口尺寸变化时,设置窗口超出隐藏,防止出现滚动条 */
2035
+ 396516: string;
1980
2036
  396517: string;
1981
2037
  396518: string;
1982
2038
  396519: string;
1983
2039
  396520: string;
1984
2040
  396700: string;
2041
+ /**
2042
+ * 录像回放的月份列表 @private
2043
+ */
1985
2044
  396701: string;
1986
2045
  397001: string;
1987
2046
  397002: string;
@@ -2048,9 +2107,7 @@ declare class Theme extends EventEmitter {
2048
2107
  SEEK_TIMEFORMAT_ERROR: string;
2049
2108
  PAUSE: string;
2050
2109
  PAUSE_FAILED: string;
2051
- RESUME: string; /**
2052
- * url 信息 播放地址信息
2053
- */
2110
+ RESUME: string;
2054
2111
  RESUME_FAILED: string;
2055
2112
  CALL_END: string;
2056
2113
  USER_DO_NOT_OWN_DEVICE: string;
@@ -2066,28 +2123,23 @@ declare class Theme extends EventEmitter {
2066
2123
  VIDEO_LEVEL_HEIGH: string;
2067
2124
  VIDEO_LEVEL_SUPER: string;
2068
2125
  VIDEO_LEVEL_EXTREME: string;
2126
+ /**
2127
+ * 视频信息
2128
+ * @version 3.1.2
2129
+ * ```ts
2130
+ * theme.videoInfo // ThemeVideoInfo
2131
+ * ```
2132
+ */
2069
2133
  VIDEO_LEVEL_3K: string;
2070
2134
  VIDEO_LEVEL_4k: string;
2071
2135
  RESET_THEME: string;
2072
2136
  BTN_PLAY: string;
2073
2137
  BTN_PAUSE: string;
2074
- BTN_VOLUME: string; /**
2075
- * 当前播放状态
2076
- * ```ts
2077
- * theme.playing // boolean
2078
- * ```
2079
- */
2138
+ BTN_VOLUME: string;
2080
2139
  BTN_MUTED: string;
2081
2140
  BTN_RECORDVIDEO: string;
2082
2141
  BTN_CAPTURE: string;
2083
2142
  BTN_TALK: string;
2084
- /**
2085
- * 播放状态
2086
- * ```ts
2087
- * // 事件监听
2088
- * theme.on(Theme.EVENTS.play, (playing: boolean) => {})
2089
- * ```
2090
- */
2091
2143
  BTN_BROADCAST: string;
2092
2144
  BTN_AICHAT: string;
2093
2145
  BTN_LIVE: string;
@@ -2152,7 +2204,14 @@ declare class Theme extends EventEmitter {
2152
2204
  WEB_FULLSCREEN: string;
2153
2205
  WEB_FULLSCREEN_EXIT: string;
2154
2206
  DESTROY: string;
2155
- GET_CAPACITY: string;
2207
+ GET_CAPACITY: string; /**
2208
+ * 静音
2209
+ * @example
2210
+ * ```ts
2211
+ * // 事件监听
2212
+ * theme.on(Theme.EVENTS.volumechange, (volume: number, muted: boolean) => {})
2213
+ * ```
2214
+ */
2156
2215
  GET_PTZ_STATUS: string;
2157
2216
  GET_PTZ_STATUS_FAILED: string;
2158
2217
  MOBILE_HIDE_PTZ: string;
@@ -2688,6 +2747,9 @@ declare class Theme extends EventEmitter {
2688
2747
  * 窗口全屏后旋转 90度判断, 然后设置控件已经旋转 90度, 为了解决控件交互问题
2689
2748
  */
2690
2749
  private _isRotated;
2750
+ /**
2751
+ * 私有流地址
2752
+ */
2691
2753
  get isEzopen(): boolean;
2692
2754
  /**
2693
2755
  * 判断播放地址是萤石的播放地址
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ezuikit/player-theme",
3
- "version": "3.1.4-beta.2",
3
+ "version": "3.1.5-beta.1",
4
4
  "description": "player theme",
5
5
  "title": "theme",
6
6
  "main": "dist/index.cjs",