bitmovin-player-ui 3.78.0 → 3.80.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.
@@ -25,7 +25,6 @@ export declare class SubtitleOverlay extends Container<ContainerConfig> {
25
25
  private static readonly CLASS_CEA_608;
26
26
  private static readonly CEA608_NUM_ROWS;
27
27
  private static readonly CEA608_NUM_COLUMNS;
28
- private static readonly CEA608_ROW_OFFSET;
29
28
  private static readonly CEA608_COLUMN_OFFSET;
30
29
  constructor(config?: ContainerConfig);
31
30
  configure(player: PlayerAPI, uimanager: UIInstanceManager): void;
@@ -46,6 +45,7 @@ export declare class SubtitleLabel extends Label<SubtitleLabelConfig> {
46
45
  get vtt(): VTTProperties;
47
46
  get region(): string;
48
47
  get regionStyle(): string;
48
+ set regionStyle(style: string);
49
49
  }
50
50
  export declare class SubtitleRegionContainerManager {
51
51
  private subtitleOverlay;
@@ -154,17 +154,19 @@ var SubtitleOverlay = exports.SubtitleOverlay = /** @class */ (function (_super)
154
154
  };
155
155
  SubtitleOverlay.prototype.generateLabel = function (event) {
156
156
  // Sanitize cue data (must be done before the cue ID is generated in subtitleManager.cueEnter / update)
157
+ var region = event.region;
157
158
  if (event.position) {
158
159
  // Sometimes the positions are undefined, we assume them to be zero
159
160
  event.position.row = event.position.row || 0;
160
161
  event.position.column = event.position.column || 0;
162
+ region = region || "cea608-row-".concat(event.position.row);
161
163
  }
162
164
  var label = new SubtitleLabel({
163
165
  // Prefer the HTML subtitle text if set, else try generating a image tag as string from the image attribute,
164
166
  // else use the plain text
165
167
  text: event.html || ActiveSubtitleManager.generateImageTagText(event.image) || event.text,
166
168
  vtt: event.vtt,
167
- region: event.region,
169
+ region: region,
168
170
  regionStyle: event.regionStyle,
169
171
  });
170
172
  return label;
@@ -235,6 +237,7 @@ var SubtitleOverlay = exports.SubtitleOverlay = /** @class */ (function (_super)
235
237
  'font-size': "".concat(fontSize, "px"),
236
238
  'letter-spacing': "".concat(fontLetterSpacing, "px"),
237
239
  });
240
+ label.regionStyle = "line-height: ".concat(fontSize, "px;");
238
241
  }
239
242
  }
240
243
  };
@@ -265,11 +268,11 @@ var SubtitleOverlay = exports.SubtitleOverlay = /** @class */ (function (_super)
265
268
  }
266
269
  }
267
270
  label.getDomElement().css({
268
- 'left': "".concat(event.position.column * SubtitleOverlay.CEA608_COLUMN_OFFSET, "%"),
269
- 'top': "".concat(event.position.row * SubtitleOverlay.CEA608_ROW_OFFSET, "%"),
271
+ 'margin-left': "".concat(event.position.column * SubtitleOverlay.CEA608_COLUMN_OFFSET, "%"),
270
272
  'font-size': "".concat(fontSize, "px"),
271
273
  'letter-spacing': "".concat(fontLetterSpacing, "px"),
272
274
  });
275
+ label.regionStyle = "line-height: ".concat(fontSize, "px;");
273
276
  });
274
277
  var reset = function () {
275
278
  _this.getDomElement().removeClass(_this.prefixCss(SubtitleOverlay.CLASS_CEA_608));
@@ -283,7 +286,7 @@ var SubtitleOverlay = exports.SubtitleOverlay = /** @class */ (function (_super)
283
286
  }
284
287
  });
285
288
  player.on(player.exports.PlayerEvent.SourceUnloaded, reset);
286
- player.on(player.exports.PlayerEvent.SubtitleEnabled, reset);
289
+ player.on(player.exports.PlayerEvent.SubtitleEnable, reset);
287
290
  player.on(player.exports.PlayerEvent.SubtitleDisabled, reset);
288
291
  };
