@remotion/promo-pages 4.0.456 → 4.0.458

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 (278) hide show
  1. package/dist/Homepage.js +912 -684
  2. package/dist/design.js +530 -447
  3. package/dist/experts/experts-data.js +124 -2
  4. package/dist/experts.js +667 -441
  5. package/dist/homepage/Pricing.js +533 -450
  6. package/dist/prompts/PromptsGallery.js +534 -451
  7. package/dist/prompts/PromptsShow.js +566 -483
  8. package/dist/prompts/PromptsSubmit.js +568 -485
  9. package/dist/team.js +530 -447
  10. package/dist/template-modal-content.js +540 -457
  11. package/dist/templates.js +530 -447
  12. package/package.json +13 -13
  13. package/public/img/freelancers/huang-chi-chang.jpg +0 -0
  14. package/dist/cn.d.ts +0 -2
  15. package/dist/cn.js +0 -5
  16. package/dist/components/3DEngine/ButtonDemo.d.ts +0 -2
  17. package/dist/components/3DEngine/ButtonDemo.js +0 -43
  18. package/dist/components/3DEngine/Faces.d.ts +0 -5
  19. package/dist/components/3DEngine/Faces.js +0 -7
  20. package/dist/components/3DEngine/Outer.d.ts +0 -8
  21. package/dist/components/3DEngine/Outer.js +0 -56
  22. package/dist/components/3DEngine/Switch.d.ts +0 -4
  23. package/dist/components/3DEngine/Switch.js +0 -4
  24. package/dist/components/3DEngine/get-child-node-from.d.ts +0 -1
  25. package/dist/components/3DEngine/get-child-node-from.js +0 -14
  26. package/dist/components/3DEngine/hover-transforms.d.ts +0 -9
  27. package/dist/components/3DEngine/hover-transforms.js +0 -177
  28. package/dist/components/BackButton.d.ts +0 -6
  29. package/dist/components/BackButton.js +0 -9
  30. package/dist/components/CommandCopyButton.d.ts +0 -5
  31. package/dist/components/CommandCopyButton.js +0 -4
  32. package/dist/components/Homepage.d.ts +0 -6
  33. package/dist/components/Homepage.js +0 -20
  34. package/dist/components/ManageTeamMembers.d.ts +0 -2
  35. package/dist/components/ManageTeamMembers.js +0 -42
  36. package/dist/components/Spinner.d.ts +0 -3
  37. package/dist/components/Spinner.js +0 -4
  38. package/dist/components/TeamPicture.d.ts +0 -1
  39. package/dist/components/TeamPicture.js +0 -4
  40. package/dist/components/design.d.ts +0 -1
  41. package/dist/components/design.js +0 -33
  42. package/dist/components/experts/ExpertsPage.d.ts +0 -11
  43. package/dist/components/experts/ExpertsPage.js +0 -50
  44. package/dist/components/experts/experts-data.d.ts +0 -15
  45. package/dist/components/experts/experts-data.js +0 -276
  46. package/dist/components/experts/experts-icons.d.ts +0 -7
  47. package/dist/components/experts/experts-icons.js +0 -36
  48. package/dist/components/experts.d.ts +0 -3
  49. package/dist/components/experts.js +0 -2
  50. package/dist/components/homepage/BackgroundAnimation.d.ts +0 -2
  51. package/dist/components/homepage/BackgroundAnimation.js +0 -66
  52. package/dist/components/homepage/ChooseTemplate.d.ts +0 -2
  53. package/dist/components/homepage/ChooseTemplate.js +0 -25
  54. package/dist/components/homepage/CommunityStats.d.ts +0 -3
  55. package/dist/components/homepage/CommunityStats.js +0 -6
  56. package/dist/components/homepage/CommunityStatsItems.d.ts +0 -7
  57. package/dist/components/homepage/CommunityStatsItems.js +0 -58
  58. package/dist/components/homepage/Demo/Card.d.ts +0 -15
  59. package/dist/components/homepage/Demo/Card.js +0 -174
  60. package/dist/components/homepage/Demo/Cards.d.ts +0 -15
  61. package/dist/components/homepage/Demo/Cards.js +0 -57
  62. package/dist/components/homepage/Demo/Comp.d.ts +0 -38
  63. package/dist/components/homepage/Demo/Comp.js +0 -72
  64. package/dist/components/homepage/Demo/CurrentCountry.d.ts +0 -9
  65. package/dist/components/homepage/Demo/CurrentCountry.js +0 -48
  66. package/dist/components/homepage/Demo/DemoError.d.ts +0 -2
  67. package/dist/components/homepage/Demo/DemoError.js +0 -10
  68. package/dist/components/homepage/Demo/DemoErrorIcon.d.ts +0 -2
  69. package/dist/components/homepage/Demo/DemoErrorIcon.js +0 -16
  70. package/dist/components/homepage/Demo/DemoRender.d.ts +0 -33
  71. package/dist/components/homepage/Demo/DemoRender.js +0 -107
  72. package/dist/components/homepage/Demo/DigitWheel.d.ts +0 -9
  73. package/dist/components/homepage/Demo/DigitWheel.js +0 -94
  74. package/dist/components/homepage/Demo/DisplayedEmoji.d.ts +0 -5
  75. package/dist/components/homepage/Demo/DisplayedEmoji.js +0 -59
  76. package/dist/components/homepage/Demo/DoneCheckmark.d.ts +0 -2
  77. package/dist/components/homepage/Demo/DoneCheckmark.js +0 -20
  78. package/dist/components/homepage/Demo/DownloadNudge.d.ts +0 -2
  79. package/dist/components/homepage/Demo/DownloadNudge.js +0 -27
  80. package/dist/components/homepage/Demo/DragAndDropNudge.d.ts +0 -3
  81. package/dist/components/homepage/Demo/DragAndDropNudge.js +0 -26
  82. package/dist/components/homepage/Demo/EmojiCard.d.ts +0 -10
  83. package/dist/components/homepage/Demo/EmojiCard.js +0 -120
  84. package/dist/components/homepage/Demo/Minus.d.ts +0 -5
  85. package/dist/components/homepage/Demo/Minus.js +0 -11
  86. package/dist/components/homepage/Demo/PlayPauseButton.d.ts +0 -5
  87. package/dist/components/homepage/Demo/PlayPauseButton.js +0 -47
  88. package/dist/components/homepage/Demo/PlayerControls.d.ts +0 -8
  89. package/dist/components/homepage/Demo/PlayerControls.js +0 -15
  90. package/dist/components/homepage/Demo/PlayerSeekBar.d.ts +0 -11
  91. package/dist/components/homepage/Demo/PlayerSeekBar.js +0 -216
  92. package/dist/components/homepage/Demo/PlayerVolume.d.ts +0 -5
  93. package/dist/components/homepage/Demo/PlayerVolume.js +0 -53
  94. package/dist/components/homepage/Demo/Progress.d.ts +0 -4
  95. package/dist/components/homepage/Demo/Progress.js +0 -14
  96. package/dist/components/homepage/Demo/Spinner.d.ts +0 -5
  97. package/dist/components/homepage/Demo/Spinner.js +0 -37
  98. package/dist/components/homepage/Demo/Switcher.d.ts +0 -6
  99. package/dist/components/homepage/Demo/Switcher.js +0 -25
  100. package/dist/components/homepage/Demo/Temperature.d.ts +0 -6
  101. package/dist/components/homepage/Demo/Temperature.js +0 -21
  102. package/dist/components/homepage/Demo/TemperatureNumber.d.ts +0 -5
  103. package/dist/components/homepage/Demo/TemperatureNumber.js +0 -36
  104. package/dist/components/homepage/Demo/ThemeNudge.d.ts +0 -3
  105. package/dist/components/homepage/Demo/ThemeNudge.js +0 -35
  106. package/dist/components/homepage/Demo/TimeDisplay.d.ts +0 -6
  107. package/dist/components/homepage/Demo/TimeDisplay.js +0 -27
  108. package/dist/components/homepage/Demo/TrendingRepos.d.ts +0 -6
  109. package/dist/components/homepage/Demo/TrendingRepos.js +0 -65
  110. package/dist/components/homepage/Demo/icons.d.ts +0 -10
  111. package/dist/components/homepage/Demo/icons.js +0 -22
  112. package/dist/components/homepage/Demo/index.d.ts +0 -2
  113. package/dist/components/homepage/Demo/index.js +0 -95
  114. package/dist/components/homepage/Demo/math.d.ts +0 -10
  115. package/dist/components/homepage/Demo/math.js +0 -29
  116. package/dist/components/homepage/Demo/types.d.ts +0 -6
  117. package/dist/components/homepage/Demo/types.js +0 -0
  118. package/dist/components/homepage/EditorStarterSection.d.ts +0 -3
  119. package/dist/components/homepage/EditorStarterSection.js +0 -8
  120. package/dist/components/homepage/EvaluateRemotion.d.ts +0 -3
  121. package/dist/components/homepage/EvaluateRemotion.js +0 -21
  122. package/dist/components/homepage/FreePricing.d.ts +0 -4
  123. package/dist/components/homepage/FreePricing.js +0 -133
  124. package/dist/components/homepage/GetStartedStrip.d.ts +0 -2
  125. package/dist/components/homepage/GetStartedStrip.js +0 -14
  126. package/dist/components/homepage/GitHubButton.d.ts +0 -2
  127. package/dist/components/homepage/GitHubButton.js +0 -7
  128. package/dist/components/homepage/IconForTemplate.d.ts +0 -6
  129. package/dist/components/homepage/IconForTemplate.js +0 -105
  130. package/dist/components/homepage/IfYouKnowReact.d.ts +0 -3
  131. package/dist/components/homepage/IfYouKnowReact.js +0 -23
  132. package/dist/components/homepage/MoreTemplatesButton.d.ts +0 -2
  133. package/dist/components/homepage/MoreTemplatesButton.js +0 -11
  134. package/dist/components/homepage/MuxVideo.d.ts +0 -7
  135. package/dist/components/homepage/MuxVideo.js +0 -45
  136. package/dist/components/homepage/NewsletterButton.d.ts +0 -2
  137. package/dist/components/homepage/NewsletterButton.js +0 -38
  138. package/dist/components/homepage/ParameterizeAndEdit.d.ts +0 -2
  139. package/dist/components/homepage/ParameterizeAndEdit.js +0 -22
  140. package/dist/components/homepage/Pricing.d.ts +0 -2
  141. package/dist/components/homepage/Pricing.js +0 -15
  142. package/dist/components/homepage/PricingBulletPoint.d.ts +0 -6
  143. package/dist/components/homepage/PricingBulletPoint.js +0 -19
  144. package/dist/components/homepage/RealMp4Videos.d.ts +0 -2
  145. package/dist/components/homepage/RealMp4Videos.js +0 -41
  146. package/dist/components/homepage/Spacer.d.ts +0 -2
  147. package/dist/components/homepage/Spacer.js +0 -4
  148. package/dist/components/homepage/TemplateIcon.d.ts +0 -5
  149. package/dist/components/homepage/TemplateIcon.js +0 -24
  150. package/dist/components/homepage/TextInput.d.ts +0 -7
  151. package/dist/components/homepage/TextInput.js +0 -34
  152. package/dist/components/homepage/TrustedByBanner.d.ts +0 -2
  153. package/dist/components/homepage/TrustedByBanner.js +0 -27
  154. package/dist/components/homepage/VideoApps.d.ts +0 -4
  155. package/dist/components/homepage/VideoApps.js +0 -72
  156. package/dist/components/homepage/VideoAppsShowcase.d.ts +0 -3
  157. package/dist/components/homepage/VideoAppsShowcase.js +0 -139
  158. package/dist/components/homepage/VideoAppsTitle.d.ts +0 -4
  159. package/dist/components/homepage/VideoAppsTitle.js +0 -4
  160. package/dist/components/homepage/VideoPlayerWithControls.d.ts +0 -20
  161. package/dist/components/homepage/VideoPlayerWithControls.js +0 -105
  162. package/dist/components/homepage/WriteInReact.d.ts +0 -2
  163. package/dist/components/homepage/WriteInReact.js +0 -10
  164. package/dist/components/homepage/YouAreHere.d.ts +0 -2
  165. package/dist/components/homepage/YouAreHere.js +0 -23
  166. package/dist/components/homepage/layout/Button.d.ts +0 -22
  167. package/dist/components/homepage/layout/Button.js +0 -30
  168. package/dist/components/homepage/layout/colors.d.ts +0 -13
  169. package/dist/components/homepage/layout/colors.js +0 -14
  170. package/dist/components/homepage/layout/use-color-mode.d.ts +0 -21
  171. package/dist/components/homepage/layout/use-color-mode.js +0 -22
  172. package/dist/components/homepage/layout/use-el-size.d.ts +0 -5
  173. package/dist/components/homepage/layout/use-el-size.js +0 -40
  174. package/dist/components/homepage/layout/use-mobile-layout.d.ts +0 -1
  175. package/dist/components/homepage/layout/use-mobile-layout.js +0 -6
  176. package/dist/components/icons/blank.d.ts +0 -3
  177. package/dist/components/icons/blank.js +0 -4
  178. package/dist/components/icons/brain.d.ts +0 -2
  179. package/dist/components/icons/brain.js +0 -4
  180. package/dist/components/icons/clone.d.ts +0 -2
  181. package/dist/components/icons/clone.js +0 -2
  182. package/dist/components/icons/code-hike.d.ts +0 -3
  183. package/dist/components/icons/code-hike.js +0 -4
  184. package/dist/components/icons/cubes.d.ts +0 -3
  185. package/dist/components/icons/cubes.js +0 -4
  186. package/dist/components/icons/editor.d.ts +0 -3
  187. package/dist/components/icons/editor.js +0 -4
  188. package/dist/components/icons/electron.d.ts +0 -4
  189. package/dist/components/icons/electron.js +0 -4
  190. package/dist/components/icons/js.d.ts +0 -3
  191. package/dist/components/icons/js.js +0 -4
  192. package/dist/components/icons/music.d.ts +0 -2
  193. package/dist/components/icons/music.js +0 -4
  194. package/dist/components/icons/next.d.ts +0 -4
  195. package/dist/components/icons/next.js +0 -4
  196. package/dist/components/icons/overlay.d.ts +0 -3
  197. package/dist/components/icons/overlay.js +0 -4
  198. package/dist/components/icons/prompt-to-video.d.ts +0 -2
  199. package/dist/components/icons/prompt-to-video.js +0 -4
  200. package/dist/components/icons/recorder.d.ts +0 -3
  201. package/dist/components/icons/recorder.js +0 -4
  202. package/dist/components/icons/remix.d.ts +0 -3
  203. package/dist/components/icons/remix.js +0 -4
  204. package/dist/components/icons/render-server.d.ts +0 -3
  205. package/dist/components/icons/render-server.js +0 -4
  206. package/dist/components/icons/skia.d.ts +0 -3
  207. package/dist/components/icons/skia.js +0 -4
  208. package/dist/components/icons/stargazer.d.ts +0 -3
  209. package/dist/components/icons/stargazer.js +0 -4
  210. package/dist/components/icons/still.d.ts +0 -3
  211. package/dist/components/icons/still.js +0 -4
  212. package/dist/components/icons/tailwind.d.ts +0 -3
  213. package/dist/components/icons/tailwind.js +0 -4
  214. package/dist/components/icons/tiktok.d.ts +0 -3
  215. package/dist/components/icons/tiktok.js +0 -4
  216. package/dist/components/icons/timeline.d.ts +0 -3
  217. package/dist/components/icons/timeline.js +0 -4
  218. package/dist/components/icons/ts.d.ts +0 -3
  219. package/dist/components/icons/ts.js +0 -4
  220. package/dist/components/icons/undo.d.ts +0 -3
  221. package/dist/components/icons/undo.js +0 -2
  222. package/dist/components/icons/vercel.d.ts +0 -4
  223. package/dist/components/icons/vercel.js +0 -4
  224. package/dist/components/icons/waveform.d.ts +0 -3
  225. package/dist/components/icons/waveform.js +0 -4
  226. package/dist/components/prompts/CardLikeButton.d.ts +0 -5
  227. package/dist/components/prompts/CardLikeButton.js +0 -49
  228. package/dist/components/prompts/ClipboardIcon.d.ts +0 -5
  229. package/dist/components/prompts/ClipboardIcon.js +0 -4
  230. package/dist/components/prompts/CopyPromptButton.d.ts +0 -4
  231. package/dist/components/prompts/CopyPromptButton.js +0 -13
  232. package/dist/components/prompts/LikeButton.d.ts +0 -5
  233. package/dist/components/prompts/LikeButton.js +0 -49
  234. package/dist/components/prompts/MuxPlayer.d.ts +0 -8
  235. package/dist/components/prompts/MuxPlayer.js +0 -21
  236. package/dist/components/prompts/NewBackButton.d.ts +0 -5
  237. package/dist/components/prompts/NewBackButton.js +0 -8
  238. package/dist/components/prompts/Page.d.ts +0 -8
  239. package/dist/components/prompts/Page.js +0 -7
  240. package/dist/components/prompts/PromptsGallery.d.ts +0 -7
  241. package/dist/components/prompts/PromptsGallery.js +0 -60
  242. package/dist/components/prompts/PromptsShow.d.ts +0 -5
  243. package/dist/components/prompts/PromptsShow.js +0 -17
  244. package/dist/components/prompts/PromptsSubmit.d.ts +0 -2
  245. package/dist/components/prompts/PromptsSubmit.js +0 -173
  246. package/dist/components/prompts/config.d.ts +0 -1
  247. package/dist/components/prompts/config.js +0 -1
  248. package/dist/components/prompts/prompt-helpers.d.ts +0 -8
  249. package/dist/components/prompts/prompt-helpers.js +0 -76
  250. package/dist/components/prompts/prompt-types.d.ts +0 -14
  251. package/dist/components/prompts/prompt-types.js +0 -0
  252. package/dist/components/prompts/use-heart-animation.d.ts +0 -5
  253. package/dist/components/prompts/use-heart-animation.js +0 -29
  254. package/dist/components/team/TeamCards.d.ts +0 -6
  255. package/dist/components/team/TeamCards.js +0 -19
  256. package/dist/components/team/TitleTeamCards.d.ts +0 -2
  257. package/dist/components/team/TitleTeamCards.js +0 -6
  258. package/dist/components/team/TrustSection.d.ts +0 -2
  259. package/dist/components/team/TrustSection.js +0 -59
  260. package/dist/components/team.d.ts +0 -3
  261. package/dist/components/team.js +0 -15
  262. package/dist/components/template-modal-content.d.ts +0 -5
  263. package/dist/components/template-modal-content.js +0 -73
  264. package/dist/components/templates.d.ts +0 -2
  265. package/dist/components/templates.js +0 -27
  266. package/dist/helpers/mobile-layout.d.ts +0 -1
  267. package/dist/helpers/mobile-layout.js +0 -6
  268. package/dist/helpers/use-el-size.d.ts +0 -5
  269. package/dist/helpers/use-el-size.js +0 -40
  270. package/dist/main.d.ts +0 -1
  271. package/dist/main.js +0 -6
  272. package/dist/prompts-show.d.ts +0 -1
  273. package/dist/prompts-show.js +0 -20
  274. package/dist/prompts-submit.d.ts +0 -1
  275. package/dist/prompts-submit.js +0 -6
  276. package/dist/prompts.d.ts +0 -1
  277. package/dist/prompts.js +0 -6
  278. package/dist/team.d.ts +0 -1
