stormcloud-video-player 0.7.8 → 0.7.10

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.
@@ -7,6 +7,25 @@ function _array_like_to_array(arr, len) {
7
7
  function _array_with_holes(arr) {
8
8
  if (Array.isArray(arr)) return arr;
9
9
  }
10
+ function _array_without_holes(arr) {
11
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
12
+ }
13
+ function _define_property(obj, key, value) {
14
+ if (key in obj) {
15
+ Object.defineProperty(obj, key, {
16
+ value: value,
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true
20
+ });
21
+ } else {
22
+ obj[key] = value;
23
+ }
24
+ return obj;
25
+ }
26
+ function _iterable_to_array(iter) {
27
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
28
+ }
10
29
  function _iterable_to_array_limit(arr, i) {
11
30
  var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
12
31
  if (_i == null) return;
@@ -34,9 +53,54 @@ function _iterable_to_array_limit(arr, i) {
34
53
  function _non_iterable_rest() {
35
54
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
36
55
  }
56
+ function _non_iterable_spread() {
57
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
58
+ }
59
+ function _object_spread(target) {
60
+ for(var i = 1; i < arguments.length; i++){
61
+ var source = arguments[i] != null ? arguments[i] : {};
62
+ var ownKeys = Object.keys(source);
63
+ if (typeof Object.getOwnPropertySymbols === "function") {
64
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
65
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
66
+ }));
67
+ }
68
+ ownKeys.forEach(function(key) {
69
+ _define_property(target, key, source[key]);
70
+ });
71
+ }
72
+ return target;
73
+ }
74
+ function ownKeys(object, enumerableOnly) {
75
+ var keys = Object.keys(object);
76
+ if (Object.getOwnPropertySymbols) {
77
+ var symbols = Object.getOwnPropertySymbols(object);
78
+ if (enumerableOnly) {
79
+ symbols = symbols.filter(function(sym) {
80
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
81
+ });
82
+ }
83
+ keys.push.apply(keys, symbols);
84
+ }
85
+ return keys;
86
+ }
87
+ function _object_spread_props(target, source) {
88
+ source = source != null ? source : {};
89
+ if (Object.getOwnPropertyDescriptors) {
90
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
91
+ } else {
92
+ ownKeys(Object(source)).forEach(function(key) {
93
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
94
+ });
95
+ }
96
+ return target;
97
+ }
37
98
  function _sliced_to_array(arr, i) {
38
99
  return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
39
100
  }
101
+ function _to_consumable_array(arr) {
102
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
103
+ }
40
104
  function _type_of(obj) {
41
105
  "@swc/helpers - typeof";
42
106
  return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
@@ -409,15 +473,38 @@ function ScoreBugOverlay(param) {
409
473
  })
410
474
  ]
411
475
  }),
412
- cfg.sponsorText && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
476
+ (cfg.sponsorText || cfg.sponsorImageUrl) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
413
477
  style: {
414
478
  fontSize: "0.7em",
415
479
  textAlign: "center",
416
- opacity: 0.5,
417
- padding: "".concat(f * 0.2, "px 0"),
418
- borderTop: "1px solid ".concat(cfg.accentColor, "40")
480
+ opacity: 0.6,
481
+ padding: "".concat(f * 0.2, "px ").concat(f * 0.4, "px"),
482
+ borderTop: "1px solid ".concat(cfg.accentColor, "40"),
483
+ display: "flex",
484
+ alignItems: "center",
485
+ justifyContent: "center",
486
+ gap: f * 0.4,
487
+ overflow: "hidden"
419
488
  },