289
292
  SubtitleOverlay.prototype.enablePreviewSubtitleLabel = function () {
@@ -307,8 +310,6 @@ var SubtitleOverlay = exports.SubtitleOverlay = /** @class */ (function (_super)
307
310
  SubtitleOverlay.CEA608_NUM_ROWS = 15;
308
311
  // The number of columns in a cea608 grid
309
312
  SubtitleOverlay.CEA608_NUM_COLUMNS = 32;
310
- // The offset in percent for one row (which is also the height of a row)
311
- SubtitleOverlay.CEA608_ROW_OFFSET = 100 / SubtitleOverlay.CEA608_NUM_ROWS;
312
313
  // The offset in percent for one column (which is also the width of a column)
313
314
  SubtitleOverlay.CEA608_COLUMN_OFFSET = 100 / SubtitleOverlay.CEA608_NUM_COLUMNS;
314
315
  return SubtitleOverlay;
@@ -341,6 +342,9 @@ var SubtitleLabel = /** @class */ (function (_super) {
341
342
  get: function () {
342
343
  return this.config.regionStyle;
343
344
  },
345
+ set: function (style) {
346
+ this.config.regionStyle = style;
347
+ },
344
348
  enumerable: false,
345
349
  configurable: true
346
350
  });
@@ -16,7 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.ClickOverlay = exports.VolumeControlButton = exports.TitleBar = exports.SubtitleSelectBox = exports.SubtitleOverlay = exports.SeekBarLabel = exports.RecommendationOverlay = exports.ErrorMessageOverlay = exports.Component = exports.CastToggleButton = exports.CastStatusOverlay = exports.AudioTrackSelectBox = exports.AudioQualitySelectBox = exports.Label = exports.Container = exports.UIContainer = exports.Watermark = exports.VRToggleButton = exports.VolumeToggleButton = exports.VideoQualitySelectBox = exports.ToggleButton = exports.SettingsToggleButton = exports.SettingsPanel = exports.ItemSelectionList = exports.SelectBox = exports.SeekBar = exports.PlaybackToggleButton = exports.PlaybackTimeLabelMode = exports.PlaybackTimeLabel = exports.HugePlaybackToggleButton = exports.FullscreenToggleButton = exports.ControlBar = exports.Button = exports.ListOrientation = exports.ListNavigationGroup = exports.RootNavigationGroup = exports.NavigationGroup = exports.SpatialNavigation = exports.I18n = exports.i18n = exports.ErrorUtils = exports.StorageUtils = exports.BrowserUtils = exports.UIUtils = exports.PlayerUtils = exports.StringUtils = exports.ArrayUtils = exports.DemoFactory = exports.UIFactory = exports.version = void 0;
18
18
  exports.ListSelector = exports.QuickSeekButton = exports.ReplayButton = exports.SettingsPanelItem = exports.SubtitleSettingsPanelPage = exports.SettingsPanelPageOpenButton = exports.SettingsPanelPageBackButton = exports.SettingsPanelPage = exports.AudioTrackListBox = exports.SubtitleListBox = exports.ListBox = exports.SubtitleSettingsResetButton = exports.WindowOpacitySelectBox = exports.WindowColorSelectBox = exports.SubtitleSettingsLabel = exports.SubtitleSettingSelectBox = exports.FontSizeSelectBox = exports.FontOpacitySelectBox = exports.FontFamilySelectBox = exports.FontColorSelectBox = exports.CharacterEdgeSelectBox = exports.BackgroundOpacitySelectBox = exports.BackgroundColorSelectBox = exports.Spacer = exports.PictureInPictureToggleButton = exports.VolumeSlider = exports.AirPlayToggleButton = exports.MetadataLabelContent = exports.MetadataLabel = exports.CloseButton = exports.PlaybackToggleOverlay = exports.CastUIContainer = exports.BufferingOverlay = exports.HugeReplayButton = exports.PlaybackSpeedSelectBox = exports.AdClickOverlay = exports.AdMessageLabel = exports.AdSkipButton = void 0;
19
- exports.version = '3.78.0';
19
+ exports.version = '3.80.0';
20
20
  // Management
21
21
  __exportStar(require("./uimanager"), exports);
22
22
  __exportStar(require("./uiconfig"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bitmovin-player-ui",
3
- "version": "3.78.0",
3
+ "version": "3.80.0",
4
4
  "description": "Bitmovin Player UI Framework",
5
5
  "main": "./dist/js/framework/main.js",
6
6
  "types": "./dist/js/framework/main.d.ts",
@@ -1,3 +1,5 @@
1
+ @use 'sass:math';
2
+
1
3
  .#{$prefix}-ui-subtitle-overlay {
2
4
  &.#{$prefix}-cea608 {
3
5
 
@@ -6,18 +8,26 @@
6
8
  right: 3em;
7
9
  top: 2em;
8
10
 
9
- .#{$prefix}-subtitle-region-container.#{$prefix}-subtitle-position-default {
10
- bottom: 0;
11
+ .#{$prefix}-subtitle-region-container {
12
+ height: math.div(100%, 15);
11
13
  left: 0;
14
+ line-height: 1em;
12
15
  right: 0;
13
- top: 0;
16
+ text-align: left;
17
+
18
+ // Define positions for all 15 rows
19
+ @for $i from 0 through 14 {
20
+ &.#{$prefix}-subtitle-position-cea608-row-#{$i} {
21
+ top: math.div($i, 15) * 100%;
22
+ }
23
+ }
14
24
  }
15
25
 
16
26
  .#{$prefix}-ui-subtitle-label {
27
+ display: inline-block;
17
28
  font-family: 'Courier New', Courier, 'Nimbus Mono L', 'Cutive Mono', monospace;
18
- line-height: 1em;
19
- position: absolute;
20
29
  text-transform: uppercase;
30
+ vertical-align: bottom;
21
31
 
22
32
  // sass-lint:disable force-pseudo-nesting nesting-depth
23
33
  &:nth-child(1n-1)::after {
@@ -38,8 +38,6 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
38
38
  private static readonly CEA608_NUM_ROWS = 15;
39
39
  // The number of columns in a cea608 grid
40
40
  private static readonly CEA608_NUM_COLUMNS = 32;
41
- // The offset in percent for one row (which is also the height of a row)
42
- private static readonly CEA608_ROW_OFFSET = 100 / SubtitleOverlay.CEA608_NUM_ROWS;
43
41
  // The offset in percent for one column (which is also the width of a column)
44
42
  private static readonly CEA608_COLUMN_OFFSET = 100 / SubtitleOverlay.CEA608_NUM_COLUMNS;
45
43
 
@@ -198,10 +196,14 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
198
196
 
199
197
  generateLabel(event: SubtitleCueEvent): SubtitleLabel {
200
198
  // Sanitize cue data (must be done before the cue ID is generated in subtitleManager.cueEnter / update)
199
+ let region = event.region;
200
+
201
201
  if (event.position) {
202
202
  // Sometimes the positions are undefined, we assume them to be zero
203
203
  event.position.row = event.position.row || 0;
204
204
  event.position.column = event.position.column || 0;
205
+
206
+ region = region || `cea608-row-${event.position.row}`;
205
207
  }
206
208
 
207
209
  const label = new SubtitleLabel({
@@ -209,7 +211,7 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
209
211
  // else use the plain text
210
212
  text: event.html || ActiveSubtitleManager.generateImageTagText(event.image) || event.text,
211
213
  vtt: event.vtt,
212
- region: event.region,
214
+ region: region,
213
215
  regionStyle: event.regionStyle,
214
216
  });
215
217
 
@@ -287,6 +289,8 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
287
289
  'font-size': `${fontSize}px`,
288
290
  'letter-spacing': `${fontLetterSpacing}px`,
289
291
  });
292
+
293
+ label.regionStyle = `line-height: ${fontSize}px;`;
290
294
  }
291
295
  }
