stormcloud-video-player 0.7.9 → 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.
package/lib/index.js CHANGED
@@ -367,7 +367,7 @@ function _ts_values(o) {
367
367
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
368
368
  }
369
369
  // src/ui/StormcloudVideoPlayer.tsx
370
- import React2, { useEffect as useEffect2, useRef as useRef2, useMemo, useCallback as useCallback2 } from "react";
370
+ import React2, { useEffect as useEffect2, useRef as useRef2, useMemo as useMemo2, useCallback as useCallback2 } from "react";
371
371
  // src/player/StormcloudVideoPlayer.ts
372
372
  import Hls from "hls.js";
373
373
  // src/sdk/vastParser.ts
@@ -6016,7 +6016,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
6016
6016
  // src/ui/StormcloudVideoPlayer.tsx
6017
6017
  import { FaPlay, FaPause, FaVolumeUp, FaVolumeMute, FaVolumeDown, FaExpand, FaCompress, FaCog, FaTimes } from "react-icons/fa";
6018
6018
  // src/ui/OverlayRenderer.tsx
6019
- import React, { useEffect, useRef, useState, useCallback } from "react";
6019
+ import React, { useEffect, useRef, useState, useCallback, useMemo } from "react";
6020
6020
  // src/utils/overlays.ts
6021
6021
  var OVERLAY_API_BASE = "https://adstorm.co/api-adstorm-dev";