420
- children: cfg.sponsorText
489
+ children: [
490
+ cfg.sponsorImageUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
491
+ src: cfg.sponsorImageUrl,
492
+ alt: "sponsor",
493
+ style: {
494
+ height: "".concat(f * 1.4, "px"),
495
+ objectFit: "contain",
496
+ flexShrink: 0
497
+ }
498
+ }),
499
+ cfg.sponsorText && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
500
+ style: {
501
+ overflow: "hidden",
502
+ textOverflow: "ellipsis",
503
+ whiteSpace: "nowrap"
504
+ },
505
+ children: cfg.sponsorText
506
+ })
507
+ ]
421
508
  })
422
509
  ]
423
510
  });
@@ -479,13 +566,35 @@ function LowerThirdOverlay(param) {
479
566
  })
480
567
  ]
481
568
  }),
482
- cfg.sponsorText && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
569
+ (cfg.sponsorText || cfg.sponsorImageUrl) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
483
570
  style: {
484
571
  fontSize: "0.7em",
485
- opacity: 0.4,
486
- padding: "0 ".concat(f * 1.2, "px ").concat(f * 0.4, "px")
572
+ opacity: 0.5,
573
+ padding: "0 ".concat(f * 1.2, "px ").concat(f * 0.4, "px"),
574
+ display: "flex",
575
+ alignItems: "center",
576
+ gap: f * 0.4,
577
+ overflow: "hidden"
487
578
  },
488
- children: cfg.sponsorText
579
+ children: [
580
+ cfg.sponsorImageUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
581
+ src: cfg.sponsorImageUrl,
582
+ alt: "sponsor",
583
+ style: {
584
+ height: "".concat(f * 1.4, "px"),
585
+ objectFit: "contain",
586
+ flexShrink: 0
587
+ }
588
+ }),
589
+ cfg.sponsorText && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
590
+ style: {
591
+ overflow: "hidden",
592
+ textOverflow: "ellipsis",
593
+ whiteSpace: "nowrap"
594
+ },
595
+ children: cfg.sponsorText
596
+ })
597
+ ]
489
598
  })
490
599
  ]
491
600
  });
@@ -642,6 +751,23 @@ function ComingUpNextOverlay(param) {
642
751
  children: cfg.scheduledTime
643
752
  })
644
753
  ]
754
+ }),
755
+ cfg.thumbnailUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
756
+ style: {
757
+ flexShrink: 0,
758
+ width: Math.max(40, size.h * 0.75),
759
+ overflow: "hidden"
760
+ },
761
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
762
+ src: cfg.thumbnailUrl,
763
+ alt: "thumbnail",
764
+ style: {
765
+ width: "100%",
766
+ height: "100%",
767
+ objectFit: "cover",
768
+ display: "block"
769
+ }
770
+ })
645
771
  })
646
772
  ]
647
773
  });
@@ -877,35 +1003,41 @@ function BreakingNewsOverlay(param) {
877
1003
  ]
878
1004
  });
879
1005
  }