292
296
  };
@@ -321,11 +325,12 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
321
325
  }
322
326
 
323
327
  label.getDomElement().css({
324
- 'left': `${event.position.column * SubtitleOverlay.CEA608_COLUMN_OFFSET}%`,
325
- 'top': `${event.position.row * SubtitleOverlay.CEA608_ROW_OFFSET}%`,
328
+ 'margin-left': `${event.position.column * SubtitleOverlay.CEA608_COLUMN_OFFSET}%`,
326
329
  'font-size': `${fontSize}px`,
327
330
  'letter-spacing': `${fontLetterSpacing}px`,
328
331
  });
332
+
333
+ label.regionStyle = `line-height: ${fontSize}px;`;
329
334
  });
330
335
 
331
336
  const reset = () => {
@@ -342,7 +347,7 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
342
347
  });
343
348
 
344
349
  player.on(player.exports.PlayerEvent.SourceUnloaded, reset);
345
- player.on(player.exports.PlayerEvent.SubtitleEnabled, reset);
350
+ player.on(player.exports.PlayerEvent.SubtitleEnable, reset);
346
351
  player.on(player.exports.PlayerEvent.SubtitleDisabled, reset);
347
352
  }
348
353
 
@@ -400,6 +405,10 @@ export class SubtitleLabel extends Label<SubtitleLabelConfig> {
400
405
  get regionStyle(): string {
401
406
  return this.config.regionStyle;
402
407
  }
408
+
409
+ set regionStyle(style: string) {
410
+ this.config.regionStyle = style;
411
+ }
403
412
  }
404
413
 
405
414
  class ActiveSubtitleManager {