@vonage/vivid 4.25.0 → 4.27.0

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.
Files changed (196) hide show
  1. package/custom-elements.json +3371 -1999
  2. package/lib/accordion-item/accordion-item.d.ts +2 -2
  3. package/lib/action-group/action-group.d.ts +1 -1
  4. package/lib/alert/alert.d.ts +5 -5
  5. package/lib/audio-player/audio-player.d.ts +3 -3
  6. package/lib/avatar/avatar.d.ts +393 -1
  7. package/lib/avatar/avatar.template.d.ts +2 -2
  8. package/lib/badge/badge.d.ts +2 -2
  9. package/lib/banner/banner.d.ts +6 -6
  10. package/lib/breadcrumb/breadcrumb.d.ts +1 -1
  11. package/lib/breadcrumb-item/breadcrumb-item.d.ts +1 -1
  12. package/lib/button/button.d.ts +6 -6
  13. package/lib/calendar/calendar.d.ts +2 -0
  14. package/lib/calendar-event/calendar-event.d.ts +1 -1
  15. package/lib/card/card.d.ts +1 -1
  16. package/lib/checkbox/checkbox.d.ts +10 -10
  17. package/lib/combobox/combobox.d.ts +11 -11
  18. package/lib/data-grid/data-grid-cell.d.ts +6 -4
  19. package/lib/data-grid/data-grid-row.d.ts +1 -0
  20. package/lib/data-grid/data-grid.d.ts +1 -1
  21. package/lib/date-picker/date-picker.d.ts +75 -75
  22. package/lib/date-picker/date-picker.template.d.ts +1 -1
  23. package/lib/date-range-picker/date-range-picker.d.ts +44 -44
  24. package/lib/date-range-picker/date-range-picker.template.d.ts +1 -1
  25. package/lib/date-time-picker/date-time-picker.d.ts +64 -64
  26. package/lib/date-time-picker/date-time-picker.template.d.ts +1 -1
  27. package/lib/dial-pad/dial-pad.d.ts +3 -3
  28. package/lib/dialog/dialog.d.ts +5 -4
  29. package/lib/divider/divider.d.ts +1 -1
  30. package/lib/fab/fab.d.ts +2 -2
  31. package/lib/file-picker/file-picker.d.ts +10 -10
  32. package/lib/header/header.d.ts +1 -1
  33. package/lib/menu/menu.d.ts +2 -2
  34. package/lib/menu-item/menu-item.d.ts +3 -3
  35. package/lib/nav/nav.d.ts +1 -1
  36. package/lib/nav-disclosure/nav-disclosure.d.ts +3 -3
  37. package/lib/nav-item/nav-item.d.ts +3 -3
  38. package/lib/note/note.d.ts +2 -2
  39. package/lib/number-field/locale.d.ts +3 -2
  40. package/lib/number-field/number-field.d.ts +15 -15
  41. package/lib/option/option.d.ts +3 -3
  42. package/lib/pagination/locale.d.ts +5 -0
  43. package/lib/pagination/pagination.d.ts +341 -2
  44. package/lib/popup/popup.d.ts +1 -0
  45. package/lib/progress/progress.d.ts +1 -1
  46. package/lib/progress-ring/progress-ring.d.ts +1 -1
  47. package/lib/radio/radio.d.ts +3 -3
  48. package/lib/radio-group/radio-group.d.ts +4 -4
  49. package/lib/range-slider/range-slider.d.ts +5 -5
  50. package/lib/rich-text-editor/menubar/menubar.d.ts +3 -3
  51. package/lib/rich-text-editor/rich-text-editor.d.ts +3 -3
  52. package/lib/searchable-select/locale.d.ts +1 -1
  53. package/lib/searchable-select/option-tag.d.ts +3 -3
  54. package/lib/searchable-select/searchable-select.d.ts +15 -15
  55. package/lib/select/select.d.ts +12 -12
  56. package/lib/selectable-box/selectable-box.d.ts +1 -1
  57. package/lib/slider/slider.d.ts +5 -5
  58. package/lib/split-button/split-button.d.ts +6 -6
  59. package/lib/switch/switch.d.ts +2 -2
  60. package/lib/tab/tab.d.ts +6 -6
  61. package/lib/tab-panel/tab-panel.d.ts +1 -1
  62. package/lib/tag/locale.d.ts +3 -0
  63. package/lib/tag/tag.d.ts +343 -6
  64. package/lib/tag-group/tag-group.d.ts +1 -1
  65. package/lib/text-area/text-area.d.ts +14 -14
  66. package/lib/text-field/text-field.d.ts +16 -16
  67. package/lib/time-picker/time-picker.d.ts +21 -21
  68. package/lib/toggletip/toggletip.d.ts +1 -1
  69. package/lib/tooltip/tooltip.d.ts +1 -1
  70. package/lib/tree-item/tree-item.d.ts +3 -3
  71. package/lib/tree-view/tree-view.d.ts +1 -1
  72. package/lib/video-player/video-player.d.ts +3 -3
  73. package/locales/de-DE.cjs +40 -5
  74. package/locales/de-DE.js +40 -5
  75. package/locales/en-GB.cjs +40 -5
  76. package/locales/en-GB.js +40 -5
  77. package/locales/en-US.cjs +40 -5
  78. package/locales/en-US.js +40 -5
  79. package/locales/ja-JP.cjs +40 -5
  80. package/locales/ja-JP.js +40 -5
  81. package/locales/zh-CN.cjs +40 -5
  82. package/locales/zh-CN.js +40 -5
  83. package/package.json +73 -45
  84. package/shared/aria/delegates-aria.d.ts +1 -1
  85. package/shared/aria/host-semantics.d.ts +1 -1
  86. package/shared/calendar-picker.template.cjs +40 -13
  87. package/shared/calendar-picker.template.js +40 -13
  88. package/shared/definition.cjs +19 -3
  89. package/shared/definition.js +20 -4
  90. package/shared/definition11.cjs +1 -1
  91. package/shared/definition11.js +1 -1
  92. package/shared/definition13.cjs +25 -0
  93. package/shared/definition13.js +26 -1
  94. package/shared/definition15.cjs +1 -1
  95. package/shared/definition15.js +1 -1
  96. package/shared/definition16.cjs +1 -1
  97. package/shared/definition16.js +1 -1
  98. package/shared/definition17.cjs +602 -522
  99. package/shared/definition17.js +600 -520
  100. package/shared/definition18.cjs +8 -1
  101. package/shared/definition18.js +8 -1
  102. package/shared/definition19.cjs +9 -2
  103. package/shared/definition19.js +9 -2
  104. package/shared/definition2.cjs +1 -1
  105. package/shared/definition2.js +1 -1
  106. package/shared/definition20.cjs +3 -1
  107. package/shared/definition20.js +3 -1
  108. package/shared/definition21.cjs +2 -2
  109. package/shared/definition21.js +2 -2
  110. package/shared/definition22.cjs +9 -3
  111. package/shared/definition22.js +9 -3
  112. package/shared/definition28.cjs +2 -2
  113. package/shared/definition28.js +2 -2
  114. package/shared/definition3.cjs +1 -1
  115. package/shared/definition3.js +1 -1
  116. package/shared/definition30.cjs +1 -1
  117. package/shared/definition30.js +1 -1
  118. package/shared/definition31.cjs +1 -1
  119. package/shared/definition31.js +1 -1
  120. package/shared/definition32.cjs +1 -1
  121. package/shared/definition32.js +1 -1
  122. package/shared/definition36.cjs +41 -30
  123. package/shared/definition36.js +34 -23
  124. package/shared/definition38.cjs +30 -23
  125. package/shared/definition38.js +30 -23
  126. package/shared/definition4.cjs +1 -1
  127. package/shared/definition4.js +1 -1
  128. package/shared/definition41.cjs +1 -1
  129. package/shared/definition41.js +1 -1
  130. package/shared/definition42.cjs +2 -2
  131. package/shared/definition42.js +2 -2
  132. package/shared/definition44.cjs +129 -117
  133. package/shared/definition44.js +130 -118
  134. package/shared/definition45.cjs +17 -7
  135. package/shared/definition45.js +17 -7
  136. package/shared/definition46.cjs +1 -1
  137. package/shared/definition46.js +1 -1
  138. package/shared/definition49.cjs +6 -6
  139. package/shared/definition49.js +6 -6
  140. package/shared/definition54.cjs +2 -2
  141. package/shared/definition54.js +2 -2
  142. package/shared/definition56.cjs +5 -4
  143. package/shared/definition56.js +5 -4
  144. package/shared/definition57.cjs +1 -1
  145. package/shared/definition57.js +1 -1
  146. package/shared/definition58.cjs +1 -1
  147. package/shared/definition58.js +1 -1
  148. package/shared/definition59.cjs +3 -1
  149. package/shared/definition59.js +3 -1
  150. package/shared/definition6.cjs +45 -12
  151. package/shared/definition6.js +45 -12
  152. package/shared/definition63.cjs +2 -2
  153. package/shared/definition63.js +2 -2
  154. package/shared/definition64.cjs +136 -38
  155. package/shared/definition64.js +136 -38
  156. package/shared/definition67.cjs +36 -15
  157. package/shared/definition67.js +37 -16
  158. package/shared/feedback/feedback-message.d.ts +1 -1
  159. package/shared/feedback/mixins.d.ts +2 -2
  160. package/shared/form-associated.cjs +4 -0
  161. package/shared/form-associated.js +4 -0
  162. package/shared/foundation/button/button.d.ts +1 -1
  163. package/shared/foundation/vivid-element/vivid-element.d.ts +2 -0
  164. package/shared/key-codes.js +1 -1
  165. package/shared/localization/Locale.d.ts +4 -0
  166. package/shared/mixins.cjs +4 -1
  167. package/shared/mixins.js +4 -1
  168. package/shared/patterns/affix.d.ts +2 -2
  169. package/shared/patterns/char-count/char-count.d.ts +1 -1
  170. package/shared/patterns/form-elements/with-success-text.d.ts +1 -1
  171. package/shared/patterns/linkable.d.ts +1 -1
  172. package/shared/patterns/localized.d.ts +1 -1
  173. package/shared/patterns/trapped-focus.d.ts +1 -1
  174. package/shared/picker-field/mixins/calendar-picker.d.ts +2 -2
  175. package/shared/picker-field/mixins/calendar-picker.locale.d.ts +5 -0
  176. package/shared/picker-field/mixins/calendar-picker.template.d.ts +2 -2
  177. package/shared/picker-field/mixins/calendar-segments/segment.d.ts +1 -0
  178. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +1 -1
  179. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +4 -4
  180. package/shared/picker-field/mixins/single-date-picker.d.ts +4 -4
  181. package/shared/picker-field/mixins/single-value-picker.d.ts +1 -1
  182. package/shared/picker-field/mixins/time-selection-picker.d.ts +2 -2
  183. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +2 -2
  184. package/shared/picker-field/picker-field.d.ts +3 -3
  185. package/shared/picker-field.template.cjs +13 -13
  186. package/shared/picker-field.template.js +13 -13
  187. package/shared/vivid-element.cjs +11 -1
  188. package/shared/vivid-element.js +11 -1
  189. package/styles/core/all.css +5 -5
  190. package/styles/core/theme.css +2 -2
  191. package/styles/core/typography.css +4 -4
  192. package/styles/fonts/spezia-variable.css +15 -15
  193. package/styles/tokens/theme-dark.css +4 -4
  194. package/styles/tokens/theme-light.css +4 -4
  195. package/styles/tokens/vivid-2-compat.css +1 -1
  196. package/vivid.api.json +395 -277
