@remotion/promo-pages 4.0.460 → 4.0.461

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 (276) hide show
  1. package/dist/Homepage.js +356 -217
  2. package/dist/cn.d.ts +2 -0
  3. package/dist/cn.js +5 -0
  4. package/dist/components/3DEngine/ButtonDemo.d.ts +2 -0
  5. package/dist/components/3DEngine/ButtonDemo.js +43 -0
  6. package/dist/components/3DEngine/Faces.d.ts +5 -0
  7. package/dist/components/3DEngine/Faces.js +7 -0
  8. package/dist/components/3DEngine/Outer.d.ts +8 -0
  9. package/dist/components/3DEngine/Outer.js +56 -0
  10. package/dist/components/3DEngine/Switch.d.ts +4 -0
  11. package/dist/components/3DEngine/Switch.js +4 -0
  12. package/dist/components/3DEngine/get-child-node-from.d.ts +1 -0
  13. package/dist/components/3DEngine/get-child-node-from.js +14 -0
  14. package/dist/components/3DEngine/hover-transforms.d.ts +9 -0
  15. package/dist/components/3DEngine/hover-transforms.js +177 -0
  16. package/dist/components/BackButton.d.ts +6 -0
  17. package/dist/components/BackButton.js +9 -0
  18. package/dist/components/CommandCopyButton.d.ts +5 -0
  19. package/dist/components/CommandCopyButton.js +4 -0
  20. package/dist/components/Homepage.d.ts +6 -0
  21. package/dist/components/Homepage.js +20 -0
  22. package/dist/components/ManageTeamMembers.d.ts +2 -0
  23. package/dist/components/ManageTeamMembers.js +42 -0
  24. package/dist/components/Spinner.d.ts +3 -0
  25. package/dist/components/Spinner.js +4 -0
  26. package/dist/components/TeamPicture.d.ts +1 -0
  27. package/dist/components/TeamPicture.js +4 -0
  28. package/dist/components/design.d.ts +1 -0
  29. package/dist/components/design.js +33 -0
  30. package/dist/components/experts/ExpertsPage.d.ts +11 -0
  31. package/dist/components/experts/ExpertsPage.js +50 -0
  32. package/dist/components/experts/experts-data.d.ts +15 -0
  33. package/dist/components/experts/experts-data.js +289 -0
  34. package/dist/components/experts/experts-icons.d.ts +7 -0
  35. package/dist/components/experts/experts-icons.js +36 -0
  36. package/dist/components/experts.d.ts +3 -0
  37. package/dist/components/experts.js +2 -0
  38. package/dist/components/homepage/BackgroundAnimation.d.ts +2 -0
  39. package/dist/components/homepage/BackgroundAnimation.js +66 -0
  40. package/dist/components/homepage/ChooseTemplate.d.ts +2 -0
  41. package/dist/components/homepage/ChooseTemplate.js +25 -0
  42. package/dist/components/homepage/CommunityStats.d.ts +3 -0
  43. package/dist/components/homepage/CommunityStats.js +6 -0
  44. package/dist/components/homepage/CommunityStatsItems.d.ts +7 -0
  45. package/dist/components/homepage/CommunityStatsItems.js +58 -0
  46. package/dist/components/homepage/Demo/Card.d.ts +15 -0
  47. package/dist/components/homepage/Demo/Card.js +174 -0
  48. package/dist/components/homepage/Demo/Cards.d.ts +15 -0
  49. package/dist/components/homepage/Demo/Cards.js +57 -0
  50. package/dist/components/homepage/Demo/Comp.d.ts +38 -0
  51. package/dist/components/homepage/Demo/Comp.js +72 -0
  52. package/dist/components/homepage/Demo/CurrentCountry.d.ts +9 -0
  53. package/dist/components/homepage/Demo/CurrentCountry.js +48 -0
  54. package/dist/components/homepage/Demo/DemoError.d.ts +2 -0
  55. package/dist/components/homepage/Demo/DemoError.js +10 -0
  56. package/dist/components/homepage/Demo/DemoErrorIcon.d.ts +2 -0
  57. package/dist/components/homepage/Demo/DemoErrorIcon.js +16 -0
  58. package/dist/components/homepage/Demo/DemoRender.d.ts +33 -0
  59. package/dist/components/homepage/Demo/DemoRender.js +107 -0
  60. package/dist/components/homepage/Demo/DigitWheel.d.ts +9 -0
  61. package/dist/components/homepage/Demo/DigitWheel.js +94 -0
  62. package/dist/components/homepage/Demo/DisplayedEmoji.d.ts +5 -0
  63. package/dist/components/homepage/Demo/DisplayedEmoji.js +59 -0
  64. package/dist/components/homepage/Demo/DoneCheckmark.d.ts +2 -0
  65. package/dist/components/homepage/Demo/DoneCheckmark.js +20 -0
  66. package/dist/components/homepage/Demo/DownloadNudge.d.ts +2 -0
  67. package/dist/components/homepage/Demo/DownloadNudge.js +27 -0
  68. package/dist/components/homepage/Demo/DragAndDropNudge.d.ts +3 -0
  69. package/dist/components/homepage/Demo/DragAndDropNudge.js +26 -0
  70. package/dist/components/homepage/Demo/EmojiCard.d.ts +10 -0
  71. package/dist/components/homepage/Demo/EmojiCard.js +120 -0
  72. package/dist/components/homepage/Demo/Minus.d.ts +5 -0
  73. package/dist/components/homepage/Demo/Minus.js +11 -0
  74. package/dist/components/homepage/Demo/PlayPauseButton.d.ts +5 -0
  75. package/dist/components/homepage/Demo/PlayPauseButton.js +47 -0
  76. package/dist/components/homepage/Demo/PlayerControls.d.ts +8 -0
  77. package/dist/components/homepage/Demo/PlayerControls.js +15 -0
  78. package/dist/components/homepage/Demo/PlayerSeekBar.d.ts +11 -0
  79. package/dist/components/homepage/Demo/PlayerSeekBar.js +216 -0
  80. package/dist/components/homepage/Demo/PlayerVolume.d.ts +5 -0
  81. package/dist/components/homepage/Demo/PlayerVolume.js +53 -0
  82. package/dist/components/homepage/Demo/Progress.d.ts +4 -0
  83. package/dist/components/homepage/Demo/Progress.js +14 -0
  84. package/dist/components/homepage/Demo/Spinner.d.ts +5 -0
  85. package/dist/components/homepage/Demo/Spinner.js +37 -0
  86. package/dist/components/homepage/Demo/Switcher.d.ts +6 -0
  87. package/dist/components/homepage/Demo/Switcher.js +25 -0
  88. package/dist/components/homepage/Demo/Temperature.d.ts +6 -0
  89. package/dist/components/homepage/Demo/Temperature.js +21 -0
  90. package/dist/components/homepage/Demo/TemperatureNumber.d.ts +5 -0
  91. package/dist/components/homepage/Demo/TemperatureNumber.js +36 -0
  92. package/dist/components/homepage/Demo/ThemeNudge.d.ts +3 -0
  93. package/dist/components/homepage/Demo/ThemeNudge.js +35 -0
  94. package/dist/components/homepage/Demo/TimeDisplay.d.ts +6 -0
  95. package/dist/components/homepage/Demo/TimeDisplay.js +27 -0
  96. package/dist/components/homepage/Demo/TrendingRepos.d.ts +6 -0
  97. package/dist/components/homepage/Demo/TrendingRepos.js +65 -0
  98. package/dist/components/homepage/Demo/icons.d.ts +10 -0
  99. package/dist/components/homepage/Demo/icons.js +22 -0
  100. package/dist/components/homepage/Demo/index.d.ts +2 -0
  101. package/dist/components/homepage/Demo/index.js +95 -0
  102. package/dist/components/homepage/Demo/math.d.ts +10 -0
  103. package/dist/components/homepage/Demo/math.js +29 -0
  104. package/dist/components/homepage/Demo/types.d.ts +6 -0
  105. package/dist/components/homepage/Demo/types.js +0 -0
  106. package/dist/components/homepage/EditorStarterSection.d.ts +3 -0
  107. package/dist/components/homepage/EditorStarterSection.js +8 -0
  108. package/dist/components/homepage/EvaluateRemotion.d.ts +3 -0
  109. package/dist/components/homepage/EvaluateRemotion.js +21 -0
  110. package/dist/components/homepage/FreePricing.d.ts +4 -0
  111. package/dist/components/homepage/FreePricing.js +133 -0
  112. package/dist/components/homepage/GetStartedStrip.d.ts +2 -0
  113. package/dist/components/homepage/GetStartedStrip.js +14 -0
  114. package/dist/components/homepage/GitHubButton.d.ts +2 -0
  115. package/dist/components/homepage/GitHubButton.js +7 -0
  116. package/dist/components/homepage/IconForTemplate.d.ts +6 -0
  117. package/dist/components/homepage/IconForTemplate.js +105 -0
  118. package/dist/components/homepage/IfYouKnowReact.d.ts +3 -0
  119. package/dist/components/homepage/IfYouKnowReact.js +23 -0
  120. package/dist/components/homepage/MoreTemplatesButton.d.ts +2 -0
  121. package/dist/components/homepage/MoreTemplatesButton.js +11 -0
  122. package/dist/components/homepage/MuxVideo.d.ts +7 -0
  123. package/dist/components/homepage/MuxVideo.js +45 -0
  124. package/dist/components/homepage/NewsletterButton.d.ts +2 -0
  125. package/dist/components/homepage/NewsletterButton.js +38 -0
  126. package/dist/components/homepage/ParameterizeAndEdit.d.ts +2 -0
  127. package/dist/components/homepage/ParameterizeAndEdit.js +22 -0
  128. package/dist/components/homepage/Pricing.d.ts +2 -0
  129. package/dist/components/homepage/Pricing.js +15 -0
  130. package/dist/components/homepage/PricingBulletPoint.d.ts +6 -0
  131. package/dist/components/homepage/PricingBulletPoint.js +19 -0
  132. package/dist/components/homepage/RealMp4Videos.d.ts +2 -0
  133. package/dist/components/homepage/RealMp4Videos.js +41 -0
  134. package/dist/components/homepage/Spacer.d.ts +2 -0
  135. package/dist/components/homepage/Spacer.js +4 -0
  136. package/dist/components/homepage/TemplateIcon.d.ts +5 -0
  137. package/dist/components/homepage/TemplateIcon.js +24 -0
  138. package/dist/components/homepage/TextInput.d.ts +7 -0
  139. package/dist/components/homepage/TextInput.js +34 -0
  140. package/dist/components/homepage/TrustedByBanner.d.ts +2 -0
  141. package/dist/components/homepage/TrustedByBanner.js +27 -0
  142. package/dist/components/homepage/VideoApps.d.ts +4 -0
  143. package/dist/components/homepage/VideoApps.js +72 -0
  144. package/dist/components/homepage/VideoAppsShowcase.d.ts +3 -0
  145. package/dist/components/homepage/VideoAppsShowcase.js +139 -0
  146. package/dist/components/homepage/VideoAppsTitle.d.ts +4 -0
  147. package/dist/components/homepage/VideoAppsTitle.js +4 -0
  148. package/dist/components/homepage/VideoPlayerWithControls.d.ts +20 -0
  149. package/dist/components/homepage/VideoPlayerWithControls.js +105 -0
  150. package/dist/components/homepage/WriteInReact.d.ts +2 -0
  151. package/dist/components/homepage/WriteInReact.js +10 -0
  152. package/dist/components/homepage/YouAreHere.d.ts +2 -0
  153. package/dist/components/homepage/YouAreHere.js +23 -0
  154. package/dist/components/homepage/layout/Button.d.ts +22 -0
  155. package/dist/components/homepage/layout/Button.js +30 -0
  156. package/dist/components/homepage/layout/colors.d.ts +13 -0
  157. package/dist/components/homepage/layout/colors.js +14 -0
  158. package/dist/components/homepage/layout/use-color-mode.d.ts +21 -0
  159. package/dist/components/homepage/layout/use-color-mode.js +22 -0
  160. package/dist/components/homepage/layout/use-el-size.d.ts +5 -0
  161. package/dist/components/homepage/layout/use-el-size.js +40 -0
  162. package/dist/components/homepage/layout/use-mobile-layout.d.ts +1 -0
  163. package/dist/components/homepage/layout/use-mobile-layout.js +6 -0
  164. package/dist/components/icons/blank.d.ts +3 -0
  165. package/dist/components/icons/blank.js +4 -0
  166. package/dist/components/icons/brain.d.ts +2 -0
  167. package/dist/components/icons/brain.js +4 -0
  168. package/dist/components/icons/clone.d.ts +2 -0
  169. package/dist/components/icons/clone.js +2 -0
  170. package/dist/components/icons/code-hike.d.ts +3 -0
  171. package/dist/components/icons/code-hike.js +4 -0
  172. package/dist/components/icons/cubes.d.ts +3 -0
  173. package/dist/components/icons/cubes.js +4 -0
  174. package/dist/components/icons/editor.d.ts +3 -0
  175. package/dist/components/icons/editor.js +4 -0
  176. package/dist/components/icons/electron.d.ts +4 -0
  177. package/dist/components/icons/electron.js +4 -0
  178. package/dist/components/icons/js.d.ts +3 -0
  179. package/dist/components/icons/js.js +4 -0
  180. package/dist/components/icons/music.d.ts +2 -0
  181. package/dist/components/icons/music.js +4 -0
  182. package/dist/components/icons/next.d.ts +4 -0
  183. package/dist/components/icons/next.js +4 -0
  184. package/dist/components/icons/overlay.d.ts +3 -0
  185. package/dist/components/icons/overlay.js +4 -0
  186. package/dist/components/icons/prompt-to-video.d.ts +2 -0
  187. package/dist/components/icons/prompt-to-video.js +4 -0
  188. package/dist/components/icons/recorder.d.ts +3 -0
  189. package/dist/components/icons/recorder.js +4 -0
  190. package/dist/components/icons/remix.d.ts +3 -0
  191. package/dist/components/icons/remix.js +4 -0
  192. package/dist/components/icons/render-server.d.ts +3 -0
  193. package/dist/components/icons/render-server.js +4 -0
  194. package/dist/components/icons/skia.d.ts +3 -0
  195. package/dist/components/icons/skia.js +4 -0
  196. package/dist/components/icons/stargazer.d.ts +3 -0
  197. package/dist/components/icons/stargazer.js +4 -0
  198. package/dist/components/icons/still.d.ts +3 -0
  199. package/dist/components/icons/still.js +4 -0
  200. package/dist/components/icons/tailwind.d.ts +3 -0
  201. package/dist/components/icons/tailwind.js +4 -0
  202. package/dist/components/icons/tiktok.d.ts +3 -0
  203. package/dist/components/icons/tiktok.js +4 -0
  204. package/dist/components/icons/timeline.d.ts +3 -0
  205. package/dist/components/icons/timeline.js +4 -0
  206. package/dist/components/icons/ts.d.ts +3 -0
  207. package/dist/components/icons/ts.js +4 -0
  208. package/dist/components/icons/undo.d.ts +3 -0
  209. package/dist/components/icons/undo.js +2 -0
  210. package/dist/components/icons/vercel.d.ts +4 -0
  211. package/dist/components/icons/vercel.js +4 -0
  212. package/dist/components/icons/waveform.d.ts +3 -0
  213. package/dist/components/icons/waveform.js +4 -0
  214. package/dist/components/prompts/CardLikeButton.d.ts +5 -0
  215. package/dist/components/prompts/CardLikeButton.js +49 -0
  216. package/dist/components/prompts/ClipboardIcon.d.ts +5 -0
  217. package/dist/components/prompts/ClipboardIcon.js +4 -0
  218. package/dist/components/prompts/CopyPromptButton.d.ts +4 -0
  219. package/dist/components/prompts/CopyPromptButton.js +13 -0
  220. package/dist/components/prompts/LikeButton.d.ts +5 -0
  221. package/dist/components/prompts/LikeButton.js +49 -0
  222. package/dist/components/prompts/MuxPlayer.d.ts +8 -0
  223. package/dist/components/prompts/MuxPlayer.js +21 -0
  224. package/dist/components/prompts/NewBackButton.d.ts +5 -0
  225. package/dist/components/prompts/NewBackButton.js +8 -0
  226. package/dist/components/prompts/Page.d.ts +8 -0
  227. package/dist/components/prompts/Page.js +7 -0
  228. package/dist/components/prompts/PromptsGallery.d.ts +7 -0
  229. package/dist/components/prompts/PromptsGallery.js +60 -0
  230. package/dist/components/prompts/PromptsShow.d.ts +5 -0
  231. package/dist/components/prompts/PromptsShow.js +17 -0
  232. package/dist/components/prompts/PromptsSubmit.d.ts +2 -0
  233. package/dist/components/prompts/PromptsSubmit.js +173 -0
  234. package/dist/components/prompts/config.d.ts +1 -0
  235. package/dist/components/prompts/config.js +1 -0
  236. package/dist/components/prompts/prompt-helpers.d.ts +8 -0
  237. package/dist/components/prompts/prompt-helpers.js +76 -0
  238. package/dist/components/prompts/prompt-types.d.ts +14 -0
  239. package/dist/components/prompts/prompt-types.js +0 -0
  240. package/dist/components/prompts/use-heart-animation.d.ts +5 -0
  241. package/dist/components/prompts/use-heart-animation.js +29 -0
  242. package/dist/components/team/TeamCards.d.ts +6 -0
  243. package/dist/components/team/TeamCards.js +19 -0
  244. package/dist/components/team/TitleTeamCards.d.ts +2 -0
  245. package/dist/components/team/TitleTeamCards.js +6 -0
  246. package/dist/components/team/TrustSection.d.ts +2 -0
  247. package/dist/components/team/TrustSection.js +59 -0
  248. package/dist/components/team.d.ts +3 -0
  249. package/dist/components/team.js +15 -0
  250. package/dist/components/template-modal-content.d.ts +5 -0
  251. package/dist/components/template-modal-content.js +73 -0
  252. package/dist/components/templates.d.ts +2 -0
  253. package/dist/components/templates.js +27 -0
  254. package/dist/design.js +223 -115
  255. package/dist/experts.js +223 -115
  256. package/dist/helpers/mobile-layout.d.ts +1 -0
  257. package/dist/helpers/mobile-layout.js +6 -0
  258. package/dist/helpers/use-el-size.d.ts +5 -0
  259. package/dist/helpers/use-el-size.js +40 -0
  260. package/dist/homepage/Pricing.js +223 -115
  261. package/dist/main.d.ts +1 -0
  262. package/dist/main.js +6 -0
  263. package/dist/prompts/PromptsGallery.js +223 -115
  264. package/dist/prompts/PromptsShow.js +223 -115
  265. package/dist/prompts/PromptsSubmit.js +223 -115
  266. package/dist/prompts-show.d.ts +1 -0
  267. package/dist/prompts-show.js +20 -0
  268. package/dist/prompts-submit.d.ts +1 -0
  269. package/dist/prompts-submit.js +6 -0
  270. package/dist/prompts.d.ts +1 -0
  271. package/dist/prompts.js +6 -0
  272. package/dist/team.d.ts +1 -0
  273. package/dist/team.js +223 -115
  274. package/dist/template-modal-content.js +223 -115
  275. package/dist/templates.js +223 -115
  276. package/package.json +14 -14
