@remotion/promo-pages 4.0.457 → 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 (296) hide show
  1. package/dist/Homepage.js +792 -583
  2. package/dist/design.js +433 -367
  3. package/dist/experts/experts-data.js +124 -2
  4. package/dist/experts.js +570 -361
  5. package/dist/homepage/Pricing.js +436 -370
  6. package/dist/prompts/PromptsGallery.js +437 -371
  7. package/dist/prompts/PromptsShow.js +435 -369
  8. package/dist/prompts/PromptsSubmit.js +435 -369
  9. package/dist/team.js +433 -367
  10. package/dist/template-modal-content.js +443 -377
  11. package/dist/templates.js +433 -367
  12. package/package.json +13 -13
  13. package/public/img/freelancers/huang-chi-chang.jpg +0 -0
  14. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/Homepage.css +0 -32
  15. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/Homepage.js +0 -42672
  16. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/design.js +0 -20460
  17. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/experts/experts-data.js +0 -740
  18. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/experts.js +0 -8778
  19. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/homepage/Pricing.js +0 -21875
  20. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsGallery.js +0 -20301
  21. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsShow.css +0 -2578
  22. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsShow.js +0 -40128
  23. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsSubmit.css +0 -2578
  24. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsSubmit.js +0 -40219
  25. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/prompt-types.js +0 -0
  26. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/team.js +0 -292
  27. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/template-modal-content.css +0 -32
  28. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/template-modal-content.js +0 -22044
  29. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/templates.js +0 -21306
  30. package/dist/cn.d.ts +0 -2
  31. package/dist/cn.js +0 -5
  32. package/dist/components/3DEngine/ButtonDemo.d.ts +0 -2
  33. package/dist/components/3DEngine/ButtonDemo.js +0 -43
  34. package/dist/components/3DEngine/Faces.d.ts +0 -5
  35. package/dist/components/3DEngine/Faces.js +0 -7
  36. package/dist/components/3DEngine/Outer.d.ts +0 -8
  37. package/dist/components/3DEngine/Outer.js +0 -56
  38. package/dist/components/3DEngine/Switch.d.ts +0 -4
  39. package/dist/components/3DEngine/Switch.js +0 -4
  40. package/dist/components/3DEngine/get-child-node-from.d.ts +0 -1
  41. package/dist/components/3DEngine/get-child-node-from.js +0 -14
  42. package/dist/components/3DEngine/hover-transforms.d.ts +0 -9
  43. package/dist/components/3DEngine/hover-transforms.js +0 -177
  44. package/dist/components/BackButton.d.ts +0 -6
  45. package/dist/components/BackButton.js +0 -9
  46. package/dist/components/CommandCopyButton.d.ts +0 -5
  47. package/dist/components/CommandCopyButton.js +0 -4
  48. package/dist/components/Homepage.d.ts +0 -6
  49. package/dist/components/Homepage.js +0 -20
  50. package/dist/components/ManageTeamMembers.d.ts +0 -2
  51. package/dist/components/ManageTeamMembers.js +0 -42
  52. package/dist/components/Spinner.d.ts +0 -3
  53. package/dist/components/Spinner.js +0 -4
  54. package/dist/components/TeamPicture.d.ts +0 -1
  55. package/dist/components/TeamPicture.js +0 -4
  56. package/dist/components/design.d.ts +0 -1
  57. package/dist/components/design.js +0 -33
  58. package/dist/components/experts/ExpertsPage.d.ts +0 -11
  59. package/dist/components/experts/ExpertsPage.js +0 -50
  60. package/dist/components/experts/experts-data.d.ts +0 -15
  61. package/dist/components/experts/experts-data.js +0 -276
  62. package/dist/components/experts/experts-icons.d.ts +0 -7
  63. package/dist/components/experts/experts-icons.js +0 -36
  64. package/dist/components/experts.d.ts +0 -3
  65. package/dist/components/experts.js +0 -2
  66. package/dist/components/homepage/BackgroundAnimation.d.ts +0 -2
  67. package/dist/components/homepage/BackgroundAnimation.js +0 -66
  68. package/dist/components/homepage/ChooseTemplate.d.ts +0 -2
  69. package/dist/components/homepage/ChooseTemplate.js +0 -25
  70. package/dist/components/homepage/CommunityStats.d.ts +0 -3
  71. package/dist/components/homepage/CommunityStats.js +0 -6
  72. package/dist/components/homepage/CommunityStatsItems.d.ts +0 -7
  73. package/dist/components/homepage/CommunityStatsItems.js +0 -58
  74. package/dist/components/homepage/Demo/Card.d.ts +0 -15
  75. package/dist/components/homepage/Demo/Card.js +0 -174
  76. package/dist/components/homepage/Demo/Cards.d.ts +0 -15
  77. package/dist/components/homepage/Demo/Cards.js +0 -57
  78. package/dist/components/homepage/Demo/Comp.d.ts +0 -38
  79. package/dist/components/homepage/Demo/Comp.js +0 -72
  80. package/dist/components/homepage/Demo/CurrentCountry.d.ts +0 -9
  81. package/dist/components/homepage/Demo/CurrentCountry.js +0 -48
  82. package/dist/components/homepage/Demo/DemoError.d.ts +0 -2
  83. package/dist/components/homepage/Demo/DemoError.js +0 -10
  84. package/dist/components/homepage/Demo/DemoErrorIcon.d.ts +0 -2
  85. package/dist/components/homepage/Demo/DemoErrorIcon.js +0 -16
  86. package/dist/components/homepage/Demo/DemoRender.d.ts +0 -33
  87. package/dist/components/homepage/Demo/DemoRender.js +0 -107
  88. package/dist/components/homepage/Demo/DigitWheel.d.ts +0 -9
  89. package/dist/components/homepage/Demo/DigitWheel.js +0 -94
  90. package/dist/components/homepage/Demo/DisplayedEmoji.d.ts +0 -5
  91. package/dist/components/homepage/Demo/DisplayedEmoji.js +0 -59
  92. package/dist/components/homepage/Demo/DoneCheckmark.d.ts +0 -2
  93. package/dist/components/homepage/Demo/DoneCheckmark.js +0 -20
  94. package/dist/components/homepage/Demo/DownloadNudge.d.ts +0 -2
  95. package/dist/components/homepage/Demo/DownloadNudge.js +0 -27
  96. package/dist/components/homepage/Demo/DragAndDropNudge.d.ts +0 -3
  97. package/dist/components/homepage/Demo/DragAndDropNudge.js +0 -26
  98. package/dist/components/homepage/Demo/EmojiCard.d.ts +0 -10
  99. package/dist/components/homepage/Demo/EmojiCard.js +0 -120
  100. package/dist/components/homepage/Demo/Minus.d.ts +0 -5
  101. package/dist/components/homepage/Demo/Minus.js +0 -11
  102. package/dist/components/homepage/Demo/PlayPauseButton.d.ts +0 -5
  103. package/dist/components/homepage/Demo/PlayPauseButton.js +0 -47
  104. package/dist/components/homepage/Demo/PlayerControls.d.ts +0 -8
  105. package/dist/components/homepage/Demo/PlayerControls.js +0 -15
  106. package/dist/components/homepage/Demo/PlayerSeekBar.d.ts +0 -11
  107. package/dist/components/homepage/Demo/PlayerSeekBar.js +0 -216
  108. package/dist/components/homepage/Demo/PlayerVolume.d.ts +0 -5
  109. package/dist/components/homepage/Demo/PlayerVolume.js +0 -53
  110. package/dist/components/homepage/Demo/Progress.d.ts +0 -4
  111. package/dist/components/homepage/Demo/Progress.js +0 -14
  112. package/dist/components/homepage/Demo/Spinner.d.ts +0 -5
  113. package/dist/components/homepage/Demo/Spinner.js +0 -37
  114. package/dist/components/homepage/Demo/Switcher.d.ts +0 -6
  115. package/dist/components/homepage/Demo/Switcher.js +0 -25
  116. package/dist/components/homepage/Demo/Temperature.d.ts +0 -6
  117. package/dist/components/homepage/Demo/Temperature.js +0 -21
  118. package/dist/components/homepage/Demo/TemperatureNumber.d.ts +0 -5
  119. package/dist/components/homepage/Demo/TemperatureNumber.js +0 -36
  120. package/dist/components/homepage/Demo/ThemeNudge.d.ts +0 -3
  121. package/dist/components/homepage/Demo/ThemeNudge.js +0 -35
  122. package/dist/components/homepage/Demo/TimeDisplay.d.ts +0 -6
  123. package/dist/components/homepage/Demo/TimeDisplay.js +0 -27
  124. package/dist/components/homepage/Demo/TrendingRepos.d.ts +0 -6
  125. package/dist/components/homepage/Demo/TrendingRepos.js +0 -65
  126. package/dist/components/homepage/Demo/icons.d.ts +0 -10
  127. package/dist/components/homepage/Demo/icons.js +0 -22
  128. package/dist/components/homepage/Demo/index.d.ts +0 -2
  129. package/dist/components/homepage/Demo/index.js +0 -95
  130. package/dist/components/homepage/Demo/math.d.ts +0 -10
  131. package/dist/components/homepage/Demo/math.js +0 -29
  132. package/dist/components/homepage/Demo/types.d.ts +0 -6
  133. package/dist/components/homepage/Demo/types.js +0 -0
  134. package/dist/components/homepage/EditorStarterSection.d.ts +0 -3
  135. package/dist/components/homepage/EditorStarterSection.js +0 -8
  136. package/dist/components/homepage/EvaluateRemotion.d.ts +0 -3
  137. package/dist/components/homepage/EvaluateRemotion.js +0 -21
  138. package/dist/components/homepage/FreePricing.d.ts +0 -4
  139. package/dist/components/homepage/FreePricing.js +0 -134
  140. package/dist/components/homepage/GetStartedStrip.d.ts +0 -2
  141. package/dist/components/homepage/GetStartedStrip.js +0 -14
  142. package/dist/components/homepage/GitHubButton.d.ts +0 -2
  143. package/dist/components/homepage/GitHubButton.js +0 -7
  144. package/dist/components/homepage/IconForTemplate.d.ts +0 -6
  145. package/dist/components/homepage/IconForTemplate.js +0 -105
  146. package/dist/components/homepage/IfYouKnowReact.d.ts +0 -3
  147. package/dist/components/homepage/IfYouKnowReact.js +0 -23
  148. package/dist/components/homepage/InfoTooltip.d.ts +0 -6
  149. package/dist/components/homepage/InfoTooltip.js +0 -6
  150. package/dist/components/homepage/MoreTemplatesButton.d.ts +0 -2
  151. package/dist/components/homepage/MoreTemplatesButton.js +0 -11
  152. package/dist/components/homepage/MuxVideo.d.ts +0 -7
  153. package/dist/components/homepage/MuxVideo.js +0 -45
  154. package/dist/components/homepage/NewsletterButton.d.ts +0 -2
  155. package/dist/components/homepage/NewsletterButton.js +0 -38
  156. package/dist/components/homepage/ParameterizeAndEdit.d.ts +0 -2
  157. package/dist/components/homepage/ParameterizeAndEdit.js +0 -22
  158. package/dist/components/homepage/Pricing.d.ts +0 -2
  159. package/dist/components/homepage/Pricing.js +0 -15
  160. package/dist/components/homepage/PricingBulletPoint.d.ts +0 -6
  161. package/dist/components/homepage/PricingBulletPoint.js +0 -19
  162. package/dist/components/homepage/RealMp4Videos.d.ts +0 -2
  163. package/dist/components/homepage/RealMp4Videos.js +0 -41
  164. package/dist/components/homepage/Spacer.d.ts +0 -2
  165. package/dist/components/homepage/Spacer.js +0 -4
  166. package/dist/components/homepage/TemplateIcon.d.ts +0 -5
  167. package/dist/components/homepage/TemplateIcon.js +0 -24
  168. package/dist/components/homepage/TextInput.d.ts +0 -7
  169. package/dist/components/homepage/TextInput.js +0 -34
  170. package/dist/components/homepage/TrustedByBanner.d.ts +0 -2
  171. package/dist/components/homepage/TrustedByBanner.js +0 -27
  172. package/dist/components/homepage/VideoApps.d.ts +0 -4
  173. package/dist/components/homepage/VideoApps.js +0 -72
  174. package/dist/components/homepage/VideoAppsShowcase.d.ts +0 -3
  175. package/dist/components/homepage/VideoAppsShowcase.js +0 -139
  176. package/dist/components/homepage/VideoAppsTitle.d.ts +0 -4
  177. package/dist/components/homepage/VideoAppsTitle.js +0 -4
  178. package/dist/components/homepage/VideoPlayerWithControls.d.ts +0 -20
  179. package/dist/components/homepage/VideoPlayerWithControls.js +0 -105
  180. package/dist/components/homepage/WriteInReact.d.ts +0 -2
  181. package/dist/components/homepage/WriteInReact.js +0 -10
  182. package/dist/components/homepage/YouAreHere.d.ts +0 -2
  183. package/dist/components/homepage/YouAreHere.js +0 -23
  184. package/dist/components/homepage/layout/Button.d.ts +0 -22
  185. package/dist/components/homepage/layout/Button.js +0 -30
  186. package/dist/components/homepage/layout/colors.d.ts +0 -13
  187. package/dist/components/homepage/layout/colors.js +0 -14
  188. package/dist/components/homepage/layout/use-color-mode.d.ts +0 -21
  189. package/dist/components/homepage/layout/use-color-mode.js +0 -22
  190. package/dist/components/homepage/layout/use-el-size.d.ts +0 -5
  191. package/dist/components/homepage/layout/use-el-size.js +0 -40
  192. package/dist/components/homepage/layout/use-mobile-layout.d.ts +0 -1
  193. package/dist/components/homepage/layout/use-mobile-layout.js +0 -6
  194. package/dist/components/icons/blank.d.ts +0 -3
  195. package/dist/components/icons/blank.js +0 -4
  196. package/dist/components/icons/brain.d.ts +0 -2
  197. package/dist/components/icons/brain.js +0 -4
  198. package/dist/components/icons/clone.d.ts +0 -2
  199. package/dist/components/icons/clone.js +0 -2
  200. package/dist/components/icons/code-hike.d.ts +0 -3
  201. package/dist/components/icons/code-hike.js +0 -4
  202. package/dist/components/icons/cubes.d.ts +0 -3
  203. package/dist/components/icons/cubes.js +0 -4
  204. package/dist/components/icons/editor.d.ts +0 -3
  205. package/dist/components/icons/editor.js +0 -4
  206. package/dist/components/icons/electron.d.ts +0 -4
  207. package/dist/components/icons/electron.js +0 -4
  208. package/dist/components/icons/js.d.ts +0 -3
  209. package/dist/components/icons/js.js +0 -4
  210. package/dist/components/icons/music.d.ts +0 -2
  211. package/dist/components/icons/music.js +0 -4
  212. package/dist/components/icons/next.d.ts +0 -4
  213. package/dist/components/icons/next.js +0 -4
  214. package/dist/components/icons/overlay.d.ts +0 -3
  215. package/dist/components/icons/overlay.js +0 -4
  216. package/dist/components/icons/prompt-to-video.d.ts +0 -2
  217. package/dist/components/icons/prompt-to-video.js +0 -4
  218. package/dist/components/icons/recorder.d.ts +0 -3
  219. package/dist/components/icons/recorder.js +0 -4
  220. package/dist/components/icons/remix.d.ts +0 -3
  221. package/dist/components/icons/remix.js +0 -4
  222. package/dist/components/icons/render-server.d.ts +0 -3
  223. package/dist/components/icons/render-server.js +0 -4
  224. package/dist/components/icons/skia.d.ts +0 -3
  225. package/dist/components/icons/skia.js +0 -4
  226. package/dist/components/icons/stargazer.d.ts +0 -3
  227. package/dist/components/icons/stargazer.js +0 -4
  228. package/dist/components/icons/still.d.ts +0 -3
  229. package/dist/components/icons/still.js +0 -4
  230. package/dist/components/icons/tailwind.d.ts +0 -3
  231. package/dist/components/icons/tailwind.js +0 -4
  232. package/dist/components/icons/tiktok.d.ts +0 -3
  233. package/dist/components/icons/tiktok.js +0 -4
  234. package/dist/components/icons/timeline.d.ts +0 -3
  235. package/dist/components/icons/timeline.js +0 -4
  236. package/dist/components/icons/ts.d.ts +0 -3
  237. package/dist/components/icons/ts.js +0 -4
  238. package/dist/components/icons/undo.d.ts +0 -3
  239. package/dist/components/icons/undo.js +0 -2
  240. package/dist/components/icons/vercel.d.ts +0 -4
  241. package/dist/components/icons/vercel.js +0 -4
  242. package/dist/components/icons/waveform.d.ts +0 -3
  243. package/dist/components/icons/waveform.js +0 -4
  244. package/dist/components/prompts/CardLikeButton.d.ts +0 -5
  245. package/dist/components/prompts/CardLikeButton.js +0 -49
  246. package/dist/components/prompts/ClipboardIcon.d.ts +0 -5
  247. package/dist/components/prompts/ClipboardIcon.js +0 -4
  248. package/dist/components/prompts/CopyPromptButton.d.ts +0 -4
  249. package/dist/components/prompts/CopyPromptButton.js +0 -13
  250. package/dist/components/prompts/LikeButton.d.ts +0 -5
  251. package/dist/components/prompts/LikeButton.js +0 -49
  252. package/dist/components/prompts/MuxPlayer.d.ts +0 -8
  253. package/dist/components/prompts/MuxPlayer.js +0 -21
  254. package/dist/components/prompts/NewBackButton.d.ts +0 -5
  255. package/dist/components/prompts/NewBackButton.js +0 -8
  256. package/dist/components/prompts/Page.d.ts +0 -8
  257. package/dist/components/prompts/Page.js +0 -7
  258. package/dist/components/prompts/PromptsGallery.d.ts +0 -7
  259. package/dist/components/prompts/PromptsGallery.js +0 -60
  260. package/dist/components/prompts/PromptsShow.d.ts +0 -5
  261. package/dist/components/prompts/PromptsShow.js +0 -17
  262. package/dist/components/prompts/PromptsSubmit.d.ts +0 -2
  263. package/dist/components/prompts/PromptsSubmit.js +0 -173
  264. package/dist/components/prompts/config.d.ts +0 -1
  265. package/dist/components/prompts/config.js +0 -1
  266. package/dist/components/prompts/prompt-helpers.d.ts +0 -8
  267. package/dist/components/prompts/prompt-helpers.js +0 -76
  268. package/dist/components/prompts/prompt-types.d.ts +0 -14
  269. package/dist/components/prompts/prompt-types.js +0 -0
  270. package/dist/components/prompts/use-heart-animation.d.ts +0 -5
  271. package/dist/components/prompts/use-heart-animation.js +0 -29
  272. package/dist/components/team/TeamCards.d.ts +0 -6
  273. package/dist/components/team/TeamCards.js +0 -19
  274. package/dist/components/team/TitleTeamCards.d.ts +0 -2
  275. package/dist/components/team/TitleTeamCards.js +0 -6
  276. package/dist/components/team/TrustSection.d.ts +0 -2
  277. package/dist/components/team/TrustSection.js +0 -59
  278. package/dist/components/team.d.ts +0 -3
  279. package/dist/components/team.js +0 -15
  280. package/dist/components/template-modal-content.d.ts +0 -5
  281. package/dist/components/template-modal-content.js +0 -73
  282. package/dist/components/templates.d.ts +0 -2
  283. package/dist/components/templates.js +0 -27
  284. package/dist/helpers/mobile-layout.d.ts +0 -1
  285. package/dist/helpers/mobile-layout.js +0 -6
  286. package/dist/helpers/use-el-size.d.ts +0 -5
  287. package/dist/helpers/use-el-size.js +0 -40
  288. package/dist/main.d.ts +0 -1
  289. package/dist/main.js +0 -6
  290. package/dist/prompts-show.d.ts +0 -1
  291. package/dist/prompts-show.js +0 -20
  292. package/dist/prompts-submit.d.ts +0 -1
  293. package/dist/prompts-submit.js +0 -6
  294. package/dist/prompts.d.ts +0 -1
  295. package/dist/prompts.js +0 -6
  296. 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,16 +970,17 @@ 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 {
@@ -866,12 +989,10 @@ import {
866
989
  useCallback as useCallback7,
867
990
  useContext as useContext17,
868
991
  useLayoutEffect as useLayoutEffect3,
869
- useMemo as useMemo18,
992
+ useMemo as useMemo17,
870
993
  useRef as useRef9,
871
994
  useState as useState8
872
995
  } from "react";
873
- import React15, { forwardRef as forwardRef4, useMemo as useMemo17 } from "react";
874
- import { useContext as useContext16, useMemo as useMemo16, useState as useState7 } from "react";
875
996
  import { jsx as jsx15 } from "react/jsx-runtime";
876
997
  import { useContext as useContext18, useLayoutEffect as useLayoutEffect5, useState as useState10 } from "react";
877
998
  import {
@@ -879,25 +1000,25 @@ import {
879
1000
  useCallback as useCallback8,
880
1001
  useImperativeHandle as useImperativeHandle3,
881
1002
  useLayoutEffect as useLayoutEffect4,
882
- useMemo as useMemo19,
1003
+ useMemo as useMemo18,
883
1004
  useRef as useRef10,
884
1005
  useState as useState9
885
1006
  } from "react";
886
1007
  import { jsx as jsx16 } from "react/jsx-runtime";
887
1008
  import { forwardRef as forwardRef8, useCallback as useCallback13, useContext as useContext30 } from "react";
888
- import React17, { createContext as createContext17, useMemo as useMemo20 } from "react";
1009
+ import React17, { createContext as createContext17, useMemo as useMemo19 } from "react";
889
1010
  import { jsx as jsx17 } from "react/jsx-runtime";
890
1011
  import { useContext as useContext19 } from "react";
891
1012
  import { createContext as createContext18, useEffect as useEffect7, useState as useState11 } from "react";
892
1013
  import { jsx as jsx18 } from "react/jsx-runtime";
893
- import { createContext as createContext19, useMemo as useMemo21, useReducer } from "react";
1014
+ import { createContext as createContext19, useMemo as useMemo20, useReducer } from "react";
894
1015
  import { jsx as jsx19 } from "react/jsx-runtime";
895
1016
  import React23, {
896
1017
  forwardRef as forwardRef6,
897
1018
  useContext as useContext28,
898
- useEffect as useEffect14,
1019
+ useEffect as useEffect15,
899
1020
  useImperativeHandle as useImperativeHandle4,
900
- useMemo as useMemo29,
1021
+ useMemo as useMemo28,
901
1022
  useRef as useRef18,
902
1023
  useState as useState16
903
1024
  } from "react";
@@ -907,47 +1028,47 @@ import React20, {
907
1028
  createRef as createRef2,
908
1029
  useCallback as useCallback9,
909
1030
  useContext as useContext20,
910
- useMemo as useMemo23,
1031
+ useMemo as useMemo22,
911
1032
  useRef as useRef11,
912
1033
  useState as useState12
913
1034
  } from "react";
914
- import { useMemo as useMemo22 } from "react";
1035
+ import { useEffect as useEffect8, useMemo as useMemo21 } from "react";
915
1036
  import { jsx as jsx20, jsxs as jsxs22 } from "react/jsx-runtime";
916
1037
  import { useRef as useRef12 } from "react";
917
- import { useContext as useContext23, useEffect as useEffect8, useMemo as useMemo24, useState as useState13 } from "react";
1038
+ import { useContext as useContext23, useEffect as useEffect9, useMemo as useMemo23, useState as useState13 } from "react";
918
1039
  import { useContext as useContext22 } from "react";
919
1040
  import {
920
1041
  useCallback as useCallback12,
921
1042
  useContext as useContext26,
922
- useEffect as useEffect12,
1043
+ useEffect as useEffect13,
923
1044
  useLayoutEffect as useLayoutEffect8,
924
1045
  useRef as useRef17
925
1046
  } from "react";
926
- import { useCallback as useCallback11, useMemo as useMemo27, useRef as useRef15 } from "react";
927
- import { useContext as useContext25, 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";
928
1049
  import React21, {
929
1050
  useCallback as useCallback10,
930
1051
  useContext as useContext24,
931
- useEffect as useEffect9,
1052
+ useEffect as useEffect10,
932
1053
  useLayoutEffect as useLayoutEffect7,
933
- useMemo as useMemo25,
1054
+ useMemo as useMemo24,
934
1055
  useRef as useRef14,
935
1056
  useState as useState14
936
1057
  } from "react";
937
1058
  import { jsx as jsx21 } from "react/jsx-runtime";
938
1059
  import React22 from "react";
939
- import { useEffect as useEffect10, useState as useState15 } from "react";
940
- import { useEffect as useEffect11, useRef as useRef16 } from "react";
941
- import { useEffect as useEffect13 } from "react";
942
- import { createContext as createContext21, useContext as useContext27, 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";
943
1064
  import { jsx as jsx222 } from "react/jsx-runtime";
944
1065
  import {
945
1066
  forwardRef as forwardRef7,
946
1067
  useContext as useContext29,
947
- useEffect as useEffect15,
1068
+ useEffect as useEffect16,
948
1069
  useImperativeHandle as useImperativeHandle5,
949
1070
  useLayoutEffect as useLayoutEffect9,
950
- useMemo as useMemo30,
1071
+ useMemo as useMemo29,
951
1072
  useRef as useRef19
952
1073
  } from "react";
953
1074
  import { jsx as jsx23 } from "react/jsx-runtime";
@@ -968,14 +1089,14 @@ import React28 from "react";
968
1089
  import {
969
1090
  useCallback as useCallback16,
970
1091
  useImperativeHandle as useImperativeHandle7,
971
- useMemo as useMemo31,
1092
+ useMemo as useMemo30,
972
1093
  useRef as useRef21,
973
1094
  useState as useState19
974
1095
  } from "react";
975
1096
  import { jsx as jsx27 } from "react/jsx-runtime";
976
1097
  import React29 from "react";
977
- import { useMemo as useMemo33 } from "react";
978
- import { createContext as createContext22, useContext as useContext32, 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";
979
1100
  import { jsx as jsx28 } from "react/jsx-runtime";
980
1101
  import { jsx as jsx29 } from "react/jsx-runtime";
981
1102
  import React31 from "react";
@@ -985,27 +1106,27 @@ import { useCallback as useCallback18 } from "react";
985
1106
  import {
986
1107
  useCallback as useCallback17,
987
1108
  useContext as useContext34,
988
- useEffect as useEffect16,
1109
+ useEffect as useEffect17,
989
1110
  useLayoutEffect as useLayoutEffect11,
990
- useMemo as useMemo34,
1111
+ useMemo as useMemo33,
991
1112
  useState as useState20
992
1113
  } from "react";
993
1114
  import { jsx as jsx30 } from "react/jsx-runtime";
994
1115
  import React34, {
995
1116
  forwardRef as forwardRef10,
996
1117
  useContext as useContext35,
997
- useEffect as useEffect18,
1118
+ useEffect as useEffect19,
998
1119
  useImperativeHandle as useImperativeHandle8,
999
- useMemo as useMemo35,
1120
+ useMemo as useMemo34,
1000
1121
  useRef as useRef22,
1001
1122
  useState as useState21
1002
1123
  } from "react";
1003
- import { useEffect as useEffect17 } from "react";
1124
+ import { useEffect as useEffect18 } from "react";
1004
1125
  import { jsx as jsx31 } from "react/jsx-runtime";
1005
1126
  import { jsx as jsx32 } from "react/jsx-runtime";
1006
- import React36, { useMemo as useMemo36 } from "react";
1127
+ import React36, { useMemo as useMemo35 } from "react";
1007
1128
  import { jsx as jsx33 } from "react/jsx-runtime";
1008
- import { Children, forwardRef as forwardRef11, useMemo as useMemo37 } from "react";
1129
+ import { Children, forwardRef as forwardRef11, useMemo as useMemo36 } from "react";
1009
1130
  import React37 from "react";
1010
1131
  import React38, { createContext as createContext24 } from "react";
1011
1132
  import { jsx as jsx34 } from "react/jsx-runtime";
@@ -1015,10 +1136,10 @@ import { forwardRef as forwardRef13, useCallback as useCallback19, useContext as
1015
1136
  import {
1016
1137
  forwardRef as forwardRef12,
1017
1138
  useContext as useContext36,
1018
- useEffect as useEffect19,
1139
+ useEffect as useEffect20,
1019
1140
  useImperativeHandle as useImperativeHandle9,
1020
1141
  useLayoutEffect as useLayoutEffect12,
1021
- useMemo as useMemo38,
1142
+ useMemo as useMemo37,
1022
1143
  useRef as useRef23
1023
1144
  } from "react";
1024
1145
  import { jsx as jsx36 } from "react/jsx-runtime";
@@ -2097,6 +2218,7 @@ __export2(exports_timeline_position_state, {
2097
2218
  useTimelinePosition: () => useTimelinePosition,
2098
2219
  useTimelineContext: () => useTimelineContext,
2099
2220
  usePlayingState: () => usePlayingState,
2221
+ usePlaybackRate: () => usePlaybackRate,
2100
2222
  useAbsoluteTimelinePosition: () => useAbsoluteTimelinePosition,
2101
2223
  persistCurrentFrame: () => persistCurrentFrame,
2102
2224
  getInitialFrameState: () => getInitialFrameState,
@@ -2143,6 +2265,7 @@ var SetTimelineContext = createContext13({
2143
2265
  }
2144
2266
  });
2145
2267
  var TimelineContext = createContext13(null);
2268
+ var PlaybackRateContext = createContext13(null);
2146
2269
  var AbsoluteTimeContext = createContext13(null);
2147
2270
  var TimelineContextProvider = ({ children, frameState }) => {
2148
2271
  const [playing, setPlaying] = useState2(false);
@@ -2185,11 +2308,15 @@ var TimelineContextProvider = ({ children, frameState }) => {
2185
2308
  playing,
2186
2309
  imperativePlaying,
2187
2310
  rootId: remotionRootId,
2188
- playbackRate,
2189
- setPlaybackRate,
2190
2311
  audioAndVideoTags
2191
2312
  };
2192
- }, [frame, playbackRate, playing, remotionRootId]);
2313
+ }, [frame, playing, remotionRootId]);
2314
+ const playbackRateContextValue = useMemo8(() => {
2315
+ return {
2316
+ playbackRate,
2317
+ setPlaybackRate
2318
+ };
2319
+ }, [playbackRate]);
2193
2320
  const setTimelineContextValue = useMemo8(() => {
2194
2321
  return {
2195
2322
  setFrame,
@@ -2198,11 +2325,14 @@ var TimelineContextProvider = ({ children, frameState }) => {
2198
2325
  }, []);
2199
2326
  return /* @__PURE__ */ jsx8(AbsoluteTimeContext.Provider, {
2200
2327
  value: timelineContextValue,
2201
- children: /* @__PURE__ */ jsx8(TimelineContext.Provider, {
2202
- value: timelineContextValue,
2203
- children: /* @__PURE__ */ jsx8(SetTimelineContext.Provider, {
2204
- value: setTimelineContextValue,
2205
- 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
+ })
2206
2336
  })
2207
2337
  })
2208
2338
  });
@@ -2245,6 +2375,13 @@ var useTimelineContext = () => {
2245
2375
  }
2246
2376
  return state;
2247
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
+ };
2248
2385
  var useTimelinePosition = () => {
2249
2386
  const state = useTimelineContext();
2250
2387
  return useTimelinePositionFromContext(state);
@@ -2536,7 +2673,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2536
2673
  var addSequenceStackTraces = (component) => {
2537
2674
  componentsToAddStacksTo.push(component);
2538
2675
  };
2539
- var VERSION = "4.0.457";
2676
+ var VERSION = "4.0.458";
2540
2677
  var checkMultipleRemotionVersions = () => {
2541
2678
  if (typeof globalThis === "undefined") {
2542
2679
  return;
@@ -2707,6 +2844,54 @@ var Freeze = ({
2707
2844
  var PremountContext = createContext14({
2708
2845
  premountFramesRemaining: 0
2709
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
+ };
2710
2895
  var SequenceManager = React12.createContext({
2711
2896
  registerSequence: () => {
2712
2897
  throw new Error("SequenceManagerContext not initialized");
@@ -2828,6 +3013,204 @@ var SequenceManagerProvider = ({ children, visualModeEnabled }) => {
2828
3013
  });
2829
3014
  };
2830
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
+ };
2831
3214
  var RegularSequenceRefForwardingFunction = ({
2832
3215
  from = 0,
2833
3216
  durationInFrames = Infinity,
@@ -2846,8 +3229,8 @@ var RegularSequenceRefForwardingFunction = ({
2846
3229
  ...other
2847
3230
  }, ref) => {
2848
3231
  const { layout = "absolute-fill" } = other;
2849
- const [id] = useState5(() => String(Math.random()));
2850
- const parentSequence = useContext15(SequenceContext);
3232
+ const [id] = useState6(() => String(Math.random()));
3233
+ const parentSequence = useContext16(SequenceContext);
2851
3234
  const { rootId } = useTimelineContext();
2852
3235
  const cumulatedFrom = parentSequence ? parentSequence.cumulatedFrom + parentSequence.relativeFrom : 0;
2853
3236
  const nonce = useNonce();
@@ -2855,7 +3238,7 @@ var RegularSequenceRefForwardingFunction = ({
2855
3238
  throw new TypeError(`The layout prop of <Sequence /> expects either "absolute-fill" or "none", but you passed: ${layout}`);
2856
3239
  }
2857
3240
  if (layout === "none" && typeof other.style !== "undefined") {
2858
- 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));
2859
3242
  }
2860
3243
  if (typeof durationInFrames !== "number") {
2861
3244
  throw new TypeError(`You passed to durationInFrames an argument of type ${typeof durationInFrames}, but it must be a number.`);
@@ -2873,15 +3256,15 @@ var RegularSequenceRefForwardingFunction = ({
2873
3256
  const videoConfig = useVideoConfig();
2874
3257
  const parentSequenceDuration = parentSequence ? Math.min(parentSequence.durationInFrames - from, durationInFrames) : durationInFrames;
2875
3258
  const actualDurationInFrames = Math.max(0, Math.min(videoConfig.durationInFrames - from, parentSequenceDuration));
2876
- const { registerSequence, unregisterSequence } = useContext15(SequenceManager);
2877
- const { hidden } = useContext15(SequenceVisibilityToggleContext);
2878
- const premounting = useMemo15(() => {
3259
+ const { registerSequence, unregisterSequence } = useContext16(SequenceManager);
3260
+ const { hidden } = useContext16(SequenceVisibilityToggleContext);
3261
+ const premounting = useMemo16(() => {
2879
3262
  return parentSequence?.premounting || Boolean(other._remotionInternalIsPremounting);
2880
3263
  }, [other._remotionInternalIsPremounting, parentSequence?.premounting]);
2881
- const postmounting = useMemo15(() => {
3264
+ const postmounting = useMemo16(() => {
2882
3265
  return parentSequence?.postmounting || Boolean(other._remotionInternalIsPostmounting);
2883
3266
  }, [other._remotionInternalIsPostmounting, parentSequence?.postmounting]);
2884
- const contextValue = useMemo15(() => {
3267
+ const contextValue = useMemo16(() => {
2885
3268
  return {
2886
3269
  cumulatedFrom,
2887
3270
  relativeFrom: from,
@@ -2908,7 +3291,7 @@ var RegularSequenceRefForwardingFunction = ({
2908
3291
  premountDisplay,
2909
3292
  postmountDisplay
2910
3293
  ]);
2911
- const timelineClipName = useMemo15(() => {
3294
+ const timelineClipName = useMemo16(() => {
2912
3295
  return name ?? "";
2913
3296
  }, [name]);
2914
3297
  const env = useRemotionEnvironment();
@@ -2991,7 +3374,7 @@ var RegularSequenceRefForwardingFunction = ({
2991
3374
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
2992
3375
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
2993
3376
  const styleIfThere = other.layout === "none" ? undefined : other.style;
2994
- const defaultStyle = useMemo15(() => {
3377
+ const defaultStyle = useMemo16(() => {
2995
3378
  return {
2996
3379
  flexDirection: undefined,
2997
3380
  ...width ? { width } : {},
@@ -3016,9 +3399,9 @@ var RegularSequenceRefForwardingFunction = ({
3016
3399
  })
3017
3400
  });
3018
3401
  };
3019
- var RegularSequence = forwardRef2(RegularSequenceRefForwardingFunction);
3402
+ var RegularSequence = forwardRef3(RegularSequenceRefForwardingFunction);
3020
3403
  var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3021
- const parentPremountContext = useContext15(PremountContext);
3404
+ const parentPremountContext = useContext16(PremountContext);
3022
3405
  const frame = useCurrentFrame() - parentPremountContext.premountFramesRemaining;
3023
3406
  if (props.layout === "none") {
3024
3407
  throw new Error('`<Sequence>` with `premountFor` and `postmountFor` props does not support layout="none"');
@@ -3038,7 +3421,7 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3038
3421
  const postmountingActive = frame > endThreshold && frame <= endThreshold + postmountFor;
3039
3422
  const freezeFrame = premountingActive ? from : postmountingActive ? from + durationInFrames - 1 : 0;
3040
3423
  const isFreezingActive = premountingActive || postmountingActive;
3041
- const style = useMemo15(() => {
3424
+ const style = useMemo16(() => {
3042
3425
  return {
3043
3426
  ...passedStyle,
3044
3427
  opacity: premountingActive || postmountingActive ? 0 : 1,
@@ -3056,7 +3439,7 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3056
3439
  return /* @__PURE__ */ jsx12(Freeze, {
3057
3440
  frame: freezeFrame,
3058
3441
  active: isFreezingActive,
3059
- children: /* @__PURE__ */ jsx12(Sequence, {
3442
+ children: /* @__PURE__ */ jsx12(SequenceInner, {
3060
3443
  ref,
3061
3444
  from,
3062
3445
  durationInFrames,
@@ -3069,7 +3452,7 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3069
3452
  })
3070
3453
  });
3071
3454
  };
3072
- var PremountedPostmountedSequence = forwardRef2(PremountedPostmountedSequenceRefForwardingFunction);
3455
+ var PremountedPostmountedSequence = forwardRef3(PremountedPostmountedSequenceRefForwardingFunction);
3073
3456
  var SequenceRefForwardingFunction = (props, ref) => {
3074
3457
  const env = useRemotionEnvironment();
3075
3458
  const { fps } = useVideoConfig();
@@ -3088,7 +3471,8 @@ var SequenceRefForwardingFunction = (props, ref) => {
3088
3471
  ref
3089
3472
  });
3090
3473
  };
3091
- var Sequence = forwardRef2(SequenceRefForwardingFunction);
3474
+ var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
3475
+ var Sequence = wrapInSchema(SequenceInner, sequenceSchema);
3092
3476
  var calcArgs = (fit, frameSize, canvasSize) => {
3093
3477
  switch (fit) {
3094
3478
  case "fill": {
@@ -3184,7 +3568,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style }, ref
3184
3568
  style
3185
3569
  });
3186
3570
  };
3187
- var Canvas = React14.forwardRef(CanvasRefForwardingFunction);
3571
+ var Canvas = React15.forwardRef(CanvasRefForwardingFunction);
3188
3572
  var CACHE_SIZE = 5;
3189
3573
  var getActualTime = ({
3190
3574
  loopBehavior,
@@ -3331,7 +3715,7 @@ var resolveAnimatedImageSource = (src) => {
3331
3715
  }
3332
3716
  return new URL(src, window.origin).href;
3333
3717
  };
3334
- var AnimatedImage = forwardRef3(({
3718
+ var AnimatedImage = forwardRef4(({
3335
3719
  src,
3336
3720
  width,
3337
3721
  height,
@@ -3350,9 +3734,9 @@ var AnimatedImage = forwardRef3(({
3350
3734
  };
3351
3735
  }, []);
3352
3736
  const resolvedSrc = resolveAnimatedImageSource(src);
3353
- const [imageDecoder, setImageDecoder] = useState6(null);
3737
+ const [imageDecoder, setImageDecoder] = useState7(null);
3354
3738
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
3355
- const [decodeHandle] = useState6(() => delayRender2(`Rendering <AnimatedImage/> with src="${resolvedSrc}"`));
3739
+ const [decodeHandle] = useState7(() => delayRender2(`Rendering <AnimatedImage/> with src="${resolvedSrc}"`));
3356
3740
  const frame = useCurrentFrame();
3357
3741
  const { fps } = useVideoConfig();
3358
3742
  const currentTime = frame / playbackRate / fps;
@@ -3366,7 +3750,7 @@ var AnimatedImage = forwardRef3(({
3366
3750
  }
3367
3751
  return c;
3368
3752
  }, []);
3369
- const [initialLoopBehavior] = useState6(() => loopBehavior);
3753
+ const [initialLoopBehavior] = useState7(() => loopBehavior);
3370
3754
  useEffect6(() => {
3371
3755
  const controller = new AbortController;
3372
3756
  decodeImage({
@@ -3438,158 +3822,6 @@ var AnimatedImage = forwardRef3(({
3438
3822
  ...props
3439
3823
  });
3440
3824
  });
3441
- var getEffectiveVisualModeValue = ({
3442
- codeValue,
3443
- runtimeValue,
3444
- dragOverrideValue,
3445
- defaultValue,
3446
- shouldResortToDefaultValueIfUndefined = false
3447
- }) => {
3448
- if (dragOverrideValue !== undefined) {
3449
- return dragOverrideValue;
3450
- }
3451
- if (!codeValue) {
3452
- return runtimeValue;
3453
- }
3454
- if (!codeValue.canUpdate) {
3455
- return runtimeValue;
3456
- }
3457
- if (codeValue.codeValue === undefined && shouldResortToDefaultValueIfUndefined) {
3458
- return defaultValue;
3459
- }
3460
- return codeValue.codeValue;
3461
- };
3462
- var useSchema = (schema, currentValue) => {
3463
- const env = useRemotionEnvironment();
3464
- const earlyReturn = useMemo16(() => {
3465
- if (!env.isStudio || env.isReadOnlyStudio) {
3466
- return {
3467
- controls: undefined,
3468
- values: currentValue ?? {}
3469
- };
3470
- }
3471
- return;
3472
- }, [env.isStudio, env.isReadOnlyStudio, currentValue]);
3473
- if (earlyReturn) {
3474
- return earlyReturn;
3475
- }
3476
- const [overrideId] = useState7(() => String(Math.random()));
3477
- const {
3478
- visualModeEnabled,
3479
- dragOverrides: overrides,
3480
- codeValues
3481
- } = useContext16(VisualModeOverridesContext);
3482
- const controls = useMemo16(() => {
3483
- if (!visualModeEnabled) {
3484
- return;
3485
- }
3486
- if (schema === null || currentValue === null) {
3487
- return;
3488
- }
3489
- return {
3490
- schema,
3491
- currentValue,
3492
- overrideId
3493
- };
3494
- }, [schema, currentValue, overrideId, visualModeEnabled]);
3495
- return useMemo16(() => {
3496
- if (controls === undefined || currentValue === null || schema === null || !visualModeEnabled) {
3497
- return {
3498
- controls: undefined,
3499
- values: currentValue ?? {}
3500
- };
3501
- }
3502
- const overrideValues = overrides[overrideId] ?? {};
3503
- const propStatus = codeValues[overrideId];
3504
- const currentValueKeys = Object.keys(currentValue);
3505
- const keysToUpdate = [...new Set(currentValueKeys)];
3506
- const merged = {};
3507
- for (const key of keysToUpdate) {
3508
- const codeValueStatus = propStatus?.[key] ?? null;
3509
- merged[key] = getEffectiveVisualModeValue({
3510
- codeValue: codeValueStatus,
3511
- runtimeValue: currentValue[key],
3512
- dragOverrideValue: overrideValues[key],
3513
- defaultValue: schema[key]?.default,
3514
- shouldResortToDefaultValueIfUndefined: false
3515
- });
3516
- }
3517
- return {
3518
- controls,
3519
- values: merged
3520
- };
3521
- }, [
3522
- controls,
3523
- currentValue,
3524
- overrideId,
3525
- overrides,
3526
- codeValues,
3527
- schema,
3528
- visualModeEnabled
3529
- ]);
3530
- };
3531
- var getNestedValue = (obj, key) => {
3532
- const parts = key.split(".");
3533
- let current = obj;
3534
- for (const part of parts) {
3535
- if (current === null || current === undefined || typeof current !== "object")
3536
- return;
3537
- current = current[part];
3538
- }
3539
- return current;
3540
- };
3541
- var mergeValues = (props, values, schemaKeys) => {
3542
- const merged = { ...props };
3543
- for (const key of schemaKeys) {
3544
- const value = values[key];
3545
- const parts = key.split(".");
3546
- if (parts.length === 1) {
3547
- merged[key] = value;
3548
- continue;
3549
- }
3550
- let current = merged;
3551
- for (let i = 0;i < parts.length - 1; i++) {
3552
- const part = parts[i];
3553
- if (typeof current[part] === "object" && current[part] !== null) {
3554
- current[part] = { ...current[part] };
3555
- } else {
3556
- current[part] = {};
3557
- }
3558
- current = current[part];
3559
- }
3560
- current[parts[parts.length - 1]] = value;
3561
- }
3562
- return merged;
3563
- };
3564
- var wrapInSchema = (Component, schema) => {
3565
- const schemaKeys = Object.keys(schema);
3566
- const Wrapped = forwardRef4((props, ref) => {
3567
- const env = useRemotionEnvironment();
3568
- if (!env.isStudio || env.isReadOnlyStudio || env.isRendering || !process.env.EXPERIMENTAL_VISUAL_MODE_ENABLED) {
3569
- return React15.createElement(Component, {
3570
- ...props,
3571
- _experimentalControls: null,
3572
- ref
3573
- });
3574
- }
3575
- const schemaInput = useMemo17(() => {
3576
- const input = {};
3577
- for (const key of schemaKeys) {
3578
- input[key] = getNestedValue(props, key);
3579
- }
3580
- return input;
3581
- }, schemaKeys.map((key) => getNestedValue(props, key)));
3582
- const { controls, values } = useSchema(schema, schemaInput);
3583
- const mergedProps = mergeValues(props, values, schemaKeys);
3584
- return React15.createElement(Component, {
3585
- ...mergedProps,
3586
- _experimentalControls: controls,
3587
- ref
3588
- });
3589
- });
3590
- Wrapped.displayName = `wrapInSchema(${Component.displayName || Component.name || "Component"})`;
3591
- return Wrapped;
3592
- };
3593
3825
  var cachedSupport = null;
3594
3826
  var isHtmlInCanvasSupported = () => {
3595
3827
  if (cachedSupport !== null) {
@@ -3628,40 +3860,10 @@ var defaultOnPaint = ({
3628
3860
  element.style.transform = transform.toString();
3629
3861
  };
3630
3862
  var HtmlInCanvasAncestorContext = createContext15(false);
3631
- var htmlInCanvasSchema = {
3632
- "style.translate": {
3633
- type: "translate",
3634
- step: 1,
3635
- default: "0px 0px",
3636
- description: "Position"
3637
- },
3638
- "style.scale": {
3639
- type: "number",
3640
- min: 0.05,
3641
- max: 100,
3642
- step: 0.01,
3643
- default: 1,
3644
- description: "Scale"
3645
- },
3646
- "style.rotate": {
3647
- type: "rotation",
3648
- step: 1,
3649
- default: "0deg",
3650
- description: "Rotation"
3651
- },
3652
- "style.opacity": {
3653
- type: "number",
3654
- min: 0,
3655
- max: 1,
3656
- step: 0.01,
3657
- default: 1,
3658
- description: "Opacity"
3659
- }
3660
- };
3661
3863
  var HtmlInCanvasInner = forwardRef5(({
3662
3864
  width,
3663
3865
  height,
3664
- _experimentalEffects: experimentalEffects = [],
3866
+ _experimentalEffects: effects = [],
3665
3867
  children,
3666
3868
  onPaint,
3667
3869
  onInit,
@@ -3691,8 +3893,8 @@ var HtmlInCanvasInner = forwardRef5(({
3691
3893
  }, [ref]);
3692
3894
  const [offscreenCanvas] = useState8(() => new OffscreenCanvas(1, 1));
3693
3895
  const chainState = useEffectChainState();
3694
- const effectsRef = useRef9(experimentalEffects);
3695
- effectsRef.current = experimentalEffects;
3896
+ const effectsRef = useRef9(effects);
3897
+ effectsRef.current = effects;
3696
3898
  const frameRef = useRef9(frame);
3697
3899
  frameRef.current = frame;
3698
3900
  const onPaintRef = useRef9(onPaint);
@@ -3806,13 +4008,12 @@ var HtmlInCanvasInner = forwardRef5(({
3806
4008
  continueRender2(handle);
3807
4009
  };
3808
4010
  }, [width, height, continueRender2]);
3809
- const innerStyle = useMemo18(() => {
4011
+ const innerStyle = useMemo17(() => {
3810
4012
  return {
3811
4013
  width,
3812
- height,
3813
- ...style
4014
+ height
3814
4015
  };
3815
- }, [width, height, style]);
4016
+ }, [width, height]);
3816
4017
  if (isInsideAncestorHtmlInCanvas) {
3817
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.");
3818
4019
  }
@@ -3820,6 +4021,7 @@ var HtmlInCanvasInner = forwardRef5(({
3820
4021
  durationInFrames: resolvedDuration,
3821
4022
  name: "<HtmlInCanvas>",
3822
4023
  _experimentalControls: controls,
4024
+ _experimentalEffects: effects,
3823
4025
  layout: "none",
3824
4026
  ...sequenceProps,
3825
4027
  children: /* @__PURE__ */ jsx15(HtmlInCanvasAncestorContext.Provider, {
@@ -3828,6 +4030,7 @@ var HtmlInCanvasInner = forwardRef5(({
3828
4030
  ref: setLayoutCanvasRef,
3829
4031
  width,
3830
4032
  height,
4033
+ style,
3831
4034
  children: /* @__PURE__ */ jsx15("div", {
3832
4035
  ref: divRef,
3833
4036
  style: innerStyle,
@@ -3838,7 +4041,7 @@ var HtmlInCanvasInner = forwardRef5(({
3838
4041
  });
3839
4042
  });
3840
4043
  HtmlInCanvasInner.displayName = "HtmlInCanvas";
3841
- var HtmlInCanvasWrapped = wrapInSchema(HtmlInCanvasInner, htmlInCanvasSchema);
4044
+ var HtmlInCanvasWrapped = wrapInSchema(HtmlInCanvasInner, sequenceStyleSchema);
3842
4045
  var HtmlInCanvas = Object.assign(HtmlInCanvasWrapped, {
3843
4046
  isSupported: isHtmlInCanvasSupported
3844
4047
  });
@@ -3916,7 +4119,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
3916
4119
  };
3917
4120
  }
3918
4121
  }, []);
3919
- const contextValue = useMemo19(() => {
4122
+ const contextValue = useMemo18(() => {
3920
4123
  return {
3921
4124
  registerRenderAsset,
3922
4125
  unregisterRenderAsset,
@@ -4045,14 +4248,14 @@ var Loop = ({
4045
4248
  const iteration = Math.floor(currentFrame / durationInFrames);
4046
4249
  const start = iteration * durationInFrames;
4047
4250
  const from = Math.min(start, maxFrame);
4048
- const loopDisplay = useMemo20(() => {
4251
+ const loopDisplay = useMemo19(() => {
4049
4252
  return {
4050
4253
  numberOfTimes: Math.min(compDuration / durationInFrames, times),
4051
4254
  startOffset: -from,
4052
4255
  durationInFrames
4053
4256
  };
4054
4257
  }, [compDuration, durationInFrames, from, times]);
4055
- const loopContext = useMemo20(() => {
4258
+ const loopContext = useMemo19(() => {
4056
4259
  return {
4057
4260
  iteration: Math.floor(currentFrame / durationInFrames),
4058
4261
  durationInFrames
@@ -4411,7 +4614,7 @@ var DurationsContext = createContext19({
4411
4614
  });
4412
4615
  var DurationsContextProvider = ({ children }) => {
4413
4616
  const [durations, setDurations] = useReducer(durationReducer, {});
4414
- const value = useMemo21(() => {
4617
+ const value = useMemo20(() => {
4415
4618
  return {
4416
4619
  durations,
4417
4620
  setDurations
@@ -4545,7 +4748,7 @@ var useSingletonAudioContext = ({
4545
4748
  audioEnabled
4546
4749
  }) => {
4547
4750
  const env = useRemotionEnvironment();
4548
- return useMemo22(() => {
4751
+ const context = useMemo21(() => {
4549
4752
  if (env.isRendering) {
4550
4753
  return null;
4551
4754
  }
@@ -4562,11 +4765,19 @@ var useSingletonAudioContext = ({
4562
4765
  });
4563
4766
  const gainNode = audioContext.createGain();
4564
4767
  gainNode.connect(audioContext.destination);
4768
+ Log.trace({ logLevel, tag: "audio" }, "Creating new audio context");
4769
+ audioContext.suspend();
4565
4770
  return {
4566
4771
  audioContext,
4567
4772
  gainNode
4568
4773
  };
4569
4774
  }, [logLevel, latencyHint, env.isRendering, audioEnabled]);
4775
+ useEffect8(() => {
4776
+ return () => {
4777
+ context?.audioContext?.close();
4778
+ };
4779
+ }, [context]);
4780
+ return context;
4570
4781
  };
4571
4782
  var waitUntilActuallyResumed = (audioContext, logLevel) => {
4572
4783
  return new Promise((resolve) => {
@@ -4625,9 +4836,9 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4625
4836
  });
4626
4837
  const audioContextIsPlayingEventually = useRef11(false);
4627
4838
  const isResuming = useRef11(null);
4628
- const audioSyncAnchor = useMemo23(() => ({ value: 0 }), []);
4839
+ const audioSyncAnchor = useMemo22(() => ({ value: 0 }), []);
4629
4840
  const audioSyncAnchorListeners = useRef11([]);
4630
- const audioSyncAnchorEmitter = useMemo23(() => {
4841
+ const audioSyncAnchorEmitter = useMemo22(() => {
4631
4842
  return {
4632
4843
  dispatch: (event) => {
4633
4844
  audioSyncAnchorListeners.current.forEach((l) => l(event));
@@ -4647,7 +4858,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4647
4858
  const unscheduleAudioNode = useCallback9((node) => {
4648
4859
  nodesToResume.current.delete(node);
4649
4860
  }, []);
4650
- const scheduleAudioNode = useMemo23(() => {
4861
+ const scheduleAudioNode = useMemo22(() => {
4651
4862
  return ({
4652
4863
  node,
4653
4864
  mediaTimestamp,
@@ -4710,12 +4921,11 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4710
4921
  isResuming.current = null;
4711
4922
  });
4712
4923
  ctxAndGain.gainNode.gain.cancelScheduledValues(ctxAndGain.audioContext.currentTime);
4713
- ctxAndGain.gainNode?.gain.setValueAtTime(0, ctxAndGain.audioContext.currentTime);
4714
- ctxAndGain.gainNode?.gain.linearRampToValueAtTime(1, ctxAndGain.audioContext.currentTime + 0.03);
4715
- return resumePromise.then(() => {
4716
- nodesToResume.current.forEach((r, node) => node.start(r.scheduledTime, r.offset, r.duration));
4717
- nodesToResume.current.clear();
4718
- }).catch(() => {});
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(() => {});
4719
4929
  }, [ctxAndGain, logLevel]);
4720
4930
  const getIsResumingAudioContext = useCallback9(() => {
4721
4931
  return isResuming.current;
@@ -4730,7 +4940,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4730
4940
  audioContextIsPlayingEventually.current = false;
4731
4941
  ctxAndGain.audioContext.suspend();
4732
4942
  }, [ctxAndGain]);
4733
- const audioContextValue = useMemo23(() => {
4943
+ const audioContextValue = useMemo22(() => {
4734
4944
  return {
4735
4945
  audioContext: ctxAndGain?.audioContext ?? null,
4736
4946
  gainNode: ctxAndGain?.gainNode ?? null,
@@ -4769,7 +4979,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
4769
4979
  const audioCtx = useContext20(SharedAudioContext);
4770
4980
  const audioContext = audioCtx?.audioContext ?? null;
4771
4981
  const resume = audioCtx?.resume;
4772
- const refs = useMemo23(() => {
4982
+ const refs = useMemo22(() => {
4773
4983
  return new Array(numberOfAudioTags).fill(true).map(() => {
4774
4984
  const ref = createRef2();
4775
4985
  return {
@@ -4906,7 +5116,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
4906
5116
  });
4907
5117
  resume?.();
4908
5118
  }, [logLevel, mountTime, refs, env.isPlayer, resume]);
4909
- const audioTagsValue = useMemo23(() => {
5119
+ const audioTagsValue = useMemo22(() => {
4910
5120
  return {
4911
5121
  registerAudio,
4912
5122
  unregisterAudio,
@@ -5285,7 +5495,7 @@ var useBasicMediaInTimeline = ({
5285
5495
  parentSequenceDurationInFrames: parentSequence?.durationInFrames ?? null,
5286
5496
  loop
5287
5497
  });
5288
- const volumes = useMemo24(() => {
5498
+ const volumes = useMemo23(() => {
5289
5499
  if (typeof volume === "number") {
5290
5500
  return volume;
5291
5501
  }
@@ -5297,7 +5507,7 @@ var useBasicMediaInTimeline = ({
5297
5507
  });
5298
5508
  }).join(",");
5299
5509
  }, [duration, mediaStartsAt, volume, mediaVolume]);
5300
- useEffect8(() => {
5510
+ useEffect9(() => {
5301
5511
  if (typeof volume === "number" && volume !== initialVolume) {
5302
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`);
5303
5513
  }
@@ -5306,7 +5516,7 @@ var useBasicMediaInTimeline = ({
5306
5516
  const nonce = useNonce();
5307
5517
  const { rootId } = useTimelineContext();
5308
5518
  const startMediaFrom = 0 - mediaStartsAt + (trimBefore ?? 0);
5309
- const memoizedResult = useMemo24(() => {
5519
+ const memoizedResult = useMemo23(() => {
5310
5520
  return {
5311
5521
  volumes,
5312
5522
  duration,
@@ -5360,7 +5570,7 @@ var useImageInTimeline = ({
5360
5570
  loop: false
5361
5571
  });
5362
5572
  const { isStudio } = useRemotionEnvironment();
5363
- useEffect8(() => {
5573
+ useEffect9(() => {
5364
5574
  if (!src) {
5365
5575
  throw new Error("No src passed");
5366
5576
  }
@@ -5443,7 +5653,7 @@ var useMediaInTimeline = ({
5443
5653
  loop: false
5444
5654
  });
5445
5655
  const { isStudio } = useRemotionEnvironment();
5446
- useEffect8(() => {
5656
+ useEffect9(() => {
5447
5657
  if (!src) {
5448
5658
  throw new Error("No src passed");
5449
5659
  }
@@ -5545,7 +5755,7 @@ var useBufferManager = (logLevel, mountTime) => {
5545
5755
  }
5546
5756
  };
5547
5757
  }, []);
5548
- useEffect9(() => {
5758
+ useEffect10(() => {
5549
5759
  if (rendering) {
5550
5760
  return;
5551
5761
  }
@@ -5575,7 +5785,7 @@ var useBufferManager = (logLevel, mountTime) => {
5575
5785
  }
5576
5786
  }, [blocks]);
5577
5787
  }
5578
- return useMemo25(() => {
5788
+ return useMemo24(() => {
5579
5789
  return { addBlock, listenForBuffering, listenForResume, buffering };
5580
5790
  }, [addBlock, buffering, listenForBuffering, listenForResume]);
5581
5791
  };
@@ -5590,7 +5800,7 @@ var BufferingProvider = ({ children }) => {
5590
5800
  };
5591
5801
  var useIsPlayerBuffering = (bufferManager) => {
5592
5802
  const [isBuffering, setIsBuffering] = useState14(bufferManager.buffering.current);
5593
- useEffect9(() => {
5803
+ useEffect10(() => {
5594
5804
  const onBuffer = () => {
5595
5805
  setIsBuffering(true);
5596
5806
  };
@@ -5613,7 +5823,7 @@ var useIsPlayerBuffering = (bufferManager) => {
5613
5823
  var useBufferState = () => {
5614
5824
  const buffer = useContext25(BufferingContextReact);
5615
5825
  const addBlock = buffer ? buffer.addBlock : null;
5616
- return useMemo26(() => ({
5826
+ return useMemo25(() => ({
5617
5827
  delayPlayback: () => {
5618
5828
  if (!addBlock) {
5619
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");
@@ -5710,7 +5920,7 @@ var useBufferUntilFirstFrame = ({
5710
5920
  onVariableFpsVideoDetected,
5711
5921
  pauseWhenBuffering
5712
5922
  ]);
5713
- return useMemo27(() => {
5923
+ return useMemo26(() => {
5714
5924
  return {
5715
5925
  isBuffering: () => bufferingRef.current,
5716
5926
  bufferUntilFirstFrame
@@ -5759,7 +5969,7 @@ var useMediaBuffering = ({
5759
5969
  }) => {
5760
5970
  const buffer = useBufferState();
5761
5971
  const [isBuffering, setIsBuffering] = useState15(false);
5762
- useEffect10(() => {
5972
+ useEffect11(() => {
5763
5973
  let cleanupFns = [];
5764
5974
  const { current } = element;
5765
5975
  if (!current) {
@@ -5892,7 +6102,7 @@ var useRequestVideoCallbackTime = ({
5892
6102
  onVariableFpsVideoDetected
5893
6103
  }) => {
5894
6104
  const currentTime = useRef16(null);
5895
- useEffect11(() => {
6105
+ useEffect12(() => {
5896
6106
  const { current } = mediaRef;
5897
6107
  if (current) {
5898
6108
  currentTime.current = {
@@ -6112,7 +6322,7 @@ var useMediaPlayback = ({
6112
6322
  isPostmounting,
6113
6323
  onAutoPlayError
6114
6324
  }) => {
6115
- const { playbackRate: globalPlaybackRate } = useTimelineContext();
6325
+ const { playbackRate: globalPlaybackRate } = usePlaybackRate();
6116
6326
  const frame = useCurrentFrame();
6117
6327
  const absoluteFrame = useTimelinePosition();
6118
6328
  const [playing] = usePlayingState();
@@ -6178,7 +6388,7 @@ var useMediaPlayback = ({
6178
6388
  return acceptableTimeshift ?? defaultAcceptableTimeshift;
6179
6389
  })();
6180
6390
  const isPlayerBuffering = useIsPlayerBuffering(buffering);
6181
- useEffect12(() => {
6391
+ useEffect13(() => {
6182
6392
  if (mediaRef.current?.paused) {
6183
6393
  return;
6184
6394
  }
@@ -6223,7 +6433,7 @@ var useMediaPlayback = ({
6223
6433
  mediaRef.current.playbackRate = playbackRateToSet;
6224
6434
  }
6225
6435
  }, [mediaRef, playbackRate]);
6226
- useEffect12(() => {
6436
+ useEffect13(() => {
6227
6437
  const tagName = mediaType === "audio" ? "<Html5Audio>" : "<Html5Video>";
6228
6438
  if (!mediaRef.current) {
6229
6439
  throw new Error(`No ${mediaType} ref found`);
@@ -6352,7 +6562,7 @@ var useMediaTag = ({
6352
6562
  const logLevel = useLogLevel();
6353
6563
  const mountTime = useMountTime();
6354
6564
  const env = useRemotionEnvironment();
6355
- useEffect13(() => {
6565
+ useEffect14(() => {
6356
6566
  const tag = {
6357
6567
  id,
6358
6568
  play: (reason) => {
@@ -6406,14 +6616,14 @@ var SetMediaVolumeContext = createContext21({
6406
6616
  var useMediaVolumeState = () => {
6407
6617
  const { mediaVolume } = useContext27(MediaVolumeContext);
6408
6618
  const { setMediaVolume } = useContext27(SetMediaVolumeContext);
6409
- return useMemo28(() => {
6619
+ return useMemo27(() => {
6410
6620
  return [mediaVolume, setMediaVolume];
6411
6621
  }, [mediaVolume, setMediaVolume]);
6412
6622
  };
6413
6623
  var useMediaMutedState = () => {
6414
6624
  const { mediaMuted } = useContext27(MediaVolumeContext);
6415
6625
  const { setMediaMuted } = useContext27(SetMediaVolumeContext);
6416
- return useMemo28(() => {
6626
+ return useMemo27(() => {
6417
6627
  return [mediaMuted, setMediaMuted];
6418
6628
  }, [mediaMuted, setMediaMuted]);
6419
6629
  };
@@ -6481,7 +6691,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
6481
6691
  requestsVideoFrame: false,
6482
6692
  isClientSideRendering: false
6483
6693
  });
6484
- const propsToPass = useMemo29(() => {
6694
+ const propsToPass = useMemo28(() => {
6485
6695
  return {
6486
6696
  muted: muted || mediaMuted || isSequenceHidden || userPreferredVolume <= 0,
6487
6697
  src: preloadedSrc,
@@ -6499,7 +6709,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
6499
6709
  userPreferredVolume,
6500
6710
  crossOriginValue
6501
6711
  ]);
6502
- 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}`, [
6503
6713
  src,
6504
6714
  sequenceContext?.relativeFrom,
6505
6715
  sequenceContext?.cumulatedFrom,
@@ -6571,7 +6781,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
6571
6781
  }, [audioRef]);
6572
6782
  const currentOnDurationCallback = useRef18(onDuration);
6573
6783
  currentOnDurationCallback.current = onDuration;
6574
- useEffect14(() => {
6784
+ useEffect15(() => {
6575
6785
  const { current } = audioRef;
6576
6786
  if (!current) {
6577
6787
  return;
@@ -6625,7 +6835,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
6625
6835
  const sequenceContext = useContext29(SequenceContext);
6626
6836
  const { registerRenderAsset, unregisterRenderAsset } = useContext29(RenderAssetManager);
6627
6837
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
6628
- 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}`, [
6629
6839
  props.src,
6630
6840
  sequenceContext?.relativeFrom,
6631
6841
  sequenceContext?.cumulatedFrom,
@@ -6640,7 +6850,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
6640
6850
  useImperativeHandle5(ref, () => {
6641
6851
  return audioRef.current;
6642
6852
  }, []);
6643
- useEffect15(() => {
6853
+ useEffect16(() => {
6644
6854
  if (!props.src) {
6645
6855
  throw new Error("No src passed");
6646
6856
  }
@@ -6890,36 +7100,6 @@ function truncateSrcForLabel(src) {
6890
7100
  }
6891
7101
  return src;
6892
7102
  }
6893
- var imgSchema = {
6894
- "style.translate": {
6895
- type: "translate",
6896
- step: 1,
6897
- default: "0px 0px",
6898
- description: "Position"
6899
- },
6900
- "style.scale": {
6901
- type: "number",
6902
- min: 0.05,
6903
- max: 100,
6904
- step: 0.01,
6905
- default: 1,
6906
- description: "Scale"
6907
- },
6908
- "style.rotate": {
6909
- type: "rotation",
6910
- step: 1,
6911
- default: "0deg",
6912
- description: "Rotation"
6913
- },
6914
- "style.opacity": {
6915
- type: "number",
6916
- min: 0,
6917
- max: 1,
6918
- step: 0.01,
6919
- default: 1,
6920
- description: "Opacity"
6921
- }
6922
- };
6923
7103
  var ImgInner = ({
6924
7104
  onError,
6925
7105
  maxRetries = 2,
@@ -7083,7 +7263,7 @@ var ImgInner = ({
7083
7263
  decoding: "sync"
7084
7264
  });
7085
7265
  };
7086
- var Img = wrapInSchema(ImgInner, imgSchema);
7266
+ var Img = wrapInSchema(ImgInner, sequenceStyleSchema);
7087
7267
  addSequenceStackTraces(Img);
7088
7268
  var compositionsRef = React28.createRef();
7089
7269
  var CompositionManagerProvider = ({
@@ -7139,7 +7319,7 @@ var CompositionManagerProvider = ({
7139
7319
  getCompositions: () => currentcompositionsRef.current
7140
7320
  };
7141
7321
  }, []);
7142
- const compositionManagerSetters = useMemo31(() => {
7322
+ const compositionManagerSetters = useMemo30(() => {
7143
7323
  return {
7144
7324
  registerComposition,
7145
7325
  unregisterComposition,
@@ -7155,7 +7335,7 @@ var CompositionManagerProvider = ({
7155
7335
  unregisterFolder,
7156
7336
  onlyRenderComposition
7157
7337
  ]);
7158
- const compositionManagerContextValue = useMemo31(() => {
7338
+ const compositionManagerContextValue = useMemo30(() => {
7159
7339
  return {
7160
7340
  compositions,
7161
7341
  folders,
@@ -7285,7 +7465,7 @@ var MediaEnabledProvider = ({
7285
7465
  videoEnabled,
7286
7466
  audioEnabled
7287
7467
  }) => {
7288
- const value = useMemo32(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
7468
+ const value = useMemo31(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
7289
7469
  return /* @__PURE__ */ jsx28(MediaEnabledContext.Provider, {
7290
7470
  value,
7291
7471
  children
@@ -7301,13 +7481,13 @@ var RemotionRootContexts = ({
7301
7481
  frameState,
7302
7482
  visualModeEnabled
7303
7483
  }) => {
7304
- const nonceContext = useMemo33(() => {
7484
+ const nonceContext = useMemo32(() => {
7305
7485
  let counter = 0;
7306
7486
  return {
7307
7487
  getNonce: () => counter++
7308
7488
  };
7309
7489
  }, []);
7310
- const logging = useMemo33(() => {
7490
+ const logging = useMemo32(() => {
7311
7491
  return { logLevel, mountTime: Date.now() };
7312
7492
  }, [logLevel]);
7313
7493
  return /* @__PURE__ */ jsx29(LogLevelContext.Provider, {
@@ -7609,7 +7789,7 @@ var OffthreadVideoForRendering = ({
7609
7789
  if (!src) {
7610
7790
  throw new TypeError("No `src` was passed to <OffthreadVideo>.");
7611
7791
  }
7612
- 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}`, [
7613
7793
  src,
7614
7794
  sequenceContext?.cumulatedFrom,
7615
7795
  sequenceContext?.relativeFrom,
@@ -7624,7 +7804,7 @@ var OffthreadVideoForRendering = ({
7624
7804
  mediaVolume: 1
7625
7805
  });
7626
7806
  warnAboutTooHighVolume(volume);
7627
- useEffect16(() => {
7807
+ useEffect17(() => {
7628
7808
  if (!src) {
7629
7809
  throw new Error("No src passed");
7630
7810
  }
@@ -7664,14 +7844,14 @@ var OffthreadVideoForRendering = ({
7664
7844
  sequenceContext?.relativeFrom,
7665
7845
  audioStreamIndex
7666
7846
  ]);
7667
- const currentTime = useMemo34(() => {
7847
+ const currentTime = useMemo33(() => {
7668
7848
  return getExpectedMediaFrameUncorrected({
7669
7849
  frame,
7670
7850
  playbackRate: playbackRate || 1,
7671
7851
  startFrom: -mediaStartsAt
7672
7852
  }) / videoConfig.fps;
7673
7853
  }, [frame, mediaStartsAt, playbackRate, videoConfig.fps]);
7674
- const actualSrc = useMemo34(() => {
7854
+ const actualSrc = useMemo33(() => {
7675
7855
  return getOffthreadVideoSource({
7676
7856
  src,
7677
7857
  currentTime,
@@ -7759,7 +7939,7 @@ var OffthreadVideoForRendering = ({
7759
7939
  cancelRender("Failed to load image with src " + imageSrc);
7760
7940
  }
7761
7941
  }, [imageSrc, onError]);
7762
- const className = useMemo34(() => {
7942
+ const className = useMemo33(() => {
7763
7943
  return [OBJECTFIT_CONTAIN_CLASS_NAME, props2.className].filter(truthy).join(" ");
7764
7944
  }, [props2.className]);
7765
7945
  const onImageFrame = useCallback17((img) => {
@@ -7785,7 +7965,7 @@ var useEmitVideoFrame = ({
7785
7965
  ref,
7786
7966
  onVideoFrame
7787
7967
  }) => {
7788
- useEffect17(() => {
7968
+ useEffect18(() => {
7789
7969
  const { current } = ref;
7790
7970
  if (!current) {
7791
7971
  return;
@@ -7822,7 +8002,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
7822
8002
  throw new Error("SharedAudioContext not found");
7823
8003
  }
7824
8004
  const videoRef = useRef22(null);
7825
- const sharedSource = useMemo35(() => {
8005
+ const sharedSource = useMemo34(() => {
7826
8006
  if (!context.audioContext) {
7827
8007
  return null;
7828
8008
  }
@@ -7949,7 +8129,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
7949
8129
  tag: "video",
7950
8130
  mountTime
7951
8131
  }));
7952
- useEffect18(() => {
8132
+ useEffect19(() => {
7953
8133
  const { current } = videoRef;
7954
8134
  if (!current) {
7955
8135
  return;
@@ -7992,7 +8172,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
7992
8172
  const currentOnDurationCallback = useRef22(onDuration);
7993
8173
  currentOnDurationCallback.current = onDuration;
7994
8174
  useEmitVideoFrame({ ref: videoRef, onVideoFrame });
7995
- useEffect18(() => {
8175
+ useEffect19(() => {
7996
8176
  const { current } = videoRef;
7997
8177
  if (!current) {
7998
8178
  return;
@@ -8009,7 +8189,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8009
8189
  current.removeEventListener("loadedmetadata", onLoadedMetadata);
8010
8190
  };
8011
8191
  }, [src]);
8012
- useEffect18(() => {
8192
+ useEffect19(() => {
8013
8193
  const { current } = videoRef;
8014
8194
  if (!current) {
8015
8195
  return;
@@ -8020,7 +8200,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8020
8200
  current.preload = "auto";
8021
8201
  }
8022
8202
  }, []);
8023
- const actualStyle = useMemo35(() => {
8203
+ const actualStyle = useMemo34(() => {
8024
8204
  return {
8025
8205
  ...style,
8026
8206
  opacity: isSequenceHidden ? 0 : style?.opacity ?? 1
@@ -8214,7 +8394,7 @@ function useRemotionContexts() {
8214
8394
  const sequenceManagerContext = React36.useContext(SequenceManager);
8215
8395
  const bufferManagerContext = React36.useContext(BufferingContextReact);
8216
8396
  const logLevelContext = React36.useContext(LogLevelContext);
8217
- return useMemo36(() => ({
8397
+ return useMemo35(() => ({
8218
8398
  compositionManagerCtx,
8219
8399
  timelineContext,
8220
8400
  setTimelineContext,
@@ -8302,8 +8482,11 @@ var Internals = {
8302
8482
  SequenceManager,
8303
8483
  SequenceStackTracesUpdateContext,
8304
8484
  SequenceVisibilityToggleContext,
8305
- useSchema,
8306
8485
  wrapInSchema,
8486
+ sequenceSchema,
8487
+ sequenceStyleSchema,
8488
+ flattenActiveSchema,
8489
+ getFlatSchemaWithAllKeys,
8307
8490
  useSequenceControlOverride,
8308
8491
  RemotionRootContexts,
8309
8492
  CompositionManagerProvider,
@@ -8353,6 +8536,7 @@ var Internals = {
8353
8536
  REMOTION_STUDIO_CONTAINER_ELEMENT,
8354
8537
  RenderAssetManager,
8355
8538
  persistCurrentFrame,
8539
+ usePlaybackRate,
8356
8540
  useTimelineContext,
8357
8541
  useTimelineSetFrame,
8358
8542
  isIosSafari,
@@ -8386,6 +8570,7 @@ var Internals = {
8386
8570
  TimelinePosition: exports_timeline_position_state,
8387
8571
  DelayRenderContextType,
8388
8572
  TimelineContext,
8573
+ PlaybackRateContext,
8389
8574
  AbsoluteTimeContext,
8390
8575
  RenderAssetManagerProvider,
8391
8576
  getEffectiveVisualModeValue,
@@ -8394,7 +8579,8 @@ var Internals = {
8394
8579
  runEffectChain,
8395
8580
  useMemoizedEffects,
8396
8581
  defineEffect,
8397
- createDescriptor
8582
+ createDescriptor,
8583
+ computeEffectiveSchemaValuesDotNotation
8398
8584
  };
8399
8585
  var NUMBER = "[-+]?\\d*\\.?\\d+";
8400
8586
  var PERCENTAGE = NUMBER + "%";
@@ -8458,8 +8644,8 @@ var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
8458
8644
  });
8459
8645
  };
8460
8646
  var SeriesSequence = forwardRef11(SeriesSequenceRefForwardingFunction);
8461
- var Series = (props2) => {
8462
- const childrenValue = useMemo37(() => {
8647
+ var SeriesInner = (props2) => {
8648
+ const childrenValue = useMemo36(() => {
8463
8649
  let startFrame = 0;
8464
8650
  const flattenedChildren = flattenChildren(props2.children);
8465
8651
  return Children.map(flattenedChildren, (child, i) => {
@@ -8522,7 +8708,9 @@ var Series = (props2) => {
8522
8708
  })
8523
8709
  });
8524
8710
  };
8525
- Series.Sequence = SeriesSequence;
8711
+ var Series = Object.assign(wrapInSchema(SeriesInner, sequenceSchemaDefaultLayoutNone), {
8712
+ Sequence: SeriesSequence
8713
+ });
8526
8714
  addSequenceStackTraces(Series);
8527
8715
  addSequenceStackTraces(SeriesSequence);
8528
8716
  var validateSpringDuration = (dur) => {
@@ -8997,7 +9185,7 @@ var VideoForRenderingForwardFunction = ({
8997
9185
  const mountTime = useMountTime();
8998
9186
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
8999
9187
  const { registerRenderAsset, unregisterRenderAsset } = useContext36(RenderAssetManager);
9000
- const id = useMemo38(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
9188
+ const id = useMemo37(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
9001
9189
  props2.src,
9002
9190
  sequenceContext?.cumulatedFrom,
9003
9191
  sequenceContext?.relativeFrom,
@@ -9012,7 +9200,7 @@ var VideoForRenderingForwardFunction = ({
9012
9200
  mediaVolume: 1
9013
9201
  });
9014
9202
  warnAboutTooHighVolume(volume);
9015
- useEffect19(() => {
9203
+ useEffect20(() => {
9016
9204
  if (!props2.src) {
9017
9205
  throw new Error("No src passed");
9018
9206
  }
@@ -9055,7 +9243,7 @@ var VideoForRenderingForwardFunction = ({
9055
9243
  useImperativeHandle9(ref, () => {
9056
9244
  return videoRef.current;
9057
9245
  }, []);
9058
- useEffect19(() => {
9246
+ useEffect20(() => {
9059
9247
  if (!window.remotion_videoEnabled) {
9060
9248
  return;
9061
9249
  }
@@ -9473,6 +9661,20 @@ var TeamCardsLayout = () => {
9473
9661
 
9474
9662
  // src/components/experts/experts-icons.tsx
9475
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
+ };
9476
9678
  var PersonalWebsite = () => {
9477
9679
  return /* @__PURE__ */ jsx40("svg", {
9478
9680
  xmlns: "http://www.w3.org/2000/svg",
@@ -9626,6 +9828,13 @@ var ExpertCard = ({ expert, Link }) => {
9626
9828
  target: "_blank",
9627
9829
  href: `mailto:${expert.email}`,
9628
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, {})
9629
9838
  }) : null
9630
9839
  ]
9631
9840
  })
@@ -9635,7 +9844,7 @@ var ExpertCard = ({ expert, Link }) => {
9635
9844
  });
9636
9845
  };
9637
9846
  var ExpertsPageContent = ({ Link }) => {
9638
- const expertsInRandomOrder = useMemo39(() => {
9847
+ const expertsInRandomOrder = useMemo38(() => {
9639
9848
  if (typeof window === "undefined") {
9640
9849
  return [];
9641
9850
  }
@@ -11078,7 +11287,7 @@ var getDefaultConfig = () => {
11078
11287
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
11079
11288
 
11080
11289
  // ../design/dist/esm/index.mjs
11081
- 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";
11082
11291
 
11083
11292
  // ../paths/dist/esm/index.mjs
11084
11293
  var cutLInstruction = ({
@@ -13844,7 +14053,7 @@ var PathInternals = {
13844
14053
  };
13845
14054
 
13846
14055
  // ../shapes/dist/esm/index.mjs
13847
- import React3, { useMemo as useMemo41 } from "react";
14056
+ import React3, { useMemo as useMemo40 } from "react";
13848
14057
  import { version } from "react-dom";
13849
14058
  import { jsx as jsx42, jsxs as jsxs5 } from "react/jsx-runtime";
13850
14059
  import { jsx as jsx210 } from "react/jsx-runtime";
@@ -13875,13 +14084,13 @@ var RenderSvg = ({
13875
14084
  instructions,
13876
14085
  ...props
13877
14086
  }) => {
13878
- const actualStyle = useMemo41(() => {
14087
+ const actualStyle = useMemo40(() => {
13879
14088
  return {
13880
14089
  overflow: "visible",
13881
14090
  ...style ?? {}
13882
14091
  };
13883
14092
  }, [style]);
13884
- const actualPathStyle = useMemo41(() => {
14093
+ const actualPathStyle = useMemo40(() => {
13885
14094
  return {
13886
14095
  transformBox: "fill-box",
13887
14096
  ...pathStyle ?? {}
@@ -15442,10 +15651,10 @@ import { jsx as jsx152 } from "react/jsx-runtime";
15442
15651
  import * as React122 from "react";
15443
15652
  import { jsx as jsx162 } from "react/jsx-runtime";
15444
15653
  import * as React16 from "react";
15445
- import * as React13 from "react";
15654
+ import * as React132 from "react";
15446
15655
  import * as ReactDOM from "react-dom";
15447
15656
  import { jsx as jsx172 } from "react/jsx-runtime";
15448
- import * as React142 from "react";
15657
+ import * as React14 from "react";
15449
15658
  import * as React152 from "react";
15450
15659
  import { jsx as jsx182 } from "react/jsx-runtime";
15451
15660
  import * as React172 from "react";
@@ -15672,8 +15881,8 @@ var useHoverTransforms = (ref, disabled) => {
15672
15881
  progress: 0,
15673
15882
  isActive: false
15674
15883
  });
15675
- const eventTarget = useMemo42(() => new EventTarget, []);
15676
- useEffect20(() => {
15884
+ const eventTarget = useMemo41(() => new EventTarget, []);
15885
+ useEffect21(() => {
15677
15886
  if (disabled) {
15678
15887
  eventTarget.dispatchEvent(new Event("disabled"));
15679
15888
  } else {
@@ -15820,7 +16029,7 @@ var getAngle = (ref, coordinates) => {
15820
16029
  var lastCoordinates = null;
15821
16030
  var useMousePosition = (ref) => {
15822
16031
  const [angle, setAngle] = useState23(getAngle(ref.current, lastCoordinates));
15823
- useEffect20(() => {
16032
+ useEffect21(() => {
15824
16033
  const element = ref.current;
15825
16034
  if (!element) {
15826
16035
  return;
@@ -16484,7 +16693,7 @@ var NODES = [
16484
16693
  "ul"
16485
16694
  ];
16486
16695
  var Primitive = NODES.reduce((primitive, node) => {
16487
- const Node2 = React13.forwardRef((props, forwardedRef) => {
16696
+ const Node2 = React132.forwardRef((props, forwardedRef) => {
16488
16697
  const { asChild, ...primitiveProps } = props;
16489
16698
  const Comp = asChild ? Slot2 : node;
16490
16699
  if (typeof window !== "undefined") {
@@ -16500,11 +16709,11 @@ function dispatchDiscreteCustomEvent(target, event) {
16500
16709
  ReactDOM.flushSync(() => target.dispatchEvent(event));
16501
16710
  }
16502
16711
  function useCallbackRef(callback) {
16503
- const callbackRef = React142.useRef(callback);
16504
- React142.useEffect(() => {
16712
+ const callbackRef = React14.useRef(callback);
16713
+ React14.useEffect(() => {
16505
16714
  callbackRef.current = callback;
16506
16715
  });
16507
- return React142.useMemo(() => (...args) => callbackRef.current?.(...args), []);
16716
+ return React14.useMemo(() => (...args) => callbackRef.current?.(...args), []);
16508
16717
  }
16509
16718
  function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {
16510
16719
  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);
@@ -22119,7 +22328,7 @@ var Triangle2 = (props) => {
22119
22328
  };
22120
22329
 
22121
22330
  // src/components/homepage/FreePricing.tsx
22122
- import React53, { useCallback as useCallback33, useMemo as useMemo51 } from "react";
22331
+ import React53, { useCallback as useCallback33, useMemo as useMemo50 } from "react";
22123
22332
 
22124
22333
  // ../../node_modules/.bun/tailwind-merge@2.5.2/node_modules/tailwind-merge/dist/bundle-mjs.mjs
22125
22334
  var CLASS_PART_SEPARATOR2 = "-";
@@ -23776,14 +23985,14 @@ var CompanyPricing = () => {
23776
23985
  }, []);
23777
23986
  const creatorsPrice = creatorsSelected ? devSeatCount * SEAT_PRICE : 0;
23778
23987
  const automatorsPrice = automatorsSelected ? Math.ceil(cloudRenders / 1000) * RENDER_UNIT_PRICE : 0;
23779
- const totalPrice = useMemo51(() => {
23988
+ const totalPrice = useMemo50(() => {
23780
23989
  const basePrice = creatorsPrice + automatorsPrice;
23781
23990
  if (automatorsSelected) {
23782
23991
  return Math.max(100, basePrice);
23783
23992
  }
23784
23993
  return basePrice;
23785
23994
  }, [creatorsPrice, automatorsPrice, automatorsSelected]);
23786
- const totalPriceString = useMemo51(() => {
23995
+ const totalPriceString = useMemo50(() => {
23787
23996
  return formatPrice(totalPrice);
23788
23997
  }, [formatPrice, totalPrice]);
23789
23998
  const showMinimumMessage = automatorsSelected && creatorsPrice + automatorsPrice < 100;
@@ -24056,7 +24265,7 @@ var Pricing = () => {
24056
24265
  };
24057
24266
 
24058
24267
  // src/components/homepage/BackgroundAnimation.tsx
24059
- import { useEffect as useEffect41 } from "react";
24268
+ import { useEffect as useEffect40 } from "react";
24060
24269
  import { jsx as jsx49, jsxs as jsxs10 } from "react/jsx-runtime";
24061
24270
  "use client";
24062
24271
  var rx = 0.2;
@@ -24082,7 +24291,7 @@ var BackgroundAnimation = () => {
24082
24291
  }
24083
24292
  }
24084
24293
  `;
24085
- useEffect41(() => {
24294
+ useEffect40(() => {
24086
24295
  const _style = document.createElement("style");
24087
24296
  _style.innerHTML = css;
24088
24297
  document.head.appendChild(_style);
@@ -24488,16 +24697,16 @@ var CommunityStats_default = CommunityStats;
24488
24697
  import { jsx as jsx56, jsxs as jsxs13 } from "react/jsx-runtime";
24489
24698
  import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment11 } from "react/jsx-runtime";
24490
24699
  import React56 from "react";
24491
- import { useContext as useContext210, useEffect as useEffect42, useState as useState40 } from "react";
24700
+ import { useContext as useContext210, useEffect as useEffect41, useState as useState40 } from "react";
24492
24701
  import { useContext as useContext44, useLayoutEffect as useLayoutEffect17 } from "react";
24493
24702
  import { jsx as jsx313 } from "react/jsx-runtime";
24494
24703
  import { useCallback as useCallback34, useRef as useRef42 } from "react";
24495
- import { useEffect as useEffect24, useState as useState24 } from "react";
24704
+ import { useEffect as useEffect210, useState as useState24 } from "react";
24496
24705
  import { useLayoutEffect as useLayoutEffect23 } from "react";
24497
24706
  import { useContext as useContext45, useEffect as useEffect52, useRef as useRef52 } from "react";
24498
24707
  import { useEffect as useEffect310, useRef as useRef310 } from "react";
24499
- import { useCallback as useCallback24, useContext as useContext39, useMemo as useMemo52, useRef as useRef26, useState as useState310 } from "react";
24500
- 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";
24501
24710
  import { useCallback as useCallback35, useEffect as useEffect62, useMemo as useMemo212, useState as useState42 } from "react";
24502
24711
  import {
24503
24712
  forwardRef as forwardRef210,
@@ -24526,10 +24735,10 @@ import { jsx as jsx55 } from "react/jsx-runtime";
24526
24735
  import { useCallback as useCallback82, useEffect as useEffect112, useMemo as useMemo92, useRef as useRef92, useState as useState102 } from "react";
24527
24736
  import { jsx as jsx64 } from "react/jsx-runtime";
24528
24737
  import { useCallback as useCallback52, useMemo as useMemo410, useRef as useRef62, useState as useState62 } from "react";
24529
- 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";
24530
24739
  import { jsx as jsx74, jsxs as jsxs33 } from "react/jsx-runtime";
24531
24740
  import { jsx as jsx84, jsxs as jsxs43 } from "react/jsx-runtime";
24532
- 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";
24533
24742
  import { useEffect as useEffect83, useRef as useRef72, useState as useState72 } from "react";
24534
24743
  import { jsx as jsx94, jsxs as jsxs53 } from "react/jsx-runtime";
24535
24744
  import { useCallback as useCallback72, useEffect as useEffect102, useMemo as useMemo62, useRef as useRef82, useState as useState92 } from "react";
@@ -25338,7 +25547,7 @@ import {
25338
25547
  useRef as useRef142,
25339
25548
  useState as useState142
25340
25549
  } from "react";
25341
- import React132, {
25550
+ import React133, {
25342
25551
  forwardRef as forwardRef34,
25343
25552
  Suspense as Suspense22,
25344
25553
  useCallback as useCallback132,
@@ -25807,7 +26016,7 @@ var PlayerEmitterProvider = ({ children, currentPlaybackRate }) => {
25807
26016
  if (!bufferManager) {
25808
26017
  throw new Error("BufferingContextReact not found");
25809
26018
  }
25810
- useEffect42(() => {
26019
+ useEffect41(() => {
25811
26020
  if (currentPlaybackRate) {
25812
26021
  emitter.dispatchRateChange(currentPlaybackRate);
25813
26022
  }
@@ -25820,7 +26029,7 @@ var PlayerEmitterProvider = ({ children, currentPlaybackRate }) => {
25820
26029
  };
25821
26030
  var useHoverState = (ref, hideControlsWhenPointerDoesntMove) => {
25822
26031
  const [hovered, setHovered] = useState24(false);
25823
- useEffect24(() => {
26032
+ useEffect210(() => {
25824
26033
  const { current } = ref;
25825
26034
  if (!current) {
25826
26035
  return;
@@ -25995,7 +26204,7 @@ var usePlayer = () => {
25995
26204
  const isBuffering = useCallback24(() => {
25996
26205
  return buffering.current;
25997
26206
  }, [buffering]);
25998
- const returnValue = useMemo52(() => {
26207
+ const returnValue = useMemo51(() => {
25999
26208
  return {
26000
26209
  frameBack,
26001
26210
  frameForward,
@@ -26181,7 +26390,7 @@ var getIsBackgrounded = () => {
26181
26390
  };
26182
26391
  var useIsBackgrounded = () => {
26183
26392
  const isBackgrounded = useRef43(getIsBackgrounded());
26184
- useEffect43(() => {
26393
+ useEffect42(() => {
26185
26394
  const onVisibilityChange = () => {
26186
26395
  isBackgrounded.current = getIsBackgrounded();
26187
26396
  };
@@ -26228,7 +26437,6 @@ var usePlayback = ({
26228
26437
  const setFrame = Internals.Timeline.useTimelineSetFrame();
26229
26438
  const sharedAudioContext = useContext45(Internals.SharedAudioContext);
26230
26439
  const logLevel = Internals.useLogLevel();
26231
- const timelineContext = Internals.useTimelineContext();
26232
26440
  const isBackgroundedRef = useIsBackgrounded();
26233
26441
  const lastTimeUpdateTimestamp = useRef52(0);
26234
26442
  const context = useContext45(Internals.BufferingContextReact);
@@ -26254,19 +26462,13 @@ var usePlayback = ({
26254
26462
  audioContext: sharedAudioContext.audioContext,
26255
26463
  audioSyncAnchor: sharedAudioContext.audioSyncAnchor,
26256
26464
  absoluteTimeInSeconds: frame / config.fps,
26257
- globalPlaybackRate: timelineContext.playbackRate,
26465
+ globalPlaybackRate: playbackRate,
26258
26466
  logLevel
26259
26467
  });
26260
26468
  if (changed) {
26261
26469
  sharedAudioContext.audioSyncAnchorEmitter.dispatch("changed");
26262
26470
  }
26263
- }, [
26264
- config,
26265
- frame,
26266
- logLevel,
26267
- sharedAudioContext,
26268
- timelineContext.playbackRate
26269
- ]);
26471
+ }, [config, frame, logLevel, playbackRate, sharedAudioContext]);
26270
26472
  useEffect52(() => {
26271
26473
  if (!config) {
26272
26474
  return;
@@ -26343,7 +26545,7 @@ var usePlayback = ({
26343
26545
  audioContext: sharedAudioContext.audioContext,
26344
26546
  audioSyncAnchor: sharedAudioContext.audioSyncAnchor,
26345
26547
  absoluteTimeInSeconds: getCurrentFrame() / config.fps,
26346
- globalPlaybackRate: timelineContext.playbackRate,
26548
+ globalPlaybackRate: playbackRate,
26347
26549
  logLevel
26348
26550
  });
26349
26551
  startedTime = performance.now();
@@ -26400,7 +26602,6 @@ var usePlayback = ({
26400
26602
  context,
26401
26603
  isPlaying,
26402
26604
  sharedAudioContext,
26403
- timelineContext.playbackRate,
26404
26605
  logLevel,
26405
26606
  muted
26406
26607
  ]);
@@ -26675,7 +26876,7 @@ var DefaultVolumeSlider = ({
26675
26876
  inputRef,
26676
26877
  setVolume
26677
26878
  }) => {
26678
- const sliderContainer = useMemo310(() => {
26879
+ const sliderContainer = useMemo39(() => {
26679
26880
  const paddingLeft = 5;
26680
26881
  const common = {
26681
26882
  paddingLeft,
@@ -26700,7 +26901,7 @@ var DefaultVolumeSlider = ({
26700
26901
  const onVolumeChange = useCallback42((e) => {
26701
26902
  setVolume(parseFloat(e.target.value));
26702
26903
  }, [setVolume]);
26703
- const inputStyle = useMemo310(() => {
26904
+ const inputStyle = useMemo39(() => {
26704
26905
  const commonStyle = {
26705
26906
  WebkitAppearance: "none",
26706
26907
  backgroundColor: "rgba(255, 255, 255, 0.5)",
@@ -26920,7 +27121,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
26920
27121
  setHovered(false);
26921
27122
  }, []);
26922
27123
  const isFocused = keyboardSelectedRate === rate;
26923
- const actualStyle = useMemo53(() => {
27124
+ const actualStyle = useMemo52(() => {
26924
27125
  return {
26925
27126
  ...rateDiv,
26926
27127
  backgroundColor: hovered || isFocused ? "#eee" : "transparent"
@@ -26943,7 +27144,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
26943
27144
  }, rate);
26944
27145
  };
26945
27146
  var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
26946
- const { setPlaybackRate, playbackRate } = Internals.useTimelineContext();
27147
+ const { setPlaybackRate, playbackRate } = Internals.usePlaybackRate();
26947
27148
  const [keyboardSelectedRate, setKeyboardSelectedRate] = useState82(playbackRate);
26948
27149
  useEffect92(() => {
26949
27150
  const listener = (e) => {
@@ -26987,7 +27188,7 @@ var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
26987
27188
  setPlaybackRate(rate);
26988
27189
  setIsComponentVisible(false);
26989
27190
  }, [setIsComponentVisible, setPlaybackRate]);
26990
- const playbackPopup = useMemo53(() => {
27191
+ const playbackPopup = useMemo52(() => {
26991
27192
  return {
26992
27193
  position: "absolute",
26993
27194
  right: 0,
@@ -27045,7 +27246,7 @@ var button = {
27045
27246
  };
27046
27247
  var PlaybackrateControl = ({ playbackRates, canvasSize }) => {
27047
27248
  const { ref, isComponentVisible, setIsComponentVisible } = useComponentVisible(false);
27048
- const { playbackRate } = Internals.useTimelineContext();
27249
+ const { playbackRate } = Internals.usePlaybackRate();
27049
27250
  const onClick = useCallback62((e) => {
27050
27251
  e.stopPropagation();
27051
27252
  e.preventDefault();
@@ -28162,6 +28363,7 @@ var PLAYER_COMP_ID = "player-comp";
28162
28363
  var SharedPlayerContexts = ({
28163
28364
  children,
28164
28365
  timelineContext,
28366
+ playbackRateContext,
28165
28367
  fps,
28166
28368
  compositionHeight,
28167
28369
  compositionWidth,
@@ -28262,23 +28464,26 @@ var SharedPlayerContexts = ({
28262
28464
  children: /* @__PURE__ */ jsx133(Internals.CanUseRemotionHooksProvider, {
28263
28465
  children: /* @__PURE__ */ jsx133(Internals.AbsoluteTimeContext.Provider, {
28264
28466
  value: timelineContext,
28265
- children: /* @__PURE__ */ jsx133(Internals.TimelineContext.Provider, {
28266
- value: timelineContext,
28267
- children: /* @__PURE__ */ jsx133(Internals.CompositionManager.Provider, {
28268
- value: compositionManagerContext,
28269
- children: /* @__PURE__ */ jsx133(Internals.PrefetchProvider, {
28270
- children: /* @__PURE__ */ jsx133(Internals.DurationsContextProvider, {
28271
- children: /* @__PURE__ */ jsx133(Internals.MediaVolumeContext.Provider, {
28272
- value: mediaVolumeContextValue,
28273
- children: /* @__PURE__ */ jsx133(Internals.SetMediaVolumeContext.Provider, {
28274
- value: setMediaVolumeContextValue,
28275
- children: /* @__PURE__ */ jsx133(Internals.BufferingProvider, {
28276
- children: /* @__PURE__ */ jsx133(Internals.SharedAudioContextProvider, {
28277
- audioLatencyHint,
28278
- audioEnabled,
28279
- children: /* @__PURE__ */ jsx133(Internals.SharedAudioTagsContextProvider, {
28280
- numberOfAudioTags: numberOfSharedAudioTags,
28281
- 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
+ })
28282
28487
  })
28283
28488
  })
28284
28489
  })
@@ -28550,14 +28755,16 @@ var PlayerFn = ({
28550
28755
  frame,
28551
28756
  playing,
28552
28757
  rootId,
28553
- playbackRate: currentPlaybackRate,
28554
28758
  imperativePlaying,
28555
- setPlaybackRate: (rate) => {
28556
- setCurrentPlaybackRate(rate);
28557
- },
28558
28759
  audioAndVideoTags
28559
28760
  };
28560
- }, [frame, currentPlaybackRate, playing, rootId]);
28761
+ }, [frame, playing, rootId]);
28762
+ const playbackRateContextValue = useMemo142(() => {
28763
+ return {
28764
+ playbackRate: currentPlaybackRate,
28765
+ setPlaybackRate: setCurrentPlaybackRate
28766
+ };
28767
+ }, [currentPlaybackRate]);
28561
28768
  const setTimelineContextValue = useMemo142(() => {
28562
28769
  return {
28563
28770
  setFrame,
@@ -28578,6 +28785,7 @@ var PlayerFn = ({
28578
28785
  return /* @__PURE__ */ jsx143(Internals.IsPlayerContextProvider, {
28579
28786
  children: /* @__PURE__ */ jsx143(SharedPlayerContexts, {
28580
28787
  timelineContext: timelineContextValue,
28788
+ playbackRateContext: playbackRateContextValue,
28581
28789
  component,
28582
28790
  compositionHeight,
28583
28791
  compositionWidth,
@@ -28655,7 +28863,7 @@ var useThumbnail = () => {
28655
28863
  }, [emitter]);
28656
28864
  return returnValue;
28657
28865
  };
28658
- var reactVersion2 = React132.version.split(".")[0];
28866
+ var reactVersion2 = React133.version.split(".")[0];
28659
28867
  if (reactVersion2 === "0") {
28660
28868
  throw new Error(`Version ${reactVersion2} of "react" is not supported by Remotion`);
28661
28869
  }
@@ -28809,14 +29017,18 @@ var ThumbnailFn = ({
28809
29017
  imperativePlaying: {
28810
29018
  current: false
28811
29019
  },
28812
- playbackRate: 1,
28813
- setPlaybackRate: () => {
28814
- throw new Error("thumbnail");
28815
- },
28816
29020
  audioAndVideoTags: { current: [] }
28817
29021
  };
28818
29022
  return value;
28819
29023
  }, [frameToDisplay, thumbnailId]);
29024
+ const playbackRateContext = useMemo172(() => {
29025
+ return {
29026
+ playbackRate: 1,
29027
+ setPlaybackRate: () => {
29028
+ throw new Error("thumbnail");
29029
+ }
29030
+ };
29031
+ }, []);
28820
29032
  useImperativeHandle42(ref, () => rootRef.current, []);
28821
29033
  const Component = Internals.useLazyComponent({
28822
29034
  compProps: componentProps,
@@ -28830,6 +29042,7 @@ var ThumbnailFn = ({
28830
29042
  return /* @__PURE__ */ jsx163(Internals.IsPlayerContextProvider, {
28831
29043
  children: /* @__PURE__ */ jsx163(SharedPlayerContexts, {
28832
29044
  timelineContext: timelineState,
29045
+ playbackRateContext,
28833
29046
  component: Component,
28834
29047
  compositionHeight,
28835
29048
  compositionWidth,
@@ -28864,8 +29077,8 @@ var Thumbnail = forward2(ThumbnailFn);
28864
29077
  // src/components/homepage/Demo/index.tsx
28865
29078
  import {
28866
29079
  useCallback as useCallback49,
28867
- useEffect as useEffect58,
28868
- useMemo as useMemo66,
29080
+ useEffect as useEffect57,
29081
+ useMemo as useMemo64,
28869
29082
  useRef as useRef53,
28870
29083
  useState as useState56
28871
29084
  } from "react";
@@ -29616,7 +29829,7 @@ var UNDERLAY_RED = curriedTransparentize$1(0.9, RED);
29616
29829
  var BLUE_TEXT = curriedDarken$1(0.3, "#42e9f5");
29617
29830
 
29618
29831
  // src/components/homepage/layout/use-color-mode.tsx
29619
- import React57, { useContext as useContext46, useMemo as useMemo54 } from "react";
29832
+ import React57, { useContext as useContext46, useMemo as useMemo53 } from "react";
29620
29833
  import { jsx as jsx57 } from "react/jsx-runtime";
29621
29834
  var Context = React57.createContext(undefined);
29622
29835
  var ColorModeProvider = ({
@@ -29624,7 +29837,7 @@ var ColorModeProvider = ({
29624
29837
  colorMode,
29625
29838
  setColorMode
29626
29839
  }) => {
29627
- const value = useMemo54(() => {
29840
+ const value = useMemo53(() => {
29628
29841
  return { colorMode, setColorMode };
29629
29842
  }, [colorMode, setColorMode]);
29630
29843
  return /* @__PURE__ */ jsx57(Context.Provider, {
@@ -29642,8 +29855,8 @@ function useColorMode() {
29642
29855
 
29643
29856
  // ../media/dist/esm/index.mjs
29644
29857
  import { useState as useState312 } from "react";
29645
- import { useMemo as useMemo312 } from "react";
29646
- 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";
29647
29860
  import { ALL_FORMATS, Input as Input2, UrlSource } from "mediabunny";
29648
29861
  import { AudioBufferSink, InputDisposedError } from "mediabunny";
29649
29862
  import { CanvasSink } from "mediabunny";
@@ -29666,7 +29879,7 @@ import { jsx as jsx315 } from "react/jsx-runtime";
29666
29879
  import { useMemo as useMemo63, useState as useState63 } from "react";
29667
29880
  import {
29668
29881
  useContext as useContext47,
29669
- useEffect as useEffect210,
29882
+ useEffect as useEffect212,
29670
29883
  useLayoutEffect as useLayoutEffect34,
29671
29884
  useMemo as useMemo412,
29672
29885
  useRef as useRef210,
@@ -29676,7 +29889,7 @@ import { jsx as jsx412 } from "react/jsx-runtime";
29676
29889
  import {
29677
29890
  useContext as useContext53,
29678
29891
  useLayoutEffect as useLayoutEffect43,
29679
- useMemo as useMemo55,
29892
+ useMemo as useMemo54,
29680
29893
  useRef as useRef312,
29681
29894
  useState as useState53
29682
29895
  } from "react";
@@ -30471,65 +30684,90 @@ var makeNonceManager = () => {
30471
30684
  createAsyncOperation
30472
30685
  };
30473
30686
  };
30687
+ var BUFFER_SIZE = 3;
30474
30688
  var canvasesAheadOfTime = (videoSink, startTimestamp) => {
30475
30689
  const iterator = videoSink.canvases(startTimestamp);
30476
- let inFlight = iterator.next();
30477
- let resolved = null;
30478
- const trackResolution = () => {
30479
- const captured = inFlight;
30480
- captured.then((result) => {
30481
- if (captured === inFlight) {
30482
- 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;
30483
30717
  }
30718
+ fillNext();
30484
30719
  }, () => {
30485
- return;
30720
+ chaining = false;
30721
+ inFlight = null;
30486
30722
  });
30487
30723
  };
30488
- trackResolution();
30489
- const advance2 = () => {
30490
- inFlight = iterator.next();
30491
- resolved = null;
30492
- trackResolution();
30493
- };
30724
+ fillNext();
30494
30725
  const next = () => {
30495
- if (resolved) {
30496
- 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) {
30497
30751
  return { type: "ready", frame: null };
30498
30752
  }
30499
- const frame = resolved.value;
30500
- advance2();
30501
- return { type: "ready", frame };
30753
+ return { type: "ready", frame: slot.resolved.value };
30502
30754
  }
30503
- const captured = inFlight;
30504
30755
  return {
30505
30756
  type: "pending",
30506
30757
  wait: async () => {
30507
- const result = await captured;
30508
- if (captured === inFlight && !result.done) {
30509
- advance2();
30510
- }
30758
+ const result = await slot.promise;
30511
30759
  return result.done ? null : result.value;
30512
30760
  }
30513
30761
  };
30514
30762
  };
30515
- const closeFrame = (frame) => {
30516
- frame.close?.();
30517
- };
30518
30763
  const closeIterator = async () => {
30519
- if (resolved) {
30520
- if (!resolved.done) {
30521
- closeFrame(resolved.value);
30764
+ closed = true;
30765
+ for (const slot of buffer) {
30766
+ if (slot.resolved && !slot.resolved.done) {
30767
+ closeFrame(slot.resolved.value);
30522
30768
  }
30523
- } else {
30524
- const captured = inFlight;
30525
- captured.then((result) => {
30526
- if (!result.done) {
30527
- closeFrame(result.value);
30528
- }
30529
- }, () => {
30530
- return;
30531
- });
30532
30769
  }
30770
+ buffer.length = 0;
30533
30771
  await iterator.return();
30534
30772
  };
30535
30773
  return { next, closeIterator };
@@ -31555,8 +31793,7 @@ var AudioForPreviewAssertedShowing = ({
31555
31793
  const [mediaPlayerReady, setMediaPlayerReady] = useState41(false);
31556
31794
  const [shouldFallbackToNativeAudio, setShouldFallbackToNativeAudio] = useState41(false);
31557
31795
  const [playing] = Timeline.usePlayingState();
31558
- const timelineContext = Internals.useTimelineContext();
31559
- const globalPlaybackRate = timelineContext.playbackRate;
31796
+ const { playbackRate: globalPlaybackRate } = Internals.usePlaybackRate();
31560
31797
  const sharedAudioContext = useContext212(SharedAudioContext2);
31561
31798
  const buffer = useBufferState();
31562
31799
  const [mediaMuted] = useMediaMutedState2();
@@ -31619,7 +31856,7 @@ var AudioForPreviewAssertedShowing = ({
31619
31856
  logLevel,
31620
31857
  label: "AudioForPreview"
31621
31858
  });
31622
- useEffect44(() => {
31859
+ useEffect43(() => {
31623
31860
  if (!sharedAudioContext)
31624
31861
  return;
31625
31862
  if (!sharedAudioContext.audioContext)
@@ -31807,7 +32044,7 @@ var AudioForPreview2 = ({
31807
32044
  const frame = useCurrentFrame();
31808
32045
  const videoConfig = useVideoConfig();
31809
32046
  const currentTime = frame / videoConfig.fps;
31810
- const showShow = useMemo56(() => {
32047
+ const showShow = useMemo55(() => {
31811
32048
  return getTimeInSeconds({
31812
32049
  unloopedTimeInSeconds: currentTime,
31813
32050
  playbackRate,
@@ -33895,7 +34132,7 @@ var AudioInner = (props) => {
33895
34132
  loop: props.loop ?? false
33896
34133
  });
33897
34134
  const [mediaDurationInSeconds, setMediaDurationInSeconds] = useState312(null);
33898
- const loopDisplay = useMemo312(() => getLoopDisplay({
34135
+ const loopDisplay = useMemo311(() => getLoopDisplay({
33899
34136
  loop: props.loop ?? false,
33900
34137
  mediaDurationInSeconds,
33901
34138
  playbackRate: props.playbackRate ?? 1,
@@ -33912,7 +34149,7 @@ var AudioInner = (props) => {
33912
34149
  sequenceDurationInFrames,
33913
34150
  videoConfig.fps
33914
34151
  ]);
33915
- const isMedia = useMemo312(() => ({
34152
+ const isMedia = useMemo311(() => ({
33916
34153
  type: "audio",
33917
34154
  data: basicInfo
33918
34155
  }), [basicInfo]);
@@ -34034,8 +34271,7 @@ var VideoForPreviewAssertedShowing = ({
34034
34271
  const [mediaPlayerReady, setMediaPlayerReady] = useState43(false);
34035
34272
  const [shouldFallbackToNativeVideo, setShouldFallbackToNativeVideo] = useState43(false);
34036
34273
  const [playing] = Timeline2.usePlayingState();
34037
- const timelineContext = Internals.useTimelineContext();
34038
- const globalPlaybackRate = timelineContext.playbackRate;
34274
+ const { playbackRate: globalPlaybackRate } = Internals.usePlaybackRate();
34039
34275
  const sharedAudioContext = useContext47(SharedAudioContext22);
34040
34276
  const buffer = useBufferState();
34041
34277
  const [mediaMuted] = useMediaMutedState22();
@@ -34117,7 +34353,7 @@ var VideoForPreviewAssertedShowing = ({
34117
34353
  cacheVideoFrame(src, canvas);
34118
34354
  };
34119
34355
  }, [_experimentalInitiallyDrawCachedFrame, src]);
34120
- useEffect210(() => {
34356
+ useEffect212(() => {
34121
34357
  if (!sharedAudioContext)
34122
34358
  return;
34123
34359
  if (!sharedAudioContext.audioContext)
@@ -34397,7 +34633,7 @@ var VideoForRendering2 = ({
34397
34633
  const { registerRenderAsset, unregisterRenderAsset } = useContext53(Internals.RenderAssetManager);
34398
34634
  const startsAt = Internals.useMediaStartsAt();
34399
34635
  const sequenceContext = useContext53(Internals.SequenceContext);
34400
- 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}`, [
34401
34637
  src,
34402
34638
  sequenceContext?.cumulatedFrom,
34403
34639
  sequenceContext?.relativeFrom,
@@ -34590,10 +34826,10 @@ var VideoForRendering2 = ({
34590
34826
  credentials
34591
34827
  ]);
34592
34828
  warnAboutObjectFitInStyleOrClassName({ style: style2, className: className2, logLevel });
34593
- const classNameValue = useMemo55(() => {
34829
+ const classNameValue = useMemo54(() => {
34594
34830
  return [Internals.OBJECTFIT_CONTAIN_CLASS_NAME, className2].filter(Internals.truthy).join(" ");
34595
34831
  }, [className2]);
34596
- const styleWithObjectFit = useMemo55(() => {
34832
+ const styleWithObjectFit = useMemo54(() => {
34597
34833
  return {
34598
34834
  ...style2,
34599
34835
  objectFit: objectFitProp
@@ -34678,34 +34914,7 @@ var videoSchema = {
34678
34914
  description: "Playback Rate"
34679
34915
  },
34680
34916
  loop: { type: "boolean", default: false, description: "Loop" },
34681
- "style.translate": {
34682
- type: "translate",
34683
- step: 1,
34684
- default: "0px 0px",
34685
- description: "Position"
34686
- },
34687
- "style.scale": {
34688
- type: "number",
34689
- min: 0.05,
34690
- max: 100,
34691
- step: 0.01,
34692
- default: 1,
34693
- description: "Scale"
34694
- },
34695
- "style.rotate": {
34696
- type: "rotation",
34697
- step: 1,
34698
- default: "0deg",
34699
- description: "Rotation"
34700
- },
34701
- "style.opacity": {
34702
- type: "number",
34703
- min: 0,
34704
- max: 1,
34705
- step: 0.01,
34706
- default: 1,
34707
- description: "Opacity"
34708
- }
34917
+ ...Internals.sequenceStyleSchema
34709
34918
  };
34710
34919
  var InnerVideo = ({
34711
34920
  src,
@@ -34934,13 +35143,13 @@ var Video = Internals.wrapInSchema(VideoInner, videoSchema);
34934
35143
  Internals.addSequenceStackTraces(Video);
34935
35144
 
34936
35145
  // src/components/homepage/Demo/Comp.tsx
34937
- 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";
34938
35147
 
34939
35148
  // src/components/homepage/Demo/Cards.tsx
34940
35149
  import {
34941
35150
  createRef as createRef4,
34942
35151
  useCallback as useCallback40,
34943
- useEffect as useEffect49,
35152
+ useEffect as useEffect48,
34944
35153
  useRef as useRef49,
34945
35154
  useState as useState47
34946
35155
  } from "react";
@@ -35308,14 +35517,14 @@ var CurrentCountry = ({ theme, countryPaths, countryLabel }) => {
35308
35517
  import {
35309
35518
  forwardRef as forwardRef35,
35310
35519
  useCallback as useCallback39,
35311
- useEffect as useEffect48,
35520
+ useEffect as useEffect47,
35312
35521
  useImperativeHandle as useImperativeHandle12,
35313
35522
  useRef as useRef48
35314
35523
  } from "react";
35315
35524
 
35316
35525
  // ../lottie/dist/esm/index.mjs
35317
35526
  import lottie from "lottie-web";
35318
- 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";
35319
35528
  import { jsx as jsx69 } from "react/jsx-runtime";
35320
35529
  var getLottieMetadata = (animationData) => {
35321
35530
  const width2 = animationData.w;
@@ -35391,14 +35600,14 @@ var Lottie = ({
35391
35600
  onAnimationLoadedRef.current = onAnimationLoaded;
35392
35601
  const { delayRender: delayRender2, continueRender } = useDelayRender();
35393
35602
  const [handle] = useState44(() => delayRender2("Waiting for Lottie animation to load"));
35394
- useEffect46(() => {
35603
+ useEffect45(() => {
35395
35604
  return () => {
35396
35605
  continueRender(handle);
35397
35606
  };
35398
35607
  }, [handle, continueRender]);
35399
35608
  const frame = useCurrentFrame();
35400
35609
  currentFrameRef.current = frame;
35401
- useEffect46(() => {
35610
+ useEffect45(() => {
35402
35611
  if (!containerRef.current) {
35403
35612
  return;
35404
35613
  }
@@ -35443,17 +35652,17 @@ var Lottie = ({
35443
35652
  renderer,
35444
35653
  continueRender
35445
35654
  ]);
35446
- useEffect46(() => {
35655
+ useEffect45(() => {
35447
35656
  if (animationRef.current && direction) {
35448
35657
  animationRef.current.setDirection(direction === "backward" ? -1 : 1);
35449
35658
  }
35450
35659
  }, [direction]);
35451
- useEffect46(() => {
35660
+ useEffect45(() => {
35452
35661
  if (animationRef.current && playbackRate) {
35453
35662
  animationRef.current.setSpeed(playbackRate);
35454
35663
  }
35455
35664
  }, [playbackRate]);
35456
- useEffect46(() => {
35665
+ useEffect45(() => {
35457
35666
  if (!animationRef.current) {
35458
35667
  return;
35459
35668
  }
@@ -35486,14 +35695,14 @@ var Lottie = ({
35486
35695
  };
35487
35696
 
35488
35697
  // src/components/homepage/Demo/DisplayedEmoji.tsx
35489
- 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";
35490
35699
  import { jsx as jsx70 } from "react/jsx-runtime";
35491
35700
  var DisplayedEmoji = ({ emoji }) => {
35492
35701
  const [data, setData] = useState46(null);
35493
35702
  const { durationInFrames, fps } = useVideoConfig();
35494
35703
  const [browser, setBrowser] = useState46(typeof document !== "undefined");
35495
35704
  const { delayRender: delayRender2, continueRender, cancelRender: cancelRender2 } = useDelayRender();
35496
- const src = useMemo57(() => {
35705
+ const src = useMemo56(() => {
35497
35706
  if (emoji === "melting") {
35498
35707
  return "https://fonts.gstatic.com/s/e/notoemoji/latest/1fae0/lottie.json";
35499
35708
  }
@@ -35506,7 +35715,7 @@ var DisplayedEmoji = ({ emoji }) => {
35506
35715
  throw new Error("Unknown emoji");
35507
35716
  }, [emoji]);
35508
35717
  const [handle] = useState46(() => delayRender2("Loading emojis!"));
35509
- useEffect47(() => {
35718
+ useEffect46(() => {
35510
35719
  fetch(src).then((res) => res.json()).then((json) => {
35511
35720
  setData({
35512
35721
  duration: getLottieMetadata(json)?.durationInSeconds,
@@ -35517,7 +35726,7 @@ var DisplayedEmoji = ({ emoji }) => {
35517
35726
  cancelRender2(err);
35518
35727
  });
35519
35728
  }, [handle, src, continueRender, cancelRender2]);
35520
- useEffect47(() => {
35729
+ useEffect46(() => {
35521
35730
  if (typeof document !== "undefined") {
35522
35731
  setBrowser(true);
35523
35732
  }
@@ -35613,7 +35822,7 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
35613
35822
  transforms: transforms.current
35614
35823
  });
35615
35824
  }, []);
35616
- useEffect48(() => {
35825
+ useEffect47(() => {
35617
35826
  if (!ref1.current || !ref2.current || !ref3.current) {
35618
35827
  return;
35619
35828
  }
@@ -35630,7 +35839,7 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
35630
35839
  onRight
35631
35840
  };
35632
35841
  }, [onLeft, onRight]);
35633
- useEffect48(() => {
35842
+ useEffect47(() => {
35634
35843
  if (!ref1.current || !ref2.current || !ref3.current) {
35635
35844
  return;
35636
35845
  }
@@ -35920,7 +36129,7 @@ var Temperature = ({ theme, city, temperatureInCelsius }) => {
35920
36129
  };
35921
36130
 
35922
36131
  // src/components/homepage/Demo/TrendingRepos.tsx
35923
- import { useMemo as useMemo58 } from "react";
36132
+ import { useMemo as useMemo57 } from "react";
35924
36133
  import { jsx as jsx80, jsxs as jsxs21 } from "react/jsx-runtime";
35925
36134
  var TrendingRepoItem = ({ repo, theme, number }) => {
35926
36135
  const frame = useCurrentFrame();
@@ -35933,7 +36142,7 @@ var TrendingRepoItem = ({ repo, theme, number }) => {
35933
36142
  },
35934
36143
  delay: number * 10 + 20
35935
36144
  });
35936
- const item = useMemo58(() => {
36145
+ const item = useMemo57(() => {
35937
36146
  return {
35938
36147
  lineHeight: 1.1,
35939
36148
  fontFamily: "GTPlanar",
@@ -36045,7 +36254,7 @@ var Cards = ({
36045
36254
  const positions = useRef49(getInitialPositions());
36046
36255
  const shouldBePositions = useRef49(getInitialPositions());
36047
36256
  const { isRendering } = useRemotionEnvironment();
36048
- useEffect49(() => {
36257
+ useEffect48(() => {
36049
36258
  const { current } = container4;
36050
36259
  if (!current) {
36051
36260
  return;
@@ -36140,7 +36349,7 @@ var HomepageVideoComp = ({
36140
36349
  setRerenders(rerenders + 1);
36141
36350
  updateCardOrder(newIndices);
36142
36351
  }, [rerenders, updateCardOrder]);
36143
- const emoji = useMemo59(() => {
36352
+ const emoji = useMemo58(() => {
36144
36353
  if ((emojiIndex + 1e4 * 3) % 3 === 1) {
36145
36354
  return "melting";
36146
36355
  }
@@ -36149,7 +36358,7 @@ var HomepageVideoComp = ({
36149
36358
  }
36150
36359
  return "partying-face";
36151
36360
  }, [emojiIndex]);
36152
- const audioSrc = useMemo59(() => {
36361
+ const audioSrc = useMemo58(() => {
36153
36362
  if (emoji === "fire") {
36154
36363
  return fireAudio;
36155
36364
  }
@@ -36158,7 +36367,7 @@ var HomepageVideoComp = ({
36158
36367
  }
36159
36368
  return sadAudio;
36160
36369
  }, [emoji]);
36161
- useEffect50(() => {
36370
+ useEffect49(() => {
36162
36371
  const a = prefetch(fireAudio);
36163
36372
  const b = prefetch(partyHornAudio);
36164
36373
  const c = prefetch(sadAudio);
@@ -36234,7 +36443,7 @@ import {
36234
36443
  import { BufferTarget, StreamTarget } from "mediabunny";
36235
36444
 
36236
36445
  // ../core/dist/esm/version.mjs
36237
- var VERSION2 = "4.0.457";
36446
+ var VERSION2 = "4.0.458";
36238
36447
 
36239
36448
  // ../web-renderer/dist/esm/index.mjs
36240
36449
  import { AudioSample, VideoSample } from "mediabunny";
@@ -37568,7 +37777,7 @@ var turnSvgIntoDrawable = (svg) => {
37568
37777
  svg.style.color = originalColor;
37569
37778
  return new Promise((resolve, reject) => {
37570
37779
  const image = new Image;
37571
- const url = `data:image/svg+xml;base64,${btoa(svgData)}`;
37780
+ const url = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgData)}`;
37572
37781
  image.onload = function() {
37573
37782
  resolve(image);
37574
37783
  };
@@ -40970,7 +41179,7 @@ var Progress = ({ progress }) => {
40970
41179
  };
40971
41180
 
40972
41181
  // src/components/homepage/Demo/Spinner.tsx
40973
- import { useMemo as useMemo60 } from "react";
41182
+ import { useMemo as useMemo59 } from "react";
40974
41183
  import { jsx as jsx95, jsxs as jsxs29, Fragment as Fragment14 } from "react/jsx-runtime";
40975
41184
  var viewBox2 = 100;
40976
41185
  var lines2 = 8;
@@ -40978,7 +41187,7 @@ var className2 = "__remotion_spinner_line";
40978
41187
  var remotionSpinnerAnimation = "__remotion_spinner_animation";
40979
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";
40980
41189
  var Spinner2 = ({ size: size4, duration }) => {
40981
- const style2 = useMemo60(() => {
41190
+ const style2 = useMemo59(() => {
40982
41191
  return {
40983
41192
  width: size4,
40984
41193
  height: size4
@@ -41240,13 +41449,13 @@ var DragAndDropNudge = () => {
41240
41449
  };
41241
41450
 
41242
41451
  // src/components/homepage/Demo/PlayerSeekBar.tsx
41243
- 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";
41244
41453
 
41245
41454
  // src/components/homepage/layout/use-el-size.ts
41246
- 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";
41247
41456
  var useElementSize2 = (ref) => {
41248
41457
  const [size4, setSize] = useState50(null);
41249
- const observer = useMemo61(() => {
41458
+ const observer = useMemo60(() => {
41250
41459
  if (typeof ResizeObserver === "undefined") {
41251
41460
  return;
41252
41461
  }
@@ -41267,7 +41476,7 @@ var useElementSize2 = (ref) => {
41267
41476
  height: rect[0].height
41268
41477
  });
41269
41478
  }, [ref]);
41270
- useEffect51(() => {
41479
+ useEffect50(() => {
41271
41480
  updateSize();
41272
41481
  if (!observer) {
41273
41482
  return;
@@ -41323,7 +41532,7 @@ var findBodyInWhichDivIsLocated2 = (div) => {
41323
41532
  };
41324
41533
  var useHoverState2 = (ref, hideControlsWhenPointerDoesntMove) => {
41325
41534
  const [hovered, setHovered] = useState51(false);
41326
- useEffect53(() => {
41535
+ useEffect51(() => {
41327
41536
  const { current } = ref;
41328
41537
  if (!current) {
41329
41538
  return;
@@ -41374,7 +41583,7 @@ var PlayerSeekBar2 = ({
41374
41583
  const size4 = useElementSize2(containerRef.current);
41375
41584
  const [playing, setPlaying] = useState51(false);
41376
41585
  const [frame, setFrame] = useState51(0);
41377
- useEffect53(() => {
41586
+ useEffect51(() => {
41378
41587
  const { current } = playerRef;
41379
41588
  if (!current) {
41380
41589
  return;
@@ -41387,7 +41596,7 @@ var PlayerSeekBar2 = ({
41387
41596
  current.removeEventListener("frameupdate", onFrameUpdate);
41388
41597
  };
41389
41598
  }, [playerRef]);
41390
- useEffect53(() => {
41599
+ useEffect51(() => {
41391
41600
  const { current } = playerRef;
41392
41601
  if (!current) {
41393
41602
  return;
@@ -41448,7 +41657,7 @@ var PlayerSeekBar2 = ({
41448
41657
  }
41449
41658
  onSeekEnd();
41450
41659
  }, [dragging, onSeekEnd, playerRef]);
41451
- useEffect53(() => {
41660
+ useEffect51(() => {
41452
41661
  if (!dragging.dragging) {
41453
41662
  return;
41454
41663
  }
@@ -41460,7 +41669,7 @@ var PlayerSeekBar2 = ({
41460
41669
  body.removeEventListener("pointerup", onPointerUp);
41461
41670
  };
41462
41671
  }, [dragging.dragging, onPointerMove, onPointerUp]);
41463
- const knobStyle = useMemo64(() => {
41672
+ const knobStyle = useMemo61(() => {
41464
41673
  return {
41465
41674
  height: KNOB_SIZE3,
41466
41675
  width: KNOB_SIZE3,
@@ -41474,7 +41683,7 @@ var PlayerSeekBar2 = ({
41474
41683
  transition: "opacity 0.s ease"
41475
41684
  };
41476
41685
  }, [barHovered, durationInFrames, frame, width2]);
41477
- const fillStyle = useMemo64(() => {
41686
+ const fillStyle = useMemo61(() => {
41478
41687
  return {
41479
41688
  height: BAR_HEIGHT3,
41480
41689
  backgroundColor: "var(--ifm-font-color-base)",
@@ -41483,7 +41692,7 @@ var PlayerSeekBar2 = ({
41483
41692
  borderRadius: BAR_HEIGHT3 / 2
41484
41693
  };
41485
41694
  }, [durationInFrames, frame, inFrame]);
41486
- const active = useMemo64(() => {
41695
+ const active = useMemo61(() => {
41487
41696
  return {
41488
41697
  height: BAR_HEIGHT3,
41489
41698
  backgroundColor: "var(--ifm-font-color-base)",
@@ -41518,7 +41727,7 @@ var PlayerSeekBar2 = ({
41518
41727
  };
41519
41728
 
41520
41729
  // src/components/homepage/Demo/PlayerVolume.tsx
41521
- 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";
41522
41731
 
41523
41732
  // src/components/homepage/Demo/icons.tsx
41524
41733
  import { jsx as jsx101 } from "react/jsx-runtime";
@@ -41579,7 +41788,7 @@ var PlayerVolume = ({ playerRef }) => {
41579
41788
  const [muted, setIsMuted] = useState54(() => playerRef.current?.isMuted() ?? true);
41580
41789
  const [isHovered, setIsHovered] = useState54(false);
41581
41790
  const timerRef = useRef51(null);
41582
- useEffect55(() => {
41791
+ useEffect53(() => {
41583
41792
  const { current } = playerRef;
41584
41793
  if (!current) {
41585
41794
  return;
@@ -41592,7 +41801,7 @@ var PlayerVolume = ({ playerRef }) => {
41592
41801
  current.removeEventListener("mutechange", onMutedChange);
41593
41802
  };
41594
41803
  }, [playerRef]);
41595
- useEffect55(() => {
41804
+ useEffect53(() => {
41596
41805
  if (isHovered) {
41597
41806
  document.body.style.userSelect = "none";
41598
41807
  } else {
@@ -41637,7 +41846,7 @@ var PlayerVolume = ({ playerRef }) => {
41637
41846
  };
41638
41847
 
41639
41848
  // src/components/homepage/Demo/PlayPauseButton.tsx
41640
- import React71, { useCallback as useCallback48, useEffect as useEffect56 } from "react";
41849
+ import React71, { useCallback as useCallback48, useEffect as useEffect55 } from "react";
41641
41850
  import { jsx as jsx107 } from "react/jsx-runtime";
41642
41851
  var playerButtonStyle2 = {
41643
41852
  appearance: "none",
@@ -41655,7 +41864,7 @@ var playerButtonStyle2 = {
41655
41864
  };
41656
41865
  var PlayPauseButton = ({ playerRef }) => {
41657
41866
  const [playing, setPlaying] = React71.useState(true);
41658
- useEffect56(() => {
41867
+ useEffect55(() => {
41659
41868
  const { current } = playerRef;
41660
41869
  if (!current) {
41661
41870
  return;
@@ -41692,7 +41901,7 @@ var PlayPauseButton = ({ playerRef }) => {
41692
41901
  };
41693
41902
 
41694
41903
  // src/components/homepage/Demo/TimeDisplay.tsx
41695
- import React73, { useEffect as useEffect57 } from "react";
41904
+ import React73, { useEffect as useEffect56 } from "react";
41696
41905
  import { jsx as jsx108 } from "react/jsx-runtime";
41697
41906
  var formatTime2 = (timeInSeconds) => {
41698
41907
  const minutes = Math.floor(timeInSeconds / 60);
@@ -41701,7 +41910,7 @@ var formatTime2 = (timeInSeconds) => {
41701
41910
  };
41702
41911
  var TimeDisplay = ({ fps, playerRef }) => {
41703
41912
  const [time, setTime] = React73.useState(0);
41704
- useEffect57(() => {
41913
+ useEffect56(() => {
41705
41914
  const { current } = playerRef;
41706
41915
  if (!current) {
41707
41916
  return;
@@ -41872,7 +42081,7 @@ var Demo = () => {
41872
42081
  const [cardOrder, setCardOrder] = useState56([0, 1, 2, 3]);
41873
42082
  const [emojiIndex, setEmojiIndex] = useState56(0);
41874
42083
  const [error2, setError] = useState56(false);
41875
- useEffect58(() => {
42084
+ useEffect57(() => {
41876
42085
  getDataAndProps().then((d2) => {
41877
42086
  setData(d2);
41878
42087
  }).catch((err) => {
@@ -41880,7 +42089,7 @@ var Demo = () => {
41880
42089
  setError(true);
41881
42090
  });
41882
42091
  }, []);
41883
- useEffect58(() => {
42092
+ useEffect57(() => {
41884
42093
  const { current: playerRef } = ref;
41885
42094
  if (!playerRef || !data2) {
41886
42095
  return;
@@ -41896,7 +42105,7 @@ var Demo = () => {
41896
42105
  const updateCardOrder = useCallback49((newCardOrder) => {
41897
42106
  setCardOrder(newCardOrder);
41898
42107
  }, []);
41899
- const props = useMemo66(() => {
42108
+ const props = useMemo64(() => {
41900
42109
  return {
41901
42110
  theme: colorMode,
41902
42111
  onToggle: () => {
@@ -42025,16 +42234,16 @@ var ClearButton = (props) => {
42025
42234
 
42026
42235
  // src/components/homepage/MuxVideo.tsx
42027
42236
  import Hls2 from "hls.js";
42028
- 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";
42029
42238
 
42030
42239
  // src/components/homepage/VideoPlayerWithControls.tsx
42031
42240
  import Hls from "hls.js";
42032
42241
  import"plyr/dist/plyr.css";
42033
- 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";
42034
42243
  import { jsx as jsx116 } from "react/jsx-runtime";
42035
42244
  var useCombinedRefs = function(...refs) {
42036
42245
  const targetRef = useRef55(null);
42037
- useEffect59(() => {
42246
+ useEffect58(() => {
42038
42247
  refs.forEach((ref) => {
42039
42248
  if (!ref)
42040
42249
  return;
@@ -42063,12 +42272,12 @@ var VideoPlayerWithControls = forwardRef37(({ playbackId, poster, currentTime, o
42063
42272
  console.error("Error getting img dimensions", event);
42064
42273
  }
42065
42274
  }, [onLoaded, onSize]);
42066
- useEffect59(() => {
42275
+ useEffect58(() => {
42067
42276
  const img = new Image;
42068
42277
  img.onload = (evt) => onImageLoad(evt);
42069
42278
  img.src = poster;
42070
42279
  }, [onImageLoad, poster]);
42071
- useEffect59(() => {
42280
+ useEffect58(() => {
42072
42281
  const video = videoRef.current;
42073
42282
  const src = `https://stream.mux.com/${playbackId}.m3u8`;
42074
42283
  let hls;
@@ -42111,7 +42320,7 @@ var VideoPlayerWithControls = forwardRef37(({ playbackId, poster, currentTime, o
42111
42320
  }
42112
42321
  };
42113
42322
  }, [playbackId, playerInitTime, videoError, videoRef]);
42114
- useEffect59(() => {
42323
+ useEffect58(() => {
42115
42324
  const video = videoRef.current;
42116
42325
  if (currentTime && video) {
42117
42326
  video.currentTime = currentTime;
@@ -42138,7 +42347,7 @@ var MuxVideoForward = ({ muxId, ...props }, ref) => {
42138
42347
  const videoRef = useRef56(null);
42139
42348
  const vidUrl = getVideoToPlayUrl(muxId);
42140
42349
  useImperativeHandle14(ref, () => videoRef.current, []);
42141
- useEffect60(() => {
42350
+ useEffect59(() => {
42142
42351
  let hls;
42143
42352
  if (videoRef.current) {
42144
42353
  const { current } = videoRef;
@@ -42251,11 +42460,11 @@ var EditorStarterSection = () => {
42251
42460
  var EditorStarterSection_default = EditorStarterSection;
42252
42461
 
42253
42462
  // src/components/homepage/EvaluateRemotion.tsx
42254
- import { useEffect as useEffect61, useState as useState58 } from "react";
42463
+ import { useEffect as useEffect60, useState as useState58 } from "react";
42255
42464
  import { jsx as jsx119, jsxs as jsxs40 } from "react/jsx-runtime";
42256
42465
  var EvaluateRemotionSection = () => {
42257
42466
  const [dailyAvatars, setDailyAvatars] = useState58([]);
42258
- useEffect61(() => {
42467
+ useEffect60(() => {
42259
42468
  const avatars = experts.map((expert) => expert.image);
42260
42469
  const selectedAvatars = [];
42261
42470
  for (let i = 0;i < 3; i++) {
@@ -42352,7 +42561,7 @@ var EvaluateRemotionSection = () => {
42352
42561
  var EvaluateRemotion_default = EvaluateRemotionSection;
42353
42562
 
42354
42563
  // src/components/homepage/IfYouKnowReact.tsx
42355
- import { useEffect as useEffect63, useState as useState59 } from "react";
42564
+ import { useEffect as useEffect61, useState as useState59 } from "react";
42356
42565
  import { jsx as jsx120, jsxs as jsxs41 } from "react/jsx-runtime";
42357
42566
  var isWebkit = () => {
42358
42567
  if (typeof window === "undefined") {
@@ -42368,7 +42577,7 @@ var icon2 = {
42368
42577
  };
42369
42578
  var IfYouKnowReact = () => {
42370
42579
  const [vid, setVid] = useState59("/img/compose.webm");
42371
- useEffect63(() => {
42580
+ useEffect61(() => {
42372
42581
  if (isWebkit()) {
42373
42582
  setVid("/img/compose.mp4");
42374
42583
  }
@@ -42515,7 +42724,7 @@ var NewsletterButton = () => {
42515
42724
  };
42516
42725
 
42517
42726
  // src/components/homepage/ParameterizeAndEdit.tsx
42518
- 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";
42519
42728
  import { jsx as jsx124, jsxs as jsxs46 } from "react/jsx-runtime";
42520
42729
  var icon3 = {
42521
42730
  height: 16,
@@ -42524,7 +42733,7 @@ var icon3 = {
42524
42733
  var ParameterizeAndEdit = () => {
42525
42734
  const ref = useRef57(null);
42526
42735
  const [vid, setVid] = useState61("/img/editing-vp9-chrome.webm");
42527
- useEffect65(() => {
42736
+ useEffect63(() => {
42528
42737
  if (isWebkit()) {
42529
42738
  setVid("/img/editing-safari.mp4");
42530
42739
  }
@@ -42638,7 +42847,7 @@ var ParameterizeAndEdit = () => {
42638
42847
  };
42639
42848
 
42640
42849
  // src/components/homepage/RealMp4Videos.tsx
42641
- 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";
42642
42851
  import { jsx as jsx126, jsxs as jsxs47 } from "react/jsx-runtime";
42643
42852
  var icon4 = {
42644
42853
  height: 16,
@@ -42648,12 +42857,12 @@ var RealMP4Videos = () => {
42648
42857
  const ref = useRef58(null);
42649
42858
  const videoRef = useRef58(null);
42650
42859
  const [vid, setVid] = useState64("/img/render-progress.webm");
42651
- useEffect66(() => {
42860
+ useEffect65(() => {
42652
42861
  if (isWebkit()) {
42653
42862
  setVid("/img/render-progress.mp4");
42654
42863
  }
42655
42864
  }, []);
42656
- useEffect66(() => {
42865
+ useEffect65(() => {
42657
42866
  const { current } = ref;
42658
42867
  if (!current) {
42659
42868
  return;