6022
6022
  function timeStringToSeconds(timeStr) {
@@ -7065,10 +7065,13 @@ function hexToRgb(hex) {
7065
7065
  var num = parseInt(clean.length === 3 ? clean.replace(/./g, "$&$&") : clean, 16);
7066
7066
  return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
7067
7067
  }
7068
+ var FADE_DURATION_MS = 1e3;
7068
7069
  var OverlayRenderer = function OverlayRenderer(param) {
7069
7070
  var overlays = param.overlays, currentTime = param.currentTime, videoRef = param.videoRef, coordinateSpace = param.coordinateSpace;
7070
7071
  var _useState = _sliced_to_array(useState(null), 2), dims = _useState[0], setDims = _useState[1];
7071
7072
  var rafRef = useRef(null);
7073
+ var _useState1 = _sliced_to_array(useState(/* @__PURE__ */ new Map()), 2), fadeMap = _useState1[0], setFadeMap = _useState1[1];
7074
+ var removeTimers = useRef(/* @__PURE__ */ new Map());
7072
7075
  var updateDims = useCallback(function() {
7073
7076
  var video = videoRef.current;
7074
7077
  if (video) {
@@ -7099,10 +7102,181 @@ var OverlayRenderer = function OverlayRenderer(param) {
7099
7102
  }, [
7100
7103
  updateDims
7101
7104
  ]);
7102
- var activeOverlays = overlays.filter(function(o) {
7103
- return isOverlayActive(o, currentTime);
7104
- });
7105
- if (!dims || activeOverlays.length === 0) return null;
7105
+ var activeOverlays = useMemo(function() {
7106
+ return overlays.filter(function(o) {
7107
+ return isOverlayActive(o, currentTime);
7108
+ });
7109
+ }, [
7110
+ overlays,
7111
+ currentTime
7112
+ ]);
7113
+ useEffect(function() {
7114
+ var activeIds = new Set(activeOverlays.map(function(o) {
7115
+ return o.id;
7116
+ }));
7117
+ setFadeMap(function(prev) {
7118
+ var next = new Map(prev);
7119
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
7120
+ try {
7121
+ for(var _iterator = activeOverlays[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
7122
+ var overlay = _step.value;
7123
+ if (!next.has(overlay.id)) {
7124
+ next.set(overlay.id, {
7125
+ overlay: overlay,
7126
+ visible: false
7127
+ });
7128
+ } else {
7129
+ var existing = next.get(overlay.id);
7130
+ next.set(overlay.id, _object_spread_props(_object_spread({}, existing), {
7131
+ overlay: overlay
7132
+ }));
7133
+ }
7134
+ }
7135
+ } catch (err) {
7136
+ _didIteratorError = true;
7137
+ _iteratorError = err;
7138
+ } finally{
7139
+ try {
7140
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
7141
+ _iterator.return();
7142
+ }
7143
+ } finally{
7144
+ if (_didIteratorError) {
7145
+ throw _iteratorError;
7146
+ }
7147
+ }
7148
+ }
7149
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
7150
+ try {
7151
+ var _loop = function() {
7152
+ var _step_value = _sliced_to_array(_step1.value, 2), id = _step_value[0], state = _step_value[1];
7153
+ if (!activeIds.has(id) && state.visible) {
7154
+ next.set(id, _object_spread_props(_object_spread({}, state), {
7155
+ visible: false
7156
+ }));
7157
+ if (!removeTimers.current.has(id)) {
7158
+ var timer = setTimeout(function() {
7159
+ setFadeMap(function(m) {
7160
+ var updated = new Map(m);
7161
+ updated.delete(id);
7162
+ return updated;
7163
+ });
7164
+ removeTimers.current.delete(id);
7165
+ }, FADE_DURATION_MS);
7166
+ removeTimers.current.set(id, timer);
7167
+ }
7168
+ } else if (!activeIds.has(id) && !state.visible) {}
7169
+ };
7170
+ for(var _iterator1 = next[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true)_loop();
7171
+ } catch (err) {
7172
+ _didIteratorError1 = true;
7173
+ _iteratorError1 = err;
7174
+ } finally{
7175
+ try {
7176
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
7177
+ _iterator1.return();
7178
+ }
7179
+ } finally{
7180
+ if (_didIteratorError1) {
7181
+ throw _iteratorError1;
7182
+ }
7183
+ }
7184
+ }
7185
+ return next;
7186
+ });
7187
+ }, [
7188
+ activeOverlays
7189
+ ]);
7190
+ useEffect(function() {
7191
+ var toFadeIn = [];
7192
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
7193
+ try {
7194
+ var _loop = function() {
7195
+ var _step_value = _sliced_to_array(_step.value, 2), id = _step_value[0], state = _step_value[1];
7196
+ if (!state.visible) {
7197
+ var isActive = activeOverlays.some(function(o) {
7198
+ return o.id === id;
7199
+ });
7200
+ if (isActive) toFadeIn.push(id);
7201
+ }
7202
+ };
7203
+ for(var _iterator = fadeMap[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();
7204
+ } catch (err) {
7205
+ _didIteratorError = true;
7206
+ _iteratorError = err;
7207
+ } finally{
7208
+ try {
7209
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
7210
+ _iterator.return();
7211
+ }
7212
+ } finally{
7213
+ if (_didIteratorError) {
7214
+ throw _iteratorError;
7215
+ }
7216
+ }
7217
+ }
7218
+ if (toFadeIn.length === 0) return;
7219
+ var raf = requestAnimationFrame(function() {
7220
+ setFadeMap(function(prev) {
7221
+ var next = new Map(prev);
7222
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
7223
+ try {
7224
+ for(var _iterator = toFadeIn[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
7225
+ var id = _step.value;
7226
+ var state = next.get(id);
7227
+ if (state) next.set(id, _object_spread_props(_object_spread({}, state), {
7228
+ visible: true
7229
+ }));
7230
+ }
7231
+ } catch (err) {
7232
+ _didIteratorError = true;
7233
+ _iteratorError = err;
7234
+ } finally{
7235
+ try {
7236
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
7237
+ _iterator.return();
7238
+ }
7239
+ } finally{
7240
+ if (_didIteratorError) {
7241
+ throw _iteratorError;
7242
+ }
7243
+ }
7244
+ }
7245
+ return next;
7246
+ });
7247
+ });
7248
+ return function() {
7249
+ return cancelAnimationFrame(raf);
7250
+ };
7251
+ }, [
7252
+ fadeMap,
7253
+ activeOverlays
7254
+ ]);
7255
+ useEffect(function() {
7256
+ return function() {
7257
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
7258
+ try {
7259
+ for(var _iterator = removeTimers.current.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
7260
+ var timer = _step.value;
7261
+ clearTimeout(timer);
7262
+ }
7263
+ } catch (err) {
7264
+ _didIteratorError = true;
7265
+ _iteratorError = err;
7266
+ } finally{
7267
+ try {
7268
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
7269
+ _iterator.return();
7270
+ }
7271
+ } finally{
7272
+ if (_didIteratorError) {
7273
+ throw _iteratorError;
7274
+ }
7275
+ }
7276
+ }
7277
+ };
7278
+ }, []);
7279
+ if (!dims || fadeMap.size === 0) return null;
7106
7280
  return /* @__PURE__ */ jsx("div", {
7107
7281
  "aria-hidden": "true",
7108
7282
  style: {
@@ -7115,14 +7289,16 @@ var OverlayRenderer = function OverlayRenderer(param) {
7115
7289
  overflow: "hidden",
7116
7290
  zIndex: 8
7117
7291
  },
7118
- children: activeOverlays.map(function(overlay) {
7292
+ children: _to_consumable_array(fadeMap.values()).map(function(param) {
7293
+ var overlay = param.overlay, visible = param.visible;
7119
7294
  var scaleX = (coordinateSpace === null || coordinateSpace === void 0 ? void 0 : coordinateSpace.width) ? dims.displayWidth / coordinateSpace.width : dims.scaleX;
7120
7295
  var scaleY = (coordinateSpace === null || coordinateSpace === void 0 ? void 0 : coordinateSpace.height) ? dims.displayHeight / coordinateSpace.height : dims.scaleY;
7121
7296
  var left = overlay.x * scaleX;
7122
7297
  var top = overlay.y * scaleY;
7123
7298
  var width = overlay.width * scaleX;
7124
7299
  var height = overlay.height * scaleY;
7125
- var opacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
7300
+ var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
7301
+ var opacity = visible ? baseOpacity : 0;
7126
7302
  var sz = {
7127
7303
  w: width,
7128
7304
  h: height
@@ -7135,6 +7311,7 @@ var OverlayRenderer = function OverlayRenderer(param) {
7135
7311
  width: "".concat(width, "px"),
7136
7312
  height: "".concat(height, "px"),
7137
7313
  opacity: opacity,
7314
+ transition: "opacity ".concat(FADE_DURATION_MS, "ms ease"),
7138
7315
  zIndex: overlay.z_index,
7139
7316
  overflow: "hidden"
7140
7317
  },
@@ -7404,7 +7581,7 @@ var StormcloudVideoPlayerComponent = React2.memo(function(props) {
7404
7581
  var debugPanelBottomOffset = shouldShowEnhancedControls ? Math.max(74, 92 * responsiveScale) : Math.max(52, 58 * responsiveScale);
7405
7582
  var panelBaseRight = PANEL_BASE_RIGHT_OFFSET * responsiveScale;
7406
7583
  var debugPanelRightOffset = showAiPanel && !shouldStackPanels ? panelBaseRight + analyzerPanelWidth + panelGap : panelBaseRight;
7407
- var criticalPropsKey = useMemo(function() {
7584
+ var criticalPropsKey = useMemo2(function() {
7408
7585
  return CRITICAL_PROPS.map(function(prop) {
7409
7586
  return "".concat(prop, ":").concat(props[prop]);
7410
7587
  }).join("|");