package/dist/Homepage.js CHANGED
@@ -954,6 +954,7 @@ import {
954
954
  } from "react";
955
955
  import { jsx as jsx8 } from "react/jsx-runtime";
956
956
  import { useEffect as useEffect3, useMemo as useMemo10, useRef as useRef4 } from "react";
957
+ import { useRef as useRef5 } from "react";
957
958
  import { jsx as jsx9 } from "react/jsx-runtime";
958
959
  import {
959
960
  forwardRef as forwardRef3,
@@ -962,7 +963,6 @@ import {
962
963
  useMemo as useMemo16,
963
964
  useState as useState6
964
965
  } from "react";
965
- import { useRef as useRef5 } from "react";
966
966
  import { useContext as useContext14, useMemo as useMemo13 } from "react";
967
967
  import { useContext as useContext13 } from "react";
968
968
  import { useContext as useContext12, useMemo as useMemo12 } from "react";
@@ -2416,6 +2416,39 @@ var useCurrentFrame = () => {
2416
2416
  const contextOffset = context ? context.cumulatedFrom + context.relativeFrom : 0;
2417
2417
  return frame - contextOffset;
2418
2418
  };
2419
+ var flattenEffects = (effects) => {
2420
+ const out = [];
2421
+ for (const item of effects) {
2422
+ if (Array.isArray(item)) {
2423
+ for (const inner of item) {
2424
+ out.push(inner);
2425
+ }
2426
+ } else {
2427
+ out.push(item);
2428
+ }
2429
+ }
2430
+ return out;
2431
+ };
2432
+ var groupByBackend = (effects) => {
2433
+ const runs = [];
2434
+ let current = [];
2435
+ let currentBackend = null;
2436
+ for (const eff of effects) {
2437
+ const { backend } = eff.definition;
2438
+ if (currentBackend === null || backend === currentBackend) {
2439
+ current.push(eff);
2440
+ currentBackend = backend;
2441
+ } else {
2442
+ runs.push({ backend: currentBackend, effects: current });
2443
+ current = [eff];
2444
+ currentBackend = backend;
2445
+ }
2446
+ }
2447
+ if (currentBackend !== null && current.length > 0) {
2448
+ runs.push({ backend: currentBackend, effects: current });
2449
+ }
2450
+ return runs;
2451
+ };
2419
2452
 
2420
2453
  class CanvasPool {
2421
2454
  width;
@@ -2489,39 +2522,6 @@ class CanvasPool {
2489
2522
  }
2490
2523
  }
2491
2524
  }
