@zync/zync-screnplay-player 0.1.205 → 0.1.207

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 (32) hide show
  1. package/dist/bundle.js +1 -1
  2. package/dist/screenplay/RemotionRenderer/RemotionRenderer.js +18 -14
  3. package/dist/screenplay/RemotionRenderer/components/LottieAnimationGlobal.js +21 -21
  4. package/dist/screenplay/RemotionRenderer/components/layouts/DynamicTriangle.js +36 -6
  5. package/dist/screenplay/RemotionRenderer/components/layouts/Handoff.js +20 -7
  6. package/dist/screenplay/RemotionRenderer/components/layouts/IntroVideo.js +45 -8
  7. package/dist/screenplay/RemotionRenderer/components/layouts/Keyword.js +42 -9
  8. package/dist/screenplay/RemotionRenderer/components/layouts/KeywordStudioBackdrop.js +47 -10
  9. package/dist/screenplay/RemotionRenderer/components/layouts/MotionStill.js +42 -9
  10. package/dist/screenplay/RemotionRenderer/components/layouts/MotionStillStudioBackdrop.js +46 -9
  11. package/dist/screenplay/RemotionRenderer/components/layouts/SimpleFrame.js +21 -12
  12. package/dist/screenplay/RemotionRenderer/components/layouts/TextWithVideo.js +41 -8
  13. package/dist/screenplay/RemotionRenderer/components/utils/FaceCenteredVideo.js +50 -50
  14. package/dist/screenplay/RemotionRenderer/components/utils/PausableImg.js +4 -4
  15. package/dist/screenplay/RemotionRenderer/components/utils/README.md +80 -80
  16. package/dist/screenplay/RemotionRenderer/components/utils/StretchTextDemo.js +3 -3
  17. package/dist/screenplay/RemotionRenderer/helpers/convertToSeconds.js +8 -8
  18. package/dist/screenplay/RemotionRenderer/helpers/faceBasedVideoStyles.js +4 -4
  19. package/dist/screenplay/RemotionRenderer/helpers/faceCenteredVideoTransforms.js +46 -46
  20. package/dist/screenplay/RemotionRenderer/hooks/useOrientationBased.js +7 -3
  21. package/dist/screenplay/RemotionRenderer/main/lib/layouts/DefaultLayout.js +2 -1
  22. package/dist/screenplay/RemotionRenderer/main/lib/layouts/DynamicTriangleLayout.js +3 -2
  23. package/dist/screenplay/RemotionRenderer/main/lib/layouts/HandoffLayout.js +3 -2
  24. package/dist/screenplay/RemotionRenderer/main/lib/layouts/IntroVideoLayout.js +3 -1
  25. package/dist/screenplay/RemotionRenderer/main/lib/layouts/KeywordLayout.js +3 -2
  26. package/dist/screenplay/RemotionRenderer/main/lib/layouts/MotionStillLayout.js +3 -2
  27. package/dist/screenplay/RemotionRenderer/main/lib/layouts/TextWithVideoLayout.js +3 -2
  28. package/dist/screenplay/RemotionRenderer/main/screenplaySchema.js +51 -51
  29. package/dist/screenplay/RemotionRenderer/registeredComponents.js +2 -2
  30. package/dist/screenplay/RemotionRenderer/theme/themes/default/HandoffNametag.js +9 -2
  31. package/dist/screenplay/RemotionRenderer/tracks/LayoutVideoTrack.js +20 -20
  32. package/package.json +47 -47