1006
+ function calcCountdownRemaining(targetTime) {
1007
+ var diff = Math.max(0, new Date(targetTime).getTime() - Date.now());
1008
+ return {
1009
+ d: Math.floor(diff / 864e5),
1010
+ h: Math.floor(diff % 864e5 / 36e5),
1011
+ m: Math.floor(diff % 36e5 / 6e4),
1012
+ s: Math.floor(diff % 6e4 / 1e3),
1013
+ expired: diff === 0
1014
+ };
1015
+ }
880
1016
  function CountdownOverlay(param) {
881
1017
  var overlay = param.overlay, size = param.size;
1018
+ var _ref;
882
1019
  var cfg = parseConfig(overlay.content);
883
- var _ref = _sliced_to_array((0, import_react.useState)({
884
- d: 0,
885
- h: 0,
886
- m: 0,
887
- s: 0
888
- }), 2), remaining = _ref[0], setRemaining = _ref[1];
889
- (0, import_react.useEffect)(function() {
890
- if (!cfg) return;
891
- var update = function update() {
892
- var target = new Date(cfg.targetTime).getTime();
893
- var now = Date.now();
894
- var diff = Math.max(0, target - now);
895
- setRemaining({
896
- d: Math.floor(diff / 864e5),
897
- h: Math.floor(diff % 864e5 / 36e5),
898
- m: Math.floor(diff % 36e5 / 6e4),
899
- s: Math.floor(diff % 6e4 / 1e3)
900
- });
1020
+ var targetTime = (_ref = cfg === null || cfg === void 0 ? void 0 : cfg.targetTime) !== null && _ref !== void 0 ? _ref : "";
1021
+ var _ref1 = _sliced_to_array((0, import_react.useState)(function() {
1022
+ return targetTime ? calcCountdownRemaining(targetTime) : {
1023
+ d: 0,
1024
+ h: 0,
1025
+ m: 0,
1026
+ s: 0,
1027
+ expired: false
901
1028
  };
902
- update();
903
- var id = setInterval(update, 1e3);
1029
+ }), 2), remaining = _ref1[0], setRemaining = _ref1[1];
1030
+ (0, import_react.useEffect)(function() {
1031
+ if (!targetTime) return;
1032
+ setRemaining(calcCountdownRemaining(targetTime));
1033
+ var id = setInterval(function() {
1034
+ return setRemaining(calcCountdownRemaining(targetTime));
1035
+ }, 1e3);
904
1036
  return function() {
905
1037
  return clearInterval(id);
906
1038
  };
907
1039
  }, [
908
- cfg === null || cfg === void 0 ? void 0 : cfg.targetTime
1040
+ targetTime
909
1041
  ]);
910
1042
  if (!cfg) return null;
911
1043
  var f = Math.max(6, size.w * 0.055);
@@ -964,7 +1096,14 @@ function CountdownOverlay(param) {
964
1096
  },
965
1097
  children: cfg.eventName
966
1098
  }),
967
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1099
+ remaining.expired ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1100
+ style: {
1101
+ fontSize: "1em",
1102
+ fontWeight: 700,
1103
+ opacity: 0.6
1104
+ },
1105
+ children: cfg.message || "Event ended"
1106
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
968
1107
  style: {
969
1108
  display: "flex",
970
1109
  gap: f * 0.6,
@@ -1013,7 +1152,7 @@ function CountdownOverlay(param) {
1013
1152
  }, u.label);
1014
1153
  })
1015
1154
  }),
