@zync/zync-screnplay-player 0.1.187

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 (133) hide show
  1. package/dist/ZyncScreenplayPlayer.js +35 -0
  2. package/dist/bundle.js +2 -0
  3. package/dist/bundle.js.LICENSE.txt +54 -0
  4. package/dist/index.js +4 -0
  5. package/dist/screenplay/RemotionRenderer/RemotionRenderer.js +281 -0
  6. package/dist/screenplay/RemotionRenderer/Root.js +22 -0
  7. package/dist/screenplay/RemotionRenderer/components/LottieAnimationGlobal.js +116 -0
  8. package/dist/screenplay/RemotionRenderer/components/backgrounds/VirtualBackground.js +26 -0
  9. package/dist/screenplay/RemotionRenderer/components/backgrounds/VirtualBackgroundUnderlay.js +41 -0
  10. package/dist/screenplay/RemotionRenderer/components/captions/CaptionSimple.js +12 -0
  11. package/dist/screenplay/RemotionRenderer/components/effects/BrollFullscreen.js +27 -0
  12. package/dist/screenplay/RemotionRenderer/components/effects/GlitchText.js +22 -0
  13. package/dist/screenplay/RemotionRenderer/components/effects/HandoffNametag.js +7 -0
  14. package/dist/screenplay/RemotionRenderer/components/effects/LottieAnimation.js +64 -0
  15. package/dist/screenplay/RemotionRenderer/components/effects/Nametag.js +9 -0
  16. package/dist/screenplay/RemotionRenderer/components/effects/PhraseRainbowEffect.js +34 -0
  17. package/dist/screenplay/RemotionRenderer/components/effects/Sentence.js +50 -0
  18. package/dist/screenplay/RemotionRenderer/components/effects/Title.js +12 -0
  19. package/dist/screenplay/RemotionRenderer/components/layouts/BrollGreenScreen.js +742 -0
  20. package/dist/screenplay/RemotionRenderer/components/layouts/BrollSplitScreen.js +714 -0
  21. package/dist/screenplay/RemotionRenderer/components/layouts/BrollStudioBackdrop.js +620 -0
  22. package/dist/screenplay/RemotionRenderer/components/layouts/DynamicTriangle.js +618 -0
  23. package/dist/screenplay/RemotionRenderer/components/layouts/Handoff.js +161 -0
  24. package/dist/screenplay/RemotionRenderer/components/layouts/IntroVideo.js +1330 -0
  25. package/dist/screenplay/RemotionRenderer/components/layouts/KeyPointOverlayDepth.js +397 -0
  26. package/dist/screenplay/RemotionRenderer/components/layouts/Keyword.js +539 -0
  27. package/dist/screenplay/RemotionRenderer/components/layouts/KeywordStudioBackdrop.js +714 -0
  28. package/dist/screenplay/RemotionRenderer/components/layouts/MotionStill.js +381 -0
  29. package/dist/screenplay/RemotionRenderer/components/layouts/MotionStillFullScreen.js +178 -0
  30. package/dist/screenplay/RemotionRenderer/components/layouts/MotionStillGreenScreen.js +568 -0
  31. package/dist/screenplay/RemotionRenderer/components/layouts/MotionStillGreenScreenV2.js +731 -0
  32. package/dist/screenplay/RemotionRenderer/components/layouts/MotionStillStudioBackdrop.js +588 -0
  33. package/dist/screenplay/RemotionRenderer/components/layouts/SimpleFrame.js +183 -0
  34. package/dist/screenplay/RemotionRenderer/components/layouts/SimpleFrameBroll.js +181 -0
  35. package/dist/screenplay/RemotionRenderer/components/layouts/SimpleFrameSentence.js +17 -0
  36. package/dist/screenplay/RemotionRenderer/components/layouts/SimpleFrameZoomCut.js +13 -0
  37. package/dist/screenplay/RemotionRenderer/components/layouts/TextWithVideo.js +373 -0
  38. package/dist/screenplay/RemotionRenderer/components/layouts/quote-bubble-animation.json +1 -0
  39. package/dist/screenplay/RemotionRenderer/components/utils/BlurOverlay.js +19 -0
  40. package/dist/screenplay/RemotionRenderer/components/utils/ChromaKeyedVideo.js +59 -0
  41. package/dist/screenplay/RemotionRenderer/components/utils/FaceCenteredVideo.js +562 -0
  42. package/dist/screenplay/RemotionRenderer/components/utils/PausableImg.js +124 -0
  43. package/dist/screenplay/RemotionRenderer/components/utils/README.md +80 -0
  44. package/dist/screenplay/RemotionRenderer/components/utils/SafeZones.js +69 -0
  45. package/dist/screenplay/RemotionRenderer/components/utils/StretchText.js +124 -0
  46. package/dist/screenplay/RemotionRenderer/components/utils/StretchTextDemo.js +66 -0
  47. package/dist/screenplay/RemotionRenderer/config.js +8 -0
  48. package/dist/screenplay/RemotionRenderer/development.js +1370 -0
  49. package/dist/screenplay/RemotionRenderer/helpers/cleanFacemetadata.js +29 -0
  50. package/dist/screenplay/RemotionRenderer/helpers/convertToSeconds.js +14 -0
  51. package/dist/screenplay/RemotionRenderer/helpers/faceBasedVideoStyles.js +212 -0
  52. package/dist/screenplay/RemotionRenderer/helpers/faceCenteredVideoTransforms.js +468 -0
  53. package/dist/screenplay/RemotionRenderer/helpers/getContrastColor.js +15 -0
  54. package/dist/screenplay/RemotionRenderer/helpers/getVideoOrientation.js +21 -0
  55. package/dist/screenplay/RemotionRenderer/helpers/hexToRgb.js +48 -0
  56. package/dist/screenplay/RemotionRenderer/hooks/useLottieReplaceColor.js +45 -0
  57. package/dist/screenplay/RemotionRenderer/hooks/useOrientationBased.js +29 -0
  58. package/dist/screenplay/RemotionRenderer/hooks/useTimeInterpolate.js +54 -0
  59. package/dist/screenplay/RemotionRenderer/hooks/useVirtualBackground.js +38 -0
  60. package/dist/screenplay/RemotionRenderer/index.js +3 -0
  61. package/dist/screenplay/RemotionRenderer/main/lib/Sequence.js +76 -0
  62. package/dist/screenplay/RemotionRenderer/main/lib/layouts/DefaultLayout.js +72 -0
  63. package/dist/screenplay/RemotionRenderer/main/lib/layouts/DynamicTriangleLayout.js +54 -0
  64. package/dist/screenplay/RemotionRenderer/main/lib/layouts/HandoffLayout.js +50 -0
  65. package/dist/screenplay/RemotionRenderer/main/lib/layouts/IntroVideoLayout.js +33 -0
  66. package/dist/screenplay/RemotionRenderer/main/lib/layouts/KeywordLayout.js +36 -0
  67. package/dist/screenplay/RemotionRenderer/main/lib/layouts/LayoutFactory.js +68 -0
  68. package/dist/screenplay/RemotionRenderer/main/lib/layouts/MotionStillLayout.js +36 -0
  69. package/dist/screenplay/RemotionRenderer/main/lib/layouts/SimpleFrameLayout.js +43 -0
  70. package/dist/screenplay/RemotionRenderer/main/lib/layouts/TextWithVideoLayout.js +52 -0
  71. package/dist/screenplay/RemotionRenderer/main/screenplaySchema.js +92 -0
  72. package/dist/screenplay/RemotionRenderer/registeredComponents.js +91 -0
  73. package/dist/screenplay/RemotionRenderer/theme/config.js +8 -0
  74. package/dist/screenplay/RemotionRenderer/theme/hooks/useTheme.js +24 -0
  75. package/dist/screenplay/RemotionRenderer/theme/hooks/useThemedComponents.js +101 -0
  76. package/dist/screenplay/RemotionRenderer/theme/themes/bigbold/BigBoldNameTag.js +147 -0
  77. package/dist/screenplay/RemotionRenderer/theme/themes/bigbold/BigBoldSentence.js +138 -0
  78. package/dist/screenplay/RemotionRenderer/theme/themes/bigbold/BigBoldTitle.js +136 -0
  79. package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionColor.js +67 -0
  80. package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionColorInverse.js +67 -0
  81. package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionColorShadow.js +66 -0
  82. package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionElegant.js +134 -0
  83. package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionEmphasis.js +122 -0
  84. package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionPunctuated.js +84 -0
  85. package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionWordBoom.js +88 -0
  86. package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionWordBubble.js +91 -0
  87. package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionWordPopup.js +118 -0
  88. package/dist/screenplay/RemotionRenderer/theme/themes/default/DefaultCaption.js +62 -0
  89. package/dist/screenplay/RemotionRenderer/theme/themes/default/HandoffNametag/handoffNametagConfig.js +59 -0
  90. package/dist/screenplay/RemotionRenderer/theme/themes/default/HandoffNametag.js +173 -0
  91. package/dist/screenplay/RemotionRenderer/theme/themes/default/Nametag.js +129 -0
  92. package/dist/screenplay/RemotionRenderer/theme/themes/default/Sentence/AnimatedSentence.js +20 -0
  93. package/dist/screenplay/RemotionRenderer/theme/themes/default/Sentence/AnimatedSentenceDefault.js +29 -0
  94. package/dist/screenplay/RemotionRenderer/theme/themes/default/Sentence/SentenceSimple.helpers.js +61 -0
  95. package/dist/screenplay/RemotionRenderer/theme/themes/default/Sentence.js +86 -0
  96. package/dist/screenplay/RemotionRenderer/theme/themes/default/Title.js +112 -0
  97. package/dist/screenplay/RemotionRenderer/theme/themes/default/constants.js +1 -0
  98. package/dist/screenplay/RemotionRenderer/theme/themes/glassmorphism/Nametag.js +134 -0
  99. package/dist/screenplay/RemotionRenderer/theme/themes/glassmorphism/Sentence.js +49 -0
  100. package/dist/screenplay/RemotionRenderer/theme/themes/glassmorphism/Title.js +108 -0
  101. package/dist/screenplay/RemotionRenderer/theme/themes/glassmorphism/animations.js +30 -0
  102. package/dist/screenplay/RemotionRenderer/theme/themes/glassmorphism/config.js +9 -0
  103. package/dist/screenplay/RemotionRenderer/theme/themes/glitch/GlitchNametag.js +252 -0
  104. package/dist/screenplay/RemotionRenderer/theme/themes/glitch/GlitchSentence.js +156 -0
  105. package/dist/screenplay/RemotionRenderer/theme/themes/glitch/GlitchTitle.js +142 -0
  106. package/dist/screenplay/RemotionRenderer/theme/themes/glitch/components/DisplacedText.js +66 -0
  107. package/dist/screenplay/RemotionRenderer/theme/themes/glitch/components/GlitchAnimatedLine.js +38 -0
  108. package/dist/screenplay/RemotionRenderer/theme/themes/glitch/components/SplitSentence.js +80 -0
  109. package/dist/screenplay/RemotionRenderer/theme/themes/glitch/helpers.js +32 -0
  110. package/dist/screenplay/RemotionRenderer/theme/themes/none/Nametag.js +3 -0
  111. package/dist/screenplay/RemotionRenderer/theme/themes/none/Title.js +3 -0
  112. package/dist/screenplay/RemotionRenderer/theme/themes/pushpull/PushPullNametag.js +165 -0
  113. package/dist/screenplay/RemotionRenderer/theme/themes/pushpull/PushPullSentence.js +94 -0
  114. package/dist/screenplay/RemotionRenderer/theme/themes/pushpull/PushPullTitle.js +98 -0
  115. package/dist/screenplay/RemotionRenderer/theme/themes/pushpull/designs/sentence.js +92 -0
  116. package/dist/screenplay/RemotionRenderer/theme/themes/pushpull/designs/title.js +119 -0
  117. package/dist/screenplay/RemotionRenderer/theme/themes/sports/Nametag.js +122 -0
  118. package/dist/screenplay/RemotionRenderer/theme/themes/sports/SportsCaption.js +93 -0
  119. package/dist/screenplay/RemotionRenderer/theme/themes/sports/SportsSentence.js +76 -0
  120. package/dist/screenplay/RemotionRenderer/theme/themes/sports/Title.js +90 -0
  121. package/dist/screenplay/RemotionRenderer/theme/themes/sports/shared.js +62 -0
  122. package/dist/screenplay/RemotionRenderer/theme/themes/sportsbounce/Nametag.js +145 -0
  123. package/dist/screenplay/RemotionRenderer/theme/themes/sportsbounce/SportsBounceSentence.js +148 -0
  124. package/dist/screenplay/RemotionRenderer/theme/themes/sportsbounce/Title.js +160 -0
  125. package/dist/screenplay/RemotionRenderer/tracks/AudioTrack.js +23 -0
  126. package/dist/screenplay/RemotionRenderer/tracks/CaptionsVideoTrack.js +23 -0
  127. package/dist/screenplay/RemotionRenderer/tracks/DynamicVideoComposition.js +31 -0
  128. package/dist/screenplay/RemotionRenderer/tracks/EffectsVideoTrack.js +23 -0
  129. package/dist/screenplay/RemotionRenderer/tracks/LayoutVideoTrack.js +141 -0
  130. package/dist/screenplay/RemotionRenderer/tracks/Soundtrack.js +16 -0
  131. package/dist/screenplay/RemotionRenderer/tracks/Watermark.js +23 -0
  132. package/dist/screenplay/RemotionRenderer/tracks/transitions/GlitchOne.js +92 -0
  133. package/package.json +45 -0