2492
- var flattenEffects = (effects) => {
2493
- const out = [];
2494
- for (const item of effects) {
2495
- if (Array.isArray(item)) {
2496
- for (const inner of item) {
2497
- out.push(inner);
2498
- }
2499
- } else {
2500
- out.push(item);
2501
- }
2502
- }
2503
- return out;
2504
- };
2505
- var groupByBackend = (effects) => {
2506
- const runs = [];
2507
- let current = [];
2508
- let currentBackend = null;
2509
- for (const eff of effects) {
2510
- const { backend } = eff.definition;
2511
- if (currentBackend === null || backend === currentBackend) {
2512
- current.push(eff);
2513
- currentBackend = backend;
2514
- } else {
2515
- runs.push({ backend: currentBackend, effects: current });
2516
- current = [eff];
2517
- currentBackend = backend;
2518
- }
2519
- }
2520
- if (currentBackend !== null && current.length > 0) {
2521
- runs.push({ backend: currentBackend, effects: current });
2522
- }
2523
- return runs;
2524
- };
2525
2525
  var devicePromise = null;
2526
2526
  var getGpuDevice = () => {
2527
2527
  if (devicePromise) {
@@ -2573,8 +2573,7 @@ var runEffectChain = async ({
2573
2573
  }) => {
2574
2574
  const runId = ++state.currentRunId;
2575
2575
  const isCancelled = () => state.currentRunId !== runId;
2576
- const flattened = flattenEffects(effects);
2577
- const runs = groupByBackend(flattened);
2576
+ const runs = groupByBackend(effects);
2578
2577
  let currentImage = source;
2579
2578
  let lastTarget = null;
2580
2579
  if (runs.length === 0) {
@@ -2668,12 +2667,29 @@ var useEffectChainState = () => {
2668
2667
  }
2669
2668
  }), []);
2670
2669
  };
2670
+ var useMemoizedEffects = (effects) => {
2671
+ const previousRef = useRef5(null);
2672
+ const previous = previousRef.current;
2673
+ const isSame = previous !== null && previous.length === effects.length && previous.every((p, i) => p.definition === effects[i].definition && p.effectKey === effects[i].effectKey);
2674
+ if (isSame) {
2675
+ return previous;
2676
+ }
2677
+ const next = effects.map((e) => ({
2678
+ definition: e.definition,
2679
+ stack: e.stack,
2680
+ effectKey: e.effectKey,
2681
+ params: e.params,
2682
+ memoized: true
2683
+ }));
2684
+ previousRef.current = next;
2685
+ return next;
2686
+ };
2671
2687
  var componentsToAddStacksTo = [];
2672
2688
  var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2673
2689
  var addSequenceStackTraces = (component) => {
2674
2690
  componentsToAddStacksTo.push(component);
2675
2691
  };
2676
- var VERSION = "4.0.460";
2692
+ var VERSION = "4.0.461";
2677
2693
  var checkMultipleRemotionVersions = () => {
2678
2694
  if (typeof globalThis === "undefined") {
2679
2695
  return;
@@ -2701,20 +2717,6 @@ Check that all your Remotion packages are on the same version. If your dependenc
2701
2717
  }
2702
2718
  set();
2703
2719
  };
2704
- var useMemoizedEffects = (effects) => {
2705
- const previousRef = useRef5(null);
2706
- const previous = previousRef.current;
2707
- const isSame = previous !== null && previous.length === effects.length && previous.every((p, i) => p.definition === effects[i].definition && p.stack === effects[i].stack);
2708
- if (isSame) {
2709
- return previous;
2710
- }
2711
- const next = effects.map((e) => ({
2712
- definition: e.definition,
2713
- stack: e.stack
2714
- }));
2715
- previousRef.current = next;
2716
- return next;
2717
- };
2718
2720
  var useUnsafeVideoConfig = () => {
2719
2721
  const context = useContext12(SequenceContext);
2720
2722
  const ctxWidth = context?.width ?? null;
@@ -2872,6 +2874,22 @@ var sequenceStyleSchema = {
2872
2874
  step: 0.01,
2873
2875
  default: 1,
2874
2876
  description: "Opacity"
2877
+ },
2878
+ premountFor: {
2879
+ type: "number",
2880
+ default: 0,
2881
+ description: "Premount For",
2882
+ min: 0,
2883
+ step: 1
2884
+ },
2885
+ postmountFor: {
2886
+ type: "hidden"
2887
+ },
2888
+ styleWhilePremounted: {
2889
+ type: "hidden"
2890
+ },
2891
+ styleWhilePostmounted: {
2892
+ type: "hidden"
2875
2893
  }
2876
2894
  };
2877
2895
  var sequenceSchema = {
@@ -2910,7 +2928,7 @@ var SequenceVisibilityToggleContext = React12.createContext({
2910
2928
  throw new Error("SequenceVisibilityToggle not initialized");
2911
2929
  }
2912
2930
  });
