@ezuikit/player-theme 3.1.5-beta.4 → 3.1.6-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/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.5-beta.4
3
- * Copyright (c) 2026-09-15 13:35:29 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.6-beta.1
3
+ * Copyright (c) 2026-09-16 19:24:27 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  import EventEmitter from 'eventemitter3';
@@ -18,8 +18,8 @@ import { DatePicker, TimePicker } from '@ezuikit/control-date-picker';
18
18
  import { MobileTimeLine, TimeLine } from '@ezuikit/control-time-line';
19
19
  import SegmentProgress from '@ezuikit/control-segment-progress';
20
20
 
21
- /**
22
- * 播放器的类名前缀
21
+ /**
22
+ * 播放器的类名前缀
23
23
  */ var PREFIX_CLASS = 'ezplayer';
24
24
  /** 填充模式 */ var THEME_SCALE_MODE_TYPE = {
25
25
  /** 画面完全填充canvas区域,画面会被拉伸 */ full: 0,
@@ -51,32 +51,32 @@ var THEME_PROPS = [
51
51
  // 播放区间(片段分享)。通过 props 下发而不是靠事件,避免主题异步渲染时错过初始化事件
52
52
  'playbackRange'
53
53
  ];
54
- /**
55
- * 当移动端 picker 控件打开时需要关闭动画(定时器)
54
+ /**
55
+ * 当移动端 picker 控件打开时需要关闭动画(定时器)
56
56
  */ var CLEAR_TIMER_HEADER_FOOTER_ANIMATION = 'CLEAR_TIMER_HEADER_FOOTER_ANIMATION';
57
- /**
58
- * 'rec', 'cloudRec', 'cloudRecord' 是一个组,并且要在头部(移动端特殊处理)
59
- *
60
- * | rec | cloudRec | cloudRecord |
61
- * |:---------------------:|:------------:|:---------------:|
62
- * | 本地回放(SDK存储回放) | 云存储回放 | 云录制回放 |
57
+ /**
58
+ * 'rec', 'cloudRec', 'cloudRecord' 是一个组,并且要在头部(移动端特殊处理)
59
+ *
60
+ * | rec | cloudRec | cloudRecord |
61
+ * |:---------------------:|:------------:|:---------------:|
62
+ * | 本地回放(SDK存储回放) | 云存储回放 | 云录制回放 |
63
63
  */ var REC_GROUP = [
64
64
  'rec',
65
65
  'cloudRec',
66
66
  'cloudRecord'
67
67
  ];
68
- /**
69
- * 设备信息
70
- *
71
- * | deviceID | deviceName |
72
- * |:-------------------:|:-------------:|
73
- * | 设备ID(唯一标识) | 设备名称 |
68
+ /**
69
+ * 设备信息
70
+ *
71
+ * | deviceID | deviceName |
72
+ * |:-------------------:|:-------------:|
73
+ * | 设备ID(唯一标识) | 设备名称 |
74
74
  */ var DEVICE_INFO_GROUP = [
75
75
  'deviceID',
76
76
  'deviceName'
77
77
  ];
78
- /**
79
- * 暂停时能禁用的控件按钮
78
+ /**
79
+ * 暂停时能禁用的控件按钮
80
80
  */ var PAUSE_DISABLED_BTN = [
81
81
  'capturePicture',
82
82
  'volume',
@@ -87,9 +87,9 @@ var THEME_PROPS = [
87
87
  'speed',
88
88
  'globalFullscreen'
89
89
  ];
90
- /**
91
- * 移动端可以扩展的控件
92
- * ['ptz', 'talk', 'record', 'capturePicture', 'timeLine', 'rec', 'date'];
90
+ /**
91
+ * 移动端可以扩展的控件
92
+ * ['ptz', 'talk', 'record', 'capturePicture', 'timeLine', 'rec', 'date'];
93
93
  */ var MOBILE_EXTENDS = [
94
94
  'ptz',
95
95
  'timeLine',
@@ -97,25 +97,25 @@ var THEME_PROPS = [
97
97
  'date',
98
98
  'segmentProgress'
99
99
  ];
100
- /**
101
- *
102
- * 事件名
103
- *
104
- * --------------- ------------------
105
- * - - theme.emit(EVENTS.xxxxx) - -
106
- * - - -------------------------------------> - -
107
- * - - - -
108
- * - Theme - - Controls -
109
- * - - control.emit(EVENTS.control.xxx) - -
110
- * - - <-------------------------------------- - -
111
- * --------------- ------------------
112
- *
113
- * @example
114
- * ```ts
115
- * theme.on(EVENTS.loading)
116
- * theme.on(EVENTS.loading)
117
- * ```
118
- *
100
+ /**
101
+ *
102
+ * 事件名
103
+ *
104
+ * --------------- ------------------
105
+ * - - theme.emit(EVENTS.xxxxx) - -
106
+ * - - -------------------------------------> - -
107
+ * - - - -
108
+ * - Theme - - Controls -
109
+ * - - control.emit(EVENTS.control.xxx) - -
110
+ * - - <-------------------------------------- - -
111
+ * --------------- ------------------
112
+ *
113
+ * @example
114
+ * ```ts
115
+ * theme.on(EVENTS.loading)
116
+ * theme.on(EVENTS.loading)
117
+ * ```
118
+ *
119
119
  */ // 事件命名不要超过两层
120
120
  var EVENTS = {
121
121
  loading: 'loading',
@@ -130,11 +130,11 @@ var EVENTS = {
130
130
  /** 首帧 */ firstFrameDisplay: 'firstFrameDisplay',
131
131
  /** 全屏 */ fullscreen: 'fullscreen',
132
132
  /** 退出全屏 */ exitFullscreen: 'exitFullscreen',
133
- /**
134
- * 全屏变化(移动端也支持触发, 不过移动端是模拟的web全屏 即旋转 180度)
135
- * 当 isCurrentFullscreen 为 true 时,表示当前容器全局全屏状态
136
- *
137
- * 注意:同一个页面中只要有全屏的操作或取消全屏的操作,都会触发该事件 (移动端除外)
133
+ /**
134
+ * 全屏变化(移动端也支持触发, 不过移动端是模拟的web全屏 即旋转 180度)
135
+ * 当 isCurrentFullscreen 为 true 时,表示当前容器全局全屏状态
136
+ *
137
+ * 注意:同一个页面中只要有全屏的操作或取消全屏的操作,都会触发该事件 (移动端除外)
138
138
  */ fullscreenChange: 'fullscreenChange',
139
139
  /** 重置容器尺寸 */ resize: 'resize',
140
140
  /** 屏幕旋转方向变化 */ orientationChange: 'orientationChange',
@@ -161,8 +161,8 @@ var EVENTS = {
161
161
  setAllDayRecTimes: 'setAllDayRecTimes',
162
162
  getOSDTime: 'getOSDTime',
163
163
  /** 播放区间播放结束(SDK 层 playbackRange 特性) */ playbackEnd: 'playbackEnd',
164
- /**
165
- * 控件相关
164
+ /**
165
+ * 控件相关
166
166
  */ control: {
167
167
  /** 点击播放播放/暂停按钮 */ play: 'Control.play',
168
168
  /** 播放控件销毁 */ playDestroy: 'Control.playDestroy',
@@ -217,6 +217,8 @@ var EVENTS = {
217
217
  /** 日期面板展示隐藏变换 */ datePanelOpenChange: 'Control.datePanelOpenChange',
218
218
  /** 日期改变 */ dateChange: 'Control.dateChange',
219
219
  /** 日期改变 */ dateMonthChange: 'Control.dateMonthChange',
220
+ /** 日期面板展示的月份变化 */ datePanelMonthChange: 'Control.datePanelMonthChange',
221
+ /** 日期面板展示的年份变化 */ datePanelYearChange: 'Control.datePanelYearChange',
220
222
  /** 日期销毁 */ dateDestroy: 'Control.datePanelDestroy',
221
223
  /** 时间面板展示隐藏变换 */ timePanelOpenChange: 'Control.timePanelOpenChange',
222
224
  /** 时间改变 */ timeChange: 'Control.timeChange',
@@ -233,8 +235,8 @@ var EVENTS = {
233
235
  /** 播放器内容区域销毁 */ contentDestroy: 'Control.contentDestroy',
234
236
  /** 播放器内容区域重新渲染 */ contentRerender: 'Control.contentRerender'
235
237
  },
236
- /**
237
- * 主题控件相关
238
+ /**
239
+ * 主题控件相关
238
240
  */ theme: {
239
241
  /** 销毁前 */ beforeDestroy: 'Theme.beforeDestroy',
240
242
  /** 销毁后 */ destroyed: 'Theme.destroyed',
@@ -4846,6 +4848,12 @@ function debounce(func, wait) {
4846
4848
  theme.controls.dateControl.on(EVENTS.control.dateChange, function(date) {
4847
4849
  theme.emit(EVENTS.control.dateChange, date);
4848
4850
  });
4851
+ theme.controls.dateControl.on(EVENTS.control.datePanelMonthChange, function(date, month) {
4852
+ theme.emit(EVENTS.control.datePanelMonthChange, date, month);
4853
+ });
4854
+ theme.controls.dateControl.on(EVENTS.control.datePanelYearChange, function(date, year) {
4855
+ theme.emit(EVENTS.control.datePanelYearChange, date, year);
4856
+ });
4849
4857
  theme.controls.dateControl.on(EVENTS.control.dateDestroy, function() {
4850
4858
  theme.emit(EVENTS.control.dateDestroy);
4851
4859
  });
@@ -8388,9 +8396,9 @@ function _set_prototype_of$8(o, p) {
8388
8396
  };
8389
8397
  return _set_prototype_of$8(o, p);
8390
8398
  }
8391
- /**
8392
- * 日历选择器控件
8393
- * @category Control
8399
+ /**
8400
+ * 日历选择器控件
8401
+ * @category Control
8394
8402
  */ var DatePickerControl = /*#__PURE__*/ function(Control) {
8395
8403
  _inherits$8(DatePickerControl, Control);
8396
8404
  function DatePickerControl(options) {
@@ -8405,6 +8413,8 @@ function _set_prototype_of$8(o, p) {
8405
8413
  })) || this;
8406
8414
  _this.options = options;
8407
8415
  _this._value = DateTime.format(((_this_options_props = _this.options.props) == null ? void 0 : (_this_options_props_urlInfo = _this_options_props.urlInfo) == null ? void 0 : (_this_options_props_urlInfo_searchParams = _this_options_props_urlInfo.searchParams) == null ? void 0 : _this_options_props_urlInfo_searchParams.begin) || new Date(), 'YYYY-MM-DD');
8416
+ // 面板首次展示的就是选中日期所在月份,初始化后不应触发年 / 月变化
8417
+ _this._renderMonth = _this._value.slice(0, 7);
8408
8418
  _this._render();
8409
8419
  // 日期上的点
8410
8420
  _this.on(EVENTS.control.dateMonthChange, function(dates) {
@@ -8465,20 +8475,39 @@ function _set_prototype_of$8(o, p) {
8465
8475
  _this.emit(EVENTS.control.dateChange, date);
8466
8476
  }
8467
8477
  },
8478
+ // 日历面板「上一月 / 上一年」,底层两种翻页都回调 onPrevMonth
8479
+ onPrevMonth: function onPrevMonth(current, prev) {
8480
+ _this.options.onPrevMonth == null ? void 0 : _this.options.onPrevMonth.call(_this.options, current, prev);
8481
+ _this._onPanelDateChange(prev);
8482
+ },
8483
+ // 日历面板「下一月 / 下一年」,底层两种翻页都回调 onNextMonth
8484
+ onNextMonth: function onNextMonth(current, next) {
8485
+ _this.options.onNextMonth == null ? void 0 : _this.options.onNextMonth.call(_this.options, current, next);
8486
+ _this._onPanelDateChange(next);
8487
+ },
8488
+ // 月 / 年面板中点选单元格同样会改变日历展示的年月,但底层不回调翻页钩子
8489
+ onCell: function onCell(date, mode) {
8490
+ _this.options.onCell == null ? void 0 : _this.options.onCell.call(_this.options, date, mode);
8491
+ if (mode !== 'date' && !_this._isPanelCellDisabled(date, mode)) _this._onPanelDateChange(date);
8492
+ },
8468
8493
  onOpenChange: function onOpenChange(open) {
8469
8494
  _this.options.onPanelChange == null ? void 0 : _this.options.onPanelChange.call(_this.options, open, _this.datePicker.current);
8470
8495
  _this.emit(EVENTS.control.datePanelOpenChange, open, _this.datePicker.current);
8496
+ // 面板重新打开会跳回选中日期所在月份,且底层不会回调翻页钩子,这里补齐
8497
+ if (open) _this._onPanelDateChange(_this.datePicker.current);
8471
8498
  }
8472
8499
  }));
8473
8500
  };
8474
- /**
8475
- * 设置日期, change = true 时触发 onChange 事件
8476
- * @param date 设置的日期
8477
- * @param change 是否触发 onChange 事件
8501
+ /**
8502
+ * 设置日期, change = true 时触发 onChange 事件
8503
+ * @param date 设置的日期
8504
+ * @param change 是否触发 onChange 事件
8478
8505
  */ _proto.setDate = function setDate(date, change) {
8479
8506
  if (change === void 0) change = true;
8480
8507
  var _this_datePicker;
8481
8508
  (_this_datePicker = this.datePicker) == null ? void 0 : _this_datePicker.setCurrent(date, change);
8509
+ // 主动设值由调用方发起,同步展示月份但不触发年 / 月变化回调
8510
+ if (date) this._renderMonth = DateTime.format(date, 'YYYY-MM');
8482
8511
  if (date && !change && this._value !== DateTime.format(date, 'YYYY-MM-DD')) {
8483
8512
  this._value = DateTime.format(date, 'YYYY-MM-DD');
8484
8513
  if (date && this.$container.querySelector("." + PREFIX_CLASS + "-mobile-date-filter-value")) {
@@ -8490,9 +8519,9 @@ function _set_prototype_of$8(o, p) {
8490
8519
  if (this.datePicker) this.datePicker.open = false;
8491
8520
  Control.prototype.reset.call(this);
8492
8521
  };
8493
- /**
8494
- * 销毁控件
8495
- * @override
8522
+ /**
8523
+ * 销毁控件
8524
+ * @override
8496
8525
  */ _proto.destroy = function destroy() {
8497
8526
  if (this.datePicker) {
8498
8527
  this.datePicker.destroy();
@@ -8505,9 +8534,39 @@ function _set_prototype_of$8(o, p) {
8505
8534
  var arr = this._value.split('-');
8506
8535
  return arr[1] + "." + arr[2];
8507
8536
  };
8508
- /**
8509
- * 点击 Control 会触发
8510
- * @overload super._onControlClick(e: Event)
8537
+ /**
8538
+ * 月 / 年面板中被点选的单元格是否已被调用方禁用
8539
+ *
8540
+ * 禁用的单元格底层不会切换展示的年月,因此不应派发变化
8541
+ * @param date 单元格日期
8542
+ * @param mode 当前面板模式
8543
+ */ _proto._isPanelCellDisabled = function _isPanelCellDisabled(date, mode) {
8544
+ if (mode === 'month') return !!(this.options.disabledMonth == null ? void 0 : this.options.disabledMonth.call(this.options, date, DateTime.format(date, 'YYYY-MM')));
8545
+ if (mode === 'year') return !!(this.options.disabledYear == null ? void 0 : this.options.disabledYear.call(this.options, date, date.getFullYear()));
8546
+ return false;
8547
+ };
8548
+ /**
8549
+ * 日历面板展示的年月发生变化时,派发年份 / 月份变化
8550
+ *
8551
+ * 年份变化会先于月份变化派发;跨年翻页(如 2026-01 -> 2025-12)两者都会触发
8552
+ * @param renderDate 面板当前展示的日期
8553
+ */ _proto._onPanelDateChange = function _onPanelDateChange(renderDate) {
8554
+ if (!renderDate) return;
8555
+ var month = DateTime.format(renderDate, 'YYYY-MM');
8556
+ if (!month || month === this._renderMonth) return;
8557
+ var prevYear = this._renderMonth.slice(0, 4);
8558
+ var year = month.slice(0, 4);
8559
+ this._renderMonth = month;
8560
+ if (year !== prevYear) {
8561
+ this.options.onYearChange == null ? void 0 : this.options.onYearChange.call(this.options, renderDate, year);
8562
+ this.emit(EVENTS.control.datePanelYearChange, renderDate, year);
8563
+ }
8564
+ this.options.onMonthChange == null ? void 0 : this.options.onMonthChange.call(this.options, renderDate, month);
8565
+ this.emit(EVENTS.control.datePanelMonthChange, renderDate, month);
8566
+ };
8567
+ /**
8568
+ * 点击 Control 会触发
8569
+ * @overload super._onControlClick(e: Event)
8511
8570
  */ _proto._onControlClick = function _onControlClick(e) {
8512
8571
  Control.prototype._onControlClick.call(this, e);
8513
8572
  };
@@ -11868,6 +11927,6 @@ var THEME_DEFAULT_OPTIONS = {
11868
11927
  zh: zh,
11869
11928
  en: en
11870
11929
  };
11871
- /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.5-beta.4';
11930
+ /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.6-beta.1';
11872
11931
 
11873
11932
  export { Control, EVENTS, Fullscreen, Loading, Message, Play, Poster, Rec, Theme, Utils, Volume };