@@ -13780,7 +13780,7 @@ var clock = {
13780
13780
 
13781
13781
  /**
13782
13782
  * @license
13783
- * Video.js 8.22.0 <http://videojs.com/>
13783
+ * Video.js 8.23.3 <http://videojs.com/>
13784
13784
  * Copyright Brightcove, Inc. <https://www.brightcove.com/>
13785
13785
  * Available under Apache License Version 2.0
13786
13786
  * <https://github.com/videojs/video.js/blob/main/LICENSE>
@@ -13791,7 +13791,7 @@ var clock = {
13791
13791
  */
13792
13792
 
13793
13793
 
13794
- var version$6 = "8.22.0";
13794
+ var version$6 = "8.23.3";
13795
13795
 
13796
13796
  /**
13797
13797
  * An Object that contains lifecycle hooks as keys which point to an array
@@ -19728,7 +19728,7 @@ function silencePromise(value) {
19728
19728
  * A serializable javascript representation of the TextTrack.
19729
19729
  * @private
19730
19730
  */
19731
- const trackToJson_ = function (track) {
19731
+ const trackToJson = function (track) {
19732
19732
  const ret = ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce((acc, prop, i) => {
19733
19733
  if (track[prop]) {
19734
19734
  acc[prop] = track[prop];
@@ -19763,7 +19763,7 @@ const textTracksToJson = function (tech) {
19763
19763
  const trackEls = tech.$$('track');
19764
19764
  const trackObjs = Array.prototype.map.call(trackEls, t => t.track);
19765
19765
  const tracks = Array.prototype.map.call(trackEls, function (trackEl) {
19766
- const json = trackToJson_(trackEl.track);
19766
+ const json = trackToJson(trackEl.track);
19767
19767
  if (trackEl.src) {
19768
19768
  json.src = trackEl.src;
19769
19769
  }
@@ -19771,7 +19771,7 @@ const textTracksToJson = function (tech) {
19771
19771
  });
19772
19772
  return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function (track) {
19773
19773
  return trackObjs.indexOf(track) === -1;
19774
- }).map(trackToJson_));
19774
+ }).map(trackToJson));
19775
19775
  };
19776
19776
 
19777
19777
  /**
@@ -19797,7 +19797,7 @@ const jsonToTextTracks = function (json, tech) {
19797
19797
  var textTrackConverter = {
19798
19798
  textTracksToJson,
19799
19799
  jsonToTextTracks,
19800
- trackToJson_
19800
+ trackToJson
19801
19801
  };
19802
19802
 
19803
19803
  /**
@@ -20761,6 +20761,16 @@ class TextTrackList extends TrackList {
20761
20761
  }
20762
20762
  }
20763
20763
  }
20764
+
20765
+ /**
20766
+ * Creates a serializable array of objects that contains serialized copies
20767
+ * of each text track.
20768
+ *
20769
+ * @return {Object[]} A serializable list of objects for the text track list
20770
+ */
20771
+ toJSON() {
20772
+ return this.tracks_.map(track => track.toJSON());
20773
+ }
20764
20774
  }
20765
20775
 
20766
20776
  /**
@@ -21194,11 +21204,9 @@ const getAbsoluteURL = function (url) {
21194
21204
  */
21195
21205
  const getFileExtension = function (path) {
21196
21206
  if (typeof path === 'string') {
21197
- const splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/;
21198
- const pathParts = splitPathRe.exec(path);
21199
- if (pathParts) {
21200
- return pathParts.pop().toLowerCase();
21201
- }
21207
+ const cleanPath = path.split('?')[0].replace(/\/+$/, '');
21208
+ const match = cleanPath.match(/\.([^.\/]+)$/);
21209
+ return match ? match[1].toLowerCase() : '';
21202
21210
  }
21203
21211
  return '';
21204
21212
  };
@@ -21589,6 +21597,16 @@ class TextTrack extends Track {
21589
21597
  this.cues.setCues_(this.cues_);
21590
21598
  }
21591
21599
 
21600
+ /**
21601
+ * Creates a copy of the text track and makes it serializable
21602
+ * by removing circular dependencies.
21603
+ *
21604
+ * @return {Object} The track information as a serializable object
21605
+ */
21606
+ toJSON() {
21607
+ return textTrackConverter.trackToJson(this);
21608
+ }
21609
+
21592
21610
  /**
21593
21611
  * Remove a cue from our internal list
21594
21612
  *
@@ -25003,6 +25021,8 @@ class TextTrackDisplay extends Component$1 {
25003
25021
  this.updateDisplay(e);
25004
25022
  };
25005
25023
  player.on('loadstart', e => this.toggleDisplay(e));
25024
+ player.on('useractive', updateDisplayTextHandler);
25025
+ player.on('userinactive', updateDisplayTextHandler);
25006
25026
  player.on('texttrackchange', updateDisplayTextHandler);
25007
25027
  player.on('loadedmetadata', e => {
25008
25028
  this.updateDisplayOverlay();
@@ -25131,11 +25151,14 @@ class TextTrackDisplay extends Component$1 {
25131
25151
  }
25132
25152
 
25133
25153
  /**
25134
- * Update the displayed TextTrack when a either a {@link Player#texttrackchange} or
25135
- * a {@link Player#fullscreenchange} is fired.
25154
+ * Update the displayed {@link TextTrack} when either a {@link Player#texttrackchange},
25155
+ * a {@link Player#fullscreenchange}, a {@link Player#useractive}, or a
25156
+ * {@link Player#userinactive} is fired.
25136
25157
  *
25137
25158
  * @listens Player#texttrackchange
25138
25159
  * @listens Player#fullscreenchange
25160
+ * @listens Player#useractive
25161
+ * @listens Player#userinactive
25139
25162
  */
25140
25163
  updateDisplay() {
25141
25164
  const tracks = this.player_.textTracks();
@@ -25557,8 +25580,8 @@ class BigPlayButton extends Button {
25557
25580
  handleClick(event) {
25558
25581
  const playPromise = this.player_.play();
25559
25582
 
25560
- // exit early if clicked via the mouse
25561
- if (this.mouseused_ && 'clientX' in event && 'clientY' in event) {
25583
+ // exit early if tapped or clicked via the mouse
25584
+ if (event.type === 'tap' || this.mouseused_ && 'clientX' in event && 'clientY' in event) {
25562
25585
  silencePromise(playPromise);
25563
25586
  if (this.player_.tech(true)) {
25564
25587
  this.player_.tech(true).focus();
@@ -26023,6 +26046,8 @@ class CurrentTimeDisplay extends TimeDisplay {
26023
26046
  let time;
26024
26047
  if (this.player_.ended()) {
26025
26048
  time = this.player_.duration();
26049
+ } else if (event && event.target && typeof event.target.pendingSeekTime === 'function') {
26050
+ time = event.target.pendingSeekTime();
26026
26051
  } else {
26027
26052
  time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
26028
26053
  }
@@ -26769,6 +26794,10 @@ class Slider extends Component$1 {
26769
26794
  event.stopPropagation();
26770
26795
  this.stepForward();
26771
26796
  } else {
26797
+ if (this.pendingSeekTime()) {
26798
+ this.pendingSeekTime(null);
26799
+ this.userSeek_(this.player_.currentTime());
26800
+ }
26772
26801
  super.handleKeyDown(event);
26773
26802
  }
26774
26803
 
@@ -27154,13 +27183,18 @@ class PlayProgressBar extends Component$1 {
27154
27183
  * @param {number} seekBarPoint
27155
27184
  * A number from 0 to 1, representing a horizontal reference point
27156
27185
  * from the left edge of the {@link SeekBar}
27186
+ *
27187
+ * @param {Event} [event]
27188
+ * The `timeupdate` event that caused this function to run.
27157
27189
  */
27158
- update(seekBarRect, seekBarPoint) {
27190
+ update(seekBarRect, seekBarPoint, event) {
27159
27191
  const timeTooltip = this.getChild('timeTooltip');
27160
27192
  if (!timeTooltip) {
27161
27193
  return;
27162
27194
  }
27163
- const time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
27195
+
27196
+ // Combined logic: if an event with a valid pendingSeekTime getter exists, use it.
27197
+ const time = event && event.target && typeof event.target.pendingSeekTime === 'function' ? event.target.pendingSeekTime() : this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
27164
27198
  timeTooltip.updateTime(seekBarRect, seekBarPoint, time);
27165
27199
  }
27166
27200
  }
@@ -27279,14 +27313,14 @@ class SeekBar extends Slider {
27279
27313
 
27280
27314
  // Avoid mutating the prototype's `children` array by creating a copy
27281
27315
  options.children = [...options.children];
27282
- const shouldDisableSeekWhileScrubbingOnMobile = player.options_.disableSeekWhileScrubbingOnMobile && (IS_IOS || IS_ANDROID);
27316
+ const shouldDisableSeekWhileScrubbing = player.options_.disableSeekWhileScrubbingOnMobile && (IS_IOS || IS_ANDROID) || player.options_.disableSeekWhileScrubbingOnSTV;
27283
27317
 
27284
27318
  // Add the TimeTooltip as a child if we are on desktop, or on mobile with `disableSeekWhileScrubbingOnMobile: true`
27285
- if (!IS_IOS && !IS_ANDROID || shouldDisableSeekWhileScrubbingOnMobile) {
27319
+ if (!IS_IOS && !IS_ANDROID || shouldDisableSeekWhileScrubbing) {
27286
27320
  options.children.splice(1, 0, 'mouseTimeDisplay');
27287
27321
  }
27288
27322
  super(player, options);
27289
- this.shouldDisableSeekWhileScrubbingOnMobile_ = shouldDisableSeekWhileScrubbingOnMobile;
27323
+ this.shouldDisableSeekWhileScrubbing_ = shouldDisableSeekWhileScrubbing;
27290
27324
  this.pendingSeekTime_ = null;
27291
27325
  this.setEventHandlers_();
27292
27326
  }
@@ -27403,7 +27437,7 @@ class SeekBar extends Slider {
27403
27437
 
27404
27438
  // update the progress bar time tooltip with the current time
27405
27439
  if (this.bar) {
27406
- this.bar.update(getBoundingClientRect(this.el()), this.getProgress());
27440
+ this.bar.update(getBoundingClientRect(this.el()), this.getProgress(), event);
27407
27441
  }
27408
27442
  });
27409
27443
  return percent;
@@ -27436,6 +27470,25 @@ class SeekBar extends Slider {
27436
27470
  return this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
27437
27471
  }
27438
27472
 
27473
+ /**
27474
+ * Getter and setter for pendingSeekTime.
27475
+ * Ensures the value is clamped between 0 and duration.
27476
+ *
27477
+ * @param {number|null} [time] - Optional. The new pending seek time, can be a number or null.
27478
+ * @return {number|null} - The current pending seek time.
27479
+ */
27480
+ pendingSeekTime(time) {
27481
+ if (time !== undefined) {
27482
+ if (time !== null) {
27483
+ const duration = this.player_.duration();
27484
+ this.pendingSeekTime_ = Math.max(0, Math.min(time, duration));
27485
+ } else {
27486
+ this.pendingSeekTime_ = null;
27487
+ }
27488
+ }
27489
+ return this.pendingSeekTime_;
27490
+ }
27491
+
27439
27492
  /**
27440
27493
  * Get the percentage of media played so far.
27441
27494
  *
@@ -27445,8 +27498,8 @@ class SeekBar extends Slider {
27445
27498
  getPercent() {
27446
27499
  // If we have a pending seek time, we are scrubbing on mobile and should set the slider percent
27447
27500
  // to reflect the current scrub location.
27448
- if (this.pendingSeekTime_) {
27449
- return this.pendingSeekTime_ / this.player_.duration();
27501
+ if (this.pendingSeekTime() !== null) {
27502
+ return this.pendingSeekTime() / this.player_.duration();
27450
27503
  }
27451
27504
  const currentTime = this.getCurrentTime_();
27452
27505
  let percent;
@@ -27483,7 +27536,7 @@ class SeekBar extends Slider {
27483
27536
 
27484
27537
  // Don't pause if we are on mobile and `disableSeekWhileScrubbingOnMobile: true`.
27485
27538
  // In that case, playback should continue while the player scrubs to a new location.
27486
- if (!this.shouldDisableSeekWhileScrubbingOnMobile_) {
27539
+ if (!this.shouldDisableSeekWhileScrubbing_) {
27487
27540
  this.player_.pause();
27488
27541
  }
27489
27542
  super.handleMouseDown(event);
@@ -27544,8 +27597,8 @@ class SeekBar extends Slider {
27544
27597
  }
27545
27598
 
27546
27599
  // if on mobile and `disableSeekWhileScrubbingOnMobile: true`, keep track of the desired seek point but we won't initiate the seek until 'touchend'
27547
- if (this.shouldDisableSeekWhileScrubbingOnMobile_) {
27548
- this.pendingSeekTime_ = newTime;
27600
+ if (this.shouldDisableSeekWhileScrubbing_) {
27601
+ this.pendingSeekTime(newTime);
27549
27602
  } else {
27550
27603
  this.userSeek_(newTime);
27551
27604
  }
@@ -27588,9 +27641,9 @@ class SeekBar extends Slider {
27588
27641
  this.player_.scrubbing(false);
27589
27642
 
27590
27643
  // If we have a pending seek time, then we have finished scrubbing on mobile and should initiate a seek.
27591
- if (this.pendingSeekTime_) {
27592
- this.userSeek_(this.pendingSeekTime_);
27593
- this.pendingSeekTime_ = null;
27644
+ if (this.pendingSeekTime() !== null) {
27645
+ this.userSeek_(this.pendingSeekTime());
27646
+ this.pendingSeekTime(null);
27594
27647
  }
27595
27648
 
27596
27649
  /**
@@ -27614,18 +27667,46 @@ class SeekBar extends Slider {
27614
27667
  }
27615
27668
  }
27616
27669
 
27670
+ /**
27671
+ * Handles pending seek time when `disableSeekWhileScrubbingOnSTV` is enabled.
27672
+ *
27673
+ * @param {number} stepAmount - The number of seconds to step (positive for forward, negative for backward).
27674
+ */
27675
+ handlePendingSeek_(stepAmount) {
27676
+ if (!this.player_.paused()) {
27677
+ this.player_.pause();
27678
+ }
27679
+ const currentPos = this.pendingSeekTime() !== null ? this.pendingSeekTime() : this.player_.currentTime();
27680
+ this.pendingSeekTime(currentPos + stepAmount);
27681
+ this.player_.trigger({
27682
+ type: 'timeupdate',
27683
+ target: this,
27684
+ manuallyTriggered: true
27685
+ });
27686
+ }
27687
+
27617
27688
  /**
27618
27689
  * Move more quickly fast forward for keyboard-only users
27619
27690
  */
27620
27691
  stepForward() {
27621
- this.userSeek_(this.player_.currentTime() + this.options().stepSeconds);
27692
+ // if `disableSeekWhileScrubbingOnSTV: true`, keep track of the desired seek point but we won't initiate the seek
27693
+ if (this.shouldDisableSeekWhileScrubbing_) {
27694
+ this.handlePendingSeek_(this.options().stepSeconds);
27695
+ } else {
27696
+ this.userSeek_(this.player_.currentTime() + this.options().stepSeconds);
27697
+ }
27622
27698
  }
27623
27699
 
27624
27700
  /**
27625
27701
  * Move more quickly rewind for keyboard-only users
27626
27702
  */
27627
27703
  stepBack() {
27628
- this.userSeek_(this.player_.currentTime() - this.options().stepSeconds);
27704
+ // if `disableSeekWhileScrubbingOnSTV: true`, keep track of the desired seek point but we won't initiate the seek
27705
+ if (this.shouldDisableSeekWhileScrubbing_) {
27706
+ this.handlePendingSeek_(-this.options().stepSeconds);
27707
+ } else {
27708
+ this.userSeek_(this.player_.currentTime() - this.options().stepSeconds);
27709
+ }
27629
27710
  }
27630
27711
 
27631
27712
  /**
@@ -27637,6 +27718,10 @@ class SeekBar extends Slider {
27637
27718
  *
27638
27719
  */
27639
27720
  handleAction(event) {
27721
+ if (this.pendingSeekTime() !== null) {
27722
+ this.userSeek_(this.pendingSeekTime());
27723
+ this.pendingSeekTime(null);
27724
+ }
27640
27725
  if (this.player_.paused()) {
27641
27726
  this.player_.play();
27642
27727
  } else {
@@ -32016,22 +32101,22 @@ class TrackSettingsControls extends Component$1 {
32016
32101
  super(player, options);
32017
32102
 
32018
32103
  // Create DOM elements
32019
- const defaultsDescription = this.localize('restore all settings to the default values');
32020
32104
  const resetButton = new Button(player, {
32021
- controlText: defaultsDescription,
32105
+ controlText: this.localize('restore all settings to the default values'),
32022
32106
  className: 'vjs-default-button'
32023
32107
  });
32024
32108
  resetButton.el().classList.remove('vjs-control', 'vjs-button');
32025
32109
  resetButton.el().textContent = this.localize('Reset');
32026
32110
  this.addChild(resetButton);
32111
+ const doneText = this.localize('Done');
32027
32112
  const doneButton = new Button(player, {
32028
- controlText: defaultsDescription,
32113
+ controlText: doneText,
32029
32114
  className: 'vjs-done-button'
32030
32115
  });
32031
32116
 
32032
32117
  // Remove unrequired style classes
32033
32118
  doneButton.el().classList.remove('vjs-control', 'vjs-button');
32034
- doneButton.el().textContent = this.localize('Done');
32119
+ doneButton.el().textContent = doneText;
32035
32120
  this.addChild(doneButton);
32036
32121
  }
32037
32122
 
@@ -35369,8 +35454,12 @@ Tech.registerTech('Html5', Html5);
35369
35454
  * @file player.js
35370
35455
  */
35371
35456
 
35372
- /** @import { TimeRange } from './utils/time' */
35457
+ /** @import AudioTrackList from './tracks/audio-track-list' */
35373
35458
  /** @import HtmlTrackElement from './tracks/html-track-element' */
35459
+ /** @import HtmlTrackElementList from './tracks/html-track-element-list' */
35460
+ /** @import TextTrackList from './tracks/text-track-list' */
35461
+ /** @import { TimeRange } from './utils/time' */
35462
+ /** @import VideoTrackList from './tracks/video-track-list' */
35374
35463
 
35375
35464
  /**
35376
35465
  * @callback PlayerReadyCallback
@@ -40360,6 +40449,7 @@ class Player extends Component$1 {
40360
40449
  *
40361
40450
  * @method Player.prototype.videoTracks
40362
40451
  */
40452
+ Player.prototype.videoTracks = () => {};
40363
40453
 
40364
40454
  /**
40365
40455
  * Get the {@link AudioTrackList}
@@ -40371,6 +40461,7 @@ class Player extends Component$1 {
40371
40461
  *
40372
40462
  * @method Player.prototype.audioTracks
40373
40463
  */
40464
+ Player.prototype.audioTracks = () => {};
40374
40465
 
40375
40466
  /**
40376
40467
  * Get the {@link TextTrackList}
@@ -40382,6 +40473,7 @@ class Player extends Component$1 {
40382
40473
  *
40383
40474
  * @method Player.prototype.textTracks
40384
40475
  */
40476
+ Player.prototype.textTracks = () => {};
40385
40477
 
40386
40478
  /**
40387
40479
  * Get the remote {@link TextTrackList}
@@ -40391,6 +40483,7 @@ class Player extends Component$1 {
40391
40483
  *
40392
40484
  * @method Player.prototype.remoteTextTracks
40393
40485
  */
40486
+ Player.prototype.remoteTextTracks = () => {};
40394
40487
 
40395
40488
  /**
40396
40489
  * Get the remote {@link HtmlTrackElementList} tracks.
@@ -40400,7 +40493,7 @@ class Player extends Component$1 {
40400
40493
  *
40401
40494
  * @method Player.prototype.remoteTextTrackEls
40402
40495
  */
40403
-
40496
+ Player.prototype.remoteTextTrackEls = () => {};
40404
40497
  ALL.names.forEach(function (name) {
40405
40498
  const props = ALL[name];
40406
40499
  Player.prototype[props.getterName] = function () {
@@ -40487,7 +40580,8 @@ Player.prototype.options_ = {
40487
40580
  },
40488
40581
  // Default smooth seeking to false
40489
40582
  enableSmoothSeeking: false,
40490
- disableSeekWhileScrubbingOnMobile: false
40583
+ disableSeekWhileScrubbingOnMobile: false,
40584
+ disableSeekWhileScrubbingOnSTV: false
40491
40585
  };
40492
40586
  TECH_EVENTS_RETRIGGER.forEach(function (event) {
40493
40587
  Player.prototype[`handleTech${toTitleCase$1(event)}_`] = function () {
@@ -41579,9 +41673,13 @@ videojs.trigger = trigger;
41579
41673
  * @see https://github.com/Raynos/xhr
41580
41674
  */
41581
41675
  videojs.xhr = XHR;
41676
+ videojs.TrackList = TrackList;
41582
41677
  videojs.TextTrack = TextTrack;
41678
+ videojs.TextTrackList = TextTrackList;
41583
41679
  videojs.AudioTrack = AudioTrack;
41680
+ videojs.AudioTrackList = AudioTrackList;
41584
41681
  videojs.VideoTrack = VideoTrack;
41682
+ videojs.VideoTrackList = VideoTrackList;
41585
41683
  ['isEl', 'isTextNode', 'createEl', 'hasClass', 'addClass', 'removeClass', 'toggleClass', 'setAttributes', 'getAttributes', 'emptyEl', 'appendContent', 'insertContent'].forEach(k => {
41586
41684
  videojs[k] = function () {
41587
41685
  log$1.warn(`videojs.${k}() is deprecated; use videojs.dom.${k}() instead`);