2913
- var getCodeValues = (codeValues, nodePath) => {
2931
+ var getCodeValuesCtx = (codeValues, nodePath) => {
2914
2932
  const status = codeValues[nodePathToString(nodePath)];
2915
2933
  if (!status) {
2916
2934
  return;
@@ -2920,27 +2938,15 @@ var getCodeValues = (codeValues, nodePath) => {
2920
2938
  }
2921
2939
  return status.props;
2922
2940
  };
2923
- var getIsJsxInMapCallback = (codeValues, nodePath) => {
2924
- const status = codeValues[nodePathToString(nodePath)];
2925
- if (!status) {
2926
- return false;
2927
- }
2928
- if (!status.canUpdate) {
2929
- return false;
2941
+ var VisualModeCodeValuesContext = React12.createContext({
2942
+ getCodeValues: () => {
2943
+ throw new Error("VisualModeCodeValuesContext not initialized");
2930
2944
  }
2931
- return status.jsxInMapCallback;
2932
- };
2933
- var VisualModeGettersContext = React12.createContext({
2945
+ });
2946
+ var VisualModeDragOverridesContext = React12.createContext({
2934
2947
  getDragOverrides: () => {
2935
- throw new Error("VisualModeGettersContext not initialized");
2936
- },
2937
- getCodeValues: () => {
2938
- throw new Error("VisualModeGettersContext not initialized");
2939
- },
2940
- getIsJsxInMapCallback: () => {
2941
- throw new Error("VisualModeGettersContext not initialized");
2942
- },
2943
- visualModeEnabled: false
2948
+ throw new Error("VisualModeDragOverridesContext not initialized");
2949
+ }
2944
2950
  });
2945
2951
  var VisualModeSettersContext = React12.createContext({
2946
2952
  setDragOverrides: () => {
@@ -2953,7 +2959,7 @@ var VisualModeSettersContext = React12.createContext({
2953
2959
  throw new Error("VisualModeSettersContext not initialized");
2954
2960
  }
2955
2961
  });
2956
- var SequenceManagerProvider = ({ children, visualModeEnabled }) => {
2962
+ var SequenceManagerProvider = ({ children }) => {
2957
2963
  const [sequences, setSequences] = useState4([]);
2958
2964
  const [hidden, setHidden] = useState4({});
2959
2965
  const [dragOverrides, setControlOverrides] = useState4({});
@@ -2983,10 +2989,12 @@ var SequenceManagerProvider = ({ children, visualModeEnabled }) => {
2983
2989
  const setCodeValues = useCallback5((nodePath, values) => {
2984
2990
  setCodeValuesMapState((prev) => {
2985
2991
  const key = nodePathToString(nodePath);
2986
- if (prev[key] === values) {
2992
+ const prevKey = prev[key];
2993
+ const newKey = values(prevKey);
2994
+ if (prevKey === newKey) {
2987
2995
  return prev;
2988
2996
  }
2989
- return { ...prev, [key]: values };
2997
+ return { ...prev, [key]: newKey };
2990
2998
  });
2991
2999
  }, []);
2992
3000
  const registerSequence = useCallback5((seq) => {
@@ -3010,14 +3018,22 @@ var SequenceManagerProvider = ({ children, visualModeEnabled }) => {
3010
3018
  setHidden
3011
3019
  };
3012
3020
  }, [hidden]);
3013
- const gettersContext = useMemo14(() => {
3021
+ const getDragOverrides = useCallback5((nodePath) => {
3022
+ return dragOverrides[nodePathToString(nodePath)] ?? {};
3023
+ }, [dragOverrides]);
3024
+ const getCodeValues = useCallback5((nodePath) => {
3025
+ return getCodeValuesCtx(codeValues, nodePath);
3026
+ }, [codeValues]);
3027
+ const codeValuesContext = useMemo14(() => {
3014
3028
  return {
3015
- visualModeEnabled,
3016
- getDragOverrides: (nodePath) => dragOverrides[nodePathToString(nodePath)] ?? {},
3017
- getCodeValues: (nodePath) => getCodeValues(codeValues, nodePath),
3018
- getIsJsxInMapCallback: (nodePath) => getIsJsxInMapCallback(codeValues, nodePath)
3029
+ getCodeValues
3019
3030
  };
3020
- }, [visualModeEnabled, dragOverrides, codeValues]);
3031
+ }, [getCodeValues]);
3032
+ const dragOverridesContext = useMemo14(() => {
3033
+ return {
3034
+ getDragOverrides
3035
+ };
3036
+ }, [getDragOverrides]);
3021
3037
  const settersContext = useMemo14(() => {
3022
3038
  return {
3023
3039
  setDragOverrides,
@@ -3029,22 +3045,58 @@ var SequenceManagerProvider = ({ children, visualModeEnabled }) => {
3029
3045
  value: sequenceContext,
3030
3046
  children: /* @__PURE__ */ jsx11(SequenceVisibilityToggleContext.Provider, {
3031
3047
  value: hiddenContext,
3032
- children: /* @__PURE__ */ jsx11(VisualModeGettersContext.Provider, {
3033
- value: gettersContext,
3034
- children: /* @__PURE__ */ jsx11(VisualModeSettersContext.Provider, {
3035
- value: settersContext,
3036
- children
3048
+ children: /* @__PURE__ */ jsx11(VisualModeCodeValuesContext.Provider, {
3049
+ value: codeValuesContext,
3050
+ children: /* @__PURE__ */ jsx11(VisualModeDragOverridesContext.Provider, {
3051
+ value: dragOverridesContext,
3052
+ children: /* @__PURE__ */ jsx11(VisualModeSettersContext.Provider, {
3053
+ value: settersContext,
3054
+ children
3055
+ })
3037
3056
  })
3038
3057
  })
3039
3058
  })
3040
3059
  });
3041
3060
  };
3042
3061
  var ENABLE_V5_BREAKING_CHANGES = false;
3062
+ var deleteNestedKey = (obj, keysToRemove) => {
3063
+ for (const key of keysToRemove) {
3064
+ const parts = key.split(".");
3065
+ const parents = [obj];
3066
+ let current = obj;
3067
+ for (let i = 0;i < parts.length - 1; i++) {
3068
+ const part = parts[i];
3069
+ const next = current[part];
3070
+ if (next === undefined || next === null) {
3071
+ current = null;
3072
+ break;
3073
+ }
3074
+ current = next;
3075
+ parents.push(current);
3076
+ }
3077
+ if (current === null) {
3078
+ continue;
3079
+ }
3080
+ delete current[parts[parts.length - 1]];
3081
+ for (let i = parents.length - 1;i > 0; i--) {
3082
+ const parent = parents[i];
3083
+ if (Object.keys(parent).length === 0) {
3084
+ const parentKey = parts[i - 1];
3085
+ delete parents[i - 1][parentKey];
3086
+ } else {
3087
+ break;
3088
+ }
3089
+ }
3090
+ }
3091
+ return obj;
3092
+ };
3043
3093
  var flattenActiveSchema = (schema, resolve) => {
3044
3094
  const out = {};
3045
3095
  for (const key of Object.keys(schema)) {
3046
3096
  const field = schema[key];
3047
- if (field.type === "enum") {
3097
+ if (field.type === "hidden") {
3098
+ continue;
3099
+ } else if (field.type === "enum") {
3048
3100
  out[key] = field;
3049
3101
  const current = resolve(key) ?? field.default;
3050
3102
  const variant = field.variants[current];
@@ -3087,6 +3139,36 @@ var OverrideIdsToNodePathsSettersContext = createContext15({
3087
3139
  throw new Error("OverrideIdsToNodePathsSettersContext not initialized");
3088
3140
  }
3089
3141
  });
3142
+ var findPropsToDelete = ({
3143
+ schema,
3144
+ key,
3145
+ value
3146
+ }) => {
3147
+ const fieldSchema = schema[key];
3148
+ if (!fieldSchema) {
3149
+ throw new Error("Key " + JSON.stringify(key) + " not found in schema");
3150
+ }
3151
+ if (typeof value !== "string") {
3152
+ throw new Error("Value must be a string, but is " + JSON.stringify(value));
3153
+ }
3154
+ if (fieldSchema.type !== "enum") {
3155
+ throw new Error("Key " + JSON.stringify(key) + " is not an enum");
3156
+ }
3157
+ const currentVariant = fieldSchema.variants[value];
3158
+ if (!currentVariant) {
3159
+ throw new Error("Value for " + JSON.stringify(key) + " must be one of " + Object.keys(fieldSchema.variants).map((v) => JSON.stringify(v)).join(", ") + ", got " + JSON.stringify(value));
3160
+ }
3161
+ const otherVariants = Object.keys(fieldSchema.variants).filter((v) => v !== value);
3162
+ const otherKeys = new Set;
3163
+ for (const variant of otherVariants) {
3164
+ const otherVariant = fieldSchema.variants[variant];
3165
+ const keys = Object.keys(otherVariant);
3166
+ for (const k of keys) {
3167
+ otherKeys.add(k);
3168
+ }
3169
+ }
3170
+ return [...otherKeys];
3171
+ };
3090
3172
  var getEffectiveVisualModeValue = ({
3091
3173
  codeValue,
3092
3174
  runtimeValue,
@@ -3132,17 +3214,38 @@ var computeEffectiveSchemaValuesDotNotation = ({
3132
3214
  propStatus
3133
3215
  }) => {
3134
3216
  const merged = {};
3217
+ const propsToDelete = new Set;
3135
3218
  for (const key of Object.keys(currentValue)) {
3136
3219
  const codeValueStatus = propStatus?.[key] ?? null;
3137
- merged[key] = getEffectiveVisualModeValue({
3220
+ const field = findFieldInSchema(schema, key);
3221
+ if (field?.type === "hidden") {
3222
+ continue;
3223
+ }
3224
+ const value = getEffectiveVisualModeValue({
3138
3225
  codeValue: codeValueStatus,
3139
3226
  runtimeValue: currentValue[key],
3140
3227
  dragOverrideValue: overrideValues[key],
3141
- defaultValue: findFieldInSchema(schema, key)?.default,
3228
+ defaultValue: field?.default,
3142
3229
  shouldResortToDefaultValueIfUndefined: false
3143
3230
  });
3231
+ if (value === undefined) {
3232
+ propsToDelete.add(key);
3233
+ }
3234
+ merged[key] = value;
3144
3235
  }
3145
- return merged;
3236
+ for (const key of Object.keys(overrideValues)) {
3237
+ if (schema[key]?.type === "enum") {
3238
+ const propsToDeleteForKey = findPropsToDelete({
3239
+ schema,
3240
+ key,
3241
+ value: merged[key]
3242
+ });
3243
+ for (const propToDelete of propsToDeleteForKey) {
3244
+ propsToDelete.add(propToDelete);
3245
+ }
3246
+ }
3247
+ }
3248
+ return { merged, propsToDelete };
3146
3249
  };
3147
3250
  var getNestedValue = (obj, key) => {
3148
3251
  const parts = key.split(".");
@@ -3167,7 +3270,8 @@ var selectActiveKeys = (schema, values) => {
3167
3270
  var mergeValues = ({
3168
3271
  props,
3169
3272
  valuesDotNotation,
3170
- schemaKeys
3273
+ schemaKeys,
3274
+ propsToDelete
3171
3275
  }) => {
3172
3276
  const merged = { ...props };
3173
3277
  for (const key of schemaKeys) {
@@ -3189,26 +3293,25 @@ var mergeValues = ({
3189
3293
  }
3190
3294
  current[parts[parts.length - 1]] = value;
3191
3295
  }
3296
+ deleteNestedKey(merged, propsToDelete);
3192
3297
  return merged;
3193
3298
  };
3194
3299
  var stackToOverrideMap = {};
3195
3300
  var wrapInSchema = (Component, schema) => {
3196
- if (typeof process === "undefined" || !process.env?.EXPERIMENTAL_VISUAL_MODE_ENABLED) {
3197
- return Component;
3198
- }
3199
3301
  const flatSchema = getFlatSchemaWithAllKeys(schema);
3200
3302
  const flatKeys = Object.keys(flatSchema);
3201
3303
  const Wrapped = forwardRef2((props, ref) => {
3202
3304
  const env = useRemotionEnvironment();
3203
- const { visualModeEnabled, getDragOverrides, getCodeValues: getCodeValues2 } = useContext15(VisualModeGettersContext);
3204
- const nodePathMapping = useContext15(OverrideIdsToNodePathsGettersContext);
3205
- if (!env.isStudio || env.isReadOnlyStudio || env.isRendering || !visualModeEnabled) {
3305
+ if (!env.isStudio || env.isReadOnlyStudio || env.isRendering) {
3206
3306
  return React13.createElement(Component, {
3207
3307
  ...props,
3208
3308
  _experimentalControls: null,
3209
3309
  ref
3210
3310
  });
3211
3311
  }
3312
+ const { getCodeValues } = useContext15(VisualModeCodeValuesContext);
3313
+ const { getDragOverrides } = useContext15(VisualModeDragOverridesContext);
3314
+ const nodePathMapping = useContext15(OverrideIdsToNodePathsGettersContext);
3212
3315
  if (props._experimentalControls) {
3213
3316
  return React13.createElement(Component, {
3214
3317
  ...props,
@@ -3238,24 +3341,25 @@ var wrapInSchema = (Component, schema) => {
3238
3341
  overrideId
3239
3342
  };
3240
3343
  }, [currentRuntimeValueDotNotation, overrideId]);
3241
- const valuesDotNotation = useMemo15(() => {
3344
+ const { merged: valuesDotNotation, propsToDelete } = useMemo15(() => {
3242
3345
  return computeEffectiveSchemaValuesDotNotation({
3243
3346
  schema,
3244
3347
  currentValue: currentRuntimeValueDotNotation,
3245
3348
  overrideValues: nodePath === null ? {} : getDragOverrides(nodePath),
3246
- propStatus: nodePath === null ? undefined : getCodeValues2(nodePath)
3349
+ propStatus: nodePath === null ? undefined : getCodeValues(nodePath)
3247
3350
  });
3248
3351
  }, [
3249
3352
  currentRuntimeValueDotNotation,
3250
3353
  getDragOverrides,
3251
3354
  nodePath,
3252
- getCodeValues2
3355
+ getCodeValues
3253
3356
  ]);
3254
3357
  const activeKeys = selectActiveKeys(schema, valuesDotNotation);
3255
3358
  const mergedProps = mergeValues({
3256
3359
  props,
3257
3360
  valuesDotNotation,
3258
- schemaKeys: activeKeys
3361
+ schemaKeys: activeKeys,
3362
+ propsToDelete
3259
3363
  });
3260
3364
  return React13.createElement(Component, {
3261
3365
  ...mergedProps,
@@ -3351,7 +3455,6 @@ var RegularSequenceRefForwardingFunction = ({
3351
3455
  }, [name]);
3352
3456
  const env = useRemotionEnvironment();
3353
3457
  const inheritedStack = other?.stack ?? null;
3354
- const memoizedEffects = useMemoizedEffects(flattenEffects(_experimentalEffects ?? []));
3355
3458
  useEffect5(() => {
3356
3459
  if (!env.isStudio) {
3357
3460
  return;
@@ -3360,7 +3463,7 @@ var RegularSequenceRefForwardingFunction = ({
3360
3463
  registerSequence({
3361
3464
  type: isMedia.type,
3362
3465
  controls: controls ?? null,
3363
- effects: memoizedEffects,
3466
+ effects: _experimentalEffects ?? [],
3364
3467
  displayName: timelineClipName,
3365
3468
  doesVolumeChange: isMedia.data.doesVolumeChange,
3366
3469
  duration: actualDurationInFrames,
@@ -3398,7 +3501,7 @@ var RegularSequenceRefForwardingFunction = ({
3398
3501
  premountDisplay: premountDisplay ?? null,
3399
3502
  postmountDisplay: postmountDisplay ?? null,
3400
3503
  controls: controls ?? null,
3401
- effects: memoizedEffects
3504
+ effects: _experimentalEffects ?? []
3402
3505
  });
3403
3506
  return () => {
3404
3507
  unregisterSequence(id);
@@ -3423,7 +3526,7 @@ var RegularSequenceRefForwardingFunction = ({
3423
3526
  env.isStudio,
3424
3527
  inheritedStack,
3425
3528
  controls,
3426
- memoizedEffects,
3529
+ _experimentalEffects,
3427
3530
  isMedia
3428
3531
  ]);
3429
3532
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
@@ -3948,8 +4051,9 @@ var HtmlInCanvasInner = forwardRef5(({
3948
4051
  }, [ref]);
3949
4052
  const [offscreenCanvas] = useState8(() => new OffscreenCanvas(1, 1));
3950
4053
  const chainState = useEffectChainState();
3951
- const effectsRef = useRef9(effects);
3952
- effectsRef.current = effects;
4054
+ const memoizedEffects = useMemoizedEffects(flattenEffects(effects));
4055
+ const effectsRef = useRef9(memoizedEffects);
4056
+ effectsRef.current = memoizedEffects;
3953
4057
  const frameRef = useRef9(frame);
3954
4058
  frameRef.current = frame;
3955
4059
  const onPaintRef = useRef9(onPaint);
@@ -4049,7 +4153,7 @@ var HtmlInCanvasInner = forwardRef5(({
4049
4153
  return;
4050
4154
  }
4051
4155
  canvas.requestPaint?.();
4052
- }, [onPaint]);
4156
+ }, [onPaint, memoizedEffects]);
4053
4157
  useLayoutEffect3(() => {
4054
4158
  const canvas = canvas2dRef.current;
4055
4159
  if (!canvas) {
@@ -4076,7 +4180,7 @@ var HtmlInCanvasInner = forwardRef5(({
4076
4180
  durationInFrames: resolvedDuration,
4077
4181
  name: "<HtmlInCanvas>",
4078
4182
  _experimentalControls: controls,
4079
- _experimentalEffects: effects,
4183
+ _experimentalEffects: memoizedEffects,
4080
4184
  layout: "none",
4081
4185
  ...sequenceProps,
4082
4186
  children: /* @__PURE__ */ jsx15(HtmlInCanvasAncestorContext.Provider, {
@@ -7481,10 +7585,13 @@ var makeDefaultPreviewCSS = (scope, backgroundColor) => {
7481
7585
  };
7482
7586
  var defineEffect = (definition) => definition;
7483
7587
  var createDescriptor = (definition, params) => {
7588
+ const widened = definition;
7484
7589
  return {
7485
- definition,
7590
+ definition: widened,
7486
7591
  params,
7487
- stack: new Error().stack
7592
+ stack: new Error().stack,
7593
+ effectKey: widened.calculateKey(params),
7594
+ memoized: false
7488
7595
  };
7489
7596
  };
7490
7597
  var REMOTION_STUDIO_CONTAINER_ELEMENT = "__remotion-studio-container";
@@ -7548,8 +7655,7 @@ var RemotionRootContexts = ({
7548
7655
  audioLatencyHint,
7549
7656
  videoEnabled,
7550
7657
  audioEnabled,
7551
- frameState,
7552
- visualModeEnabled
7658
+ frameState
7553
7659
  }) => {
7554
7660
  const nonceContext = useMemo32(() => {
7555
7661
  let counter = 0;
@@ -7572,7 +7678,6 @@ var RemotionRootContexts = ({
7572
7678
  children: /* @__PURE__ */ jsx29(EditorPropsProvider, {
7573
7679
  children: /* @__PURE__ */ jsx29(PrefetchProvider, {
7574
7680
  children: /* @__PURE__ */ jsx29(SequenceManagerProvider, {
7575
- visualModeEnabled,
7576
7681
  children: /* @__PURE__ */ jsx29(DurationsContextProvider, {
7577
7682
  children: /* @__PURE__ */ jsx29(BufferingProvider, {
7578
7683
  children: /* @__PURE__ */ jsx29(SharedAudioContextProvider, {
@@ -8540,7 +8645,8 @@ var Internals = {
8540
8645
  VideoForPreview,
8541
8646
  CompositionManager,
8542
8647
  CompositionSetters,
8543
- VisualModeGettersContext,
8648
+ VisualModeCodeValuesContext,
8649
+ VisualModeDragOverridesContext,
8544
8650
  VisualModeSettersContext,
8545
8651
  SequenceManager,
8546
8652
  SequenceStackTracesUpdateContext,
@@ -8644,7 +8750,9 @@ var Internals = {
8644
8750
  createDescriptor,
8645
8751
  computeEffectiveSchemaValuesDotNotation,
8646
8752
  OverrideIdsToNodePathsGettersContext,
8647
- OverrideIdsToNodePathsSettersContext
8753
+ OverrideIdsToNodePathsSettersContext,
8754
+ findPropsToDelete,
8755
+ flattenEffects
8648
8756
  };
8649
8757
  var NUMBER = "[-+]?\\d*\\.?\\d+";
8650
8758
  var PERCENTAGE = NUMBER + "%";
@@ -24761,57 +24869,56 @@ import React56 from "react";
24761
24869
  import { useContext as useContext210, useEffect as useEffect42, useState as useState40 } from "react";
24762
24870
  import { useContext as useContext43, useLayoutEffect as useLayoutEffect17 } from "react";
24763
24871
  import { jsx as jsx313 } from "react/jsx-runtime";
24764
- import { useCallback as useCallback34, useRef as useRef42 } from "react";
24765
24872
  import { useEffect as useEffect24, useState as useState24 } from "react";
24766
24873
  import { useLayoutEffect as useLayoutEffect23 } from "react";
24767
- import { useContext as useContext44, useEffect as useEffect52, useRef as useRef52 } from "react";
24768
- import { useEffect as useEffect310, useRef as useRef310 } from "react";
24769
- import { useCallback as useCallback24, useContext as useContext38, useMemo as useMemo51, useRef as useRef26, useState as useState310 } from "react";
24770
- import { useEffect as useEffect43, useRef as useRef43 } from "react";
24771
- import { useCallback as useCallback35, useEffect as useEffect62, useMemo as useMemo212, useState as useState42 } from "react";
24874
+ import { useContext as useContext44, useEffect as useEffect52, useRef as useRef42 } from "react";
24875
+ import { useEffect as useEffect310, useRef as useRef26 } from "react";
24876
+ import { useCallback as useCallback34, useContext as useContext38, useMemo as useMemo51, useRef as useRef43, useState as useState310 } from "react";
24877
+ import { useEffect as useEffect43, useRef as useRef310 } from "react";
24878
+ import { useCallback as useCallback24, useEffect as useEffect62, useMemo as useMemo212, useState as useState42 } from "react";
24772
24879
  import {
24773
24880
  forwardRef as forwardRef210,
24774
24881
  useEffect as useEffect132,
24775
24882
  useImperativeHandle as useImperativeHandle22,
24776
24883
  useLayoutEffect as useLayoutEffect33,
24777
24884
  useMemo as useMemo142,
24778
- useRef as useRef122,
24885
+ useRef as useRef112,
24779
24886
  useState as useState132
24780
24887
  } from "react";
24781
24888
  import React102, {
24782
24889
  Suspense as Suspense2,
24783
24890
  forwardRef as forwardRef33,
24784
- useCallback as useCallback112,
24891
+ useCallback as useCallback102,
24785
24892
  useContext as useContext52,
24786
24893
  useEffect as useEffect122,
24787
24894
  useImperativeHandle as useImperativeHandle10,
24788
24895
  useMemo as useMemo122,
24789
- useRef as useRef112,
24896
+ useRef as useRef102,
24790
24897
  useState as useState113
24791
24898
  } from "react";
24792
24899
  import React310 from "react";
24793
24900
  import { jsx as jsx410 } from "react/jsx-runtime";
24794
24901
  import React410, { useEffect as useEffect72 } from "react";
24795
24902
  import { jsx as jsx55 } from "react/jsx-runtime";
24796
- import { useCallback as useCallback82, useEffect as useEffect112, useMemo as useMemo92, useRef as useRef92, useState as useState102 } from "react";
24903
+ import { useCallback as useCallback72, useEffect as useEffect112, useMemo as useMemo92, useRef as useRef82, useState as useState102 } from "react";
24797
24904
  import { jsx as jsx64 } from "react/jsx-runtime";
24798
- import { useCallback as useCallback52, useMemo as useMemo410, useRef as useRef62, useState as useState62 } from "react";
24799
- import React54, { useCallback as useCallback42, useMemo as useMemo39, useState as useState52 } from "react";
24905
+ import { useCallback as useCallback42, useMemo as useMemo410, useRef as useRef52, useState as useState62 } from "react";
24906
+ import React54, { useCallback as useCallback35, useMemo as useMemo39, useState as useState52 } from "react";
24800
24907
  import { jsx as jsx74, jsxs as jsxs33 } from "react/jsx-runtime";
24801
24908
  import { jsx as jsx84, jsxs as jsxs43 } from "react/jsx-runtime";
24802
- import { useCallback as useCallback62, useEffect as useEffect92, useMemo as useMemo52, useState as useState82 } from "react";
24803
- import { useEffect as useEffect83, useRef as useRef72, useState as useState72 } from "react";
24909
+ import { useCallback as useCallback52, useEffect as useEffect92, useMemo as useMemo52, useState as useState82 } from "react";
24910
+ import { useEffect as useEffect83, useRef as useRef62, useState as useState72 } from "react";
24804
24911
  import { jsx as jsx94, jsxs as jsxs53 } from "react/jsx-runtime";
24805
- import { useCallback as useCallback72, useEffect as useEffect102, useMemo as useMemo62, useRef as useRef82, useState as useState92 } from "react";
24912
+ import { useCallback as useCallback62, useEffect as useEffect102, useMemo as useMemo62, useRef as useRef72, useState as useState92 } from "react";
24806
24913
  import { jsx as jsx104, jsxs as jsxs62 } from "react/jsx-runtime";
24807
24914
  import { useMemo as useMemo72 } from "react";
24808
24915
  import { jsxs as jsxs72 } from "react/jsx-runtime";
24809
24916
  import { useMemo as useMemo82 } from "react";
24810
24917
  import { jsx as jsx113, jsxs as jsxs82, Fragment as Fragment23 } from "react/jsx-runtime";
24811
- import { useCallback as useCallback102, useMemo as useMemo112 } from "react";
24812
- import { useCallback as useCallback92, useMemo as useMemo102, useRef as useRef102 } from "react";
24918
+ import { useCallback as useCallback92, useMemo as useMemo112 } from "react";
24919
+ import { useCallback as useCallback82, useMemo as useMemo102, useRef as useRef92 } from "react";
24813
24920
  import { jsx as jsx123, jsxs as jsxs92, Fragment as Fragment32 } from "react/jsx-runtime";
24814
- import { useCallback as useCallback122, useMemo as useMemo132, useState as useState122 } from "react";
24921
+ import { useCallback as useCallback112, useMemo as useMemo132, useState as useState122 } from "react";
24815
24922
  import { jsx as jsx133 } from "react/jsx-runtime";
24816
24923
 
24817
24924
  // ../core/dist/esm/no-react.mjs
@@ -24928,6 +25035,36 @@ var DELAY_RENDER_CALLSTACK_TOKEN2 = "The delayRender was called:";
24928
25035
  var DELAY_RENDER_RETRIES_LEFT2 = "Retries left: ";
24929
25036
  var DELAY_RENDER_RETRY_TOKEN2 = "- Rendering the frame will be retried.";
24930
25037
  var DELAY_RENDER_CLEAR_TOKEN2 = "handle was cleared after";
25038
+ var findPropsToDelete2 = ({
25039
+ schema,
25040
+ key,
25041
+ value
25042
+ }) => {
25043
+ const fieldSchema = schema[key];
25044
+ if (!fieldSchema) {
25045
+ throw new Error("Key " + JSON.stringify(key) + " not found in schema");
25046
+ }
25047
+ if (typeof value !== "string") {
25048
+ throw new Error("Value must be a string, but is " + JSON.stringify(value));
25049
+ }
25050
+ if (fieldSchema.type !== "enum") {
25051
+ throw new Error("Key " + JSON.stringify(key) + " is not an enum");
25052
+ }
25053
+ const currentVariant = fieldSchema.variants[value];
25054
+ if (!currentVariant) {
25055
+ throw new Error("Value for " + JSON.stringify(key) + " must be one of " + Object.keys(fieldSchema.variants).map((v) => JSON.stringify(v)).join(", ") + ", got " + JSON.stringify(value));
25056
+ }
25057
+ const otherVariants = Object.keys(fieldSchema.variants).filter((v) => v !== value);
25058
+ const otherKeys = new Set;
25059
+ for (const variant of otherVariants) {
25060
+ const otherVariant = fieldSchema.variants[variant];
25061
+ const keys = Object.keys(otherVariant);
25062
+ for (const k of keys) {
25063
+ otherKeys.add(k);
25064
+ }
25065
+ }
25066
+ return [...otherKeys];
25067
+ };
24931
25068
  var DATE_TOKEN2 = "remotion-date:";
24932
25069
  var FILE_TOKEN2 = "remotion-file:";
24933
25070
  var serializeJSONWithSpecialTypes2 = ({
@@ -25595,7 +25732,8 @@ var NoReactInternals = {
25595
25732
  DATE_TOKEN: DATE_TOKEN2,
25596
25733
  FILE_TOKEN: FILE_TOKEN2,
25597
25734
  validateCodec: validateCodec2,
25598
- proResProfileOptions
25735
+ proResProfileOptions,
25736
+ findPropsToDelete: findPropsToDelete2
25599
25737
  };
25600
25738
 
25601
25739
  // ../player/dist/esm/index.mjs
@@ -25605,16 +25743,16 @@ import {
25605
25743
  useImperativeHandle as useImperativeHandle42,
25606
25744
  useLayoutEffect as useLayoutEffect42,
25607
25745
  useMemo as useMemo172,
25608
- useRef as useRef142,
25746
+ useRef as useRef132,
25609
25747
  useState as useState142
25610
25748
  } from "react";
25611
25749
  import React133, {
25612
25750
  forwardRef as forwardRef34,
25613
25751
  Suspense as Suspense22,
25614
- useCallback as useCallback132,
25752
+ useCallback as useCallback122,
25615
25753
  useImperativeHandle as useImperativeHandle32,
25616
25754
  useMemo as useMemo162,
25617
- useRef as useRef132
25755
+ useRef as useRef122
25618
25756
  } from "react";
25619
25757
  import { useContext as useContext62, useMemo as useMemo152 } from "react";
25620
25758
  import { jsx as jsx153 } from "react/jsx-runtime";
@@ -26132,13 +26270,13 @@ var usePlayer = () => {
26132
26270
  const [playing, setPlaying, imperativePlaying] = Internals.Timeline.usePlayingState();
26133
26271
  const [hasPlayed, setHasPlayed] = useState310(false);
26134
26272
  const frame = Internals.Timeline.useTimelinePosition();
26135
- const playStart = useRef26(frame);
26273
+ const playStart = useRef43(frame);
26136
26274
  const setFrame = Internals.Timeline.useTimelineSetFrame();
26137
26275
  const setTimelinePosition = Internals.Timeline.useTimelineSetFrame();
26138
26276
  const audioContext = useContext38(Internals.SharedAudioContext);
26139
26277
  const audioTagsContext = useContext38(Internals.SharedAudioTagsContext);
26140
26278
  const { audioAndVideoTags } = Internals.useTimelineContext();
26141
- const frameRef = useRef26(frame);
26279
+ const frameRef = useRef43(frame);
26142
26280
  frameRef.current = frame;
26143
26281
  const video = Internals.useVideo();
26144
26282
  const config = Internals.useUnsafeVideoConfig();
@@ -26154,14 +26292,14 @@ var usePlayer = () => {
26154
26292
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
26155
26293
  }
26156
26294
  const { buffering } = bufferingContext;
26157
- const seek2 = useCallback24((newFrame) => {
26295
+ const seek2 = useCallback34((newFrame) => {
26158
26296
  if (video?.id) {
26159
26297
  setTimelinePosition((c) => ({ ...c, [video.id]: newFrame }));
26160
26298
  }
26161
26299
  frameRef.current = newFrame;
26162
26300
  emitter.dispatchSeek(newFrame);
26163
26301
  }, [emitter, setTimelinePosition, video?.id]);
26164
- const play = useCallback24((e) => {
26302
+ const play = useCallback34((e) => {
26165
26303
  if (imperativePlaying.current) {
26166
26304
  return;
26167
26305
  }
@@ -26188,7 +26326,7 @@ var usePlayer = () => {
26188
26326
  seek2,
26189
26327
  audioAndVideoTags
26190
26328
  ]);
26191
- const pause = useCallback24(() => {
26329
+ const pause = useCallback34(() => {
26192
26330
  if (imperativePlaying.current) {
26193
26331
  imperativePlaying.current = false;
26194
26332
  setPlaying(false);
@@ -26196,7 +26334,7 @@ var usePlayer = () => {
26196
26334
  audioContext?.suspend();
26197
26335
  }
26198
26336
  }, [emitter, imperativePlaying, setPlaying, audioContext]);
26199
- const pauseAndReturnToPlayStart = useCallback24(() => {
26337
+ const pauseAndReturnToPlayStart = useCallback34(() => {
26200
26338
  if (imperativePlaying.current) {
26201
26339
  imperativePlaying.current = false;
26202
26340
  frameRef.current = playStart.current;
@@ -26211,7 +26349,7 @@ var usePlayer = () => {
26211
26349
  }
26212
26350
  }, [config, emitter, imperativePlaying, setPlaying, setTimelinePosition]);
26213
26351
  const videoId = video?.id;
26214
- const frameBack = useCallback24((frames) => {
26352
+ const frameBack = useCallback34((frames) => {
26215
26353
  if (!videoId) {
26216
26354
  return null;
26217
26355
  }
@@ -26230,7 +26368,7 @@ var usePlayer = () => {
26230
26368
  };
26231
26369
  });
26232
26370
  }, [imperativePlaying, setFrame, videoId]);
26233
- const frameForward = useCallback24((frames) => {
26371
+ const frameForward = useCallback34((frames) => {
26234
26372
  if (!videoId) {
26235
26373
  return null;
26236
26374
  }
@@ -26249,20 +26387,20 @@ var usePlayer = () => {
26249
26387
  };
26250
26388
  });
26251
26389
  }, [videoId, imperativePlaying, lastFrame, setFrame]);
26252
- const toggle = useCallback24((e) => {
26390
+ const toggle = useCallback34((e) => {
26253
26391
  if (imperativePlaying.current) {
26254
26392
  pause();
26255
26393
  } else {
26256
26394
  play(e);
26257
26395
  }
26258
26396
  }, [imperativePlaying, pause, play]);
26259
- const isPlaying = useCallback24(() => {
26397
+ const isPlaying = useCallback34(() => {
26260
26398
  return imperativePlaying.current;
26261
26399
  }, [imperativePlaying]);
26262
- const getCurrentFrame = useCallback24(() => {
26400
+ const getCurrentFrame = useCallback34(() => {
26263
26401
  return frameRef.current;
26264
26402
  }, [frameRef]);
26265
- const isBuffering = useCallback24(() => {
26403
+ const isBuffering = useCallback34(() => {
26266
26404
  return buffering.current;
26267
26405
  }, [buffering]);
26268
26406
  const returnValue = useMemo51(() => {
@@ -26308,7 +26446,7 @@ var useBrowserMediaSession = ({
26308
26446
  playbackRate
26309
26447
  }) => {
26310
26448
  const { playing, pause, play, emitter, getCurrentFrame, seek: seek2 } = usePlayer();
26311
- const hasEverPlayed = useRef310(false);
26449
+ const hasEverPlayed = useRef26(false);
26312
26450
  useEffect310(() => {
26313
26451
  if (playing) {
26314
26452
  hasEverPlayed.current = true;
@@ -26450,7 +26588,7 @@ var getIsBackgrounded = () => {
26450
26588
  return document.visibilityState === "hidden";
26451
26589
  };
26452
26590
  var useIsBackgrounded = () => {
26453
- const isBackgrounded = useRef43(getIsBackgrounded());
26591
+ const isBackgrounded = useRef310(getIsBackgrounded());
26454
26592
  useEffect43(() => {
26455
26593
  const onVisibilityChange = () => {
26456
26594
  isBackgrounded.current = getIsBackgrounded();
@@ -26500,7 +26638,7 @@ var usePlayback = ({
26500
26638
  const sharedAudioContext = useContext44(Internals.SharedAudioContext);
26501
26639
  const logLevel = Internals.useLogLevel();
26502
26640
  const isBackgroundedRef = useIsBackgrounded();
26503
- const lastTimeUpdateTimestamp = useRef52(0);
26641
+ const lastTimeUpdateTimestamp = useRef42(0);
26504
26642
  const context = useContext44(Internals.BufferingContextReact);
26505
26643
  if (!context) {
26506
26644
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
@@ -26767,7 +26905,7 @@ var useElementSize = (ref, options2) => {
26767
26905
  });
26768
26906
  });
26769
26907
  }, [options2.shouldApplyCssTransforms]);
26770
- const updateSize = useCallback35(() => {
26908
+ const updateSize = useCallback24(() => {
26771
26909
  if (!ref.current) {
26772
26910
  return;
26773
26911
  }
@@ -26988,7 +27126,7 @@ var DefaultVolumeSlider = ({
26988
27126
  }, [isVertical]);
26989
27127
  const randomId = typeof React54.useId === "undefined" ? "volume-slider" : React54.useId();
26990
27128
  const [randomClass] = useState52(() => `__remotion-volume-slider-${random(randomId)}`.replace(".", ""));
26991
- const onVolumeChange = useCallback42((e) => {
27129
+ const onVolumeChange = useCallback35((e) => {
26992
27130
  setVolume(parseFloat(e.target.value));
26993
27131
  }, [setVolume]);
26994
27132
  const inputStyle = useMemo39(() => {
@@ -27065,10 +27203,10 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
27065
27203
  const [mediaMuted, setMediaMuted] = Internals.useMediaMutedState();
27066
27204
  const [mediaVolume, setMediaVolume] = Internals.useMediaVolumeState();
27067
27205
  const [focused, setFocused] = useState62(false);
27068
- const parentDivRef = useRef62(null);
27069
- const inputRef = useRef62(null);
27206
+ const parentDivRef = useRef52(null);
27207
+ const inputRef = useRef52(null);
27070
27208
  const hover = useHoverState(parentDivRef, false);
27071
- const onBlur = useCallback52(() => {
27209
+ const onBlur = useCallback42(() => {
27072
27210
  setTimeout(() => {
27073
27211
  if (inputRef.current && document.activeElement !== inputRef.current) {
27074
27212
  setFocused(false);
@@ -27076,7 +27214,7 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
27076
27214
  }, 10);
27077
27215
  }, []);
27078
27216
  const isVolume0 = mediaVolume === 0;
27079
- const onClick = useCallback52(() => {
27217
+ const onClick = useCallback42(() => {
27080
27218
  if (isVolume0) {
27081
27219
  setMediaVolume(1);
27082
27220
  setMediaMuted(false);
@@ -27107,7 +27245,7 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
27107
27245
  padding: 0
27108
27246
  };
27109
27247
  }, []);
27110
- const renderDefaultMuteButton = useCallback52(({ muted, volume }) => {
27248
+ const renderDefaultMuteButton = useCallback42(({ muted, volume }) => {
27111
27249
  const isMutedOrZero = muted || volume === 0;
27112
27250
  return /* @__PURE__ */ jsx84("button", {
27113
27251
  "aria-label": isMutedOrZero ? "Unmute sound" : "Mute sound",
@@ -27151,7 +27289,7 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
27151
27289
  };
27152
27290
  function useComponentVisible(initialIsVisible) {
27153
27291
  const [isComponentVisible, setIsComponentVisible] = useState72(initialIsVisible);
27154
- const ref = useRef72(null);
27292
+ const ref = useRef62(null);
27155
27293
  useEffect83(() => {
27156
27294
  const handleClickOutside = (event) => {
27157
27295
  if (ref.current && !ref.current.contains(event.target)) {
@@ -27198,16 +27336,16 @@ var formatPlaybackRate = (rate) => {
27198
27336
  return str.includes(".") ? str : str + ".0";
27199
27337
  };
27200
27338
  var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }) => {
27201
- const onClick = useCallback62((e) => {
27339
+ const onClick = useCallback52((e) => {
27202
27340
  e.stopPropagation();
27203
27341
  e.preventDefault();
27204
27342
  onSelect(rate);
27205
27343
  }, [onSelect, rate]);
27206
27344
  const [hovered, setHovered] = useState82(false);
27207
- const onMouseEnter = useCallback62(() => {
27345
+ const onMouseEnter = useCallback52(() => {
27208
27346
  setHovered(true);
27209
27347
  }, []);
27210
- const onMouseLeave = useCallback62(() => {
27348
+ const onMouseLeave = useCallback52(() => {
27211
27349
  setHovered(false);
27212
27350
  }, []);
27213
27351
  const isFocused = keyboardSelectedRate === rate;
@@ -27274,7 +27412,7 @@ var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
27274
27412
  setPlaybackRate,
27275
27413
  setIsComponentVisible
27276
27414
  ]);
27277
- const onSelect = useCallback62((rate) => {
27415
+ const onSelect = useCallback52((rate) => {
27278
27416
  setPlaybackRate(rate);
27279
27417
  setIsComponentVisible(false);
27280
27418
  }, [setIsComponentVisible, setPlaybackRate]);
@@ -27337,7 +27475,7 @@ var button = {
27337
27475
  var PlaybackrateControl = ({ playbackRates, canvasSize }) => {
27338
27476
  const { ref, isComponentVisible, setIsComponentVisible } = useComponentVisible(false);
27339
27477
  const { playbackRate } = Internals.usePlaybackRate();
27340
- const onClick = useCallback62((e) => {
27478
+ const onClick = useCallback52((e) => {
27341
27479
  e.stopPropagation();
27342
27480
  e.preventDefault();
27343
27481
  setIsComponentVisible((prevIsComponentVisible) => !prevIsComponentVisible);
@@ -27401,7 +27539,7 @@ var findBodyInWhichDivIsLocated = (div) => {
27401
27539
  return current;
27402
27540
  };
27403
27541
  var PlayerSeekBar = ({ durationInFrames, onSeekEnd, onSeekStart, inFrame, outFrame }) => {
27404
- const containerRef = useRef82(null);
27542
+ const containerRef = useRef72(null);
27405
27543
  const barHovered = useHoverState(containerRef, false);
27406
27544
  const size4 = useElementSize(containerRef, {
27407
27545
  triggerOnWindowResize: true,
@@ -27413,7 +27551,7 @@ var PlayerSeekBar = ({ durationInFrames, onSeekEnd, onSeekStart, inFrame, outFra
27413
27551
  dragging: false
27414
27552
  });
27415
27553
  const width = size4?.width ?? 0;
27416
- const onPointerDown = useCallback72((e) => {
27554
+ const onPointerDown = useCallback62((e) => {
27417
27555
  if (e.button !== 0) {
27418
27556
  return;
27419
27557
  }
@@ -27427,7 +27565,7 @@ var PlayerSeekBar = ({ durationInFrames, onSeekEnd, onSeekStart, inFrame, outFra
27427
27565
  });
27428
27566
  onSeekStart();
27429
27567
  }, [durationInFrames, width, pause, seek2, playing, onSeekStart]);
27430
- const onPointerMove = useCallback72((e) => {
27568
+ const onPointerMove = useCallback62((e) => {
27431
27569
  if (!size4) {
27432
27570
  throw new Error("Player has no size");
27433
27571
  }
@@ -27438,7 +27576,7 @@ var PlayerSeekBar = ({ durationInFrames, onSeekEnd, onSeekStart, inFrame, outFra
27438
27576
  const _frame = getFrameFromX(e.clientX - posLeft, durationInFrames, size4.width);
27439
27577
  seek2(_frame);
27440
27578
  }, [dragging.dragging, durationInFrames, seek2, size4]);
27441
- const onPointerUp = useCallback72(() => {
27579
+ const onPointerUp = useCallback62(() => {
27442
27580
  setDragging({
27443
27581
  dragging: false
27444
27582
  });
@@ -27678,7 +27816,7 @@ var Controls = ({
27678
27816
  toggle,
27679
27817
  renderCustomControls
27680
27818
  }) => {
27681
- const playButtonRef = useRef92(null);
27819
+ const playButtonRef = useRef82(null);
27682
27820
  const [supportsFullscreen, setSupportsFullscreen] = useState102(false);
27683
27821
  const hovered = useHoverState(containerRef, hideControlsWhenPointerDoesntMove);
27684
27822
  const { maxTimeLabelWidth, displayVerticalVolumeSlider } = useVideoControlsResize({
@@ -27753,14 +27891,14 @@ var Controls = ({
27753
27891
  return null;
27754
27892
  }, [showPlaybackRateControl]);
27755
27893
  const customControlsElement = renderCustomControls ? renderCustomControls() : null;
27756
- const ref = useRef92(null);
27757
- const flexRef = useRef92(null);
27758
- const onPointerDownIfContainer = useCallback82((e) => {
27894
+ const ref = useRef82(null);
27895
+ const flexRef = useRef82(null);
27896
+ const onPointerDownIfContainer = useCallback72((e) => {
27759
27897
  if (e.target === ref.current || e.target === flexRef.current) {
27760
27898
  onPointerDown?.(e);
27761
27899
  }
27762
27900
  }, [onPointerDown]);
27763
- const onDoubleClickIfContainer = useCallback82((e) => {
27901
+ const onDoubleClickIfContainer = useCallback72((e) => {
27764
27902
  if (e.target === ref.current || e.target === flexRef.current) {
27765
27903
  onDoubleClick?.(e);
27766
27904
  }
@@ -27886,14 +28024,14 @@ var cancellablePromise = (promise) => {
27886
28024
  };
27887
28025
  var delay = (n) => new Promise((resolve) => setTimeout(resolve, n));
27888
28026
  var useCancellablePromises = () => {
27889
- const pendingPromises = useRef102([]);
27890
- const appendPendingPromise = useCallback92((promise) => {
28027
+ const pendingPromises = useRef92([]);
28028
+ const appendPendingPromise = useCallback82((promise) => {
27891
28029
  pendingPromises.current = [...pendingPromises.current, promise];
27892
28030
  }, []);
27893
- const removePendingPromise = useCallback92((promise) => {
28031
+ const removePendingPromise = useCallback82((promise) => {
27894
28032
  pendingPromises.current = pendingPromises.current.filter((p) => p !== promise);
27895
28033
  }, []);
27896
- const clearPendingPromises = useCallback92(() => pendingPromises.current.map((p) => p.cancel()), []);
28034
+ const clearPendingPromises = useCallback82(() => pendingPromises.current.map((p) => p.cancel()), []);
27897
28035
  const api = useMemo102(() => ({
27898
28036
  appendPendingPromise,
27899
28037
  removePendingPromise,
@@ -27903,7 +28041,7 @@ var useCancellablePromises = () => {
27903
28041
  };
27904
28042
  var useClickPreventionOnDoubleClick = (onClick, onDoubleClick, doubleClickToFullscreen) => {
27905
28043
  const api = useCancellablePromises();
27906
- const handleClick = useCallback102(async (e) => {
28044
+ const handleClick = useCallback92(async (e) => {
27907
28045
  if (e instanceof PointerEvent ? e.pointerType === "touch" : e.nativeEvent.pointerType === "touch") {
27908
28046
  onClick(e);
27909
28047
  return;
@@ -27923,14 +28061,14 @@ var useClickPreventionOnDoubleClick = (onClick, onDoubleClick, doubleClickToFull
27923
28061
  }
27924
28062
  }
27925
28063
  }, [api, onClick]);
27926
- const handlePointerDown = useCallback102(() => {
28064
+ const handlePointerDown = useCallback92(() => {
27927
28065
  document.addEventListener("pointerup", (newEvt) => {
27928
28066
  handleClick(newEvt);
27929
28067
  }, {
27930
28068
  once: true
27931
28069
  });
27932
28070
  }, [handleClick]);
27933
- const handleDoubleClick = useCallback102(() => {
28071
+ const handleDoubleClick = useCallback92(() => {
27934
28072
  api.clearPendingPromises();
27935
28073
  onDoubleClick();
27936
28074
  }, [api, onDoubleClick]);
@@ -27991,7 +28129,7 @@ var PlayerUI = ({
27991
28129
  }, ref) => {
27992
28130
  const config = Internals.useUnsafeVideoConfig();
27993
28131
  const video = Internals.useVideo();
27994
- const container4 = useRef112(null);
28132
+ const container4 = useRef102(null);
27995
28133
  const canvasSize = useElementSize(container4, {
27996
28134
  triggerOnWindowResize: false,
27997
28135
  shouldApplyCssTransforms: false
@@ -28050,10 +28188,10 @@ var PlayerUI = ({
28050
28188
  document.removeEventListener("webkitfullscreenchange", onFullscreenChange);
28051
28189
  };
28052
28190
  }, []);
28053
- const toggle = useCallback112((e) => {
28191
+ const toggle = useCallback102((e) => {
28054
28192
  playerToggle(e);
28055
28193
  }, [playerToggle]);
28056
- const requestFullscreen = useCallback112(() => {
28194
+ const requestFullscreen = useCallback102(() => {
28057
28195
  if (!allowFullscreen) {
28058
28196
  throw new Error("allowFullscreen is false");
28059
28197
  }
@@ -28069,7 +28207,7 @@ var PlayerUI = ({
28069
28207
  container4.current.requestFullscreen();
28070
28208
  }
28071
28209
  }, [allowFullscreen, supportsFullScreen]);
28072
- const exitFullscreen = useCallback112(() => {
28210
+ const exitFullscreen = useCallback102(() => {
28073
28211
  if (document.webkitExitFullscreen) {
28074
28212
  document.webkitExitFullscreen();
28075
28213
  } else {
@@ -28113,7 +28251,7 @@ var PlayerUI = ({
28113
28251
  });
28114
28252
  }, [canvasSize, config]);
28115
28253
  const scale = layout?.scale ?? 1;
28116
- const initialScaleIgnored = useRef112(false);
28254
+ const initialScaleIgnored = useRef102(false);
28117
28255
  useEffect122(() => {
28118
28256
  if (!initialScaleIgnored.current) {
28119
28257
  initialScaleIgnored.current = true;
@@ -28262,32 +28400,32 @@ var PlayerUI = ({
28262
28400
  }, [config, layout, overflowVisible, scale]);
28263
28401
  const playerPause = player.pause;
28264
28402
  const playerDispatchError = player.emitter.dispatchError;
28265
- const onError = useCallback112((error2) => {
28403
+ const onError = useCallback102((error2) => {
28266
28404
  playerPause();
28267
28405
  playerDispatchError(error2);
28268
28406
  }, [playerDispatchError, playerPause]);
28269
- const onFullscreenButtonClick = useCallback112((e) => {
28407
+ const onFullscreenButtonClick = useCallback102((e) => {
28270
28408
  e.stopPropagation();
28271
28409
  requestFullscreen();
28272
28410
  }, [requestFullscreen]);
28273
- const onExitFullscreenButtonClick = useCallback112((e) => {
28411
+ const onExitFullscreenButtonClick = useCallback102((e) => {
28274
28412
  e.stopPropagation();
28275
28413
  exitFullscreen();
28276
28414
  }, [exitFullscreen]);
28277
- const onSingleClick = useCallback112((e) => {
28415
+ const onSingleClick = useCallback102((e) => {
28278
28416
  const rightClick = e instanceof MouseEvent ? e.button === 2 : e.nativeEvent.button;
28279
28417
  if (rightClick) {
28280
28418
  return;
28281
28419
  }
28282
28420
  toggle(e);
28283
28421
  }, [toggle]);
28284
- const onSeekStart = useCallback112(() => {
28422
+ const onSeekStart = useCallback102(() => {
28285
28423
  setSeeking(true);
28286
28424
  }, []);
28287
- const onSeekEnd = useCallback112(() => {
28425
+ const onSeekEnd = useCallback102(() => {
28288
28426
  setSeeking(false);
28289
28427
  }, []);
28290
- const onDoubleClick = useCallback112(() => {
28428
+ const onDoubleClick = useCallback102(() => {
28291
28429
  if (isFullscreen) {
28292
28430
  exitFullscreen();
28293
28431
  } else {
@@ -28520,7 +28658,7 @@ var SharedPlayerContexts = ({
28520
28658
  mediaVolume
28521
28659
  };
28522
28660
  }, [mediaMuted, mediaVolume]);
28523
- const setMediaVolumeAndPersist = useCallback122((vol) => {
28661
+ const setMediaVolumeAndPersist = useCallback112((vol) => {
28524
28662
  setMediaVolume(vol);
28525
28663
  if (persistVolumeToStorage) {
28526
28664
  persistVolume(vol, logLevel, volumePersistenceKey ?? null);
@@ -28771,9 +28909,9 @@ var PlayerFn = ({
28771
28909
  }));
28772
28910
  const [playing, setPlaying] = useState132(false);
28773
28911
  const [rootId] = useState132("player-comp");
28774
- const rootRef = useRef122(null);
28775
- const audioAndVideoTags = useRef122([]);
28776
- const imperativePlaying = useRef122(false);
28912
+ const rootRef = useRef112(null);
28913
+ const audioAndVideoTags = useRef112([]);
28914
+ const imperativePlaying = useRef112(false);
28777
28915
  const [currentPlaybackRate, setCurrentPlaybackRate] = useState132(playbackRate);
28778
28916
  if (typeof compositionHeight !== "number") {
28779
28917
  throw new TypeError(`'compositionHeight' must be a number but got '${typeof compositionHeight}' instead`);
@@ -28970,7 +29108,7 @@ var ThumbnailUI = ({
28970
29108
  }, ref) => {
28971
29109
  const config = Internals.useUnsafeVideoConfig();
28972
29110
  const video = Internals.useVideo();
28973
- const container4 = useRef132(null);
29111
+ const container4 = useRef122(null);
28974
29112
  const canvasSize = useElementSize(container4, {
28975
29113
  triggerOnWindowResize: false,
28976
29114
  shouldApplyCssTransforms: false
@@ -29017,7 +29155,7 @@ var ThumbnailUI = ({
29017
29155
  overflowVisible
29018
29156
  });
29019
29157
  }, [config, layout, overflowVisible, scale]);
29020
- const onError = useCallback132((error2) => {
29158
+ const onError = useCallback122((error2) => {
29021
29159
  thumbnail.emitter.dispatchError(error2);
29022
29160
  }, [thumbnail.emitter]);
29023
29161
  const loadingMarkup = useMemo162(() => {
@@ -29096,7 +29234,7 @@ var ThumbnailFn = ({
29096
29234
  }, []);
29097
29235
  }
29098
29236
  const [thumbnailId] = useState142(() => String(random(null)));
29099
- const rootRef = useRef142(null);
29237
+ const rootRef = useRef132(null);
29100
29238
  const timelineState = useMemo172(() => {
29101
29239
  const value = {
29102
29240
  playing: false,
@@ -29946,7 +30084,7 @@ function useColorMode() {
29946
30084
  // ../media/dist/esm/index.mjs
29947
30085
  import { useState as useState312 } from "react";
29948
30086
  import { useMemo as useMemo311 } from "react";
29949
- import { useContext as useContext212, useEffect as useEffect44, useMemo as useMemo55, useRef as useRef44, useState as useState41 } from "react";
30087
+ import { useContext as useContext212, useEffect as useEffect44, useMemo as useMemo55, useRef as useRef45, useState as useState41 } from "react";
29950
30088
  import { ALL_FORMATS, Input as Input2, UrlSource } from "mediabunny";
29951
30089
  import { AudioBufferSink, InputDisposedError } from "mediabunny";
29952
30090
  import { CanvasSink } from "mediabunny";
@@ -31891,9 +32029,9 @@ var AudioForPreviewAssertedShowing = ({
31891
32029
  }) => {
31892
32030
  const videoConfig = useUnsafeVideoConfig2();
31893
32031
  const frame = useCurrentFrame();
31894
- const mediaPlayerRef = useRef44(null);
31895
- const initialTrimBeforeRef = useRef44(trimBefore);
31896
- const initialTrimAfterRef = useRef44(trimAfter);
32032
+ const mediaPlayerRef = useRef45(null);
32033
+ const initialTrimBeforeRef = useRef45(trimBefore);
32034
+ const initialTrimAfterRef = useRef45(trimAfter);
31897
32035
  const [mediaPlayerReady, setMediaPlayerReady] = useState41(false);
31898
32036
  const [shouldFallbackToNativeAudio, setShouldFallbackToNativeAudio] = useState41(false);
31899
32037
  const [playing] = Timeline.usePlayingState();
@@ -31916,7 +32054,7 @@ var AudioForPreviewAssertedShowing = ({
31916
32054
  throw new TypeError("No `src` was passed to <NewAudioForPreview>.");
31917
32055
  }
31918
32056
  const currentTime = frame / videoConfig.fps;
31919
- const currentTimeRef = useRef44(currentTime);
32057
+ const currentTimeRef = useRef45(currentTime);
31920
32058
  currentTimeRef.current = currentTime;
31921
32059
  const preloadedSrc = usePreload2(src);
31922
32060
  const parentSequence = useContext212(SequenceContext2);
@@ -31929,14 +32067,14 @@ var AudioForPreviewAssertedShowing = ({
31929
32067
  }
31930
32068
  const effectiveMuted = muted || mediaMuted || userPreferredVolume <= 0;
31931
32069
  const isPlayerBuffering = Internals.useIsPlayerBuffering(bufferingContext);
31932
- const initialPlaying = useRef44(playing && !isPlayerBuffering);
31933
- const initialIsPremounting = useRef44(isPremounting);
31934
- const initialIsPostmounting = useRef44(isPostmounting);
31935
- const initialGlobalPlaybackRate = useRef44(globalPlaybackRate);
31936
- const initialPlaybackRate = useRef44(playbackRate);
31937
- const initialMuted = useRef44(effectiveMuted);
31938
- const initialDurationInFrames = useRef44(videoConfig.durationInFrames);
31939
- const initialSequenceOffset = useRef44(sequenceOffset);
32070
+ const initialPlaying = useRef45(playing && !isPlayerBuffering);
32071
+ const initialIsPremounting = useRef45(isPremounting);
32072
+ const initialIsPostmounting = useRef45(isPostmounting);
32073
+ const initialGlobalPlaybackRate = useRef45(globalPlaybackRate);
32074
+ const initialPlaybackRate = useRef45(playbackRate);
32075
+ const initialMuted = useRef45(effectiveMuted);
32076
+ const initialDurationInFrames = useRef45(videoConfig.durationInFrames);
32077
+ const initialSequenceOffset = useRef45(sequenceOffset);
31940
32078
  useCommonEffects({
31941
32079
  mediaPlayerRef,
31942
32080
  mediaPlayerReady,
@@ -35197,6 +35335,7 @@ var VideoInner = ({
35197
35335
  type: "video",
35198
35336
  data: basicInfo
35199
35337
  }), [basicInfo]);
35338
+ const memoizedEffects = Internals.useMemoizedEffects(Internals.flattenEffects(_experimentalEffects ?? []));
35200
35339
  if (sequenceDurationInFrames === 0) {
35201
35340
  return null;
35202
35341
  }
@@ -35209,6 +35348,7 @@ var VideoInner = ({
35209
35348
  name: name ?? "<Video>",
35210
35349
  _experimentalControls: controls,
35211
35350
  _remotionInternalLoopDisplay: loopDisplay,
35351
+ _experimentalEffects: memoizedEffects,
35212
35352
  showInTimeline: showInTimeline ?? true,
35213
35353
  children: /* @__PURE__ */ jsx65(InnerVideo, {
35214
35354
  audioStreamIndex: audioStreamIndex ?? 0,
@@ -35238,7 +35378,7 @@ var VideoInner = ({
35238
35378
  _experimentalControls: controls,
35239
35379
  objectFit: objectFit ?? "contain",
35240
35380
  _experimentalInitiallyDrawCachedFrame: _experimentalInitiallyDrawCachedFrame ?? false,
35241
- _experimentalEffects: _experimentalEffects ?? [],
35381
+ _experimentalEffects: memoizedEffects,
35242
35382
  setMediaDurationInSeconds
35243
35383
  })
35244
35384
  });
@@ -36547,7 +36687,7 @@ import {
36547
36687
  import { BufferTarget, StreamTarget } from "mediabunny";
36548
36688
 
36549
36689
  // ../core/dist/esm/version.mjs
36550
- var VERSION2 = "4.0.460";
36690
+ var VERSION2 = "4.0.461";
36551
36691
 
36552
36692
  // ../web-renderer/dist/esm/index.mjs
36553
36693
  import { AudioSample, VideoSample } from "mediabunny";
@@ -37195,7 +37335,6 @@ var UpdateTime = ({
37195
37335
  }
37196
37336
  }));
37197
37337
  return /* @__PURE__ */ jsx88(Internals.RemotionRootContexts, {
37198
- visualModeEnabled: false,
37199
37338
  audioEnabled,
37200
37339
  videoEnabled,
37201
37340
  logLevel,
@@ -40236,7 +40375,7 @@ var applyTextTransform = (text, transform) => {
40236
40375
  return text.toLowerCase();
40237
40376
  }
40238
40377
  if (transform === "capitalize") {
40239
- return text.replace(/\b\w/g, (char) => char.toUpperCase());
40378
+ return text.replace(/\b(?<!['\u2019])\w/g, (char) => char.toUpperCase());
40240
40379
  }
40241
40380
  return text;
40242
40381
  };