@@ -0,0 +1,588 @@
1
+ import React from "react";
2
+ import { AbsoluteFill, Audio, Img, OffthreadVideo, useVideoConfig, spring, useCurrentFrame } from "remotion";
3
+ import { useOrientationBased } from "../../hooks/useOrientationBased.js";
4
+ import { CHROME_PADDING } from "../../config.js";
5
+ import { PanningImage } from "./MotionStill";
6
+ import FaceCenteredVideo from "../utils/FaceCenteredVideo";
7
+ import PausableImg from "../utils/PausableImg";
8
+ import { BlurOverlay } from "../utils/BlurOverlay";
9
+ import { useVirtualBackground } from "../../hooks/useVirtualBackground";
10
+ import { VirtualBackground } from "../backgrounds/VirtualBackground";
11
+ var Square = function Square(_ref) {
12
+ var children = _ref.children,
13
+ imageUrl = _ref.imageUrl,
14
+ brollSpringProgress = _ref.brollSpringProgress,
15
+ width = _ref.width,
16
+ height = _ref.height,
17
+ logoUrl = _ref.logoUrl,
18
+ logoLeft = _ref.logoLeft,
19
+ logoTop = _ref.logoTop,
20
+ frameColor = _ref.frameColor,
21
+ startVideoFrom = _ref.startVideoFrom,
22
+ noBackgroundVideoUrl = _ref.noBackgroundVideoUrl,
23
+ sourceVideoOrientation = _ref.sourceVideoOrientation,
24
+ videoUrl = _ref.videoUrl,
25
+ faceMetadata = _ref.faceMetadata,
26
+ noBackgroundVideoEffects = _ref.noBackgroundVideoEffects,
27
+ showVirtual = _ref.showVirtual,
28
+ virtualBgUrl = _ref.virtualBgUrl;
29
+ // Calculate broll container dimensions with 2.5% left/right, 10% top/bottom margins
30
+ var brollContainerWidth = width * 0.95; // 95% of viewport (2.5% margin on each side)
31
+ var brollContainerHeight = height * 0.8; // 80% of viewport (10% margin on top/bottom)
32
+
33
+ // Assume 16:9 aspect ratio for broll video
34
+ var brollAspectRatio = 16 / 9;
35
+ var maxBrollWidth = Math.min(brollContainerWidth, brollContainerHeight * brollAspectRatio);
36
+ var finalBrollHeight = maxBrollWidth / brollAspectRatio;
37
+
38
+ // Start with full width, zero height, grow vertically from top with padding
39
+ var currentBrollHeight = finalBrollHeight * brollSpringProgress;
40
+ var brollTop = height * 0.1; // Align to top with 10% padding
41
+ return /*#__PURE__*/React.createElement(AbsoluteFill, {
42
+ style: {
43
+ backgroundColor: frameColor || "transparent",
44
+ padding: 0,
45
+ isolation: "isolate"
46
+ }
47
+ }, /*#__PURE__*/React.createElement("div", {
48
+ style: {
49
+ position: "absolute",
50
+ overflow: "hidden",
51
+ width: width,
52
+ height: height,
53
+ top: 0,
54
+ left: 0,
55
+ zIndex: 1
56
+ }
57
+ }, showVirtual && virtualBgUrl ? /*#__PURE__*/React.createElement(VirtualBackground, {
58
+ url: virtualBgUrl,
59
+ zIndex: 1
60
+ }) : null, faceMetadata ? /*#__PURE__*/React.createElement(FaceCenteredVideo, {
61
+ startFrom: startVideoFrom,
62
+ src: videoUrl,
63
+ muted: true,
64
+ transparent: false,
65
+ faceMetadata: faceMetadata,
66
+ containerWidth: width,
67
+ containerHeight: height,
68
+ useAveragePosition: true,
69
+ centerHorizontally: false
70
+ }) : /*#__PURE__*/React.createElement(OffthreadVideo, {
71
+ startFrom: startVideoFrom,
72
+ src: videoUrl,
73
+ muted: true,
74
+ transparent: false,
75
+ style: {
76
+ height: "100%",
77
+ objectFit: "cover",
78
+ width: "100%",
79
+ objectPosition: sourceVideoOrientation === "portrait" ? "0% 30%" : undefined
80
+ }
81
+ })), imageUrl && brollSpringProgress > 0 && /*#__PURE__*/React.createElement("div", {
82
+ style: {
83
+ position: "absolute",
84
+ overflow: "hidden",
85
+ inset: "".concat(height * 0.1, "px ").concat(width * 0.05, "px"),
86
+ height: currentBrollHeight,
87
+ top: brollTop,
88
+ left: width * 0.025 + (brollContainerWidth - maxBrollWidth) / 2,
89
+ width: maxBrollWidth,
90
+ zIndex: 2,
91
+ opacity: 0.85 * brollSpringProgress,
92
+ borderRadius: "12px",
93
+ border: "16px solid rgba(255, 255, 255, 0.2)",
94
+ boxShadow: "0 8px 32px rgba(0, 0, 0, 0.3)",
95
+ backdropFilter: "blur(1px)",
96
+ WebkitBackdropFilter: "blur(1px)"
97
+ }
98
+ }, /*#__PURE__*/React.createElement(PanningImage, {
99
+ imageUrl: imageUrl
100
+ }), /*#__PURE__*/React.createElement("div", {
101
+ style: {
102
+ position: "absolute",
103
+ top: 0,
104
+ left: 0,
105
+ right: 0,
106
+ bottom: 0,
107
+ background: "linear-gradient(45deg, rgba(255,255,255,0.1) 0%, rgba(0,0,0,0.1) 100%)",
108
+ mixBlendMode: "overlay"
109
+ }
110
+ })), /*#__PURE__*/React.createElement(BlurOverlay, {
111
+ show: !showVirtual && (noBackgroundVideoEffects === null || noBackgroundVideoEffects === void 0 ? void 0 : noBackgroundVideoEffects.backgroundBlur) && noBackgroundVideoUrl,
112
+ width: width,
113
+ height: height,
114
+ zIndex: 1
115
+ }), /*#__PURE__*/React.createElement("div", {
116
+ style: {
117
+ position: "absolute",
118
+ overflow: "hidden",
119
+ width: width,
120
+ height: height,
121
+ top: 0,
122
+ left: 0,
123
+ zIndex: 3
124
+ }
125
+ }, faceMetadata ? /*#__PURE__*/React.createElement(FaceCenteredVideo, {
126
+ startFrom: startVideoFrom,
127
+ src: noBackgroundVideoUrl,
128
+ muted: false,
129
+ transparent: true,
130
+ faceMetadata: faceMetadata,
131
+ containerWidth: width,
132
+ containerHeight: height,
133
+ useAveragePosition: true,
134
+ centerHorizontally: false,
135
+ noBackgroundVideoEffects: noBackgroundVideoEffects
136
+ }) : /*#__PURE__*/React.createElement(OffthreadVideo, {
137
+ startFrom: startVideoFrom,
138
+ src: noBackgroundVideoUrl,
139
+ muted: false,
140
+ transparent: true,
141
+ style: {
142
+ height: "100%",
143
+ objectFit: "cover",
144
+ width: "100%",
145
+ filter: noBackgroundVideoEffects !== null && noBackgroundVideoEffects !== void 0 && noBackgroundVideoEffects.facePop && noBackgroundVideoUrl ? "brightness(1.1) contrast(1.15) saturate(1.05)" : undefined,
146
+ objectPosition: sourceVideoOrientation === "portrait" ? "0% 30%" : undefined
147
+ }
148
+ })), /*#__PURE__*/React.createElement(AbsoluteFill, {
149
+ style: {
150
+ zIndex: 14
151
+ }
152
+ }, children), logoUrl ? /*#__PURE__*/React.createElement("div", {
153
+ style: {
154
+ position: "fixed",
155
+ left: logoLeft,
156
+ top: logoTop,
157
+ padding: 20,
158
+ zIndex: 10
159
+ }
160
+ }, /*#__PURE__*/React.createElement(PausableImg, {
161
+ delayRenderTimeoutInMilliseconds: 61000,
162
+ style: {
163
+ width: "225px",
164
+ maxHeight: "auto",
165
+ objectFit: "contain"
166
+ },
167
+ src: logoUrl
168
+ })) : null);
169
+ };
170
+ var Portrait = function Portrait(_ref2) {
171
+ var children = _ref2.children,
172
+ imageUrl = _ref2.imageUrl,
173
+ brollSpringProgress = _ref2.brollSpringProgress,
174
+ width = _ref2.width,
175
+ height = _ref2.height,
176
+ logoUrl = _ref2.logoUrl,
177
+ logoLeft = _ref2.logoLeft,
178
+ logoTop = _ref2.logoTop,
179
+ frameColor = _ref2.frameColor,
180
+ startVideoFrom = _ref2.startVideoFrom,
181
+ noBackgroundVideoUrl = _ref2.noBackgroundVideoUrl,
182
+ sourceVideoOrientation = _ref2.sourceVideoOrientation,
183
+ videoUrl = _ref2.videoUrl,
184
+ faceMetadata = _ref2.faceMetadata,
185
+ noBackgroundVideoEffects = _ref2.noBackgroundVideoEffects,
186
+ showVirtual = _ref2.showVirtual,
187
+ virtualBgUrl = _ref2.virtualBgUrl;
188
+ // Calculate broll container dimensions with 2.5% left/right, 10% top/bottom margins
189
+ var brollContainerWidth = width * 0.95; // 95% of viewport (2.5% margin on each side)
190
+ var brollContainerHeight = height * 0.8; // 80% of viewport (10% margin on top/bottom)
191
+
192
+ // Assume 16:9 aspect ratio for broll video
193
+ var brollAspectRatio = 16 / 9;
194
+ var maxBrollWidth = Math.min(brollContainerWidth, brollContainerHeight * brollAspectRatio);
195
+ var finalBrollHeight = maxBrollWidth / brollAspectRatio;
196
+
197
+ // Start with full width, zero height, grow vertically from top with padding
198
+ var currentBrollHeight = finalBrollHeight * brollSpringProgress;
199
+ var brollTop = height * 0.1; // Align to top with 10% padding
200
+ return /*#__PURE__*/React.createElement(AbsoluteFill, {
201
+ style: {
202
+ backgroundColor: frameColor || "transparent",
203
+ padding: 0,
204
+ isolation: "isolate"
205
+ }
206
+ }, /*#__PURE__*/React.createElement("div", {
207
+ style: {
208
+ position: "absolute",
209
+ overflow: "hidden",
210
+ width: width,
211
+ height: height,
212
+ top: 0,
213
+ left: 0,
214
+ zIndex: 1
215
+ }
216
+ }, showVirtual && virtualBgUrl ? /*#__PURE__*/React.createElement(VirtualBackground, {
217
+ url: virtualBgUrl,
218
+ zIndex: 1
219
+ }) : null, faceMetadata ? /*#__PURE__*/React.createElement(FaceCenteredVideo, {
220
+ startFrom: startVideoFrom,
221
+ src: videoUrl,
222
+ muted: true,
223
+ transparent: false,
224
+ faceMetadata: faceMetadata,
225
+ containerWidth: width,
226
+ containerHeight: height,
227
+ useAveragePosition: true,
228
+ centerHorizontally: false
229
+ }) : /*#__PURE__*/React.createElement(OffthreadVideo, {
230
+ startFrom: startVideoFrom,
231
+ src: videoUrl,
232
+ muted: true,
233
+ transparent: false,
234
+ style: {
235
+ height: "100%",
236
+ objectFit: "cover",
237
+ width: "100%",
238
+ objectPosition: sourceVideoOrientation === "portrait" ? "0% 30%" : undefined
239
+ }
240
+ })), imageUrl && brollSpringProgress > 0 && /*#__PURE__*/React.createElement("div", {
241
+ style: {
242
+ position: "absolute",
243
+ overflow: "hidden",
244
+ borderRadius: "16px",
245
+ height: currentBrollHeight,
246
+ top: brollTop,
247
+ left: width * 0.025 + (brollContainerWidth - maxBrollWidth) / 2,
248
+ width: maxBrollWidth,
249
+ zIndex: 2,
250
+ opacity: 0.8 * brollSpringProgress,
251
+ border: "16px solid rgba(255, 255, 255, 0.25)",
252
+ boxShadow: "0 12px 40px rgba(0, 0, 0, 0.4)",
253
+ backdropFilter: "blur(2px) brightness(1.1)",
254
+ WebkitBackdropFilter: "blur(2px) brightness(1.1)"
255
+ }
256
+ }, /*#__PURE__*/React.createElement(PanningImage, {
257
+ imageUrl: imageUrl
258
+ }), /*#__PURE__*/React.createElement("div", {
259
+ style: {
260
+ position: "absolute",
261
+ top: 0,
262
+ left: 0,
263
+ right: 0,
264
+ bottom: 0,
265
+ background: "radial-gradient(circle at center, rgba(255,255,255,0.15) 0%, rgba(0,0,0,0.1) 70%)",
266
+ mixBlendMode: "soft-light"
267
+ }
268
+ })), /*#__PURE__*/React.createElement(BlurOverlay, {
269
+ show: !showVirtual && (noBackgroundVideoEffects === null || noBackgroundVideoEffects === void 0 ? void 0 : noBackgroundVideoEffects.backgroundBlur) && noBackgroundVideoUrl,
270
+ width: width,
271
+ height: height,
272
+ zIndex: 1
273
+ }), /*#__PURE__*/React.createElement("div", {
274
+ style: {
275
+ position: "absolute",
276
+ overflow: "hidden",
277
+ width: width,
278
+ height: height,
279
+ top: 0,
280
+ left: 0,
281
+ zIndex: 3
282
+ }
283
+ }, faceMetadata ? /*#__PURE__*/React.createElement(FaceCenteredVideo, {
284
+ startFrom: startVideoFrom,
285
+ src: noBackgroundVideoUrl,
286
+ muted: false,
287
+ transparent: true,
288
+ faceMetadata: faceMetadata,
289
+ containerWidth: width,
290
+ containerHeight: height,
291
+ useAveragePosition: true,
292
+ centerHorizontally: false,
293
+ noBackgroundVideoEffects: noBackgroundVideoEffects
294
+ }) : /*#__PURE__*/React.createElement(OffthreadVideo, {
295
+ startFrom: startVideoFrom,
296
+ src: noBackgroundVideoUrl,
297
+ muted: false,
298
+ transparent: true,
299
+ style: {
300
+ filter: noBackgroundVideoEffects !== null && noBackgroundVideoEffects !== void 0 && noBackgroundVideoEffects.facePop ? "brightness(1.1) contrast(1.15) saturate(1.05)" : undefined,
301
+ height: "100%",
302
+ objectFit: "cover",
303
+ width: "100%",
304
+ objectPosition: sourceVideoOrientation === "portrait" ? "0% 30%" : undefined
305
+ }
306
+ })), /*#__PURE__*/React.createElement(AbsoluteFill, {
307
+ style: {
308
+ zIndex: 4
309
+ }
310
+ }, children), logoUrl ? /*#__PURE__*/React.createElement("div", {
311
+ style: {
312
+ position: "fixed",
313
+ left: logoLeft,
314
+ top: logoTop,
315
+ padding: 20,
316
+ zIndex: 10
317
+ }
318
+ }, /*#__PURE__*/React.createElement(PausableImg, {
319
+ delayRenderTimeoutInMilliseconds: 61000,
320
+ style: {
321
+ width: "225px",
322
+ maxHeight: "auto",
323
+ objectFit: "contain"
324
+ },
325
+ src: logoUrl
326
+ })) : null);
327
+ };
328
+ var Landscape = function Landscape(_ref3) {
329
+ var children = _ref3.children,
330
+ imageUrl = _ref3.imageUrl,
331
+ brollSpringProgress = _ref3.brollSpringProgress,
332
+ width = _ref3.width,
333
+ height = _ref3.height,
334
+ logoUrl = _ref3.logoUrl,
335
+ logoLeft = _ref3.logoLeft,
336
+ logoTop = _ref3.logoTop,
337
+ frameColor = _ref3.frameColor,
338
+ startVideoFrom = _ref3.startVideoFrom,
339
+ noBackgroundVideoUrl = _ref3.noBackgroundVideoUrl,
340
+ sourceVideoOrientation = _ref3.sourceVideoOrientation,
341
+ videoUrl = _ref3.videoUrl,
342
+ faceMetadata = _ref3.faceMetadata,
343
+ noBackgroundVideoEffects = _ref3.noBackgroundVideoEffects,
344
+ showVirtual = _ref3.showVirtual,
345
+ virtualBgUrl = _ref3.virtualBgUrl;
346
+ // Calculate broll container dimensions with 2.5% left/right, 10% top/bottom margins
347
+ var brollContainerWidth = width * 0.95; // 95% of viewport (2.5% margin on each side)
348
+ var brollContainerHeight = height * 0.8; // 80% of viewport (10% margin on top/bottom)
349
+
350
+ // Assume 16:9 aspect ratio for broll video
351
+ var brollAspectRatio = 16 / 9;
352
+ var maxBrollWidth = Math.min(brollContainerWidth, brollContainerHeight * brollAspectRatio);
353
+ var finalBrollHeight = maxBrollWidth / brollAspectRatio;
354
+
355
+ // Start with full width, zero height, grow vertically from center
356
+ var currentBrollHeight = finalBrollHeight * brollSpringProgress;
357
+ var brollTop = height * 0.1 + (brollContainerHeight - currentBrollHeight) / 2;
358
+ return /*#__PURE__*/React.createElement(AbsoluteFill, {
359
+ style: {
360
+ backgroundColor: frameColor || "transparent",
361
+ padding: 0,
362
+ isolation: "isolate"
363
+ }
364
+ }, /*#__PURE__*/React.createElement("div", {
365
+ style: {
366
+ position: "absolute",
367
+ overflow: "hidden",
368
+ width: width,
369
+ height: height,
370
+ top: 0,
371
+ left: 0,
372
+ zIndex: 1
373
+ }
374
+ }, showVirtual && virtualBgUrl ? /*#__PURE__*/React.createElement(VirtualBackground, {
375
+ url: virtualBgUrl,
376
+ zIndex: 1
377
+ }) : null, faceMetadata ? /*#__PURE__*/React.createElement(FaceCenteredVideo, {
378
+ startFrom: startVideoFrom,
379
+ src: videoUrl,
380
+ muted: true,
381
+ transparent: false,
382
+ faceMetadata: faceMetadata,
383
+ containerWidth: width,
384
+ containerHeight: height,
385
+ useAveragePosition: true,
386
+ centerHorizontally: false
387
+ }) : /*#__PURE__*/React.createElement(OffthreadVideo, {
388
+ startFrom: startVideoFrom,
389
+ src: videoUrl,
390
+ muted: true,
391
+ transparent: false,
392
+ style: {
393
+ height: "100%",
394
+ objectFit: "cover",
395
+ width: "100%",
396
+ objectPosition: sourceVideoOrientation === "portrait" ? "0% 30%" : undefined
397
+ }
398
+ })), imageUrl && brollSpringProgress > 0 && /*#__PURE__*/React.createElement("div", {
399
+ style: {
400
+ position: "absolute",
401
+ overflow: "hidden",
402
+ borderRadius: "20px",
403
+ height: currentBrollHeight,
404
+ top: brollTop,
405
+ left: width * 0.025 + (brollContainerWidth - maxBrollWidth) / 2,
406
+ width: maxBrollWidth,
407
+ zIndex: 2,
408
+ opacity: 0.75 * brollSpringProgress,
409
+ border: "48px solid rgba(255, 255, 255, 0.3)",
410
+ boxShadow: "0 16px 60px rgba(0, 0, 0, 0.5)",
411
+ backdropFilter: "blur(30px) contrast(1.1)",
412
+ WebkitBackdropFilter: "blur(3px) contrast(1.1)"
413
+ }
414
+ }, /*#__PURE__*/React.createElement(PanningImage, {
415
+ imageUrl: imageUrl
416
+ }), /*#__PURE__*/React.createElement("div", {
417
+ style: {
418
+ borderRadius: "20px",
419
+ position: "absolute",
420
+ top: 0,
421
+ left: 0,
422
+ right: 0,
423
+ bottom: 0,
424
+ background: "linear-gradient(135deg, rgba(255,255,255,0.2) 0%, rgba(0,0,0,0.15) 100%)",
425
+ mixBlendMode: "overlay"
426
+ }
427
+ })), /*#__PURE__*/React.createElement(BlurOverlay, {
428
+ show: !showVirtual && (noBackgroundVideoEffects === null || noBackgroundVideoEffects === void 0 ? void 0 : noBackgroundVideoEffects.backgroundBlur) && noBackgroundVideoUrl,
429
+ width: width,
430
+ height: height,
431
+ zIndex: 1
432
+ }), /*#__PURE__*/React.createElement("div", {
433
+ style: {
434
+ position: "absolute",
435
+ overflow: "hidden",
436
+ width: width,
437
+ height: height,
438
+ top: 0,
439
+ left: 0,
440
+ zIndex: 3
441
+ }
442
+ }, faceMetadata ? /*#__PURE__*/React.createElement(FaceCenteredVideo, {
443
+ startFrom: startVideoFrom,
444
+ src: noBackgroundVideoUrl,
445
+ muted: false,
446
+ transparent: true,
447
+ faceMetadata: faceMetadata,
448
+ containerWidth: width,
449
+ containerHeight: height,
450
+ useAveragePosition: true,
451
+ centerHorizontally: false,
452
+ noBackgroundVideoEffects: noBackgroundVideoEffects
453
+ }) : /*#__PURE__*/React.createElement(OffthreadVideo, {
454
+ startFrom: startVideoFrom,
455
+ src: noBackgroundVideoUrl,
456
+ muted: false,
457
+ transparent: true,
458
+ style: {
459
+ filter: noBackgroundVideoEffects !== null && noBackgroundVideoEffects !== void 0 && noBackgroundVideoEffects.facePop ? "brightness(1.1) contrast(1.15) saturate(1.05)" : undefined,
460
+ height: "100%",
461
+ objectFit: "cover",
462
+ width: "100%",
463
+ objectPosition: sourceVideoOrientation === "portrait" ? "0% 30%" : undefined
464
+ }
465
+ })), /*#__PURE__*/React.createElement(AbsoluteFill, {
466
+ style: {
467
+ zIndex: 14
468
+ }
469
+ }, children), logoUrl ? /*#__PURE__*/React.createElement("div", {
470
+ style: {
471
+ position: "fixed",
472
+ left: logoLeft,
473
+ top: logoTop,
474
+ padding: 20,
475
+ zIndex: 10
476
+ }
477
+ }, /*#__PURE__*/React.createElement(PausableImg, {
478
+ delayRenderTimeoutInMilliseconds: 61000,
479
+ style: {
480
+ width: "225px",
481
+ maxHeight: "auto",
482
+ objectFit: "contain"
483
+ },
484
+ src: logoUrl
485
+ })) : null);
486
+ };
487
+ var MotionStillStudioBackdrop = function MotionStillStudioBackdrop(_ref4) {
488
+ var videoUrl = _ref4.videoUrl,
489
+ startVideoFrom = _ref4.startVideoFrom,
490
+ imageUrl = _ref4.imageUrl,
491
+ frameColor = _ref4.frameColor,
492
+ logoUrl = _ref4.logoUrl,
493
+ children = _ref4.children,
494
+ sourceVideoOrientation = _ref4.sourceVideoOrientation,
495
+ _ref4$disableTransiti = _ref4.disableTransitionSounds,
496
+ disableTransitionSounds = _ref4$disableTransiti === void 0 ? false : _ref4$disableTransiti,
497
+ noBackgroundVideoUrl = _ref4.noBackgroundVideoUrl,
498
+ durationInFrames = _ref4.durationInFrames,
499
+ faceMetadata = _ref4.faceMetadata,
500
+ muted = _ref4.muted,
501
+ noBackgroundVideoEffects = _ref4.noBackgroundVideoEffects;
502
+ var _useVideoConfig = useVideoConfig(),
503
+ width = _useVideoConfig.width,
504
+ height = _useVideoConfig.height,
505
+ fps = _useVideoConfig.fps;
506
+ var frame = useCurrentFrame();
507
+ var _useVirtualBackground = useVirtualBackground(),
508
+ isVirtual = _useVirtualBackground.isVirtual,
509
+ virtualBgUrl = _useVirtualBackground.url;
510
+ var showVirtual = isVirtual && !!noBackgroundVideoUrl;
511
+ var _useOrientationBased = useOrientationBased({
512
+ portrait: {
513
+ logoTop: CHROME_PADDING * 2,
514
+ logoLeft: CHROME_PADDING * 2,
515
+ BrollStudioBackdropComponent: Portrait
516
+ },
517
+ landscape: {
518
+ logoTop: CHROME_PADDING * 2,
519
+ logoLeft: CHROME_PADDING * 2,
520
+ BrollStudioBackdropComponent: Landscape
521
+ },
522
+ square: {
523
+ logoTop: CHROME_PADDING * 2,
524
+ logoLeft: CHROME_PADDING * 2,
525
+ BrollStudioBackdropComponent: Square
526
+ }
527
+ }),
528
+ BrollStudioBackdropComponent = _useOrientationBased.BrollStudioBackdropComponent,
529
+ logoTop = _useOrientationBased.logoTop,
530
+ logoLeft = _useOrientationBased.logoLeft;
531
+
532
+ // Spring animation for broll entrance/exit - slow start, faster end
533
+ var entranceEndFrame = fps * 0.5; // 0.5 seconds for entrance
534
+ var exitStartFrame = durationInFrames - fps * 1.5; // 0.5 seconds before end for exit
535
+
536
+ var brollSpringProgress = 0;
537
+ if (frame <= entranceEndFrame) {
538
+ // Entrance animation - slow start, faster end
539
+ brollSpringProgress = spring({
540
+ frame: frame,
541
+ fps: fps,
542
+ config: {
543
+ damping: 100,
544
+ stiffness: 160,
545
+ mass: 1
546
+ }
547
+ });
548
+ } else if (frame >= exitStartFrame) {
549
+ // Exit animation - reverse spring
550
+ var exitFrame = frame - exitStartFrame;
551
+ var exitSpring = spring({
552
+ frame: exitFrame,
553
+ fps: fps,
554
+ config: {
555
+ damping: 300,
556
+ stiffness: 80,
557
+ mass: 4
558
+ }
559
+ });
560
+ brollSpringProgress = 1 - exitSpring;
561
+ } else {
562
+ // Middle section - fully visible
563
+ brollSpringProgress = 1;
564
+ }
565
+ return /*#__PURE__*/React.createElement(React.Fragment, null, !disableTransitionSounds && /*#__PURE__*/React.createElement(Audio, {
566
+ src: "https://cdn.zync.ai/assets/static/swoosh.mp3",
567
+ volume: 0.25
568
+ }), /*#__PURE__*/React.createElement(BrollStudioBackdropComponent, {
569
+ imageUrl: imageUrl,
570
+ brollSpringProgress: brollSpringProgress,
571
+ width: width,
572
+ height: height,
573
+ logoUrl: logoUrl,
574
+ frameColor: frameColor,
575
+ startVideoFrom: startVideoFrom,
576
+ noBackgroundVideoUrl: noBackgroundVideoUrl,
577
+ sourceVideoOrientation: sourceVideoOrientation,
578
+ logoLeft: logoLeft,
579
+ logoTop: logoTop,
580
+ videoUrl: videoUrl,
581
+ faceMetadata: faceMetadata,
582
+ muted: muted,
583
+ noBackgroundVideoEffects: noBackgroundVideoEffects,
584
+ showVirtual: showVirtual,
585
+ virtualBgUrl: virtualBgUrl
586
+ }, children));
587
+ };
588
+ export { MotionStillStudioBackdrop };