@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
@@ -13778,7 +13778,7 @@ var clock = {
13778
13778
 
13779
13779
  /**
13780
13780
  * @license
13781
- * Video.js 8.22.0 <http://videojs.com/>
13781
+ * Video.js 8.23.3 <http://videojs.com/>
13782
13782
  * Copyright Brightcove, Inc. <https://www.brightcove.com/>
13783
13783
  * Available under Apache License Version 2.0
13784
13784
  * <https://github.com/videojs/video.js/blob/main/LICENSE>
@@ -13789,7 +13789,7 @@ var clock = {
13789
13789
  */
13790
13790
 
13791
13791
 
13792
- var version$6 = "8.22.0";
13792
+ var version$6 = "8.23.3";
13793
13793
 
13794
13794
  /**
13795
13795
  * An Object that contains lifecycle hooks as keys which point to an array
@@ -19726,7 +19726,7 @@ function silencePromise(value) {
19726
19726
  * A serializable javascript representation of the TextTrack.
19727
19727
  * @private
19728
19728
  */
19729
- const trackToJson_ = function (track) {
19729
+ const trackToJson = function (track) {
19730
19730
  const ret = ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce((acc, prop, i) => {
19731
19731
  if (track[prop]) {
19732
19732
  acc[prop] = track[prop];
@@ -19761,7 +19761,7 @@ const textTracksToJson = function (tech) {
19761
19761
  const trackEls = tech.$$('track');
19762
19762
  const trackObjs = Array.prototype.map.call(trackEls, t => t.track);
19763
19763
  const tracks = Array.prototype.map.call(trackEls, function (trackEl) {
19764
- const json = trackToJson_(trackEl.track);
19764
+ const json = trackToJson(trackEl.track);
19765
19765
  if (trackEl.src) {
19766
19766
  json.src = trackEl.src;
19767
19767
  }
@@ -19769,7 +19769,7 @@ const textTracksToJson = function (tech) {
19769
19769
  });
19770
19770
  return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function (track) {
19771
19771
  return trackObjs.indexOf(track) === -1;
19772
- }).map(trackToJson_));
19772
+ }).map(trackToJson));
19773
19773
  };
19774
19774
 
19775
19775
  /**
@@ -19795,7 +19795,7 @@ const jsonToTextTracks = function (json, tech) {
19795
19795
  var textTrackConverter = {
19796
19796
  textTracksToJson,
19797
19797
  jsonToTextTracks,
19798
- trackToJson_
19798
+ trackToJson
19799
19799
  };
19800
19800
 
19801
19801
  /**
@@ -20759,6 +20759,16 @@ class TextTrackList extends TrackList {
20759
20759
  }
20760
20760
  }
20761
20761
  }
20762
+
20763
+ /**
20764
+ * Creates a serializable array of objects that contains serialized copies
20765
+ * of each text track.
20766
+ *
20767
+ * @return {Object[]} A serializable list of objects for the text track list
20768
+ */
20769
+ toJSON() {
20770
+ return this.tracks_.map(track => track.toJSON());
20771
+ }
20762
20772
  }
20763
20773
 
20764
20774
  /**
@@ -21192,11 +21202,9 @@ const getAbsoluteURL = function (url) {
21192
21202
  */
21193
21203
  const getFileExtension = function (path) {
21194
21204
  if (typeof path === 'string') {
21195
- const splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/;
21196
- const pathParts = splitPathRe.exec(path);
21197
- if (pathParts) {
21198
- return pathParts.pop().toLowerCase();
21199
- }
21205
+ const cleanPath = path.split('?')[0].replace(/\/+$/, '');
21206
+ const match = cleanPath.match(/\.([^.\/]+)$/);
21207
+ return match ? match[1].toLowerCase() : '';
21200
21208
  }
21201
21209
  return '';
21202
21210
  };
@@ -21587,6 +21595,16 @@ class TextTrack extends Track {
21587
21595
  this.cues.setCues_(this.cues_);
21588
21596
  }
21589
21597
 
21598
+ /**
21599
+ * Creates a copy of the text track and makes it serializable
21600
+ * by removing circular dependencies.
21601
+ *
21602
+ * @return {Object} The track information as a serializable object
21603
+ */
21604
+ toJSON() {
21605
+ return textTrackConverter.trackToJson(this);
21606
+ }
21607
+
21590
21608
  /**
21591
21609
  * Remove a cue from our internal list
21592
21610
  *
@@ -25001,6 +25019,8 @@ class TextTrackDisplay extends Component$1 {
25001
25019
  this.updateDisplay(e);
25002
25020
  };
25003
25021
  player.on('loadstart', e => this.toggleDisplay(e));
25022
+ player.on('useractive', updateDisplayTextHandler);
25023
+ player.on('userinactive', updateDisplayTextHandler);
25004
25024
  player.on('texttrackchange', updateDisplayTextHandler);
25005
25025
  player.on('loadedmetadata', e => {
25006
25026
  this.updateDisplayOverlay();
@@ -25129,11 +25149,14 @@ class TextTrackDisplay extends Component$1 {
25129
25149
  }
25130
25150
 
25131
25151
  /**
25132
- * Update the displayed TextTrack when a either a {@link Player#texttrackchange} or
25133
- * a {@link Player#fullscreenchange} is fired.
25152
+ * Update the displayed {@link TextTrack} when either a {@link Player#texttrackchange},
25153
+ * a {@link Player#fullscreenchange}, a {@link Player#useractive}, or a
25154
+ * {@link Player#userinactive} is fired.
25134
25155
  *
25135
25156
  * @listens Player#texttrackchange
25136
25157
  * @listens Player#fullscreenchange
25158
+ * @listens Player#useractive
25159
+ * @listens Player#userinactive
25137
25160
  */
25138
25161
  updateDisplay() {
25139
25162
  const tracks = this.player_.textTracks();
@@ -25555,8 +25578,8 @@ class BigPlayButton extends Button {
25555
25578
  handleClick(event) {
25556
25579
  const playPromise = this.player_.play();
25557
25580
 
25558
- // exit early if clicked via the mouse
25559
- if (this.mouseused_ && 'clientX' in event && 'clientY' in event) {
25581
+ // exit early if tapped or clicked via the mouse
25582
+ if (event.type === 'tap' || this.mouseused_ && 'clientX' in event && 'clientY' in event) {
25560
25583
  silencePromise(playPromise);
25561
25584
  if (this.player_.tech(true)) {
25562
25585
  this.player_.tech(true).focus();
@@ -26021,6 +26044,8 @@ class CurrentTimeDisplay extends TimeDisplay {
26021
26044
  let time;
26022
26045
  if (this.player_.ended()) {
26023
26046
  time = this.player_.duration();
26047
+ } else if (event && event.target && typeof event.target.pendingSeekTime === 'function') {
26048
+ time = event.target.pendingSeekTime();
26024
26049
  } else {
26025
26050
  time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
26026
26051
  }
@@ -26767,6 +26792,10 @@ class Slider extends Component$1 {
26767
26792
  event.stopPropagation();
26768
26793
  this.stepForward();
26769
26794
  } else {
26795
+ if (this.pendingSeekTime()) {
26796
+ this.pendingSeekTime(null);
26797
+ this.userSeek_(this.player_.currentTime());
26798
+ }
26770
26799
  super.handleKeyDown(event);
26771
26800
  }
26772
26801
 
@@ -27152,13 +27181,18 @@ class PlayProgressBar extends Component$1 {
27152
27181
  * @param {number} seekBarPoint
27153
27182
  * A number from 0 to 1, representing a horizontal reference point
27154
27183
  * from the left edge of the {@link SeekBar}
27184
+ *
27185
+ * @param {Event} [event]
27186
+ * The `timeupdate` event that caused this function to run.
27155
27187
  */
27156
- update(seekBarRect, seekBarPoint) {
27188
+ update(seekBarRect, seekBarPoint, event) {
27157
27189
  const timeTooltip = this.getChild('timeTooltip');
27158
27190
  if (!timeTooltip) {
27159
27191
  return;
27160
27192
  }
27161
- const time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
27193
+
27194
+ // Combined logic: if an event with a valid pendingSeekTime getter exists, use it.
27195
+ const time = event && event.target && typeof event.target.pendingSeekTime === 'function' ? event.target.pendingSeekTime() : this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
27162
27196
  timeTooltip.updateTime(seekBarRect, seekBarPoint, time);
27163
27197
  }
27164
27198
  }
@@ -27277,14 +27311,14 @@ class SeekBar extends Slider {
27277
27311
 
27278
27312
  // Avoid mutating the prototype's `children` array by creating a copy
27279
27313
  options.children = [...options.children];
27280
- const shouldDisableSeekWhileScrubbingOnMobile = player.options_.disableSeekWhileScrubbingOnMobile && (IS_IOS || IS_ANDROID);
27314
+ const shouldDisableSeekWhileScrubbing = player.options_.disableSeekWhileScrubbingOnMobile && (IS_IOS || IS_ANDROID) || player.options_.disableSeekWhileScrubbingOnSTV;
27281
27315
 
27282
27316
  // Add the TimeTooltip as a child if we are on desktop, or on mobile with `disableSeekWhileScrubbingOnMobile: true`
27283
- if (!IS_IOS && !IS_ANDROID || shouldDisableSeekWhileScrubbingOnMobile) {
27317
+ if (!IS_IOS && !IS_ANDROID || shouldDisableSeekWhileScrubbing) {
27284
27318
  options.children.splice(1, 0, 'mouseTimeDisplay');
27285
27319
  }
27286
27320
  super(player, options);
27287
- this.shouldDisableSeekWhileScrubbingOnMobile_ = shouldDisableSeekWhileScrubbingOnMobile;
27321
+ this.shouldDisableSeekWhileScrubbing_ = shouldDisableSeekWhileScrubbing;
27288
27322
  this.pendingSeekTime_ = null;
27289
27323
  this.setEventHandlers_();
27290
27324
  }
@@ -27401,7 +27435,7 @@ class SeekBar extends Slider {
27401
27435
 
27402
27436
  // update the progress bar time tooltip with the current time
27403
27437
  if (this.bar) {
27404
- this.bar.update(getBoundingClientRect(this.el()), this.getProgress());
27438
+ this.bar.update(getBoundingClientRect(this.el()), this.getProgress(), event);
27405
27439
  }
27406
27440
  });
27407
27441
  return percent;
@@ -27434,6 +27468,25 @@ class SeekBar extends Slider {
27434
27468
  return this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
27435
27469
  }
27436
27470
 
27471
+ /**
27472
+ * Getter and setter for pendingSeekTime.
27473
+ * Ensures the value is clamped between 0 and duration.
27474
+ *
27475
+ * @param {number|null} [time] - Optional. The new pending seek time, can be a number or null.
27476
+ * @return {number|null} - The current pending seek time.
27477
+ */
27478
+ pendingSeekTime(time) {
27479
+ if (time !== undefined) {
27480
+ if (time !== null) {
27481
+ const duration = this.player_.duration();
27482
+ this.pendingSeekTime_ = Math.max(0, Math.min(time, duration));
27483
+ } else {
27484
+ this.pendingSeekTime_ = null;
27485
+ }
27486
+ }
27487
+ return this.pendingSeekTime_;
27488
+ }
27489
+
27437
27490
  /**
27438
27491
  * Get the percentage of media played so far.
27439
27492
  *
@@ -27443,8 +27496,8 @@ class SeekBar extends Slider {
27443
27496
  getPercent() {
27444
27497
  // If we have a pending seek time, we are scrubbing on mobile and should set the slider percent
27445
27498
  // to reflect the current scrub location.
27446
- if (this.pendingSeekTime_) {
27447
- return this.pendingSeekTime_ / this.player_.duration();
27499
+ if (this.pendingSeekTime() !== null) {
27500
+ return this.pendingSeekTime() / this.player_.duration();
27448
27501
  }
27449
27502
  const currentTime = this.getCurrentTime_();
27450
27503
  let percent;
@@ -27481,7 +27534,7 @@ class SeekBar extends Slider {
27481
27534
 
27482
27535
  // Don't pause if we are on mobile and `disableSeekWhileScrubbingOnMobile: true`.
27483
27536
  // In that case, playback should continue while the player scrubs to a new location.
27484
- if (!this.shouldDisableSeekWhileScrubbingOnMobile_) {
27537
+ if (!this.shouldDisableSeekWhileScrubbing_) {
27485
27538
  this.player_.pause();
27486
27539
  }
27487
27540
  super.handleMouseDown(event);
@@ -27542,8 +27595,8 @@ class SeekBar extends Slider {
27542
27595
  }
27543
27596
 
27544
27597
  // if on mobile and `disableSeekWhileScrubbingOnMobile: true`, keep track of the desired seek point but we won't initiate the seek until 'touchend'
27545
- if (this.shouldDisableSeekWhileScrubbingOnMobile_) {
27546
- this.pendingSeekTime_ = newTime;
27598
+ if (this.shouldDisableSeekWhileScrubbing_) {
27599
+ this.pendingSeekTime(newTime);
27547
27600
  } else {
27548
27601
  this.userSeek_(newTime);
27549
27602
  }
@@ -27586,9 +27639,9 @@ class SeekBar extends Slider {
27586
27639
  this.player_.scrubbing(false);
27587
27640
 
27588
27641
  // If we have a pending seek time, then we have finished scrubbing on mobile and should initiate a seek.
27589
- if (this.pendingSeekTime_) {
27590
- this.userSeek_(this.pendingSeekTime_);
27591
- this.pendingSeekTime_ = null;
27642
+ if (this.pendingSeekTime() !== null) {
27643
+ this.userSeek_(this.pendingSeekTime());
27644
+ this.pendingSeekTime(null);
27592
27645
  }
27593
27646
 
27594
27647
  /**
@@ -27612,18 +27665,46 @@ class SeekBar extends Slider {
27612
27665
  }
27613
27666
  }
27614
27667
 
27668
+ /**
27669
+ * Handles pending seek time when `disableSeekWhileScrubbingOnSTV` is enabled.
27670
+ *
27671
+ * @param {number} stepAmount - The number of seconds to step (positive for forward, negative for backward).
27672
+ */
27673
+ handlePendingSeek_(stepAmount) {
27674
+ if (!this.player_.paused()) {
27675
+ this.player_.pause();
27676
+ }
27677
+ const currentPos = this.pendingSeekTime() !== null ? this.pendingSeekTime() : this.player_.currentTime();
27678
+ this.pendingSeekTime(currentPos + stepAmount);
27679
+ this.player_.trigger({
27680
+ type: 'timeupdate',
27681
+ target: this,
27682
+ manuallyTriggered: true
27683
+ });
27684
+ }
27685
+
27615
27686
  /**
27616
27687
  * Move more quickly fast forward for keyboard-only users
27617
27688
  */
27618
27689
  stepForward() {
27619
- this.userSeek_(this.player_.currentTime() + this.options().stepSeconds);
27690
+ // if `disableSeekWhileScrubbingOnSTV: true`, keep track of the desired seek point but we won't initiate the seek
27691
+ if (this.shouldDisableSeekWhileScrubbing_) {
27692
+ this.handlePendingSeek_(this.options().stepSeconds);
27693
+ } else {
27694
+ this.userSeek_(this.player_.currentTime() + this.options().stepSeconds);
27695
+ }
27620
27696
  }
27621
27697
 
27622
27698
  /**
27623
27699
  * Move more quickly rewind for keyboard-only users
27624
27700
  */
27625
27701
  stepBack() {
27626
- this.userSeek_(this.player_.currentTime() - this.options().stepSeconds);
27702
+ // if `disableSeekWhileScrubbingOnSTV: true`, keep track of the desired seek point but we won't initiate the seek
27703
+ if (this.shouldDisableSeekWhileScrubbing_) {
27704
+ this.handlePendingSeek_(-this.options().stepSeconds);
27705
+ } else {
27706
+ this.userSeek_(this.player_.currentTime() - this.options().stepSeconds);
27707
+ }
27627
27708
  }
27628
27709
 
27629
27710
  /**
@@ -27635,6 +27716,10 @@ class SeekBar extends Slider {
27635
27716
  *
27636
27717
  */
27637
27718
  handleAction(event) {
27719
+ if (this.pendingSeekTime() !== null) {
27720
+ this.userSeek_(this.pendingSeekTime());
27721
+ this.pendingSeekTime(null);
27722
+ }
27638
27723
  if (this.player_.paused()) {
27639
27724
  this.player_.play();
27640
27725
  } else {
@@ -32014,22 +32099,22 @@ class TrackSettingsControls extends Component$1 {
32014
32099
  super(player, options);
32015
32100
 
32016
32101
  // Create DOM elements
32017
- const defaultsDescription = this.localize('restore all settings to the default values');
32018
32102
  const resetButton = new Button(player, {
32019
- controlText: defaultsDescription,
32103
+ controlText: this.localize('restore all settings to the default values'),
32020
32104
  className: 'vjs-default-button'
32021
32105
  });
32022
32106
  resetButton.el().classList.remove('vjs-control', 'vjs-button');
32023
32107
  resetButton.el().textContent = this.localize('Reset');
32024
32108
  this.addChild(resetButton);
32109
+ const doneText = this.localize('Done');
32025
32110
  const doneButton = new Button(player, {
32026
- controlText: defaultsDescription,
32111
+ controlText: doneText,
32027
32112
  className: 'vjs-done-button'
32028
32113
  });
32029
32114
 
32030
32115
  // Remove unrequired style classes
32031
32116
  doneButton.el().classList.remove('vjs-control', 'vjs-button');
32032
- doneButton.el().textContent = this.localize('Done');
32117
+ doneButton.el().textContent = doneText;
32033
32118
  this.addChild(doneButton);
32034
32119
  }
32035
32120
 
@@ -35367,8 +35452,12 @@ Tech.registerTech('Html5', Html5);
35367
35452
  * @file player.js
35368
35453
  */
35369
35454
 
35370
- /** @import { TimeRange } from './utils/time' */
35455
+ /** @import AudioTrackList from './tracks/audio-track-list' */
35371
35456
  /** @import HtmlTrackElement from './tracks/html-track-element' */
35457
+ /** @import HtmlTrackElementList from './tracks/html-track-element-list' */
35458
+ /** @import TextTrackList from './tracks/text-track-list' */
35459
+ /** @import { TimeRange } from './utils/time' */
35460
+ /** @import VideoTrackList from './tracks/video-track-list' */
35372
35461
 
35373
35462
  /**
35374
35463
  * @callback PlayerReadyCallback
@@ -40358,6 +40447,7 @@ class Player extends Component$1 {
40358
40447
  *
40359
40448
  * @method Player.prototype.videoTracks
40360
40449
  */
40450
+ Player.prototype.videoTracks = () => {};
40361
40451
 
40362
40452
  /**
40363
40453
  * Get the {@link AudioTrackList}
@@ -40369,6 +40459,7 @@ class Player extends Component$1 {
40369
40459
  *
40370
40460
  * @method Player.prototype.audioTracks
40371
40461
  */
40462
+ Player.prototype.audioTracks = () => {};
40372
40463
 
40373
40464
  /**
40374
40465
  * Get the {@link TextTrackList}
@@ -40380,6 +40471,7 @@ class Player extends Component$1 {
40380
40471
  *
40381
40472
  * @method Player.prototype.textTracks
40382
40473
  */
40474
+ Player.prototype.textTracks = () => {};
40383
40475
 
40384
40476
  /**
40385
40477
  * Get the remote {@link TextTrackList}
@@ -40389,6 +40481,7 @@ class Player extends Component$1 {
40389
40481
  *
40390
40482
  * @method Player.prototype.remoteTextTracks
40391
40483
  */
40484
+ Player.prototype.remoteTextTracks = () => {};
40392
40485
 
40393
40486
  /**
40394
40487
  * Get the remote {@link HtmlTrackElementList} tracks.
@@ -40398,7 +40491,7 @@ class Player extends Component$1 {
40398
40491
  *
40399
40492
  * @method Player.prototype.remoteTextTrackEls
40400
40493
  */
40401
-
40494
+ Player.prototype.remoteTextTrackEls = () => {};
40402
40495
  ALL.names.forEach(function (name) {
40403
40496
  const props = ALL[name];
40404
40497
  Player.prototype[props.getterName] = function () {
@@ -40485,7 +40578,8 @@ Player.prototype.options_ = {
40485
40578
  },
40486
40579
  // Default smooth seeking to false
40487
40580
  enableSmoothSeeking: false,
40488
- disableSeekWhileScrubbingOnMobile: false
40581
+ disableSeekWhileScrubbingOnMobile: false,
40582
+ disableSeekWhileScrubbingOnSTV: false
40489
40583
  };
40490
40584
  TECH_EVENTS_RETRIGGER.forEach(function (event) {
40491
40585
  Player.prototype[`handleTech${toTitleCase$1(event)}_`] = function () {
@@ -41577,9 +41671,13 @@ videojs.trigger = trigger;
41577
41671
  * @see https://github.com/Raynos/xhr
41578
41672
  */
41579
41673
  videojs.xhr = XHR;
41674
+ videojs.TrackList = TrackList;
41580
41675
  videojs.TextTrack = TextTrack;
41676
+ videojs.TextTrackList = TextTrackList;
41581
41677
  videojs.AudioTrack = AudioTrack;
41678
+ videojs.AudioTrackList = AudioTrackList;
41582
41679
  videojs.VideoTrack = VideoTrack;
41680
+ videojs.VideoTrackList = VideoTrackList;
41583
41681
  ['isEl', 'isTextNode', 'createEl', 'hasClass', 'addClass', 'removeClass', 'toggleClass', 'setAttributes', 'getAttributes', 'emptyEl', 'appendContent', 'insertContent'].forEach(k => {
41584
41682
  videojs[k] = function () {
41585
41683
  log$1.warn(`videojs.${k}() is deprecated; use videojs.dom.${k}() instead`);
@@ -612,16 +612,22 @@ const flip$1 = function (options) {
612
612
  const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
613
613
  const nextPlacement = placements[nextIndex];
614
614
  if (nextPlacement) {
615
- // Try next placement and re-run the lifecycle.
616
- return {
617
- data: {
618
- index: nextIndex,
619
- overflows: overflowsData
620
- },
621
- reset: {
622
- placement: nextPlacement
623
- }
624
- };
615
+ const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;
616
+ if (!ignoreCrossAxisOverflow ||
617
+ // We leave the current main axis only if every placement on that axis
618
+ // overflows the main axis.
619
+ overflowsData.every(d => d.overflows[0] > 0 && getSideAxis(d.placement) === initialSideAxis)) {
620
+ // Try next placement and re-run the lifecycle.
621
+ return {
622
+ data: {
623
+ index: nextIndex,
624
+ overflows: overflowsData
625
+ },
626
+ reset: {
627
+ placement: nextPlacement
628
+ }
629
+ };
630
+ }
625
631
  }
626
632
 
627
633
  // First, find the candidates that fit on the mainAxis side of overflow,
@@ -1557,6 +1563,12 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
1557
1563
  scrollTop: 0
1558
1564
  };
1559
1565
  const offsets = createCoords(0);
1566
+
1567
+ // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
1568
+ // Firefox with layout.scrollbar.side = 3 in about:config to test this.
1569
+ function setLeftRTLScrollbarOffset() {
1570
+ offsets.x = getWindowScrollBarX(documentElement);
1571
+ }
1560
1572
  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
1561
1573
  if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
1562
1574
  scroll = getNodeScroll(offsetParent);
@@ -1566,11 +1578,12 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
1566
1578
  offsets.x = offsetRect.x + offsetParent.clientLeft;
1567
1579
  offsets.y = offsetRect.y + offsetParent.clientTop;
1568
1580
  } else if (documentElement) {
1569
- // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
1570
- // Firefox with layout.scrollbar.side = 3 in about:config to test this.
1571
- offsets.x = getWindowScrollBarX(documentElement);
1581
+ setLeftRTLScrollbarOffset();
1572
1582
  }
1573
1583
  }
1584
+ if (isFixed && !isOffsetParentAnElement && documentElement) {
1585
+ setLeftRTLScrollbarOffset();
1586
+ }
1574
1587
  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
1575
1588
  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
1576
1589
  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
@@ -1747,7 +1760,7 @@ function observeMove(element, onMove) {
1747
1760
  // Handle <iframe>s
1748
1761
  root: root.ownerDocument
1749
1762
  });
1750
- } catch (e) {
1763
+ } catch (_e) {
1751
1764
  io = new IntersectionObserver(handleObserve, options);
1752
1765
  }
1753
1766
  io.observe(element);
@@ -1964,6 +1977,7 @@ class Popup extends vividElement.VividElement {
1964
1977
  this.placementStrategy = PlacementStrategy.Flip;
1965
1978
  this.animationFrame = false;
1966
1979
  this.strategy = "fixed";
1980
+ this.offset = null;
1967
1981
  this.#autoUpdateCallback = () => {
1968
1982
  this.#lastPositionUpdate = this.updatePosition();
1969
1983
  return this.#lastPositionUpdate;
@@ -1983,13 +1997,17 @@ class Popup extends vividElement.VividElement {
1983
1997
  }
1984
1998
  })
1985
1999
  ];
2000
+ let offsetValue = this.offset ?? 0;
1986
2001
  if (this.arrow) {
2002
+ offsetValue += 12;
1987
2003
  middleware = [
1988
- offset(12),
1989
2004
  ...middleware,
1990
2005
  arrow({ element: this.arrowEl, padding: 10 })
1991
2006
  ];
1992
2007
  }
2008
+ if (offsetValue > 0) {
2009
+ middleware.unshift(offset(offsetValue));
2010
+ }
1993
2011
  return middleware;
1994
2012
  }
1995
2013
  #cleanup;
@@ -2138,6 +2156,9 @@ __decorateClass([
2138
2156
  __decorateClass([
2139
2157
  vividElement.attr({ mode: "fromView" })
2140
2158
  ], Popup.prototype, "strategy");
2159
+ __decorateClass([
2160
+ vividElement.attr({ attribute: "offset", converter: vividElement.nullableNumberConverter })
2161
+ ], Popup.prototype, "offset");
2141
2162
  __decorateClass([
2142
2163
  vividElement.observable
2143
2164
  ], Popup.prototype, "anchor");
@@ -1,6 +1,6 @@
1
1
  import { B as Button, b as buttonDefinition } from './definition11.js';
2
2
  import { E as Elevation, e as elevationDefinition } from './definition65.js';
3
- import { V as VividElement, a as attr, o as observable, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
3
+ import { V as VividElement, a as attr, n as nullableNumberConverter, o as observable, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
4
4
  import { r as ref } from './ref.js';
5
5
  import { c as classNames } from './class-names.js';
6
6
  import { w as when } from './when.js';
@@ -610,16 +610,22 @@ const flip$1 = function (options) {
610
610
  const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
611
611
  const nextPlacement = placements[nextIndex];
612
612
  if (nextPlacement) {
613
- // Try next placement and re-run the lifecycle.
614
- return {
615
- data: {
616
- index: nextIndex,
617
- overflows: overflowsData
618
- },
619
- reset: {
620
- placement: nextPlacement
621
- }
622
- };
613
+ const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;
614
+ if (!ignoreCrossAxisOverflow ||
615
+ // We leave the current main axis only if every placement on that axis
616
+ // overflows the main axis.
617
+ overflowsData.every(d => d.overflows[0] > 0 && getSideAxis(d.placement) === initialSideAxis)) {
618
+ // Try next placement and re-run the lifecycle.
619
+ return {
620
+ data: {
621
+ index: nextIndex,
622
+ overflows: overflowsData
623
+ },
624
+ reset: {
625
+ placement: nextPlacement
626
+ }
627
+ };
628
+ }
623
629
  }
624
630
 
625
631
  // First, find the candidates that fit on the mainAxis side of overflow,
@@ -1555,6 +1561,12 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
1555
1561
  scrollTop: 0
1556
1562
  };
1557
1563
  const offsets = createCoords(0);
1564
+
1565
+ // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
1566
+ // Firefox with layout.scrollbar.side = 3 in about:config to test this.
1567
+ function setLeftRTLScrollbarOffset() {
1568
+ offsets.x = getWindowScrollBarX(documentElement);
1569
+ }
1558
1570
  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
1559
1571
  if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
1560
1572
  scroll = getNodeScroll(offsetParent);
@@ -1564,11 +1576,12 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
1564
1576
  offsets.x = offsetRect.x + offsetParent.clientLeft;
1565
1577
  offsets.y = offsetRect.y + offsetParent.clientTop;
1566
1578
  } else if (documentElement) {
1567
- // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
1568
- // Firefox with layout.scrollbar.side = 3 in about:config to test this.
1569
- offsets.x = getWindowScrollBarX(documentElement);
1579
+ setLeftRTLScrollbarOffset();
1570
1580
  }
1571
1581
  }
1582
+ if (isFixed && !isOffsetParentAnElement && documentElement) {
1583
+ setLeftRTLScrollbarOffset();
1584
+ }
1572
1585
  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
1573
1586
  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
1574
1587
  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
@@ -1745,7 +1758,7 @@ function observeMove(element, onMove) {
1745
1758
  // Handle <iframe>s
1746
1759
  root: root.ownerDocument
1747
1760
  });
1748
- } catch (e) {
1761
+ } catch (_e) {
1749
1762
  io = new IntersectionObserver(handleObserve, options);
1750
1763
  }
1751
1764
  io.observe(element);
@@ -1962,6 +1975,7 @@ class Popup extends VividElement {
1962
1975
  this.placementStrategy = PlacementStrategy.Flip;
1963
1976
  this.animationFrame = false;
1964
1977
  this.strategy = "fixed";
1978
+ this.offset = null;
1965
1979
  this.#autoUpdateCallback = () => {
1966
1980
  this.#lastPositionUpdate = this.updatePosition();
1967
1981
  return this.#lastPositionUpdate;
@@ -1981,13 +1995,17 @@ class Popup extends VividElement {
1981
1995
  }
1982
1996
  })
1983
1997
  ];
1998
+ let offsetValue = this.offset ?? 0;
1984
1999
  if (this.arrow) {
2000
+ offsetValue += 12;
1985
2001
  middleware = [
1986
- offset(12),
1987
2002
  ...middleware,
1988
2003
  arrow({ element: this.arrowEl, padding: 10 })
1989
2004
  ];
1990
2005
  }
2006
+ if (offsetValue > 0) {
2007
+ middleware.unshift(offset(offsetValue));
2008
+ }
1991
2009
  return middleware;
1992
2010
  }
1993
2011
  #cleanup;
@@ -2136,6 +2154,9 @@ __decorateClass([
2136
2154
  __decorateClass([
2137
2155
  attr({ mode: "fromView" })
2138
2156
  ], Popup.prototype, "strategy");
2157
+ __decorateClass([
2158
+ attr({ attribute: "offset", converter: nullableNumberConverter })
2159
+ ], Popup.prototype, "offset");
2139
2160
  __decorateClass([
2140
2161
  observable
2141
2162
  ], Popup.prototype, "anchor");
@@ -3,11 +3,11 @@ export type FeedbackType = 'none' | 'helper' | 'error' | 'success';
3
3
  declare const FeedbackMessage_base: {
4
4
  new (...args: any[]): {
5
5
  readonly locale: import("../localization/Locale").Locale;
6
+ connectedCallback(): void;
6
7
  specialHandling: boolean;
7
8
  _vividAriaBehaviour: import("../aria/aria-mixin").VividAriaBehaviour;
8
9
  readonly $fastController: import("@microsoft/fast-element").Controller;
9
10
  $emit(type: string, detail?: any, options?: Omit<CustomEventInit<any>, "detail"> | undefined): boolean | void;
10
- connectedCallback(): void;
11
11
  disconnectedCallback(): void;
12
12
  attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
13
13
  accessKey: string;