@@ -90,27 +90,31 @@ export var RemotionRenderer = /*#__PURE__*/function () {
90
90
  }, {
91
91
  key: "toRemotionFragment",
92
92
  value: function toRemotionFragment(screenPlaySegment, layout) {
93
- var _screenPlaySegment$da, _screenPlaySegment$da2, _layout$data, _screenPlaySegment$da3, _screenPlaySegment$da4, _layout$data2, _screenPlaySegment$da5, _toFrames, _screenPlaySegment$da6, _screenPlaySegment$da7;
93
+ var _screenPlaySegment$da, _screenPlaySegment$da2, _layout$data, _screenPlaySegment$da3, _screenPlaySegment$da4, _layout$data2, _screenPlaySegment$da5, _screenPlaySegment$da6, _layout$data3, _screenPlaySegment$da7, _screenPlaySegment$da8, _layout$data4, _screenPlaySegment$da9, _screenPlaySegment$da10, _layout$data5, _screenPlaySegment$da11, _toFrames, _screenPlaySegment$da12, _screenPlaySegment$da13;
94
94
  var trimLeft = 0;
95
95
  if (layout) {
96
96
  trimLeft = layout.data.trimLeft || 0;
97
97
  }
98
98
  var component = toPascalCase(screenPlaySegment.type);
99
99
  var inheritedProps = component === "HandoffNametag" ? {
100
- handoffNametagVariant: (_screenPlaySegment$da = (_screenPlaySegment$da2 = screenPlaySegment.data) === null || _screenPlaySegment$da2 === void 0 ? void 0 : _screenPlaySegment$da2.handoffNametagVariant) !== null && _screenPlaySegment$da !== void 0 ? _screenPlaySegment$da : layout === null || layout === void 0 ? void 0 : (_layout$data = layout.data) === null || _layout$data === void 0 ? void 0 : _layout$data.handoffNametagVariant,
101
- useSquareInLandscapeFirstVideo: (_screenPlaySegment$da3 = (_screenPlaySegment$da4 = screenPlaySegment.data) === null || _screenPlaySegment$da4 === void 0 ? void 0 : _screenPlaySegment$da4.useSquareInLandscapeFirstVideo) !== null && _screenPlaySegment$da3 !== void 0 ? _screenPlaySegment$da3 : layout === null || layout === void 0 ? void 0 : (_layout$data2 = layout.data) === null || _layout$data2 === void 0 ? void 0 : _layout$data2.useSquareInLandscapeFirstVideo
102
- } : {};
100
+ useSquareInLandscape: (_screenPlaySegment$da = (_screenPlaySegment$da2 = screenPlaySegment.data) === null || _screenPlaySegment$da2 === void 0 ? void 0 : _screenPlaySegment$da2.useSquareInLandscape) !== null && _screenPlaySegment$da !== void 0 ? _screenPlaySegment$da : layout === null || layout === void 0 ? void 0 : (_layout$data = layout.data) === null || _layout$data === void 0 ? void 0 : _layout$data.useSquareInLandscape,
101
+ handoffNametagVariant: (_screenPlaySegment$da3 = (_screenPlaySegment$da4 = screenPlaySegment.data) === null || _screenPlaySegment$da4 === void 0 ? void 0 : _screenPlaySegment$da4.handoffNametagVariant) !== null && _screenPlaySegment$da3 !== void 0 ? _screenPlaySegment$da3 : layout === null || layout === void 0 ? void 0 : (_layout$data2 = layout.data) === null || _layout$data2 === void 0 ? void 0 : _layout$data2.handoffNametagVariant,
102
+ useSquareInLandscapeFirstVideo: (_screenPlaySegment$da5 = (_screenPlaySegment$da6 = screenPlaySegment.data) === null || _screenPlaySegment$da6 === void 0 ? void 0 : _screenPlaySegment$da6.useSquareInLandscapeFirstVideo) !== null && _screenPlaySegment$da5 !== void 0 ? _screenPlaySegment$da5 : layout === null || layout === void 0 ? void 0 : (_layout$data3 = layout.data) === null || _layout$data3 === void 0 ? void 0 : _layout$data3.useSquareInLandscapeFirstVideo,
103
+ useSquareInLandscapeSecondVideo: (_screenPlaySegment$da7 = (_screenPlaySegment$da8 = screenPlaySegment.data) === null || _screenPlaySegment$da8 === void 0 ? void 0 : _screenPlaySegment$da8.useSquareInLandscapeSecondVideo) !== null && _screenPlaySegment$da7 !== void 0 ? _screenPlaySegment$da7 : layout === null || layout === void 0 ? void 0 : (_layout$data4 = layout.data) === null || _layout$data4 === void 0 ? void 0 : _layout$data4.useSquareInLandscapeSecondVideo
104
+ } : {
105
+ useSquareInLandscape: (_screenPlaySegment$da9 = (_screenPlaySegment$da10 = screenPlaySegment.data) === null || _screenPlaySegment$da10 === void 0 ? void 0 : _screenPlaySegment$da10.useSquareInLandscape) !== null && _screenPlaySegment$da9 !== void 0 ? _screenPlaySegment$da9 : layout === null || layout === void 0 ? void 0 : (_layout$data5 = layout.data) === null || _layout$data5 === void 0 ? void 0 : _layout$data5.useSquareInLandscape
106
+ };
103
107
  var from = this.fps * (screenPlaySegment.data.offset - trimLeft) || 0;
104
108
  var durationInFrames = toFrames(this.fps * screenPlaySegment.data.duration);
105
109
  var to = from + durationInFrames;
106
110
  return _objectSpread(_objectSpread(_objectSpread({}, screenPlaySegment.data), inheritedProps), {}, {
107
111
  component: component,
108
- videoUrl: (_screenPlaySegment$da5 = screenPlaySegment.data.sourceVideo) === null || _screenPlaySegment$da5 === void 0 ? void 0 : _screenPlaySegment$da5.videoUrl,
109
- startVideoFrom: (_toFrames = toFrames(this.fps * ((_screenPlaySegment$da6 = screenPlaySegment.data.sourceVideo) === null || _screenPlaySegment$da6 === void 0 ? void 0 : _screenPlaySegment$da6.start), false, true)) !== null && _toFrames !== void 0 ? _toFrames : 0,
112
+ videoUrl: (_screenPlaySegment$da11 = screenPlaySegment.data.sourceVideo) === null || _screenPlaySegment$da11 === void 0 ? void 0 : _screenPlaySegment$da11.videoUrl,
113
+ startVideoFrom: (_toFrames = toFrames(this.fps * ((_screenPlaySegment$da12 = screenPlaySegment.data.sourceVideo) === null || _screenPlaySegment$da12 === void 0 ? void 0 : _screenPlaySegment$da12.start), false, true)) !== null && _toFrames !== void 0 ? _toFrames : 0,
110
114
  durationInFrames: durationInFrames,
111
115
  from: from,
112
116
  to: to,
113
- videoZoom: (_screenPlaySegment$da7 = screenPlaySegment.data.sourceVideo) === null || _screenPlaySegment$da7 === void 0 ? void 0 : _screenPlaySegment$da7.zoom,
117
+ videoZoom: (_screenPlaySegment$da13 = screenPlaySegment.data.sourceVideo) === null || _screenPlaySegment$da13 === void 0 ? void 0 : _screenPlaySegment$da13.zoom,
114
118
  offset: toFrames(this.fps * (screenPlaySegment.data.offset - trimLeft)) || 0,
115
119
  theme: screenPlaySegment.theme,
116
120
  themeSettings: screenPlaySegment === null || screenPlaySegment === void 0 ? void 0 : screenPlaySegment.themeSettings
@@ -119,20 +123,20 @@ export var RemotionRenderer = /*#__PURE__*/function () {
119
123
  }, {
120
124
  key: "toRemotionAudioFragment",
121
125
  value: function toRemotionAudioFragment(screenPlaySegment) {
122
- var _screenPlaySegment$da8, _toFrames2, _screenPlaySegment$da9, _screenPlaySegment$da10, _screenPlaySegment$da11, _screenPlaySegment$da12, _screenPlaySegment$da13, _screenPlaySegment$da14;
126
+ var _screenPlaySegment$da14, _toFrames2, _screenPlaySegment$da15, _screenPlaySegment$da16, _screenPlaySegment$da17, _screenPlaySegment$da18, _screenPlaySegment$da19, _screenPlaySegment$da20;
123
127
  var from = this.fps * screenPlaySegment.data.offset || 0;
124
128
  var durationInFrames = toFrames(this.fps * screenPlaySegment.data.duration) || undefined;
125
129
  var to = from + durationInFrames;
126
130
  return _objectSpread(_objectSpread({}, screenPlaySegment.data), {}, {
127
131
  component: toPascalCase(screenPlaySegment.type),
128
- src: (_screenPlaySegment$da8 = screenPlaySegment.data.sourceAudio) === null || _screenPlaySegment$da8 === void 0 ? void 0 : _screenPlaySegment$da8.url,
129
- startAudioFrom: (_toFrames2 = toFrames(this.fps * ((_screenPlaySegment$da9 = screenPlaySegment.data.sourceAudio) === null || _screenPlaySegment$da9 === void 0 ? void 0 : _screenPlaySegment$da9.start), false, true)) !== null && _toFrames2 !== void 0 ? _toFrames2 : 0,
132
+ src: (_screenPlaySegment$da14 = screenPlaySegment.data.sourceAudio) === null || _screenPlaySegment$da14 === void 0 ? void 0 : _screenPlaySegment$da14.url,
133
+ startAudioFrom: (_toFrames2 = toFrames(this.fps * ((_screenPlaySegment$da15 = screenPlaySegment.data.sourceAudio) === null || _screenPlaySegment$da15 === void 0 ? void 0 : _screenPlaySegment$da15.start), false, true)) !== null && _toFrames2 !== void 0 ? _toFrames2 : 0,
130
134
  durationInFrames: durationInFrames,
131
135
  from: from,
132
136
  to: to,
133
137
  offset: this.fps * screenPlaySegment.data.offset || 0,
134
- volume: (_screenPlaySegment$da10 = (_screenPlaySegment$da11 = screenPlaySegment.data) === null || _screenPlaySegment$da11 === void 0 ? void 0 : (_screenPlaySegment$da12 = _screenPlaySegment$da11.sourceAudio) === null || _screenPlaySegment$da12 === void 0 ? void 0 : _screenPlaySegment$da12.volume) !== null && _screenPlaySegment$da10 !== void 0 ? _screenPlaySegment$da10 : 1,
135
- loop: ((_screenPlaySegment$da13 = screenPlaySegment.data) === null || _screenPlaySegment$da13 === void 0 ? void 0 : (_screenPlaySegment$da14 = _screenPlaySegment$da13.sourceAudio) === null || _screenPlaySegment$da14 === void 0 ? void 0 : _screenPlaySegment$da14.loop) || false
138
+ volume: (_screenPlaySegment$da16 = (_screenPlaySegment$da17 = screenPlaySegment.data) === null || _screenPlaySegment$da17 === void 0 ? void 0 : (_screenPlaySegment$da18 = _screenPlaySegment$da17.sourceAudio) === null || _screenPlaySegment$da18 === void 0 ? void 0 : _screenPlaySegment$da18.volume) !== null && _screenPlaySegment$da16 !== void 0 ? _screenPlaySegment$da16 : 1,
139
+ loop: ((_screenPlaySegment$da19 = screenPlaySegment.data) === null || _screenPlaySegment$da19 === void 0 ? void 0 : (_screenPlaySegment$da20 = _screenPlaySegment$da19.sourceAudio) === null || _screenPlaySegment$da20 === void 0 ? void 0 : _screenPlaySegment$da20.loop) || false
136
140
  });
137
141
  }
138
142
  }, {
@@ -164,10 +168,10 @@ export var RemotionRenderer = /*#__PURE__*/function () {
164
168
  key: "toRemotionCaptionSegment",
165
169
  value: function toRemotionCaptionSegment(screenPlaySegment, screenplayLayout) {
166
170
  var _screenplayLayout$dat,
167
- _screenPlaySegment$da15,
171
+ _screenPlaySegment$da21,
168
172
  _this3 = this;
169
173
  var trimLeft = (screenplayLayout === null || screenplayLayout === void 0 ? void 0 : (_screenplayLayout$dat = screenplayLayout.data) === null || _screenplayLayout$dat === void 0 ? void 0 : _screenplayLayout$dat.trimLeft) || 0;
170
- var segmentOffset = Number(screenPlaySegment === null || screenPlaySegment === void 0 ? void 0 : (_screenPlaySegment$da15 = screenPlaySegment.data) === null || _screenPlaySegment$da15 === void 0 ? void 0 : _screenPlaySegment$da15.offset);
174
+ var segmentOffset = Number(screenPlaySegment === null || screenPlaySegment === void 0 ? void 0 : (_screenPlaySegment$da21 = screenPlaySegment.data) === null || _screenPlaySegment$da21 === void 0 ? void 0 : _screenPlaySegment$da21.offset);
171
175
  var from = Number.isFinite(segmentOffset) ? this.fps * (segmentOffset + trimLeft) : 0;
172
176
  var transcripts = screenPlaySegment.data.transcript_text;
173
177
  if (!transcripts) {
@@ -8,9 +8,9 @@ import React, { useEffect, useState } from 'react';
8
8
  import { delayRender, continueRender, cancelRender } from 'remotion';
9
9
  import { Lottie } from '@remotion/lottie';
10
10
 
11
- /**
12
- * Convert a HEX color string (e.g. "#ff8800") to the RGBA float array that
13
- * Lottie expects: [r, g, b, a] where each component is 0‑1.
11
+ /**
12
+ * Convert a HEX color string (e.g. "#ff8800") to the RGBA float array that
13
+ * Lottie expects: [r, g, b, a] where each component is 0‑1.
14
14
  */
15
15
  var hexToRGBA = function hexToRGBA(hex) {
16
16
  var clean = hex.replace('#', '');
@@ -25,9 +25,9 @@ var hexToRGBA = function hexToRGBA(hex) {
25
25
  ];
26
26
  };
27
27
 
28
- /**
29
- * Recursively walks through shape objects and overrides any fill (fl) or
30
- * stroke (st) color with the provided RGBA array.
28
+ /**
29
+ * Recursively walks through shape objects and overrides any fill (fl) or
30
+ * stroke (st) color with the provided RGBA array.
31
31
  */
32
32
  var _applyColor = function applyColor(shapes, rgba) {
33
33
  shapes === null || shapes === void 0 ? void 0 : shapes.forEach(function (shape) {
@@ -40,11 +40,11 @@ var _applyColor = function applyColor(shapes, rgba) {
40
40
  });
41
41
  };
42
42
 
43
- /**
44
- * Traverses all layers (top‑level + asset layers) and applies the primary
45
- * color to every fill / stroke it encounters. This is useful for Lottie files
46
- * that were exported with a single static color (e.g. white) and do not use
47
- * layer naming conventions like "PrimaryColor".
43
+ /**
44
+ * Traverses all layers (top‑level + asset layers) and applies the primary
45
+ * color to every fill / stroke it encounters. This is useful for Lottie files
46
+ * that were exported with a single static color (e.g. white) and do not use
47
+ * layer naming conventions like "PrimaryColor".
48
48
  */
49
49
  var replaceGlobalColor = function replaceGlobalColor(data, hex) {
50
50
  var _data$assets;
@@ -60,16 +60,16 @@ var replaceGlobalColor = function replaceGlobalColor(data, hex) {
60
60
  });
61
61
  };
62
62
 
63
- /**
64
- * LottieAnimationGlobal – specialised wrapper to render the provided Lottie
65
- * (e.g. text‑bubble‑animation.json) while dynamically replacing **all** stroke
66
- * and fill colors with the supplied `primaryColor`.
67
- *
68
- * Props:
69
- * • animationPath – URL or local path to the json file.
70
- * • primaryColor – HEX string, defaults to "#ffffff".
71
- * • autoplay – boolean, whether to start playing immediately.
72
- * • loop – boolean, whether to loop the animation.
63
+ /**
64
+ * LottieAnimationGlobal – specialised wrapper to render the provided Lottie
65
+ * (e.g. text‑bubble‑animation.json) while dynamically replacing **all** stroke
66
+ * and fill colors with the supplied `primaryColor`.
67
+ *
68
+ * Props:
69
+ * • animationPath – URL or local path to the json file.
70
+ * • primaryColor – HEX string, defaults to "#ffffff".
71
+ * • autoplay – boolean, whether to start playing immediately.
72
+ * • loop – boolean, whether to loop the animation.
73
73
  */
74
74
  export var LottieAnimationGlobal = function LottieAnimationGlobal(_ref) {
75
75
  var animationPath = _ref.animationPath,
@@ -12,6 +12,7 @@ import FaceCenteredVideo from "../utils/FaceCenteredVideo";
12
12
  var _loadFont = loadFont(),
13
13
  fontFamily = _loadFont.fontFamily;
14
14
  export var DynamicTriangle = function DynamicTriangle(_ref) {
15
+ var _compositionProps$out, _window, _window$screenplayPro, _window$screenplayPro2;
15
16
  var children = _ref.children,
16
17
  videoUrl = _ref.videoUrl,
17
18
  startVideoFrom = _ref.startVideoFrom,
@@ -31,11 +32,22 @@ export var DynamicTriangle = function DynamicTriangle(_ref) {
31
32
  sentenceText = _ref.sentenceText,
32
33
  noBackgroundVideoUrl = _ref.noBackgroundVideoUrl,
33
34
  noBackgroundVideoEffects = _ref.noBackgroundVideoEffects,
34
- faceMetadata = _ref.faceMetadata;
35
+ faceMetadata = _ref.faceMetadata,
36
+ _ref$useSquareInLands = _ref.useSquareInLandscape,
37
+ useSquareInLandscape = _ref$useSquareInLands === void 0 ? false : _ref$useSquareInLands;
35
38
  var _useVideoConfig = useVideoConfig(),
36
- width = _useVideoConfig.width,
37
- height = _useVideoConfig.height,
38
- fps = _useVideoConfig.fps;
39
+ outputWidth = _useVideoConfig.width,
40
+ outputHeight = _useVideoConfig.height,
41
+ fps = _useVideoConfig.fps,
42
+ _useVideoConfig$props = _useVideoConfig.props,
43
+ compositionProps = _useVideoConfig$props === void 0 ? {} : _useVideoConfig$props;
44
+ var outputOrientation = (compositionProps === null || compositionProps === void 0 ? void 0 : (_compositionProps$out = compositionProps.output) === null || _compositionProps$out === void 0 ? void 0 : _compositionProps$out.orientation) || (typeof window !== "undefined" ? (_window = window) === null || _window === void 0 ? void 0 : (_window$screenplayPro = _window.screenplayProps) === null || _window$screenplayPro === void 0 ? void 0 : (_window$screenplayPro2 = _window$screenplayPro.output) === null || _window$screenplayPro2 === void 0 ? void 0 : _window$screenplayPro2.orientation : undefined);
45
+ var shouldUseSquareInLandscape = Boolean(useSquareInLandscape) && outputOrientation === "landscape";
46
+ var squareSize = 1080;
47
+ var width = shouldUseSquareInLandscape ? squareSize : outputWidth;
48
+ var height = shouldUseSquareInLandscape ? squareSize : outputHeight;
49
+ var renderOffsetX = shouldUseSquareInLandscape ? (outputWidth - squareSize) / 2 : 0;
50
+ var orientationOverride = shouldUseSquareInLandscape ? "square" : undefined;
39
51
  var frame = useCurrentFrame();
40
52
  var _useVirtualBackground = useVirtualBackground(),
41
53
  isVirtual = _useVirtualBackground.isVirtual,
@@ -180,7 +192,7 @@ export var DynamicTriangle = function DynamicTriangle(_ref) {
180
192
  textContainerWidth: width - 200,
181
193
  textContainerHeight: height * 0.4
182
194
  }
183
- });
195
+ }, orientationOverride);
184
196
 
185
197
  // Extract values from orientation config
186
198
  var triangleSize = orientationConfig.triangleSize,
@@ -375,7 +387,7 @@ export var DynamicTriangle = function DynamicTriangle(_ref) {
375
387
  var _distributeTextToFit = distributeTextToFit(sentenceText, textContainerWidth, textContainerHeight, 120),
376
388
  lines = _distributeTextToFit.lines,
377
389
  fontSize = _distributeTextToFit.fontSize;
378
- return /*#__PURE__*/React.createElement(React.Fragment, null, !disableTransitionSounds && /*#__PURE__*/React.createElement(Audio, {
390
+ var content = /*#__PURE__*/React.createElement(React.Fragment, null, !disableTransitionSounds && /*#__PURE__*/React.createElement(Audio, {
379
391
  src: "https://cdn.zync.ai/assets/static/swoosh.mp3",
380
392
  volume: 0.25
381
393
  }), /*#__PURE__*/React.createElement(AbsoluteFill, {
@@ -615,4 +627,22 @@ export var DynamicTriangle = function DynamicTriangle(_ref) {
615
627
  zIndex: 14
616
628
  }
617
629
  }, children)));
630
+ if (!shouldUseSquareInLandscape) {
631
+ return content;
632
+ }
633
+ return /*#__PURE__*/React.createElement(AbsoluteFill, {
634
+ style: {
635
+ width: outputWidth,
636
+ height: outputHeight,
637
+ backgroundColor: "black"
638
+ }
639
+ }, /*#__PURE__*/React.createElement(AbsoluteFill, {
640
+ style: {
641
+ width: width,
642
+ height: height,
643
+ left: renderOffsetX,
644
+ top: 0,
645
+ overflow: "hidden"
646
+ }
647
+ }, content));
618
648
  };
@@ -25,7 +25,9 @@ export var Handoff = function Handoff(_ref) {
25
25
  noBackgroundVideoEffects = _ref.noBackgroundVideoEffects,
26
26
  handoffOverlapSeconds = _ref.handoffOverlapSeconds,
27
27
  _ref$useSquareInLands = _ref.useSquareInLandscapeFirstVideo,
28
- useSquareInLandscapeFirstVideo = _ref$useSquareInLands === void 0 ? false : _ref$useSquareInLands;
28
+ useSquareInLandscapeFirstVideo = _ref$useSquareInLands === void 0 ? false : _ref$useSquareInLands,
29
+ _ref$useSquareInLands2 = _ref.useSquareInLandscapeSecondVideo,
30
+ useSquareInLandscapeSecondVideo = _ref$useSquareInLands2 === void 0 ? false : _ref$useSquareInLands2;
29
31
  var videoConfig = useVideoConfig();
30
32
  var width = videoConfig.width,
31
33
  height = videoConfig.height,
@@ -34,6 +36,7 @@ export var Handoff = function Handoff(_ref) {
34
36
  compositionProps = _videoConfig$props === void 0 ? {} : _videoConfig$props;
35
37
  var outputOrientation = (compositionProps === null || compositionProps === void 0 ? void 0 : (_compositionProps$out = compositionProps.output) === null || _compositionProps$out === void 0 ? void 0 : _compositionProps$out.orientation) || (typeof window !== "undefined" ? (_window = window) === null || _window === void 0 ? void 0 : (_window$screenplayPro = _window.screenplayProps) === null || _window$screenplayPro === void 0 ? void 0 : (_window$screenplayPro2 = _window$screenplayPro.output) === null || _window$screenplayPro2 === void 0 ? void 0 : _window$screenplayPro2.orientation : undefined);
36
38
  var shouldUseSquareInLandscapeFirstVideo = Boolean(useSquareInLandscapeFirstVideo) && outputOrientation === "landscape";
39
+ var shouldUseSquareInLandscapeSecondVideo = Boolean(useSquareInLandscapeSecondVideo) && outputOrientation === "landscape";
37
40
  var squareSize = 1080;
38
41
  var frame = useCurrentFrame();
39
42
  var _useTheme = useTheme(),
@@ -80,11 +83,17 @@ export var Handoff = function Handoff(_ref) {
80
83
  var firstRenderVideoHeight = shouldUseSquareInLandscapeFirstVideo ? Math.min(firstVideoHeight, squareSize) : firstVideoHeight;
81
84
  var firstVideoCenteredOffsetX = shouldUseSquareInLandscapeFirstVideo ? Math.max(0, (width - TOTAL_X_PADDING - firstRenderVideoWidth) / 2) : 0;
82
85
  var firstVideoTranslateX = useTimeInterpolate(inputRangeInSeconds, [firstVideoCenteredOffsetX, 0, 0, 0], DEFAULT_TIME_INTERPOLATE_OPTIONS);
86
+ var secondRenderVideoWidth = shouldUseSquareInLandscapeSecondVideo ? Math.min(secondVideoWidth, squareSize) : secondVideoWidth;
87
+ var secondRenderVideoHeight = shouldUseSquareInLandscapeSecondVideo ? Math.min(secondVideoHeight, squareSize) : secondVideoHeight;
88
+ var secondVideoCenteredOffsetX = shouldUseSquareInLandscapeSecondVideo ? Math.max(0, (width - TOTAL_X_PADDING - secondRenderVideoWidth) / 2) : 0;
89
+ var secondVideoTranslateX = useTimeInterpolate(inputRangeInSeconds, [secondVideoCenteredOffsetX, 0, 0, secondVideoCenteredOffsetX], DEFAULT_TIME_INTERPOLATE_OPTIONS);
90
+ var shouldUseBlackBackgroundInLandscape = shouldUseSquareInLandscapeFirstVideo || shouldUseSquareInLandscapeSecondVideo;
91
+ var handoffBackgroundColor = shouldUseBlackBackgroundInLandscape ? "#000000" : primaryColor;
83
92
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AbsoluteFill, {
84
93
  style: {
85
94
  width: width,
86
95
  height: height,
87
- backgroundColor: primaryColor
96
+ backgroundColor: handoffBackgroundColor
88
97
  }
89
98
  }, /*#__PURE__*/React.createElement(AbsoluteFill, {
90
99
  style: {
@@ -126,24 +135,28 @@ export var Handoff = function Handoff(_ref) {
126
135
  }))), /*#__PURE__*/React.createElement(Sequence, {
127
136
  from: delayInFrames,
128
137
  layout: "none"
138
+ }, /*#__PURE__*/React.createElement("div", {
139
+ style: {
140
+ transform: "translateX(".concat(secondVideoTranslateX, "px)")
141
+ }
129
142
  }, secondNoBackgroundFaceMetadata ? /*#__PURE__*/React.createElement(FaceCenteredVideo, {
130
143
  startFrom: startSecondVideoFrom,
131
144
  src: secondVideoFile,
132
145
  faceMetadata: secondNoBackgroundFaceMetadata,
133
146
  aspectRatio: orientation,
134
- containerWidth: secondVideoWidth,
135
- containerHeight: secondVideoHeight,
147
+ containerWidth: secondRenderVideoWidth,
148
+ containerHeight: secondRenderVideoHeight,
136
149
  useAveragePosition: true
137
150
  }) : /*#__PURE__*/React.createElement(OffthreadVideo, {
138
151
  startFrom: startSecondVideoFrom,
139
152
  src: secondVideoFile,
140
153
  style: {
141
- height: secondVideoHeight,
154
+ height: secondRenderVideoHeight,
142
155
  objectFit: "cover",
143
- width: secondVideoWidth,
156
+ width: secondRenderVideoWidth,
144
157
  borderRadius: "40px"
145
158
  }
146
- }))), /*#__PURE__*/React.createElement(BlurOverlay, {
159
+ })))), /*#__PURE__*/React.createElement(BlurOverlay, {
147
160
  show: (noBackgroundVideoEffects === null || noBackgroundVideoEffects === void 0 ? void 0 : noBackgroundVideoEffects.backgroundBlur) && (firstNoBackgroundVideoUrl || secondNoBackgroundVideoUrl),
148
161
  width: width,
149
162
  height: height,
@@ -30,6 +30,8 @@ var Landscape = function Landscape(_ref) {
30
30
  logoLeft = _ref.logoLeft,
31
31
  logoTop = _ref.logoTop,
32
32
  logoRight = _ref.logoRight,
33
+ _ref$logoPosition = _ref.logoPosition,
34
+ logoPosition = _ref$logoPosition === void 0 ? "fixed" : _ref$logoPosition,
33
35
  videoWidth = _ref.videoWidth,
34
36
  videoHeight = _ref.videoHeight,
35
37
  videoTop = _ref.videoTop,
@@ -409,7 +411,7 @@ var Landscape = function Landscape(_ref) {
409
411
  }
410
412
  }, children), logoUrl ? /*#__PURE__*/React.createElement("div", {
411
413
  style: _objectSpread({
412
- position: "fixed",
414
+ position: logoPosition,
413
415
  top: logoTop,
414
416
  padding: 20,
415
417
  zIndex: 10
@@ -436,6 +438,8 @@ var Portrait = function Portrait(_ref2) {
436
438
  logoLeft = _ref2.logoLeft,
437
439
  logoTop = _ref2.logoTop,
438
440
  logoRight = _ref2.logoRight,
441
+ _ref2$logoPosition = _ref2.logoPosition,
442
+ logoPosition = _ref2$logoPosition === void 0 ? "fixed" : _ref2$logoPosition,
439
443
  videoWidth = _ref2.videoWidth,
440
444
  videoHeight = _ref2.videoHeight,
441
445
  videoTop = _ref2.videoTop,
@@ -816,7 +820,7 @@ var Portrait = function Portrait(_ref2) {
816
820
  }
817
821
  }, children), logoUrl ? /*#__PURE__*/React.createElement("div", {
818
822
  style: _objectSpread({
819
- position: "fixed",
823
+ position: logoPosition,
820
824
  top: logoTop,
821
825
  padding: 20,
822
826
  zIndex: 10
@@ -846,6 +850,8 @@ var Square = function Square(_ref3) {
846
850
  logoUrl = _ref3.logoUrl,
847
851
  logoLeft = _ref3.logoLeft,
848
852
  logoTop = _ref3.logoTop,
853
+ _ref3$logoPosition = _ref3.logoPosition,
854
+ logoPosition = _ref3$logoPosition === void 0 ? "fixed" : _ref3$logoPosition,
849
855
  logoRight = _ref3.logoRight,
850
856
  virtualBgUrl = _ref3.virtualBgUrl,
851
857
  showVirtual = _ref3.showVirtual;
@@ -1214,7 +1220,7 @@ var Square = function Square(_ref3) {
1214
1220
  }
1215
1221
  }, children), logoUrl ? /*#__PURE__*/React.createElement("div", {
1216
1222
  style: _objectSpread({
1217
- position: "fixed",
1223
+ position: logoPosition,
1218
1224
  top: logoTop,
1219
1225
  padding: 20,
1220
1226
  zIndex: 20
@@ -1230,6 +1236,7 @@ var Square = function Square(_ref3) {
1230
1236
  })) : null);
1231
1237
  };
1232
1238
  var IntroVideo = function IntroVideo(_ref4) {
1239
+ var _compositionProps$out, _window, _window$screenplayPro, _window$screenplayPro2;
1233
1240
  var videoUrl = _ref4.videoUrl,
1234
1241
  startVideoFrom = _ref4.startVideoFrom,
1235
1242
  _ref4$sentenceText = _ref4.sentenceText,
@@ -1245,10 +1252,21 @@ var IntroVideo = function IntroVideo(_ref4) {
1245
1252
  muted = _ref4.muted,
1246
1253
  faceMetadata = _ref4.faceMetadata,
1247
1254
  noBackgroundVideoEffects = _ref4.noBackgroundVideoEffects,
1248
- noBackgroundVideoUrl = _ref4.noBackgroundVideoUrl;
1255
+ noBackgroundVideoUrl = _ref4.noBackgroundVideoUrl,
1256
+ _ref4$useSquareInLand = _ref4.useSquareInLandscape,
1257
+ useSquareInLandscape = _ref4$useSquareInLand === void 0 ? false : _ref4$useSquareInLand;
1249
1258
  var _useVideoConfig5 = useVideoConfig(),
1250
- width = _useVideoConfig5.width,
1251
- height = _useVideoConfig5.height;
1259
+ outputWidth = _useVideoConfig5.width,
1260
+ outputHeight = _useVideoConfig5.height,
1261
+ _useVideoConfig5$prop = _useVideoConfig5.props,
1262
+ compositionProps = _useVideoConfig5$prop === void 0 ? {} : _useVideoConfig5$prop;
1263
+ var outputOrientation = (compositionProps === null || compositionProps === void 0 ? void 0 : (_compositionProps$out = compositionProps.output) === null || _compositionProps$out === void 0 ? void 0 : _compositionProps$out.orientation) || (typeof window !== "undefined" ? (_window = window) === null || _window === void 0 ? void 0 : (_window$screenplayPro = _window.screenplayProps) === null || _window$screenplayPro === void 0 ? void 0 : (_window$screenplayPro2 = _window$screenplayPro.output) === null || _window$screenplayPro2 === void 0 ? void 0 : _window$screenplayPro2.orientation : undefined);
1264
+ var shouldUseSquareInLandscape = Boolean(useSquareInLandscape) && outputOrientation === "landscape";
1265
+ var squareSize = 1080;
1266
+ var width = shouldUseSquareInLandscape ? squareSize : outputWidth;
1267
+ var height = shouldUseSquareInLandscape ? squareSize : outputHeight;
1268
+ var renderOffsetX = shouldUseSquareInLandscape ? (outputWidth - squareSize) / 2 : 0;
1269
+ var orientationOverride = shouldUseSquareInLandscape ? "square" : undefined;
1252
1270
  var _useVirtualBackground = useVirtualBackground(),
1253
1271
  isVirtual = _useVirtualBackground.isVirtual,
1254
1272
  virtualBgUrl = _useVirtualBackground.url;
@@ -1289,7 +1307,7 @@ var IntroVideo = function IntroVideo(_ref4) {
1289
1307
  logoRight: CHROME_PADDING,
1290
1308
  IntroVideoComponent: Square
1291
1309
  }
1292
- }),
1310
+ }, orientationOverride),
1293
1311
  IntroVideoComponent = _useOrientationBased.IntroVideoComponent,
1294
1312
  videoWidth = _useOrientationBased.videoWidth,
1295
1313
  videoHeight = _useOrientationBased.videoHeight,
@@ -1301,7 +1319,7 @@ var IntroVideo = function IntroVideo(_ref4) {
1301
1319
  logoLeft = _useOrientationBased.logoLeft,
1302
1320
  logoRight = _useOrientationBased.logoRight,
1303
1321
  orientation = _useOrientationBased.orientation;
1304
- return /*#__PURE__*/React.createElement(React.Fragment, null, !disableTransitionSounds && /*#__PURE__*/React.createElement(Audio, {
1322
+ var content = /*#__PURE__*/React.createElement(React.Fragment, null, !disableTransitionSounds && /*#__PURE__*/React.createElement(Audio, {
1305
1323
  src: "https://cdn.zync.ai/assets/static/swoosh.mp3",
1306
1324
  volume: 0.25
1307
1325
  }), /*#__PURE__*/React.createElement(IntroVideoComponent, {
@@ -1314,6 +1332,7 @@ var IntroVideo = function IntroVideo(_ref4) {
1314
1332
  logoLeft: logoLeft,
1315
1333
  logoTop: logoTop,
1316
1334
  logoRight: logoRight,
1335
+ logoPosition: shouldUseSquareInLandscape ? "absolute" : "fixed",
1317
1336
  videoWidth: videoWidth,
1318
1337
  videoHeight: videoHeight,
1319
1338
  videoTop: videoTop,
@@ -1329,5 +1348,23 @@ var IntroVideo = function IntroVideo(_ref4) {
1329
1348
  showVirtual: showVirtual,
1330
1349
  virtualBgUrl: virtualBgUrl
1331
1350
  }, children));
1351
+ if (!shouldUseSquareInLandscape) {
1352
+ return content;
1353
+ }
1354
+ return /*#__PURE__*/React.createElement(AbsoluteFill, {
1355
+ style: {
1356
+ width: outputWidth,
1357
+ height: outputHeight,
1358
+ backgroundColor: "black"
1359
+ }
1360
+ }, /*#__PURE__*/React.createElement(AbsoluteFill, {
1361
+ style: {
1362
+ width: width,
1363
+ height: height,
1364
+ left: renderOffsetX,
1365
+ top: 0,
1366
+ overflow: "hidden"
1367
+ }
1368
+ }, content));
1332
1369
  };
1333
1370
  export { IntroVideo };
@@ -27,10 +27,12 @@ var Logo = function Logo(_ref) {
27
27
  var logoUrl = _ref.logoUrl,
28
28
  top = _ref.top,
29
29
  left = _ref.left,
30
- right = _ref.right;
30
+ right = _ref.right,
31
+ _ref$position = _ref.position,
32
+ position = _ref$position === void 0 ? "fixed" : _ref$position;
31
33
  return logoUrl ? /*#__PURE__*/React.createElement("div", {
32
34
  style: {
33
- position: "fixed",
35
+ position: position,
34
36
  zIndex: 11,
35
37
  top: top,
36
38
  left: left,
@@ -166,6 +168,7 @@ var RotatingWordsContainer = /*#__PURE__*/React.memo(function (_ref3) {
166
168
  })));
167
169
  });
168
170
  var KeywordComponent = function KeywordComponent(_ref4) {
171
+ var _compositionProps$out, _window, _window$screenplayPro, _window$screenplayPro2;
169
172
  var startVideoFrom = _ref4.startVideoFrom,
170
173
  videoUrl = _ref4.videoUrl,
171
174
  logoUrl = _ref4.logoUrl,
@@ -181,11 +184,22 @@ var KeywordComponent = function KeywordComponent(_ref4) {
181
184
  faceMetadata = _ref4.faceMetadata,
182
185
  muted = _ref4.muted,
183
186
  noBackgroundVideoEffects = _ref4.noBackgroundVideoEffects,
184
- noBackgroundVideoUrl = _ref4.noBackgroundVideoUrl;
187
+ noBackgroundVideoUrl = _ref4.noBackgroundVideoUrl,
188
+ _ref4$useSquareInLand = _ref4.useSquareInLandscape,
189
+ useSquareInLandscape = _ref4$useSquareInLand === void 0 ? false : _ref4$useSquareInLand;
185
190
  var _useVideoConfig = useVideoConfig(),
186
- width = _useVideoConfig.width,
187
- height = _useVideoConfig.height,
188
- fps = _useVideoConfig.fps;
191
+ outputWidth = _useVideoConfig.width,
192
+ outputHeight = _useVideoConfig.height,
193
+ fps = _useVideoConfig.fps,
194
+ _useVideoConfig$props = _useVideoConfig.props,
195
+ compositionProps = _useVideoConfig$props === void 0 ? {} : _useVideoConfig$props;
196
+ var outputOrientation = (compositionProps === null || compositionProps === void 0 ? void 0 : (_compositionProps$out = compositionProps.output) === null || _compositionProps$out === void 0 ? void 0 : _compositionProps$out.orientation) || (typeof window !== "undefined" ? (_window = window) === null || _window === void 0 ? void 0 : (_window$screenplayPro = _window.screenplayProps) === null || _window$screenplayPro === void 0 ? void 0 : (_window$screenplayPro2 = _window$screenplayPro.output) === null || _window$screenplayPro2 === void 0 ? void 0 : _window$screenplayPro2.orientation : undefined);
197
+ var shouldUseSquareInLandscape = Boolean(useSquareInLandscape) && outputOrientation === "landscape";
198
+ var squareSize = 1080;
199
+ var width = shouldUseSquareInLandscape ? squareSize : outputWidth;
200
+ var height = shouldUseSquareInLandscape ? squareSize : outputHeight;
201
+ var renderOffsetX = shouldUseSquareInLandscape ? (outputWidth - squareSize) / 2 : 0;
202
+ var orientationOverride = shouldUseSquareInLandscape ? "square" : undefined;
189
203
  var frame = useCurrentFrame();
190
204
  var _useVirtualBackground = useVirtualBackground(),
191
205
  isVirtual = _useVirtualBackground.isVirtual,
@@ -234,7 +248,7 @@ var KeywordComponent = function KeywordComponent(_ref4) {
234
248
  logoRight: stylesByVariant[variant].logoRight,
235
249
  flowDirection: "row-reverse"
236
250
  }
237
- }),
251
+ }, orientationOverride),
238
252
  imageContainerOutputRange = _useOrientationBased.imageContainerOutputRange,
239
253
  containerWidth = _useOrientationBased.containerWidth,
240
254
  targetVideoWidth = _useOrientationBased.targetVideoWidth,
@@ -271,7 +285,7 @@ var KeywordComponent = function KeywordComponent(_ref4) {
271
285
  var imageContainerTranslate = imageContainerOutputRange[0] + (imageContainerOutputRange[1] - imageContainerOutputRange[0]) * easedProgress;
272
286
  var videoWidth = width + (targetVideoWidth - width) * easedProgress;
273
287
  var videoHeight = height + (targetVideoHeight - height) * easedProgress;
274
- return /*#__PURE__*/React.createElement(AbsoluteFill, {
288
+ var content = /*#__PURE__*/React.createElement(AbsoluteFill, {
275
289
  style: {
276
290
  isolation: "isolate",
277
291
  width: width,
@@ -310,7 +324,8 @@ var KeywordComponent = function KeywordComponent(_ref4) {
310
324
  logoUrl: logoUrl,
311
325
  top: logoTop,
312
326
  left: logoLeft,
313
- right: logoRight
327
+ right: logoRight,
328
+ position: shouldUseSquareInLandscape ? "absolute" : "fixed"
314
329
  }), /*#__PURE__*/React.createElement("div", {
315
330
  style: {
316
331
  display: "flex",
@@ -507,6 +522,24 @@ var KeywordComponent = function KeywordComponent(_ref4) {
507
522
  zIndex: 10
508
523
  }
509
524
  }, children));
525
+ if (!shouldUseSquareInLandscape) {
526
+ return content;
527
+ }
528
+ return /*#__PURE__*/React.createElement(AbsoluteFill, {
529
+ style: {
530
+ width: outputWidth,
531
+ height: outputHeight,
532
+ backgroundColor: "black"
533
+ }
534
+ }, /*#__PURE__*/React.createElement(AbsoluteFill, {
535
+ style: {
536
+ width: width,
537
+ height: height,
538
+ left: renderOffsetX,
539
+ top: 0,
540
+ overflow: "hidden"
541
+ }
542
+ }, content));
510
543
  };
511
544
  export var Keyword = function Keyword(props) {
512
545
  var _useTheme = useTheme(),