package/dist/Homepage.js CHANGED
@@ -45,6 +45,10 @@ var experts = [
45
45
  linkedin: "in/sterv/",
46
46
  email: "stephen@middy.com",
47
47
  videocall: null,
48
+ discord: {
49
+ username: "stervdotcom",
50
+ userId: "613828260534550719"
51
+ },
48
52
  since: new Date("2022-08-15").getTime(),
49
53
  description: /* @__PURE__ */ jsxs("div", {
50
54
  children: [
@@ -69,6 +73,10 @@ var experts = [
69
73
  linkedin: "in/just-moh-it/",
70
74
  email: "yo@mohitya.dev",
71
75
  videocall: null,
76
+ discord: {
77
+ username: "justmohit",
78
+ userId: "616199379530940426"
79
+ },
72
80
  since: new Date("2022-08-15").getTime(),
73
81
  description: /* @__PURE__ */ jsxs("div", {
74
82
  children: [
@@ -95,6 +103,10 @@ var experts = [
95
103
  linkedin: "in/satelllte/",
96
104
  email: "lunaerxs@gmail.com",
97
105
  videocall: null,
106
+ discord: {
107
+ username: "satelllte",
108
+ userId: "564382615105306634"
109
+ },
98
110
  since: new Date("2022-09-16").getTime(),
99
111
  description: /* @__PURE__ */ jsxs("div", {
100
112
  children: [
@@ -124,6 +136,10 @@ var experts = [
124
136
  linkedin: null,
125
137
  email: "ben@captok.ai",
126
138
  videocall: null,
139
+ discord: {
140
+ username: "ben201000",
141
+ userId: "833862694372245515"
142
+ },
127
143
  since: new Date("2022-11-03").getTime(),
128
144
  description: /* @__PURE__ */ jsxs("div", {
129
145
  children: [
@@ -151,6 +167,7 @@ var experts = [
151
167
  since: new Date("2022-08-22").getTime(),
152
168
  email: "karel@asius.ai",
153
169
  videocall: null,
170
+ discord: null,
154
171
  description: /* @__PURE__ */ jsxs("div", {
155
172
  children: [
156
173
  "I have created Remotion videos for many companies and helped them with deployment, some examples are visible",
@@ -184,6 +201,10 @@ var experts = [
184
201
  linkedin: "in/alex-f-17a5bb56/",
185
202
  email: "alex.frndz@gmail.com",
186
203
  videocall: "https://cal.com/remotion-expert-alex-fernandez",
204
+ discord: {
205
+ username: "alex12345670000",
206
+ userId: "1046357837976182894"
207
+ },
187
208
  since: new Date("2022-12-02").getTime(),
188
209
  description: /* @__PURE__ */ jsx("div", {
189
210
  children: "I am an experienced integration developer using Mulesoft, a backend developer and on the side frontend and animation enthusiast."
@@ -199,6 +220,10 @@ var experts = [
199
220
  linkedin: "in/matthew-mcgillivray-68295a55",
200
221
  email: "mm@mattm9y.com",
201
222
  videocall: "https://cal.com/remotion-expert-matt-mcgillivray",
223
+ discord: {
224
+ username: "umungobungo",
225
+ userId: "225141342894948352"
226
+ },
202
227
  since: new Date("2023-01-30").getTime(),
203
228
  description: /* @__PURE__ */ jsx("div", {
204
229
  children: /* @__PURE__ */ jsxs("p", {
@@ -263,6 +288,10 @@ var experts = [
263
288
  linkedin: "in/raymond-lotmar/",
264
289
  email: "ray@blocklab.ch",
265
290
  videocall: "https://cal.com/remotion-expert-ray-lotmar",
291
+ discord: {
292
+ username: "ray_block",
293
+ userId: "402806969980944384"
294
+ },
266
295
  since: new Date("2023-01-30").getTime(),
267
296
  description: /* @__PURE__ */ jsxs("div", {
268
297
  children: [
@@ -293,6 +322,10 @@ var experts = [
293
322
  linkedin: "in/lorenzobertolini/",
294
323
  email: "ciao@lorenzobertolini.com",
295
324
  videocall: null,
325
+ discord: {
326
+ username: "lorenzobertolini",
327
+ userId: "933408520789950516"
328
+ },
296
329
  since: new Date("2023-03-14").getTime(),
297
330
  description: /* @__PURE__ */ jsxs("div", {
298
331
  children: [
@@ -333,6 +366,10 @@ var experts = [
333
366
  linkedin: "in/antoine-caron-slash/",
334
367
  email: "antoine395.caron+remotion@gmail.com",
335
368
  videocall: null,
369
+ discord: {
370
+ username: "antoinecaron.",
371
+ userId: "199566011849113600"
372
+ },
336
373
  since: new Date("2023-03-17").getTime(),
337
374
  description: /* @__PURE__ */ jsx("div", {
338
375
  children: /* @__PURE__ */ jsxs("p", {
@@ -359,6 +396,10 @@ var experts = [
359
396
  linkedin: "in/mickaelalves/",
360
397
  email: "alves.mckl@gmail.com",
361
398
  videocall: null,
399
+ discord: {
400
+ username: "cruuzazul",
401
+ userId: "455697698050277378"
402
+ },
362
403
  since: new Date("2023-03-17").getTime(),
363
404
  description: /* @__PURE__ */ jsx("div", {
364
405
  children: /* @__PURE__ */ jsxs("p", {
@@ -385,6 +426,10 @@ var experts = [
385
426
  linkedin: "in/pranavk7/",
386
427
  email: "hey@pranava.dev",
387
428
  videocall: null,
429
+ discord: {
430
+ username: "thecmdrunner",
431
+ userId: "768013898385063936"
432
+ },
388
433
  since: new Date("2023-07-03").getTime(),
389
434
  description: /* @__PURE__ */ jsxs("div", {
390
435
  children: [
@@ -419,6 +464,10 @@ var experts = [
419
464
  linkedin: "in/rahulbansalrb/",
420
465
  email: "bansalrahul14@gmail.com",
421
466
  videocall: "https://cal.com/remotion-expert-rahul-bansal",
467
+ discord: {
468
+ username: "raxrb",
469
+ userId: "564805165211713536"
470
+ },
422
471
  since: new Date("2023-08-04").getTime(),
423
472
  description: /* @__PURE__ */ jsxs("div", {
424
473
  children: [
@@ -438,12 +487,16 @@ var experts = [
438
487
  slug: "pramod-kumar",
439
488
  name: "Pramod Kumar",
440
489
  image: "/img/freelancers/pramod.jpg",
441
- website: "https://www.pramod73.in/",
490
+ website: null,
442
491
  x: "pramodk73",
443
492
  github: "pskd73",
444
493
  linkedin: "in/pramod-kumar-1a135b74/",
445
494
  email: "pramodkumar.damam73@gmail.com",
446
495
  videocall: "https://cal.com/remotion-expert-pramod-kumar",
496
+ discord: {
497
+ username: "pskd73",
498
+ userId: "517057574483525655"
499
+ },
447
500
  since: new Date("2024-03-10").getTime(),
448
501
  description: /* @__PURE__ */ jsxs("div", {
449
502
  children: [
@@ -473,7 +526,14 @@ var experts = [
473
526
  children: "remotion-animate-text"
474
527
  }),
475
528
  " ",
476
- "for Remotion to animate text. I build products in public on X. I love helping the community. Feel free to reach out. Looking forward!"
529
+ "for Remotion to animate text. I build products in public on X and currently building",
530
+ " ",
531
+ /* @__PURE__ */ jsx("a", {
532
+ target: "_blank",
533
+ href: "https://crawlchat.app",
534
+ children: "CrawlChat"
535
+ }),
536
+ ". I love helping the community. Feel free to reach out. Looking forward!"
477
537
  ]
478
538
  })
479
539
  },
@@ -487,6 +547,10 @@ var experts = [
487
547
  linkedin: "in/ayushsoni1001/",
488
548
  email: "hi@ayushsoni.com",
489
549
  videocall: "https://cal.com/remotion-expert-ayush-soni",
550
+ discord: {
551
+ username: "ayushsoni",
552
+ userId: "624968675916513310"
553
+ },
490
554
  since: new Date("2024-03-17").getTime(),
491
555
  description: /* @__PURE__ */ jsxs("div", {
492
556
  children: [
@@ -518,6 +582,10 @@ var experts = [
518
582
  linkedin: "in/andrei-terteci-935331151/",
519
583
  email: "hello@andreiterteci.com",
520
584
  videocall: "https://cal.com/remotion-expert-andrei-terteci",
585
+ discord: {
586
+ username: "andreiterteci",
587
+ userId: "710924274361172078"
588
+ },
521
589
  since: new Date("2024-03-17").getTime(),
522
590
  description: /* @__PURE__ */ jsxs("div", {
523
591
  children: [
@@ -549,6 +617,10 @@ var experts = [
549
617
  linkedin: "in/sambowenhughes/",
550
618
  email: "sam@reactvideoeditor.com",
551
619
  videocall: "https://calendly.com/reactvideoeditor/30min",
620
+ discord: {
621
+ username: ".samelliott",
622
+ userId: "862593906972688385"
623
+ },
552
624
  since: new Date("2025-06-03").getTime(),
553
625
  description: /* @__PURE__ */ jsxs("div", {
554
626
  children: [
@@ -634,6 +706,10 @@ var experts = [
634
706
  email: "shankhadeepdey99@gmail.com",
635
707
  slug: "iamshankhadeep",
636
708
  videocall: "https://cal.com/iamshankhadeep",
709
+ discord: {
710
+ username: "iamshankhadeep",
711
+ userId: "441576588937527306"
712
+ },
637
713
  since: new Date("2021-02-13").getTime(),
638
714
  description: /* @__PURE__ */ jsx("div", {
639
715
  children: "I created @remotion/player and @remotion/lambda with Jonny. I have 5+ years of experience in building products using Remotion, React, Next.js, and Typescript. I have worked in companies like Camcorder and early-stage startups like a funnel builder marketplace. I can build products super fast from scratch. Looking forward to helping you."
@@ -649,6 +725,10 @@ var experts = [
649
725
  linkedin: "in/amirtadrisi/",
650
726
  email: "amir@cubite.io",
651
727
  videocall: null,
728
+ discord: {
729
+ username: "aioppsos1565",
730
+ userId: "709545234882756711"
731
+ },
652
732
  since: new Date("2025-01-01").getTime(),
653
733
  description: /* @__PURE__ */ jsxs("div", {
654
734
  children: [
@@ -718,6 +798,10 @@ var experts = [
718
798
  linkedin: "in/pablito-jean-pool-silva-inca-735a03192/",
719
799
  email: "pablito.silvainca@gmail.com",
720
800
  videocall: null,
801
+ discord: {
802
+ username: "pablituuu",
803
+ userId: "513743221109555206"
804
+ },
721
805
  since: new Date("2026-02-13").getTime(),
722
806
  description: /* @__PURE__ */ jsxs("div", {
723
807
  children: [
@@ -744,6 +828,10 @@ var experts = [
744
828
  linkedin: "in/haingt-dev/",
745
829
  email: "hai@haingt.dev",
746
830
  videocall: null,
831
+ discord: {
832
+ username: "haingt.dev",
833
+ userId: "384392709902827522"
834
+ },
747
835
  since: new Date("2026-04-02").getTime(),
748
836
  description: /* @__PURE__ */ jsxs("div", {
749
837
  children: [
@@ -771,6 +859,10 @@ var experts = [
771
859
  linkedin: "in/ashok-reddy-kakumanu-8a3078247/",
772
860
  email: "ashok17748@gmail.com",
773
861
  videocall: null,
862
+ discord: {
863
+ username: ".8gates",
864
+ userId: "668293302767845376"
865
+ },
774
866
  since: new Date("2026-04-30").getTime(),
775
867
  description: /* @__PURE__ */ jsxs("div", {
776
868
  children: [
@@ -786,10 +878,40 @@ var experts = [
786
878
  "Available for hourly and project/milestone-based engagements."
787
879
  ]
788
880
  })
881
+ },
882
+ {
883
+ slug: "huang-chi-chang",
884
+ name: "Huang Chi Chang",
885
+ image: "/img/freelancers/huang-chi-chang.jpg",
886
+ website: "https://swift-clip.vercel.app/",
887
+ x: null,
888
+ github: "zz41354899",
889
+ linkedin: null,
890
+ email: "zz41354899@gmail.com",
891
+ videocall: null,
892
+ discord: {
893
+ username: "Nocts",
894
+ userId: "444852671191580672"
895
+ },
896
+ since: new Date("2026-05-05").getTime(),
897
+ description: /* @__PURE__ */ jsxs("div", {
898
+ children: [
899
+ "I'm a Product Designer and Indie Hacker based in Taiwan. I specialize in using Remotion to automate video production, building dynamic templates and automated rendering pipelines.",
900
+ /* @__PURE__ */ jsx("br", {}),
901
+ "My project,",
902
+ " ",
903
+ /* @__PURE__ */ jsx("a", {
904
+ target: "_blank",
905
+ href: "https://swift-clip.vercel.app/",
906
+ children: "SwiftClip"
907
+ }),
908
+ ", is a tool designed to streamline professional video creation through programmatic workflows."
909
+ ]
910
+ })
789
911
  }
790
912
  ];
791
913
  // src/components/experts/ExpertsPage.tsx
792
- import { useMemo as useMemo39 } from "react";
914
+ import { useMemo as useMemo38 } from "react";
793
915
 
794
916
  // ../core/dist/esm/index.mjs
795
917
  import { createContext } from "react";
@@ -834,11 +956,11 @@ import { jsx as jsx8 } from "react/jsx-runtime";
834
956
  import { useEffect as useEffect3, useMemo as useMemo10, useRef as useRef4 } from "react";
835
957
  import { jsx as jsx9 } from "react/jsx-runtime";
836
958
  import {
837
- forwardRef as forwardRef2,
838
- useContext as useContext15,
959
+ forwardRef as forwardRef3,
960
+ useContext as useContext16,
839
961
  useEffect as useEffect5,
840
- useMemo as useMemo15,
841
- useState as useState5
962
+ useMemo as useMemo16,
963
+ useState as useState6
842
964
  } from "react";
843
965
  import { useRef as useRef5 } from "react";
844
966
  import { useContext as useContext14, useMemo as useMemo13 } from "react";
@@ -848,104 +970,105 @@ import { jsx as jsx10 } from "react/jsx-runtime";
848
970
  import { createContext as createContext14 } from "react";
849
971
  import React12, { useCallback as useCallback5, useMemo as useMemo14, useRef as useRef6, useState as useState4 } from "react";
850
972
  import { jsx as jsx11 } from "react/jsx-runtime";
973
+ import React13, { forwardRef as forwardRef2, useState as useState5, useContext as useContext15, useMemo as useMemo15 } from "react";
851
974
  import { jsx as jsx12 } from "react/jsx-runtime";
852
975
  import {
853
- forwardRef as forwardRef3,
976
+ forwardRef as forwardRef4,
854
977
  useEffect as useEffect6,
855
978
  useImperativeHandle as useImperativeHandle2,
856
979
  useLayoutEffect as useLayoutEffect2,
857
980
  useRef as useRef8,
858
- useState as useState6
981
+ useState as useState7
859
982
  } from "react";
860
- import React14, { useCallback as useCallback6, useImperativeHandle, useRef as useRef7 } from "react";
983
+ import React15, { useCallback as useCallback6, useImperativeHandle, useRef as useRef7 } from "react";
861
984
  import { jsx as jsx13 } from "react/jsx-runtime";
862
985
  import { jsx as jsx14 } from "react/jsx-runtime";
863
986
  import {
987
+ createContext as createContext15,
864
988
  forwardRef as forwardRef5,
865
989
  useCallback as useCallback7,
990
+ useContext as useContext17,
866
991
  useLayoutEffect as useLayoutEffect3,
867
- useMemo as useMemo18,
992
+ useMemo as useMemo17,
868
993
  useRef as useRef9,
869
994
  useState as useState8
870
995
  } from "react";
871
- import React15, { forwardRef as forwardRef4, useMemo as useMemo17 } from "react";
872
- import { useContext as useContext16, useMemo as useMemo16, useState as useState7 } from "react";
873
996
  import { jsx as jsx15 } from "react/jsx-runtime";
874
- import { useContext as useContext17, useLayoutEffect as useLayoutEffect5, useState as useState10 } from "react";
997
+ import { useContext as useContext18, useLayoutEffect as useLayoutEffect5, useState as useState10 } from "react";
875
998
  import {
876
- createContext as createContext15,
999
+ createContext as createContext16,
877
1000
  useCallback as useCallback8,
878
1001
  useImperativeHandle as useImperativeHandle3,
879
1002
  useLayoutEffect as useLayoutEffect4,
880
- useMemo as useMemo19,
1003
+ useMemo as useMemo18,
881
1004
  useRef as useRef10,
882
1005
  useState as useState9
883
1006
  } from "react";
884
1007
  import { jsx as jsx16 } from "react/jsx-runtime";
885
- import { forwardRef as forwardRef8, useCallback as useCallback13, useContext as useContext29 } from "react";
886
- import React17, { createContext as createContext16, useMemo as useMemo20 } from "react";
1008
+ import { forwardRef as forwardRef8, useCallback as useCallback13, useContext as useContext30 } from "react";
1009
+ import React17, { createContext as createContext17, useMemo as useMemo19 } from "react";
887
1010
  import { jsx as jsx17 } from "react/jsx-runtime";
888
- import { useContext as useContext18 } from "react";
889
- import { createContext as createContext17, useEffect as useEffect7, useState as useState11 } from "react";
1011
+ import { useContext as useContext19 } from "react";
1012
+ import { createContext as createContext18, useEffect as useEffect7, useState as useState11 } from "react";
890
1013
  import { jsx as jsx18 } from "react/jsx-runtime";
891
- import { createContext as createContext18, useMemo as useMemo21, useReducer } from "react";
1014
+ import { createContext as createContext19, useMemo as useMemo20, useReducer } from "react";
892
1015
  import { jsx as jsx19 } from "react/jsx-runtime";
893
1016
  import React23, {
894
1017
  forwardRef as forwardRef6,
895
- useContext as useContext27,
896
- useEffect as useEffect14,
1018
+ useContext as useContext28,
1019
+ useEffect as useEffect15,
897
1020
  useImperativeHandle as useImperativeHandle4,
898
- useMemo as useMemo29,
1021
+ useMemo as useMemo28,
899
1022
  useRef as useRef18,
900
1023
  useState as useState16
901
1024
  } from "react";
902
- import { useContext as useContext20, useLayoutEffect as useLayoutEffect6, useRef as useRef13 } from "react";
1025
+ import { useContext as useContext21, useLayoutEffect as useLayoutEffect6, useRef as useRef13 } from "react";
903
1026
  import React20, {
904
- createContext as createContext19,
1027
+ createContext as createContext20,
905
1028
  createRef as createRef2,
906
1029
  useCallback as useCallback9,
907
- useContext as useContext19,
908
- useMemo as useMemo23,
1030
+ useContext as useContext20,
1031
+ useMemo as useMemo22,
909
1032
  useRef as useRef11,
910
1033
  useState as useState12
911
1034
  } from "react";
912
- import { useMemo as useMemo22 } from "react";
1035
+ import { useEffect as useEffect8, useMemo as useMemo21 } from "react";
913
1036
  import { jsx as jsx20, jsxs as jsxs22 } from "react/jsx-runtime";
914
1037
  import { useRef as useRef12 } from "react";
915
- import { useContext as useContext22, useEffect as useEffect8, useMemo as useMemo24, useState as useState13 } from "react";
916
- import { useContext as useContext21 } from "react";
1038
+ import { useContext as useContext23, useEffect as useEffect9, useMemo as useMemo23, useState as useState13 } from "react";
1039
+ import { useContext as useContext22 } from "react";
917
1040
  import {
918
1041
  useCallback as useCallback12,
919
- useContext as useContext25,
920
- useEffect as useEffect12,
1042
+ useContext as useContext26,
1043
+ useEffect as useEffect13,
921
1044
  useLayoutEffect as useLayoutEffect8,
922
1045
  useRef as useRef17
923
1046
  } from "react";
924
- import { useCallback as useCallback11, useMemo as useMemo27, useRef as useRef15 } from "react";
925
- import { useContext as useContext24, useMemo as useMemo26 } from "react";
1047
+ import { useCallback as useCallback11, useMemo as useMemo26, useRef as useRef15 } from "react";
1048
+ import { useContext as useContext25, useMemo as useMemo25 } from "react";
926
1049
  import React21, {
927
1050
  useCallback as useCallback10,
928
- useContext as useContext23,
929
- useEffect as useEffect9,
1051
+ useContext as useContext24,
1052
+ useEffect as useEffect10,
930
1053
  useLayoutEffect as useLayoutEffect7,
931
- useMemo as useMemo25,
1054
+ useMemo as useMemo24,
932
1055
  useRef as useRef14,
933
1056
  useState as useState14
934
1057
  } from "react";
935
1058
  import { jsx as jsx21 } from "react/jsx-runtime";
936
1059
  import React22 from "react";
937
- import { useEffect as useEffect10, useState as useState15 } from "react";
938
- import { useEffect as useEffect11, useRef as useRef16 } from "react";
939
- import { useEffect as useEffect13 } from "react";
940
- import { createContext as createContext20, useContext as useContext26, useMemo as useMemo28 } from "react";
1060
+ import { useEffect as useEffect11, useState as useState15 } from "react";
1061
+ import { useEffect as useEffect12, useRef as useRef16 } from "react";
1062
+ import { useEffect as useEffect14 } from "react";
1063
+ import { createContext as createContext21, useContext as useContext27, useMemo as useMemo27 } from "react";
941
1064
  import { jsx as jsx222 } from "react/jsx-runtime";
942
1065
  import {
943
1066
  forwardRef as forwardRef7,
944
- useContext as useContext28,
945
- useEffect as useEffect15,
1067
+ useContext as useContext29,
1068
+ useEffect as useEffect16,
946
1069
  useImperativeHandle as useImperativeHandle5,
947
1070
  useLayoutEffect as useLayoutEffect9,
948
- useMemo as useMemo30,
1071
+ useMemo as useMemo29,
949
1072
  useRef as useRef19
950
1073
  } from "react";
951
1074
  import { jsx as jsx23 } from "react/jsx-runtime";
@@ -954,7 +1077,7 @@ import { forwardRef as forwardRef9, useCallback as useCallback14, useState as us
954
1077
  import { jsx as jsx25 } from "react/jsx-runtime";
955
1078
  import {
956
1079
  useCallback as useCallback15,
957
- useContext as useContext30,
1080
+ useContext as useContext31,
958
1081
  useImperativeHandle as useImperativeHandle6,
959
1082
  useLayoutEffect as useLayoutEffect10,
960
1083
  useRef as useRef20,
@@ -966,57 +1089,57 @@ import React28 from "react";
966
1089
  import {
967
1090
  useCallback as useCallback16,
968
1091
  useImperativeHandle as useImperativeHandle7,
969
- useMemo as useMemo31,
1092
+ useMemo as useMemo30,
970
1093
  useRef as useRef21,
971
1094
  useState as useState19
972
1095
  } from "react";
973
1096
  import { jsx as jsx27 } from "react/jsx-runtime";
974
1097
  import React29 from "react";
975
- import { useMemo as useMemo33 } from "react";
976
- import { createContext as createContext21, useContext as useContext31, useMemo as useMemo32 } from "react";
1098
+ import { useMemo as useMemo32 } from "react";
1099
+ import { createContext as createContext22, useContext as useContext32, useMemo as useMemo31 } from "react";
977
1100
  import { jsx as jsx28 } from "react/jsx-runtime";
978
1101
  import { jsx as jsx29 } from "react/jsx-runtime";
979
1102
  import React31 from "react";
980
- import React32, { createContext as createContext22 } from "react";
981
- import { useContext as useContext32 } from "react";
1103
+ import React32, { createContext as createContext23 } from "react";
1104
+ import { useContext as useContext33 } from "react";
982
1105
  import { useCallback as useCallback18 } from "react";
983
1106
  import {
984
1107
  useCallback as useCallback17,
985
- useContext as useContext33,
986
- useEffect as useEffect16,
1108
+ useContext as useContext34,
1109
+ useEffect as useEffect17,
987
1110
  useLayoutEffect as useLayoutEffect11,
988
- useMemo as useMemo34,
1111
+ useMemo as useMemo33,
989
1112
  useState as useState20
990
1113
  } from "react";
991
1114
  import { jsx as jsx30 } from "react/jsx-runtime";
992
1115
  import React34, {
993
1116
  forwardRef as forwardRef10,
994
- useContext as useContext34,
995
- useEffect as useEffect18,
1117
+ useContext as useContext35,
1118
+ useEffect as useEffect19,
996
1119
  useImperativeHandle as useImperativeHandle8,
997
- useMemo as useMemo35,
1120
+ useMemo as useMemo34,
998
1121
  useRef as useRef22,
999
1122
  useState as useState21
1000
1123
  } from "react";
1001
- import { useEffect as useEffect17 } from "react";
1124
+ import { useEffect as useEffect18 } from "react";
1002
1125
  import { jsx as jsx31 } from "react/jsx-runtime";
1003
1126
  import { jsx as jsx32 } from "react/jsx-runtime";
1004
- import React36, { useMemo as useMemo36 } from "react";
1127
+ import React36, { useMemo as useMemo35 } from "react";
1005
1128
  import { jsx as jsx33 } from "react/jsx-runtime";
1006
- import { Children, forwardRef as forwardRef11, useMemo as useMemo37 } from "react";
1129
+ import { Children, forwardRef as forwardRef11, useMemo as useMemo36 } from "react";
1007
1130
  import React37 from "react";
1008
- import React38, { createContext as createContext23 } from "react";
1131
+ import React38, { createContext as createContext24 } from "react";
1009
1132
  import { jsx as jsx34 } from "react/jsx-runtime";
1010
1133
  import { jsx as jsx35 } from "react/jsx-runtime";
1011
1134
  import React40 from "react";
1012
- import { forwardRef as forwardRef13, useCallback as useCallback19, useContext as useContext36 } from "react";
1135
+ import { forwardRef as forwardRef13, useCallback as useCallback19, useContext as useContext37 } from "react";
1013
1136
  import {
1014
1137
  forwardRef as forwardRef12,
1015
- useContext as useContext35,
1016
- useEffect as useEffect19,
1138
+ useContext as useContext36,
1139
+ useEffect as useEffect20,
1017
1140
  useImperativeHandle as useImperativeHandle9,
1018
1141
  useLayoutEffect as useLayoutEffect12,
1019
- useMemo as useMemo38,
1142
+ useMemo as useMemo37,
1020
1143
  useRef as useRef23
1021
1144
  } from "react";
1022
1145
  import { jsx as jsx36 } from "react/jsx-runtime";
@@ -2095,6 +2218,7 @@ __export2(exports_timeline_position_state, {
2095
2218
  useTimelinePosition: () => useTimelinePosition,
2096
2219
  useTimelineContext: () => useTimelineContext,
2097
2220
  usePlayingState: () => usePlayingState,
2221
+ usePlaybackRate: () => usePlaybackRate,
2098
2222
  useAbsoluteTimelinePosition: () => useAbsoluteTimelinePosition,
2099
2223
  persistCurrentFrame: () => persistCurrentFrame,
2100
2224
  getInitialFrameState: () => getInitialFrameState,
@@ -2141,6 +2265,7 @@ var SetTimelineContext = createContext13({
2141
2265
  }
2142
2266
  });
2143
2267
  var TimelineContext = createContext13(null);
2268
+ var PlaybackRateContext = createContext13(null);
2144
2269
  var AbsoluteTimeContext = createContext13(null);
2145
2270
  var TimelineContextProvider = ({ children, frameState }) => {
2146
2271
  const [playing, setPlaying] = useState2(false);
@@ -2183,11 +2308,15 @@ var TimelineContextProvider = ({ children, frameState }) => {
2183
2308
  playing,
2184
2309
  imperativePlaying,
2185
2310
  rootId: remotionRootId,
2186
- playbackRate,
2187
- setPlaybackRate,
2188
2311
  audioAndVideoTags
2189
2312
  };
2190
- }, [frame, playbackRate, playing, remotionRootId]);
2313
+ }, [frame, playing, remotionRootId]);
2314
+ const playbackRateContextValue = useMemo8(() => {
2315
+ return {
2316
+ playbackRate,
2317
+ setPlaybackRate
2318
+ };
2319
+ }, [playbackRate]);
2191
2320
  const setTimelineContextValue = useMemo8(() => {
2192
2321
  return {
2193
2322
  setFrame,
@@ -2196,11 +2325,14 @@ var TimelineContextProvider = ({ children, frameState }) => {
2196
2325
  }, []);
2197
2326
  return /* @__PURE__ */ jsx8(AbsoluteTimeContext.Provider, {
2198
2327
  value: timelineContextValue,
2199
- children: /* @__PURE__ */ jsx8(TimelineContext.Provider, {
2200
- value: timelineContextValue,
2201
- children: /* @__PURE__ */ jsx8(SetTimelineContext.Provider, {
2202
- value: setTimelineContextValue,
2203
- children
2328
+ children: /* @__PURE__ */ jsx8(PlaybackRateContext.Provider, {
2329
+ value: playbackRateContextValue,
2330
+ children: /* @__PURE__ */ jsx8(TimelineContext.Provider, {
2331
+ value: timelineContextValue,
2332
+ children: /* @__PURE__ */ jsx8(SetTimelineContext.Provider, {
2333
+ value: setTimelineContextValue,
2334
+ children
2335
+ })
2204
2336
  })
2205
2337
  })
2206
2338
  });
@@ -2243,6 +2375,13 @@ var useTimelineContext = () => {
2243
2375
  }
2244
2376
  return state;
2245
2377
  };
2378
+ var usePlaybackRate = () => {
2379
+ const state = useContext10(PlaybackRateContext);
2380
+ if (state === null) {
2381
+ throw new Error("PlaybackRateContext is not available. This hook must be used inside a <Player> or the Remotion Studio.");
2382
+ }
2383
+ return state;
2384
+ };
2246
2385
  var useTimelinePosition = () => {
2247
2386
  const state = useTimelineContext();
2248
2387
  return useTimelinePositionFromContext(state);
@@ -2534,7 +2673,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2534
2673
  var addSequenceStackTraces = (component) => {
2535
2674
  componentsToAddStacksTo.push(component);
2536
2675
  };
2537
- var VERSION = "4.0.456";
2676
+ var VERSION = "4.0.458";
2538
2677
  var checkMultipleRemotionVersions = () => {
2539
2678
  if (typeof globalThis === "undefined") {
2540
2679
  return;
@@ -2705,6 +2844,54 @@ var Freeze = ({
2705
2844
  var PremountContext = createContext14({
2706
2845
  premountFramesRemaining: 0
2707
2846
  });
2847
+ var sequenceStyleSchema = {
2848
+ "style.translate": {
2849
+ type: "translate",
2850
+ step: 1,
2851
+ default: "0px 0px",
2852
+ description: "Offset"
2853
+ },
2854
+ "style.scale": {
2855
+ type: "number",
2856
+ min: 0.05,
2857
+ max: 100,
2858
+ step: 0.01,
2859
+ default: 1,
2860
+ description: "Scale"
2861
+ },
2862
+ "style.rotate": {
2863
+ type: "rotation",
2864
+ step: 1,
2865
+ default: "0deg",
2866
+ description: "Rotation"
2867
+ },
2868
+ "style.opacity": {
2869
+ type: "number",
2870
+ min: 0,
2871
+ max: 1,
2872
+ step: 0.01,
2873
+ default: 1,
2874
+ description: "Opacity"
2875
+ }
2876
+ };
2877
+ var sequenceSchema = {
2878
+ layout: {
2879
+ type: "enum",
2880
+ default: "absolute-fill",
2881
+ description: "Layout",
2882
+ variants: {
2883
+ "absolute-fill": sequenceStyleSchema,
2884
+ none: {}
2885
+ }
2886
+ }
2887
+ };
2888
+ var sequenceSchemaDefaultLayoutNone = {
2889
+ ...sequenceSchema,
2890
+ layout: {
2891
+ ...sequenceSchema.layout,
2892
+ default: "none"
2893
+ }
2894
+ };
2708
2895
  var SequenceManager = React12.createContext({
2709
2896
  registerSequence: () => {
2710
2897
  throw new Error("SequenceManagerContext not initialized");
@@ -2826,6 +3013,204 @@ var SequenceManagerProvider = ({ children, visualModeEnabled }) => {
2826
3013
  });
2827
3014
  };
2828
3015
  var ENABLE_V5_BREAKING_CHANGES = false;
3016
+ var flattenActiveSchema = (schema, resolve) => {
3017
+ const out = {};
3018
+ for (const key of Object.keys(schema)) {
3019
+ const field = schema[key];
3020
+ if (field.type === "enum") {
3021
+ out[key] = field;
3022
+ const current = resolve(key) ?? field.default;
3023
+ const variant = field.variants[current];
3024
+ if (variant) {
3025
+ Object.assign(out, flattenActiveSchema(variant, resolve));
3026
+ }
3027
+ } else {
3028
+ out[key] = field;
3029
+ }
3030
+ }
3031
+ return out;
3032
+ };
3033
+ var getFlatSchemaWithAllKeys = (schema) => {
3034
+ const out = {};
3035
+ const addKey = (key, field) => {
3036
+ if (key in out) {
3037
+ throw new Error(`Duplicate key "${key}" in schema: discriminated union variants must not share keys`);
3038
+ }
3039
+ out[key] = field;
3040
+ };
3041
+ for (const key of Object.keys(schema)) {
3042
+ const field = schema[key];
3043
+ addKey(key, field);
3044
+ if (field.type === "enum") {
3045
+ for (const variant of Object.values(field.variants)) {
3046
+ const flatVariant = getFlatSchemaWithAllKeys(variant);
3047
+ for (const variantKey of Object.keys(flatVariant)) {
3048
+ addKey(variantKey, flatVariant[variantKey]);
3049
+ }
3050
+ }
3051
+ }
3052
+ }
3053
+ return out;
3054
+ };
3055
+ var getEffectiveVisualModeValue = ({
3056
+ codeValue,
3057
+ runtimeValue,
3058
+ dragOverrideValue,
3059
+ defaultValue,
3060
+ shouldResortToDefaultValueIfUndefined = false
3061
+ }) => {
3062
+ if (dragOverrideValue !== undefined) {
3063
+ return dragOverrideValue;
3064
+ }
3065
+ if (!codeValue) {
3066
+ return runtimeValue;
3067
+ }
3068
+ if (!codeValue.canUpdate) {
3069
+ return runtimeValue;
3070
+ }
3071
+ if (codeValue.codeValue === undefined && shouldResortToDefaultValueIfUndefined) {
3072
+ return defaultValue;
3073
+ }
3074
+ return codeValue.codeValue;
3075
+ };
3076
+ var findFieldInSchema = (schema, key) => {
3077
+ if (key in schema) {
3078
+ return schema[key];
3079
+ }
3080
+ for (const field of Object.values(schema)) {
3081
+ if (field.type !== "enum") {
3082
+ continue;
3083
+ }
3084
+ for (const variant of Object.values(field.variants)) {
3085
+ const found = findFieldInSchema(variant, key);
3086
+ if (found) {
3087
+ return found;
3088
+ }
3089
+ }
3090
+ }
3091
+ return;
3092
+ };
3093
+ var computeEffectiveSchemaValuesDotNotation = ({
3094
+ schema,
3095
+ currentValue,
3096
+ overrideValues,
3097
+ propStatus
3098
+ }) => {
3099
+ const merged = {};
3100
+ for (const key of Object.keys(currentValue)) {
3101
+ const codeValueStatus = propStatus?.[key] ?? null;
3102
+ merged[key] = getEffectiveVisualModeValue({
3103
+ codeValue: codeValueStatus,
3104
+ runtimeValue: currentValue[key],
3105
+ dragOverrideValue: overrideValues[key],
3106
+ defaultValue: findFieldInSchema(schema, key)?.default,
3107
+ shouldResortToDefaultValueIfUndefined: false
3108
+ });
3109
+ }
3110
+ return merged;
3111
+ };
3112
+ var getNestedValue = (obj, key) => {
3113
+ const parts = key.split(".");
3114
+ let current = obj;
3115
+ for (const part of parts) {
3116
+ if (current === null || current === undefined || typeof current !== "object")
3117
+ return;
3118
+ current = current[part];
3119
+ }
3120
+ return current;
3121
+ };
3122
+ var readValuesFromProps = (props, keys) => {
3123
+ const out = {};
3124
+ for (const key of keys) {
3125
+ out[key] = getNestedValue(props, key);
3126
+ }
3127
+ return out;
3128
+ };
3129
+ var selectActiveKeys = (schema, values) => {
3130
+ return Object.keys(flattenActiveSchema(schema, (key) => values[key]));
3131
+ };
3132
+ var mergeValues = ({
3133
+ props,
3134
+ valuesDotNotation,
3135
+ schemaKeys
3136
+ }) => {
3137
+ const merged = { ...props };
3138
+ for (const key of schemaKeys) {
3139
+ const value = valuesDotNotation[key];
3140
+ const parts = key.split(".");
3141
+ if (parts.length === 1) {
3142
+ merged[key] = value;
3143
+ continue;
3144
+ }
3145
+ let current = merged;
3146
+ for (let i = 0;i < parts.length - 1; i++) {
3147
+ const part = parts[i];
3148
+ if (typeof current[part] === "object" && current[part] !== null) {
3149
+ current[part] = { ...current[part] };
3150
+ } else {
3151
+ current[part] = {};
3152
+ }
3153
+ current = current[part];
3154
+ }
3155
+ current[parts[parts.length - 1]] = value;
3156
+ }
3157
+ return merged;
3158
+ };
3159
+ var wrapInSchema = (Component, schema) => {
3160
+ if (typeof process === "undefined" || !process.env?.EXPERIMENTAL_VISUAL_MODE_ENABLED) {
3161
+ return Component;
3162
+ }
3163
+ const flatSchema = getFlatSchemaWithAllKeys(schema);
3164
+ const flatKeys = Object.keys(flatSchema);
3165
+ const Wrapped = forwardRef2((props, ref) => {
3166
+ const env = useRemotionEnvironment();
3167
+ const { visualModeEnabled, dragOverrides, codeValues } = useContext15(VisualModeOverridesContext);
3168
+ if (!env.isStudio || env.isReadOnlyStudio || env.isRendering || !visualModeEnabled) {
3169
+ return React13.createElement(Component, {
3170
+ ...props,
3171
+ _experimentalControls: null,
3172
+ ref
3173
+ });
3174
+ }
3175
+ if (props._experimentalControls) {
3176
+ return React13.createElement(Component, {
3177
+ ...props,
3178
+ ref
3179
+ });
3180
+ }
3181
+ const [overrideId] = useState5(() => String(Math.random()));
3182
+ const runtimeValues = flatKeys.map((k) => getNestedValue(props, k));
3183
+ const currentRuntimeValueDotNotation = useMemo15(() => readValuesFromProps(props, flatKeys), runtimeValues);
3184
+ const controls = useMemo15(() => {
3185
+ return {
3186
+ schema,
3187
+ currentRuntimeValueDotNotation,
3188
+ overrideId
3189
+ };
3190
+ }, [currentRuntimeValueDotNotation, overrideId]);
3191
+ const valuesDotNotation = useMemo15(() => {
3192
+ return computeEffectiveSchemaValuesDotNotation({
3193
+ schema,
3194
+ currentValue: currentRuntimeValueDotNotation,
3195
+ overrideValues: dragOverrides[overrideId] ?? {},
3196
+ propStatus: codeValues[overrideId]
3197
+ });
3198
+ }, [currentRuntimeValueDotNotation, dragOverrides, overrideId, codeValues]);
3199
+ const activeKeys = selectActiveKeys(schema, valuesDotNotation);
3200
+ const mergedProps = mergeValues({
3201
+ props,
3202
+ valuesDotNotation,
3203
+ schemaKeys: activeKeys
3204
+ });
3205
+ return React13.createElement(Component, {
3206
+ ...mergedProps,
3207
+ _experimentalControls: controls,
3208
+ ref
3209
+ });
3210
+ });
3211
+ Wrapped.displayName = `wrapInSchema(${Component.displayName || Component.name || "Component"})`;
3212
+ return Wrapped;
3213
+ };
2829
3214
  var RegularSequenceRefForwardingFunction = ({
2830
3215
  from = 0,
2831
3216
  durationInFrames = Infinity,
@@ -2844,8 +3229,8 @@ var RegularSequenceRefForwardingFunction = ({
2844
3229
  ...other
2845
3230
  }, ref) => {
2846
3231
  const { layout = "absolute-fill" } = other;
2847
- const [id] = useState5(() => String(Math.random()));
2848
- const parentSequence = useContext15(SequenceContext);
3232
+ const [id] = useState6(() => String(Math.random()));
3233
+ const parentSequence = useContext16(SequenceContext);
2849
3234
  const { rootId } = useTimelineContext();
2850
3235
  const cumulatedFrom = parentSequence ? parentSequence.cumulatedFrom + parentSequence.relativeFrom : 0;
2851
3236
  const nonce = useNonce();
@@ -2853,7 +3238,7 @@ var RegularSequenceRefForwardingFunction = ({
2853
3238
  throw new TypeError(`The layout prop of <Sequence /> expects either "absolute-fill" or "none", but you passed: ${layout}`);
2854
3239
  }
2855
3240
  if (layout === "none" && typeof other.style !== "undefined") {
2856
- throw new TypeError('If layout="none", you may not pass a style.');
3241
+ throw new TypeError('If layout="none", you may not pass a style. Passed: ' + JSON.stringify(other.style));
2857
3242
  }
2858
3243
  if (typeof durationInFrames !== "number") {
2859
3244
  throw new TypeError(`You passed to durationInFrames an argument of type ${typeof durationInFrames}, but it must be a number.`);
@@ -2871,15 +3256,15 @@ var RegularSequenceRefForwardingFunction = ({
2871
3256
  const videoConfig = useVideoConfig();
2872
3257
  const parentSequenceDuration = parentSequence ? Math.min(parentSequence.durationInFrames - from, durationInFrames) : durationInFrames;
2873
3258
  const actualDurationInFrames = Math.max(0, Math.min(videoConfig.durationInFrames - from, parentSequenceDuration));
2874
- const { registerSequence, unregisterSequence } = useContext15(SequenceManager);
2875
- const { hidden } = useContext15(SequenceVisibilityToggleContext);
2876
- const premounting = useMemo15(() => {
3259
+ const { registerSequence, unregisterSequence } = useContext16(SequenceManager);
3260
+ const { hidden } = useContext16(SequenceVisibilityToggleContext);
3261
+ const premounting = useMemo16(() => {
2877
3262
  return parentSequence?.premounting || Boolean(other._remotionInternalIsPremounting);
2878
3263
  }, [other._remotionInternalIsPremounting, parentSequence?.premounting]);
2879
- const postmounting = useMemo15(() => {
3264
+ const postmounting = useMemo16(() => {
2880
3265
  return parentSequence?.postmounting || Boolean(other._remotionInternalIsPostmounting);
2881
3266
  }, [other._remotionInternalIsPostmounting, parentSequence?.postmounting]);
2882
- const contextValue = useMemo15(() => {
3267
+ const contextValue = useMemo16(() => {
2883
3268
  return {
2884
3269
  cumulatedFrom,
2885
3270
  relativeFrom: from,
@@ -2906,7 +3291,7 @@ var RegularSequenceRefForwardingFunction = ({
2906
3291
  premountDisplay,
2907
3292
  postmountDisplay
2908
3293
  ]);
2909
- const timelineClipName = useMemo15(() => {
3294
+ const timelineClipName = useMemo16(() => {
2910
3295
  return name ?? "";
2911
3296
  }, [name]);
2912
3297
  const env = useRemotionEnvironment();
@@ -2989,7 +3374,7 @@ var RegularSequenceRefForwardingFunction = ({
2989
3374
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
2990
3375
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
2991
3376
  const styleIfThere = other.layout === "none" ? undefined : other.style;
2992
- const defaultStyle = useMemo15(() => {
3377
+ const defaultStyle = useMemo16(() => {
2993
3378
  return {
2994
3379
  flexDirection: undefined,
2995
3380
  ...width ? { width } : {},
@@ -3014,9 +3399,9 @@ var RegularSequenceRefForwardingFunction = ({
3014
3399
  })
3015
3400
  });
3016
3401
  };
3017
- var RegularSequence = forwardRef2(RegularSequenceRefForwardingFunction);
3402
+ var RegularSequence = forwardRef3(RegularSequenceRefForwardingFunction);
3018
3403
  var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3019
- const parentPremountContext = useContext15(PremountContext);
3404
+ const parentPremountContext = useContext16(PremountContext);
3020
3405
  const frame = useCurrentFrame() - parentPremountContext.premountFramesRemaining;
3021
3406
  if (props.layout === "none") {
3022
3407
  throw new Error('`<Sequence>` with `premountFor` and `postmountFor` props does not support layout="none"');
@@ -3036,7 +3421,7 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3036
3421
  const postmountingActive = frame > endThreshold && frame <= endThreshold + postmountFor;
3037
3422
  const freezeFrame = premountingActive ? from : postmountingActive ? from + durationInFrames - 1 : 0;
3038
3423
  const isFreezingActive = premountingActive || postmountingActive;
3039
- const style = useMemo15(() => {
3424
+ const style = useMemo16(() => {
3040
3425
  return {
3041
3426
  ...passedStyle,
3042
3427
  opacity: premountingActive || postmountingActive ? 0 : 1,
@@ -3054,7 +3439,7 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3054
3439
  return /* @__PURE__ */ jsx12(Freeze, {
3055
3440
  frame: freezeFrame,
3056
3441
  active: isFreezingActive,
3057
- children: /* @__PURE__ */ jsx12(Sequence, {
3442
+ children: /* @__PURE__ */ jsx12(SequenceInner, {
3058
3443
  ref,
3059
3444
  from,
3060
3445
  durationInFrames,
@@ -3067,7 +3452,7 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3067
3452
  })
3068
3453
  });
3069
3454
  };
3070
- var PremountedPostmountedSequence = forwardRef2(PremountedPostmountedSequenceRefForwardingFunction);
3455
+ var PremountedPostmountedSequence = forwardRef3(PremountedPostmountedSequenceRefForwardingFunction);
3071
3456
  var SequenceRefForwardingFunction = (props, ref) => {
3072
3457
  const env = useRemotionEnvironment();
3073
3458
  const { fps } = useVideoConfig();
@@ -3086,7 +3471,8 @@ var SequenceRefForwardingFunction = (props, ref) => {
3086
3471
  ref
3087
3472
  });
3088
3473
  };
3089
- var Sequence = forwardRef2(SequenceRefForwardingFunction);
3474
+ var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
3475
+ var Sequence = wrapInSchema(SequenceInner, sequenceSchema);
3090
3476
  var calcArgs = (fit, frameSize, canvasSize) => {
3091
3477
  switch (fit) {
3092
3478
  case "fill": {
@@ -3182,7 +3568,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style }, ref
3182
3568
  style
3183
3569
  });
3184
3570
  };
3185
- var Canvas = React14.forwardRef(CanvasRefForwardingFunction);
3571
+ var Canvas = React15.forwardRef(CanvasRefForwardingFunction);
3186
3572
  var CACHE_SIZE = 5;
3187
3573
  var getActualTime = ({
3188
3574
  loopBehavior,
@@ -3329,7 +3715,7 @@ var resolveAnimatedImageSource = (src) => {
3329
3715
  }
3330
3716
  return new URL(src, window.origin).href;
3331
3717
  };
3332
- var AnimatedImage = forwardRef3(({
3718
+ var AnimatedImage = forwardRef4(({
3333
3719
  src,
3334
3720
  width,
3335
3721
  height,
@@ -3348,9 +3734,9 @@ var AnimatedImage = forwardRef3(({
3348
3734
  };
3349
3735
  }, []);
3350
3736
  const resolvedSrc = resolveAnimatedImageSource(src);
3351
- const [imageDecoder, setImageDecoder] = useState6(null);
3737
+ const [imageDecoder, setImageDecoder] = useState7(null);
3352
3738
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
3353
- const [decodeHandle] = useState6(() => delayRender2(`Rendering <AnimatedImage/> with src="${resolvedSrc}"`));
3739
+ const [decodeHandle] = useState7(() => delayRender2(`Rendering <AnimatedImage/> with src="${resolvedSrc}"`));
3354
3740
  const frame = useCurrentFrame();
3355
3741
  const { fps } = useVideoConfig();
3356
3742
  const currentTime = frame / playbackRate / fps;
@@ -3364,7 +3750,7 @@ var AnimatedImage = forwardRef3(({
3364
3750
  }
3365
3751
  return c;
3366
3752
  }, []);
3367
- const [initialLoopBehavior] = useState6(() => loopBehavior);
3753
+ const [initialLoopBehavior] = useState7(() => loopBehavior);
3368
3754
  useEffect6(() => {
3369
3755
  const controller = new AbortController;
3370
3756
  decodeImage({
@@ -3436,158 +3822,6 @@ var AnimatedImage = forwardRef3(({
3436
3822
  ...props
3437
3823
  });
3438
3824
  });
3439
- var getEffectiveVisualModeValue = ({
3440
- codeValue,
3441
- runtimeValue,
3442
- dragOverrideValue,
3443
- defaultValue,
3444
- shouldResortToDefaultValueIfUndefined = false
3445
- }) => {
3446
- if (dragOverrideValue !== undefined) {
3447
- return dragOverrideValue;
3448
- }
3449
- if (!codeValue) {
3450
- return runtimeValue;
3451
- }
3452
- if (!codeValue.canUpdate) {
3453
- return runtimeValue;
3454
- }
3455
- if (codeValue.codeValue === undefined && shouldResortToDefaultValueIfUndefined) {
3456
- return defaultValue;
3457
- }
3458
- return codeValue.codeValue;
3459
- };
3460
- var useSchema = (schema, currentValue) => {
3461
- const env = useRemotionEnvironment();
3462
- const earlyReturn = useMemo16(() => {
3463
- if (!env.isStudio || env.isReadOnlyStudio) {
3464
- return {
3465
- controls: undefined,
3466
- values: currentValue ?? {}
3467
- };
3468
- }
3469
- return;
3470
- }, [env.isStudio, env.isReadOnlyStudio, currentValue]);
3471
- if (earlyReturn) {
3472
- return earlyReturn;
3473
- }
3474
- const [overrideId] = useState7(() => String(Math.random()));
3475
- const {
3476
- visualModeEnabled,
3477
- dragOverrides: overrides,
3478
- codeValues
3479
- } = useContext16(VisualModeOverridesContext);
3480
- const controls = useMemo16(() => {
3481
- if (!visualModeEnabled) {
3482
- return;
3483
- }
3484
- if (schema === null || currentValue === null) {
3485
- return;
3486
- }
3487
- return {
3488
- schema,
3489
- currentValue,
3490
- overrideId
3491
- };
3492
- }, [schema, currentValue, overrideId, visualModeEnabled]);
3493
- return useMemo16(() => {
3494
- if (controls === undefined || currentValue === null || schema === null || !visualModeEnabled) {
3495
- return {
3496
- controls: undefined,
3497
- values: currentValue ?? {}
3498
- };
3499
- }
3500
- const overrideValues = overrides[overrideId] ?? {};
3501
- const propStatus = codeValues[overrideId];
3502
- const currentValueKeys = Object.keys(currentValue);
3503
- const keysToUpdate = [...new Set(currentValueKeys)];
3504
- const merged = {};
3505
- for (const key of keysToUpdate) {
3506
- const codeValueStatus = propStatus?.[key] ?? null;
3507
- merged[key] = getEffectiveVisualModeValue({
3508
- codeValue: codeValueStatus,
3509
- runtimeValue: currentValue[key],
3510
- dragOverrideValue: overrideValues[key],
3511
- defaultValue: schema[key]?.default,
3512
- shouldResortToDefaultValueIfUndefined: false
3513
- });
3514
- }
3515
- return {
3516
- controls,
3517
- values: merged
3518
- };
3519
- }, [
3520
- controls,
3521
- currentValue,
3522
- overrideId,
3523
- overrides,
3524
- codeValues,
3525
- schema,
3526
- visualModeEnabled
3527
- ]);
3528
- };
3529
- var getNestedValue = (obj, key) => {
3530
- const parts = key.split(".");
3531
- let current = obj;
3532
- for (const part of parts) {
3533
- if (current === null || current === undefined || typeof current !== "object")
3534
- return;
3535
- current = current[part];
3536
- }
3537
- return current;
3538
- };
3539
- var mergeValues = (props, values, schemaKeys) => {
3540
- const merged = { ...props };
3541
- for (const key of schemaKeys) {
3542
- const value = values[key];
3543
- const parts = key.split(".");
3544
- if (parts.length === 1) {
3545
- merged[key] = value;
3546
- continue;
3547
- }
3548
- let current = merged;
3549
- for (let i = 0;i < parts.length - 1; i++) {
3550
- const part = parts[i];
3551
- if (typeof current[part] === "object" && current[part] !== null) {
3552
- current[part] = { ...current[part] };
3553
- } else {
3554
- current[part] = {};
3555
- }
3556
- current = current[part];
3557
- }
3558
- current[parts[parts.length - 1]] = value;
3559
- }
3560
- return merged;
3561
- };
3562
- var wrapInSchema = (Component, schema) => {
3563
- const schemaKeys = Object.keys(schema);
3564
- const Wrapped = forwardRef4((props, ref) => {
3565
- const env = useRemotionEnvironment();
3566
- if (!env.isStudio || env.isReadOnlyStudio || env.isRendering || !process.env.EXPERIMENTAL_VISUAL_MODE_ENABLED) {
3567
- return React15.createElement(Component, {
3568
- ...props,
3569
- _experimentalControls: null,
3570
- ref
3571
- });
3572
- }
3573
- const schemaInput = useMemo17(() => {
3574
- const input = {};
3575
- for (const key of schemaKeys) {
3576
- input[key] = getNestedValue(props, key);
3577
- }
3578
- return input;
3579
- }, schemaKeys.map((key) => getNestedValue(props, key)));
3580
- const { controls, values } = useSchema(schema, schemaInput);
3581
- const mergedProps = mergeValues(props, values, schemaKeys);
3582
- return React15.createElement(Component, {
3583
- ...mergedProps,
3584
- _experimentalControls: controls,
3585
- ref
3586
- });
3587
- });
3588
- Wrapped.displayName = `wrapInSchema(${Component.displayName || Component.name || "Component"})`;
3589
- return Wrapped;
3590
- };
3591
3825
  var cachedSupport = null;
3592
3826
  var isHtmlInCanvasSupported = () => {
3593
3827
  if (cachedSupport !== null) {
@@ -3625,40 +3859,11 @@ var defaultOnPaint = ({
3625
3859
  const transform = ctx.drawElementImage(elementImage, 0, 0);
3626
3860
  element.style.transform = transform.toString();
3627
3861
  };
3628
- var htmlInCanvasSchema = {
3629
- "style.translate": {
3630
- type: "translate",
3631
- step: 1,
3632
- default: "0px 0px",
3633
- description: "Position"
3634
- },
3635
- "style.scale": {
3636
- type: "number",
3637
- min: 0.05,
3638
- max: 100,
3639
- step: 0.01,
3640
- default: 1,
3641
- description: "Scale"
3642
- },
3643
- "style.rotate": {
3644
- type: "rotation",
3645
- step: 1,
3646
- default: "0deg",
3647
- description: "Rotation"
3648
- },
3649
- "style.opacity": {
3650
- type: "number",
3651
- min: 0,
3652
- max: 1,
3653
- step: 0.01,
3654
- default: 1,
3655
- description: "Opacity"
3656
- }
3657
- };
3862
+ var HtmlInCanvasAncestorContext = createContext15(false);
3658
3863
  var HtmlInCanvasInner = forwardRef5(({
3659
3864
  width,
3660
3865
  height,
3661
- _experimentalEffects: experimentalEffects = [],
3866
+ _experimentalEffects: effects = [],
3662
3867
  children,
3663
3868
  onPaint,
3664
3869
  onInit,
@@ -3667,6 +3872,7 @@ var HtmlInCanvasInner = forwardRef5(({
3667
3872
  durationInFrames,
3668
3873
  ...sequenceProps
3669
3874
  }, ref) => {
3875
+ const isInsideAncestorHtmlInCanvas = useContext17(HtmlInCanvasAncestorContext);
3670
3876
  assertHtmlInCanvasDimensions(width, height);
3671
3877
  const { continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
3672
3878
  if (!isHtmlInCanvasSupported()) {
@@ -3687,8 +3893,8 @@ var HtmlInCanvasInner = forwardRef5(({
3687
3893
  }, [ref]);
3688
3894
  const [offscreenCanvas] = useState8(() => new OffscreenCanvas(1, 1));
3689
3895
  const chainState = useEffectChainState();
3690
- const effectsRef = useRef9(experimentalEffects);
3691
- effectsRef.current = experimentalEffects;
3896
+ const effectsRef = useRef9(effects);
3897
+ effectsRef.current = effects;
3692
3898
  const frameRef = useRef9(frame);
3693
3899
  frameRef.current = frame;
3694
3900
  const onPaintRef = useRef9(onPaint);
@@ -3802,35 +4008,42 @@ var HtmlInCanvasInner = forwardRef5(({
3802
4008
  continueRender2(handle);
3803
4009
  };
3804
4010
  }, [width, height, continueRender2]);
3805
- const innerStyle = useMemo18(() => {
4011
+ const innerStyle = useMemo17(() => {
3806
4012
  return {
3807
4013
  width,
3808
- height,
3809
- ...style
4014
+ height
3810
4015
  };
3811
- }, [width, height, style]);
4016
+ }, [width, height]);
4017
+ if (isInsideAncestorHtmlInCanvas) {
4018
+ throw new Error("<HtmlInCanvas> effects cannot be nested together. Chrome will only display the outer effect. Consider merging the effects into one if you can.");
4019
+ }
3812
4020
  return /* @__PURE__ */ jsx15(Sequence, {
3813
4021
  durationInFrames: resolvedDuration,
3814
4022
  name: "<HtmlInCanvas>",
3815
4023
  _experimentalControls: controls,
4024
+ _experimentalEffects: effects,
3816
4025
  layout: "none",
3817
4026
  ...sequenceProps,
3818
- children: /* @__PURE__ */ jsx15("canvas", {
3819
- ref: setLayoutCanvasRef,
3820
- width,
3821
- height,
3822
- children: /* @__PURE__ */ jsx15("div", {
3823
- ref: divRef,
3824
- style: innerStyle,
3825
- children
4027
+ children: /* @__PURE__ */ jsx15(HtmlInCanvasAncestorContext.Provider, {
4028
+ value: true,
4029
+ children: /* @__PURE__ */ jsx15("canvas", {
4030
+ ref: setLayoutCanvasRef,
4031
+ width,
4032
+ height,
4033
+ style,
4034
+ children: /* @__PURE__ */ jsx15("div", {
4035
+ ref: divRef,
4036
+ style: innerStyle,
4037
+ children
4038
+ })
3826
4039
  })
3827
4040
  })
3828
4041
  });
3829
4042
  });
3830
4043
  HtmlInCanvasInner.displayName = "HtmlInCanvas";
3831
- var HtmlInCanvasWrapped = wrapInSchema(HtmlInCanvasInner, htmlInCanvasSchema);
4044
+ var HtmlInCanvasWrapped = wrapInSchema(HtmlInCanvasInner, sequenceStyleSchema);
3832
4045
  var HtmlInCanvas = Object.assign(HtmlInCanvasWrapped, {
3833
- isHtmlInCanvasSupported
4046
+ isSupported: isHtmlInCanvasSupported
3834
4047
  });
3835
4048
  HtmlInCanvas.displayName = "HtmlInCanvas";
3836
4049
  addSequenceStackTraces(HtmlInCanvas);
@@ -3863,7 +4076,7 @@ var validateRenderAsset = (artifact) => {
3863
4076
  }
3864
4077
  validateContent(artifact.content);
3865
4078
  };
3866
- var RenderAssetManager = createContext15({
4079
+ var RenderAssetManager = createContext16({
3867
4080
  registerRenderAsset: () => {
3868
4081
  return;
3869
4082
  },
@@ -3906,7 +4119,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
3906
4119
  };
3907
4120
  }
3908
4121
  }, []);
3909
- const contextValue = useMemo19(() => {
4122
+ const contextValue = useMemo18(() => {
3910
4123
  return {
3911
4124
  registerRenderAsset,
3912
4125
  unregisterRenderAsset,
@@ -3920,7 +4133,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
3920
4133
  };
3921
4134
  var ArtifactThumbnail = Symbol("Thumbnail");
3922
4135
  var Artifact = ({ filename, content, downloadBehavior }) => {
3923
- const { registerRenderAsset, unregisterRenderAsset } = useContext17(RenderAssetManager);
4136
+ const { registerRenderAsset, unregisterRenderAsset } = useContext18(RenderAssetManager);
3924
4137
  const env = useRemotionEnvironment();
3925
4138
  const frame = useCurrentFrame();
3926
4139
  const [id] = useState10(() => {
@@ -4001,7 +4214,7 @@ var calculateMediaDuration = ({
4001
4214
  const actualDuration = duration / playbackRate;
4002
4215
  return Math.floor(actualDuration);
4003
4216
  };
4004
- var LoopContext = createContext16(null);
4217
+ var LoopContext = createContext17(null);
4005
4218
  var useLoop = () => {
4006
4219
  return React17.useContext(LoopContext);
4007
4220
  };
@@ -4035,14 +4248,14 @@ var Loop = ({
4035
4248
  const iteration = Math.floor(currentFrame / durationInFrames);
4036
4249
  const start = iteration * durationInFrames;
4037
4250
  const from = Math.min(start, maxFrame);
4038
- const loopDisplay = useMemo20(() => {
4251
+ const loopDisplay = useMemo19(() => {
4039
4252
  return {
4040
4253
  numberOfTimes: Math.min(compDuration / durationInFrames, times),
4041
4254
  startOffset: -from,
4042
4255
  durationInFrames
4043
4256
  };
4044
4257
  }, [compDuration, durationInFrames, from, times]);
4045
- const loopContext = useMemo20(() => {
4258
+ const loopContext = useMemo19(() => {
4046
4259
  return {
4047
4260
  iteration: Math.floor(currentFrame / durationInFrames),
4048
4261
  durationInFrames
@@ -4072,7 +4285,7 @@ var playbackLogging = ({
4072
4285
  const tags = [mountTime ? Date.now() - mountTime + "ms " : null, tag].filter(Boolean).join(" ");
4073
4286
  Log.trace({ logLevel, tag: null }, `[${tags}]`, message);
4074
4287
  };
4075
- var PreloadContext = createContext17({});
4288
+ var PreloadContext = createContext18({});
4076
4289
  var preloads = {};
4077
4290
  var updaters = [];
4078
4291
  var setPreloads = (updater) => {
@@ -4110,7 +4323,7 @@ var getSrcWithoutHash = (src) => {
4110
4323
  return src.slice(0, hashIndex);
4111
4324
  };
4112
4325
  var usePreload = (src) => {
4113
- const preloads2 = useContext18(PreloadContext);
4326
+ const preloads2 = useContext19(PreloadContext);
4114
4327
  const hashFragmentIndex = removeAndGetHashFragment(src);
4115
4328
  const withoutHashFragment = getSrcWithoutHash(src);
4116
4329
  if (!preloads2[withoutHashFragment]) {
@@ -4393,7 +4606,7 @@ var durationReducer = (state, action) => {
4393
4606
  return state;
4394
4607
  }
4395
4608
  };
4396
- var DurationsContext = createContext18({
4609
+ var DurationsContext = createContext19({
4397
4610
  durations: {},
4398
4611
  setDurations: () => {
4399
4612
  throw new Error("context missing");
@@ -4401,7 +4614,7 @@ var DurationsContext = createContext18({
4401
4614
  });
4402
4615
  var DurationsContextProvider = ({ children }) => {
4403
4616
  const [durations, setDurations] = useReducer(durationReducer, {});
4404
- const value = useMemo21(() => {
4617
+ const value = useMemo20(() => {
4405
4618
  return {
4406
4619
  durations,
4407
4620
  setDurations
@@ -4535,7 +4748,7 @@ var useSingletonAudioContext = ({
4535
4748
  audioEnabled
4536
4749
  }) => {
4537
4750
  const env = useRemotionEnvironment();
4538
- return useMemo22(() => {
4751
+ const context = useMemo21(() => {
4539
4752
  if (env.isRendering) {
4540
4753
  return null;
4541
4754
  }
@@ -4552,11 +4765,19 @@ var useSingletonAudioContext = ({
4552
4765
  });
4553
4766
  const gainNode = audioContext.createGain();
4554
4767
  gainNode.connect(audioContext.destination);
4768
+ Log.trace({ logLevel, tag: "audio" }, "Creating new audio context");
4769
+ audioContext.suspend();
4555
4770
  return {
4556
4771
  audioContext,
4557
4772
  gainNode
4558
4773
  };
4559
4774
  }, [logLevel, latencyHint, env.isRendering, audioEnabled]);
4775
+ useEffect8(() => {
4776
+ return () => {
4777
+ context?.audioContext?.close();
4778
+ };
4779
+ }, [context]);
4780
+ return context;
4560
4781
  };
4561
4782
  var waitUntilActuallyResumed = (audioContext, logLevel) => {
4562
4783
  return new Promise((resolve) => {
@@ -4604,8 +4825,8 @@ var didPropChange = (key, newProp, prevProp) => {
4604
4825
  }
4605
4826
  return true;
4606
4827
  };
4607
- var SharedAudioContext = createContext19(null);
4608
- var SharedAudioTagsContext = createContext19(null);
4828
+ var SharedAudioContext = createContext20(null);
4829
+ var SharedAudioTagsContext = createContext20(null);
4609
4830
  var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled }) => {
4610
4831
  const logLevel = useLogLevel();
4611
4832
  const ctxAndGain = useSingletonAudioContext({
@@ -4615,9 +4836,9 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4615
4836
  });
4616
4837
  const audioContextIsPlayingEventually = useRef11(false);
4617
4838
  const isResuming = useRef11(null);
4618
- const audioSyncAnchor = useMemo23(() => ({ value: 0 }), []);
4839
+ const audioSyncAnchor = useMemo22(() => ({ value: 0 }), []);
4619
4840
  const audioSyncAnchorListeners = useRef11([]);
4620
- const audioSyncAnchorEmitter = useMemo23(() => {
4841
+ const audioSyncAnchorEmitter = useMemo22(() => {
4621
4842
  return {
4622
4843
  dispatch: (event) => {
4623
4844
  audioSyncAnchorListeners.current.forEach((l) => l(event));
@@ -4637,7 +4858,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4637
4858
  const unscheduleAudioNode = useCallback9((node) => {
4638
4859
  nodesToResume.current.delete(node);
4639
4860
  }, []);
4640
- const scheduleAudioNode = useMemo23(() => {
4861
+ const scheduleAudioNode = useMemo22(() => {
4641
4862
  return ({
4642
4863
  node,
4643
4864
  mediaTimestamp,
@@ -4689,16 +4910,22 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4689
4910
  return Promise.resolve();
4690
4911
  }
4691
4912
  audioContextIsPlayingEventually.current = true;
4692
- isResuming.current = waitUntilActuallyResumed(ctxAndGain.audioContext, logLevel).then(() => {}).finally(() => {
4913
+ const resumePromise = ctxAndGain.audioContext.resume();
4914
+ isResuming.current = new Promise((resolve) => {
4915
+ waitUntilActuallyResumed(ctxAndGain.audioContext, logLevel).then(resolve);
4916
+ resumePromise.catch((err) => {
4917
+ Log.warn({ logLevel, tag: "audio" }, "AudioContext resume rejected, continuing without audio sync", err);
4918
+ resolve();
4919
+ });
4920
+ }).finally(() => {
4693
4921
  isResuming.current = null;
4694
4922
  });
4695
4923
  ctxAndGain.gainNode.gain.cancelScheduledValues(ctxAndGain.audioContext.currentTime);
4696
- ctxAndGain.gainNode?.gain.setValueAtTime(0, ctxAndGain.audioContext.currentTime);
4697
- ctxAndGain.gainNode?.gain.linearRampToValueAtTime(1, ctxAndGain.audioContext.currentTime + 0.03);
4698
- return ctxAndGain.audioContext.resume().then(() => {
4699
- nodesToResume.current.forEach((r, node) => node.start(r.scheduledTime, r.offset, r.duration));
4700
- nodesToResume.current.clear();
4701
- });
4924
+ ctxAndGain.gainNode.gain.setValueAtTime(0, ctxAndGain.audioContext.currentTime);
4925
+ ctxAndGain.gainNode.gain.linearRampToValueAtTime(1, ctxAndGain.audioContext.currentTime + 0.03);
4926
+ nodesToResume.current.forEach((r, node) => node.start(r.scheduledTime, r.offset, r.duration));
4927
+ nodesToResume.current.clear();
4928
+ return resumePromise.catch(() => {});
4702
4929
  }, [ctxAndGain, logLevel]);
4703
4930
  const getIsResumingAudioContext = useCallback9(() => {
4704
4931
  return isResuming.current;
@@ -4713,7 +4940,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4713
4940
  audioContextIsPlayingEventually.current = false;
4714
4941
  ctxAndGain.audioContext.suspend();
4715
4942
  }, [ctxAndGain]);
4716
- const audioContextValue = useMemo23(() => {
4943
+ const audioContextValue = useMemo22(() => {
4717
4944
  return {
4718
4945
  audioContext: ctxAndGain?.audioContext ?? null,
4719
4946
  gainNode: ctxAndGain?.gainNode ?? null,
@@ -4749,10 +4976,10 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
4749
4976
  const logLevel = useLogLevel();
4750
4977
  const mountTime = useMountTime();
4751
4978
  const env = useRemotionEnvironment();
4752
- const audioCtx = useContext19(SharedAudioContext);
4979
+ const audioCtx = useContext20(SharedAudioContext);
4753
4980
  const audioContext = audioCtx?.audioContext ?? null;
4754
4981
  const resume = audioCtx?.resume;
4755
- const refs = useMemo23(() => {
4982
+ const refs = useMemo22(() => {
4756
4983
  return new Array(numberOfAudioTags).fill(true).map(() => {
4757
4984
  const ref = createRef2();
4758
4985
  return {
@@ -4889,7 +5116,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
4889
5116
  });
4890
5117
  resume?.();
4891
5118
  }, [logLevel, mountTime, refs, env.isPlayer, resume]);
4892
- const audioTagsValue = useMemo23(() => {
5119
+ const audioTagsValue = useMemo22(() => {
4893
5120
  return {
4894
5121
  registerAudio,
4895
5122
  unregisterAudio,
@@ -4924,8 +5151,8 @@ var useSharedAudio = ({
4924
5151
  premounting,
4925
5152
  postmounting
4926
5153
  }) => {
4927
- const audioCtx = useContext19(SharedAudioContext);
4928
- const tagsCtx = useContext19(SharedAudioTagsContext);
5154
+ const audioCtx = useContext20(SharedAudioContext);
5155
+ const tagsCtx = useContext20(SharedAudioTagsContext);
4929
5156
  const [elem] = useState12(() => {
4930
5157
  if (tagsCtx && tagsCtx.numberOfAudioTags > 0) {
4931
5158
  return tagsCtx.registerAudio({ aud, audioId, premounting, postmounting });
@@ -5104,7 +5331,7 @@ var useVolume = ({
5104
5331
  const audioStuffRef = useRef13(null);
5105
5332
  const currentVolumeRef = useRef13(volume);
5106
5333
  currentVolumeRef.current = volume;
5107
- const sharedAudioContext = useContext20(SharedAudioContext);
5334
+ const sharedAudioContext = useContext21(SharedAudioContext);
5108
5335
  if (!sharedAudioContext) {
5109
5336
  throw new Error("useAmplification must be used within a SharedAudioContext");
5110
5337
  }
@@ -5169,7 +5396,7 @@ var useVolume = ({
5169
5396
  return audioStuffRef;
5170
5397
  };
5171
5398
  var useMediaStartsAt = () => {
5172
- const parentSequence = useContext21(SequenceContext);
5399
+ const parentSequence = useContext22(SequenceContext);
5173
5400
  const startsAt = Math.min(0, parentSequence?.relativeFrom ?? 0);
5174
5401
  return startsAt;
5175
5402
  };
@@ -5258,7 +5485,7 @@ var useBasicMediaInTimeline = ({
5258
5485
  if (!src) {
5259
5486
  throw new Error("No src passed");
5260
5487
  }
5261
- const parentSequence = useContext22(SequenceContext);
5488
+ const parentSequence = useContext23(SequenceContext);
5262
5489
  const [initialVolume] = useState13(() => volume);
5263
5490
  const duration = getTimelineDuration({
5264
5491
  compositionDurationInFrames: sequenceDurationInFrames,
@@ -5268,7 +5495,7 @@ var useBasicMediaInTimeline = ({
5268
5495
  parentSequenceDurationInFrames: parentSequence?.durationInFrames ?? null,
5269
5496
  loop
5270
5497
  });
5271
- const volumes = useMemo24(() => {
5498
+ const volumes = useMemo23(() => {
5272
5499
  if (typeof volume === "number") {
5273
5500
  return volume;
5274
5501
  }
@@ -5280,7 +5507,7 @@ var useBasicMediaInTimeline = ({
5280
5507
  });
5281
5508
  }).join(",");
5282
5509
  }, [duration, mediaStartsAt, volume, mediaVolume]);
5283
- useEffect8(() => {
5510
+ useEffect9(() => {
5284
5511
  if (typeof volume === "number" && volume !== initialVolume) {
5285
5512
  warnOnce2(`Remotion: The ${mediaType} with src ${src} has changed it's volume. Prefer the callback syntax for setting volume to get better timeline display: https://www.remotion.dev/docs/audio/volume`);
5286
5513
  }
@@ -5289,7 +5516,7 @@ var useBasicMediaInTimeline = ({
5289
5516
  const nonce = useNonce();
5290
5517
  const { rootId } = useTimelineContext();
5291
5518
  const startMediaFrom = 0 - mediaStartsAt + (trimBefore ?? 0);
5292
- const memoizedResult = useMemo24(() => {
5519
+ const memoizedResult = useMemo23(() => {
5293
5520
  return {
5294
5521
  volumes,
5295
5522
  duration,
@@ -5325,8 +5552,8 @@ var useImageInTimeline = ({
5325
5552
  loopDisplay,
5326
5553
  controls
5327
5554
  }) => {
5328
- const parentSequence = useContext22(SequenceContext);
5329
- const { registerSequence, unregisterSequence } = useContext22(SequenceManager);
5555
+ const parentSequence = useContext23(SequenceContext);
5556
+ const { registerSequence, unregisterSequence } = useContext23(SequenceManager);
5330
5557
  const { durationInFrames } = useVideoConfig();
5331
5558
  const mediaStartsAt = useMediaStartsAt();
5332
5559
  const { duration, nonce, rootId, finalDisplayName } = useBasicMediaInTimeline({
@@ -5343,7 +5570,7 @@ var useImageInTimeline = ({
5343
5570
  loop: false
5344
5571
  });
5345
5572
  const { isStudio } = useRemotionEnvironment();
5346
- useEffect8(() => {
5573
+ useEffect9(() => {
5347
5574
  if (!src) {
5348
5575
  throw new Error("No src passed");
5349
5576
  }
@@ -5407,9 +5634,9 @@ var useMediaInTimeline = ({
5407
5634
  postmountDisplay,
5408
5635
  loopDisplay
5409
5636
  }) => {
5410
- const parentSequence = useContext22(SequenceContext);
5637
+ const parentSequence = useContext23(SequenceContext);
5411
5638
  const startsAt = useMediaStartsAt();
5412
- const { registerSequence, unregisterSequence } = useContext22(SequenceManager);
5639
+ const { registerSequence, unregisterSequence } = useContext23(SequenceManager);
5413
5640
  const { durationInFrames } = useVideoConfig();
5414
5641
  const mediaStartsAt = useMediaStartsAt();
5415
5642
  const { volumes, duration, doesVolumeChange, nonce, rootId, finalDisplayName } = useBasicMediaInTimeline({
@@ -5426,7 +5653,7 @@ var useMediaInTimeline = ({
5426
5653
  loop: false
5427
5654
  });
5428
5655
  const { isStudio } = useRemotionEnvironment();
5429
- useEffect8(() => {
5656
+ useEffect9(() => {
5430
5657
  if (!src) {
5431
5658
  throw new Error("No src passed");
5432
5659
  }
@@ -5528,7 +5755,7 @@ var useBufferManager = (logLevel, mountTime) => {
5528
5755
  }
5529
5756
  };
5530
5757
  }, []);
5531
- useEffect9(() => {
5758
+ useEffect10(() => {
5532
5759
  if (rendering) {
5533
5760
  return;
5534
5761
  }
@@ -5558,13 +5785,13 @@ var useBufferManager = (logLevel, mountTime) => {
5558
5785
  }
5559
5786
  }, [blocks]);
5560
5787
  }
5561
- return useMemo25(() => {
5788
+ return useMemo24(() => {
5562
5789
  return { addBlock, listenForBuffering, listenForResume, buffering };
5563
5790
  }, [addBlock, buffering, listenForBuffering, listenForResume]);
5564
5791
  };
5565
5792
  var BufferingContextReact = React21.createContext(null);
5566
5793
  var BufferingProvider = ({ children }) => {
5567
- const { logLevel, mountTime } = useContext23(LogLevelContext);
5794
+ const { logLevel, mountTime } = useContext24(LogLevelContext);
5568
5795
  const bufferManager = useBufferManager(logLevel ?? "info", mountTime);
5569
5796
  return /* @__PURE__ */ jsx21(BufferingContextReact.Provider, {
5570
5797
  value: bufferManager,
@@ -5573,7 +5800,7 @@ var BufferingProvider = ({ children }) => {
5573
5800
  };
5574
5801
  var useIsPlayerBuffering = (bufferManager) => {
5575
5802
  const [isBuffering, setIsBuffering] = useState14(bufferManager.buffering.current);
5576
- useEffect9(() => {
5803
+ useEffect10(() => {
5577
5804
  const onBuffer = () => {
5578
5805
  setIsBuffering(true);
5579
5806
  };
@@ -5594,9 +5821,9 @@ var useIsPlayerBuffering = (bufferManager) => {
5594
5821
  return isBuffering;
5595
5822
  };
5596
5823
  var useBufferState = () => {
5597
- const buffer = useContext24(BufferingContextReact);
5824
+ const buffer = useContext25(BufferingContextReact);
5598
5825
  const addBlock = buffer ? buffer.addBlock : null;
5599
- return useMemo26(() => ({
5826
+ return useMemo25(() => ({
5600
5827
  delayPlayback: () => {
5601
5828
  if (!addBlock) {
5602
5829
  throw new Error("Tried to enable the buffering state, but a Remotion context was not found. This API can only be called in a component that was passed to the Remotion Player or a <Composition>. Or you might have experienced a version mismatch - run `npx remotion versions` and ensure all packages have the same version. This error is thrown by the buffer state https://remotion.dev/docs/player/buffer-state");
@@ -5693,7 +5920,7 @@ var useBufferUntilFirstFrame = ({
5693
5920
  onVariableFpsVideoDetected,
5694
5921
  pauseWhenBuffering
5695
5922
  ]);
5696
- return useMemo27(() => {
5923
+ return useMemo26(() => {
5697
5924
  return {
5698
5925
  isBuffering: () => bufferingRef.current,
5699
5926
  bufferUntilFirstFrame
@@ -5742,7 +5969,7 @@ var useMediaBuffering = ({
5742
5969
  }) => {
5743
5970
  const buffer = useBufferState();
5744
5971
  const [isBuffering, setIsBuffering] = useState15(false);
5745
- useEffect10(() => {
5972
+ useEffect11(() => {
5746
5973
  let cleanupFns = [];
5747
5974
  const { current } = element;
5748
5975
  if (!current) {
@@ -5875,7 +6102,7 @@ var useRequestVideoCallbackTime = ({
5875
6102
  onVariableFpsVideoDetected
5876
6103
  }) => {
5877
6104
  const currentTime = useRef16(null);
5878
- useEffect11(() => {
6105
+ useEffect12(() => {
5879
6106
  const { current } = mediaRef;
5880
6107
  if (current) {
5881
6108
  currentTime.current = {
@@ -6095,11 +6322,11 @@ var useMediaPlayback = ({
6095
6322
  isPostmounting,
6096
6323
  onAutoPlayError
6097
6324
  }) => {
6098
- const { playbackRate: globalPlaybackRate } = useTimelineContext();
6325
+ const { playbackRate: globalPlaybackRate } = usePlaybackRate();
6099
6326
  const frame = useCurrentFrame();
6100
6327
  const absoluteFrame = useTimelinePosition();
6101
6328
  const [playing] = usePlayingState();
6102
- const buffering = useContext25(BufferingContextReact);
6329
+ const buffering = useContext26(BufferingContextReact);
6103
6330
  const { fps } = useVideoConfig();
6104
6331
  const mediaStartsAt = useMediaStartsAt();
6105
6332
  const lastSeekDueToShift = useRef17(null);
@@ -6161,7 +6388,7 @@ var useMediaPlayback = ({
6161
6388
  return acceptableTimeshift ?? defaultAcceptableTimeshift;
6162
6389
  })();
6163
6390
  const isPlayerBuffering = useIsPlayerBuffering(buffering);
6164
- useEffect12(() => {
6391
+ useEffect13(() => {
6165
6392
  if (mediaRef.current?.paused) {
6166
6393
  return;
6167
6394
  }
@@ -6206,7 +6433,7 @@ var useMediaPlayback = ({
6206
6433
  mediaRef.current.playbackRate = playbackRateToSet;
6207
6434
  }
6208
6435
  }, [mediaRef, playbackRate]);
6209
- useEffect12(() => {
6436
+ useEffect13(() => {
6210
6437
  const tagName = mediaType === "audio" ? "<Html5Audio>" : "<Html5Video>";
6211
6438
  if (!mediaRef.current) {
6212
6439
  throw new Error(`No ${mediaType} ref found`);
@@ -6335,7 +6562,7 @@ var useMediaTag = ({
6335
6562
  const logLevel = useLogLevel();
6336
6563
  const mountTime = useMountTime();
6337
6564
  const env = useRemotionEnvironment();
6338
- useEffect13(() => {
6565
+ useEffect14(() => {
6339
6566
  const tag = {
6340
6567
  id,
6341
6568
  play: (reason) => {
@@ -6374,11 +6601,11 @@ var useMediaTag = ({
6374
6601
  env.isPlayer
6375
6602
  ]);
6376
6603
  };
6377
- var MediaVolumeContext = createContext20({
6604
+ var MediaVolumeContext = createContext21({
6378
6605
  mediaMuted: false,
6379
6606
  mediaVolume: 1
6380
6607
  });
6381
- var SetMediaVolumeContext = createContext20({
6608
+ var SetMediaVolumeContext = createContext21({
6382
6609
  setMediaMuted: () => {
6383
6610
  throw new Error("default");
6384
6611
  },
@@ -6387,16 +6614,16 @@ var SetMediaVolumeContext = createContext20({
6387
6614
  }
6388
6615
  });
6389
6616
  var useMediaVolumeState = () => {
6390
- const { mediaVolume } = useContext26(MediaVolumeContext);
6391
- const { setMediaVolume } = useContext26(SetMediaVolumeContext);
6392
- return useMemo28(() => {
6617
+ const { mediaVolume } = useContext27(MediaVolumeContext);
6618
+ const { setMediaVolume } = useContext27(SetMediaVolumeContext);
6619
+ return useMemo27(() => {
6393
6620
  return [mediaVolume, setMediaVolume];
6394
6621
  }, [mediaVolume, setMediaVolume]);
6395
6622
  };
6396
6623
  var useMediaMutedState = () => {
6397
- const { mediaMuted } = useContext26(MediaVolumeContext);
6398
- const { setMediaMuted } = useContext26(SetMediaVolumeContext);
6399
- return useMemo28(() => {
6624
+ const { mediaMuted } = useContext27(MediaVolumeContext);
6625
+ const { setMediaMuted } = useContext27(SetMediaVolumeContext);
6626
+ return useMemo27(() => {
6400
6627
  return [mediaMuted, setMediaMuted];
6401
6628
  }, [mediaMuted, setMediaMuted]);
6402
6629
  };
@@ -6445,12 +6672,12 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
6445
6672
  const [mediaVolume] = useMediaVolumeState();
6446
6673
  const [mediaMuted] = useMediaMutedState();
6447
6674
  const volumePropFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
6448
- const { hidden } = useContext27(SequenceVisibilityToggleContext);
6675
+ const { hidden } = useContext28(SequenceVisibilityToggleContext);
6449
6676
  if (!src) {
6450
6677
  throw new TypeError("No 'src' was passed to <Html5Audio>.");
6451
6678
  }
6452
6679
  const preloadedSrc = usePreload(src);
6453
- const sequenceContext = useContext27(SequenceContext);
6680
+ const sequenceContext = useContext28(SequenceContext);
6454
6681
  const [timelineId] = useState16(() => String(Math.random()));
6455
6682
  const isSequenceHidden = hidden[timelineId] ?? false;
6456
6683
  const userPreferredVolume = evaluateVolume({
@@ -6464,7 +6691,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
6464
6691
  requestsVideoFrame: false,
6465
6692
  isClientSideRendering: false
6466
6693
  });
6467
- const propsToPass = useMemo29(() => {
6694
+ const propsToPass = useMemo28(() => {
6468
6695
  return {
6469
6696
  muted: muted || mediaMuted || isSequenceHidden || userPreferredVolume <= 0,
6470
6697
  src: preloadedSrc,
@@ -6482,7 +6709,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
6482
6709
  userPreferredVolume,
6483
6710
  crossOriginValue
6484
6711
  ]);
6485
- const id = useMemo29(() => `audio-${random(src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}-muted:${props.muted}-loop:${props.loop}`, [
6712
+ const id = useMemo28(() => `audio-${random(src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}-muted:${props.muted}-loop:${props.loop}`, [
6486
6713
  src,
6487
6714
  sequenceContext?.relativeFrom,
6488
6715
  sequenceContext?.cumulatedFrom,
@@ -6554,7 +6781,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
6554
6781
  }, [audioRef]);
6555
6782
  const currentOnDurationCallback = useRef18(onDuration);
6556
6783
  currentOnDurationCallback.current = onDuration;
6557
- useEffect14(() => {
6784
+ useEffect15(() => {
6558
6785
  const { current } = audioRef;
6559
6786
  if (!current) {
6560
6787
  return;
@@ -6605,10 +6832,10 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
6605
6832
  const absoluteFrame = useTimelinePosition();
6606
6833
  const volumePropFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
6607
6834
  const frame = useCurrentFrame();
6608
- const sequenceContext = useContext28(SequenceContext);
6609
- const { registerRenderAsset, unregisterRenderAsset } = useContext28(RenderAssetManager);
6835
+ const sequenceContext = useContext29(SequenceContext);
6836
+ const { registerRenderAsset, unregisterRenderAsset } = useContext29(RenderAssetManager);
6610
6837
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
6611
- const id = useMemo30(() => `audio-${random(props.src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}`, [
6838
+ const id = useMemo29(() => `audio-${random(props.src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}`, [
6612
6839
  props.src,
6613
6840
  sequenceContext?.relativeFrom,
6614
6841
  sequenceContext?.cumulatedFrom,
@@ -6623,7 +6850,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
6623
6850
  useImperativeHandle5(ref, () => {
6624
6851
  return audioRef.current;
6625
6852
  }, []);
6626
- useEffect15(() => {
6853
+ useEffect16(() => {
6627
6854
  if (!props.src) {
6628
6855
  throw new Error("No src passed");
6629
6856
  }
@@ -6715,7 +6942,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
6715
6942
  };
6716
6943
  var AudioForRendering = forwardRef7(AudioForRenderingRefForwardingFunction);
6717
6944
  var AudioRefForwardingFunction = (props, ref) => {
6718
- const audioTagsContext = useContext29(SharedAudioTagsContext);
6945
+ const audioTagsContext = useContext30(SharedAudioTagsContext);
6719
6946
  const {
6720
6947
  startFrom,
6721
6948
  endAt,
@@ -6734,7 +6961,7 @@ var AudioRefForwardingFunction = (props, ref) => {
6734
6961
  if (environment.isClientSideRendering) {
6735
6962
  throw new Error("<Html5Audio> is not supported in @remotion/web-renderer. Use <Audio> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");
6736
6963
  }
6737
- const { durations, setDurations } = useContext29(DurationsContext);
6964
+ const { durations, setDurations } = useContext30(DurationsContext);
6738
6965
  if (typeof props.src !== "string") {
6739
6966
  throw new TypeError(`The \`<Html5Audio>\` tag requires a string for \`src\`, but got ${JSON.stringify(props.src)} instead.`);
6740
6967
  }
@@ -6873,36 +7100,6 @@ function truncateSrcForLabel(src) {
6873
7100
  }
6874
7101
  return src;
6875
7102
  }
6876
- var imgSchema = {
6877
- "style.translate": {
6878
- type: "translate",
6879
- step: 1,
6880
- default: "0px 0px",
6881
- description: "Position"
6882
- },
6883
- "style.scale": {
6884
- type: "number",
6885
- min: 0.05,
6886
- max: 100,
6887
- step: 0.01,
6888
- default: 1,
6889
- description: "Scale"
6890
- },
6891
- "style.rotate": {
6892
- type: "rotation",
6893
- step: 1,
6894
- default: "0deg",
6895
- description: "Rotation"
6896
- },
6897
- "style.opacity": {
6898
- type: "number",
6899
- min: 0,
6900
- max: 1,
6901
- step: 0.01,
6902
- default: 1,
6903
- description: "Opacity"
6904
- }
6905
- };
6906
7103
  var ImgInner = ({
6907
7104
  onError,
6908
7105
  maxRetries = 2,
@@ -6922,7 +7119,7 @@ var ImgInner = ({
6922
7119
  const imageRef = useRef20(null);
6923
7120
  const errors = useRef20({});
6924
7121
  const { delayPlayback } = useBufferState();
6925
- const sequenceContext = useContext30(SequenceContext);
7122
+ const sequenceContext = useContext31(SequenceContext);
6926
7123
  const [timelineId] = useState18(() => String(Math.random()));
6927
7124
  if (!src) {
6928
7125
  throw new Error('No "src" prop was passed to <Img>.');
@@ -7066,7 +7263,7 @@ var ImgInner = ({
7066
7263
  decoding: "sync"
7067
7264
  });
7068
7265
  };
7069
- var Img = wrapInSchema(ImgInner, imgSchema);
7266
+ var Img = wrapInSchema(ImgInner, sequenceStyleSchema);
7070
7267
  addSequenceStackTraces(Img);
7071
7268
  var compositionsRef = React28.createRef();
7072
7269
  var CompositionManagerProvider = ({
@@ -7122,7 +7319,7 @@ var CompositionManagerProvider = ({
7122
7319
  getCompositions: () => currentcompositionsRef.current
7123
7320
  };
7124
7321
  }, []);
7125
- const compositionManagerSetters = useMemo31(() => {
7322
+ const compositionManagerSetters = useMemo30(() => {
7126
7323
  return {
7127
7324
  registerComposition,
7128
7325
  unregisterComposition,
@@ -7138,7 +7335,7 @@ var CompositionManagerProvider = ({
7138
7335
  unregisterFolder,
7139
7336
  onlyRenderComposition
7140
7337
  ]);
7141
- const compositionManagerContextValue = useMemo31(() => {
7338
+ const compositionManagerContextValue = useMemo30(() => {
7142
7339
  return {
7143
7340
  compositions,
7144
7341
  folders,
@@ -7242,9 +7439,9 @@ var waitForRoot = (fn) => {
7242
7439
  listeners = listeners.filter((l) => l !== fn);
7243
7440
  };
7244
7441
  };
7245
- var MediaEnabledContext = createContext21(null);
7442
+ var MediaEnabledContext = createContext22(null);
7246
7443
  var useVideoEnabled = () => {
7247
- const context = useContext31(MediaEnabledContext);
7444
+ const context = useContext32(MediaEnabledContext);
7248
7445
  if (!context) {
7249
7446
  return window.remotion_videoEnabled;
7250
7447
  }
@@ -7254,7 +7451,7 @@ var useVideoEnabled = () => {
7254
7451
  return context.videoEnabled;
7255
7452
  };
7256
7453
  var useAudioEnabled = () => {
7257
- const context = useContext31(MediaEnabledContext);
7454
+ const context = useContext32(MediaEnabledContext);
7258
7455
  if (!context) {
7259
7456
  return window.remotion_audioEnabled;
7260
7457
  }
@@ -7268,7 +7465,7 @@ var MediaEnabledProvider = ({
7268
7465
  videoEnabled,
7269
7466
  audioEnabled
7270
7467
  }) => {
7271
- const value = useMemo32(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
7468
+ const value = useMemo31(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
7272
7469
  return /* @__PURE__ */ jsx28(MediaEnabledContext.Provider, {
7273
7470
  value,
7274
7471
  children
@@ -7284,13 +7481,13 @@ var RemotionRootContexts = ({
7284
7481
  frameState,
7285
7482
  visualModeEnabled
7286
7483
  }) => {
7287
- const nonceContext = useMemo33(() => {
7484
+ const nonceContext = useMemo32(() => {
7288
7485
  let counter = 0;
7289
7486
  return {
7290
7487
  getNonce: () => counter++
7291
7488
  };
7292
7489
  }, []);
7293
- const logging = useMemo33(() => {
7490
+ const logging = useMemo32(() => {
7294
7491
  return { logLevel, mountTime: Date.now() };
7295
7492
  }, [logLevel]);
7296
7493
  return /* @__PURE__ */ jsx29(LogLevelContext.Provider, {
@@ -7524,7 +7721,7 @@ var setupEnvVariables = () => {
7524
7721
  });
7525
7722
  };
7526
7723
  var CurrentScaleContext = React32.createContext(null);
7527
- var PreviewSizeContext = createContext22({
7724
+ var PreviewSizeContext = createContext23({
7528
7725
  setSize: () => {
7529
7726
  return;
7530
7727
  },
@@ -7548,8 +7745,8 @@ var calculateScale = ({
7548
7745
  return Number(previewSize);
7549
7746
  };
7550
7747
  var useSequenceControlOverride = (key) => {
7551
- const seqContext = useContext32(SequenceContext);
7552
- const { dragOverrides: overrides } = useContext32(VisualModeOverridesContext);
7748
+ const seqContext = useContext33(SequenceContext);
7749
+ const { dragOverrides: overrides } = useContext33(VisualModeOverridesContext);
7553
7750
  if (!seqContext) {
7554
7751
  return;
7555
7752
  }
@@ -7586,13 +7783,13 @@ var OffthreadVideoForRendering = ({
7586
7783
  const frame = useCurrentFrame();
7587
7784
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior);
7588
7785
  const videoConfig = useUnsafeVideoConfig();
7589
- const sequenceContext = useContext33(SequenceContext);
7786
+ const sequenceContext = useContext34(SequenceContext);
7590
7787
  const mediaStartsAt = useMediaStartsAt();
7591
- const { registerRenderAsset, unregisterRenderAsset } = useContext33(RenderAssetManager);
7788
+ const { registerRenderAsset, unregisterRenderAsset } = useContext34(RenderAssetManager);
7592
7789
  if (!src) {
7593
7790
  throw new TypeError("No `src` was passed to <OffthreadVideo>.");
7594
7791
  }
7595
- const id = useMemo34(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
7792
+ const id = useMemo33(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
7596
7793
  src,
7597
7794
  sequenceContext?.cumulatedFrom,
7598
7795
  sequenceContext?.relativeFrom,
@@ -7607,7 +7804,7 @@ var OffthreadVideoForRendering = ({
7607
7804
  mediaVolume: 1
7608
7805
  });
7609
7806
  warnAboutTooHighVolume(volume);
7610
- useEffect16(() => {
7807
+ useEffect17(() => {
7611
7808
  if (!src) {
7612
7809
  throw new Error("No src passed");
7613
7810
  }
@@ -7647,14 +7844,14 @@ var OffthreadVideoForRendering = ({
7647
7844
  sequenceContext?.relativeFrom,
7648
7845
  audioStreamIndex
7649
7846
  ]);
7650
- const currentTime = useMemo34(() => {
7847
+ const currentTime = useMemo33(() => {
7651
7848
  return getExpectedMediaFrameUncorrected({
7652
7849
  frame,
7653
7850
  playbackRate: playbackRate || 1,
7654
7851
  startFrom: -mediaStartsAt
7655
7852
  }) / videoConfig.fps;
7656
7853
  }, [frame, mediaStartsAt, playbackRate, videoConfig.fps]);
7657
- const actualSrc = useMemo34(() => {
7854
+ const actualSrc = useMemo33(() => {
7658
7855
  return getOffthreadVideoSource({
7659
7856
  src,
7660
7857
  currentTime,
@@ -7742,7 +7939,7 @@ var OffthreadVideoForRendering = ({
7742
7939
  cancelRender("Failed to load image with src " + imageSrc);
7743
7940
  }
7744
7941
  }, [imageSrc, onError]);
7745
- const className = useMemo34(() => {
7942
+ const className = useMemo33(() => {
7746
7943
  return [OBJECTFIT_CONTAIN_CLASS_NAME, props2.className].filter(truthy).join(" ");
7747
7944
  }, [props2.className]);
7748
7945
  const onImageFrame = useCallback17((img) => {
@@ -7768,7 +7965,7 @@ var useEmitVideoFrame = ({
7768
7965
  ref,
7769
7966
  onVideoFrame
7770
7967
  }) => {
7771
- useEffect17(() => {
7968
+ useEffect18(() => {
7772
7969
  const { current } = ref;
7773
7970
  if (!current) {
7774
7971
  return;
@@ -7800,12 +7997,12 @@ class MediaPlaybackError extends Error {
7800
7997
  }
7801
7998
  }
7802
7999
  var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
7803
- const context = useContext34(SharedAudioContext);
8000
+ const context = useContext35(SharedAudioContext);
7804
8001
  if (!context) {
7805
8002
  throw new Error("SharedAudioContext not found");
7806
8003
  }
7807
8004
  const videoRef = useRef22(null);
7808
- const sharedSource = useMemo35(() => {
8005
+ const sharedSource = useMemo34(() => {
7809
8006
  if (!context.audioContext) {
7810
8007
  return null;
7811
8008
  }
@@ -7856,8 +8053,8 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
7856
8053
  }
7857
8054
  const volumePropFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
7858
8055
  const { fps, durationInFrames } = useVideoConfig();
7859
- const parentSequence = useContext34(SequenceContext);
7860
- const { hidden } = useContext34(SequenceVisibilityToggleContext);
8056
+ const parentSequence = useContext35(SequenceContext);
8057
+ const { hidden } = useContext35(SequenceVisibilityToggleContext);
7861
8058
  const logLevel = useLogLevel();
7862
8059
  const mountTime = useMountTime();
7863
8060
  const [timelineId] = useState21(() => String(Math.random()));
@@ -7932,7 +8129,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
7932
8129
  tag: "video",
7933
8130
  mountTime
7934
8131
  }));
7935
- useEffect18(() => {
8132
+ useEffect19(() => {
7936
8133
  const { current } = videoRef;
7937
8134
  if (!current) {
7938
8135
  return;
@@ -7975,7 +8172,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
7975
8172
  const currentOnDurationCallback = useRef22(onDuration);
7976
8173
  currentOnDurationCallback.current = onDuration;
7977
8174
  useEmitVideoFrame({ ref: videoRef, onVideoFrame });
7978
- useEffect18(() => {
8175
+ useEffect19(() => {
7979
8176
  const { current } = videoRef;
7980
8177
  if (!current) {
7981
8178
  return;
@@ -7992,7 +8189,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
7992
8189
  current.removeEventListener("loadedmetadata", onLoadedMetadata);
7993
8190
  };
7994
8191
  }, [src]);
7995
- useEffect18(() => {
8192
+ useEffect19(() => {
7996
8193
  const { current } = videoRef;
7997
8194
  if (!current) {
7998
8195
  return;
@@ -8003,7 +8200,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8003
8200
  current.preload = "auto";
8004
8201
  }
8005
8202
  }, []);
8006
- const actualStyle = useMemo35(() => {
8203
+ const actualStyle = useMemo34(() => {
8007
8204
  return {
8008
8205
  ...style,
8009
8206
  opacity: isSequenceHidden ? 0 : style?.opacity ?? 1
@@ -8197,7 +8394,7 @@ function useRemotionContexts() {
8197
8394
  const sequenceManagerContext = React36.useContext(SequenceManager);
8198
8395
  const bufferManagerContext = React36.useContext(BufferingContextReact);
8199
8396
  const logLevelContext = React36.useContext(LogLevelContext);
8200
- return useMemo36(() => ({
8397
+ return useMemo35(() => ({
8201
8398
  compositionManagerCtx,
8202
8399
  timelineContext,
8203
8400
  setTimelineContext,
@@ -8285,8 +8482,11 @@ var Internals = {
8285
8482
  SequenceManager,
8286
8483
  SequenceStackTracesUpdateContext,
8287
8484
  SequenceVisibilityToggleContext,
8288
- useSchema,
8289
8485
  wrapInSchema,
8486
+ sequenceSchema,
8487
+ sequenceStyleSchema,
8488
+ flattenActiveSchema,
8489
+ getFlatSchemaWithAllKeys,
8290
8490
  useSequenceControlOverride,
8291
8491
  RemotionRootContexts,
8292
8492
  CompositionManagerProvider,
@@ -8336,6 +8536,7 @@ var Internals = {
8336
8536
  REMOTION_STUDIO_CONTAINER_ELEMENT,
8337
8537
  RenderAssetManager,
8338
8538
  persistCurrentFrame,
8539
+ usePlaybackRate,
8339
8540
  useTimelineContext,
8340
8541
  useTimelineSetFrame,
8341
8542
  isIosSafari,
@@ -8369,6 +8570,7 @@ var Internals = {
8369
8570
  TimelinePosition: exports_timeline_position_state,
8370
8571
  DelayRenderContextType,
8371
8572
  TimelineContext,
8573
+ PlaybackRateContext,
8372
8574
  AbsoluteTimeContext,
8373
8575
  RenderAssetManagerProvider,
8374
8576
  getEffectiveVisualModeValue,
@@ -8377,7 +8579,8 @@ var Internals = {
8377
8579
  runEffectChain,
8378
8580
  useMemoizedEffects,
8379
8581
  defineEffect,
8380
- createDescriptor
8582
+ createDescriptor,
8583
+ computeEffectiveSchemaValuesDotNotation
8381
8584
  };
8382
8585
  var NUMBER = "[-+]?\\d*\\.?\\d+";
8383
8586
  var PERCENTAGE = NUMBER + "%";
@@ -8415,7 +8618,7 @@ var flattenChildren = (children) => {
8415
8618
  return flatChildren;
8416
8619
  }, []);
8417
8620
  };
8418
- var IsInsideSeriesContext = createContext23(false);
8621
+ var IsInsideSeriesContext = createContext24(false);
8419
8622
  var IsInsideSeriesContainer = ({ children }) => {
8420
8623
  return /* @__PURE__ */ jsx34(IsInsideSeriesContext.Provider, {
8421
8624
  value: true,
@@ -8441,8 +8644,8 @@ var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
8441
8644
  });
8442
8645
  };
8443
8646
  var SeriesSequence = forwardRef11(SeriesSequenceRefForwardingFunction);
8444
- var Series = (props2) => {
8445
- const childrenValue = useMemo37(() => {
8647
+ var SeriesInner = (props2) => {
8648
+ const childrenValue = useMemo36(() => {
8446
8649
  let startFrame = 0;
8447
8650
  const flattenedChildren = flattenChildren(props2.children);
8448
8651
  return Children.map(flattenedChildren, (child, i) => {
@@ -8505,7 +8708,9 @@ var Series = (props2) => {
8505
8708
  })
8506
8709
  });
8507
8710
  };
8508
- Series.Sequence = SeriesSequence;
8711
+ var Series = Object.assign(wrapInSchema(SeriesInner, sequenceSchemaDefaultLayoutNone), {
8712
+ Sequence: SeriesSequence
8713
+ });
8509
8714
  addSequenceStackTraces(Series);
8510
8715
  addSequenceStackTraces(SeriesSequence);
8511
8716
  var validateSpringDuration = (dur) => {
@@ -8973,14 +9178,14 @@ var VideoForRenderingForwardFunction = ({
8973
9178
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
8974
9179
  const videoConfig = useUnsafeVideoConfig();
8975
9180
  const videoRef = useRef23(null);
8976
- const sequenceContext = useContext35(SequenceContext);
9181
+ const sequenceContext = useContext36(SequenceContext);
8977
9182
  const mediaStartsAt = useMediaStartsAt();
8978
9183
  const environment = useRemotionEnvironment();
8979
9184
  const logLevel = useLogLevel();
8980
9185
  const mountTime = useMountTime();
8981
9186
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
8982
- const { registerRenderAsset, unregisterRenderAsset } = useContext35(RenderAssetManager);
8983
- const id = useMemo38(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
9187
+ const { registerRenderAsset, unregisterRenderAsset } = useContext36(RenderAssetManager);
9188
+ const id = useMemo37(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
8984
9189
  props2.src,
8985
9190
  sequenceContext?.cumulatedFrom,
8986
9191
  sequenceContext?.relativeFrom,
@@ -8995,7 +9200,7 @@ var VideoForRenderingForwardFunction = ({
8995
9200
  mediaVolume: 1
8996
9201
  });
8997
9202
  warnAboutTooHighVolume(volume);
8998
- useEffect19(() => {
9203
+ useEffect20(() => {
8999
9204
  if (!props2.src) {
9000
9205
  throw new Error("No src passed");
9001
9206
  }
@@ -9038,7 +9243,7 @@ var VideoForRenderingForwardFunction = ({
9038
9243
  useImperativeHandle9(ref, () => {
9039
9244
  return videoRef.current;
9040
9245
  }, []);
9041
- useEffect19(() => {
9246
+ useEffect20(() => {
9042
9247
  if (!window.remotion_videoEnabled) {
9043
9248
  return;
9044
9249
  }
@@ -9189,7 +9394,7 @@ var VideoForwardingFunction = (props2, ref) => {
9189
9394
  if (environment.isClientSideRendering) {
9190
9395
  throw new Error("<Html5Video> is not supported in @remotion/web-renderer. Use <Video> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");
9191
9396
  }
9192
- const { durations, setDurations } = useContext36(DurationsContext);
9397
+ const { durations, setDurations } = useContext37(DurationsContext);
9193
9398
  if (typeof ref === "string") {
9194
9399
  throw new Error("string refs are not supported");
9195
9400
  }
@@ -9456,6 +9661,20 @@ var TeamCardsLayout = () => {
9456
9661
 
9457
9662
  // src/components/experts/experts-icons.tsx
9458
9663
  import { jsx as jsx40 } from "react/jsx-runtime";
9664
+ var DiscordLogo = () => {
9665
+ return /* @__PURE__ */ jsx40("svg", {
9666
+ xmlns: "http://www.w3.org/2000/svg",
9667
+ viewBox: "0 0 24 24",
9668
+ style: {
9669
+ width: 30,
9670
+ marginRight: 10
9671
+ },
9672
+ children: /* @__PURE__ */ jsx40("path", {
9673
+ fill: "white",
9674
+ d: "M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"
9675
+ })
9676
+ });
9677
+ };
9459
9678
  var PersonalWebsite = () => {
9460
9679
  return /* @__PURE__ */ jsx40("svg", {
9461
9680
  xmlns: "http://www.w3.org/2000/svg",
@@ -9609,6 +9828,13 @@ var ExpertCard = ({ expert, Link }) => {
9609
9828
  target: "_blank",
9610
9829
  href: `mailto:${expert.email}`,
9611
9830
  children: /* @__PURE__ */ jsx41(EmailLogo, {})
9831
+ }) : null,
9832
+ expert.discord ? /* @__PURE__ */ jsx41("a", {
9833
+ className: "no-underline text-inherit",
9834
+ target: "_blank",
9835
+ href: `https://discord.com/users/${expert.discord.userId}`,
9836
+ title: `@${expert.discord.username} on Discord`,
9837
+ children: /* @__PURE__ */ jsx41(DiscordLogo, {})
9612
9838
  }) : null
9613
9839
  ]
9614
9840
  })
@@ -9618,7 +9844,7 @@ var ExpertCard = ({ expert, Link }) => {
9618
9844
  });
9619
9845
  };
9620
9846
  var ExpertsPageContent = ({ Link }) => {
9621
- const expertsInRandomOrder = useMemo39(() => {
9847
+ const expertsInRandomOrder = useMemo38(() => {
9622
9848
  if (typeof window === "undefined") {
9623
9849
  return [];
9624
9850
  }
@@ -11061,7 +11287,7 @@ var getDefaultConfig = () => {
11061
11287
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
11062
11288
 
11063
11289
  // ../design/dist/esm/index.mjs
11064
- import React33, { useEffect as useEffect20, useMemo as useMemo42, useState as useState23 } from "react";
11290
+ import React33, { useEffect as useEffect21, useMemo as useMemo41, useState as useState23 } from "react";
11065
11291
 
11066
11292
  // ../paths/dist/esm/index.mjs
11067
11293
  var cutLInstruction = ({
@@ -13827,7 +14053,7 @@ var PathInternals = {
13827
14053
  };
13828
14054
 
13829
14055
  // ../shapes/dist/esm/index.mjs
13830
- import React3, { useMemo as useMemo41 } from "react";
14056
+ import React3, { useMemo as useMemo40 } from "react";
13831
14057
  import { version } from "react-dom";
13832
14058
  import { jsx as jsx42, jsxs as jsxs5 } from "react/jsx-runtime";
13833
14059
  import { jsx as jsx210 } from "react/jsx-runtime";
@@ -13858,13 +14084,13 @@ var RenderSvg = ({
13858
14084
  instructions,
13859
14085
  ...props
13860
14086
  }) => {
13861
- const actualStyle = useMemo41(() => {
14087
+ const actualStyle = useMemo40(() => {
13862
14088
  return {
13863
14089
  overflow: "visible",
13864
14090
  ...style ?? {}
13865
14091
  };
13866
14092
  }, [style]);
13867
- const actualPathStyle = useMemo41(() => {
14093
+ const actualPathStyle = useMemo40(() => {
13868
14094
  return {
13869
14095
  transformBox: "fill-box",
13870
14096
  ...pathStyle ?? {}
@@ -15425,10 +15651,10 @@ import { jsx as jsx152 } from "react/jsx-runtime";
15425
15651
  import * as React122 from "react";
15426
15652
  import { jsx as jsx162 } from "react/jsx-runtime";
15427
15653
  import * as React16 from "react";
15428
- import * as React13 from "react";
15654
+ import * as React132 from "react";
15429
15655
  import * as ReactDOM from "react-dom";
15430
15656
  import { jsx as jsx172 } from "react/jsx-runtime";
15431
- import * as React142 from "react";
15657
+ import * as React14 from "react";
15432
15658
  import * as React152 from "react";
15433
15659
  import { jsx as jsx182 } from "react/jsx-runtime";
15434
15660
  import * as React172 from "react";
@@ -15655,8 +15881,8 @@ var useHoverTransforms = (ref, disabled) => {
15655
15881
  progress: 0,
15656
15882
  isActive: false
15657
15883
  });
15658
- const eventTarget = useMemo42(() => new EventTarget, []);
15659
- useEffect20(() => {
15884
+ const eventTarget = useMemo41(() => new EventTarget, []);
15885
+ useEffect21(() => {
15660
15886
  if (disabled) {
15661
15887
  eventTarget.dispatchEvent(new Event("disabled"));
15662
15888
  } else {
@@ -15803,7 +16029,7 @@ var getAngle = (ref, coordinates) => {
15803
16029
  var lastCoordinates = null;
15804
16030
  var useMousePosition = (ref) => {
15805
16031
  const [angle, setAngle] = useState23(getAngle(ref.current, lastCoordinates));
15806
- useEffect20(() => {
16032
+ useEffect21(() => {
15807
16033
  const element = ref.current;
15808
16034
  if (!element) {
15809
16035
  return;
@@ -16467,7 +16693,7 @@ var NODES = [
16467
16693
  "ul"
16468
16694
  ];
16469
16695
  var Primitive = NODES.reduce((primitive, node) => {
16470
- const Node2 = React13.forwardRef((props, forwardedRef) => {
16696
+ const Node2 = React132.forwardRef((props, forwardedRef) => {
16471
16697
  const { asChild, ...primitiveProps } = props;
16472
16698
  const Comp = asChild ? Slot2 : node;
16473
16699
  if (typeof window !== "undefined") {
@@ -16483,11 +16709,11 @@ function dispatchDiscreteCustomEvent(target, event) {
16483
16709
  ReactDOM.flushSync(() => target.dispatchEvent(event));
16484
16710
  }
16485
16711
  function useCallbackRef(callback) {
16486
- const callbackRef = React142.useRef(callback);
16487
- React142.useEffect(() => {
16712
+ const callbackRef = React14.useRef(callback);
16713
+ React14.useEffect(() => {
16488
16714
  callbackRef.current = callback;
16489
16715
  });
16490
- return React142.useMemo(() => (...args) => callbackRef.current?.(...args), []);
16716
+ return React14.useMemo(() => (...args) => callbackRef.current?.(...args), []);
16491
16717
  }
16492
16718
  function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {
16493
16719
  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);
@@ -22102,7 +22328,7 @@ var Triangle2 = (props) => {
22102
22328
  };
22103
22329
 
22104
22330
  // src/components/homepage/FreePricing.tsx
22105
- import React53, { useCallback as useCallback33, useMemo as useMemo51 } from "react";
22331
+ import React53, { useCallback as useCallback33, useMemo as useMemo50 } from "react";
22106
22332
 
22107
22333
  // ../../node_modules/.bun/tailwind-merge@2.5.2/node_modules/tailwind-merge/dist/bundle-mjs.mjs
22108
22334
  var CLASS_PART_SEPARATOR2 = "-";
@@ -23759,14 +23985,14 @@ var CompanyPricing = () => {
23759
23985
  }, []);
23760
23986
  const creatorsPrice = creatorsSelected ? devSeatCount * SEAT_PRICE : 0;
23761
23987
  const automatorsPrice = automatorsSelected ? Math.ceil(cloudRenders / 1000) * RENDER_UNIT_PRICE : 0;
23762
- const totalPrice = useMemo51(() => {
23988
+ const totalPrice = useMemo50(() => {
23763
23989
  const basePrice = creatorsPrice + automatorsPrice;
23764
23990
  if (automatorsSelected) {
23765
23991
  return Math.max(100, basePrice);
23766
23992
  }
23767
23993
  return basePrice;
23768
23994
  }, [creatorsPrice, automatorsPrice, automatorsSelected]);
23769
- const totalPriceString = useMemo51(() => {
23995
+ const totalPriceString = useMemo50(() => {
23770
23996
  return formatPrice(totalPrice);
23771
23997
  }, [formatPrice, totalPrice]);
23772
23998
  const showMinimumMessage = automatorsSelected && creatorsPrice + automatorsPrice < 100;
@@ -24039,7 +24265,7 @@ var Pricing = () => {
24039
24265
  };
24040
24266
 
24041
24267
  // src/components/homepage/BackgroundAnimation.tsx
24042
- import { useEffect as useEffect41 } from "react";
24268
+ import { useEffect as useEffect40 } from "react";
24043
24269
  import { jsx as jsx49, jsxs as jsxs10 } from "react/jsx-runtime";
24044
24270
  "use client";
24045
24271
  var rx = 0.2;
@@ -24065,7 +24291,7 @@ var BackgroundAnimation = () => {
24065
24291
  }
24066
24292
  }
24067
24293
  `;
24068
- useEffect41(() => {
24294
+ useEffect40(() => {
24069
24295
  const _style = document.createElement("style");
24070
24296
  _style.innerHTML = css;
24071
24297
  document.head.appendChild(_style);
@@ -24471,16 +24697,16 @@ var CommunityStats_default = CommunityStats;
24471
24697
  import { jsx as jsx56, jsxs as jsxs13 } from "react/jsx-runtime";
24472
24698
  import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment11 } from "react/jsx-runtime";
24473
24699
  import React56 from "react";
24474
- import { useContext as useContext210, useEffect as useEffect42, useState as useState40 } from "react";
24475
- import { useContext as useContext43, useLayoutEffect as useLayoutEffect17 } from "react";
24700
+ import { useContext as useContext210, useEffect as useEffect41, useState as useState40 } from "react";
24701
+ import { useContext as useContext44, useLayoutEffect as useLayoutEffect17 } from "react";
24476
24702
  import { jsx as jsx313 } from "react/jsx-runtime";
24477
24703
  import { useCallback as useCallback34, useRef as useRef42 } from "react";
24478
- import { useEffect as useEffect24, useState as useState24 } from "react";
24704
+ import { useEffect as useEffect210, useState as useState24 } from "react";
24479
24705
  import { useLayoutEffect as useLayoutEffect23 } from "react";
24480
- import { useContext as useContext44, useEffect as useEffect52, useRef as useRef52 } from "react";
24706
+ import { useContext as useContext45, useEffect as useEffect52, useRef as useRef52 } from "react";
24481
24707
  import { useEffect as useEffect310, useRef as useRef310 } from "react";
24482
- import { useCallback as useCallback24, useContext as useContext38, useMemo as useMemo52, useRef as useRef26, useState as useState310 } from "react";
24483
- import { useEffect as useEffect43, useRef as useRef43 } from "react";
24708
+ import { useCallback as useCallback24, useContext as useContext39, useMemo as useMemo51, useRef as useRef26, useState as useState310 } from "react";
24709
+ import { useEffect as useEffect42, useRef as useRef43 } from "react";
24484
24710
  import { useCallback as useCallback35, useEffect as useEffect62, useMemo as useMemo212, useState as useState42 } from "react";
24485
24711
  import {
24486
24712
  forwardRef as forwardRef210,
@@ -24509,10 +24735,10 @@ import { jsx as jsx55 } from "react/jsx-runtime";
24509
24735
  import { useCallback as useCallback82, useEffect as useEffect112, useMemo as useMemo92, useRef as useRef92, useState as useState102 } from "react";
24510
24736
  import { jsx as jsx64 } from "react/jsx-runtime";
24511
24737
  import { useCallback as useCallback52, useMemo as useMemo410, useRef as useRef62, useState as useState62 } from "react";
24512
- import React54, { useCallback as useCallback42, useMemo as useMemo310, useState as useState52 } from "react";
24738
+ import React54, { useCallback as useCallback42, useMemo as useMemo39, useState as useState52 } from "react";
24513
24739
  import { jsx as jsx74, jsxs as jsxs33 } from "react/jsx-runtime";
24514
24740
  import { jsx as jsx84, jsxs as jsxs43 } from "react/jsx-runtime";
24515
- import { useCallback as useCallback62, useEffect as useEffect92, useMemo as useMemo53, useState as useState82 } from "react";
24741
+ import { useCallback as useCallback62, useEffect as useEffect92, useMemo as useMemo52, useState as useState82 } from "react";
24516
24742
  import { useEffect as useEffect83, useRef as useRef72, useState as useState72 } from "react";
24517
24743
  import { jsx as jsx94, jsxs as jsxs53 } from "react/jsx-runtime";
24518
24744
  import { useCallback as useCallback72, useEffect as useEffect102, useMemo as useMemo62, useRef as useRef82, useState as useState92 } from "react";
@@ -25321,7 +25547,7 @@ import {
25321
25547
  useRef as useRef142,
25322
25548
  useState as useState142
25323
25549
  } from "react";
25324
- import React132, {
25550
+ import React133, {
25325
25551
  forwardRef as forwardRef34,
25326
25552
  Suspense as Suspense22,
25327
25553
  useCallback as useCallback132,
@@ -25765,7 +25991,7 @@ class ThumbnailEmitter {
25765
25991
  };
25766
25992
  }
25767
25993
  var useBufferStateEmitter = (emitter) => {
25768
- const bufferManager = useContext43(Internals.BufferingContextReact);
25994
+ const bufferManager = useContext44(Internals.BufferingContextReact);
25769
25995
  if (!bufferManager) {
25770
25996
  throw new Error("BufferingContextReact not found");
25771
25997
  }
@@ -25790,7 +26016,7 @@ var PlayerEmitterProvider = ({ children, currentPlaybackRate }) => {
25790
26016
  if (!bufferManager) {
25791
26017
  throw new Error("BufferingContextReact not found");
25792
26018
  }
25793
- useEffect42(() => {
26019
+ useEffect41(() => {
25794
26020
  if (currentPlaybackRate) {
25795
26021
  emitter.dispatchRateChange(currentPlaybackRate);
25796
26022
  }
@@ -25803,7 +26029,7 @@ var PlayerEmitterProvider = ({ children, currentPlaybackRate }) => {
25803
26029
  };
25804
26030
  var useHoverState = (ref, hideControlsWhenPointerDoesntMove) => {
25805
26031
  const [hovered, setHovered] = useState24(false);
25806
- useEffect24(() => {
26032
+ useEffect210(() => {
25807
26033
  const { current } = ref;
25808
26034
  if (!current) {
25809
26035
  return;
@@ -25848,21 +26074,21 @@ var usePlayer = () => {
25848
26074
  const playStart = useRef26(frame);
25849
26075
  const setFrame = Internals.Timeline.useTimelineSetFrame();
25850
26076
  const setTimelinePosition = Internals.Timeline.useTimelineSetFrame();
25851
- const audioContext = useContext38(Internals.SharedAudioContext);
25852
- const audioTagsContext = useContext38(Internals.SharedAudioTagsContext);
26077
+ const audioContext = useContext39(Internals.SharedAudioContext);
26078
+ const audioTagsContext = useContext39(Internals.SharedAudioTagsContext);
25853
26079
  const { audioAndVideoTags } = Internals.useTimelineContext();
25854
26080
  const frameRef = useRef26(frame);
25855
26081
  frameRef.current = frame;
25856
26082
  const video = Internals.useVideo();
25857
26083
  const config = Internals.useUnsafeVideoConfig();
25858
- const emitter = useContext38(PlayerEventEmitterContext);
26084
+ const emitter = useContext39(PlayerEventEmitterContext);
25859
26085
  const lastFrame = (config?.durationInFrames ?? 1) - 1;
25860
26086
  const isLastFrame = frame === lastFrame;
25861
26087
  const isFirstFrame = frame === 0;
25862
26088
  if (!emitter) {
25863
26089
  throw new TypeError("Expected Player event emitter context");
25864
26090
  }
25865
- const bufferingContext = useContext38(Internals.BufferingContextReact);
26091
+ const bufferingContext = useContext39(Internals.BufferingContextReact);
25866
26092
  if (!bufferingContext) {
25867
26093
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
25868
26094
  }
@@ -25978,7 +26204,7 @@ var usePlayer = () => {
25978
26204
  const isBuffering = useCallback24(() => {
25979
26205
  return buffering.current;
25980
26206
  }, [buffering]);
25981
- const returnValue = useMemo52(() => {
26207
+ const returnValue = useMemo51(() => {
25982
26208
  return {
25983
26209
  frameBack,
25984
26210
  frameForward,
@@ -26164,7 +26390,7 @@ var getIsBackgrounded = () => {
26164
26390
  };
26165
26391
  var useIsBackgrounded = () => {
26166
26392
  const isBackgrounded = useRef43(getIsBackgrounded());
26167
- useEffect43(() => {
26393
+ useEffect42(() => {
26168
26394
  const onVisibilityChange = () => {
26169
26395
  isBackgrounded.current = getIsBackgrounded();
26170
26396
  };
@@ -26209,12 +26435,11 @@ var usePlayback = ({
26209
26435
  const frame = Internals.Timeline.useTimelinePosition();
26210
26436
  const { playing, pause, emitter, isPlaying } = usePlayer();
26211
26437
  const setFrame = Internals.Timeline.useTimelineSetFrame();
26212
- const sharedAudioContext = useContext44(Internals.SharedAudioContext);
26438
+ const sharedAudioContext = useContext45(Internals.SharedAudioContext);
26213
26439
  const logLevel = Internals.useLogLevel();
26214
- const timelineContext = Internals.useTimelineContext();
26215
26440
  const isBackgroundedRef = useIsBackgrounded();
26216
26441
  const lastTimeUpdateTimestamp = useRef52(0);
26217
- const context = useContext44(Internals.BufferingContextReact);
26442
+ const context = useContext45(Internals.BufferingContextReact);
26218
26443
  if (!context) {
26219
26444
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
26220
26445
  }
@@ -26237,19 +26462,13 @@ var usePlayback = ({
26237
26462
  audioContext: sharedAudioContext.audioContext,
26238
26463
  audioSyncAnchor: sharedAudioContext.audioSyncAnchor,
26239
26464
  absoluteTimeInSeconds: frame / config.fps,
26240
- globalPlaybackRate: timelineContext.playbackRate,
26465
+ globalPlaybackRate: playbackRate,
26241
26466
  logLevel
26242
26467
  });
26243
26468
  if (changed) {
26244
26469
  sharedAudioContext.audioSyncAnchorEmitter.dispatch("changed");
26245
26470
  }
26246
- }, [
26247
- config,
26248
- frame,
26249
- logLevel,
26250
- sharedAudioContext,
26251
- timelineContext.playbackRate
26252
- ]);
26471
+ }, [config, frame, logLevel, playbackRate, sharedAudioContext]);
26253
26472
  useEffect52(() => {
26254
26473
  if (!config) {
26255
26474
  return;
@@ -26283,7 +26502,9 @@ var usePlayback = ({
26283
26502
  sharedAudioContext?.suspend?.();
26284
26503
  return;
26285
26504
  }
26286
- sharedAudioContext?.resume?.();
26505
+ if (!muted) {
26506
+ sharedAudioContext?.resume?.();
26507
+ }
26287
26508
  const time = performance.now() - startedTime;
26288
26509
  const actualLastFrame = outFrame ?? config.durationInFrames - 1;
26289
26510
  const actualFirstFrame = inFrame ?? 0;
@@ -26312,7 +26533,7 @@ var usePlayback = ({
26312
26533
  };
26313
26534
  const queueNextFrame = () => {
26314
26535
  const getIsResumingAudioContext = sharedAudioContext?.getIsResumingAudioContext?.() ?? null;
26315
- if (getIsResumingAudioContext !== null) {
26536
+ if (getIsResumingAudioContext !== null && !muted) {
26316
26537
  getIsResumingAudioContext.then(() => {
26317
26538
  if (!sharedAudioContext?.audioContext) {
26318
26539
  return;
@@ -26324,7 +26545,7 @@ var usePlayback = ({
26324
26545
  audioContext: sharedAudioContext.audioContext,
26325
26546
  audioSyncAnchor: sharedAudioContext.audioSyncAnchor,
26326
26547
  absoluteTimeInSeconds: getCurrentFrame() / config.fps,
26327
- globalPlaybackRate: timelineContext.playbackRate,
26548
+ globalPlaybackRate: playbackRate,
26328
26549
  logLevel
26329
26550
  });
26330
26551
  startedTime = performance.now();
@@ -26381,7 +26602,6 @@ var usePlayback = ({
26381
26602
  context,
26382
26603
  isPlaying,
26383
26604
  sharedAudioContext,
26384
- timelineContext.playbackRate,
26385
26605
  logLevel,
26386
26606
  muted
26387
26607
  ]);
@@ -26656,7 +26876,7 @@ var DefaultVolumeSlider = ({
26656
26876
  inputRef,
26657
26877
  setVolume
26658
26878
  }) => {
26659
- const sliderContainer = useMemo310(() => {
26879
+ const sliderContainer = useMemo39(() => {
26660
26880
  const paddingLeft = 5;
26661
26881
  const common = {
26662
26882
  paddingLeft,
@@ -26681,7 +26901,7 @@ var DefaultVolumeSlider = ({
26681
26901
  const onVolumeChange = useCallback42((e) => {
26682
26902
  setVolume(parseFloat(e.target.value));
26683
26903
  }, [setVolume]);
26684
- const inputStyle = useMemo310(() => {
26904
+ const inputStyle = useMemo39(() => {
26685
26905
  const commonStyle = {
26686
26906
  WebkitAppearance: "none",
26687
26907
  backgroundColor: "rgba(255, 255, 255, 0.5)",
@@ -26901,7 +27121,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
26901
27121
  setHovered(false);
26902
27122
  }, []);
26903
27123
  const isFocused = keyboardSelectedRate === rate;
26904
- const actualStyle = useMemo53(() => {
27124
+ const actualStyle = useMemo52(() => {
26905
27125
  return {
26906
27126
  ...rateDiv,
26907
27127
  backgroundColor: hovered || isFocused ? "#eee" : "transparent"
@@ -26924,7 +27144,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
26924
27144
  }, rate);
26925
27145
  };
26926
27146
  var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
26927
- const { setPlaybackRate, playbackRate } = Internals.useTimelineContext();
27147
+ const { setPlaybackRate, playbackRate } = Internals.usePlaybackRate();
26928
27148
  const [keyboardSelectedRate, setKeyboardSelectedRate] = useState82(playbackRate);
26929
27149
  useEffect92(() => {
26930
27150
  const listener = (e) => {
@@ -26968,7 +27188,7 @@ var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
26968
27188
  setPlaybackRate(rate);
26969
27189
  setIsComponentVisible(false);
26970
27190
  }, [setIsComponentVisible, setPlaybackRate]);
26971
- const playbackPopup = useMemo53(() => {
27191
+ const playbackPopup = useMemo52(() => {
26972
27192
  return {
26973
27193
  position: "absolute",
26974
27194
  right: 0,
@@ -27026,7 +27246,7 @@ var button = {
27026
27246
  };
27027
27247
  var PlaybackrateControl = ({ playbackRates, canvasSize }) => {
27028
27248
  const { ref, isComponentVisible, setIsComponentVisible } = useComponentVisible(false);
27029
- const { playbackRate } = Internals.useTimelineContext();
27249
+ const { playbackRate } = Internals.usePlaybackRate();
27030
27250
  const onClick = useCallback62((e) => {
27031
27251
  e.stopPropagation();
27032
27252
  e.preventDefault();
@@ -28143,6 +28363,7 @@ var PLAYER_COMP_ID = "player-comp";
28143
28363
  var SharedPlayerContexts = ({
28144
28364
  children,
28145
28365
  timelineContext,
28366
+ playbackRateContext,
28146
28367
  fps,
28147
28368
  compositionHeight,
28148
28369
  compositionWidth,
@@ -28243,23 +28464,26 @@ var SharedPlayerContexts = ({
28243
28464
  children: /* @__PURE__ */ jsx133(Internals.CanUseRemotionHooksProvider, {
28244
28465
  children: /* @__PURE__ */ jsx133(Internals.AbsoluteTimeContext.Provider, {
28245
28466
  value: timelineContext,
28246
- children: /* @__PURE__ */ jsx133(Internals.TimelineContext.Provider, {
28247
- value: timelineContext,
28248
- children: /* @__PURE__ */ jsx133(Internals.CompositionManager.Provider, {
28249
- value: compositionManagerContext,
28250
- children: /* @__PURE__ */ jsx133(Internals.PrefetchProvider, {
28251
- children: /* @__PURE__ */ jsx133(Internals.DurationsContextProvider, {
28252
- children: /* @__PURE__ */ jsx133(Internals.MediaVolumeContext.Provider, {
28253
- value: mediaVolumeContextValue,
28254
- children: /* @__PURE__ */ jsx133(Internals.SetMediaVolumeContext.Provider, {
28255
- value: setMediaVolumeContextValue,
28256
- children: /* @__PURE__ */ jsx133(Internals.BufferingProvider, {
28257
- children: /* @__PURE__ */ jsx133(Internals.SharedAudioContextProvider, {
28258
- audioLatencyHint,
28259
- audioEnabled,
28260
- children: /* @__PURE__ */ jsx133(Internals.SharedAudioTagsContextProvider, {
28261
- numberOfAudioTags: numberOfSharedAudioTags,
28262
- children
28467
+ children: /* @__PURE__ */ jsx133(Internals.PlaybackRateContext.Provider, {
28468
+ value: playbackRateContext,
28469
+ children: /* @__PURE__ */ jsx133(Internals.TimelineContext.Provider, {
28470
+ value: timelineContext,
28471
+ children: /* @__PURE__ */ jsx133(Internals.CompositionManager.Provider, {
28472
+ value: compositionManagerContext,
28473
+ children: /* @__PURE__ */ jsx133(Internals.PrefetchProvider, {
28474
+ children: /* @__PURE__ */ jsx133(Internals.DurationsContextProvider, {
28475
+ children: /* @__PURE__ */ jsx133(Internals.MediaVolumeContext.Provider, {
28476
+ value: mediaVolumeContextValue,
28477
+ children: /* @__PURE__ */ jsx133(Internals.SetMediaVolumeContext.Provider, {
28478
+ value: setMediaVolumeContextValue,
28479
+ children: /* @__PURE__ */ jsx133(Internals.BufferingProvider, {
28480
+ children: /* @__PURE__ */ jsx133(Internals.SharedAudioContextProvider, {
28481
+ audioLatencyHint,
28482
+ audioEnabled,
28483
+ children: /* @__PURE__ */ jsx133(Internals.SharedAudioTagsContextProvider, {
28484
+ numberOfAudioTags: numberOfSharedAudioTags,
28485
+ children
28486
+ })
28263
28487
  })
28264
28488
  })
28265
28489
  })
@@ -28531,14 +28755,16 @@ var PlayerFn = ({
28531
28755
  frame,
28532
28756
  playing,
28533
28757
  rootId,
28534
- playbackRate: currentPlaybackRate,
28535
28758
  imperativePlaying,
28536
- setPlaybackRate: (rate) => {
28537
- setCurrentPlaybackRate(rate);
28538
- },
28539
28759
  audioAndVideoTags
28540
28760
  };
28541
- }, [frame, currentPlaybackRate, playing, rootId]);
28761
+ }, [frame, playing, rootId]);
28762
+ const playbackRateContextValue = useMemo142(() => {
28763
+ return {
28764
+ playbackRate: currentPlaybackRate,
28765
+ setPlaybackRate: setCurrentPlaybackRate
28766
+ };
28767
+ }, [currentPlaybackRate]);
28542
28768
  const setTimelineContextValue = useMemo142(() => {
28543
28769
  return {
28544
28770
  setFrame,
@@ -28559,6 +28785,7 @@ var PlayerFn = ({
28559
28785
  return /* @__PURE__ */ jsx143(Internals.IsPlayerContextProvider, {
28560
28786
  children: /* @__PURE__ */ jsx143(SharedPlayerContexts, {
28561
28787
  timelineContext: timelineContextValue,
28788
+ playbackRateContext: playbackRateContextValue,
28562
28789
  component,
28563
28790
  compositionHeight,
28564
28791
  compositionWidth,
@@ -28636,7 +28863,7 @@ var useThumbnail = () => {
28636
28863
  }, [emitter]);
28637
28864
  return returnValue;
28638
28865
  };
28639
- var reactVersion2 = React132.version.split(".")[0];
28866
+ var reactVersion2 = React133.version.split(".")[0];
28640
28867
  if (reactVersion2 === "0") {
28641
28868
  throw new Error(`Version ${reactVersion2} of "react" is not supported by Remotion`);
28642
28869
  }
@@ -28790,14 +29017,18 @@ var ThumbnailFn = ({
28790
29017
  imperativePlaying: {
28791
29018
  current: false
28792
29019
  },
28793
- playbackRate: 1,
28794
- setPlaybackRate: () => {
28795
- throw new Error("thumbnail");
28796
- },
28797
29020
  audioAndVideoTags: { current: [] }
28798
29021
  };
28799
29022
  return value;
28800
29023
  }, [frameToDisplay, thumbnailId]);
29024
+ const playbackRateContext = useMemo172(() => {
29025
+ return {
29026
+ playbackRate: 1,
29027
+ setPlaybackRate: () => {
29028
+ throw new Error("thumbnail");
29029
+ }
29030
+ };
29031
+ }, []);
28801
29032
  useImperativeHandle42(ref, () => rootRef.current, []);
28802
29033
  const Component = Internals.useLazyComponent({
28803
29034
  compProps: componentProps,
@@ -28811,6 +29042,7 @@ var ThumbnailFn = ({
28811
29042
  return /* @__PURE__ */ jsx163(Internals.IsPlayerContextProvider, {
28812
29043
  children: /* @__PURE__ */ jsx163(SharedPlayerContexts, {
28813
29044
  timelineContext: timelineState,
29045
+ playbackRateContext,
28814
29046
  component: Component,
28815
29047
  compositionHeight,
28816
29048
  compositionWidth,
@@ -28845,8 +29077,8 @@ var Thumbnail = forward2(ThumbnailFn);
28845
29077
  // src/components/homepage/Demo/index.tsx
28846
29078
  import {
28847
29079
  useCallback as useCallback49,
28848
- useEffect as useEffect58,
28849
- useMemo as useMemo66,
29080
+ useEffect as useEffect57,
29081
+ useMemo as useMemo64,
28850
29082
  useRef as useRef53,
28851
29083
  useState as useState56
28852
29084
  } from "react";
@@ -29597,7 +29829,7 @@ var UNDERLAY_RED = curriedTransparentize$1(0.9, RED);
29597
29829
  var BLUE_TEXT = curriedDarken$1(0.3, "#42e9f5");
29598
29830
 
29599
29831
  // src/components/homepage/layout/use-color-mode.tsx
29600
- import React57, { useContext as useContext45, useMemo as useMemo54 } from "react";
29832
+ import React57, { useContext as useContext46, useMemo as useMemo53 } from "react";
29601
29833
  import { jsx as jsx57 } from "react/jsx-runtime";
29602
29834
  var Context = React57.createContext(undefined);
29603
29835
  var ColorModeProvider = ({
@@ -29605,7 +29837,7 @@ var ColorModeProvider = ({
29605
29837
  colorMode,
29606
29838
  setColorMode
29607
29839
  }) => {
29608
- const value = useMemo54(() => {
29840
+ const value = useMemo53(() => {
29609
29841
  return { colorMode, setColorMode };
29610
29842
  }, [colorMode, setColorMode]);
29611
29843
  return /* @__PURE__ */ jsx57(Context.Provider, {
@@ -29614,7 +29846,7 @@ var ColorModeProvider = ({
29614
29846
  });
29615
29847
  };
29616
29848
  function useColorMode() {
29617
- const context = useContext45(Context);
29849
+ const context = useContext46(Context);
29618
29850
  if (context === null || context === undefined) {
29619
29851
  throw new Error("ColorModeProvider");
29620
29852
  }
@@ -29623,14 +29855,14 @@ function useColorMode() {
29623
29855
 
29624
29856
  // ../media/dist/esm/index.mjs
29625
29857
  import { useState as useState312 } from "react";
29626
- import { useMemo as useMemo312 } from "react";
29627
- import { useContext as useContext212, useEffect as useEffect44, useMemo as useMemo56, useRef as useRef44, useState as useState41 } from "react";
29858
+ import { useMemo as useMemo311 } from "react";
29859
+ import { useContext as useContext212, useEffect as useEffect43, useMemo as useMemo55, useRef as useRef44, useState as useState41 } from "react";
29628
29860
  import { ALL_FORMATS, Input as Input2, UrlSource } from "mediabunny";
29629
29861
  import { AudioBufferSink, InputDisposedError } from "mediabunny";
29630
29862
  import { CanvasSink } from "mediabunny";
29631
- import { useContext as useContext47, useLayoutEffect as useLayoutEffect18 } from "react";
29863
+ import { useContext as useContext48, useLayoutEffect as useLayoutEffect18 } from "react";
29632
29864
  import { jsx as jsx58 } from "react/jsx-runtime";
29633
- import { useContext as useContext310, useLayoutEffect as useLayoutEffect24, useMemo as useMemo213, useState as useState210 } from "react";
29865
+ import { useContext as useContext311, useLayoutEffect as useLayoutEffect24, useMemo as useMemo213, useState as useState210 } from "react";
29634
29866
  import React211 from "react";
29635
29867
  import {
29636
29868
  ALL_FORMATS as ALL_FORMATS2,
@@ -29646,8 +29878,8 @@ import { jsx as jsx216 } from "react/jsx-runtime";
29646
29878
  import { jsx as jsx315 } from "react/jsx-runtime";
29647
29879
  import { useMemo as useMemo63, useState as useState63 } from "react";
29648
29880
  import {
29649
- useContext as useContext46,
29650
- useEffect as useEffect210,
29881
+ useContext as useContext47,
29882
+ useEffect as useEffect212,
29651
29883
  useLayoutEffect as useLayoutEffect34,
29652
29884
  useMemo as useMemo412,
29653
29885
  useRef as useRef210,
@@ -29657,7 +29889,7 @@ import { jsx as jsx412 } from "react/jsx-runtime";
29657
29889
  import {
29658
29890
  useContext as useContext53,
29659
29891
  useLayoutEffect as useLayoutEffect43,
29660
- useMemo as useMemo55,
29892
+ useMemo as useMemo54,
29661
29893
  useRef as useRef312,
29662
29894
  useState as useState53
29663
29895
  } from "react";
@@ -30452,65 +30684,90 @@ var makeNonceManager = () => {
30452
30684
  createAsyncOperation
30453
30685
  };
30454
30686
  };
30687
+ var BUFFER_SIZE = 3;
30455
30688
  var canvasesAheadOfTime = (videoSink, startTimestamp) => {
30456
30689
  const iterator = videoSink.canvases(startTimestamp);
30457
- let inFlight = iterator.next();
30458
- let resolved = null;
30459
- const trackResolution = () => {
30460
- const captured = inFlight;
30461
- captured.then((result) => {
30462
- if (captured === inFlight) {
30463
- resolved = result;
30690
+ const buffer = [];
30691
+ let chaining = false;
30692
+ let reachedEnd = false;
30693
+ let closed = false;
30694
+ let inFlight = null;
30695
+ const closeFrame = (frame) => {
30696
+ frame.close?.();
30697
+ };
30698
+ const fillNext = () => {
30699
+ if (chaining || reachedEnd || closed)
30700
+ return;
30701
+ if (buffer.length >= BUFFER_SIZE)
30702
+ return;
30703
+ chaining = true;
30704
+ const slot = { promise: iterator.next(), resolved: null };
30705
+ buffer.push(slot);
30706
+ inFlight = slot.promise.then((result) => {
30707
+ slot.resolved = result;
30708
+ chaining = false;
30709
+ inFlight = null;
30710
+ if (result.done) {
30711
+ reachedEnd = true;
30712
+ return;
30713
+ }
30714
+ if (closed) {
30715
+ closeFrame(result.value);
30716
+ return;
30464
30717
  }
30718
+ fillNext();
30465
30719
  }, () => {
30466
- return;
30720
+ chaining = false;
30721
+ inFlight = null;
30467
30722
  });
30468
30723
  };
30469
- trackResolution();
30470
- const advance2 = () => {
30471
- inFlight = iterator.next();
30472
- resolved = null;
30473
- trackResolution();
30474
- };
30724
+ fillNext();
30475
30725
  const next = () => {
30476
- if (resolved) {
30477
- if (resolved.done) {
30726
+ const slot = buffer.shift();
30727
+ fillNext();
30728
+ if (!slot) {
30729
+ if (reachedEnd || closed) {
30730
+ return { type: "ready", frame: null };
30731
+ }
30732
+ const chain = inFlight;
30733
+ return {
30734
+ type: "pending",
30735
+ wait: async () => {
30736
+ await chain;
30737
+ const next2 = buffer.shift();
30738
+ fillNext();
30739
+ if (!next2)
30740
+ return null;
30741
+ if (next2.resolved) {
30742
+ return next2.resolved.done ? null : next2.resolved.value;
30743
+ }
30744
+ const result = await next2.promise;
30745
+ return result.done ? null : result.value;
30746
+ }
30747
+ };
30748
+ }
30749
+ if (slot.resolved) {
30750
+ if (slot.resolved.done) {
30478
30751
  return { type: "ready", frame: null };
30479
30752
  }
30480
- const frame = resolved.value;
30481
- advance2();
30482
- return { type: "ready", frame };
30753
+ return { type: "ready", frame: slot.resolved.value };
30483
30754
  }
30484
- const captured = inFlight;
30485
30755
  return {
30486
30756
  type: "pending",
30487
30757
  wait: async () => {
30488
- const result = await captured;
30489
- if (captured === inFlight && !result.done) {
30490
- advance2();
30491
- }
30758
+ const result = await slot.promise;
30492
30759
  return result.done ? null : result.value;
30493
30760
  }
30494
30761
  };
30495
30762
  };
30496
- const closeFrame = (frame) => {
30497
- frame.close?.();
30498
- };
30499
30763
  const closeIterator = async () => {
30500
- if (resolved) {
30501
- if (!resolved.done) {
30502
- closeFrame(resolved.value);
30764
+ closed = true;
30765
+ for (const slot of buffer) {
30766
+ if (slot.resolved && !slot.resolved.done) {
30767
+ closeFrame(slot.resolved.value);
30503
30768
  }
30504
- } else {
30505
- const captured = inFlight;
30506
- captured.then((result) => {
30507
- if (!result.done) {
30508
- closeFrame(result.value);
30509
- }
30510
- }, () => {
30511
- return;
30512
- });
30513
30769
  }
30770
+ buffer.length = 0;
30514
30771
  await iterator.return();
30515
30772
  };
30516
30773
  return { next, closeIterator };
@@ -31374,7 +31631,7 @@ var useCommonEffects = ({
31374
31631
  logLevel,
31375
31632
  label: label3
31376
31633
  }) => {
31377
- const sharedAudioContext = useContext47(Internals.SharedAudioContext);
31634
+ const sharedAudioContext = useContext48(Internals.SharedAudioContext);
31378
31635
  useLayoutEffect18(() => {
31379
31636
  const mediaPlayer = mediaPlayerRef.current;
31380
31637
  if (!mediaPlayer)
@@ -31536,8 +31793,7 @@ var AudioForPreviewAssertedShowing = ({
31536
31793
  const [mediaPlayerReady, setMediaPlayerReady] = useState41(false);
31537
31794
  const [shouldFallbackToNativeAudio, setShouldFallbackToNativeAudio] = useState41(false);
31538
31795
  const [playing] = Timeline.usePlayingState();
31539
- const timelineContext = Internals.useTimelineContext();
31540
- const globalPlaybackRate = timelineContext.playbackRate;
31796
+ const { playbackRate: globalPlaybackRate } = Internals.usePlaybackRate();
31541
31797
  const sharedAudioContext = useContext212(SharedAudioContext2);
31542
31798
  const buffer = useBufferState();
31543
31799
  const [mediaMuted] = useMediaMutedState2();
@@ -31600,7 +31856,7 @@ var AudioForPreviewAssertedShowing = ({
31600
31856
  logLevel,
31601
31857
  label: "AudioForPreview"
31602
31858
  });
31603
- useEffect44(() => {
31859
+ useEffect43(() => {
31604
31860
  if (!sharedAudioContext)
31605
31861
  return;
31606
31862
  if (!sharedAudioContext.audioContext)
@@ -31788,7 +32044,7 @@ var AudioForPreview2 = ({
31788
32044
  const frame = useCurrentFrame();
31789
32045
  const videoConfig = useVideoConfig();
31790
32046
  const currentTime = frame / videoConfig.fps;
31791
- const showShow = useMemo56(() => {
32047
+ const showShow = useMemo55(() => {
31792
32048
  return getTimeInSeconds({
31793
32049
  unloopedTimeInSeconds: currentTime,
31794
32050
  playbackRate,
@@ -33651,7 +33907,7 @@ var AudioForRendering2 = ({
33651
33907
  const frame = useCurrentFrame();
33652
33908
  const absoluteFrame = Internals.useTimelinePosition();
33653
33909
  const videoConfig = Internals.useUnsafeVideoConfig();
33654
- const { registerRenderAsset, unregisterRenderAsset } = useContext310(Internals.RenderAssetManager);
33910
+ const { registerRenderAsset, unregisterRenderAsset } = useContext311(Internals.RenderAssetManager);
33655
33911
  const startsAt = Internals.useMediaStartsAt();
33656
33912
  const environment = useRemotionEnvironment();
33657
33913
  if (!videoConfig) {
@@ -33663,7 +33919,7 @@ var AudioForRendering2 = ({
33663
33919
  const { fps } = videoConfig;
33664
33920
  const { delayRender: delayRender2, continueRender } = useDelayRender();
33665
33921
  const [replaceWithHtml5Audio, setReplaceWithHtml5Audio] = useState210(false);
33666
- const sequenceContext = useContext310(Internals.SequenceContext);
33922
+ const sequenceContext = useContext311(Internals.SequenceContext);
33667
33923
  const id = useMemo213(() => `media-audio-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
33668
33924
  src,
33669
33925
  sequenceContext?.cumulatedFrom,
@@ -33876,7 +34132,7 @@ var AudioInner = (props) => {
33876
34132
  loop: props.loop ?? false
33877
34133
  });
33878
34134
  const [mediaDurationInSeconds, setMediaDurationInSeconds] = useState312(null);
33879
- const loopDisplay = useMemo312(() => getLoopDisplay({
34135
+ const loopDisplay = useMemo311(() => getLoopDisplay({
33880
34136
  loop: props.loop ?? false,
33881
34137
  mediaDurationInSeconds,
33882
34138
  playbackRate: props.playbackRate ?? 1,
@@ -33893,7 +34149,7 @@ var AudioInner = (props) => {
33893
34149
  sequenceDurationInFrames,
33894
34150
  videoConfig.fps
33895
34151
  ]);
33896
- const isMedia = useMemo312(() => ({
34152
+ const isMedia = useMemo311(() => ({
33897
34153
  type: "audio",
33898
34154
  data: basicInfo
33899
34155
  }), [basicInfo]);
@@ -34015,9 +34271,8 @@ var VideoForPreviewAssertedShowing = ({
34015
34271
  const [mediaPlayerReady, setMediaPlayerReady] = useState43(false);
34016
34272
  const [shouldFallbackToNativeVideo, setShouldFallbackToNativeVideo] = useState43(false);
34017
34273
  const [playing] = Timeline2.usePlayingState();
34018
- const timelineContext = Internals.useTimelineContext();
34019
- const globalPlaybackRate = timelineContext.playbackRate;
34020
- const sharedAudioContext = useContext46(SharedAudioContext22);
34274
+ const { playbackRate: globalPlaybackRate } = Internals.usePlaybackRate();
34275
+ const sharedAudioContext = useContext47(SharedAudioContext22);
34021
34276
  const buffer = useBufferState();
34022
34277
  const [mediaMuted] = useMediaMutedState22();
34023
34278
  const [mediaVolume] = useMediaVolumeState22();
@@ -34038,7 +34293,7 @@ var VideoForPreviewAssertedShowing = ({
34038
34293
  effectChainStateRef.current = effectChainState;
34039
34294
  const frameRef = useRef210(frame);
34040
34295
  frameRef.current = frame;
34041
- const parentSequence = useContext46(SequenceContext22);
34296
+ const parentSequence = useContext47(SequenceContext22);
34042
34297
  const isPremounting = Boolean(parentSequence?.premounting);
34043
34298
  const isPostmounting = Boolean(parentSequence?.postmounting);
34044
34299
  const sequenceOffset = ((parentSequence?.cumulatedFrom ?? 0) + (parentSequence?.relativeFrom ?? 0)) / videoConfig.fps;
@@ -34046,7 +34301,7 @@ var VideoForPreviewAssertedShowing = ({
34046
34301
  const currentTimeRef = useRef210(currentTime);
34047
34302
  currentTimeRef.current = currentTime;
34048
34303
  const preloadedSrc = usePreload22(src);
34049
- const buffering = useContext46(Internals.BufferingContextReact);
34304
+ const buffering = useContext47(Internals.BufferingContextReact);
34050
34305
  if (!buffering) {
34051
34306
  throw new Error("useMediaPlayback must be used inside a <BufferingContext>");
34052
34307
  }
@@ -34098,7 +34353,7 @@ var VideoForPreviewAssertedShowing = ({
34098
34353
  cacheVideoFrame(src, canvas);
34099
34354
  };
34100
34355
  }, [_experimentalInitiallyDrawCachedFrame, src]);
34101
- useEffect210(() => {
34356
+ useEffect212(() => {
34102
34357
  if (!sharedAudioContext)
34103
34358
  return;
34104
34359
  if (!sharedAudioContext.audioContext)
@@ -34378,7 +34633,7 @@ var VideoForRendering2 = ({
34378
34633
  const { registerRenderAsset, unregisterRenderAsset } = useContext53(Internals.RenderAssetManager);
34379
34634
  const startsAt = Internals.useMediaStartsAt();
34380
34635
  const sequenceContext = useContext53(Internals.SequenceContext);
34381
- const id = useMemo55(() => `media-video-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
34636
+ const id = useMemo54(() => `media-video-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
34382
34637
  src,
34383
34638
  sequenceContext?.cumulatedFrom,
34384
34639
  sequenceContext?.relativeFrom,
@@ -34571,10 +34826,10 @@ var VideoForRendering2 = ({
34571
34826
  credentials
34572
34827
  ]);
34573
34828
  warnAboutObjectFitInStyleOrClassName({ style: style2, className: className2, logLevel });
34574
- const classNameValue = useMemo55(() => {
34829
+ const classNameValue = useMemo54(() => {
34575
34830
  return [Internals.OBJECTFIT_CONTAIN_CLASS_NAME, className2].filter(Internals.truthy).join(" ");
34576
34831
  }, [className2]);
34577
- const styleWithObjectFit = useMemo55(() => {
34832
+ const styleWithObjectFit = useMemo54(() => {
34578
34833
  return {
34579
34834
  ...style2,
34580
34835
  objectFit: objectFitProp
@@ -34659,34 +34914,7 @@ var videoSchema = {
34659
34914
  description: "Playback Rate"
34660
34915
  },
34661
34916
  loop: { type: "boolean", default: false, description: "Loop" },
34662
- "style.translate": {
34663
- type: "translate",
34664
- step: 1,
34665
- default: "0px 0px",
34666
- description: "Position"
34667
- },
34668
- "style.scale": {
34669
- type: "number",
34670
- min: 0.05,
34671
- max: 100,
34672
- step: 0.01,
34673
- default: 1,
34674
- description: "Scale"
34675
- },
34676
- "style.rotate": {
34677
- type: "rotation",
34678
- step: 1,
34679
- default: "0deg",
34680
- description: "Rotation"
34681
- },
34682
- "style.opacity": {
34683
- type: "number",
34684
- min: 0,
34685
- max: 1,
34686
- step: 0.01,
34687
- default: 1,
34688
- description: "Opacity"
34689
- }
34917
+ ...Internals.sequenceStyleSchema
34690
34918
  };
34691
34919
  var InnerVideo = ({
34692
34920
  src,
@@ -34915,13 +35143,13 @@ var Video = Internals.wrapInSchema(VideoInner, videoSchema);
34915
35143
  Internals.addSequenceStackTraces(Video);
34916
35144
 
34917
35145
  // src/components/homepage/Demo/Comp.tsx
34918
- import { useCallback as useCallback41, useEffect as useEffect50, useMemo as useMemo59, useState as useState48 } from "react";
35146
+ import { useCallback as useCallback41, useEffect as useEffect49, useMemo as useMemo58, useState as useState48 } from "react";
34919
35147
 
34920
35148
  // src/components/homepage/Demo/Cards.tsx
34921
35149
  import {
34922
35150
  createRef as createRef4,
34923
35151
  useCallback as useCallback40,
34924
- useEffect as useEffect49,
35152
+ useEffect as useEffect48,
34925
35153
  useRef as useRef49,
34926
35154
  useState as useState47
34927
35155
  } from "react";
@@ -35289,14 +35517,14 @@ var CurrentCountry = ({ theme, countryPaths, countryLabel }) => {
35289
35517
  import {
35290
35518
  forwardRef as forwardRef35,
35291
35519
  useCallback as useCallback39,
35292
- useEffect as useEffect48,
35520
+ useEffect as useEffect47,
35293
35521
  useImperativeHandle as useImperativeHandle12,
35294
35522
  useRef as useRef48
35295
35523
  } from "react";
35296
35524
 
35297
35525
  // ../lottie/dist/esm/index.mjs
35298
35526
  import lottie from "lottie-web";
35299
- import { useEffect as useEffect46, useRef as useRef47, useState as useState44 } from "react";
35527
+ import { useEffect as useEffect45, useRef as useRef47, useState as useState44 } from "react";
35300
35528
  import { jsx as jsx69 } from "react/jsx-runtime";
35301
35529
  var getLottieMetadata = (animationData) => {
35302
35530
  const width2 = animationData.w;
@@ -35372,14 +35600,14 @@ var Lottie = ({
35372
35600
  onAnimationLoadedRef.current = onAnimationLoaded;
35373
35601
  const { delayRender: delayRender2, continueRender } = useDelayRender();
35374
35602
  const [handle] = useState44(() => delayRender2("Waiting for Lottie animation to load"));
35375
- useEffect46(() => {
35603
+ useEffect45(() => {
35376
35604
  return () => {
35377
35605
  continueRender(handle);
35378
35606
  };
35379
35607
  }, [handle, continueRender]);
35380
35608
  const frame = useCurrentFrame();
35381
35609
  currentFrameRef.current = frame;
35382
- useEffect46(() => {
35610
+ useEffect45(() => {
35383
35611
  if (!containerRef.current) {
35384
35612
  return;
35385
35613
  }
@@ -35424,17 +35652,17 @@ var Lottie = ({
35424
35652
  renderer,
35425
35653
  continueRender
35426
35654
  ]);
35427
- useEffect46(() => {
35655
+ useEffect45(() => {
35428
35656
  if (animationRef.current && direction) {
35429
35657
  animationRef.current.setDirection(direction === "backward" ? -1 : 1);
35430
35658
  }
35431
35659
  }, [direction]);
35432
- useEffect46(() => {
35660
+ useEffect45(() => {
35433
35661
  if (animationRef.current && playbackRate) {
35434
35662
  animationRef.current.setSpeed(playbackRate);
35435
35663
  }
35436
35664
  }, [playbackRate]);
35437
- useEffect46(() => {
35665
+ useEffect45(() => {
35438
35666
  if (!animationRef.current) {
35439
35667
  return;
35440
35668
  }
@@ -35467,14 +35695,14 @@ var Lottie = ({
35467
35695
  };
35468
35696
 
35469
35697
  // src/components/homepage/Demo/DisplayedEmoji.tsx
35470
- import { useEffect as useEffect47, useMemo as useMemo57, useState as useState46 } from "react";
35698
+ import { useEffect as useEffect46, useMemo as useMemo56, useState as useState46 } from "react";
35471
35699
  import { jsx as jsx70 } from "react/jsx-runtime";
35472
35700
  var DisplayedEmoji = ({ emoji }) => {
35473
35701
  const [data, setData] = useState46(null);
35474
35702
  const { durationInFrames, fps } = useVideoConfig();
35475
35703
  const [browser, setBrowser] = useState46(typeof document !== "undefined");
35476
35704
  const { delayRender: delayRender2, continueRender, cancelRender: cancelRender2 } = useDelayRender();
35477
- const src = useMemo57(() => {
35705
+ const src = useMemo56(() => {
35478
35706
  if (emoji === "melting") {
35479
35707
  return "https://fonts.gstatic.com/s/e/notoemoji/latest/1fae0/lottie.json";
35480
35708
  }
@@ -35487,7 +35715,7 @@ var DisplayedEmoji = ({ emoji }) => {
35487
35715
  throw new Error("Unknown emoji");
35488
35716
  }, [emoji]);
35489
35717
  const [handle] = useState46(() => delayRender2("Loading emojis!"));
35490
- useEffect47(() => {
35718
+ useEffect46(() => {
35491
35719
  fetch(src).then((res) => res.json()).then((json) => {
35492
35720
  setData({
35493
35721
  duration: getLottieMetadata(json)?.durationInSeconds,
@@ -35498,7 +35726,7 @@ var DisplayedEmoji = ({ emoji }) => {
35498
35726
  cancelRender2(err);
35499
35727
  });
35500
35728
  }, [handle, src, continueRender, cancelRender2]);
35501
- useEffect47(() => {
35729
+ useEffect46(() => {
35502
35730
  if (typeof document !== "undefined") {
35503
35731
  setBrowser(true);
35504
35732
  }
@@ -35594,7 +35822,7 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
35594
35822
  transforms: transforms.current
35595
35823
  });
35596
35824
  }, []);
35597
- useEffect48(() => {
35825
+ useEffect47(() => {
35598
35826
  if (!ref1.current || !ref2.current || !ref3.current) {
35599
35827
  return;
35600
35828
  }
@@ -35611,7 +35839,7 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
35611
35839
  onRight
35612
35840
  };
35613
35841
  }, [onLeft, onRight]);
35614
- useEffect48(() => {
35842
+ useEffect47(() => {
35615
35843
  if (!ref1.current || !ref2.current || !ref3.current) {
35616
35844
  return;
35617
35845
  }
@@ -35901,7 +36129,7 @@ var Temperature = ({ theme, city, temperatureInCelsius }) => {
35901
36129
  };
35902
36130
 
35903
36131
  // src/components/homepage/Demo/TrendingRepos.tsx
35904
- import { useMemo as useMemo58 } from "react";
36132
+ import { useMemo as useMemo57 } from "react";
35905
36133
  import { jsx as jsx80, jsxs as jsxs21 } from "react/jsx-runtime";
35906
36134
  var TrendingRepoItem = ({ repo, theme, number }) => {
35907
36135
  const frame = useCurrentFrame();
@@ -35914,7 +36142,7 @@ var TrendingRepoItem = ({ repo, theme, number }) => {
35914
36142
  },
35915
36143
  delay: number * 10 + 20
35916
36144
  });
35917
- const item = useMemo58(() => {
36145
+ const item = useMemo57(() => {
35918
36146
  return {
35919
36147
  lineHeight: 1.1,
35920
36148
  fontFamily: "GTPlanar",
@@ -36026,7 +36254,7 @@ var Cards = ({
36026
36254
  const positions = useRef49(getInitialPositions());
36027
36255
  const shouldBePositions = useRef49(getInitialPositions());
36028
36256
  const { isRendering } = useRemotionEnvironment();
36029
- useEffect49(() => {
36257
+ useEffect48(() => {
36030
36258
  const { current } = container4;
36031
36259
  if (!current) {
36032
36260
  return;
@@ -36121,7 +36349,7 @@ var HomepageVideoComp = ({
36121
36349
  setRerenders(rerenders + 1);
36122
36350
  updateCardOrder(newIndices);
36123
36351
  }, [rerenders, updateCardOrder]);
36124
- const emoji = useMemo59(() => {
36352
+ const emoji = useMemo58(() => {
36125
36353
  if ((emojiIndex + 1e4 * 3) % 3 === 1) {
36126
36354
  return "melting";
36127
36355
  }
@@ -36130,7 +36358,7 @@ var HomepageVideoComp = ({
36130
36358
  }
36131
36359
  return "partying-face";
36132
36360
  }, [emojiIndex]);
36133
- const audioSrc = useMemo59(() => {
36361
+ const audioSrc = useMemo58(() => {
36134
36362
  if (emoji === "fire") {
36135
36363
  return fireAudio;
36136
36364
  }
@@ -36139,7 +36367,7 @@ var HomepageVideoComp = ({
36139
36367
  }
36140
36368
  return sadAudio;
36141
36369
  }, [emoji]);
36142
- useEffect50(() => {
36370
+ useEffect49(() => {
36143
36371
  const a = prefetch(fireAudio);
36144
36372
  const b = prefetch(partyHornAudio);
36145
36373
  const c = prefetch(sadAudio);
@@ -36215,7 +36443,7 @@ import {
36215
36443
  import { BufferTarget, StreamTarget } from "mediabunny";
36216
36444
 
36217
36445
  // ../core/dist/esm/version.mjs
36218
- var VERSION2 = "4.0.456";
36446
+ var VERSION2 = "4.0.458";
36219
36447
 
36220
36448
  // ../web-renderer/dist/esm/index.mjs
36221
36449
  import { AudioSample, VideoSample } from "mediabunny";
@@ -37549,7 +37777,7 @@ var turnSvgIntoDrawable = (svg) => {
37549
37777
  svg.style.color = originalColor;
37550
37778
  return new Promise((resolve, reject) => {
37551
37779
  const image = new Image;
37552
- const url = `data:image/svg+xml;base64,${btoa(svgData)}`;
37780
+ const url = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgData)}`;
37553
37781
  image.onload = function() {
37554
37782
  resolve(image);
37555
37783
  };
@@ -40951,7 +41179,7 @@ var Progress = ({ progress }) => {
40951
41179
  };
40952
41180
 
40953
41181
  // src/components/homepage/Demo/Spinner.tsx
40954
- import { useMemo as useMemo60 } from "react";
41182
+ import { useMemo as useMemo59 } from "react";
40955
41183
  import { jsx as jsx95, jsxs as jsxs29, Fragment as Fragment14 } from "react/jsx-runtime";
40956
41184
  var viewBox2 = 100;
40957
41185
  var lines2 = 8;
@@ -40959,7 +41187,7 @@ var className2 = "__remotion_spinner_line";
40959
41187
  var remotionSpinnerAnimation = "__remotion_spinner_animation";
40960
41188
  var translated3 = "M 44 0 L 50 0 a 6 6 0 0 1 6 6 L 56 26 a 6 6 0 0 1 -6 6 L 50 32 a 6 6 0 0 1 -6 -6 L 44 6 a 6 6 0 0 1 6 -6 Z";
40961
41189
  var Spinner2 = ({ size: size4, duration }) => {
40962
- const style2 = useMemo60(() => {
41190
+ const style2 = useMemo59(() => {
40963
41191
  return {
40964
41192
  width: size4,
40965
41193
  height: size4
@@ -41221,13 +41449,13 @@ var DragAndDropNudge = () => {
41221
41449
  };
41222
41450
 
41223
41451
  // src/components/homepage/Demo/PlayerSeekBar.tsx
41224
- import { useCallback as useCallback46, useEffect as useEffect53, useMemo as useMemo64, useRef as useRef50, useState as useState51 } from "react";
41452
+ import { useCallback as useCallback46, useEffect as useEffect51, useMemo as useMemo61, useRef as useRef50, useState as useState51 } from "react";
41225
41453
 
41226
41454
  // src/components/homepage/layout/use-el-size.ts
41227
- import { useCallback as useCallback45, useEffect as useEffect51, useMemo as useMemo61, useState as useState50 } from "react";
41455
+ import { useCallback as useCallback45, useEffect as useEffect50, useMemo as useMemo60, useState as useState50 } from "react";
41228
41456
  var useElementSize2 = (ref) => {
41229
41457
  const [size4, setSize] = useState50(null);
41230
- const observer = useMemo61(() => {
41458
+ const observer = useMemo60(() => {
41231
41459
  if (typeof ResizeObserver === "undefined") {
41232
41460
  return;
41233
41461
  }
@@ -41248,7 +41476,7 @@ var useElementSize2 = (ref) => {
41248
41476
  height: rect[0].height
41249
41477
  });
41250
41478
  }, [ref]);
41251
- useEffect51(() => {
41479
+ useEffect50(() => {
41252
41480
  updateSize();
41253
41481
  if (!observer) {
41254
41482
  return;
@@ -41304,7 +41532,7 @@ var findBodyInWhichDivIsLocated2 = (div) => {
41304
41532
  };
41305
41533
  var useHoverState2 = (ref, hideControlsWhenPointerDoesntMove) => {
41306
41534
  const [hovered, setHovered] = useState51(false);
41307
- useEffect53(() => {
41535
+ useEffect51(() => {
41308
41536
  const { current } = ref;
41309
41537
  if (!current) {
41310
41538
  return;
@@ -41355,7 +41583,7 @@ var PlayerSeekBar2 = ({
41355
41583
  const size4 = useElementSize2(containerRef.current);
41356
41584
  const [playing, setPlaying] = useState51(false);
41357
41585
  const [frame, setFrame] = useState51(0);
41358
- useEffect53(() => {
41586
+ useEffect51(() => {
41359
41587
  const { current } = playerRef;
41360
41588
  if (!current) {
41361
41589
  return;
@@ -41368,7 +41596,7 @@ var PlayerSeekBar2 = ({
41368
41596
  current.removeEventListener("frameupdate", onFrameUpdate);
41369
41597
  };
41370
41598
  }, [playerRef]);
41371
- useEffect53(() => {
41599
+ useEffect51(() => {
41372
41600
  const { current } = playerRef;
41373
41601
  if (!current) {
41374
41602
  return;
@@ -41429,7 +41657,7 @@ var PlayerSeekBar2 = ({
41429
41657
  }
41430
41658
  onSeekEnd();
41431
41659
  }, [dragging, onSeekEnd, playerRef]);
41432
- useEffect53(() => {
41660
+ useEffect51(() => {
41433
41661
  if (!dragging.dragging) {
41434
41662
  return;
41435
41663
  }
@@ -41441,7 +41669,7 @@ var PlayerSeekBar2 = ({
41441
41669
  body.removeEventListener("pointerup", onPointerUp);
41442
41670
  };
41443
41671
  }, [dragging.dragging, onPointerMove, onPointerUp]);
41444
- const knobStyle = useMemo64(() => {
41672
+ const knobStyle = useMemo61(() => {
41445
41673
  return {
41446
41674
  height: KNOB_SIZE3,
41447
41675
  width: KNOB_SIZE3,
@@ -41455,7 +41683,7 @@ var PlayerSeekBar2 = ({
41455
41683
  transition: "opacity 0.s ease"
41456
41684
  };
41457
41685
  }, [barHovered, durationInFrames, frame, width2]);
41458
- const fillStyle = useMemo64(() => {
41686
+ const fillStyle = useMemo61(() => {
41459
41687
  return {
41460
41688
  height: BAR_HEIGHT3,
41461
41689
  backgroundColor: "var(--ifm-font-color-base)",
@@ -41464,7 +41692,7 @@ var PlayerSeekBar2 = ({
41464
41692
  borderRadius: BAR_HEIGHT3 / 2
41465
41693
  };
41466
41694
  }, [durationInFrames, frame, inFrame]);
41467
- const active = useMemo64(() => {
41695
+ const active = useMemo61(() => {
41468
41696
  return {
41469
41697
  height: BAR_HEIGHT3,
41470
41698
  backgroundColor: "var(--ifm-font-color-base)",
@@ -41499,7 +41727,7 @@ var PlayerSeekBar2 = ({
41499
41727
  };
41500
41728
 
41501
41729
  // src/components/homepage/Demo/PlayerVolume.tsx
41502
- import { useCallback as useCallback47, useEffect as useEffect55, useRef as useRef51, useState as useState54 } from "react";
41730
+ import { useCallback as useCallback47, useEffect as useEffect53, useRef as useRef51, useState as useState54 } from "react";
41503
41731
 
41504
41732
  // src/components/homepage/Demo/icons.tsx
41505
41733
  import { jsx as jsx101 } from "react/jsx-runtime";
@@ -41560,7 +41788,7 @@ var PlayerVolume = ({ playerRef }) => {
41560
41788
  const [muted, setIsMuted] = useState54(() => playerRef.current?.isMuted() ?? true);
41561
41789
  const [isHovered, setIsHovered] = useState54(false);
41562
41790
  const timerRef = useRef51(null);
41563
- useEffect55(() => {
41791
+ useEffect53(() => {
41564
41792
  const { current } = playerRef;
41565
41793
  if (!current) {
41566
41794
  return;
@@ -41573,7 +41801,7 @@ var PlayerVolume = ({ playerRef }) => {
41573
41801
  current.removeEventListener("mutechange", onMutedChange);
41574
41802
  };
41575
41803
  }, [playerRef]);
41576
- useEffect55(() => {
41804
+ useEffect53(() => {
41577
41805
  if (isHovered) {
41578
41806
  document.body.style.userSelect = "none";
41579
41807
  } else {
@@ -41618,7 +41846,7 @@ var PlayerVolume = ({ playerRef }) => {
41618
41846
  };
41619
41847
 
41620
41848
  // src/components/homepage/Demo/PlayPauseButton.tsx
41621
- import React71, { useCallback as useCallback48, useEffect as useEffect56 } from "react";
41849
+ import React71, { useCallback as useCallback48, useEffect as useEffect55 } from "react";
41622
41850
  import { jsx as jsx107 } from "react/jsx-runtime";
41623
41851
  var playerButtonStyle2 = {
41624
41852
  appearance: "none",
@@ -41636,7 +41864,7 @@ var playerButtonStyle2 = {
41636
41864
  };
41637
41865
  var PlayPauseButton = ({ playerRef }) => {
41638
41866
  const [playing, setPlaying] = React71.useState(true);
41639
- useEffect56(() => {
41867
+ useEffect55(() => {
41640
41868
  const { current } = playerRef;
41641
41869
  if (!current) {
41642
41870
  return;
@@ -41673,7 +41901,7 @@ var PlayPauseButton = ({ playerRef }) => {
41673
41901
  };
41674
41902
 
41675
41903
  // src/components/homepage/Demo/TimeDisplay.tsx
41676
- import React73, { useEffect as useEffect57 } from "react";
41904
+ import React73, { useEffect as useEffect56 } from "react";
41677
41905
  import { jsx as jsx108 } from "react/jsx-runtime";
41678
41906
  var formatTime2 = (timeInSeconds) => {
41679
41907
  const minutes = Math.floor(timeInSeconds / 60);
@@ -41682,7 +41910,7 @@ var formatTime2 = (timeInSeconds) => {
41682
41910
  };
41683
41911
  var TimeDisplay = ({ fps, playerRef }) => {
41684
41912
  const [time, setTime] = React73.useState(0);
41685
- useEffect57(() => {
41913
+ useEffect56(() => {
41686
41914
  const { current } = playerRef;
41687
41915
  if (!current) {
41688
41916
  return;
@@ -41853,7 +42081,7 @@ var Demo = () => {
41853
42081
  const [cardOrder, setCardOrder] = useState56([0, 1, 2, 3]);
41854
42082
  const [emojiIndex, setEmojiIndex] = useState56(0);
41855
42083
  const [error2, setError] = useState56(false);
41856
- useEffect58(() => {
42084
+ useEffect57(() => {
41857
42085
  getDataAndProps().then((d2) => {
41858
42086
  setData(d2);
41859
42087
  }).catch((err) => {
@@ -41861,7 +42089,7 @@ var Demo = () => {
41861
42089
  setError(true);
41862
42090
  });
41863
42091
  }, []);
41864
- useEffect58(() => {
42092
+ useEffect57(() => {
41865
42093
  const { current: playerRef } = ref;
41866
42094
  if (!playerRef || !data2) {
41867
42095
  return;
@@ -41877,7 +42105,7 @@ var Demo = () => {
41877
42105
  const updateCardOrder = useCallback49((newCardOrder) => {
41878
42106
  setCardOrder(newCardOrder);
41879
42107
  }, []);
41880
- const props = useMemo66(() => {
42108
+ const props = useMemo64(() => {
41881
42109
  return {
41882
42110
  theme: colorMode,
41883
42111
  onToggle: () => {
@@ -42006,16 +42234,16 @@ var ClearButton = (props) => {
42006
42234
 
42007
42235
  // src/components/homepage/MuxVideo.tsx
42008
42236
  import Hls2 from "hls.js";
42009
- import { forwardRef as forwardRef38, useEffect as useEffect60, useImperativeHandle as useImperativeHandle14, useRef as useRef56 } from "react";
42237
+ import { forwardRef as forwardRef38, useEffect as useEffect59, useImperativeHandle as useImperativeHandle14, useRef as useRef56 } from "react";
42010
42238
 
42011
42239
  // src/components/homepage/VideoPlayerWithControls.tsx
42012
42240
  import Hls from "hls.js";
42013
42241
  import"plyr/dist/plyr.css";
42014
- import { forwardRef as forwardRef37, useCallback as useCallback50, useEffect as useEffect59, useRef as useRef55, useState as useState57 } from "react";
42242
+ import { forwardRef as forwardRef37, useCallback as useCallback50, useEffect as useEffect58, useRef as useRef55, useState as useState57 } from "react";
42015
42243
  import { jsx as jsx116 } from "react/jsx-runtime";
42016
42244
  var useCombinedRefs = function(...refs) {
42017
42245
  const targetRef = useRef55(null);
42018
- useEffect59(() => {
42246
+ useEffect58(() => {
42019
42247
  refs.forEach((ref) => {
42020
42248
  if (!ref)
42021
42249
  return;
@@ -42044,12 +42272,12 @@ var VideoPlayerWithControls = forwardRef37(({ playbackId, poster, currentTime, o
42044
42272
  console.error("Error getting img dimensions", event);
42045
42273
  }
42046
42274
  }, [onLoaded, onSize]);
42047
- useEffect59(() => {
42275
+ useEffect58(() => {
42048
42276
  const img = new Image;
42049
42277
  img.onload = (evt) => onImageLoad(evt);
42050
42278
  img.src = poster;
42051
42279
  }, [onImageLoad, poster]);
42052
- useEffect59(() => {
42280
+ useEffect58(() => {
42053
42281
  const video = videoRef.current;
42054
42282
  const src = `https://stream.mux.com/${playbackId}.m3u8`;
42055
42283
  let hls;
@@ -42092,7 +42320,7 @@ var VideoPlayerWithControls = forwardRef37(({ playbackId, poster, currentTime, o
42092
42320
  }
42093
42321
  };
42094
42322
  }, [playbackId, playerInitTime, videoError, videoRef]);
42095
- useEffect59(() => {
42323
+ useEffect58(() => {
42096
42324
  const video = videoRef.current;
42097
42325
  if (currentTime && video) {
42098
42326
  video.currentTime = currentTime;
@@ -42119,7 +42347,7 @@ var MuxVideoForward = ({ muxId, ...props }, ref) => {
42119
42347
  const videoRef = useRef56(null);
42120
42348
  const vidUrl = getVideoToPlayUrl(muxId);
42121
42349
  useImperativeHandle14(ref, () => videoRef.current, []);
42122
- useEffect60(() => {
42350
+ useEffect59(() => {
42123
42351
  let hls;
42124
42352
  if (videoRef.current) {
42125
42353
  const { current } = videoRef;
@@ -42232,11 +42460,11 @@ var EditorStarterSection = () => {
42232
42460
  var EditorStarterSection_default = EditorStarterSection;
42233
42461
 
42234
42462
  // src/components/homepage/EvaluateRemotion.tsx
42235
- import { useEffect as useEffect61, useState as useState58 } from "react";
42463
+ import { useEffect as useEffect60, useState as useState58 } from "react";
42236
42464
  import { jsx as jsx119, jsxs as jsxs40 } from "react/jsx-runtime";
42237
42465
  var EvaluateRemotionSection = () => {
42238
42466
  const [dailyAvatars, setDailyAvatars] = useState58([]);
42239
- useEffect61(() => {
42467
+ useEffect60(() => {
42240
42468
  const avatars = experts.map((expert) => expert.image);
42241
42469
  const selectedAvatars = [];
42242
42470
  for (let i = 0;i < 3; i++) {
@@ -42333,7 +42561,7 @@ var EvaluateRemotionSection = () => {
42333
42561
  var EvaluateRemotion_default = EvaluateRemotionSection;
42334
42562
 
42335
42563
  // src/components/homepage/IfYouKnowReact.tsx
42336
- import { useEffect as useEffect63, useState as useState59 } from "react";
42564
+ import { useEffect as useEffect61, useState as useState59 } from "react";
42337
42565
  import { jsx as jsx120, jsxs as jsxs41 } from "react/jsx-runtime";
42338
42566
  var isWebkit = () => {
42339
42567
  if (typeof window === "undefined") {
@@ -42349,7 +42577,7 @@ var icon2 = {
42349
42577
  };
42350
42578
  var IfYouKnowReact = () => {
42351
42579
  const [vid, setVid] = useState59("/img/compose.webm");
42352
- useEffect63(() => {
42580
+ useEffect61(() => {
42353
42581
  if (isWebkit()) {
42354
42582
  setVid("/img/compose.mp4");
42355
42583
  }
@@ -42496,7 +42724,7 @@ var NewsletterButton = () => {
42496
42724
  };
42497
42725
 
42498
42726
  // src/components/homepage/ParameterizeAndEdit.tsx
42499
- import { useEffect as useEffect65, useRef as useRef57, useState as useState61 } from "react";
42727
+ import { useEffect as useEffect63, useRef as useRef57, useState as useState61 } from "react";
42500
42728
  import { jsx as jsx124, jsxs as jsxs46 } from "react/jsx-runtime";
42501
42729
  var icon3 = {
42502
42730
  height: 16,
@@ -42505,7 +42733,7 @@ var icon3 = {
42505
42733
  var ParameterizeAndEdit = () => {
42506
42734
  const ref = useRef57(null);
42507
42735
  const [vid, setVid] = useState61("/img/editing-vp9-chrome.webm");
42508
- useEffect65(() => {
42736
+ useEffect63(() => {
42509
42737
  if (isWebkit()) {
42510
42738
  setVid("/img/editing-safari.mp4");
42511
42739
  }
@@ -42619,7 +42847,7 @@ var ParameterizeAndEdit = () => {
42619
42847
  };
42620
42848
 
42621
42849
  // src/components/homepage/RealMp4Videos.tsx
42622
- import { useEffect as useEffect66, useRef as useRef58, useState as useState64 } from "react";
42850
+ import { useEffect as useEffect65, useRef as useRef58, useState as useState64 } from "react";
42623
42851
  import { jsx as jsx126, jsxs as jsxs47 } from "react/jsx-runtime";
42624
42852
  var icon4 = {
42625
42853
  height: 16,
@@ -42629,12 +42857,12 @@ var RealMP4Videos = () => {
42629
42857
  const ref = useRef58(null);
42630
42858
  const videoRef = useRef58(null);
42631
42859
  const [vid, setVid] = useState64("/img/render-progress.webm");
42632
- useEffect66(() => {
42860
+ useEffect65(() => {
42633
42861
  if (isWebkit()) {
42634
42862
  setVid("/img/render-progress.mp4");
42635
42863
  }
42636
42864
  }, []);
42637
- useEffect66(() => {
42865
+ useEffect65(() => {
42638
42866
  const { current } = ref;
42639
42867
  if (!current) {
42640
42868
  return;