1016
- cfg.message && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1155
+ !remaining.expired && cfg.message && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1017
1156
  style: {
1018
1157
  fontSize: "0.8em",
1019
1158
  opacity: 0.6,
@@ -1058,10 +1197,13 @@ function hexToRgb(hex) {
1058
1197
  var num = parseInt(clean.length === 3 ? clean.replace(/./g, "$&$&") : clean, 16);
1059
1198
  return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
1060
1199
  }
1200
+ var FADE_DURATION_MS = 1e3;
1061
1201
  var OverlayRenderer = function OverlayRenderer(param) {
1062
1202
  var overlays = param.overlays, currentTime = param.currentTime, videoRef = param.videoRef, coordinateSpace = param.coordinateSpace;
1063
1203
  var _ref = _sliced_to_array((0, import_react.useState)(null), 2), dims = _ref[0], setDims = _ref[1];
1064
1204
  var rafRef = (0, import_react.useRef)(null);
1205
+ var _ref1 = _sliced_to_array((0, import_react.useState)(/* @__PURE__ */ new Map()), 2), fadeMap = _ref1[0], setFadeMap = _ref1[1];
1206
+ var removeTimers = (0, import_react.useRef)(/* @__PURE__ */ new Map());
1065
1207
  var updateDims = (0, import_react.useCallback)(function() {
1066
1208
  var video = videoRef.current;
1067
1209
  if (video) {
@@ -1092,10 +1234,181 @@ var OverlayRenderer = function OverlayRenderer(param) {
1092
1234
  }, [
1093
1235
  updateDims
1094
1236
  ]);
1095
- var activeOverlays = overlays.filter(function(o) {
1096
- return isOverlayActive(o, currentTime);
1097
- });
1098
- if (!dims || activeOverlays.length === 0) return null;
1237
+ var activeOverlays = (0, import_react.useMemo)(function() {
1238
+ return overlays.filter(function(o) {
1239
+ return isOverlayActive(o, currentTime);
1240
+ });
1241
+ }, [
1242
+ overlays,
1243
+ currentTime
1244
+ ]);
1245
+ (0, import_react.useEffect)(function() {
1246
+ var activeIds = new Set(activeOverlays.map(function(o) {
1247
+ return o.id;
1248
+ }));
1249
+ setFadeMap(function(prev) {
1250
+ var next = new Map(prev);
1251
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1252
+ try {
1253
+ for(var _iterator = activeOverlays[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1254
+ var overlay = _step.value;
1255
+ if (!next.has(overlay.id)) {
1256
+ next.set(overlay.id, {
1257
+ overlay: overlay,
1258
+ visible: false
1259
+ });
1260
+ } else {
1261
+ var existing = next.get(overlay.id);
1262
+ next.set(overlay.id, _object_spread_props(_object_spread({}, existing), {
1263
+ overlay: overlay
1264
+ }));
1265
+ }
1266
+ }
1267
+ } catch (err) {
1268
+ _didIteratorError = true;
1269
+ _iteratorError = err;
1270
+ } finally{
1271
+ try {
1272
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1273
+ _iterator.return();
1274
+ }
1275
+ } finally{
1276
+ if (_didIteratorError) {
1277
+ throw _iteratorError;
1278
+ }
1279
+ }
1280
+ }
1281
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
1282
+ try {
1283
+ var _loop = function() {
1284
+ var _step_value = _sliced_to_array(_step1.value, 2), id = _step_value[0], state = _step_value[1];
1285
+ if (!activeIds.has(id) && state.visible) {
1286
+ next.set(id, _object_spread_props(_object_spread({}, state), {
1287
+ visible: false
1288
+ }));
1289
+ if (!removeTimers.current.has(id)) {
1290
+ var timer = setTimeout(function() {
1291
+ setFadeMap(function(m) {
1292
+ var updated = new Map(m);
1293
+ updated.delete(id);
1294
+ return updated;
1295
+ });
1296
+ removeTimers.current.delete(id);
1297
+ }, FADE_DURATION_MS);
1298
+ removeTimers.current.set(id, timer);
1299
+ }
1300
+ } else if (!activeIds.has(id) && !state.visible) {}
1301
+ };
1302
+ for(var _iterator1 = next[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true)_loop();
1303
+ } catch (err) {
1304
+ _didIteratorError1 = true;
1305
+ _iteratorError1 = err;
1306
+ } finally{
1307
+ try {
1308
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
1309
+ _iterator1.return();
1310
+ }
1311
+ } finally{
1312
+ if (_didIteratorError1) {
1313
+ throw _iteratorError1;
1314
+ }
1315
+ }
1316
+ }
1317
+ return next;
1318
+ });
1319
+ }, [
1320
+ activeOverlays
1321
+ ]);
1322
+ (0, import_react.useEffect)(function() {
1323
+ var toFadeIn = [];
1324
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1325
+ try {
1326
+ var _loop = function() {
1327
+ var _step_value = _sliced_to_array(_step.value, 2), id = _step_value[0], state = _step_value[1];
1328
+ if (!state.visible) {
1329
+ var isActive = activeOverlays.some(function(o) {
1330
+ return o.id === id;
1331
+ });
1332
+ if (isActive) toFadeIn.push(id);
1333
+ }
1334
+ };
1335
+ for(var _iterator = fadeMap[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();
1336
+ } catch (err) {
1337
+ _didIteratorError = true;
1338
+ _iteratorError = err;
1339
+ } finally{
1340
+ try {
1341
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1342
+ _iterator.return();
1343
+ }
1344
+ } finally{
1345
+ if (_didIteratorError) {
1346
+ throw _iteratorError;
1347
+ }
1348
+ }
1349
+ }
1350
+ if (toFadeIn.length === 0) return;
1351
+ var raf = requestAnimationFrame(function() {
1352
+ setFadeMap(function(prev) {
1353
+ var next = new Map(prev);
1354
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1355
+ try {
1356
+ for(var _iterator = toFadeIn[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1357
+ var id = _step.value;
1358
+ var state = next.get(id);
1359
+ if (state) next.set(id, _object_spread_props(_object_spread({}, state), {
1360
+ visible: true
1361
+ }));
1362
+ }
1363
+ } catch (err) {
1364
+ _didIteratorError = true;
1365
+ _iteratorError = err;
1366
+ } finally{
1367
+ try {
1368
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1369
+ _iterator.return();
1370
+ }
1371
+ } finally{
1372
+ if (_didIteratorError) {
1373
+ throw _iteratorError;
1374
+ }
1375
+ }
1376
+ }
1377
+ return next;
1378
+ });
1379
+ });
1380
+ return function() {
1381
+ return cancelAnimationFrame(raf);
1382
+ };
1383
+ }, [
1384
+ fadeMap,
1385
+ activeOverlays
1386
+ ]);
1387
+ (0, import_react.useEffect)(function() {
1388
+ return function() {
1389
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1390
+ try {
1391
+ for(var _iterator = removeTimers.current.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1392
+ var timer = _step.value;
1393
+ clearTimeout(timer);
1394
+ }
1395
+ } catch (err) {
1396
+ _didIteratorError = true;
1397
+ _iteratorError = err;
1398
+ } finally{
1399
+ try {
1400
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1401
+ _iterator.return();
1402
+ }
1403
+ } finally{
1404
+ if (_didIteratorError) {
1405
+ throw _iteratorError;
1406
+ }
1407
+ }
1408
+ }
1409
+ };
1410
+ }, []);
1411
+ if (!dims || fadeMap.size === 0) return null;
1099
1412
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1100
1413
  "aria-hidden": "true",
1101
1414
  style: {
@@ -1108,14 +1421,16 @@ var OverlayRenderer = function OverlayRenderer(param) {
1108
1421
  overflow: "hidden",
1109
1422
  zIndex: 8
1110
1423
  },
1111
- children: activeOverlays.map(function(overlay) {
1424
+ children: _to_consumable_array(fadeMap.values()).map(function(param) {
1425
+ var overlay = param.overlay, visible = param.visible;
1112
1426
  var scaleX = (coordinateSpace === null || coordinateSpace === void 0 ? void 0 : coordinateSpace.width) ? dims.displayWidth / coordinateSpace.width : dims.scaleX;
1113
1427
  var scaleY = (coordinateSpace === null || coordinateSpace === void 0 ? void 0 : coordinateSpace.height) ? dims.displayHeight / coordinateSpace.height : dims.scaleY;
1114
1428
  var left = overlay.x * scaleX;
1115
1429
  var top = overlay.y * scaleY;
1116
1430
  var width = overlay.width * scaleX;
1117
1431
  var height = overlay.height * scaleY;
1118
- var opacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
1432
+ var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
1433
+ var opacity = visible ? baseOpacity : 0;
1119
1434
  var sz = {
1120
1435
  w: width,
1121
1436
  h: height
@@ -1128,6 +1443,7 @@ var OverlayRenderer = function OverlayRenderer(param) {
1128
1443
  width: "".concat(width, "px"),
1129
1444
  height: "".concat(height, "px"),
1130
1445
  opacity: opacity,
1446
+ transition: "opacity ".concat(FADE_DURATION_MS, "ms ease"),
1131
1447
  zIndex: overlay.z_index,
1132
1448
  overflow: "hidden"
1133
1449
  },