@remotion/promo-pages 4.0.471 → 4.0.472

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 +1524 -725
  2. package/dist/design.js +1298 -798
  3. package/dist/experts.js +1291 -791
  4. package/dist/homepage/Pricing.js +1298 -798
  5. package/dist/prompts/PromptsGallery.js +1298 -798
  6. package/dist/prompts/PromptsShow.js +1145 -645
  7. package/dist/prompts/PromptsSubmit.js +1145 -645
  8. package/dist/team.js +1298 -798
  9. package/dist/template-modal-content.js +1298 -798
  10. package/dist/templates.js +1298 -798
  11. package/package.json +13 -13
  12. package/dist/cn.d.ts +0 -2
  13. package/dist/cn.js +0 -5
  14. package/dist/components/3DEngine/ButtonDemo.d.ts +0 -2
  15. package/dist/components/3DEngine/ButtonDemo.js +0 -43
  16. package/dist/components/3DEngine/Faces.d.ts +0 -5
  17. package/dist/components/3DEngine/Faces.js +0 -7
  18. package/dist/components/3DEngine/Outer.d.ts +0 -8
  19. package/dist/components/3DEngine/Outer.js +0 -56
  20. package/dist/components/3DEngine/Switch.d.ts +0 -4
  21. package/dist/components/3DEngine/Switch.js +0 -4
  22. package/dist/components/3DEngine/get-child-node-from.d.ts +0 -1
  23. package/dist/components/3DEngine/get-child-node-from.js +0 -14
  24. package/dist/components/3DEngine/hover-transforms.d.ts +0 -9
  25. package/dist/components/3DEngine/hover-transforms.js +0 -177
  26. package/dist/components/BackButton.d.ts +0 -6
  27. package/dist/components/BackButton.js +0 -9
  28. package/dist/components/CommandCopyButton.d.ts +0 -5
  29. package/dist/components/CommandCopyButton.js +0 -4
  30. package/dist/components/Homepage.d.ts +0 -6
  31. package/dist/components/Homepage.js +0 -20
  32. package/dist/components/ManageTeamMembers.d.ts +0 -2
  33. package/dist/components/ManageTeamMembers.js +0 -42
  34. package/dist/components/Spinner.d.ts +0 -3
  35. package/dist/components/Spinner.js +0 -4
  36. package/dist/components/TeamPicture.d.ts +0 -1
  37. package/dist/components/TeamPicture.js +0 -4
  38. package/dist/components/design.d.ts +0 -1
  39. package/dist/components/design.js +0 -33
  40. package/dist/components/experts/ExpertsPage.d.ts +0 -11
  41. package/dist/components/experts/ExpertsPage.js +0 -50
  42. package/dist/components/experts/experts-data.d.ts +0 -19
  43. package/dist/components/experts/experts-data.js +0 -391
  44. package/dist/components/experts/experts-icons.d.ts +0 -8
  45. package/dist/components/experts/experts-icons.js +0 -42
  46. package/dist/components/experts.d.ts +0 -3
  47. package/dist/components/experts.js +0 -2
  48. package/dist/components/homepage/BackgroundAnimation.d.ts +0 -2
  49. package/dist/components/homepage/BackgroundAnimation.js +0 -66
  50. package/dist/components/homepage/ChooseTemplate.d.ts +0 -2
  51. package/dist/components/homepage/ChooseTemplate.js +0 -25
  52. package/dist/components/homepage/CommunityStats.d.ts +0 -3
  53. package/dist/components/homepage/CommunityStats.js +0 -6
  54. package/dist/components/homepage/CommunityStatsItems.d.ts +0 -7
  55. package/dist/components/homepage/CommunityStatsItems.js +0 -58
  56. package/dist/components/homepage/Demo/Card.d.ts +0 -15
  57. package/dist/components/homepage/Demo/Card.js +0 -174
  58. package/dist/components/homepage/Demo/Cards.d.ts +0 -15
  59. package/dist/components/homepage/Demo/Cards.js +0 -57
  60. package/dist/components/homepage/Demo/Comp.d.ts +0 -38
  61. package/dist/components/homepage/Demo/Comp.js +0 -72
  62. package/dist/components/homepage/Demo/CurrentCountry.d.ts +0 -9
  63. package/dist/components/homepage/Demo/CurrentCountry.js +0 -48
  64. package/dist/components/homepage/Demo/DemoError.d.ts +0 -2
  65. package/dist/components/homepage/Demo/DemoError.js +0 -10
  66. package/dist/components/homepage/Demo/DemoErrorIcon.d.ts +0 -2
  67. package/dist/components/homepage/Demo/DemoErrorIcon.js +0 -16
  68. package/dist/components/homepage/Demo/DemoRender.d.ts +0 -33
  69. package/dist/components/homepage/Demo/DemoRender.js +0 -107
  70. package/dist/components/homepage/Demo/DigitWheel.d.ts +0 -9
  71. package/dist/components/homepage/Demo/DigitWheel.js +0 -94
  72. package/dist/components/homepage/Demo/DisplayedEmoji.d.ts +0 -5
  73. package/dist/components/homepage/Demo/DisplayedEmoji.js +0 -59
  74. package/dist/components/homepage/Demo/DoneCheckmark.d.ts +0 -2
  75. package/dist/components/homepage/Demo/DoneCheckmark.js +0 -20
  76. package/dist/components/homepage/Demo/DownloadNudge.d.ts +0 -2
  77. package/dist/components/homepage/Demo/DownloadNudge.js +0 -27
  78. package/dist/components/homepage/Demo/DragAndDropNudge.d.ts +0 -3
  79. package/dist/components/homepage/Demo/DragAndDropNudge.js +0 -26
  80. package/dist/components/homepage/Demo/EmojiCard.d.ts +0 -10
  81. package/dist/components/homepage/Demo/EmojiCard.js +0 -120
  82. package/dist/components/homepage/Demo/Minus.d.ts +0 -5
  83. package/dist/components/homepage/Demo/Minus.js +0 -11
  84. package/dist/components/homepage/Demo/PlayPauseButton.d.ts +0 -5
  85. package/dist/components/homepage/Demo/PlayPauseButton.js +0 -47
  86. package/dist/components/homepage/Demo/PlayerControls.d.ts +0 -8
  87. package/dist/components/homepage/Demo/PlayerControls.js +0 -15
  88. package/dist/components/homepage/Demo/PlayerSeekBar.d.ts +0 -11
  89. package/dist/components/homepage/Demo/PlayerSeekBar.js +0 -216
  90. package/dist/components/homepage/Demo/PlayerVolume.d.ts +0 -5
  91. package/dist/components/homepage/Demo/PlayerVolume.js +0 -53
  92. package/dist/components/homepage/Demo/Progress.d.ts +0 -4
  93. package/dist/components/homepage/Demo/Progress.js +0 -14
  94. package/dist/components/homepage/Demo/Spinner.d.ts +0 -5
  95. package/dist/components/homepage/Demo/Spinner.js +0 -37
  96. package/dist/components/homepage/Demo/Switcher.d.ts +0 -6
  97. package/dist/components/homepage/Demo/Switcher.js +0 -25
  98. package/dist/components/homepage/Demo/Temperature.d.ts +0 -6
  99. package/dist/components/homepage/Demo/Temperature.js +0 -21
  100. package/dist/components/homepage/Demo/TemperatureNumber.d.ts +0 -5
  101. package/dist/components/homepage/Demo/TemperatureNumber.js +0 -36
  102. package/dist/components/homepage/Demo/ThemeNudge.d.ts +0 -3
  103. package/dist/components/homepage/Demo/ThemeNudge.js +0 -35
  104. package/dist/components/homepage/Demo/TimeDisplay.d.ts +0 -6
  105. package/dist/components/homepage/Demo/TimeDisplay.js +0 -27
  106. package/dist/components/homepage/Demo/TrendingRepos.d.ts +0 -6
  107. package/dist/components/homepage/Demo/TrendingRepos.js +0 -65
  108. package/dist/components/homepage/Demo/icons.d.ts +0 -10
  109. package/dist/components/homepage/Demo/icons.js +0 -22
  110. package/dist/components/homepage/Demo/index.d.ts +0 -2
  111. package/dist/components/homepage/Demo/index.js +0 -95
  112. package/dist/components/homepage/Demo/math.d.ts +0 -10
  113. package/dist/components/homepage/Demo/math.js +0 -29
  114. package/dist/components/homepage/Demo/types.d.ts +0 -6
  115. package/dist/components/homepage/Demo/types.js +0 -0
  116. package/dist/components/homepage/EditorStarterSection.d.ts +0 -3
  117. package/dist/components/homepage/EditorStarterSection.js +0 -8
  118. package/dist/components/homepage/EvaluateRemotion.d.ts +0 -3
  119. package/dist/components/homepage/EvaluateRemotion.js +0 -21
  120. package/dist/components/homepage/FreePricing.d.ts +0 -4
  121. package/dist/components/homepage/FreePricing.js +0 -133
  122. package/dist/components/homepage/GetStartedStrip.d.ts +0 -2
  123. package/dist/components/homepage/GetStartedStrip.js +0 -14
  124. package/dist/components/homepage/GitHubButton.d.ts +0 -2
  125. package/dist/components/homepage/GitHubButton.js +0 -7
  126. package/dist/components/homepage/IconForTemplate.d.ts +0 -6
  127. package/dist/components/homepage/IconForTemplate.js +0 -105
  128. package/dist/components/homepage/IfYouKnowReact.d.ts +0 -3
  129. package/dist/components/homepage/IfYouKnowReact.js +0 -23
  130. package/dist/components/homepage/MoreTemplatesButton.d.ts +0 -2
  131. package/dist/components/homepage/MoreTemplatesButton.js +0 -11
  132. package/dist/components/homepage/MuxVideo.d.ts +0 -7
  133. package/dist/components/homepage/MuxVideo.js +0 -45
  134. package/dist/components/homepage/NewsletterButton.d.ts +0 -2
  135. package/dist/components/homepage/NewsletterButton.js +0 -38
  136. package/dist/components/homepage/ParameterizeAndEdit.d.ts +0 -2
  137. package/dist/components/homepage/ParameterizeAndEdit.js +0 -22
  138. package/dist/components/homepage/Pricing.d.ts +0 -2
  139. package/dist/components/homepage/Pricing.js +0 -15
  140. package/dist/components/homepage/PricingBulletPoint.d.ts +0 -6
  141. package/dist/components/homepage/PricingBulletPoint.js +0 -19
  142. package/dist/components/homepage/RealMp4Videos.d.ts +0 -2
  143. package/dist/components/homepage/RealMp4Videos.js +0 -41
  144. package/dist/components/homepage/Spacer.d.ts +0 -2
  145. package/dist/components/homepage/Spacer.js +0 -4
  146. package/dist/components/homepage/TemplateIcon.d.ts +0 -5
  147. package/dist/components/homepage/TemplateIcon.js +0 -24
  148. package/dist/components/homepage/TextInput.d.ts +0 -7
  149. package/dist/components/homepage/TextInput.js +0 -34
  150. package/dist/components/homepage/TrustedByBanner.d.ts +0 -2
  151. package/dist/components/homepage/TrustedByBanner.js +0 -27
  152. package/dist/components/homepage/VideoApps.d.ts +0 -4
  153. package/dist/components/homepage/VideoApps.js +0 -72
  154. package/dist/components/homepage/VideoAppsShowcase.d.ts +0 -3
  155. package/dist/components/homepage/VideoAppsShowcase.js +0 -139
  156. package/dist/components/homepage/VideoAppsTitle.d.ts +0 -4
  157. package/dist/components/homepage/VideoAppsTitle.js +0 -4
  158. package/dist/components/homepage/VideoPlayerWithControls.d.ts +0 -20
  159. package/dist/components/homepage/VideoPlayerWithControls.js +0 -105
  160. package/dist/components/homepage/WriteInReact.d.ts +0 -2
  161. package/dist/components/homepage/WriteInReact.js +0 -10
  162. package/dist/components/homepage/YouAreHere.d.ts +0 -2
  163. package/dist/components/homepage/YouAreHere.js +0 -23
  164. package/dist/components/homepage/layout/Button.d.ts +0 -22
  165. package/dist/components/homepage/layout/Button.js +0 -30
  166. package/dist/components/homepage/layout/colors.d.ts +0 -13
  167. package/dist/components/homepage/layout/colors.js +0 -14
  168. package/dist/components/homepage/layout/use-color-mode.d.ts +0 -21
  169. package/dist/components/homepage/layout/use-color-mode.js +0 -22
  170. package/dist/components/homepage/layout/use-el-size.d.ts +0 -5
  171. package/dist/components/homepage/layout/use-el-size.js +0 -40
  172. package/dist/components/homepage/layout/use-mobile-layout.d.ts +0 -1
  173. package/dist/components/homepage/layout/use-mobile-layout.js +0 -6
  174. package/dist/components/icons/blank.d.ts +0 -3
  175. package/dist/components/icons/blank.js +0 -4
  176. package/dist/components/icons/brain.d.ts +0 -2
  177. package/dist/components/icons/brain.js +0 -4
  178. package/dist/components/icons/clone.d.ts +0 -2
  179. package/dist/components/icons/clone.js +0 -2
  180. package/dist/components/icons/code-hike.d.ts +0 -3
  181. package/dist/components/icons/code-hike.js +0 -4
  182. package/dist/components/icons/cubes.d.ts +0 -3
  183. package/dist/components/icons/cubes.js +0 -4
  184. package/dist/components/icons/editor.d.ts +0 -3
  185. package/dist/components/icons/editor.js +0 -4
  186. package/dist/components/icons/electron.d.ts +0 -4
  187. package/dist/components/icons/electron.js +0 -4
  188. package/dist/components/icons/js.d.ts +0 -3
  189. package/dist/components/icons/js.js +0 -4
  190. package/dist/components/icons/music.d.ts +0 -2
  191. package/dist/components/icons/music.js +0 -4
  192. package/dist/components/icons/next.d.ts +0 -4
  193. package/dist/components/icons/next.js +0 -4
  194. package/dist/components/icons/overlay.d.ts +0 -3
  195. package/dist/components/icons/overlay.js +0 -4
  196. package/dist/components/icons/prompt-to-video.d.ts +0 -2
  197. package/dist/components/icons/prompt-to-video.js +0 -4
  198. package/dist/components/icons/recorder.d.ts +0 -3
  199. package/dist/components/icons/recorder.js +0 -4
  200. package/dist/components/icons/remix.d.ts +0 -3
  201. package/dist/components/icons/remix.js +0 -4
  202. package/dist/components/icons/render-server.d.ts +0 -3
  203. package/dist/components/icons/render-server.js +0 -4
  204. package/dist/components/icons/skia.d.ts +0 -3
  205. package/dist/components/icons/skia.js +0 -4
  206. package/dist/components/icons/stargazer.d.ts +0 -3
  207. package/dist/components/icons/stargazer.js +0 -4
  208. package/dist/components/icons/still.d.ts +0 -3
  209. package/dist/components/icons/still.js +0 -4
  210. package/dist/components/icons/tailwind.d.ts +0 -3
  211. package/dist/components/icons/tailwind.js +0 -4
  212. package/dist/components/icons/tiktok.d.ts +0 -3
  213. package/dist/components/icons/tiktok.js +0 -4
  214. package/dist/components/icons/timeline.d.ts +0 -3
  215. package/dist/components/icons/timeline.js +0 -4
  216. package/dist/components/icons/ts.d.ts +0 -3
  217. package/dist/components/icons/ts.js +0 -4
  218. package/dist/components/icons/undo.d.ts +0 -3
  219. package/dist/components/icons/undo.js +0 -2
  220. package/dist/components/icons/vercel.d.ts +0 -4
  221. package/dist/components/icons/vercel.js +0 -4
  222. package/dist/components/icons/waveform.d.ts +0 -3
  223. package/dist/components/icons/waveform.js +0 -4
  224. package/dist/components/prompts/CardLikeButton.d.ts +0 -5
  225. package/dist/components/prompts/CardLikeButton.js +0 -49
  226. package/dist/components/prompts/ClipboardIcon.d.ts +0 -5
  227. package/dist/components/prompts/ClipboardIcon.js +0 -4
  228. package/dist/components/prompts/CopyPromptButton.d.ts +0 -4
  229. package/dist/components/prompts/CopyPromptButton.js +0 -13
  230. package/dist/components/prompts/LikeButton.d.ts +0 -5
  231. package/dist/components/prompts/LikeButton.js +0 -49
  232. package/dist/components/prompts/MuxPlayer.d.ts +0 -8
  233. package/dist/components/prompts/MuxPlayer.js +0 -21
  234. package/dist/components/prompts/NewBackButton.d.ts +0 -5
  235. package/dist/components/prompts/NewBackButton.js +0 -8
  236. package/dist/components/prompts/Page.d.ts +0 -8
  237. package/dist/components/prompts/Page.js +0 -7
  238. package/dist/components/prompts/PromptsGallery.d.ts +0 -7
  239. package/dist/components/prompts/PromptsGallery.js +0 -60
  240. package/dist/components/prompts/PromptsShow.d.ts +0 -5
  241. package/dist/components/prompts/PromptsShow.js +0 -17
  242. package/dist/components/prompts/PromptsSubmit.d.ts +0 -2
  243. package/dist/components/prompts/PromptsSubmit.js +0 -173
  244. package/dist/components/prompts/config.d.ts +0 -1
  245. package/dist/components/prompts/config.js +0 -1
  246. package/dist/components/prompts/prompt-helpers.d.ts +0 -8
  247. package/dist/components/prompts/prompt-helpers.js +0 -76
  248. package/dist/components/prompts/prompt-types.d.ts +0 -14
  249. package/dist/components/prompts/prompt-types.js +0 -0
  250. package/dist/components/prompts/use-heart-animation.d.ts +0 -5
  251. package/dist/components/prompts/use-heart-animation.js +0 -29
  252. package/dist/components/team/TeamCards.d.ts +0 -6
  253. package/dist/components/team/TeamCards.js +0 -19
  254. package/dist/components/team/TitleTeamCards.d.ts +0 -2
  255. package/dist/components/team/TitleTeamCards.js +0 -6
  256. package/dist/components/team/TrustSection.d.ts +0 -2
  257. package/dist/components/team/TrustSection.js +0 -59
  258. package/dist/components/team.d.ts +0 -3
  259. package/dist/components/team.js +0 -15
  260. package/dist/components/template-modal-content.d.ts +0 -5
  261. package/dist/components/template-modal-content.js +0 -73
  262. package/dist/components/templates.d.ts +0 -2
  263. package/dist/components/templates.js +0 -27
  264. package/dist/helpers/mobile-layout.d.ts +0 -1
  265. package/dist/helpers/mobile-layout.js +0 -6
  266. package/dist/helpers/use-el-size.d.ts +0 -5
  267. package/dist/helpers/use-el-size.js +0 -40
  268. package/dist/main.d.ts +0 -1
  269. package/dist/main.js +0 -6
  270. package/dist/prompts-show.d.ts +0 -1
  271. package/dist/prompts-show.js +0 -20
  272. package/dist/prompts-submit.d.ts +0 -1
  273. package/dist/prompts-submit.js +0 -6
  274. package/dist/prompts.d.ts +0 -1
  275. package/dist/prompts.js +0 -6
  276. package/dist/team.d.ts +0 -1
package/dist/Homepage.js CHANGED
@@ -967,10 +967,12 @@ import { jsx as jsx9 } from "react/jsx-runtime";
967
967
  import { createContext as createContext14 } from "react";
968
968
  import React11, { useCallback as useCallback5, useMemo as useMemo12, useRef as useRef4, useState as useState3 } from "react";
969
969
  import { jsx as jsx10 } from "react/jsx-runtime";
970
- import React12, { forwardRef as forwardRef2, useContext as useContext16, useMemo as useMemo13, useState as useState4 } from "react";
971
- import { useContext as useContext15, useRef as useRef5 } from "react";
972
- import { createContext as createContext15 } from "react";
970
+ import React12, { createContext as createContext15 } from "react";
973
971
  import { jsx as jsx11 } from "react/jsx-runtime";
972
+ import React13, { forwardRef as forwardRef2, useContext as useContext16, useMemo as useMemo13, useState as useState4 } from "react";
973
+ import { useContext as useContext15, useRef as useRef5 } from "react";
974
+ import { createContext as createContext16 } from "react";
975
+ import { jsx as jsx12 } from "react/jsx-runtime";
974
976
  import {
975
977
  forwardRef as forwardRef4,
976
978
  useEffect as useEffect5,
@@ -979,13 +981,13 @@ import {
979
981
  useRef as useRef9,
980
982
  useState as useState6
981
983
  } from "react";
982
- import React14, { useCallback as useCallback6, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
984
+ import React15, { useCallback as useCallback6, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
983
985
  import { useEffect as useEffect4, useMemo as useMemo15, useRef as useRef7 } from "react";
984
- import { jsx as jsx12 } from "react/jsx-runtime";
985
986
  import { jsx as jsx13 } from "react/jsx-runtime";
987
+ import { jsx as jsx14 } from "react/jsx-runtime";
986
988
  import { useContext as useContext18, useLayoutEffect as useLayoutEffect4, useState as useState8 } from "react";
987
989
  import {
988
- createContext as createContext16,
990
+ createContext as createContext17,
989
991
  useCallback as useCallback7,
990
992
  useImperativeHandle as useImperativeHandle3,
991
993
  useLayoutEffect as useLayoutEffect3,
@@ -993,17 +995,17 @@ import {
993
995
  useRef as useRef10,
994
996
  useState as useState7
995
997
  } from "react";
996
- import { jsx as jsx14 } from "react/jsx-runtime";
997
- import { forwardRef as forwardRef7, useCallback as useCallback13, useContext as useContext30 } from "react";
998
- import React15, { createContext as createContext17, useMemo as useMemo18 } from "react";
999
998
  import { jsx as jsx15 } from "react/jsx-runtime";
1000
- import { useContext as useContext19 } from "react";
1001
- import { createContext as createContext18, useEffect as useEffect6, useState as useState9 } from "react";
999
+ import { forwardRef as forwardRef7, useCallback as useCallback13, useContext as useContext30 } from "react";
1000
+ import React16, { createContext as createContext18, useMemo as useMemo18 } from "react";
1002
1001
  import { jsx as jsx16 } from "react/jsx-runtime";
1003
- import { createContext as createContext19, useMemo as useMemo19, useReducer } from "react";
1002
+ import { useContext as useContext19 } from "react";
1003
+ import { createContext as createContext19, useEffect as useEffect6, useState as useState9 } from "react";
1004
1004
  import { jsx as jsx17 } from "react/jsx-runtime";
1005
+ import { createContext as createContext20, useMemo as useMemo19, useReducer } from "react";
1006
+ import { jsx as jsx18 } from "react/jsx-runtime";
1005
1007
  import { useCallback as useCallback12 } from "react";
1006
- import React21, {
1008
+ import React22, {
1007
1009
  forwardRef as forwardRef5,
1008
1010
  useContext as useContext28,
1009
1011
  useEffect as useEffect14,
@@ -1013,8 +1015,8 @@ import React21, {
1013
1015
  useState as useState14
1014
1016
  } from "react";
1015
1017
  import { useContext as useContext21, useLayoutEffect as useLayoutEffect5, useRef as useRef14 } from "react";
1016
- import React18, {
1017
- createContext as createContext20,
1018
+ import React19, {
1019
+ createContext as createContext21,
1018
1020
  createRef as createRef2,
1019
1021
  useCallback as useCallback8,
1020
1022
  useContext as useContext20,
@@ -1024,7 +1026,7 @@ import React18, {
1024
1026
  useState as useState10
1025
1027
  } from "react";
1026
1028
  import { useMemo as useMemo20, useRef as useRef11 } from "react";
1027
- import { jsx as jsx18, jsxs as jsxs22 } from "react/jsx-runtime";
1029
+ import { jsx as jsx19, jsxs as jsxs22 } from "react/jsx-runtime";
1028
1030
  import { useRef as useRef13 } from "react";
1029
1031
  import { useContext as useContext23, useEffect as useEffect8, useMemo as useMemo22, useState as useState11 } from "react";
1030
1032
  import { useContext as useContext22 } from "react";
@@ -1037,7 +1039,7 @@ import {
1037
1039
  } from "react";
1038
1040
  import { useCallback as useCallback10, useMemo as useMemo25, useRef as useRef16 } from "react";
1039
1041
  import { useContext as useContext25, useMemo as useMemo24 } from "react";
1040
- import React19, {
1042
+ import React20, {
1041
1043
  useCallback as useCallback9,
1042
1044
  useContext as useContext24,
1043
1045
  useEffect as useEffect9,
@@ -1046,13 +1048,13 @@ import React19, {
1046
1048
  useRef as useRef15,
1047
1049
  useState as useState12
1048
1050
  } from "react";
1049
- import { jsx as jsx19 } from "react/jsx-runtime";
1050
- import React20 from "react";
1051
+ import { jsx as jsx20 } from "react/jsx-runtime";
1052
+ import React21 from "react";
1051
1053
  import { useEffect as useEffect10, useState as useState13 } from "react";
1052
1054
  import { useEffect as useEffect11, useRef as useRef17 } from "react";
1053
1055
  import { useEffect as useEffect13 } from "react";
1054
- import { createContext as createContext21, useContext as useContext27, useMemo as useMemo26 } from "react";
1055
- import { jsx as jsx20 } from "react/jsx-runtime";
1056
+ import { createContext as createContext22, useContext as useContext27, useMemo as useMemo26 } from "react";
1057
+ import { jsx as jsx21 } from "react/jsx-runtime";
1056
1058
  import {
1057
1059
  forwardRef as forwardRef6,
1058
1060
  useContext as useContext29,
@@ -1062,8 +1064,8 @@ import {
1062
1064
  useMemo as useMemo28,
1063
1065
  useRef as useRef20
1064
1066
  } from "react";
1065
- import { jsx as jsx21 } from "react/jsx-runtime";
1066
1067
  import { jsx as jsx222 } from "react/jsx-runtime";
1068
+ import { jsx as jsx23 } from "react/jsx-runtime";
1067
1069
  import {
1068
1070
  forwardRef as forwardRef8,
1069
1071
  useCallback as useCallback14,
@@ -1073,9 +1075,9 @@ import {
1073
1075
  useRef as useRef21,
1074
1076
  useState as useState15
1075
1077
  } from "react";
1076
- import { jsx as jsx23 } from "react/jsx-runtime";
1078
+ import { jsx as jsx24 } from "react/jsx-runtime";
1077
1079
  import {
1078
- createContext as createContext22,
1080
+ createContext as createContext23,
1079
1081
  forwardRef as forwardRef9,
1080
1082
  useCallback as useCallback15,
1081
1083
  useContext as useContext31,
@@ -1083,7 +1085,7 @@ import {
1083
1085
  useMemo as useMemo30,
1084
1086
  useRef as useRef22
1085
1087
  } from "react";
1086
- import { jsx as jsx24 } from "react/jsx-runtime";
1088
+ import { jsx as jsx25 } from "react/jsx-runtime";
1087
1089
  import {
1088
1090
  forwardRef as forwardRef10,
1089
1091
  useCallback as useCallback16,
@@ -1094,13 +1096,13 @@ import {
1094
1096
  useRef as useRef23,
1095
1097
  useState as useState16
1096
1098
  } from "react";
1097
- import { jsx as jsx25 } from "react/jsx-runtime";
1098
- import { forwardRef as forwardRef11, useCallback as useCallback17, useState as useState17 } from "react";
1099
1099
  import { jsx as jsx26 } from "react/jsx-runtime";
1100
- import { useCallback as useCallback18, useContext as useContext33, useLayoutEffect as useLayoutEffect10, useRef as useRef24 } from "react";
1100
+ import { forwardRef as forwardRef11, useCallback as useCallback17, useState as useState17 } from "react";
1101
1101
  import { jsx as jsx27 } from "react/jsx-runtime";
1102
+ import { useCallback as useCallback18, useContext as useContext33, useLayoutEffect as useLayoutEffect10, useRef as useRef24 } from "react";
1103
+ import { jsx as jsx28 } from "react/jsx-runtime";
1102
1104
  import { createRef as createRef3 } from "react";
1103
- import React28 from "react";
1105
+ import React29 from "react";
1104
1106
  import {
1105
1107
  useCallback as useCallback19,
1106
1108
  useImperativeHandle as useImperativeHandle8,
@@ -1108,49 +1110,52 @@ import {
1108
1110
  useRef as useRef25,
1109
1111
  useState as useState18
1110
1112
  } from "react";
1111
- import { jsx as jsx28 } from "react/jsx-runtime";
1112
- import React29 from "react";
1113
- import { useMemo as useMemo34 } from "react";
1114
- import { createContext as createContext23, useContext as useContext34, useMemo as useMemo33 } from "react";
1115
1113
  import { jsx as jsx29 } from "react/jsx-runtime";
1114
+ import React30 from "react";
1115
+ import { useMemo as useMemo34 } from "react";
1116
+ import { createContext as createContext24, useContext as useContext34, useMemo as useMemo33 } from "react";
1116
1117
  import { jsx as jsx30 } from "react/jsx-runtime";
1117
- import React31 from "react";
1118
- import React32, { createContext as createContext24 } from "react";
1118
+ import { jsx as jsx31 } from "react/jsx-runtime";
1119
+ import React32 from "react";
1120
+ import React33, { createContext as createContext25 } from "react";
1121
+ import React34, { useContext as useContext35 } from "react";
1119
1122
  import { useCallback as useCallback22 } from "react";
1120
1123
  import {
1121
1124
  useCallback as useCallback20,
1122
- useContext as useContext35,
1125
+ useContext as useContext36,
1123
1126
  useEffect as useEffect18,
1124
1127
  useLayoutEffect as useLayoutEffect11,
1125
1128
  useMemo as useMemo35,
1126
1129
  useState as useState19
1127
1130
  } from "react";
1128
- import { jsx as jsx31 } from "react/jsx-runtime";
1129
- import React34, {
1131
+ import { jsx as jsx32 } from "react/jsx-runtime";
1132
+ import React36, {
1130
1133
  forwardRef as forwardRef12,
1131
- useContext as useContext36,
1134
+ useCallback as useCallback21,
1135
+ useContext as useContext37,
1132
1136
  useEffect as useEffect20,
1133
1137
  useImperativeHandle as useImperativeHandle9,
1134
1138
  useMemo as useMemo36,
1135
1139
  useRef as useRef26,
1136
- useState as useState20,
1137
- useCallback as useCallback21
1140
+ useState as useState20
1138
1141
  } from "react";
1139
1142
  import { useEffect as useEffect19 } from "react";
1140
- import { jsx as jsx32 } from "react/jsx-runtime";
1141
1143
  import { jsx as jsx33 } from "react/jsx-runtime";
1142
- import React36, { useMemo as useMemo37 } from "react";
1143
1144
  import { jsx as jsx34 } from "react/jsx-runtime";
1144
- import { Children, forwardRef as forwardRef13, useMemo as useMemo38 } from "react";
1145
- import React37 from "react";
1146
- import React38, { createContext as createContext25 } from "react";
1145
+ import React38, { useMemo as useMemo37 } from "react";
1147
1146
  import { jsx as jsx35 } from "react/jsx-runtime";
1147
+ import {
1148
+ Children,
1149
+ forwardRef as forwardRef13,
1150
+ useMemo as useMemo38
1151
+ } from "react";
1152
+ import React39 from "react";
1148
1153
  import { jsx as jsx36 } from "react/jsx-runtime";
1149
- import React40 from "react";
1150
- import { forwardRef as forwardRef15, useCallback as useCallback23, useContext as useContext38 } from "react";
1154
+ import React41 from "react";
1155
+ import { forwardRef as forwardRef15, useCallback as useCallback23, useContext as useContext39 } from "react";
1151
1156
  import {
1152
1157
  forwardRef as forwardRef14,
1153
- useContext as useContext37,
1158
+ useContext as useContext38,
1154
1159
  useEffect as useEffect21,
1155
1160
  useImperativeHandle as useImperativeHandle10,
1156
1161
  useLayoutEffect as useLayoutEffect12,
@@ -1328,11 +1333,57 @@ function truthy(value) {
1328
1333
  return Boolean(value);
1329
1334
  }
1330
1335
  var getRegex = () => /^([a-zA-Z0-9-\u4E00-\u9FFF])+$/g;
1336
+ var isFolderNameValid = (name) => name.match(getRegex());
1337
+ var validateFolderName = (name) => {
1338
+ if (name === undefined || name === null) {
1339
+ throw new TypeError("You must pass a name to a <Folder />.");
1340
+ }
1341
+ if (typeof name !== "string") {
1342
+ throw new TypeError(`The "name" you pass into <Folder /> must be a string. Got: ${typeof name}`);
1343
+ }
1344
+ if (!isFolderNameValid(name)) {
1345
+ throw new Error(`Folder name can only contain a-z, A-Z, 0-9 and -. You passed ${name}`);
1346
+ }
1347
+ };
1331
1348
  var invalidFolderNameErrorMessage = `Folder name must match ${String(getRegex())}`;
1332
1349
  var FolderContext = createContext6({
1333
1350
  folderName: null,
1334
1351
  parentName: null
1335
1352
  });
1353
+ var Folder = (props) => {
1354
+ const { name, children } = props;
1355
+ const parent = useContext2(FolderContext);
1356
+ const { registerFolder, unregisterFolder } = useContext2(CompositionSetters);
1357
+ const nonce = useNonce();
1358
+ const stack = props.stack ?? null;
1359
+ validateFolderName(name);
1360
+ const parentNameArr = [parent.parentName, parent.folderName].filter(truthy);
1361
+ const parentName = parentNameArr.length === 0 ? null : parentNameArr.join("/");
1362
+ const value = useMemo2(() => {
1363
+ return {
1364
+ folderName: name,
1365
+ parentName
1366
+ };
1367
+ }, [name, parentName]);
1368
+ useEffect(() => {
1369
+ registerFolder(name, parentName, nonce.get(), stack);
1370
+ return () => {
1371
+ unregisterFolder(name, parentName);
1372
+ };
1373
+ }, [
1374
+ name,
1375
+ parent.folderName,
1376
+ parentName,
1377
+ registerFolder,
1378
+ unregisterFolder,
1379
+ nonce,
1380
+ stack
1381
+ ]);
1382
+ return /* @__PURE__ */ jsx22(FolderContext.Provider, {
1383
+ value,
1384
+ children
1385
+ });
1386
+ };
1336
1387
  function getNodeEnvString() {
1337
1388
  return ["NOD", "E_EN", "V"].join("");
1338
1389
  }
@@ -2281,7 +2332,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2281
2332
  var addSequenceStackTraces = (component) => {
2282
2333
  componentsToAddStacksTo.push(component);
2283
2334
  };
2284
- var VERSION = "4.0.471";
2335
+ var VERSION = "4.0.472";
2285
2336
  var checkMultipleRemotionVersions = () => {
2286
2337
  if (typeof globalThis === "undefined") {
2287
2338
  return;
@@ -2651,7 +2702,7 @@ var sequenceVisualStyleSchema = {
2651
2702
  description: "Offset"
2652
2703
  },
2653
2704
  "style.scale": {
2654
- type: "number",
2705
+ type: "scale",
2655
2706
  min: 0.05,
2656
2707
  max: 100,
2657
2708
  step: 0.01,
@@ -2659,7 +2710,7 @@ var sequenceVisualStyleSchema = {
2659
2710
  description: "Scale"
2660
2711
  },
2661
2712
  "style.rotate": {
2662
- type: "rotation",
2713
+ type: "rotation-css",
2663
2714
  step: 1,
2664
2715
  default: "0deg",
2665
2716
  description: "Rotation"
@@ -2670,7 +2721,8 @@ var sequenceVisualStyleSchema = {
2670
2721
  max: 1,
2671
2722
  step: 0.01,
2672
2723
  default: 1,
2673
- description: "Opacity"
2724
+ description: "Opacity",
2725
+ hiddenFromList: false
2674
2726
  }
2675
2727
  };
2676
2728
  var sequencePremountSchema = {
@@ -2679,10 +2731,15 @@ var sequencePremountSchema = {
2679
2731
  default: 0,
2680
2732
  description: "Premount For",
2681
2733
  min: 0,
2682
- step: 1
2734
+ step: 1,
2735
+ hiddenFromList: false
2683
2736
  },
2684
2737
  postmountFor: {
2685
- type: "hidden"
2738
+ type: "number",
2739
+ default: 0,
2740
+ min: 0,
2741
+ step: 1,
2742
+ hiddenFromList: true
2686
2743
  },
2687
2744
  styleWhilePremounted: {
2688
2745
  type: "hidden"
@@ -2700,8 +2757,23 @@ var hiddenField = {
2700
2757
  default: false,
2701
2758
  description: "Hidden"
2702
2759
  };
2760
+ var durationInFramesField = {
2761
+ type: "number",
2762
+ default: undefined,
2763
+ min: 1,
2764
+ step: 1,
2765
+ hiddenFromList: true
2766
+ };
2767
+ var fromField = {
2768
+ type: "number",
2769
+ default: 0,
2770
+ step: 1,
2771
+ hiddenFromList: true
2772
+ };
2703
2773
  var sequenceSchema = {
2704
2774
  hidden: hiddenField,
2775
+ from: fromField,
2776
+ durationInFrames: durationInFramesField,
2705
2777
  layout: {
2706
2778
  type: "enum",
2707
2779
  default: "absolute-fill",
@@ -2882,6 +2954,25 @@ var SequenceManagerProvider = ({ children }) => {
2882
2954
  })
2883
2955
  });
2884
2956
  };
2957
+ var IsInsideSeriesContext = createContext15(false);
2958
+ var IsInsideSeriesContainer = ({ children }) => {
2959
+ return /* @__PURE__ */ jsx11(IsInsideSeriesContext.Provider, {
2960
+ value: true,
2961
+ children
2962
+ });
2963
+ };
2964
+ var IsNotInsideSeriesProvider = ({ children }) => {
2965
+ return /* @__PURE__ */ jsx11(IsInsideSeriesContext.Provider, {
2966
+ value: false,
2967
+ children
2968
+ });
2969
+ };
2970
+ var useRequireToBeInsideSeries = () => {
2971
+ const isInsideSeries = React12.useContext(IsInsideSeriesContext);
2972
+ if (!isInsideSeries) {
2973
+ throw new Error("This component must be inside a <Series /> component.");
2974
+ }
2975
+ };
2885
2976
  var ENABLE_V5_BREAKING_CHANGES = false;
2886
2977
  var deleteNestedKey = (obj, keysToRemove) => {
2887
2978
  for (const key of keysToRemove) {
@@ -2914,229 +3005,6 @@ var deleteNestedKey = (obj, keysToRemove) => {
2914
3005
  }
2915
3006
  return obj;
2916
3007
  };
2917
- var OverrideIdsToNodePathsGettersContext = createContext15({
2918
- overrideIdToNodePathMappings: {}
2919
- });
2920
- var OverrideIdsToNodePathsSettersContext = createContext15({
2921
- setOverrideIdToNodePath: () => {
2922
- throw new Error("OverrideIdsToNodePathsSettersContext not initialized");
2923
- }
2924
- });
2925
- var mergeOverrides = ({
2926
- descriptor,
2927
- codeOverrides,
2928
- dragOverrides
2929
- }) => {
2930
- if (!codeOverrides && !dragOverrides) {
2931
- return { params: descriptor.params, effectKey: descriptor.effectKey };
2932
- }
2933
- const merged = {
2934
- ...descriptor.params
2935
- };
2936
- if (codeOverrides) {
2937
- for (const [key, value] of Object.entries(codeOverrides)) {
2938
- if (value !== undefined) {
2939
- merged[key] = value;
2940
- }
2941
- }
2942
- }
2943
- if (dragOverrides) {
2944
- for (const [key, value] of Object.entries(dragOverrides)) {
2945
- merged[key] = value;
2946
- }
2947
- }
2948
- return {
2949
- params: merged,
2950
- effectKey: descriptor.definition.calculateKey(merged)
2951
- };
2952
- };
2953
- var extractCodeOverrides = (propStatus) => {
2954
- if (!propStatus) {
2955
- return null;
2956
- }
2957
- const out = {};
2958
- let hasAny = false;
2959
- for (const [key, status] of Object.entries(propStatus)) {
2960
- if (status.canUpdate) {
2961
- out[key] = status.codeValue;
2962
- hasAny = true;
2963
- }
2964
- }
2965
- return hasAny ? out : null;
2966
- };
2967
- var useMemoizedEffectDefinitions = (effects) => {
2968
- const previousRef = useRef5(null);
2969
- const definitions = effects.map((descriptor) => descriptor.definition);
2970
- const previous = previousRef.current;
2971
- const isSame = previous !== null && previous.length === definitions.length && previous.every((def, i) => def === definitions[i]);
2972
- if (isSame) {
2973
- return previous;
2974
- }
2975
- previousRef.current = definitions;
2976
- return definitions;
2977
- };
2978
- var getEffectCodeValuesCtx = ({
2979
- codeValues,
2980
- nodePath,
2981
- effectIndex
2982
- }) => {
2983
- const status = codeValues[makeSequencePropsSubscriptionKey(nodePath)];
2984
- if (!status) {
2985
- return { type: "cannot-update-sequence", reason: "not-found" };
2986
- }
2987
- if (!status.canUpdate) {
2988
- return { type: "cannot-update-sequence", reason: status.reason };
2989
- }
2990
- const effect = status.effects.find((e) => e.effectIndex === effectIndex);
2991
- if (!effect) {
2992
- return { type: "cannot-update-effect", reason: "not-found" };
2993
- }
2994
- if (!effect.canUpdate) {
2995
- return { type: "cannot-update-effect", reason: effect.reason };
2996
- }
2997
- return { type: "can-update-effect", props: effect.props };
2998
- };
2999
- var getCodeValuesCtx = (codeValues, nodePath) => {
3000
- const status = codeValues[makeSequencePropsSubscriptionKey(nodePath)];
3001
- if (!status) {
3002
- return;
3003
- }
3004
- if (!status.canUpdate) {
3005
- return;
3006
- }
3007
- return status.props;
3008
- };
3009
- var useMemoizedEffects = ({
3010
- effects,
3011
- overrideId
3012
- }) => {
3013
- const previousRef = useRef5(null);
3014
- const { codeValues } = useContext15(VisualModeCodeValuesContext);
3015
- const { getEffectDragOverrides } = useContext15(VisualModeDragOverridesContext);
3016
- const { overrideIdToNodePathMappings } = useContext15(OverrideIdsToNodePathsGettersContext);
3017
- const previous = previousRef.current;
3018
- const nodePath = overrideId ? overrideIdToNodePathMappings[overrideId] ?? null : null;
3019
- const resolved = effects.map((descriptor, index) => {
3020
- if (nodePath === null) {
3021
- return {
3022
- descriptor,
3023
- params: descriptor.params,
3024
- effectKey: descriptor.effectKey
3025
- };
3026
- }
3027
- const effectStatus = getEffectCodeValuesCtx({
3028
- codeValues,
3029
- nodePath,
3030
- effectIndex: index
3031
- });
3032
- const codeOverrides = effectStatus.type === "can-update-effect" ? extractCodeOverrides(effectStatus.props) : null;
3033
- const dragOverridesMap = getEffectDragOverrides(nodePath, index);
3034
- const dragOverrides = Object.keys(dragOverridesMap).length === 0 ? null : dragOverridesMap;
3035
- const { params, effectKey } = mergeOverrides({
3036
- descriptor,
3037
- codeOverrides,
3038
- dragOverrides
3039
- });
3040
- return { descriptor, params, effectKey };
3041
- });
3042
- const isSame = previous !== null && previous.length === resolved.length && previous.every((p, i) => p.definition === resolved[i].descriptor.definition && p.effectKey === resolved[i].effectKey);
3043
- if (isSame) {
3044
- return previous;
3045
- }
3046
- const next = resolved.map(({ descriptor, params, effectKey }) => ({
3047
- definition: descriptor.definition,
3048
- effectKey,
3049
- params,
3050
- memoized: true
3051
- }));
3052
- previousRef.current = next;
3053
- return next;
3054
- };
3055
- var flattenActiveSchema = (schema, resolve) => {
3056
- const out = {};
3057
- for (const key of Object.keys(schema)) {
3058
- const field = schema[key];
3059
- if (field.type === "hidden") {
3060
- continue;
3061
- } else if (field.type === "enum") {
3062
- out[key] = field;
3063
- const current = resolve(key) ?? field.default;
3064
- const variant = field.variants[current];
3065
- if (variant) {
3066
- Object.assign(out, flattenActiveSchema(variant, resolve));
3067
- }
3068
- } else {
3069
- out[key] = field;
3070
- }
3071
- }
3072
- return out;
3073
- };
3074
- var getFlatSchemaWithAllKeys = (schema) => {
3075
- const out = {};
3076
- const addKey = (key, field) => {
3077
- if (key in out) {
3078
- throw new Error(`Duplicate key "${key}" in schema: discriminated union variants must not share keys`);
3079
- }
3080
- out[key] = field;
3081
- };
3082
- for (const key of Object.keys(schema)) {
3083
- const field = schema[key];
3084
- addKey(key, field);
3085
- if (field.type === "enum") {
3086
- for (const variant of Object.values(field.variants)) {
3087
- const flatVariant = getFlatSchemaWithAllKeys(variant);
3088
- for (const variantKey of Object.keys(flatVariant)) {
3089
- addKey(variantKey, flatVariant[variantKey]);
3090
- }
3091
- }
3092
- }
3093
- }
3094
- return out;
3095
- };
3096
- var findPropsToDelete = ({
3097
- schema,
3098
- key,
3099
- value
3100
- }) => {
3101
- const fieldSchema = schema[key];
3102
- if (!fieldSchema) {
3103
- throw new Error("Key " + JSON.stringify(key) + " not found in schema");
3104
- }
3105
- if (typeof value !== "string") {
3106
- throw new Error("Value must be a string, but is " + JSON.stringify(value));
3107
- }
3108
- if (fieldSchema.type !== "enum") {
3109
- throw new Error("Key " + JSON.stringify(key) + " is not an enum");
3110
- }
3111
- const currentVariant = fieldSchema.variants[value];
3112
- if (!currentVariant) {
3113
- 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));
3114
- }
3115
- const otherVariants = Object.keys(fieldSchema.variants).filter((v) => v !== value);
3116
- const otherKeys = new Set;
3117
- for (const variant of otherVariants) {
3118
- const otherVariant = fieldSchema.variants[variant];
3119
- const keys = Object.keys(otherVariant);
3120
- for (const k of keys) {
3121
- otherKeys.add(k);
3122
- }
3123
- }
3124
- return [...otherKeys];
3125
- };
3126
- var getEffectiveVisualModeValue = ({
3127
- codeValue,
3128
- dragOverrideValue,
3129
- defaultValue,
3130
- shouldResortToDefaultValueIfUndefined = false
3131
- }) => {
3132
- if (dragOverrideValue !== undefined) {
3133
- return dragOverrideValue;
3134
- }
3135
- if (codeValue.codeValue === undefined && shouldResortToDefaultValueIfUndefined) {
3136
- return defaultValue;
3137
- }
3138
- return codeValue.codeValue;
3139
- };
3140
3008
  var NEWTON_ITERATIONS = 4;
3141
3009
  var NEWTON_MIN_SLOPE = 0.001;
3142
3010
  var SUBDIVISION_PRECISION = 0.0000001;
@@ -3318,6 +3186,123 @@ class Easing {
3318
3186
  };
3319
3187
  }
3320
3188
  }
3189
+ var normalizeNumber = (value) => {
3190
+ return Math.round(value * 1e6) / 1e6;
3191
+ };
3192
+ var angleUnits = new Set(["deg", "rad", "grad", "turn"]);
3193
+ var lengthUnits = new Set([
3194
+ "%",
3195
+ "cap",
3196
+ "ch",
3197
+ "cm",
3198
+ "cqb",
3199
+ "cqh",
3200
+ "cqi",
3201
+ "cqmax",
3202
+ "cqmin",
3203
+ "cqw",
3204
+ "dvh",
3205
+ "dvw",
3206
+ "em",
3207
+ "ex",
3208
+ "ic",
3209
+ "in",
3210
+ "lh",
3211
+ "lvh",
3212
+ "lvw",
3213
+ "mm",
3214
+ "pc",
3215
+ "pt",
3216
+ "px",
3217
+ "q",
3218
+ "rem",
3219
+ "rlh",
3220
+ "svh",
3221
+ "svw",
3222
+ "vb",
3223
+ "vh",
3224
+ "vi",
3225
+ "vmax",
3226
+ "vmin",
3227
+ "vw"
3228
+ ]);
3229
+ var cssNumberRegex = /^([+-]?(?:\d+\.?\d*|\.\d+))([a-zA-Z%]+)?$/;
3230
+ var stringifyNumber = (value) => {
3231
+ return String(normalizeNumber(value));
3232
+ };
3233
+ var parseStringInterpolationComponent = (component, value) => {
3234
+ const match = cssNumberRegex.exec(component);
3235
+ if (match === null) {
3236
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not a supported scale, translate, or rotate value`);
3237
+ }
3238
+ const unit = match[2] ?? null;
3239
+ const numberValue = Number(match[1]);
3240
+ if (!Number.isFinite(numberValue)) {
3241
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not finite`);
3242
+ }
3243
+ if (unit === null) {
3244
+ return { kind: "scale", value: numberValue, unit: null };
3245
+ }
3246
+ if (angleUnits.has(unit)) {
3247
+ return { kind: "rotate", value: numberValue, unit };
3248
+ }
3249
+ if (lengthUnits.has(unit)) {
3250
+ return { kind: "translate", value: numberValue, unit };
3251
+ }
3252
+ throw new TypeError(`Cannot interpolate "${value}" because "${unit}" is not a supported translate or rotate unit`);
3253
+ };
3254
+ var parseStringInterpolationValue = (output) => {
3255
+ if (typeof output === "number") {
3256
+ if (!Number.isFinite(output)) {
3257
+ throw new Error(`outputRange must contain only finite numbers, but got [${output}]`);
3258
+ }
3259
+ return {
3260
+ kind: "scale",
3261
+ values: [output, output, 1],
3262
+ units: [null, null, null],
3263
+ dimensions: 1
3264
+ };
3265
+ }
3266
+ const parts = output.trim().split(/\s+/);
3267
+ if (parts.length < 1 || parts.length > 3 || parts[0] === "") {
3268
+ throw new TypeError(`String outputRange values must contain 1 to 3 components, but got "${output}"`);
3269
+ }
3270
+ const parsed = parts.map((part) => parseStringInterpolationComponent(part, output));
3271
+ const [{ kind }] = parsed;
3272
+ for (const part of parsed) {
3273
+ if (part.kind !== kind) {
3274
+ throw new TypeError(`Cannot interpolate "${output}" because it mixes ${kind} and ${part.kind} values`);
3275
+ }
3276
+ }
3277
+ if (kind === "scale") {
3278
+ const x = parsed[0].value;
3279
+ const y = parsed[1]?.value ?? x;
3280
+ const z = parsed[2]?.value ?? 1;
3281
+ return {
3282
+ kind,
3283
+ values: [x, y, z],
3284
+ units: [null, null, null],
3285
+ dimensions: parsed.length
3286
+ };
3287
+ }
3288
+ return {
3289
+ kind,
3290
+ values: [parsed[0].value, parsed[1]?.value ?? 0, parsed[2]?.value ?? 0],
3291
+ units: [parsed[0].unit, parsed[1]?.unit ?? null, parsed[2]?.unit ?? null],
3292
+ dimensions: parsed.length
3293
+ };
3294
+ };
3295
+ var serializeStringInterpolationValue = ({
3296
+ kind,
3297
+ values,
3298
+ units,
3299
+ dimensions
3300
+ }) => {
3301
+ if (kind === "scale") {
3302
+ return values.slice(0, dimensions).map((value) => stringifyNumber(value)).join(" ");
3303
+ }
3304
+ return values.slice(0, dimensions).map((value, index) => `${stringifyNumber(value)}${units[index]}`).join(" ");
3305
+ };
3321
3306
  function interpolateFunction(input, inputRange, outputRange, options) {
3322
3307
  const { extrapolateLeft, extrapolateRight, easing } = options;
3323
3308
  let result = input;
@@ -3362,6 +3347,96 @@ function findRange(input, inputRange) {
3362
3347
  }
3363
3348
  return i - 1;
3364
3349
  }
3350
+ var defaultEasing = (num) => num;
3351
+ var interpolateNumber = ({
3352
+ input,
3353
+ inputRange,
3354
+ outputRange,
3355
+ options
3356
+ }) => {
3357
+ if (inputRange.length === 1) {
3358
+ return outputRange[0];
3359
+ }
3360
+ const easingOption = options?.easing;
3361
+ const resolveEasingForSegment = (segmentIndex) => {
3362
+ if (easingOption === undefined) {
3363
+ return defaultEasing;
3364
+ }
3365
+ if (typeof easingOption === "function") {
3366
+ return easingOption;
3367
+ }
3368
+ return easingOption[segmentIndex];
3369
+ };
3370
+ let extrapolateLeft = "extend";
3371
+ if (options?.extrapolateLeft !== undefined) {
3372
+ extrapolateLeft = options.extrapolateLeft;
3373
+ }
3374
+ let extrapolateRight = "extend";
3375
+ if (options?.extrapolateRight !== undefined) {
3376
+ extrapolateRight = options.extrapolateRight;
3377
+ }
3378
+ const posterizedInput = options?.posterize === undefined ? input : Math.floor(input / options.posterize) * options.posterize;
3379
+ const range = findRange(posterizedInput, inputRange);
3380
+ return interpolateFunction(posterizedInput, [inputRange[range], inputRange[range + 1]], [outputRange[range], outputRange[range + 1]], {
3381
+ easing: resolveEasingForSegment(range),
3382
+ extrapolateLeft,
3383
+ extrapolateRight
3384
+ });
3385
+ };
3386
+ var interpolateString = ({
3387
+ input,
3388
+ inputRange,
3389
+ outputRange,
3390
+ options
3391
+ }) => {
3392
+ const parsedOutputRange = outputRange.map(parseStringInterpolationValue);
3393
+ const kind = parsedOutputRange[0]?.kind;
3394
+ if (kind === undefined) {
3395
+ throw new Error("outputRange must have at least 1 element");
3396
+ }
3397
+ for (const parsed of parsedOutputRange) {
3398
+ if (parsed.kind !== kind) {
3399
+ throw new TypeError(`Cannot interpolate ${kind} values with ${parsed.kind} values`);
3400
+ }
3401
+ }
3402
+ const dimensions = Math.max(...parsedOutputRange.map((parsed) => parsed.dimensions));
3403
+ const units = [
3404
+ null,
3405
+ null,
3406
+ null
3407
+ ];
3408
+ if (kind !== "scale") {
3409
+ for (let axis = 0;axis < dimensions; axis++) {
3410
+ for (const parsed of parsedOutputRange) {
3411
+ const unit = parsed.units[axis];
3412
+ if (unit === null) {
3413
+ continue;
3414
+ }
3415
+ if (units[axis] === null) {
3416
+ units[axis] = unit;
3417
+ continue;
3418
+ }
3419
+ if (units[axis] !== unit) {
3420
+ throw new TypeError(`Cannot interpolate ${kind} values with different units on axis ${axis + 1}: ${units[axis]} and ${unit}`);
3421
+ }
3422
+ }
3423
+ if (units[axis] === null) {
3424
+ throw new TypeError(`Cannot interpolate ${kind} values because axis ${axis + 1} has no unit`);
3425
+ }
3426
+ }
3427
+ }
3428
+ return serializeStringInterpolationValue({
3429
+ kind,
3430
+ values: [0, 0, 0].map((_, axis) => interpolateNumber({
3431
+ input,
3432
+ inputRange,
3433
+ outputRange: parsedOutputRange.map((parsed) => parsed.values[axis]),
3434
+ options
3435
+ })),
3436
+ units,
3437
+ dimensions
3438
+ });
3439
+ };
3365
3440
  function checkValidInputRange(arr) {
3366
3441
  for (let i = 1;i < arr.length; ++i) {
3367
3442
  if (!(arr[i] > arr[i - 1])) {
@@ -3421,42 +3496,27 @@ function interpolate(input, inputRange, outputRange, options) {
3421
3496
  throw new Error("inputRange (" + inputRange.length + ") and outputRange (" + outputRange.length + ") must have the same length");
3422
3497
  }
3423
3498
  checkInfiniteRange("inputRange", inputRange);
3424
- checkInfiniteRange("outputRange", outputRange);
3425
3499
  checkValidInputRange(inputRange);
3426
3500
  assertValidInterpolateEasingOption(options?.easing, inputRange.length);
3427
3501
  assertValidInterpolatePosterizeOption(options?.posterize);
3428
- const easingOption = options?.easing;
3429
- const defaultEasing = (num) => num;
3430
- const resolveEasingForSegment = (segmentIndex) => {
3431
- if (easingOption === undefined) {
3432
- return defaultEasing;
3433
- }
3434
- if (typeof easingOption === "function") {
3435
- return easingOption;
3436
- }
3437
- return easingOption[segmentIndex];
3438
- };
3439
- let extrapolateLeft = "extend";
3440
- if (options?.extrapolateLeft !== undefined) {
3441
- extrapolateLeft = options.extrapolateLeft;
3442
- }
3443
- let extrapolateRight = "extend";
3444
- if (options?.extrapolateRight !== undefined) {
3445
- extrapolateRight = options.extrapolateRight;
3446
- }
3447
3502
  if (typeof input !== "number") {
3448
3503
  throw new TypeError("Cannot interpolate an input which is not a number");
3449
3504
  }
3450
- if (inputRange.length === 1) {
3451
- return outputRange[0];
3505
+ if (!Array.isArray(outputRange)) {
3506
+ throw new Error("outputRange must contain only numbers");
3452
3507
  }
3453
- const posterizedInput = options?.posterize === undefined ? input : Math.floor(input / options.posterize) * options.posterize;
3454
- const range = findRange(posterizedInput, inputRange);
3455
- return interpolateFunction(posterizedInput, [inputRange[range], inputRange[range + 1]], [outputRange[range], outputRange[range + 1]], {
3456
- easing: resolveEasingForSegment(range),
3457
- extrapolateLeft,
3458
- extrapolateRight
3459
- });
3508
+ const hasStringOutput = outputRange.some((output) => typeof output === "string");
3509
+ if (hasStringOutput) {
3510
+ if (!outputRange.every((output) => typeof output === "string" || typeof output === "number")) {
3511
+ throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
3512
+ }
3513
+ return interpolateString({ input, inputRange, outputRange, options });
3514
+ }
3515
+ if (!outputRange.every((output) => typeof output === "number")) {
3516
+ throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
3517
+ }
3518
+ checkInfiniteRange("outputRange", outputRange);
3519
+ return interpolateNumber({ input, inputRange, outputRange, options });
3460
3520
  }
3461
3521
  var NUMBER = "[-+]?\\d*\\.?\\d+";
3462
3522
  var PERCENTAGE = NUMBER + "%";
@@ -3986,12 +4046,6 @@ var interpolateKeyframedStatus = ({
3986
4046
  if (interpolationFunction !== "interpolate") {
3987
4047
  return null;
3988
4048
  }
3989
- if (!outputs.every((v) => typeof v === "number")) {
3990
- return null;
3991
- }
3992
- if (keyframes.length === 1) {
3993
- return outputs[0];
3994
- }
3995
4049
  try {
3996
4050
  return interpolate(frame, inputRange, outputs, {
3997
4051
  easing: easing.map(easingToFn),
@@ -4003,6 +4057,306 @@ var interpolateKeyframedStatus = ({
4003
4057
  return null;
4004
4058
  }
4005
4059
  };
4060
+ var resolveDragOverrideValue = ({
4061
+ dragOverrideValue,
4062
+ frame
4063
+ }) => {
4064
+ if (dragOverrideValue === undefined) {
4065
+ return { type: "none" };
4066
+ }
4067
+ if (dragOverrideValue.type === "static") {
4068
+ return { type: "resolved", value: dragOverrideValue.value };
4069
+ }
4070
+ if (frame === null) {
4071
+ return { type: "none" };
4072
+ }
4073
+ const interpolated = interpolateKeyframedStatus({
4074
+ frame,
4075
+ status: dragOverrideValue.status
4076
+ });
4077
+ if (interpolated === null) {
4078
+ return { type: "none" };
4079
+ }
4080
+ return { type: "resolved", value: interpolated };
4081
+ };
4082
+ var getEffectiveVisualModeValue = ({
4083
+ codeValue,
4084
+ dragOverrideValue,
4085
+ defaultValue,
4086
+ frame = null,
4087
+ shouldResortToDefaultValueIfUndefined = false
4088
+ }) => {
4089
+ const dragOverride = resolveDragOverrideValue({
4090
+ dragOverrideValue,
4091
+ frame
4092
+ });
4093
+ if (dragOverride.type === "resolved" && dragOverride.value !== undefined) {
4094
+ return dragOverride.value;
4095
+ }
4096
+ if (codeValue.status === "keyframed" && frame !== null) {
4097
+ return interpolateKeyframedStatus({
4098
+ frame,
4099
+ status: codeValue
4100
+ });
4101
+ }
4102
+ if (codeValue.codeValue === undefined && shouldResortToDefaultValueIfUndefined) {
4103
+ return defaultValue;
4104
+ }
4105
+ return codeValue.codeValue;
4106
+ };
4107
+ var OverrideIdsToNodePathsGettersContext = createContext16({
4108
+ overrideIdToNodePathMappings: {}
4109
+ });
4110
+ var OverrideIdsToNodePathsSettersContext = createContext16({
4111
+ setOverrideIdToNodePath: () => {
4112
+ throw new Error("OverrideIdsToNodePathsSettersContext not initialized");
4113
+ }
4114
+ });
4115
+ var mergeOverrides = ({
4116
+ descriptor,
4117
+ codeOverrides,
4118
+ dragOverrides,
4119
+ frame
4120
+ }) => {
4121
+ if (!codeOverrides && !dragOverrides) {
4122
+ return { params: descriptor.params, effectKey: descriptor.effectKey };
4123
+ }
4124
+ const merged = {
4125
+ ...descriptor.params
4126
+ };
4127
+ if (codeOverrides) {
4128
+ for (const [key, value] of Object.entries(codeOverrides)) {
4129
+ if (value !== undefined) {
4130
+ merged[key] = value;
4131
+ }
4132
+ }
4133
+ }
4134
+ if (dragOverrides) {
4135
+ for (const [key, value] of Object.entries(dragOverrides)) {
4136
+ const resolved = resolveDragOverrideValue({
4137
+ dragOverrideValue: value,
4138
+ frame
4139
+ });
4140
+ if (resolved.type === "resolved") {
4141
+ merged[key] = resolved.value;
4142
+ }
4143
+ }
4144
+ }
4145
+ return {
4146
+ params: merged,
4147
+ effectKey: descriptor.definition.calculateKey(merged)
4148
+ };
4149
+ };
4150
+ var extractCodeOverrides = (propStatus) => {
4151
+ if (!propStatus) {
4152
+ return null;
4153
+ }
4154
+ const out = {};
4155
+ let hasAny = false;
4156
+ for (const [key, status] of Object.entries(propStatus)) {
4157
+ if (status.status !== "computed") {
4158
+ out[key] = status.codeValue;
4159
+ hasAny = true;
4160
+ }
4161
+ }
4162
+ return hasAny ? out : null;
4163
+ };
4164
+ var useMemoizedEffectDefinitions = (effects) => {
4165
+ const previousRef = useRef5(null);
4166
+ const definitions = effects.map((descriptor) => descriptor.definition);
4167
+ const previous = previousRef.current;
4168
+ const isSame = previous !== null && previous.length === definitions.length && previous.every((def, i) => def === definitions[i]);
4169
+ if (isSame) {
4170
+ return previous;
4171
+ }
4172
+ previousRef.current = definitions;
4173
+ return definitions;
4174
+ };
4175
+ var getEffectCodeValuesCtx = ({
4176
+ codeValues,
4177
+ nodePath,
4178
+ effectIndex
4179
+ }) => {
4180
+ const status = codeValues[makeSequencePropsSubscriptionKey(nodePath)];
4181
+ if (!status) {
4182
+ return { type: "cannot-update-sequence", reason: "not-found" };
4183
+ }
4184
+ if (!status.canUpdate) {
4185
+ return { type: "cannot-update-sequence", reason: status.reason };
4186
+ }
4187
+ const effect = status.effects.find((e) => e.effectIndex === effectIndex);
4188
+ if (!effect) {
4189
+ return { type: "cannot-update-effect", reason: "not-found" };
4190
+ }
4191
+ if (!effect.canUpdate) {
4192
+ return { type: "cannot-update-effect", reason: effect.reason };
4193
+ }
4194
+ return { type: "can-update-effect", props: effect.props };
4195
+ };
4196
+ var getCodeValuesCtx = (codeValues, nodePath) => {
4197
+ const status = codeValues[makeSequencePropsSubscriptionKey(nodePath)];
4198
+ if (!status) {
4199
+ return;
4200
+ }
4201
+ if (!status.canUpdate) {
4202
+ return;
4203
+ }
4204
+ return status.props;
4205
+ };
4206
+ var useMemoizedEffects = ({
4207
+ effects,
4208
+ overrideId
4209
+ }) => {
4210
+ const previousRef = useRef5(null);
4211
+ const { codeValues } = useContext15(VisualModeCodeValuesContext);
4212
+ const { getEffectDragOverrides } = useContext15(VisualModeDragOverridesContext);
4213
+ const frame = useCurrentFrame();
4214
+ const { overrideIdToNodePathMappings } = useContext15(OverrideIdsToNodePathsGettersContext);
4215
+ const previous = previousRef.current;
4216
+ const nodePath = overrideId ? overrideIdToNodePathMappings[overrideId] ?? null : null;
4217
+ const resolved = effects.map((descriptor, index) => {
4218
+ if (nodePath === null) {
4219
+ return {
4220
+ descriptor,
4221
+ params: descriptor.params,
4222
+ effectKey: descriptor.effectKey
4223
+ };
4224
+ }
4225
+ const effectStatus = getEffectCodeValuesCtx({
4226
+ codeValues,
4227
+ nodePath,
4228
+ effectIndex: index
4229
+ });
4230
+ const codeOverrides = effectStatus.type === "can-update-effect" ? extractCodeOverrides(effectStatus.props) : null;
4231
+ const dragOverridesMap = getEffectDragOverrides(nodePath, index);
4232
+ const dragOverrides = Object.keys(dragOverridesMap).length === 0 ? null : dragOverridesMap;
4233
+ const { params, effectKey } = mergeOverrides({
4234
+ descriptor,
4235
+ codeOverrides,
4236
+ dragOverrides,
4237
+ frame
4238
+ });
4239
+ return { descriptor, params, effectKey };
4240
+ });
4241
+ const isSame = previous !== null && previous.length === resolved.length && previous.every((p, i) => p.definition === resolved[i].descriptor.definition && p.effectKey === resolved[i].effectKey);
4242
+ if (isSame) {
4243
+ return previous;
4244
+ }
4245
+ const next = resolved.map(({ descriptor, params, effectKey }) => ({
4246
+ definition: descriptor.definition,
4247
+ effectKey,
4248
+ params,
4249
+ memoized: true
4250
+ }));
4251
+ previousRef.current = next;
4252
+ return next;
4253
+ };
4254
+ var flattenActiveSchema = (schema, resolve) => {
4255
+ const out = {};
4256
+ for (const key of Object.keys(schema)) {
4257
+ const field = schema[key];
4258
+ if (field.type === "hidden") {
4259
+ continue;
4260
+ } else if (field.type === "enum") {
4261
+ out[key] = field;
4262
+ const current = resolve(key) ?? field.default;
4263
+ const variant = field.variants[current];
4264
+ if (variant) {
4265
+ Object.assign(out, flattenActiveSchema(variant, resolve));
4266
+ }
4267
+ } else {
4268
+ out[key] = field;
4269
+ }
4270
+ }
4271
+ return out;
4272
+ };
4273
+ var getFlatSchemaWithAllKeys = (schema) => {
4274
+ const out = {};
4275
+ const addKey = (key, field) => {
4276
+ if (key in out) {
4277
+ throw new Error(`Duplicate key "${key}" in schema: discriminated union variants must not share keys`);
4278
+ }
4279
+ out[key] = field;
4280
+ };
4281
+ for (const key of Object.keys(schema)) {
4282
+ const field = schema[key];
4283
+ addKey(key, field);
4284
+ if (field.type === "enum") {
4285
+ for (const variant of Object.values(field.variants)) {
4286
+ const flatVariant = getFlatSchemaWithAllKeys(variant);
4287
+ for (const variantKey of Object.keys(flatVariant)) {
4288
+ addKey(variantKey, flatVariant[variantKey]);
4289
+ }
4290
+ }
4291
+ }
4292
+ }
4293
+ return out;
4294
+ };
4295
+ var findPropsToDelete = ({
4296
+ schema,
4297
+ key,
4298
+ value
4299
+ }) => {
4300
+ const fieldSchema = schema[key];
4301
+ if (!fieldSchema) {
4302
+ throw new Error("Key " + JSON.stringify(key) + " not found in schema");
4303
+ }
4304
+ if (typeof value !== "string") {
4305
+ throw new Error("Value must be a string, but is " + JSON.stringify(value));
4306
+ }
4307
+ if (fieldSchema.type !== "enum") {
4308
+ throw new Error("Key " + JSON.stringify(key) + " is not an enum");
4309
+ }
4310
+ const currentVariant = fieldSchema.variants[value];
4311
+ if (!currentVariant) {
4312
+ 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));
4313
+ }
4314
+ const otherVariants = Object.keys(fieldSchema.variants).filter((v) => v !== value);
4315
+ const otherKeys = new Set;
4316
+ for (const variant of otherVariants) {
4317
+ const otherVariant = fieldSchema.variants[variant];
4318
+ const keys = Object.keys(otherVariant);
4319
+ for (const k of keys) {
4320
+ otherKeys.add(k);
4321
+ }
4322
+ }
4323
+ return [...otherKeys];
4324
+ };
4325
+ var makeStaticDragOverride = (value) => {
4326
+ return { type: "static", value };
4327
+ };
4328
+ var makeKeyframedDragOverride = ({
4329
+ status,
4330
+ frame,
4331
+ value
4332
+ }) => {
4333
+ const existingIndex = status.keyframes.findIndex((keyframe) => keyframe.frame === frame);
4334
+ const keyframes = existingIndex === -1 ? [...status.keyframes, { frame, value }].sort((first, second) => first.frame - second.frame) : status.keyframes.map((keyframe, index) => index === existingIndex ? { frame, value } : keyframe);
4335
+ const easing = [...status.easing];
4336
+ while (easing.length < keyframes.length - 1) {
4337
+ easing.push("linear");
4338
+ }
4339
+ if (easing.length > keyframes.length - 1) {
4340
+ easing.length = keyframes.length - 1;
4341
+ }
4342
+ return {
4343
+ type: "keyframed",
4344
+ status: {
4345
+ ...status,
4346
+ keyframes,
4347
+ easing
4348
+ }
4349
+ };
4350
+ };
4351
+ var getStaticDragOverrideValue = (dragOverrideValue) => {
4352
+ if (dragOverrideValue?.type !== "static") {
4353
+ return;
4354
+ }
4355
+ return dragOverrideValue.value;
4356
+ };
4357
+ var isKeyframedStatus = (status) => {
4358
+ return status !== null && status.status === "keyframed";
4359
+ };
4006
4360
  var findFieldInSchema = (schema, key) => {
4007
4361
  if (key in schema) {
4008
4362
  return schema[key];
@@ -4038,21 +4392,34 @@ var computeEffectiveSchemaValuesDotNotation = ({
4038
4392
  let value;
4039
4393
  if (codeValueStatus === null) {
4040
4394
  value = currentValue[key];
4041
- } else if (codeValueStatus.canUpdate === false) {
4042
- if (codeValueStatus.reason === "keyframed" && frame !== null) {
4043
- const interpolated = interpolateKeyframedStatus({
4044
- frame,
4045
- status: codeValueStatus
4046
- });
4047
- value = interpolated ?? currentValue[key];
4048
- } else {
4395
+ } else if (isKeyframedStatus(codeValueStatus)) {
4396
+ if (field?.type === "array" || field?.keyframable === false) {
4049
4397
  value = currentValue[key];
4398
+ } else {
4399
+ const dragOverride = resolveDragOverrideValue({
4400
+ dragOverrideValue: overrideValues[key],
4401
+ frame
4402
+ });
4403
+ if (dragOverride.type === "resolved") {
4404
+ value = dragOverride.value;
4405
+ } else if (frame !== null) {
4406
+ const interpolated = interpolateKeyframedStatus({
4407
+ frame,
4408
+ status: codeValueStatus
4409
+ });
4410
+ value = interpolated ?? currentValue[key];
4411
+ } else {
4412
+ value = currentValue[key];
4413
+ }
4050
4414
  }
4415
+ } else if (codeValueStatus.status === "computed") {
4416
+ value = currentValue[key];
4051
4417
  } else {
4052
4418
  value = getEffectiveVisualModeValue({
4053
4419
  codeValue: codeValueStatus,
4054
4420
  dragOverrideValue: overrideValues[key],
4055
4421
  defaultValue: field?.default,
4422
+ frame,
4056
4423
  shouldResortToDefaultValueIfUndefined: false
4057
4424
  });
4058
4425
  }
@@ -4125,13 +4492,17 @@ var mergeValues = ({
4125
4492
  return merged;
4126
4493
  };
4127
4494
  var stackToOverrideMap = {};
4128
- var wrapInSchema = (Component, schema) => {
4495
+ var wrapInSchema = ({
4496
+ Component,
4497
+ schema,
4498
+ supportsEffects
4499
+ }) => {
4129
4500
  const flatSchema = getFlatSchemaWithAllKeys(schema);
4130
4501
  const flatKeys = Object.keys(flatSchema);
4131
4502
  const Wrapped = forwardRef2((props, ref) => {
4132
4503
  const env = useRemotionEnvironment();
4133
4504
  if (!env.isStudio || env.isReadOnlyStudio || env.isRendering) {
4134
- return React12.createElement(Component, {
4505
+ return React13.createElement(Component, {
4135
4506
  ...props,
4136
4507
  _experimentalControls: null,
4137
4508
  ref
@@ -4142,7 +4513,7 @@ var wrapInSchema = (Component, schema) => {
4142
4513
  const nodePathMapping = useContext16(OverrideIdsToNodePathsGettersContext);
4143
4514
  const frame = useCurrentFrame();
4144
4515
  if (props._experimentalControls) {
4145
- return React12.createElement(Component, {
4516
+ return React13.createElement(Component, {
4146
4517
  ...props,
4147
4518
  ref
4148
4519
  });
@@ -4167,7 +4538,8 @@ var wrapInSchema = (Component, schema) => {
4167
4538
  return {
4168
4539
  schema,
4169
4540
  currentRuntimeValueDotNotation,
4170
- overrideId
4541
+ overrideId,
4542
+ supportsEffects
4171
4543
  };
4172
4544
  }, [currentRuntimeValueDotNotation, overrideId]);
4173
4545
  const { merged: valuesDotNotation, propsToDelete } = useMemo13(() => {
@@ -4192,7 +4564,7 @@ var wrapInSchema = (Component, schema) => {
4192
4564
  schemaKeys: activeKeys,
4193
4565
  propsToDelete
4194
4566
  });
4195
- return React12.createElement(Component, {
4567
+ return React13.createElement(Component, {
4196
4568
  ...mergedProps,
4197
4569
  _experimentalControls: controls,
4198
4570
  ref
@@ -4201,6 +4573,7 @@ var wrapInSchema = (Component, schema) => {
4201
4573
  Wrapped.displayName = `wrapInSchema(${Component.displayName || Component.name || "Component"})`;
4202
4574
  return Wrapped;
4203
4575
  };
4576
+ var EMPTY_EFFECTS = [];
4204
4577
  var RegularSequenceRefForwardingFunction = ({
4205
4578
  from = 0,
4206
4579
  durationInFrames = Infinity,
@@ -4295,6 +4668,7 @@ var RegularSequenceRefForwardingFunction = ({
4295
4668
  }, [name]);
4296
4669
  const resolvedDocumentationLink = documentationLink ?? (name === undefined ? "https://www.remotion.dev/docs/sequence" : null);
4297
4670
  const env = useRemotionEnvironment();
4671
+ const isInsideSeries = useContext17(IsInsideSeriesContext);
4298
4672
  const inheritedStack = other?.stack ?? null;
4299
4673
  const stackRef = useRef6(null);
4300
4674
  stackRef.current = stack ?? inheritedStack;
@@ -4307,7 +4681,7 @@ var RegularSequenceRefForwardingFunction = ({
4307
4681
  registerSequence({
4308
4682
  type: "image",
4309
4683
  controls: controls ?? null,
4310
- effects: _remotionInternalEffects ?? [],
4684
+ effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
4311
4685
  displayName: timelineClipName,
4312
4686
  documentationLink: resolvedDocumentationLink,
4313
4687
  duration: actualDurationInFrames,
@@ -4322,13 +4696,14 @@ var RegularSequenceRefForwardingFunction = ({
4322
4696
  showInTimeline,
4323
4697
  src: isMedia.src,
4324
4698
  getStack: () => stackRef.current,
4325
- refForOutline: refForOutline ?? null
4699
+ refForOutline: refForOutline ?? null,
4700
+ isInsideSeries
4326
4701
  });
4327
4702
  } else {
4328
4703
  registerSequence({
4329
4704
  type: isMedia.type,
4330
4705
  controls: controls ?? null,
4331
- effects: _remotionInternalEffects ?? [],
4706
+ effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
4332
4707
  displayName: timelineClipName,
4333
4708
  documentationLink: resolvedDocumentationLink,
4334
4709
  doesVolumeChange: isMedia.data.doesVolumeChange,
@@ -4347,7 +4722,8 @@ var RegularSequenceRefForwardingFunction = ({
4347
4722
  getStack: () => stackRef.current,
4348
4723
  startMediaFrom: isMedia.data.startMediaFrom,
4349
4724
  volume: isMedia.data.volumes,
4350
- refForOutline: refForOutline ?? null
4725
+ refForOutline: refForOutline ?? null,
4726
+ isInsideSeries
4351
4727
  });
4352
4728
  }
4353
4729
  return () => {
@@ -4370,8 +4746,9 @@ var RegularSequenceRefForwardingFunction = ({
4370
4746
  premountDisplay: premountDisplay ?? null,
4371
4747
  postmountDisplay: postmountDisplay ?? null,
4372
4748
  controls: controls ?? null,
4373
- effects: _remotionInternalEffects ?? [],
4374
- refForOutline: refForOutline ?? null
4749
+ effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
4750
+ refForOutline: refForOutline ?? null,
4751
+ isInsideSeries
4375
4752
  });
4376
4753
  return () => {
4377
4754
  unregisterSequence(id);
@@ -4397,7 +4774,8 @@ var RegularSequenceRefForwardingFunction = ({
4397
4774
  _remotionInternalEffects,
4398
4775
  isMedia,
4399
4776
  resolvedDocumentationLink,
4400
- refForOutline
4777
+ refForOutline,
4778
+ isInsideSeries
4401
4779
  ]);
4402
4780
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
4403
4781
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
@@ -4416,9 +4794,9 @@ var RegularSequenceRefForwardingFunction = ({
4416
4794
  if (hidden) {
4417
4795
  return null;
4418
4796
  }
4419
- return /* @__PURE__ */ jsx11(SequenceContext.Provider, {
4797
+ return /* @__PURE__ */ jsx12(SequenceContext.Provider, {
4420
4798
  value: contextValue,
4421
- children: content === null ? null : other.layout === "none" ? content : /* @__PURE__ */ jsx11(AbsoluteFill, {
4799
+ children: content === null ? null : other.layout === "none" ? content : /* @__PURE__ */ jsx12(AbsoluteFill, {
4422
4800
  ref,
4423
4801
  style: defaultStyle,
4424
4802
  className: other.className,
@@ -4463,10 +4841,10 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
4463
4841
  styleWhilePremounted,
4464
4842
  styleWhilePostmounted
4465
4843
  ]);
4466
- return /* @__PURE__ */ jsx11(Freeze, {
4844
+ return /* @__PURE__ */ jsx12(Freeze, {
4467
4845
  frame: freezeFrame,
4468
4846
  active: isFreezingActive,
4469
- children: /* @__PURE__ */ jsx11(SequenceInner, {
4847
+ children: /* @__PURE__ */ jsx12(SequenceInner, {
4470
4848
  ref,
4471
4849
  from,
4472
4850
  durationInFrames,
@@ -4486,20 +4864,24 @@ var SequenceRefForwardingFunction = (props, ref) => {
4486
4864
  if (props.layout !== "none" && !env.isRendering) {
4487
4865
  const effectivePremountFor = ENABLE_V5_BREAKING_CHANGES ? props.premountFor ?? fps : props.premountFor;
4488
4866
  if (effectivePremountFor || props.postmountFor) {
4489
- return /* @__PURE__ */ jsx11(PremountedPostmountedSequence, {
4867
+ return /* @__PURE__ */ jsx12(PremountedPostmountedSequence, {
4490
4868
  ref,
4491
4869
  ...props,
4492
4870
  premountFor: effectivePremountFor
4493
4871
  });
4494
4872
  }
4495
4873
  }
4496
- return /* @__PURE__ */ jsx11(RegularSequence, {
4874
+ return /* @__PURE__ */ jsx12(RegularSequence, {
4497
4875
  ...props,
4498
4876
  ref
4499
4877
  });
4500
4878
  };
4501
4879
  var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
4502
- var Sequence = wrapInSchema(SequenceInner, sequenceSchema);
4880
+ var Sequence = wrapInSchema({
4881
+ Component: SequenceInner,
4882
+ schema: sequenceSchema,
4883
+ supportsEffects: false
4884
+ });
4503
4885
  var calculateImageFit = (fit, imageSize, canvasSize) => {
4504
4886
  switch (fit) {
4505
4887
  case "fill": {
@@ -4866,13 +5248,13 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effec
4866
5248
  }
4867
5249
  };
4868
5250
  }, [draw]);
4869
- return /* @__PURE__ */ jsx12("canvas", {
5251
+ return /* @__PURE__ */ jsx13("canvas", {
4870
5252
  ref: canvasRef,
4871
5253
  className,
4872
5254
  style
4873
5255
  });
4874
5256
  };
4875
- var Canvas = React14.forwardRef(CanvasRefForwardingFunction);
5257
+ var Canvas = React15.forwardRef(CanvasRefForwardingFunction);
4876
5258
  var CACHE_SIZE = 5;
4877
5259
  var getActualTime = ({
4878
5260
  loopBehavior,
@@ -5033,13 +5415,17 @@ var resolveAnimatedImageSource = (src) => {
5033
5415
  return new URL(src, window.origin).href;
5034
5416
  };
5035
5417
  var animatedImageSchema = {
5418
+ durationInFrames: durationInFramesField,
5419
+ from: fromField,
5036
5420
  playbackRate: {
5037
5421
  type: "number",
5038
5422
  min: 0,
5039
5423
  max: 10,
5040
5424
  step: 0.1,
5041
5425
  default: 1,
5042
- description: "Playback Rate"
5426
+ description: "Playback Rate",
5427
+ hiddenFromList: false,
5428
+ keyframable: false
5043
5429
  },
5044
5430
  ...sequenceVisualStyleSchema,
5045
5431
  hidden: hiddenField
@@ -5163,7 +5549,7 @@ var AnimatedImageContent = forwardRef4(({
5163
5549
  width,
5164
5550
  height
5165
5551
  ]);
5166
- return /* @__PURE__ */ jsx13(Canvas, {
5552
+ return /* @__PURE__ */ jsx14(Canvas, {
5167
5553
  ref,
5168
5554
  width,
5169
5555
  height,
@@ -5211,7 +5597,7 @@ var AnimatedImageInner = ({
5211
5597
  style,
5212
5598
  requestInit
5213
5599
  };
5214
- return /* @__PURE__ */ jsx13(Sequence, {
5600
+ return /* @__PURE__ */ jsx14(Sequence, {
5215
5601
  layout: "none",
5216
5602
  durationInFrames: resolvedDuration,
5217
5603
  name: "<AnimatedImage>",
@@ -5220,7 +5606,7 @@ var AnimatedImageInner = ({
5220
5606
  _remotionInternalEffects: memoizedEffectDefinitions,
5221
5607
  ...sequenceProps,
5222
5608
  _remotionInternalRefForOutline: actualRef,
5223
- children: /* @__PURE__ */ jsx13(AnimatedImageContent, {
5609
+ children: /* @__PURE__ */ jsx14(AnimatedImageContent, {
5224
5610
  ...animatedImageProps,
5225
5611
  ref: actualRef,
5226
5612
  effects,
@@ -5228,7 +5614,11 @@ var AnimatedImageInner = ({
5228
5614
  })
5229
5615
  });
5230
5616
  };
5231
- var AnimatedImage = wrapInSchema(AnimatedImageInner, animatedImageSchema);
5617
+ var AnimatedImage = wrapInSchema({
5618
+ Component: AnimatedImageInner,
5619
+ schema: animatedImageSchema,
5620
+ supportsEffects: true
5621
+ });
5232
5622
  AnimatedImage.displayName = "AnimatedImage";
5233
5623
  addSequenceStackTraces(AnimatedImage);
5234
5624
  var validateArtifactFilename = (filename) => {
@@ -5260,7 +5650,7 @@ var validateRenderAsset = (artifact) => {
5260
5650
  }
5261
5651
  validateContent(artifact.content);
5262
5652
  };
5263
- var RenderAssetManager = createContext16({
5653
+ var RenderAssetManager = createContext17({
5264
5654
  registerRenderAsset: () => {
5265
5655
  return;
5266
5656
  },
@@ -5310,7 +5700,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
5310
5700
  renderAssets
5311
5701
  };
5312
5702
  }, [renderAssets, registerRenderAsset, unregisterRenderAsset]);
5313
- return /* @__PURE__ */ jsx14(RenderAssetManager.Provider, {
5703
+ return /* @__PURE__ */ jsx15(RenderAssetManager.Provider, {
5314
5704
  value: contextValue,
5315
5705
  children
5316
5706
  });
@@ -5398,9 +5788,9 @@ var calculateMediaDuration = ({
5398
5788
  const actualDuration = duration / playbackRate;
5399
5789
  return Math.floor(actualDuration);
5400
5790
  };
5401
- var LoopContext = createContext17(null);
5791
+ var LoopContext = createContext18(null);
5402
5792
  var useLoop = () => {
5403
- return React15.useContext(LoopContext);
5793
+ return React16.useContext(LoopContext);
5404
5794
  };
5405
5795
  var Loop = ({
5406
5796
  durationInFrames,
@@ -5445,9 +5835,9 @@ var Loop = ({
5445
5835
  durationInFrames
5446
5836
  };
5447
5837
  }, [currentFrame, durationInFrames]);
5448
- return /* @__PURE__ */ jsx15(LoopContext.Provider, {
5838
+ return /* @__PURE__ */ jsx16(LoopContext.Provider, {
5449
5839
  value: loopContext,
5450
- children: /* @__PURE__ */ jsx15(Sequence, {
5840
+ children: /* @__PURE__ */ jsx16(Sequence, {
5451
5841
  durationInFrames,
5452
5842
  from,
5453
5843
  name: name ?? "<Loop>",
@@ -5470,7 +5860,7 @@ var playbackLogging = ({
5470
5860
  const tags = [mountTime ? Date.now() - mountTime + "ms " : null, tag].filter(Boolean).join(" ");
5471
5861
  Log.trace({ logLevel, tag: null }, `[${tags}]`, message);
5472
5862
  };
5473
- var PreloadContext = createContext18({});
5863
+ var PreloadContext = createContext19({});
5474
5864
  var preloads = {};
5475
5865
  var updaters = [];
5476
5866
  var setPreloads = (updater) => {
@@ -5488,7 +5878,7 @@ var PrefetchProvider = ({ children }) => {
5488
5878
  updaters = updaters.filter((u) => u !== updaterFunction);
5489
5879
  };
5490
5880
  }, []);
5491
- return /* @__PURE__ */ jsx16(PreloadContext.Provider, {
5881
+ return /* @__PURE__ */ jsx17(PreloadContext.Provider, {
5492
5882
  value: _preloads,
5493
5883
  children
5494
5884
  });
@@ -5794,7 +6184,7 @@ var durationReducer = (state, action) => {
5794
6184
  return state;
5795
6185
  }
5796
6186
  };
5797
- var DurationsContext = createContext19({
6187
+ var DurationsContext = createContext20({
5798
6188
  durations: {},
5799
6189
  setDurations: () => {
5800
6190
  throw new Error("context missing");
@@ -5808,7 +6198,7 @@ var DurationsContextProvider = ({ children }) => {
5808
6198
  setDurations
5809
6199
  };
5810
6200
  }, [durations]);
5811
- return /* @__PURE__ */ jsx17(DurationsContext.Provider, {
6201
+ return /* @__PURE__ */ jsx18(DurationsContext.Provider, {
5812
6202
  value,
5813
6203
  children
5814
6204
  });
@@ -6047,8 +6437,8 @@ var didPropChange = (key, newProp, prevProp) => {
6047
6437
  }
6048
6438
  return true;
6049
6439
  };
6050
- var SharedAudioContext = createContext20(null);
6051
- var SharedAudioTagsContext = createContext20(null);
6440
+ var SharedAudioContext = createContext21(null);
6441
+ var SharedAudioTagsContext = createContext21(null);
6052
6442
  var shouldSaveForLater = (state) => {
6053
6443
  if (state === "suspended" || state === "running-to-suspended" || state === "interrupted") {
6054
6444
  return true;
@@ -6211,7 +6601,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
6211
6601
  getIsResumingAudioContext,
6212
6602
  unscheduleAudioNode
6213
6603
  ]);
6214
- return /* @__PURE__ */ jsx18(SharedAudioContext.Provider, {
6604
+ return /* @__PURE__ */ jsx19(SharedAudioContext.Provider, {
6215
6605
  value: audioContextValue,
6216
6606
  children
6217
6607
  });
@@ -6241,7 +6631,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
6241
6631
  };
6242
6632
  });
6243
6633
  }, [audioContext, numberOfAudioTags]);
6244
- const effectToUse = React18.useInsertionEffect ?? React18.useLayoutEffect;
6634
+ const effectToUse = React19.useInsertionEffect ?? React19.useLayoutEffect;
6245
6635
  effectToUse(() => {
6246
6636
  return () => {
6247
6637
  requestAnimationFrame(() => {
@@ -6384,7 +6774,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
6384
6774
  value: audioTagsValue,
6385
6775
  children: [
6386
6776
  refs.map(({ id, ref }) => {
6387
- return /* @__PURE__ */ jsx18("audio", {
6777
+ return /* @__PURE__ */ jsx19("audio", {
6388
6778
  ref,
6389
6779
  preload: "metadata",
6390
6780
  src: EMPTY_AUDIO
@@ -6406,7 +6796,7 @@ var useSharedAudio = ({
6406
6796
  if (tagsCtx && tagsCtx.numberOfAudioTags > 0) {
6407
6797
  return tagsCtx.registerAudio({ aud, audioId, premounting, postmounting });
6408
6798
  }
6409
- const el = React18.createRef();
6799
+ const el = React19.createRef();
6410
6800
  const mediaElementSourceNode = audioCtx?.audioContext ? makeSharedElementSourceNode({
6411
6801
  audioContext: audioCtx.audioContext,
6412
6802
  ref: el
@@ -6425,7 +6815,7 @@ var useSharedAudio = ({
6425
6815
  }
6426
6816
  };
6427
6817
  });
6428
- const effectToUse = React18.useInsertionEffect ?? React18.useLayoutEffect;
6818
+ const effectToUse = React19.useInsertionEffect ?? React19.useLayoutEffect;
6429
6819
  if (typeof document !== "undefined") {
6430
6820
  effectToUse(() => {
6431
6821
  if (tagsCtx && tagsCtx.numberOfAudioTags > 0) {
@@ -6857,7 +7247,8 @@ var useMediaInTimeline = ({
6857
7247
  postmountDisplay,
6858
7248
  controls: null,
6859
7249
  effects: [],
6860
- refForOutline
7250
+ refForOutline,
7251
+ isInsideSeries: false
6861
7252
  });
6862
7253
  return () => {
6863
7254
  unregisterSequence(id);
@@ -6970,11 +7361,11 @@ var useBufferManager = (logLevel, mountTime) => {
6970
7361
  return { addBlock, listenForBuffering, listenForResume, buffering };
6971
7362
  }, [addBlock, buffering, listenForBuffering, listenForResume]);
6972
7363
  };
6973
- var BufferingContextReact = React19.createContext(null);
7364
+ var BufferingContextReact = React20.createContext(null);
6974
7365
  var BufferingProvider = ({ children }) => {
6975
7366
  const { logLevel, mountTime } = useContext24(LogLevelContext);
6976
7367
  const bufferManager = useBufferManager(logLevel ?? "info", mountTime);
6977
- return /* @__PURE__ */ jsx19(BufferingContextReact.Provider, {
7368
+ return /* @__PURE__ */ jsx20(BufferingContextReact.Provider, {
6978
7369
  value: bufferManager,
6979
7370
  children
6980
7371
  });
@@ -7121,7 +7512,7 @@ var useBufferUntilFirstFrame = ({
7121
7512
  }, [bufferUntilFirstFrame]);
7122
7513
  };
7123
7514
  var useCurrentTimeOfMediaTagWithUpdateTimeStamp = (mediaRef) => {
7124
- const lastUpdate = React20.useRef({
7515
+ const lastUpdate = React21.useRef({
7125
7516
  time: mediaRef.current?.currentTime ?? 0,
7126
7517
  lastUpdate: performance.now()
7127
7518
  });
@@ -7699,11 +8090,11 @@ var useMediaTag = ({
7699
8090
  env.isPlayer
7700
8091
  ]);
7701
8092
  };
7702
- var MediaVolumeContext = createContext21({
8093
+ var MediaVolumeContext = createContext22({
7703
8094
  mediaMuted: false,
7704
8095
  mediaVolume: 1
7705
8096
  });
7706
- var SetMediaVolumeContext = createContext21({
8097
+ var SetMediaVolumeContext = createContext22({
7707
8098
  setMediaMuted: () => {
7708
8099
  throw new Error("default");
7709
8100
  },
@@ -7870,7 +8261,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7870
8261
  volume: userPreferredVolume,
7871
8262
  shouldUseWebAudioApi: useWebAudioApi ?? false
7872
8263
  });
7873
- const effectToUse = React21.useInsertionEffect ?? React21.useLayoutEffect;
8264
+ const effectToUse = React22.useInsertionEffect ?? React22.useLayoutEffect;
7874
8265
  effectToUse(() => {
7875
8266
  return () => {
7876
8267
  requestAnimationFrame(() => {
@@ -7903,7 +8294,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7903
8294
  if (initialShouldPreMountAudioElements) {
7904
8295
  return null;
7905
8296
  }
7906
- return /* @__PURE__ */ jsx20("audio", {
8297
+ return /* @__PURE__ */ jsx21("audio", {
7907
8298
  ref: audioRef,
7908
8299
  preload: "metadata",
7909
8300
  crossOrigin: crossOriginValue,
@@ -8037,7 +8428,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
8037
8428
  if (!needsToRenderAudioTag) {
8038
8429
  return null;
8039
8430
  }
8040
- return /* @__PURE__ */ jsx21("audio", {
8431
+ return /* @__PURE__ */ jsx222("audio", {
8041
8432
  ref: audioRef,
8042
8433
  ...nativeProps,
8043
8434
  onError: onNativeError
@@ -8096,14 +8487,14 @@ var AudioRefForwardingFunction = (props, ref) => {
8096
8487
  });
8097
8488
  if (loop && durationFetched !== undefined) {
8098
8489
  if (!Number.isFinite(durationFetched)) {
8099
- return /* @__PURE__ */ jsx222(Html5Audio, {
8490
+ return /* @__PURE__ */ jsx23(Html5Audio, {
8100
8491
  ...propsOtherThanLoop,
8101
8492
  ref,
8102
8493
  _remotionInternalNativeLoopPassed: true
8103
8494
  });
8104
8495
  }
8105
8496
  const duration = durationFetched * fps;
8106
- return /* @__PURE__ */ jsx222(Loop, {
8497
+ return /* @__PURE__ */ jsx23(Loop, {
8107
8498
  layout: "none",
8108
8499
  durationInFrames: calculateMediaDuration({
8109
8500
  trimAfter: trimAfterValue,
@@ -8111,7 +8502,7 @@ var AudioRefForwardingFunction = (props, ref) => {
8111
8502
  playbackRate: props.playbackRate ?? 1,
8112
8503
  trimBefore: trimBeforeValue
8113
8504
  }),
8114
- children: /* @__PURE__ */ jsx222(Html5Audio, {
8505
+ children: /* @__PURE__ */ jsx23(Html5Audio, {
8115
8506
  ...propsOtherThanLoop,
8116
8507
  ref,
8117
8508
  _remotionInternalNativeLoopPassed: true
@@ -8119,13 +8510,13 @@ var AudioRefForwardingFunction = (props, ref) => {
8119
8510
  });
8120
8511
  }
8121
8512
  if (typeof trimBeforeValue !== "undefined" || typeof trimAfterValue !== "undefined") {
8122
- return /* @__PURE__ */ jsx222(Sequence, {
8513
+ return /* @__PURE__ */ jsx23(Sequence, {
8123
8514
  layout: "none",
8124
8515
  from: 0 - (trimBeforeValue ?? 0),
8125
8516
  showInTimeline: false,
8126
8517
  durationInFrames: trimAfterValue,
8127
8518
  name,
8128
- children: /* @__PURE__ */ jsx222(Html5Audio, {
8519
+ children: /* @__PURE__ */ jsx23(Html5Audio, {
8129
8520
  _remotionInternalNeedsDurationCalculation: Boolean(loop),
8130
8521
  pauseWhenBuffering: pauseWhenBuffering ?? false,
8131
8522
  ...otherProps,
@@ -8139,7 +8530,7 @@ var AudioRefForwardingFunction = (props, ref) => {
8139
8530
  volume: props.volume
8140
8531
  }, "Html5Audio");
8141
8532
  if (environment.isRendering) {
8142
- return /* @__PURE__ */ jsx222(AudioForRendering, {
8533
+ return /* @__PURE__ */ jsx23(AudioForRendering, {
8143
8534
  onDuration,
8144
8535
  ...props,
8145
8536
  ref,
@@ -8147,7 +8538,7 @@ var AudioRefForwardingFunction = (props, ref) => {
8147
8538
  _remotionInternalNeedsDurationCalculation: Boolean(loop)
8148
8539
  });
8149
8540
  }
8150
- return /* @__PURE__ */ jsx222(AudioForPreview, {
8541
+ return /* @__PURE__ */ jsx23(AudioForPreview, {
8151
8542
  _remotionInternalNativeLoopPassed: props._remotionInternalNativeLoopPassed ?? false,
8152
8543
  _remotionInternalStack: stack ?? null,
8153
8544
  shouldPreMountAudioTags: audioTagsContext !== null && audioTagsContext.numberOfAudioTags > 0,
@@ -8163,7 +8554,18 @@ var AudioRefForwardingFunction = (props, ref) => {
8163
8554
  var Html5Audio = forwardRef7(AudioRefForwardingFunction);
8164
8555
  addSequenceStackTraces(Html5Audio);
8165
8556
  var Audio = Html5Audio;
8557
+ var resolveSolidPixelDensity = (pixelDensity) => {
8558
+ if (pixelDensity === undefined) {
8559
+ return 1;
8560
+ }
8561
+ if (typeof pixelDensity !== "number" || !Number.isFinite(pixelDensity) || pixelDensity <= 0) {
8562
+ throw new Error(`<Solid>: \`pixelDensity\` must be a positive finite number. Received: ${String(pixelDensity)}.`);
8563
+ }
8564
+ return pixelDensity;
8565
+ };
8166
8566
  var solidSchema = {
8567
+ durationInFrames: durationInFramesField,
8568
+ from: fromField,
8167
8569
  color: {
8168
8570
  type: "color",
8169
8571
  default: "transparent",
@@ -8174,14 +8576,16 @@ var solidSchema = {
8174
8576
  min: 1,
8175
8577
  step: 1,
8176
8578
  default: 1920,
8177
- description: "Width"
8579
+ description: "Width",
8580
+ hiddenFromList: false
8178
8581
  },
8179
8582
  height: {
8180
8583
  type: "number",
8181
8584
  min: 1,
8182
8585
  step: 1,
8183
8586
  default: 1080,
8184
- description: "Height"
8587
+ description: "Height",
8588
+ hiddenFromList: false
8185
8589
  },
8186
8590
  ...sequenceVisualStyleSchema,
8187
8591
  hidden: hiddenField
@@ -8193,10 +8597,14 @@ var SolidInner = ({
8193
8597
  effects = [],
8194
8598
  className,
8195
8599
  style,
8600
+ pixelDensity,
8196
8601
  overrideId,
8197
8602
  reference
8198
8603
  }) => {
8199
8604
  const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
8605
+ const resolvedPixelDensity = resolveSolidPixelDensity(pixelDensity);
8606
+ const canvasWidth = Math.ceil(width * resolvedPixelDensity);
8607
+ const canvasHeight = Math.ceil(height * resolvedPixelDensity);
8200
8608
  const [outputCanvas, setOutputCanvas] = useState15(null);
8201
8609
  const memoizedEffects = useMemoizedEffects({
8202
8610
  effects,
@@ -8242,12 +8650,12 @@ var SolidInner = ({
8242
8650
  ctx.fillRect(0, 0, 1, 1);
8243
8651
  }
8244
8652
  runEffectChain({
8245
- state: chainState.get(width, height),
8653
+ state: chainState.get(canvasWidth, canvasHeight),
8246
8654
  source: sourceCanvas,
8247
8655
  effects: memoizedEffects,
8248
8656
  output: outputCanvas,
8249
- width,
8250
- height
8657
+ width: canvasWidth,
8658
+ height: canvasHeight
8251
8659
  }).then((completed) => {
8252
8660
  if (completed) {
8253
8661
  continueRender2(handle);
@@ -8263,19 +8671,26 @@ var SolidInner = ({
8263
8671
  outputCanvas,
8264
8672
  sourceCanvas,
8265
8673
  chainState,
8266
- width,
8267
- height,
8674
+ canvasWidth,
8675
+ canvasHeight,
8268
8676
  delayRender2,
8269
8677
  continueRender2,
8270
8678
  cancelRender2,
8271
8679
  memoizedEffects
8272
8680
  ]);
8273
- return /* @__PURE__ */ jsx23("canvas", {
8681
+ const canvasStyle = useMemo29(() => {
8682
+ return {
8683
+ width,
8684
+ height,
8685
+ ...style ?? {}
8686
+ };
8687
+ }, [height, style, width]);
8688
+ return /* @__PURE__ */ jsx24("canvas", {
8274
8689
  ref: canvasRef,
8275
- width,
8276
- height,
8690
+ width: canvasWidth,
8691
+ height: canvasHeight,
8277
8692
  className,
8278
- style
8693
+ style: canvasStyle
8279
8694
  });
8280
8695
  };
8281
8696
  var SolidOuter = forwardRef8(({
@@ -8291,6 +8706,7 @@ var SolidOuter = forwardRef8(({
8291
8706
  from,
8292
8707
  hidden,
8293
8708
  showInTimeline,
8709
+ pixelDensity,
8294
8710
  ...props2
8295
8711
  }, ref) => {
8296
8712
  const memoizedEffectDefinitions = useMemoizedEffectDefinitions(effects);
@@ -8298,7 +8714,7 @@ var SolidOuter = forwardRef8(({
8298
8714
  useImperativeHandle6(ref, () => {
8299
8715
  return actualRef.current;
8300
8716
  }, []);
8301
- return /* @__PURE__ */ jsx23(Sequence, {
8717
+ return /* @__PURE__ */ jsx24(Sequence, {
8302
8718
  layout: "none",
8303
8719
  from,
8304
8720
  hidden,
@@ -8310,7 +8726,7 @@ var SolidOuter = forwardRef8(({
8310
8726
  _remotionInternalRefForOutline: actualRef,
8311
8727
  _remotionInternalDocumentationLink: name === undefined ? "https://www.remotion.dev/docs/solid" : undefined,
8312
8728
  ...props2,
8313
- children: /* @__PURE__ */ jsx23(SolidInner, {
8729
+ children: /* @__PURE__ */ jsx24(SolidInner, {
8314
8730
  reference: actualRef,
8315
8731
  overrideId: controls?.overrideId ?? null,
8316
8732
  color,
@@ -8318,11 +8734,16 @@ var SolidOuter = forwardRef8(({
8318
8734
  width,
8319
8735
  className,
8320
8736
  style,
8321
- effects
8737
+ effects,
8738
+ pixelDensity
8322
8739
  })
8323
8740
  });
8324
8741
  });
8325
- var Solid = wrapInSchema(SolidOuter, solidSchema);
8742
+ var Solid = wrapInSchema({
8743
+ Component: SolidOuter,
8744
+ schema: solidSchema,
8745
+ supportsEffects: true
8746
+ });
8326
8747
  Solid.displayName = "Solid";
8327
8748
  addSequenceStackTraces(Solid);
8328
8749
  var cachedSupport = null;
@@ -8350,6 +8771,27 @@ function assertHtmlInCanvasDimensions(width, height) {
8350
8771
  throw new Error(`HtmlInCanvas: \`height\` must be a positive integer. Received: ${String(height)}.`);
8351
8772
  }
8352
8773
  }
8774
+ function resolveHtmlInCanvasPixelDensity(pixelDensity) {
8775
+ if (pixelDensity === undefined) {
8776
+ return 1;
8777
+ }
8778
+ if (typeof pixelDensity !== "number" || !Number.isFinite(pixelDensity) || pixelDensity <= 0) {
8779
+ throw new Error(`HtmlInCanvas: \`pixelDensity\` must be a positive finite number. Received: ${String(pixelDensity)}.`);
8780
+ }
8781
+ return pixelDensity;
8782
+ }
8783
+ var resizeOffscreenCanvas = ({
8784
+ offscreen,
8785
+ width,
8786
+ height
8787
+ }) => {
8788
+ if (offscreen.width !== width) {
8789
+ offscreen.width = width;
8790
+ }
8791
+ if (offscreen.height !== height) {
8792
+ offscreen.height = height;
8793
+ }
8794
+ };
8353
8795
  var defaultOnPaint = ({
8354
8796
  canvas,
8355
8797
  element,
@@ -8363,10 +8805,23 @@ var defaultOnPaint = ({
8363
8805
  const transform = ctx.drawElementImage(elementImage, 0, 0);
8364
8806
  element.style.transform = transform.toString();
8365
8807
  };
8366
- var HtmlInCanvasAncestorContext = createContext22(false);
8367
- var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPaint, onInit, controls, style }, ref) => {
8808
+ var HtmlInCanvasAncestorContext = createContext23(false);
8809
+ var HtmlInCanvasContent = forwardRef9(({
8810
+ width,
8811
+ height,
8812
+ effects,
8813
+ children,
8814
+ onPaint,
8815
+ onInit,
8816
+ pixelDensity,
8817
+ controls,
8818
+ style
8819
+ }, ref) => {
8368
8820
  const isInsideAncestorHtmlInCanvas = useContext31(HtmlInCanvasAncestorContext);
8369
8821
  assertHtmlInCanvasDimensions(width, height);
8822
+ const resolvedPixelDensity = resolveHtmlInCanvasPixelDensity(pixelDensity);
8823
+ const canvasWidth = Math.ceil(width * resolvedPixelDensity);
8824
+ const canvasHeight = Math.ceil(height * resolvedPixelDensity);
8370
8825
  const { continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
8371
8826
  if (!isHtmlInCanvasSupported()) {
8372
8827
  cancelRender2(new Error(HTML_IN_CANVAS_UNSUPPORTED_MESSAGE));
@@ -8374,7 +8829,7 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8374
8829
  const canvas2dRef = useRef22(null);
8375
8830
  const offscreenRef = useRef22(null);
8376
8831
  const divRef = useRef22(null);
8377
- const canvasSizeKey = `${width}x${height}`;
8832
+ const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
8378
8833
  const setLayoutCanvasRef = useCallback15((node) => {
8379
8834
  canvas2dRef.current = node;
8380
8835
  if (typeof ref === "function") {
@@ -8406,8 +8861,11 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8406
8861
  if (!offscreen) {
8407
8862
  throw new Error("HtmlInCanvas: offscreen canvas not ready (transferControlToOffscreen failed or canvas is remounting)");
8408
8863
  }
8409
- offscreen.width = width;
8410
- offscreen.height = height;
8864
+ resizeOffscreenCanvas({
8865
+ offscreen,
8866
+ width: canvasWidth,
8867
+ height: canvasHeight
8868
+ });
8411
8869
  try {
8412
8870
  const placeholderCanvas = canvas2dRef.current;
8413
8871
  if (!placeholderCanvas) {
@@ -8426,7 +8884,8 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8426
8884
  const cleanup = await currentOnInit({
8427
8885
  canvas: offscreen,
8428
8886
  element,
8429
- elementImage: initImage
8887
+ elementImage: initImage,
8888
+ pixelDensity: resolvedPixelDensity
8430
8889
  });
8431
8890
  if (typeof cleanup !== "function") {
8432
8891
  throw new Error("HtmlInCanvas: when `onInit` is provided, it must return a cleanup function, or a Promise that resolves to one.");
@@ -8443,21 +8902,29 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8443
8902
  await handler({
8444
8903
  canvas: offscreen,
8445
8904
  element,
8446
- elementImage: elImage
8905
+ elementImage: elImage,
8906
+ pixelDensity: resolvedPixelDensity
8447
8907
  });
8448
8908
  await runEffectChain({
8449
- state: chainState.get(width, height),
8909
+ state: chainState.get(canvasWidth, canvasHeight),
8450
8910
  source: offscreen,
8451
8911
  effects: effectsRef.current,
8452
8912
  output: offscreen,
8453
- width,
8454
- height
8913
+ width: canvasWidth,
8914
+ height: canvasHeight
8455
8915
  });
8456
8916
  continueRender2(handle);
8457
8917
  } catch (error2) {
8458
8918
  cancelRender2(error2);
8459
8919
  }
8460
- }, [chainState, continueRender2, cancelRender2, width, height]);
8920
+ }, [
8921
+ canvasHeight,
8922
+ canvasWidth,
8923
+ chainState,
8924
+ continueRender2,
8925
+ cancelRender2,
8926
+ resolvedPixelDensity
8927
+ ]);
8461
8928
  useLayoutEffect9(() => {
8462
8929
  const placeholder = canvas2dRef.current;
8463
8930
  if (!placeholder) {
@@ -8466,8 +8933,11 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8466
8933
  placeholder.layoutSubtree = true;
8467
8934
  const offscreen = placeholder.transferControlToOffscreen();
8468
8935
  offscreenRef.current = offscreen;
8469
- offscreen.width = width;
8470
- offscreen.height = height;
8936
+ resizeOffscreenCanvas({
8937
+ offscreen,
8938
+ width: canvasWidth,
8939
+ height: canvasHeight
8940
+ });
8471
8941
  initializedRef.current = false;
8472
8942
  unmountedRef.current = false;
8473
8943
  placeholder.addEventListener("paint", onPaintCb);
@@ -8479,7 +8949,7 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8479
8949
  onInitCleanupRef.current?.();
8480
8950
  onInitCleanupRef.current = null;
8481
8951
  };
8482
- }, [onPaintCb, cancelRender2, width, height]);
8952
+ }, [onPaintCb, cancelRender2, canvasWidth, canvasHeight]);
8483
8953
  const onPaintChangedRef = useRef22(false);
8484
8954
  useLayoutEffect9(() => {
8485
8955
  if (!onPaintChangedRef.current) {
@@ -8511,17 +8981,24 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8511
8981
  height
8512
8982
  };
8513
8983
  }, [width, height]);
8984
+ const canvasStyle = useMemo30(() => {
8985
+ return {
8986
+ width,
8987
+ height,
8988
+ ...style ?? {}
8989
+ };
8990
+ }, [height, style, width]);
8514
8991
  if (isInsideAncestorHtmlInCanvas) {
8515
8992
  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.");
8516
8993
  }
8517
- return /* @__PURE__ */ jsx24(HtmlInCanvasAncestorContext.Provider, {
8994
+ return /* @__PURE__ */ jsx25(HtmlInCanvasAncestorContext.Provider, {
8518
8995
  value: true,
8519
- children: /* @__PURE__ */ jsx24("canvas", {
8996
+ children: /* @__PURE__ */ jsx25("canvas", {
8520
8997
  ref: setLayoutCanvasRef,
8521
- width,
8522
- height,
8523
- style,
8524
- children: /* @__PURE__ */ jsx24("div", {
8998
+ width: canvasWidth,
8999
+ height: canvasHeight,
9000
+ style: canvasStyle,
9001
+ children: /* @__PURE__ */ jsx25("div", {
8525
9002
  ref: divRef,
8526
9003
  style: innerStyle,
8527
9004
  children
@@ -8537,6 +9014,7 @@ var HtmlInCanvasInner = forwardRef9(({
8537
9014
  children,
8538
9015
  onPaint,
8539
9016
  onInit,
9017
+ pixelDensity,
8540
9018
  _experimentalControls: controls,
8541
9019
  style,
8542
9020
  durationInFrames,
@@ -8555,7 +9033,7 @@ var HtmlInCanvasInner = forwardRef9(({
8555
9033
  ref.current = node;
8556
9034
  }
8557
9035
  }, [ref]);
8558
- return /* @__PURE__ */ jsx24(Sequence, {
9036
+ return /* @__PURE__ */ jsx25(Sequence, {
8559
9037
  durationInFrames: resolvedDuration,
8560
9038
  name: name ?? "<HtmlInCanvas>",
8561
9039
  _remotionInternalDocumentationLink: name === undefined ? "https://www.remotion.dev/docs/remotion/html-in-canvas" : undefined,
@@ -8564,13 +9042,14 @@ var HtmlInCanvasInner = forwardRef9(({
8564
9042
  _remotionInternalRefForOutline: actualRef,
8565
9043
  layout: "none",
8566
9044
  ...sequenceProps,
8567
- children: /* @__PURE__ */ jsx24(HtmlInCanvasContent, {
9045
+ children: /* @__PURE__ */ jsx25(HtmlInCanvasContent, {
8568
9046
  ref: setCanvasRef,
8569
9047
  width,
8570
9048
  height,
8571
9049
  effects,
8572
9050
  onPaint,
8573
9051
  onInit,
9052
+ pixelDensity,
8574
9053
  controls,
8575
9054
  style,
8576
9055
  children
@@ -8579,10 +9058,16 @@ var HtmlInCanvasInner = forwardRef9(({
8579
9058
  });
8580
9059
  HtmlInCanvasInner.displayName = "HtmlInCanvas";
8581
9060
  var htmlInCanvasSchema = {
9061
+ durationInFrames: durationInFramesField,
9062
+ from: fromField,
8582
9063
  ...sequenceVisualStyleSchema,
8583
9064
  hidden: hiddenField
8584
9065
  };
8585
- var HtmlInCanvasWrapped = wrapInSchema(HtmlInCanvasInner, htmlInCanvasSchema);
9066
+ var HtmlInCanvasWrapped = wrapInSchema({
9067
+ Component: HtmlInCanvasInner,
9068
+ schema: htmlInCanvasSchema,
9069
+ supportsEffects: true
9070
+ });
8586
9071
  var HtmlInCanvas = Object.assign(HtmlInCanvasWrapped, {
8587
9072
  isSupported: isHtmlInCanvasSupported
8588
9073
  });
@@ -8595,6 +9080,8 @@ function truncateSrcForLabel(src) {
8595
9080
  return src;
8596
9081
  }
8597
9082
  var canvasImageSchema = {
9083
+ durationInFrames: durationInFramesField,
9084
+ from: fromField,
8598
9085
  fit: {
8599
9086
  type: "enum",
8600
9087
  default: "fill",
@@ -8820,7 +9307,7 @@ var CanvasImageContent = forwardRef10(({
8820
9307
  sourceCanvas,
8821
9308
  width
8822
9309
  ]);
8823
- return /* @__PURE__ */ jsx25("canvas", {
9310
+ return /* @__PURE__ */ jsx26("canvas", {
8824
9311
  ...canvasProps,
8825
9312
  ref: canvasRef,
8826
9313
  width,
@@ -8864,7 +9351,7 @@ var CanvasImageInner = forwardRef10(({
8864
9351
  useImperativeHandle7(ref, () => {
8865
9352
  return actualRef.current;
8866
9353
  }, []);
8867
- return /* @__PURE__ */ jsx25(Sequence, {
9354
+ return /* @__PURE__ */ jsx26(Sequence, {
8868
9355
  layout: "none",
8869
9356
  from: from ?? 0,
8870
9357
  durationInFrames: durationInFrames ?? Infinity,
@@ -8877,7 +9364,7 @@ var CanvasImageInner = forwardRef10(({
8877
9364
  _remotionInternalIsMedia: { type: "image", src },
8878
9365
  _remotionInternalStack: stack,
8879
9366
  _remotionInternalRefForOutline: _remotionInternalRefForOutline ?? actualRef,
8880
- children: /* @__PURE__ */ jsx25(CanvasImageContent, {
9367
+ children: /* @__PURE__ */ jsx26(CanvasImageContent, {
8881
9368
  ref: actualRef,
8882
9369
  src,
8883
9370
  width,
@@ -8898,7 +9385,11 @@ var CanvasImageInner = forwardRef10(({
8898
9385
  })
8899
9386
  });
8900
9387
  });
8901
- var CanvasImage = wrapInSchema(CanvasImageInner, canvasImageSchema);
9388
+ var CanvasImage = wrapInSchema({
9389
+ Component: CanvasImageInner,
9390
+ schema: canvasImageSchema,
9391
+ supportsEffects: true
9392
+ });
8902
9393
  CanvasImage.displayName = "CanvasImage";
8903
9394
  addSequenceStackTraces(CanvasImage);
8904
9395
  var IFrameRefForwarding = ({
@@ -8925,7 +9416,7 @@ var IFrameRefForwarding = ({
8925
9416
  console.error("Error loading iframe:", e, "Handle the event using the onError() prop to make this message disappear.");
8926
9417
  }
8927
9418
  }, [handle, onError, continueRender2]);
8928
- return /* @__PURE__ */ jsx26("iframe", {
9419
+ return /* @__PURE__ */ jsx27("iframe", {
8929
9420
  referrerPolicy: "strict-origin-when-cross-origin",
8930
9421
  ...props2,
8931
9422
  ref,
@@ -9081,7 +9572,7 @@ var ImgContent = ({
9081
9572
  requestsVideoFrame: false,
9082
9573
  isClientSideRendering
9083
9574
  });
9084
- return /* @__PURE__ */ jsx27("img", {
9575
+ return /* @__PURE__ */ jsx28("img", {
9085
9576
  ...props2,
9086
9577
  ref: imageCallbackRef,
9087
9578
  crossOrigin: crossOriginValue,
@@ -9104,7 +9595,7 @@ var NativeImgInner = ({
9104
9595
  if (!src) {
9105
9596
  throw new Error('No "src" prop was passed to <Img>.');
9106
9597
  }
9107
- return /* @__PURE__ */ jsx27(Sequence, {
9598
+ return /* @__PURE__ */ jsx28(Sequence, {
9108
9599
  layout: "none",
9109
9600
  from: from ?? 0,
9110
9601
  durationInFrames: durationInFrames ?? Infinity,
@@ -9116,7 +9607,7 @@ var NativeImgInner = ({
9116
9607
  showInTimeline: showInTimeline ?? true,
9117
9608
  hidden,
9118
9609
  _remotionInternalRefForOutline: refForOutline,
9119
- children: /* @__PURE__ */ jsx27(ImgContent, {
9610
+ children: /* @__PURE__ */ jsx28(ImgContent, {
9120
9611
  src,
9121
9612
  refForOutline,
9122
9613
  ...props2
@@ -9125,6 +9616,8 @@ var NativeImgInner = ({
9125
9616
  };
9126
9617
  var CanvasImageWithPrivateProps = CanvasImage;
9127
9618
  var imgSchema = {
9619
+ durationInFrames: durationInFramesField,
9620
+ from: fromField,
9128
9621
  ...sequenceVisualStyleSchema,
9129
9622
  hidden: hiddenField
9130
9623
  };
@@ -9194,7 +9687,7 @@ var ImgInner = ({
9194
9687
  }) => {
9195
9688
  const refForOutline = useRef24(null);
9196
9689
  if (effects.length === 0) {
9197
- return /* @__PURE__ */ jsx27(NativeImgInner, {
9690
+ return /* @__PURE__ */ jsx28(NativeImgInner, {
9198
9691
  ...props2,
9199
9692
  ref,
9200
9693
  hidden,
@@ -9230,7 +9723,7 @@ var ImgInner = ({
9230
9723
  const canvasHeight = typeof height === "number" ? height : undefined;
9231
9724
  const canvasProps = props2;
9232
9725
  const canvasFit = getFitFromObjectFit(style) ?? "fill";
9233
- return /* @__PURE__ */ jsx27(CanvasImageWithPrivateProps, {
9726
+ return /* @__PURE__ */ jsx28(CanvasImageWithPrivateProps, {
9234
9727
  src,
9235
9728
  width: canvasWidth,
9236
9729
  height: canvasHeight,
@@ -9255,9 +9748,13 @@ var ImgInner = ({
9255
9748
  ...canvasProps
9256
9749
  });
9257
9750
  };
9258
- var Img = wrapInSchema(ImgInner, imgSchema);
9751
+ var Img = wrapInSchema({
9752
+ Component: ImgInner,
9753
+ schema: imgSchema,
9754
+ supportsEffects: true
9755
+ });
9259
9756
  addSequenceStackTraces(Img);
9260
- var compositionsRef = React28.createRef();
9757
+ var compositionsRef = React29.createRef();
9261
9758
  var CompositionManagerProvider = ({
9262
9759
  children,
9263
9760
  onlyRenderComposition,
@@ -9289,14 +9786,15 @@ var CompositionManagerProvider = ({
9289
9786
  return comps.filter((c2) => c2.id !== id);
9290
9787
  });
9291
9788
  }, []);
9292
- const registerFolder = useCallback19((name, parent, nonce) => {
9789
+ const registerFolder = useCallback19((name, parent, nonce, stack) => {
9293
9790
  setFolders((prevFolders) => {
9294
9791
  return [
9295
9792
  ...prevFolders,
9296
9793
  {
9297
9794
  name,
9298
9795
  parent,
9299
- nonce
9796
+ nonce,
9797
+ stack
9300
9798
  }
9301
9799
  ];
9302
9800
  });
@@ -9335,9 +9833,9 @@ var CompositionManagerProvider = ({
9335
9833
  canvasContent
9336
9834
  };
9337
9835
  }, [compositions, folders, currentCompositionMetadata, canvasContent]);
9338
- return /* @__PURE__ */ jsx28(CompositionManager.Provider, {
9836
+ return /* @__PURE__ */ jsx29(CompositionManager.Provider, {
9339
9837
  value: compositionManagerContextValue,
9340
- children: /* @__PURE__ */ jsx28(CompositionSetters.Provider, {
9838
+ children: /* @__PURE__ */ jsx29(CompositionSetters.Provider, {
9341
9839
  value: compositionManagerSetters,
9342
9840
  children
9343
9841
  })
@@ -9435,7 +9933,7 @@ var REMOTION_STUDIO_CONTAINER_ELEMENT = "__remotion-studio-container";
9435
9933
  var getPreviewDomElement = () => {
9436
9934
  return document.getElementById(REMOTION_STUDIO_CONTAINER_ELEMENT);
9437
9935
  };
9438
- var MaxMediaCacheSizeContext = React29.createContext(null);
9936
+ var MaxMediaCacheSizeContext = React30.createContext(null);
9439
9937
  var Root = null;
9440
9938
  var listeners = [];
9441
9939
  var getRoot = () => {
@@ -9453,7 +9951,7 @@ var waitForRoot = (fn) => {
9453
9951
  listeners = listeners.filter((l) => l !== fn);
9454
9952
  };
9455
9953
  };
9456
- var MediaEnabledContext = createContext23(null);
9954
+ var MediaEnabledContext = createContext24(null);
9457
9955
  var useVideoEnabled = () => {
9458
9956
  const context = useContext34(MediaEnabledContext);
9459
9957
  if (!context) {
@@ -9480,7 +9978,7 @@ var MediaEnabledProvider = ({
9480
9978
  audioEnabled
9481
9979
  }) => {
9482
9980
  const value = useMemo33(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
9483
- return /* @__PURE__ */ jsx29(MediaEnabledContext.Provider, {
9981
+ return /* @__PURE__ */ jsx30(MediaEnabledContext.Provider, {
9484
9982
  value,
9485
9983
  children
9486
9984
  });
@@ -9504,25 +10002,25 @@ var RemotionRootContexts = ({
9504
10002
  const logging = useMemo34(() => {
9505
10003
  return { logLevel, mountTime: Date.now() };
9506
10004
  }, [logLevel]);
9507
- return /* @__PURE__ */ jsx30(LogLevelContext.Provider, {
10005
+ return /* @__PURE__ */ jsx31(LogLevelContext.Provider, {
9508
10006
  value: logging,
9509
- children: /* @__PURE__ */ jsx30(NonceContext.Provider, {
10007
+ children: /* @__PURE__ */ jsx31(NonceContext.Provider, {
9510
10008
  value: nonceContext,
9511
- children: /* @__PURE__ */ jsx30(TimelineContextProvider, {
10009
+ children: /* @__PURE__ */ jsx31(TimelineContextProvider, {
9512
10010
  frameState,
9513
- children: /* @__PURE__ */ jsx30(MediaEnabledProvider, {
10011
+ children: /* @__PURE__ */ jsx31(MediaEnabledProvider, {
9514
10012
  videoEnabled,
9515
10013
  audioEnabled,
9516
- children: /* @__PURE__ */ jsx30(EditorPropsProvider, {
9517
- children: /* @__PURE__ */ jsx30(PrefetchProvider, {
9518
- children: /* @__PURE__ */ jsx30(SequenceManagerProvider, {
9519
- children: /* @__PURE__ */ jsx30(DurationsContextProvider, {
9520
- children: /* @__PURE__ */ jsx30(BufferingProvider, {
9521
- children: /* @__PURE__ */ jsx30(SharedAudioContextProvider, {
10014
+ children: /* @__PURE__ */ jsx31(EditorPropsProvider, {
10015
+ children: /* @__PURE__ */ jsx31(PrefetchProvider, {
10016
+ children: /* @__PURE__ */ jsx31(SequenceManagerProvider, {
10017
+ children: /* @__PURE__ */ jsx31(DurationsContextProvider, {
10018
+ children: /* @__PURE__ */ jsx31(BufferingProvider, {
10019
+ children: /* @__PURE__ */ jsx31(SharedAudioContextProvider, {
9522
10020
  audioLatencyHint,
9523
10021
  audioEnabled,
9524
10022
  previewSampleRate,
9525
- children: /* @__PURE__ */ jsx30(SharedAudioTagsContextProvider, {
10023
+ children: /* @__PURE__ */ jsx31(SharedAudioTagsContextProvider, {
9526
10024
  numberOfAudioTags,
9527
10025
  children
9528
10026
  })
@@ -9708,7 +10206,7 @@ var resolveVideoConfigOrCatch = (params) => {
9708
10206
  };
9709
10207
  }
9710
10208
  };
9711
- var SequenceStackTracesUpdateContext = React31.createContext(() => {});
10209
+ var SequenceStackTracesUpdateContext = React32.createContext(() => {});
9712
10210
  var getEnvVariables = () => {
9713
10211
  if (getRemotionEnvironment().isRendering) {
9714
10212
  const param = window.remotion_envVariables;
@@ -9734,8 +10232,8 @@ var setupEnvVariables = () => {
9734
10232
  window.process.env[key] = env[key];
9735
10233
  });
9736
10234
  };
9737
- var CurrentScaleContext = React32.createContext(null);
9738
- var PreviewSizeContext = createContext24({
10235
+ var CurrentScaleContext = React33.createContext(null);
10236
+ var PreviewSizeContext = createContext25({
9739
10237
  setSize: () => {
9740
10238
  return;
9741
10239
  },
@@ -9758,6 +10256,7 @@ var calculateScale = ({
9758
10256
  }
9759
10257
  return Number(previewSize);
9760
10258
  };
10259
+ var PixelDensityContext = React34.createContext(null);
9761
10260
  var getOffthreadVideoSource = ({
9762
10261
  src,
9763
10262
  transparent,
@@ -9790,9 +10289,9 @@ var OffthreadVideoForRendering = ({
9790
10289
  const frame = useCurrentFrame();
9791
10290
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior);
9792
10291
  const videoConfig = useUnsafeVideoConfig();
9793
- const sequenceContext = useContext35(SequenceContext);
10292
+ const sequenceContext = useContext36(SequenceContext);
9794
10293
  const mediaStartsAt = useMediaStartsAt();
9795
- const { registerRenderAsset, unregisterRenderAsset } = useContext35(RenderAssetManager);
10294
+ const { registerRenderAsset, unregisterRenderAsset } = useContext36(RenderAssetManager);
9796
10295
  if (!src) {
9797
10296
  throw new TypeError("No `src` was passed to <OffthreadVideo>.");
9798
10297
  }
@@ -9958,7 +10457,7 @@ var OffthreadVideoForRendering = ({
9958
10457
  return null;
9959
10458
  }
9960
10459
  continueRender2(imageSrc.handle);
9961
- return /* @__PURE__ */ jsx31(Img, {
10460
+ return /* @__PURE__ */ jsx32(Img, {
9962
10461
  src: imageSrc.src,
9963
10462
  delayRenderRetries,
9964
10463
  delayRenderTimeoutInMilliseconds,
@@ -9981,16 +10480,22 @@ var useEmitVideoFrame = ({
9981
10480
  return;
9982
10481
  }
9983
10482
  let handle = 0;
9984
- const callback = () => {
10483
+ const callback = (_now, metadata) => {
9985
10484
  if (!ref.current) {
9986
10485
  return;
9987
10486
  }
9988
- onVideoFrame(ref.current);
10487
+ onVideoFrame(ref.current, _now, metadata);
9989
10488
  handle = ref.current.requestVideoFrameCallback(callback);
9990
10489
  };
9991
- callback();
10490
+ onVideoFrame(current);
10491
+ if (!current.requestVideoFrameCallback) {
10492
+ return;
10493
+ }
10494
+ handle = current.requestVideoFrameCallback(callback);
9992
10495
  return () => {
9993
- current.cancelVideoFrameCallback(handle);
10496
+ if (handle) {
10497
+ current.cancelVideoFrameCallback(handle);
10498
+ }
9994
10499
  };
9995
10500
  }, [onVideoFrame, ref]);
9996
10501
  };
@@ -10004,7 +10509,7 @@ class MediaPlaybackError extends Error {
10004
10509
  }
10005
10510
  }
10006
10511
  var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
10007
- const context = useContext36(SharedAudioContext);
10512
+ const context = useContext37(SharedAudioContext);
10008
10513
  if (!context) {
10009
10514
  throw new Error("SharedAudioContext not found");
10010
10515
  }
@@ -10018,7 +10523,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
10018
10523
  ref: videoRef
10019
10524
  });
10020
10525
  }, [context.audioContext]);
10021
- const effectToUse = React34.useInsertionEffect ?? React34.useLayoutEffect;
10526
+ const effectToUse = React36.useInsertionEffect ?? React36.useLayoutEffect;
10022
10527
  effectToUse(() => {
10023
10528
  return () => {
10024
10529
  requestAnimationFrame(() => {
@@ -10061,7 +10566,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
10061
10566
  }
10062
10567
  const volumePropFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
10063
10568
  const { fps, durationInFrames } = useVideoConfig();
10064
- const parentSequence = useContext36(SequenceContext);
10569
+ const parentSequence = useContext37(SequenceContext);
10065
10570
  const logLevel = useLogLevel();
10066
10571
  const mountTime = useMountTime();
10067
10572
  const [timelineId] = useState20(() => String(Math.random()));
@@ -10222,7 +10727,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
10222
10727
  requestsVideoFrame: Boolean(onVideoFrame),
10223
10728
  isClientSideRendering: false
10224
10729
  });
10225
- return /* @__PURE__ */ jsx32("video", {
10730
+ return /* @__PURE__ */ jsx33("video", {
10226
10731
  ref: videoRef,
10227
10732
  muted: muted || mediaMuted || userPreferredVolume <= 0,
10228
10733
  playsInline: true,
@@ -10265,13 +10770,13 @@ var InnerOffthreadVideo = (props2) => {
10265
10770
  trimAfter
10266
10771
  });
10267
10772
  if (typeof trimBeforeValue !== "undefined" || typeof trimAfterValue !== "undefined") {
10268
- return /* @__PURE__ */ jsx33(Sequence, {
10773
+ return /* @__PURE__ */ jsx34(Sequence, {
10269
10774
  layout: "none",
10270
10775
  from: 0 - (trimBeforeValue ?? 0),
10271
10776
  showInTimeline: false,
10272
10777
  durationInFrames: trimAfterValue,
10273
10778
  name,
10274
- children: /* @__PURE__ */ jsx33(InnerOffthreadVideo, {
10779
+ children: /* @__PURE__ */ jsx34(InnerOffthreadVideo, {
10275
10780
  pauseWhenBuffering: pauseWhenBuffering ?? false,
10276
10781
  ...otherProps,
10277
10782
  trimAfter: undefined,
@@ -10286,7 +10791,7 @@ var InnerOffthreadVideo = (props2) => {
10286
10791
  }
10287
10792
  validateMediaProps(props2, "Video");
10288
10793
  if (environment.isRendering) {
10289
- return /* @__PURE__ */ jsx33(OffthreadVideoForRendering, {
10794
+ return /* @__PURE__ */ jsx34(OffthreadVideoForRendering, {
10290
10795
  pauseWhenBuffering: pauseWhenBuffering ?? false,
10291
10796
  ...otherProps,
10292
10797
  trimAfter: undefined,
@@ -10308,7 +10813,7 @@ var InnerOffthreadVideo = (props2) => {
10308
10813
  delayRenderTimeoutInMilliseconds,
10309
10814
  ...propsForPreview
10310
10815
  } = otherProps;
10311
- return /* @__PURE__ */ jsx33(VideoForPreview, {
10816
+ return /* @__PURE__ */ jsx34(VideoForPreview, {
10312
10817
  _remotionInternalStack: stack ?? null,
10313
10818
  onDuration,
10314
10819
  onlyWarnForMediaSeekingError: true,
@@ -10326,11 +10831,9 @@ var OffthreadVideo = ({
10326
10831
  acceptableTimeShiftInSeconds,
10327
10832
  allowAmplificationDuringRender,
10328
10833
  audioStreamIndex,
10329
- className,
10330
10834
  crossOrigin,
10331
10835
  delayRenderRetries,
10332
10836
  delayRenderTimeoutInMilliseconds,
10333
- id,
10334
10837
  loopVolumeCurveBehavior,
10335
10838
  muted,
10336
10839
  name,
@@ -10353,20 +10856,19 @@ var OffthreadVideo = ({
10353
10856
  endAt,
10354
10857
  stack,
10355
10858
  startFrom,
10356
- imageFormat
10859
+ imageFormat,
10860
+ ...props2
10357
10861
  }) => {
10358
10862
  if (imageFormat) {
10359
10863
  throw new TypeError(`The \`<OffthreadVideo>\` tag does no longer accept \`imageFormat\`. Use the \`transparent\` prop if you want to render a transparent video.`);
10360
10864
  }
10361
- return /* @__PURE__ */ jsx33(InnerOffthreadVideo, {
10865
+ return /* @__PURE__ */ jsx34(InnerOffthreadVideo, {
10362
10866
  acceptableTimeShiftInSeconds,
10363
10867
  allowAmplificationDuringRender: allowAmplificationDuringRender ?? true,
10364
10868
  audioStreamIndex: audioStreamIndex ?? 0,
10365
- className,
10366
10869
  crossOrigin,
10367
10870
  delayRenderRetries,
10368
10871
  delayRenderTimeoutInMilliseconds,
10369
- id,
10370
10872
  loopVolumeCurveBehavior: loopVolumeCurveBehavior ?? "repeat",
10371
10873
  muted: muted ?? false,
10372
10874
  name,
@@ -10389,24 +10891,25 @@ var OffthreadVideo = ({
10389
10891
  trimAfter,
10390
10892
  trimBefore,
10391
10893
  useWebAudioApi: useWebAudioApi ?? false,
10392
- volume
10894
+ volume,
10895
+ ...props2
10393
10896
  });
10394
10897
  };
10395
10898
  addSequenceStackTraces(OffthreadVideo);
10396
10899
  var WATCH_REMOTION_STATIC_FILES = "remotion_staticFilesChanged";
10397
10900
  function useRemotionContexts() {
10398
- const compositionManagerCtx = React36.useContext(CompositionManager);
10399
- const timelineContext = React36.useContext(TimelineContext);
10400
- const setTimelineContext = React36.useContext(SetTimelineContext);
10401
- const sequenceContext = React36.useContext(SequenceContext);
10402
- const nonceContext = React36.useContext(NonceContext);
10403
- const canUseRemotionHooksContext = React36.useContext(CanUseRemotionHooks);
10404
- const preloadContext = React36.useContext(PreloadContext);
10405
- const resolveCompositionContext = React36.useContext(ResolveCompositionContext);
10406
- const renderAssetManagerContext = React36.useContext(RenderAssetManager);
10407
- const sequenceManagerContext = React36.useContext(SequenceManager);
10408
- const bufferManagerContext = React36.useContext(BufferingContextReact);
10409
- const logLevelContext = React36.useContext(LogLevelContext);
10901
+ const compositionManagerCtx = React38.useContext(CompositionManager);
10902
+ const timelineContext = React38.useContext(TimelineContext);
10903
+ const setTimelineContext = React38.useContext(SetTimelineContext);
10904
+ const sequenceContext = React38.useContext(SequenceContext);
10905
+ const nonceContext = React38.useContext(NonceContext);
10906
+ const canUseRemotionHooksContext = React38.useContext(CanUseRemotionHooks);
10907
+ const preloadContext = React38.useContext(PreloadContext);
10908
+ const resolveCompositionContext = React38.useContext(ResolveCompositionContext);
10909
+ const renderAssetManagerContext = React38.useContext(RenderAssetManager);
10910
+ const sequenceManagerContext = React38.useContext(SequenceManager);
10911
+ const bufferManagerContext = React38.useContext(BufferingContextReact);
10912
+ const logLevelContext = React38.useContext(LogLevelContext);
10410
10913
  return useMemo37(() => ({
10411
10914
  compositionManagerCtx,
10412
10915
  timelineContext,
@@ -10437,29 +10940,29 @@ function useRemotionContexts() {
10437
10940
  }
10438
10941
  var RemotionContextProvider = (props2) => {
10439
10942
  const { children, contexts } = props2;
10440
- return /* @__PURE__ */ jsx34(LogLevelContext.Provider, {
10943
+ return /* @__PURE__ */ jsx35(LogLevelContext.Provider, {
10441
10944
  value: contexts.logLevelContext,
10442
- children: /* @__PURE__ */ jsx34(CanUseRemotionHooks.Provider, {
10945
+ children: /* @__PURE__ */ jsx35(CanUseRemotionHooks.Provider, {
10443
10946
  value: contexts.canUseRemotionHooksContext,
10444
- children: /* @__PURE__ */ jsx34(NonceContext.Provider, {
10947
+ children: /* @__PURE__ */ jsx35(NonceContext.Provider, {
10445
10948
  value: contexts.nonceContext,
10446
- children: /* @__PURE__ */ jsx34(PreloadContext.Provider, {
10949
+ children: /* @__PURE__ */ jsx35(PreloadContext.Provider, {
10447
10950
  value: contexts.preloadContext,
10448
- children: /* @__PURE__ */ jsx34(CompositionManager.Provider, {
10951
+ children: /* @__PURE__ */ jsx35(CompositionManager.Provider, {
10449
10952
  value: contexts.compositionManagerCtx,
10450
- children: /* @__PURE__ */ jsx34(SequenceManager.Provider, {
10953
+ children: /* @__PURE__ */ jsx35(SequenceManager.Provider, {
10451
10954
  value: contexts.sequenceManagerContext,
10452
- children: /* @__PURE__ */ jsx34(RenderAssetManager.Provider, {
10955
+ children: /* @__PURE__ */ jsx35(RenderAssetManager.Provider, {
10453
10956
  value: contexts.renderAssetManagerContext,
10454
- children: /* @__PURE__ */ jsx34(ResolveCompositionContext.Provider, {
10957
+ children: /* @__PURE__ */ jsx35(ResolveCompositionContext.Provider, {
10455
10958
  value: contexts.resolveCompositionContext,
10456
- children: /* @__PURE__ */ jsx34(TimelineContext.Provider, {
10959
+ children: /* @__PURE__ */ jsx35(TimelineContext.Provider, {
10457
10960
  value: contexts.timelineContext,
10458
- children: /* @__PURE__ */ jsx34(SetTimelineContext.Provider, {
10961
+ children: /* @__PURE__ */ jsx35(SetTimelineContext.Provider, {
10459
10962
  value: contexts.setTimelineContext,
10460
- children: /* @__PURE__ */ jsx34(SequenceContext.Provider, {
10963
+ children: /* @__PURE__ */ jsx35(SequenceContext.Provider, {
10461
10964
  value: contexts.sequenceContext,
10462
- children: /* @__PURE__ */ jsx34(BufferingContextReact.Provider, {
10965
+ children: /* @__PURE__ */ jsx35(BufferingContextReact.Provider, {
10463
10966
  value: contexts.bufferManagerContext,
10464
10967
  children
10465
10968
  })
@@ -10527,8 +11030,10 @@ var Internals = {
10527
11030
  SharedAudioTagsContext,
10528
11031
  SharedAudioTagsContextProvider,
10529
11032
  invalidCompositionErrorMessage,
11033
+ invalidFolderNameErrorMessage,
10530
11034
  calculateMediaDuration,
10531
11035
  isCompositionIdValid,
11036
+ isFolderNameValid,
10532
11037
  getPreviewDomElement,
10533
11038
  compositionsRef,
10534
11039
  portalNode,
@@ -10563,6 +11068,7 @@ var Internals = {
10563
11068
  BufferingContextReact,
10564
11069
  getComponentsToAddStacksTo,
10565
11070
  CurrentScaleContext,
11071
+ PixelDensityContext,
10566
11072
  PreviewSizeContext,
10567
11073
  calculateScale,
10568
11074
  validateRenderAsset,
@@ -10602,13 +11108,19 @@ var Internals = {
10602
11108
  createWebGL2ContextError,
10603
11109
  computeEffectiveSchemaValuesDotNotation,
10604
11110
  interpolateKeyframedStatus,
11111
+ makeStaticDragOverride,
11112
+ makeKeyframedDragOverride,
11113
+ resolveDragOverrideValue,
11114
+ getStaticDragOverrideValue,
10605
11115
  OverrideIdsToNodePathsGettersContext,
10606
11116
  OverrideIdsToNodePathsSettersContext,
10607
11117
  findPropsToDelete,
10608
11118
  makeSequencePropsSubscriptionKey,
10609
11119
  getCodeValuesCtx,
10610
11120
  getEffectCodeValuesCtx,
10611
- hiddenField
11121
+ hiddenField,
11122
+ durationInFramesField,
11123
+ fromField
10612
11124
  };
10613
11125
  var validateFrame = ({
10614
11126
  allowFloats,
@@ -10635,34 +11147,15 @@ var validateFrame = ({
10635
11147
  }
10636
11148
  };
10637
11149
  var flattenChildren = (children) => {
10638
- const childrenArray = React37.Children.toArray(children);
11150
+ const childrenArray = React39.Children.toArray(children);
10639
11151
  return childrenArray.reduce((flatChildren, child) => {
10640
- if (child.type === React37.Fragment) {
11152
+ if (child.type === React39.Fragment) {
10641
11153
  return flatChildren.concat(flattenChildren(child.props.children));
10642
11154
  }
10643
11155
  flatChildren.push(child);
10644
11156
  return flatChildren;
10645
11157
  }, []);
10646
11158
  };
10647
- var IsInsideSeriesContext = createContext25(false);
10648
- var IsInsideSeriesContainer = ({ children }) => {
10649
- return /* @__PURE__ */ jsx35(IsInsideSeriesContext.Provider, {
10650
- value: true,
10651
- children
10652
- });
10653
- };
10654
- var IsNotInsideSeriesProvider = ({ children }) => {
10655
- return /* @__PURE__ */ jsx35(IsInsideSeriesContext.Provider, {
10656
- value: false,
10657
- children
10658
- });
10659
- };
10660
- var useRequireToBeInsideSeries = () => {
10661
- const isInsideSeries = React38.useContext(IsInsideSeriesContext);
10662
- if (!isInsideSeries) {
10663
- throw new Error("This component must be inside a <Series /> component.");
10664
- }
10665
- };
10666
11159
  var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
10667
11160
  useRequireToBeInsideSeries();
10668
11161
  return /* @__PURE__ */ jsx36(IsNotInsideSeriesProvider, {
@@ -10733,7 +11226,11 @@ var SeriesInner = (props2) => {
10733
11226
  })
10734
11227
  });
10735
11228
  };
10736
- var Series = Object.assign(wrapInSchema(SeriesInner, sequenceSchemaDefaultLayoutNone), {
11229
+ var Series = Object.assign(wrapInSchema({
11230
+ Component: SeriesInner,
11231
+ schema: sequenceSchemaDefaultLayoutNone,
11232
+ supportsEffects: false
11233
+ }), {
10737
11234
  Sequence: SeriesSequence
10738
11235
  });
10739
11236
  addSequenceStackTraces(Series);
@@ -11204,13 +11701,13 @@ var VideoForRenderingForwardFunction = ({
11204
11701
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
11205
11702
  const videoConfig = useUnsafeVideoConfig();
11206
11703
  const videoRef = useRef27(null);
11207
- const sequenceContext = useContext37(SequenceContext);
11704
+ const sequenceContext = useContext38(SequenceContext);
11208
11705
  const mediaStartsAt = useMediaStartsAt();
11209
11706
  const environment = useRemotionEnvironment();
11210
11707
  const logLevel = useLogLevel();
11211
11708
  const mountTime = useMountTime();
11212
11709
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
11213
- const { registerRenderAsset, unregisterRenderAsset } = useContext37(RenderAssetManager);
11710
+ const { registerRenderAsset, unregisterRenderAsset } = useContext38(RenderAssetManager);
11214
11711
  const id = useMemo39(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
11215
11712
  props2.src,
11216
11713
  sequenceContext?.cumulatedFrom,
@@ -11269,6 +11766,7 @@ var VideoForRenderingForwardFunction = ({
11269
11766
  useImperativeHandle10(ref, () => {
11270
11767
  return videoRef.current;
11271
11768
  }, []);
11769
+ useEmitVideoFrame({ ref: videoRef, onVideoFrame });
11272
11770
  useEffect21(() => {
11273
11771
  if (!window.remotion_videoEnabled) {
11274
11772
  return;
@@ -11412,6 +11910,7 @@ var VideoForwardingFunction = (props2, ref) => {
11412
11910
  _remotionInternalNativeLoopPassed,
11413
11911
  showInTimeline,
11414
11912
  onAutoPlayError,
11913
+ onVideoFrame,
11415
11914
  ...otherProps
11416
11915
  } = props2;
11417
11916
  const { loop, ...propsOtherThanLoop } = props2;
@@ -11420,7 +11919,7 @@ var VideoForwardingFunction = (props2, ref) => {
11420
11919
  if (environment.isClientSideRendering) {
11421
11920
  throw new Error("<Html5Video> is not supported in @remotion/web-renderer. Use <Video> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");
11422
11921
  }
11423
- const { durations, setDurations } = useContext38(DurationsContext);
11922
+ const { durations, setDurations } = useContext39(DurationsContext);
11424
11923
  if (typeof ref === "string") {
11425
11924
  throw new Error("string refs are not supported");
11426
11925
  }
@@ -11431,7 +11930,6 @@ var VideoForwardingFunction = (props2, ref) => {
11431
11930
  const onDuration = useCallback23((src, durationInSeconds) => {
11432
11931
  setDurations({ type: "got-duration", durationInSeconds, src });
11433
11932
  }, [setDurations]);
11434
- const onVideoFrame = useCallback23(() => {}, []);
11435
11933
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props2.src)];
11436
11934
  validateMediaTrimProps({ startFrom, endAt, trimBefore, trimAfter });
11437
11935
  const { trimBeforeValue, trimAfterValue } = resolveTrimProps({
@@ -11477,6 +11975,7 @@ var VideoForwardingFunction = (props2, ref) => {
11477
11975
  name,
11478
11976
  children: /* @__PURE__ */ jsx38(Html5Video, {
11479
11977
  pauseWhenBuffering: pauseWhenBuffering ?? false,
11978
+ onVideoFrame,
11480
11979
  ...otherProps,
11481
11980
  ref,
11482
11981
  stack
@@ -11500,7 +11999,7 @@ var VideoForwardingFunction = (props2, ref) => {
11500
11999
  onlyWarnForMediaSeekingError: false,
11501
12000
  ...otherProps,
11502
12001
  ref,
11503
- onVideoFrame: null,
12002
+ onVideoFrame: onVideoFrame ?? null,
11504
12003
  pauseWhenBuffering: pauseWhenBuffering ?? false,
11505
12004
  onDuration,
11506
12005
  _remotionInternalStack: stack ?? null,
@@ -11535,6 +12034,7 @@ var Config = new Proxy(proxyObj, {
11535
12034
  Sequence.displayName = "Sequence";
11536
12035
  addSequenceStackTraces(Sequence);
11537
12036
  addSequenceStackTraces(Composition);
12037
+ addSequenceStackTraces(Folder);
11538
12038
 
11539
12039
  // src/components/team/TeamCards.tsx
11540
12040
  import { jsx as jsx39, jsxs as jsxs3 } from "react/jsx-runtime";
@@ -11972,7 +12472,7 @@ var ExpertsPageContent = ({ Link }) => {
11972
12472
  });
11973
12473
  };
11974
12474
  // ../design/dist/esm/index.mjs
11975
- import * as React22 from "react";
12475
+ import * as React23 from "react";
11976
12476
  import * as React8 from "react";
11977
12477
  import { Fragment as Fragment22, jsx as jsx45 } from "react/jsx-runtime";
11978
12478
  import React52, { useCallback as useCallback25, useRef as useRef28, useState as useState22 } from "react";
@@ -13317,7 +13817,7 @@ var getDefaultConfig = () => {
13317
13817
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
13318
13818
 
13319
13819
  // ../design/dist/esm/index.mjs
13320
- import React33, { useEffect as useEffect22, useMemo as useMemo43, useState as useState21 } from "react";
13820
+ import React35, { useEffect as useEffect22, useMemo as useMemo43, useState as useState21 } from "react";
13321
13821
 
13322
13822
  // ../paths/dist/esm/index.mjs
13323
13823
  var cutLInstruction = ({
@@ -17680,15 +18180,15 @@ import { Fragment as Fragment5, jsx as jsx142 } from "react/jsx-runtime";
17680
18180
  import { jsx as jsx152 } from "react/jsx-runtime";
17681
18181
  import * as React122 from "react";
17682
18182
  import { jsx as jsx162 } from "react/jsx-runtime";
17683
- import * as React16 from "react";
17684
- import * as React13 from "react";
18183
+ import * as React162 from "react";
18184
+ import * as React132 from "react";
17685
18185
  import * as ReactDOM from "react-dom";
17686
18186
  import { jsx as jsx172 } from "react/jsx-runtime";
17687
- import * as React142 from "react";
18187
+ import * as React14 from "react";
17688
18188
  import * as React152 from "react";
17689
18189
  import { jsx as jsx182 } from "react/jsx-runtime";
17690
18190
  import * as React17 from "react";
17691
- import * as React182 from "react";
18191
+ import * as React18 from "react";
17692
18192
  import { jsx as jsx192 } from "react/jsx-runtime";
17693
18193
  import * as React202 from "react";
17694
18194
  import * as React192 from "react";
@@ -17698,41 +18198,41 @@ import { useLayoutEffect as useLayoutEffect32, useEffect as useEffect82 } from "
17698
18198
  import * as ReactDOM2 from "react-dom";
17699
18199
  import * as React222 from "react";
17700
18200
  import { jsx as jsx202 } from "react/jsx-runtime";
17701
- import * as React23 from "react";
18201
+ import * as React232 from "react";
17702
18202
  import { jsx as jsx213 } from "react/jsx-runtime";
17703
18203
  import * as React25 from "react";
17704
18204
  import ReactDOM3 from "react-dom";
17705
18205
  import { jsx as jsx223 } from "react/jsx-runtime";
17706
18206
  import * as React26 from "react";
17707
18207
  import * as React27 from "react";
17708
- import * as React282 from "react";
18208
+ import * as React28 from "react";
17709
18209
  import { jsx as jsx232 } from "react/jsx-runtime";
17710
- import * as React35 from "react";
17711
- import * as React312 from "react";
18210
+ import * as React352 from "react";
18211
+ import * as React31 from "react";
17712
18212
  import { useState as useState112 } from "react";
17713
18213
  import * as React292 from "react";
17714
- import * as React30 from "react";
18214
+ import * as React302 from "react";
17715
18215
  import * as React342 from "react";
17716
18216
  import * as React332 from "react";
17717
18217
  import * as React322 from "react";
17718
18218
  import { Fragment as Fragment8, jsx as jsx242, jsxs as jsxs42 } from "react/jsx-runtime";
17719
18219
  import { forwardRef as forwardRef142, createElement as createElement7 } from "react";
17720
18220
  import { forwardRef as forwardRef132, createElement as createElement6 } from "react";
17721
- import * as React372 from "react";
18221
+ import * as React37 from "react";
17722
18222
  import { jsx as jsx252, jsxs as jsxs52 } from "react/jsx-runtime";
17723
18223
  import { jsx as jsx262 } from "react/jsx-runtime";
17724
18224
  import * as React49 from "react";
17725
18225
  import * as React382 from "react";
17726
18226
  import { jsx as jsx272 } from "react/jsx-runtime";
17727
18227
  import * as React47 from "react";
17728
- import React402 from "react";
17729
- import * as React39 from "react";
18228
+ import React40 from "react";
18229
+ import * as React392 from "react";
17730
18230
  import { Fragment as Fragment222, jsx as jsx282 } from "react/jsx-runtime";
17731
18231
  import { jsx as jsx292 } from "react/jsx-runtime";
17732
18232
  import React210 from "react";
17733
18233
  import { jsx as jsx2102 } from "react/jsx-runtime";
17734
18234
  import * as React42 from "react";
17735
- import * as React41 from "react";
18235
+ import * as React412 from "react";
17736
18236
  import * as React43 from "react";
17737
18237
  import * as ReactDOM5 from "react-dom";
17738
18238
  import { jsx as jsx302 } from "react/jsx-runtime";
@@ -17785,7 +18285,7 @@ function useComposedRefs(...refs) {
17785
18285
  return React8.useCallback(composeRefs(...refs), refs);
17786
18286
  }
17787
18287
  var REACT_LAZY_TYPE = Symbol.for("react.lazy");
17788
- var use = React22[" use ".trim().toString()];
18288
+ var use = React23[" use ".trim().toString()];
17789
18289
  function isPromiseLike(value) {
17790
18290
  return typeof value === "object" && value !== null && "then" in value;
17791
18291
  }
@@ -17794,25 +18294,25 @@ function isLazyComponent(element) {
17794
18294
  }
17795
18295
  function createSlot(ownerName) {
17796
18296
  const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);
17797
- const Slot2 = React22.forwardRef((props, forwardedRef) => {
18297
+ const Slot2 = React23.forwardRef((props, forwardedRef) => {
17798
18298
  let { children, ...slotProps } = props;
17799
18299
  if (isLazyComponent(children) && typeof use === "function") {
17800
18300
  children = use(children._payload);
17801
18301
  }
17802
- const childrenArray = React22.Children.toArray(children);
18302
+ const childrenArray = React23.Children.toArray(children);
17803
18303
  const slottable = childrenArray.find(isSlottable);
17804
18304
  if (slottable) {
17805
18305
  const newElement = slottable.props.children;
17806
18306
  const newChildren = childrenArray.map((child) => {
17807
18307
  if (child === slottable) {
17808
- if (React22.Children.count(newElement) > 1)
17809
- return React22.Children.only(null);
17810
- return React22.isValidElement(newElement) ? newElement.props.children : null;
18308
+ if (React23.Children.count(newElement) > 1)
18309
+ return React23.Children.only(null);
18310
+ return React23.isValidElement(newElement) ? newElement.props.children : null;
17811
18311
  } else {
17812
18312
  return child;
17813
18313
  }
17814
18314
  });
17815
- return /* @__PURE__ */ jsx45(SlotClone, { ...slotProps, ref: forwardedRef, children: React22.isValidElement(newElement) ? React22.cloneElement(newElement, undefined, newChildren) : null });
18315
+ return /* @__PURE__ */ jsx45(SlotClone, { ...slotProps, ref: forwardedRef, children: React23.isValidElement(newElement) ? React23.cloneElement(newElement, undefined, newChildren) : null });
17816
18316
  }
17817
18317
  return /* @__PURE__ */ jsx45(SlotClone, { ...slotProps, ref: forwardedRef, children });
17818
18318
  });
@@ -17821,20 +18321,20 @@ function createSlot(ownerName) {
17821
18321
  }
17822
18322
  var Slot = /* @__PURE__ */ createSlot("Slot");
17823
18323
  function createSlotClone(ownerName) {
17824
- const SlotClone = React22.forwardRef((props, forwardedRef) => {
18324
+ const SlotClone = React23.forwardRef((props, forwardedRef) => {
17825
18325
  let { children, ...slotProps } = props;
17826
18326
  if (isLazyComponent(children) && typeof use === "function") {
17827
18327
  children = use(children._payload);
17828
18328
  }
17829
- if (React22.isValidElement(children)) {
18329
+ if (React23.isValidElement(children)) {
17830
18330
  const childrenRef = getElementRef(children);
17831
18331
  const props2 = mergeProps(slotProps, children.props);
17832
- if (children.type !== React22.Fragment) {
18332
+ if (children.type !== React23.Fragment) {
17833
18333
  props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
17834
18334
  }
17835
- return React22.cloneElement(children, props2);
18335
+ return React23.cloneElement(children, props2);
17836
18336
  }
17837
- return React22.Children.count(children) > 1 ? React22.Children.only(null) : null;
18337
+ return React23.Children.count(children) > 1 ? React23.Children.only(null) : null;
17838
18338
  });
17839
18339
  SlotClone.displayName = `${ownerName}.SlotClone`;
17840
18340
  return SlotClone;
@@ -17850,7 +18350,7 @@ function createSlottable(ownerName) {
17850
18350
  }
17851
18351
  var Slottable = /* @__PURE__ */ createSlottable("Slottable");
17852
18352
  function isSlottable(child) {
17853
- return React22.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;
18353
+ return React23.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;
17854
18354
  }
17855
18355
  function mergeProps(slotProps, childProps) {
17856
18356
  const overrideProps = { ...childProps };
@@ -17907,7 +18407,7 @@ var getChildNodeFrom = (htmlElement) => {
17907
18407
  return childNode;
17908
18408
  };
17909
18409
  var useHoverTransforms = (ref, disabled) => {
17910
- const [state, setState] = React33.useState({
18410
+ const [state, setState] = React35.useState({
17911
18411
  progress: 0,
17912
18412
  isActive: false
17913
18413
  });
@@ -17919,7 +18419,7 @@ var useHoverTransforms = (ref, disabled) => {
17919
18419
  eventTarget.dispatchEvent(new Event("enabled"));
17920
18420
  }
17921
18421
  }, [disabled, eventTarget]);
17922
- React33.useEffect(() => {
18422
+ React35.useEffect(() => {
17923
18423
  const element = ref.current;
17924
18424
  if (!element)
17925
18425
  return;
@@ -17994,8 +18494,8 @@ var useHoverTransforms = (ref, disabled) => {
17994
18494
  return state;
17995
18495
  };
17996
18496
  var useClickTransforms = (ref) => {
17997
- const [hoverProgress, setHoverProgress] = React33.useState(0);
17998
- React33.useEffect(() => {
18497
+ const [hoverProgress, setHoverProgress] = React35.useState(0);
18498
+ React35.useEffect(() => {
17999
18499
  const element = getChildNodeFrom(ref.current);
18000
18500
  if (!element) {
18001
18501
  return;
@@ -18723,7 +19223,7 @@ var NODES = [
18723
19223
  "ul"
18724
19224
  ];
18725
19225
  var Primitive = NODES.reduce((primitive, node) => {
18726
- const Node2 = React13.forwardRef((props, forwardedRef) => {
19226
+ const Node2 = React132.forwardRef((props, forwardedRef) => {
18727
19227
  const { asChild, ...primitiveProps } = props;
18728
19228
  const Comp = asChild ? Slot2 : node;
18729
19229
  if (typeof window !== "undefined") {
@@ -18739,11 +19239,11 @@ function dispatchDiscreteCustomEvent(target, event) {
18739
19239
  ReactDOM.flushSync(() => target.dispatchEvent(event));
18740
19240
  }
18741
19241
  function useCallbackRef(callback) {
18742
- const callbackRef = React142.useRef(callback);
18743
- React142.useEffect(() => {
19242
+ const callbackRef = React14.useRef(callback);
19243
+ React14.useEffect(() => {
18744
19244
  callbackRef.current = callback;
18745
19245
  });
18746
- return React142.useMemo(() => (...args) => callbackRef.current?.(...args), []);
19246
+ return React14.useMemo(() => (...args) => callbackRef.current?.(...args), []);
18747
19247
  }
18748
19248
  function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {
18749
19249
  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);
@@ -18762,12 +19262,12 @@ var CONTEXT_UPDATE = "dismissableLayer.update";
18762
19262
  var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside";
18763
19263
  var FOCUS_OUTSIDE = "dismissableLayer.focusOutside";
18764
19264
  var originalBodyPointerEvents;
18765
- var DismissableLayerContext = React16.createContext({
19265
+ var DismissableLayerContext = React162.createContext({
18766
19266
  layers: /* @__PURE__ */ new Set,
18767
19267
  layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set,
18768
19268
  branches: /* @__PURE__ */ new Set
18769
19269
  });
18770
- var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
19270
+ var DismissableLayer = React162.forwardRef((props, forwardedRef) => {
18771
19271
  const {
18772
19272
  disableOutsidePointerEvents = false,
18773
19273
  onEscapeKeyDown,
@@ -18777,10 +19277,10 @@ var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
18777
19277
  onDismiss,
18778
19278
  ...layerProps
18779
19279
  } = props;
18780
- const context = React16.useContext(DismissableLayerContext);
18781
- const [node, setNode] = React16.useState(null);
19280
+ const context = React162.useContext(DismissableLayerContext);
19281
+ const [node, setNode] = React162.useState(null);
18782
19282
  const ownerDocument = node?.ownerDocument ?? globalThis?.document;
18783
- const [, force] = React16.useState({});
19283
+ const [, force] = React162.useState({});
18784
19284
  const composedRefs = useComposedRefs2(forwardedRef, (node2) => setNode(node2));
18785
19285
  const layers = Array.from(context.layers);
18786
19286
  const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);
@@ -18818,7 +19318,7 @@ var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
18818
19318
  onDismiss();
18819
19319
  }
18820
19320
  }, ownerDocument);
18821
- React16.useEffect(() => {
19321
+ React162.useEffect(() => {
18822
19322
  if (!node)
18823
19323
  return;
18824
19324
  if (disableOutsidePointerEvents) {
@@ -18836,7 +19336,7 @@ var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
18836
19336
  }
18837
19337
  };
18838
19338
  }, [node, ownerDocument, disableOutsidePointerEvents, context]);
18839
- React16.useEffect(() => {
19339
+ React162.useEffect(() => {
18840
19340
  return () => {
18841
19341
  if (!node)
18842
19342
  return;
@@ -18845,7 +19345,7 @@ var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
18845
19345
  dispatchUpdate();
18846
19346
  };
18847
19347
  }, [node, context]);
18848
- React16.useEffect(() => {
19348
+ React162.useEffect(() => {
18849
19349
  const handleUpdate = () => force({});
18850
19350
  document.addEventListener(CONTEXT_UPDATE, handleUpdate);
18851
19351
  return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
@@ -18864,11 +19364,11 @@ var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
18864
19364
  });
18865
19365
  DismissableLayer.displayName = DISMISSABLE_LAYER_NAME;
18866
19366
  var BRANCH_NAME = "DismissableLayerBranch";
18867
- var DismissableLayerBranch = React16.forwardRef((props, forwardedRef) => {
18868
- const context = React16.useContext(DismissableLayerContext);
18869
- const ref = React16.useRef(null);
19367
+ var DismissableLayerBranch = React162.forwardRef((props, forwardedRef) => {
19368
+ const context = React162.useContext(DismissableLayerContext);
19369
+ const ref = React162.useRef(null);
18870
19370
  const composedRefs = useComposedRefs2(forwardedRef, ref);
18871
- React16.useEffect(() => {
19371
+ React162.useEffect(() => {
18872
19372
  const node = ref.current;
18873
19373
  if (node) {
18874
19374
  context.branches.add(node);
@@ -18882,9 +19382,9 @@ var DismissableLayerBranch = React16.forwardRef((props, forwardedRef) => {
18882
19382
  DismissableLayerBranch.displayName = BRANCH_NAME;
18883
19383
  function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {
18884
19384
  const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);
18885
- const isPointerInsideReactTreeRef = React16.useRef(false);
18886
- const handleClickRef = React16.useRef(() => {});
18887
- React16.useEffect(() => {
19385
+ const isPointerInsideReactTreeRef = React162.useRef(false);
19386
+ const handleClickRef = React162.useRef(() => {});
19387
+ React162.useEffect(() => {
18888
19388
  const handlePointerDown = (event) => {
18889
19389
  if (event.target && !isPointerInsideReactTreeRef.current) {
18890
19390
  let handleAndDispatchPointerDownOutsideEvent2 = function() {
@@ -18919,8 +19419,8 @@ function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?
18919
19419
  }
18920
19420
  function useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {
18921
19421
  const handleFocusOutside = useCallbackRef(onFocusOutside);
18922
- const isFocusInsideReactTreeRef = React16.useRef(false);
18923
- React16.useEffect(() => {
19422
+ const isFocusInsideReactTreeRef = React162.useRef(false);
19423
+ React162.useEffect(() => {
18924
19424
  const handleFocus = (event) => {
18925
19425
  if (event.target && !isFocusInsideReactTreeRef.current) {
18926
19426
  const eventDetail = { originalEvent: event };
@@ -18978,7 +19478,7 @@ var AUTOFOCUS_ON_MOUNT = "focusScope.autoFocusOnMount";
18978
19478
  var AUTOFOCUS_ON_UNMOUNT = "focusScope.autoFocusOnUnmount";
18979
19479
  var EVENT_OPTIONS = { bubbles: false, cancelable: true };
18980
19480
  var FOCUS_SCOPE_NAME = "FocusScope";
18981
- var FocusScope = React182.forwardRef((props, forwardedRef) => {
19481
+ var FocusScope = React18.forwardRef((props, forwardedRef) => {
18982
19482
  const {
18983
19483
  loop = false,
18984
19484
  trapped = false,
@@ -18986,12 +19486,12 @@ var FocusScope = React182.forwardRef((props, forwardedRef) => {
18986
19486
  onUnmountAutoFocus: onUnmountAutoFocusProp,
18987
19487
  ...scopeProps
18988
19488
  } = props;
18989
- const [container22, setContainer] = React182.useState(null);
19489
+ const [container22, setContainer] = React18.useState(null);
18990
19490
  const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);
18991
19491
  const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);
18992
- const lastFocusedElementRef = React182.useRef(null);
19492
+ const lastFocusedElementRef = React18.useRef(null);
18993
19493
  const composedRefs = useComposedRefs2(forwardedRef, (node) => setContainer(node));
18994
- const focusScope = React182.useRef({
19494
+ const focusScope = React18.useRef({
18995
19495
  paused: false,
18996
19496
  pause() {
18997
19497
  this.paused = true;
@@ -19000,7 +19500,7 @@ var FocusScope = React182.forwardRef((props, forwardedRef) => {
19000
19500
  this.paused = false;
19001
19501
  }
19002
19502
  }).current;
19003
- React182.useEffect(() => {
19503
+ React18.useEffect(() => {
19004
19504
  if (trapped) {
19005
19505
  let handleFocusIn2 = function(event) {
19006
19506
  if (focusScope.paused || !container22)
@@ -19042,7 +19542,7 @@ var FocusScope = React182.forwardRef((props, forwardedRef) => {
19042
19542
  };
19043
19543
  }
19044
19544
  }, [trapped, container22, focusScope.paused]);
19045
- React182.useEffect(() => {
19545
+ React18.useEffect(() => {
19046
19546
  if (container22) {
19047
19547
  focusScopesStack.add(focusScope);
19048
19548
  const previouslyFocusedElement = document.activeElement;
@@ -19073,7 +19573,7 @@ var FocusScope = React182.forwardRef((props, forwardedRef) => {
19073
19573
  };
19074
19574
  }
19075
19575
  }, [container22, onMountAutoFocus, onUnmountAutoFocus, focusScope]);
19076
- const handleKeyDown = React182.useCallback((event) => {
19576
+ const handleKeyDown = React18.useCallback((event) => {
19077
19577
  if (!loop && !trapped)
19078
19578
  return;
19079
19579
  if (focusScope.paused)
@@ -21003,7 +21503,7 @@ var Arrow = React222.forwardRef((props, forwardedRef) => {
21003
21503
  Arrow.displayName = NAME;
21004
21504
  var Root2 = Arrow;
21005
21505
  function useSize(element) {
21006
- const [size4, setSize] = React23.useState(undefined);
21506
+ const [size4, setSize] = React232.useState(undefined);
21007
21507
  useLayoutEffect22(() => {
21008
21508
  if (element) {
21009
21509
  setSize({ width: element.offsetWidth, height: element.offsetHeight });
@@ -21325,7 +21825,7 @@ function usePrevious(value) {
21325
21825
  }, [value]);
21326
21826
  }
21327
21827
  var NAME2 = "VisuallyHidden";
21328
- var VisuallyHidden = React282.forwardRef((props, forwardedRef) => {
21828
+ var VisuallyHidden = React28.forwardRef((props, forwardedRef) => {
21329
21829
  return /* @__PURE__ */ jsx232(Primitive.span, {
21330
21830
  ...props,
21331
21831
  ref: forwardedRef,
@@ -21655,7 +22155,7 @@ var SideCar = function(_a) {
21655
22155
  if (!Target) {
21656
22156
  throw new Error("Sidecar medium not found");
21657
22157
  }
21658
- return React30.createElement(Target, __assign({}, rest));
22158
+ return React302.createElement(Target, __assign({}, rest));
21659
22159
  };
21660
22160
  SideCar.isSideCarExport = true;
21661
22161
  function exportSidecar(medium, exported) {
@@ -21666,9 +22166,9 @@ var effectCar = createSidecarMedium();
21666
22166
  var nothing = function() {
21667
22167
  return;
21668
22168
  };
21669
- var RemoveScroll = React312.forwardRef(function(props, parentRef) {
21670
- var ref = React312.useRef(null);
21671
- var _a = React312.useState({
22169
+ var RemoveScroll = React31.forwardRef(function(props, parentRef) {
22170
+ var ref = React31.useRef(null);
22171
+ var _a = React31.useState({
21672
22172
  onScrollCapture: nothing,
21673
22173
  onWheelCapture: nothing,
21674
22174
  onTouchMoveCapture: nothing
@@ -21677,7 +22177,7 @@ var RemoveScroll = React312.forwardRef(function(props, parentRef) {
21677
22177
  var SideCar2 = sideCar;
21678
22178
  var containerRef = useMergeRefs([ref, parentRef]);
21679
22179
  var containerProps = __assign(__assign({}, rest), callbacks);
21680
- return React312.createElement(React312.Fragment, null, enabled && React312.createElement(SideCar2, { sideCar: effectCar, removeScrollBar, shards, noIsolation, inert, setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode }), forwardProps ? React312.cloneElement(React312.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef })) : React312.createElement(Container, __assign({}, containerProps, { className, ref: containerRef }), children));
22180
+ return React31.createElement(React31.Fragment, null, enabled && React31.createElement(SideCar2, { sideCar: effectCar, removeScrollBar, shards, noIsolation, inert, setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode }), forwardProps ? React31.cloneElement(React31.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef })) : React31.createElement(Container, __assign({}, containerProps, { className, ref: containerRef }), children));
21681
22181
  });
21682
22182
  RemoveScroll.defaultProps = {
21683
22183
  enabled: true,
@@ -22136,8 +22636,8 @@ function getOutermostShadowParent(node) {
22136
22636
  return shadowParent;
22137
22637
  }
22138
22638
  var sidecar_default = exportSidecar(effectCar, RemoveScrollSideCar);
22139
- var ReactRemoveScroll = React35.forwardRef(function(props, ref) {
22140
- return React35.createElement(RemoveScroll, __assign({}, props, { ref, sideCar: sidecar_default }));
22639
+ var ReactRemoveScroll = React352.forwardRef(function(props, ref) {
22640
+ return React352.createElement(RemoveScroll, __assign({}, props, { ref, sideCar: sidecar_default }));
22141
22641
  });
22142
22642
  ReactRemoveScroll.classNames = RemoveScroll.classNames;
22143
22643
  var Combination_default = ReactRemoveScroll;
@@ -23143,7 +23643,7 @@ var ChevronDown = createLucideIcon("ChevronDown", [
23143
23643
  var ChevronUp = createLucideIcon("ChevronUp", [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]]);
23144
23644
  var Select2 = Root222;
23145
23645
  var SelectValue2 = Value;
23146
- var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Trigger, {
23646
+ var SelectTrigger2 = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Trigger, {
23147
23647
  ref,
23148
23648
  className: cn("flex h-10 w-full items-center justify-between rounded-md border-black border-2 border-b-4 bg-card-bg px-3 py-5 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 font-brand", className),
23149
23649
  ...props,
@@ -23158,7 +23658,7 @@ var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref
23158
23658
  ]
23159
23659
  }));
23160
23660
  SelectTrigger2.displayName = Trigger.displayName;
23161
- var SelectScrollUpButton2 = React372.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(ScrollUpButton, {
23661
+ var SelectScrollUpButton2 = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(ScrollUpButton, {
23162
23662
  ref,
23163
23663
  className: cn("flex cursor-default items-center justify-center py-1", className),
23164
23664
  ...props,
@@ -23167,7 +23667,7 @@ var SelectScrollUpButton2 = React372.forwardRef(({ className, ...props }, ref) =
23167
23667
  })
23168
23668
  }));
23169
23669
  SelectScrollUpButton2.displayName = ScrollUpButton.displayName;
23170
- var SelectScrollDownButton2 = React372.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(ScrollDownButton, {
23670
+ var SelectScrollDownButton2 = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(ScrollDownButton, {
23171
23671
  ref,
23172
23672
  className: cn("flex cursor-default items-center justify-center py-1", className),
23173
23673
  ...props,
@@ -23176,7 +23676,7 @@ var SelectScrollDownButton2 = React372.forwardRef(({ className, ...props }, ref)
23176
23676
  })
23177
23677
  }));
23178
23678
  SelectScrollDownButton2.displayName = ScrollDownButton.displayName;
23179
- var SelectContent2 = React372.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx252(Portal2, {
23679
+ var SelectContent2 = React37.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx252(Portal2, {
23180
23680
  children: /* @__PURE__ */ jsxs52(Content2, {
23181
23681
  ref,
23182
23682
  className: cn(" border-2 border-black relative z-50 max-h-96 min-w-32 overflow-hidden rounded-md font-brand bg-card-bg text-text shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className),
@@ -23193,13 +23693,13 @@ var SelectContent2 = React372.forwardRef(({ className, children, position = "pop
23193
23693
  })
23194
23694
  }));
23195
23695
  SelectContent2.displayName = Content2.displayName;
23196
- var SelectLabel2 = React372.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(Label, {
23696
+ var SelectLabel2 = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(Label, {
23197
23697
  ref,
23198
23698
  className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className),
23199
23699
  ...props
23200
23700
  }));
23201
23701
  SelectLabel2.displayName = Label.displayName;
23202
- var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Item, {
23702
+ var SelectItem2 = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Item, {
23203
23703
  ref,
23204
23704
  className: cn("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden focus:bg-slate-200 dark:focus:bg-white/10 data-disabled:pointer-events-none data-disabled:opacity-50 font-brand", className),
23205
23705
  ...props,
@@ -23218,7 +23718,7 @@ var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) =
23218
23718
  ]
23219
23719
  }));
23220
23720
  SelectItem2.displayName = Item.displayName;
23221
- var SelectSeparator2 = React372.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(Separator, {
23721
+ var SelectSeparator2 = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(Separator, {
23222
23722
  ref,
23223
23723
  className: cn("-mx-1 my-1 h-px bg-muted", className),
23224
23724
  ...props
@@ -23307,22 +23807,22 @@ function composeContextScopes2(...scopes) {
23307
23807
  }
23308
23808
  function createSlot2(ownerName) {
23309
23809
  const SlotClone2 = /* @__PURE__ */ createSlotClone2(ownerName);
23310
- const Slot22 = React39.forwardRef((props, forwardedRef) => {
23810
+ const Slot22 = React392.forwardRef((props, forwardedRef) => {
23311
23811
  const { children, ...slotProps } = props;
23312
- const childrenArray = React39.Children.toArray(children);
23812
+ const childrenArray = React392.Children.toArray(children);
23313
23813
  const slottable = childrenArray.find(isSlottable3);
23314
23814
  if (slottable) {
23315
23815
  const newElement = slottable.props.children;
23316
23816
  const newChildren = childrenArray.map((child) => {
23317
23817
  if (child === slottable) {
23318
- if (React39.Children.count(newElement) > 1)
23319
- return React39.Children.only(null);
23320
- return React39.isValidElement(newElement) ? newElement.props.children : null;
23818
+ if (React392.Children.count(newElement) > 1)
23819
+ return React392.Children.only(null);
23820
+ return React392.isValidElement(newElement) ? newElement.props.children : null;
23321
23821
  } else {
23322
23822
  return child;
23323
23823
  }
23324
23824
  });
23325
- return /* @__PURE__ */ jsx282(SlotClone2, { ...slotProps, ref: forwardedRef, children: React39.isValidElement(newElement) ? React39.cloneElement(newElement, undefined, newChildren) : null });
23825
+ return /* @__PURE__ */ jsx282(SlotClone2, { ...slotProps, ref: forwardedRef, children: React392.isValidElement(newElement) ? React392.cloneElement(newElement, undefined, newChildren) : null });
23326
23826
  }
23327
23827
  return /* @__PURE__ */ jsx282(SlotClone2, { ...slotProps, ref: forwardedRef, children });
23328
23828
  });
@@ -23330,24 +23830,24 @@ function createSlot2(ownerName) {
23330
23830
  return Slot22;
23331
23831
  }
23332
23832
  function createSlotClone2(ownerName) {
23333
- const SlotClone2 = React39.forwardRef((props, forwardedRef) => {
23833
+ const SlotClone2 = React392.forwardRef((props, forwardedRef) => {
23334
23834
  const { children, ...slotProps } = props;
23335
- if (React39.isValidElement(children)) {
23835
+ if (React392.isValidElement(children)) {
23336
23836
  const childrenRef = getElementRef3(children);
23337
23837
  const props2 = mergeProps3(slotProps, children.props);
23338
- if (children.type !== React39.Fragment) {
23838
+ if (children.type !== React392.Fragment) {
23339
23839
  props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
23340
23840
  }
23341
- return React39.cloneElement(children, props2);
23841
+ return React392.cloneElement(children, props2);
23342
23842
  }
23343
- return React39.Children.count(children) > 1 ? React39.Children.only(null) : null;
23843
+ return React392.Children.count(children) > 1 ? React392.Children.only(null) : null;
23344
23844
  });
23345
23845
  SlotClone2.displayName = `${ownerName}.SlotClone`;
23346
23846
  return SlotClone2;
23347
23847
  }
23348
23848
  var SLOTTABLE_IDENTIFIER2 = Symbol("radix.slottable");
23349
23849
  function isSlottable3(child) {
23350
- return React39.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER2;
23850
+ return React392.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER2;
23351
23851
  }
23352
23852
  function mergeProps3(slotProps, childProps) {
23353
23853
  const overrideProps = { ...childProps };
@@ -23392,14 +23892,14 @@ function createCollection2(name) {
23392
23892
  const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(PROVIDER_NAME, { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map });
23393
23893
  const CollectionProvider = (props) => {
23394
23894
  const { scope, children } = props;
23395
- const ref = React402.useRef(null);
23396
- const itemMap = React402.useRef(/* @__PURE__ */ new Map).current;
23895
+ const ref = React40.useRef(null);
23896
+ const itemMap = React40.useRef(/* @__PURE__ */ new Map).current;
23397
23897
  return /* @__PURE__ */ jsx292(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });
23398
23898
  };
23399
23899
  CollectionProvider.displayName = PROVIDER_NAME;
23400
23900
  const COLLECTION_SLOT_NAME = name + "CollectionSlot";
23401
23901
  const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);
23402
- const CollectionSlot = React402.forwardRef((props, forwardedRef) => {
23902
+ const CollectionSlot = React40.forwardRef((props, forwardedRef) => {
23403
23903
  const { scope, children } = props;
23404
23904
  const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);
23405
23905
  const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);
@@ -23409,12 +23909,12 @@ function createCollection2(name) {
23409
23909
  const ITEM_SLOT_NAME = name + "CollectionItemSlot";
23410
23910
  const ITEM_DATA_ATTR = "data-radix-collection-item";
23411
23911
  const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);
23412
- const CollectionItemSlot = React402.forwardRef((props, forwardedRef) => {
23912
+ const CollectionItemSlot = React40.forwardRef((props, forwardedRef) => {
23413
23913
  const { scope, children, ...itemData } = props;
23414
- const ref = React402.useRef(null);
23914
+ const ref = React40.useRef(null);
23415
23915
  const composedRefs = useComposedRefs(forwardedRef, ref);
23416
23916
  const context = useCollectionContext(ITEM_SLOT_NAME, scope);
23417
- React402.useEffect(() => {
23917
+ React40.useEffect(() => {
23418
23918
  context.itemMap.set(ref, { ref, ...itemData });
23419
23919
  return () => void context.itemMap.delete(ref);
23420
23920
  });
@@ -23423,7 +23923,7 @@ function createCollection2(name) {
23423
23923
  CollectionItemSlot.displayName = ITEM_SLOT_NAME;
23424
23924
  function useCollection2(scope) {
23425
23925
  const context = useCollectionContext(name + "CollectionConsumer", scope);
23426
- const getItems = React402.useCallback(() => {
23926
+ const getItems = React40.useCallback(() => {
23427
23927
  const collectionNode = context.collectionRef.current;
23428
23928
  if (!collectionNode)
23429
23929
  return [];
@@ -23741,7 +24241,7 @@ function toSafeIndex(array, index2) {
23741
24241
  function toSafeInteger(number) {
23742
24242
  return number !== number || number === 0 ? 0 : Math.trunc(number);
23743
24243
  }
23744
- var useLayoutEffect222 = globalThis?.document ? React41.useLayoutEffect : () => {};
24244
+ var useLayoutEffect222 = globalThis?.document ? React412.useLayoutEffect : () => {};
23745
24245
  var useReactId2 = React42[" useId ".trim().toString()] || (() => {
23746
24246
  return;
23747
24247
  });
@@ -27064,11 +27564,11 @@ import { jsx as jsx58, jsxs as jsxs14 } from "react/jsx-runtime";
27064
27564
  import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment12 } from "react/jsx-runtime";
27065
27565
  import React56 from "react";
27066
27566
  import { useContext as useContext210, useEffect as useEffect42, useState as useState38 } from "react";
27067
- import { useContext as useContext45, useLayoutEffect as useLayoutEffect17 } from "react";
27567
+ import { useContext as useContext46, useLayoutEffect as useLayoutEffect17 } from "react";
27068
27568
  import { jsx as jsx314 } from "react/jsx-runtime";
27069
27569
  import { useEffect as useEffect210, useState as useState210 } from "react";
27070
27570
  import { useLayoutEffect as useLayoutEffect23 } from "react";
27071
- import { useContext as useContext46, useEffect as useEffect52, useRef as useRef46 } from "react";
27571
+ import { useContext as useContext47, useEffect as useEffect52, useRef as useRef46 } from "react";
27072
27572
  import { useEffect as useEffect310, useRef as useRef210 } from "react";
27073
27573
  import { useCallback as useCallback36, useContext as useContext310, useMemo as useMemo53, useRef as useRef47, useState as useState39 } from "react";
27074
27574
  import { useEffect as useEffect43, useRef as useRef310 } from "react";
@@ -27119,6 +27619,123 @@ import { useCallback as useCallback112, useMemo as useMemo132, useState as useSt
27119
27619
  import { jsx as jsx133 } from "react/jsx-runtime";
27120
27620
 
27121
27621
  // ../core/dist/esm/no-react.mjs
27622
+ var normalizeNumber2 = (value) => {
27623
+ return Math.round(value * 1e6) / 1e6;
27624
+ };
27625
+ var angleUnits2 = new Set(["deg", "rad", "grad", "turn"]);
27626
+ var lengthUnits2 = new Set([
27627
+ "%",
27628
+ "cap",
27629
+ "ch",
27630
+ "cm",
27631
+ "cqb",
27632
+ "cqh",
27633
+ "cqi",
27634
+ "cqmax",
27635
+ "cqmin",
27636
+ "cqw",
27637
+ "dvh",
27638
+ "dvw",
27639
+ "em",
27640
+ "ex",
27641
+ "ic",
27642
+ "in",
27643
+ "lh",
27644
+ "lvh",
27645
+ "lvw",
27646
+ "mm",
27647
+ "pc",
27648
+ "pt",
27649
+ "px",
27650
+ "q",
27651
+ "rem",
27652
+ "rlh",
27653
+ "svh",
27654
+ "svw",
27655
+ "vb",
27656
+ "vh",
27657
+ "vi",
27658
+ "vmax",
27659
+ "vmin",
27660
+ "vw"
27661
+ ]);
27662
+ var cssNumberRegex2 = /^([+-]?(?:\d+\.?\d*|\.\d+))([a-zA-Z%]+)?$/;
27663
+ var stringifyNumber2 = (value) => {
27664
+ return String(normalizeNumber2(value));
27665
+ };
27666
+ var parseStringInterpolationComponent2 = (component, value) => {
27667
+ const match = cssNumberRegex2.exec(component);
27668
+ if (match === null) {
27669
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not a supported scale, translate, or rotate value`);
27670
+ }
27671
+ const unit = match[2] ?? null;
27672
+ const numberValue = Number(match[1]);
27673
+ if (!Number.isFinite(numberValue)) {
27674
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not finite`);
27675
+ }
27676
+ if (unit === null) {
27677
+ return { kind: "scale", value: numberValue, unit: null };
27678
+ }
27679
+ if (angleUnits2.has(unit)) {
27680
+ return { kind: "rotate", value: numberValue, unit };
27681
+ }
27682
+ if (lengthUnits2.has(unit)) {
27683
+ return { kind: "translate", value: numberValue, unit };
27684
+ }
27685
+ throw new TypeError(`Cannot interpolate "${value}" because "${unit}" is not a supported translate or rotate unit`);
27686
+ };
27687
+ var parseStringInterpolationValue2 = (output) => {
27688
+ if (typeof output === "number") {
27689
+ if (!Number.isFinite(output)) {
27690
+ throw new Error(`outputRange must contain only finite numbers, but got [${output}]`);
27691
+ }
27692
+ return {
27693
+ kind: "scale",
27694
+ values: [output, output, 1],
27695
+ units: [null, null, null],
27696
+ dimensions: 1
27697
+ };
27698
+ }
27699
+ const parts = output.trim().split(/\s+/);
27700
+ if (parts.length < 1 || parts.length > 3 || parts[0] === "") {
27701
+ throw new TypeError(`String outputRange values must contain 1 to 3 components, but got "${output}"`);
27702
+ }
27703
+ const parsed = parts.map((part) => parseStringInterpolationComponent2(part, output));
27704
+ const [{ kind }] = parsed;
27705
+ for (const part of parsed) {
27706
+ if (part.kind !== kind) {
27707
+ throw new TypeError(`Cannot interpolate "${output}" because it mixes ${kind} and ${part.kind} values`);
27708
+ }
27709
+ }
27710
+ if (kind === "scale") {
27711
+ const x = parsed[0].value;
27712
+ const y = parsed[1]?.value ?? x;
27713
+ const z = parsed[2]?.value ?? 1;
27714
+ return {
27715
+ kind,
27716
+ values: [x, y, z],
27717
+ units: [null, null, null],
27718
+ dimensions: parsed.length
27719
+ };
27720
+ }
27721
+ return {
27722
+ kind,
27723
+ values: [parsed[0].value, parsed[1]?.value ?? 0, parsed[2]?.value ?? 0],
27724
+ units: [parsed[0].unit, parsed[1]?.unit ?? null, parsed[2]?.unit ?? null],
27725
+ dimensions: parsed.length
27726
+ };
27727
+ };
27728
+ var serializeStringInterpolationValue2 = ({
27729
+ kind,
27730
+ values,
27731
+ units,
27732
+ dimensions
27733
+ }) => {
27734
+ if (kind === "scale") {
27735
+ return values.slice(0, dimensions).map((value) => stringifyNumber2(value)).join(" ");
27736
+ }
27737
+ return values.slice(0, dimensions).map((value, index2) => `${stringifyNumber2(value)}${units[index2]}`).join(" ");
27738
+ };
27122
27739
  function interpolateFunction2(input, inputRange, outputRange, options2) {
27123
27740
  const { extrapolateLeft, extrapolateRight, easing } = options2;
27124
27741
  let result = input;
@@ -27163,6 +27780,96 @@ function findRange2(input, inputRange) {
27163
27780
  }
27164
27781
  return i - 1;
27165
27782
  }
27783
+ var defaultEasing2 = (num) => num;
27784
+ var interpolateNumber2 = ({
27785
+ input,
27786
+ inputRange,
27787
+ outputRange,
27788
+ options: options2
27789
+ }) => {
27790
+ if (inputRange.length === 1) {
27791
+ return outputRange[0];
27792
+ }
27793
+ const easingOption = options2?.easing;
27794
+ const resolveEasingForSegment = (segmentIndex) => {
27795
+ if (easingOption === undefined) {
27796
+ return defaultEasing2;
27797
+ }
27798
+ if (typeof easingOption === "function") {
27799
+ return easingOption;
27800
+ }
27801
+ return easingOption[segmentIndex];
27802
+ };
27803
+ let extrapolateLeft = "extend";
27804
+ if (options2?.extrapolateLeft !== undefined) {
27805
+ extrapolateLeft = options2.extrapolateLeft;
27806
+ }
27807
+ let extrapolateRight = "extend";
27808
+ if (options2?.extrapolateRight !== undefined) {
27809
+ extrapolateRight = options2.extrapolateRight;
27810
+ }
27811
+ const posterizedInput = options2?.posterize === undefined ? input : Math.floor(input / options2.posterize) * options2.posterize;
27812
+ const range = findRange2(posterizedInput, inputRange);
27813
+ return interpolateFunction2(posterizedInput, [inputRange[range], inputRange[range + 1]], [outputRange[range], outputRange[range + 1]], {
27814
+ easing: resolveEasingForSegment(range),
27815
+ extrapolateLeft,
27816
+ extrapolateRight
27817
+ });
27818
+ };
27819
+ var interpolateString2 = ({
27820
+ input,
27821
+ inputRange,
27822
+ outputRange,
27823
+ options: options2
27824
+ }) => {
27825
+ const parsedOutputRange = outputRange.map(parseStringInterpolationValue2);
27826
+ const kind = parsedOutputRange[0]?.kind;
27827
+ if (kind === undefined) {
27828
+ throw new Error("outputRange must have at least 1 element");
27829
+ }
27830
+ for (const parsed of parsedOutputRange) {
27831
+ if (parsed.kind !== kind) {
27832
+ throw new TypeError(`Cannot interpolate ${kind} values with ${parsed.kind} values`);
27833
+ }
27834
+ }
27835
+ const dimensions = Math.max(...parsedOutputRange.map((parsed) => parsed.dimensions));
27836
+ const units = [
27837
+ null,
27838
+ null,
27839
+ null
27840
+ ];
27841
+ if (kind !== "scale") {
27842
+ for (let axis = 0;axis < dimensions; axis++) {
27843
+ for (const parsed of parsedOutputRange) {
27844
+ const unit = parsed.units[axis];
27845
+ if (unit === null) {
27846
+ continue;
27847
+ }
27848
+ if (units[axis] === null) {
27849
+ units[axis] = unit;
27850
+ continue;
27851
+ }
27852
+ if (units[axis] !== unit) {
27853
+ throw new TypeError(`Cannot interpolate ${kind} values with different units on axis ${axis + 1}: ${units[axis]} and ${unit}`);
27854
+ }
27855
+ }
27856
+ if (units[axis] === null) {
27857
+ throw new TypeError(`Cannot interpolate ${kind} values because axis ${axis + 1} has no unit`);
27858
+ }
27859
+ }
27860
+ }
27861
+ return serializeStringInterpolationValue2({
27862
+ kind,
27863
+ values: [0, 0, 0].map((_, axis) => interpolateNumber2({
27864
+ input,
27865
+ inputRange,
27866
+ outputRange: parsedOutputRange.map((parsed) => parsed.values[axis]),
27867
+ options: options2
27868
+ })),
27869
+ units,
27870
+ dimensions
27871
+ });
27872
+ };
27166
27873
  function checkValidInputRange2(arr) {
27167
27874
  for (let i = 1;i < arr.length; ++i) {
27168
27875
  if (!(arr[i] > arr[i - 1])) {
@@ -27222,42 +27929,27 @@ function interpolate3(input, inputRange, outputRange, options2) {
27222
27929
  throw new Error("inputRange (" + inputRange.length + ") and outputRange (" + outputRange.length + ") must have the same length");
27223
27930
  }
27224
27931
  checkInfiniteRange2("inputRange", inputRange);
27225
- checkInfiniteRange2("outputRange", outputRange);
27226
27932
  checkValidInputRange2(inputRange);
27227
27933
  assertValidInterpolateEasingOption2(options2?.easing, inputRange.length);
27228
27934
  assertValidInterpolatePosterizeOption2(options2?.posterize);
27229
- const easingOption = options2?.easing;
27230
- const defaultEasing = (num) => num;
27231
- const resolveEasingForSegment = (segmentIndex) => {
27232
- if (easingOption === undefined) {
27233
- return defaultEasing;
27234
- }
27235
- if (typeof easingOption === "function") {
27236
- return easingOption;
27237
- }
27238
- return easingOption[segmentIndex];
27239
- };
27240
- let extrapolateLeft = "extend";
27241
- if (options2?.extrapolateLeft !== undefined) {
27242
- extrapolateLeft = options2.extrapolateLeft;
27243
- }
27244
- let extrapolateRight = "extend";
27245
- if (options2?.extrapolateRight !== undefined) {
27246
- extrapolateRight = options2.extrapolateRight;
27247
- }
27248
27935
  if (typeof input !== "number") {
27249
27936
  throw new TypeError("Cannot interpolate an input which is not a number");
27250
27937
  }
27251
- if (inputRange.length === 1) {
27252
- return outputRange[0];
27938
+ if (!Array.isArray(outputRange)) {
27939
+ throw new Error("outputRange must contain only numbers");
27253
27940
  }
27254
- const posterizedInput = options2?.posterize === undefined ? input : Math.floor(input / options2.posterize) * options2.posterize;
27255
- const range = findRange2(posterizedInput, inputRange);
27256
- return interpolateFunction2(posterizedInput, [inputRange[range], inputRange[range + 1]], [outputRange[range], outputRange[range + 1]], {
27257
- easing: resolveEasingForSegment(range),
27258
- extrapolateLeft,
27259
- extrapolateRight
27260
- });
27941
+ const hasStringOutput = outputRange.some((output) => typeof output === "string");
27942
+ if (hasStringOutput) {
27943
+ if (!outputRange.every((output) => typeof output === "string" || typeof output === "number")) {
27944
+ throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
27945
+ }
27946
+ return interpolateString2({ input, inputRange, outputRange, options: options2 });
27947
+ }
27948
+ if (!outputRange.every((output) => typeof output === "number")) {
27949
+ throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
27950
+ }
27951
+ checkInfiniteRange2("outputRange", outputRange);
27952
+ return interpolateNumber2({ input, inputRange, outputRange, options: options2 });
27261
27953
  }
27262
27954
  function truthy3(value) {
27263
27955
  return Boolean(value);
@@ -27808,6 +28500,45 @@ var proResProfileOptions = [
27808
28500
  "light",
27809
28501
  "proxy"
27810
28502
  ];
28503
+ var defaultScaleValue = [1, 1, 1];
28504
+ var parseScaleString = (value) => {
28505
+ const parts = value.trim().split(/\s+/);
28506
+ if (parts.length < 1 || parts.length > 3 || parts[0] === "") {
28507
+ return null;
28508
+ }
28509
+ const parsed = parts.map((part) => Number(part));
28510
+ if (!parsed.every((part) => Number.isFinite(part))) {
28511
+ return null;
28512
+ }
28513
+ const x = parsed[0];
28514
+ const y = parsed[1] ?? x;
28515
+ const z = parsed[2] ?? 1;
28516
+ return [x, y, z];
28517
+ };
28518
+ var parseValidScaleValue = (value) => {
28519
+ if (typeof value === "number") {
28520
+ return Number.isFinite(value) ? [value, value, 1] : null;
28521
+ }
28522
+ if (typeof value === "string") {
28523
+ return parseScaleString(value);
28524
+ }
28525
+ return null;
28526
+ };
28527
+ var parseScaleValue = (value) => {
28528
+ return parseValidScaleValue(value) ?? defaultScaleValue;
28529
+ };
28530
+ var serializeScaleValue = ([x, y, z]) => {
28531
+ const normalizedX = normalizeNumber2(x);
28532
+ const normalizedY = normalizeNumber2(y);
28533
+ const normalizedZ = normalizeNumber2(z);
28534
+ if (normalizedX === normalizedY && normalizedZ === 1) {
28535
+ return normalizedX;
28536
+ }
28537
+ if (normalizedZ === 1) {
28538
+ return `${normalizedX} ${normalizedY}`;
28539
+ }
28540
+ return `${normalizedX} ${normalizedY} ${normalizedZ}`;
28541
+ };
27811
28542
  var sequenceVisualStyleSchema2 = {
27812
28543
  "style.translate": {
27813
28544
  type: "translate",
@@ -27816,7 +28547,7 @@ var sequenceVisualStyleSchema2 = {
27816
28547
  description: "Offset"
27817
28548
  },
27818
28549
  "style.scale": {
27819
- type: "number",
28550
+ type: "scale",
27820
28551
  min: 0.05,
27821
28552
  max: 100,
27822
28553
  step: 0.01,
@@ -27824,7 +28555,7 @@ var sequenceVisualStyleSchema2 = {
27824
28555
  description: "Scale"
27825
28556
  },
27826
28557
  "style.rotate": {
27827
- type: "rotation",
28558
+ type: "rotation-css",
27828
28559
  step: 1,
27829
28560
  default: "0deg",
27830
28561
  description: "Rotation"
@@ -27835,7 +28566,8 @@ var sequenceVisualStyleSchema2 = {
27835
28566
  max: 1,
27836
28567
  step: 0.01,
27837
28568
  default: 1,
27838
- description: "Opacity"
28569
+ description: "Opacity",
28570
+ hiddenFromList: false
27839
28571
  }
27840
28572
  };
27841
28573
  var sequencePremountSchema2 = {
@@ -27844,10 +28576,15 @@ var sequencePremountSchema2 = {
27844
28576
  default: 0,
27845
28577
  description: "Premount For",
27846
28578
  min: 0,
27847
- step: 1
28579
+ step: 1,
28580
+ hiddenFromList: false
27848
28581
  },
27849
28582
  postmountFor: {
27850
- type: "hidden"
28583
+ type: "number",
28584
+ default: 0,
28585
+ min: 0,
28586
+ step: 1,
28587
+ hiddenFromList: true
27851
28588
  },
27852
28589
  styleWhilePremounted: {
27853
28590
  type: "hidden"
@@ -27865,8 +28602,23 @@ var hiddenField2 = {
27865
28602
  default: false,
27866
28603
  description: "Hidden"
27867
28604
  };
28605
+ var durationInFramesField2 = {
28606
+ type: "number",
28607
+ default: undefined,
28608
+ min: 1,
28609
+ step: 1,
28610
+ hiddenFromList: true
28611
+ };
28612
+ var fromField2 = {
28613
+ type: "number",
28614
+ default: 0,
28615
+ step: 1,
28616
+ hiddenFromList: true
28617
+ };
27868
28618
  var sequenceSchema2 = {
27869
28619
  hidden: hiddenField2,
28620
+ from: fromField2,
28621
+ durationInFrames: durationInFramesField2,
27870
28622
  layout: {
27871
28623
  type: "enum",
27872
28624
  default: "absolute-fill",
@@ -28048,7 +28800,9 @@ var NoReactInternals = {
28048
28800
  validateCodec: validateCodec2,
28049
28801
  proResProfileOptions,
28050
28802
  findPropsToDelete: findPropsToDelete2,
28051
- sequenceSchema: sequenceSchema2
28803
+ sequenceSchema: sequenceSchema2,
28804
+ parseScaleValue,
28805
+ serializeScaleValue
28052
28806
  };
28053
28807
 
28054
28808
  // ../player/dist/esm/index.mjs
@@ -28061,7 +28815,7 @@ import {
28061
28815
  useRef as useRef132,
28062
28816
  useState as useState142
28063
28817
  } from "react";
28064
- import React132, {
28818
+ import React133, {
28065
28819
  forwardRef as forwardRef36,
28066
28820
  Suspense as Suspense22,
28067
28821
  useCallback as useCallback122,
@@ -28520,7 +29274,7 @@ class ThumbnailEmitter {
28520
29274
  };
28521
29275
  }
28522
29276
  var useBufferStateEmitter = (emitter) => {
28523
- const bufferManager = useContext45(Internals.BufferingContextReact);
29277
+ const bufferManager = useContext46(Internals.BufferingContextReact);
28524
29278
  if (!bufferManager) {
28525
29279
  throw new Error("BufferingContextReact not found");
28526
29280
  }
@@ -28977,11 +29731,11 @@ var usePlayback = ({
28977
29731
  const frame = Internals.Timeline.useTimelinePosition();
28978
29732
  const { playing, pause, emitter, isPlaying } = usePlayer();
28979
29733
  const setFrame = Internals.Timeline.useTimelineSetFrame();
28980
- const sharedAudioContext = useContext46(Internals.SharedAudioContext);
29734
+ const sharedAudioContext = useContext47(Internals.SharedAudioContext);
28981
29735
  const logLevel = Internals.useLogLevel();
28982
29736
  const isBackgroundedRef = useIsBackgrounded();
28983
29737
  const lastTimeUpdateTimestamp = useRef46(0);
28984
- const context = useContext46(Internals.BufferingContextReact);
29738
+ const context = useContext47(Internals.BufferingContextReact);
28985
29739
  if (!context) {
28986
29740
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
28987
29741
  }
@@ -29195,12 +29949,22 @@ var usePlayback = ({
29195
29949
  }, [emitter, frame]);
29196
29950
  };
29197
29951
  var elementSizeHooks = [];
29198
- var useElementSize = (ref, options2) => {
29952
+ var getElement = (source) => {
29953
+ if (!source) {
29954
+ return null;
29955
+ }
29956
+ if ("current" in source) {
29957
+ return source.current;
29958
+ }
29959
+ return source;
29960
+ };
29961
+ var useElementSize = (source, options2) => {
29199
29962
  const [size4, setSize] = useState42(() => {
29200
- if (!ref.current) {
29963
+ const element = getElement(source);
29964
+ if (!element) {
29201
29965
  return null;
29202
29966
  }
29203
- const rect = ref.current.getClientRects();
29967
+ const rect = element.getClientRects();
29204
29968
  if (!rect[0]) {
29205
29969
  return null;
29206
29970
  }
@@ -29249,10 +30013,11 @@ var useElementSize = (ref, options2) => {
29249
30013
  });
29250
30014
  }, [options2.shouldApplyCssTransforms]);
29251
30015
  const updateSize = useCallback210(() => {
29252
- if (!ref.current) {
30016
+ const element = getElement(source);
30017
+ if (!element) {
29253
30018
  return;
29254
30019
  }
29255
- const rect = ref.current.getClientRects();
30020
+ const rect = element.getClientRects();
29256
30021
  if (!rect[0]) {
29257
30022
  setSize(null);
29258
30023
  return;
@@ -29273,21 +30038,24 @@ var useElementSize = (ref, options2) => {
29273
30038
  }
29274
30039
  };
29275
30040
  });
29276
- }, [ref]);
30041
+ }, [source]);
30042
+ useEffect62(() => {
30043
+ updateSize();
30044
+ }, [updateSize]);
29277
30045
  useEffect62(() => {
29278
30046
  if (!observer) {
29279
30047
  return;
29280
30048
  }
29281
- const { current } = ref;
29282
- if (current) {
29283
- observer.observe(current);
30049
+ const element = getElement(source);
30050
+ if (element) {
30051
+ observer.observe(element);
29284
30052
  }
29285
30053
  return () => {
29286
- if (current) {
29287
- observer.unobserve(current);
30054
+ if (element) {
30055
+ observer.unobserve(element);
29288
30056
  }
29289
30057
  };
29290
- }, [observer, ref, updateSize]);
30058
+ }, [observer, source]);
29291
30059
  useEffect62(() => {
29292
30060
  if (!options2.triggerOnWindowResize) {
29293
30061
  return;
@@ -31441,7 +32209,7 @@ var useThumbnail = () => {
31441
32209
  }, [emitter]);
31442
32210
  return returnValue;
31443
32211
  };
31444
- var reactVersion2 = React132.version.split(".")[0];
32212
+ var reactVersion2 = React133.version.split(".")[0];
31445
32213
  if (reactVersion2 === "0") {
31446
32214
  throw new Error(`Version ${reactVersion2} of "react" is not supported by Remotion`);
31447
32215
  }
@@ -32408,7 +33176,7 @@ var UNDERLAY_RED = curriedTransparentize$1(0.9, RED);
32408
33176
  var BLUE_TEXT = curriedDarken$1(0.3, "#42e9f5");
32409
33177
 
32410
33178
  // src/components/homepage/layout/use-color-mode.tsx
32411
- import React57, { useContext as useContext47, useMemo as useMemo55 } from "react";
33179
+ import React57, { useContext as useContext48, useMemo as useMemo55 } from "react";
32412
33180
  import { jsx as jsx59 } from "react/jsx-runtime";
32413
33181
  var Context = React57.createContext(undefined);
32414
33182
  var ColorModeProvider = ({
@@ -32425,7 +33193,7 @@ var ColorModeProvider = ({
32425
33193
  });
32426
33194
  };
32427
33195
  function useColorMode() {
32428
- const context = useContext47(Context);
33196
+ const context = useContext48(Context);
32429
33197
  if (context === null || context === undefined) {
32430
33198
  throw new Error("ColorModeProvider");
32431
33199
  }
@@ -32433,13 +33201,12 @@ function useColorMode() {
32433
33201
  }
32434
33202
 
32435
33203
  // ../media/dist/esm/index.mjs
32436
- import { useState as useState311 } from "react";
32437
- import { useMemo as useMemo312 } from "react";
33204
+ import { useMemo as useMemo312, useState as useState311 } from "react";
32438
33205
  import { useContext as useContext212, useEffect as useEffect44, useMemo as useMemo57, useRef as useRef49, useState as useState40 } from "react";
32439
33206
  import { ALL_FORMATS, Input as Input2, UrlSource } from "mediabunny";
32440
33207
  import { AudioBufferSink, InputDisposedError } from "mediabunny";
32441
33208
  import { CanvasSink } from "mediabunny";
32442
- import { useContext as useContext49, useLayoutEffect as useLayoutEffect18 } from "react";
33209
+ import { useContext as useContext50, useLayoutEffect as useLayoutEffect18 } from "react";
32443
33210
  import { jsx as jsx60 } from "react/jsx-runtime";
32444
33211
  import { useContext as useContext312, useLayoutEffect as useLayoutEffect24, useMemo as useMemo213, useState as useState212 } from "react";
32445
33212
  import React211 from "react";
@@ -32455,10 +33222,10 @@ import {
32455
33222
  } from "mediabunny";
32456
33223
  import { jsx as jsx216 } from "react/jsx-runtime";
32457
33224
  import { jsx as jsx316 } from "react/jsx-runtime";
32458
- import React58, { useMemo as useMemo63, useState as useState63 } from "react";
33225
+ import React63, { useMemo as useMemo63, useState as useState63 } from "react";
32459
33226
  import {
32460
33227
  useCallback as useCallback38,
32461
- useContext as useContext48,
33228
+ useContext as useContext49,
32462
33229
  useEffect as useEffect212,
32463
33230
  useLayoutEffect as useLayoutEffect34,
32464
33231
  useMemo as useMemo412,
@@ -34375,7 +35142,7 @@ var useCommonEffects = ({
34375
35142
  logLevel,
34376
35143
  label: label3
34377
35144
  }) => {
34378
- const sharedAudioContext = useContext49(Internals.SharedAudioContext);
35145
+ const sharedAudioContext = useContext50(Internals.SharedAudioContext);
34379
35146
  useLayoutEffect18(() => {
34380
35147
  const mediaPlayer = mediaPlayerRef.current;
34381
35148
  if (!mediaPlayer)
@@ -36870,14 +37637,17 @@ var audioSchema = {
36870
37637
  max: 20,
36871
37638
  step: 0.01,
36872
37639
  default: 1,
36873
- description: "Volume"
37640
+ description: "Volume",
37641
+ hiddenFromList: false
36874
37642
  },
36875
37643
  playbackRate: {
36876
37644
  type: "number",
36877
37645
  min: 0.1,
36878
37646
  step: 0.01,
36879
37647
  default: 1,
36880
- description: "Playback Rate"
37648
+ description: "Playback Rate",
37649
+ hiddenFromList: false,
37650
+ keyframable: false
36881
37651
  },
36882
37652
  loop: { type: "boolean", default: false, description: "Loop" },
36883
37653
  hidden: Internals.hiddenField
@@ -36962,7 +37732,11 @@ var AudioInner = (props) => {
36962
37732
  })
36963
37733
  });
36964
37734
  };
36965
- var Audio2 = Internals.wrapInSchema(AudioInner, audioSchema);
37735
+ var Audio2 = Internals.wrapInSchema({
37736
+ Component: AudioInner,
37737
+ schema: audioSchema,
37738
+ supportsEffects: false
37739
+ });
36966
37740
  Internals.addSequenceStackTraces(Audio2);
36967
37741
  var cache2 = new Map;
36968
37742
  var cacheVideoFrame = (src, sourceCanvas) => {
@@ -37042,7 +37816,8 @@ var VideoForPreviewAssertedShowing = ({
37042
37816
  _experimentalInitiallyDrawCachedFrame,
37043
37817
  effects,
37044
37818
  setMediaDurationInSeconds,
37045
- refForOutline
37819
+ refForOutline,
37820
+ ...props
37046
37821
  }) => {
37047
37822
  const src = usePreload22(unpreloadedSrc);
37048
37823
  const canvasRef = useRef211(null);
@@ -37057,7 +37832,7 @@ var VideoForPreviewAssertedShowing = ({
37057
37832
  const [shouldFallbackToNativeVideo, setShouldFallbackToNativeVideo] = useState43(false);
37058
37833
  const [playing] = Timeline2.usePlayingState();
37059
37834
  const { playbackRate: globalPlaybackRate } = Internals.usePlaybackRate();
37060
- const sharedAudioContext = useContext48(SharedAudioContext22);
37835
+ const sharedAudioContext = useContext49(SharedAudioContext22);
37061
37836
  const buffer = useBufferState();
37062
37837
  const canvasRefCallback = useCallback38((canvas) => {
37063
37838
  canvasRef.current = canvas;
@@ -37083,7 +37858,7 @@ var VideoForPreviewAssertedShowing = ({
37083
37858
  effectsRef.current = effects;
37084
37859
  const effectChainStateRef = useRef211(effectChainState);
37085
37860
  effectChainStateRef.current = effectChainState;
37086
- const parentSequence = useContext48(SequenceContext22);
37861
+ const parentSequence = useContext49(SequenceContext22);
37087
37862
  const isPremounting = Boolean(parentSequence?.premounting);
37088
37863
  const isPostmounting = Boolean(parentSequence?.postmounting);
37089
37864
  const sequenceOffset = ((parentSequence?.cumulatedFrom ?? 0) + (parentSequence?.relativeFrom ?? 0)) / videoConfig.fps;
@@ -37091,7 +37866,7 @@ var VideoForPreviewAssertedShowing = ({
37091
37866
  const currentTimeRef = useRef211(currentTime);
37092
37867
  currentTimeRef.current = currentTime;
37093
37868
  const preloadedSrc = usePreload22(src);
37094
- const buffering = useContext48(Internals.BufferingContextReact);
37869
+ const buffering = useContext49(Internals.BufferingContextReact);
37095
37870
  if (!buffering) {
37096
37871
  throw new Error("useMediaPlayback must be used inside a <BufferingContext>");
37097
37872
  }
@@ -37135,8 +37910,8 @@ var VideoForPreviewAssertedShowing = ({
37135
37910
  if (!_experimentalInitiallyDrawCachedFrame) {
37136
37911
  return;
37137
37912
  }
37138
- const canvas = canvasRef.current;
37139
37913
  return () => {
37914
+ const canvas = canvasRef.current;
37140
37915
  if (!canvas || !hasDrawnRealFrameRef.current || isPremountingRef.current) {
37141
37916
  return;
37142
37917
  }
@@ -37340,6 +38115,7 @@ var VideoForPreviewAssertedShowing = ({
37340
38115
  }, [objectFitProp, style2]);
37341
38116
  if (shouldFallbackToNativeVideo && !disallowFallbackToOffthreadVideo) {
37342
38117
  return /* @__PURE__ */ jsx412(Html5Video, {
38118
+ ...props,
37343
38119
  ref: fallbackVideoRef,
37344
38120
  src,
37345
38121
  style: actualStyle,
@@ -37361,6 +38137,7 @@ var VideoForPreviewAssertedShowing = ({
37361
38137
  return null;
37362
38138
  }
37363
38139
  return /* @__PURE__ */ jsx412("canvas", {
38140
+ ...props,
37364
38141
  ref: canvasRefCallback,
37365
38142
  style: actualStyle,
37366
38143
  className: classNameValue
@@ -37423,7 +38200,8 @@ var VideoForRendering2 = ({
37423
38200
  credentials,
37424
38201
  requestInit,
37425
38202
  objectFit: objectFitProp,
37426
- effects
38203
+ effects,
38204
+ ...props
37427
38205
  }) => {
37428
38206
  if (!src) {
37429
38207
  throw new TypeError("No `src` was passed to <Video>.");
@@ -37658,6 +38436,7 @@ var VideoForRendering2 = ({
37658
38436
  }, [objectFitProp, style2]);
37659
38437
  if (replaceWithOffthreadVideo) {
37660
38438
  const fallback = /* @__PURE__ */ jsx510(Internals.InnerOffthreadVideo, {
38439
+ ...props,
37661
38440
  src,
37662
38441
  playbackRate: playbackRate ?? 1,
37663
38442
  muted: muted ?? false,
@@ -37713,6 +38492,7 @@ var VideoForRendering2 = ({
37713
38492
  return null;
37714
38493
  }
37715
38494
  return /* @__PURE__ */ jsx510("canvas", {
38495
+ ...props,
37716
38496
  ref: canvasRef,
37717
38497
  style: styleWithObjectFit,
37718
38498
  className: classNameValue
@@ -37726,14 +38506,17 @@ var videoSchema = {
37726
38506
  max: 20,
37727
38507
  step: 0.01,
37728
38508
  default: 1,
37729
- description: "Volume"
38509
+ description: "Volume",
38510
+ hiddenFromList: false
37730
38511
  },
37731
38512
  playbackRate: {
37732
38513
  type: "number",
37733
38514
  min: 0.1,
37734
38515
  step: 0.01,
37735
38516
  default: 1,
37736
- description: "Playback Rate"
38517
+ description: "Playback Rate",
38518
+ hiddenFromList: false,
38519
+ keyframable: false
37737
38520
  },
37738
38521
  hidden: {
37739
38522
  type: "boolean",
@@ -37774,7 +38557,8 @@ var InnerVideo = ({
37774
38557
  _experimentalInitiallyDrawCachedFrame,
37775
38558
  effects,
37776
38559
  setMediaDurationInSeconds,
37777
- refForOutline
38560
+ refForOutline,
38561
+ ...props
37778
38562
  }) => {
37779
38563
  const environment = useRemotionEnvironment();
37780
38564
  if (typeof src !== "string") {
@@ -37795,6 +38579,7 @@ var InnerVideo = ({
37795
38579
  validateMediaProps22({ playbackRate, volume }, "Video");
37796
38580
  if (environment.isRendering) {
37797
38581
  return /* @__PURE__ */ jsx65(VideoForRendering2, {
38582
+ ...props,
37798
38583
  audioStreamIndex: audioStreamIndex ?? 0,
37799
38584
  className: className2,
37800
38585
  delayRenderRetries: delayRenderRetries ?? null,
@@ -37823,6 +38608,7 @@ var InnerVideo = ({
37823
38608
  });
37824
38609
  }
37825
38610
  return /* @__PURE__ */ jsx65(VideoForPreview2, {
38611
+ ...props,
37826
38612
  setMediaDurationInSeconds,
37827
38613
  audioStreamIndex: audioStreamIndex ?? 0,
37828
38614
  className: className2,
@@ -37886,7 +38672,8 @@ var VideoInner = ({
37886
38672
  effects,
37887
38673
  durationInFrames,
37888
38674
  from,
37889
- hidden
38675
+ hidden,
38676
+ ...props
37890
38677
  }) => {
37891
38678
  const fallbackLogLevel = Internals.useLogLevel();
37892
38679
  const [mediaVolume] = Internals.useMediaVolumeState();
@@ -37933,7 +38720,7 @@ var VideoInner = ({
37933
38720
  overrideId: controls?.overrideId ?? null
37934
38721
  });
37935
38722
  const memoizedEffectDefinitions = Internals.useMemoizedEffectDefinitions(effects ?? []);
37936
- const refForOutline = React58.useRef(null);
38723
+ const refForOutline = React63.useRef(null);
37937
38724
  if (sequenceDurationInFrames === 0) {
37938
38725
  return null;
37939
38726
  }
@@ -37952,6 +38739,7 @@ var VideoInner = ({
37952
38739
  showInTimeline: showInTimeline ?? true,
37953
38740
  hidden,
37954
38741
  children: /* @__PURE__ */ jsx65(InnerVideo, {
38742
+ ...props,
37955
38743
  audioStreamIndex: audioStreamIndex ?? 0,
37956
38744
  className: className2,
37957
38745
  delayRenderRetries: delayRenderRetries ?? null,
@@ -37986,7 +38774,11 @@ var VideoInner = ({
37986
38774
  })
37987
38775
  });
37988
38776
  };
37989
- var Video = Internals.wrapInSchema(VideoInner, videoSchema);
38777
+ var Video = Internals.wrapInSchema({
38778
+ Component: VideoInner,
38779
+ schema: videoSchema,
38780
+ supportsEffects: true
38781
+ });
37990
38782
  Internals.addSequenceStackTraces(Video);
37991
38783
 
37992
38784
  // src/components/homepage/Demo/Comp.tsx
@@ -39290,7 +40082,7 @@ import {
39290
40082
  import { BufferTarget, StreamTarget } from "mediabunny";
39291
40083
 
39292
40084
  // ../core/dist/esm/version.mjs
39293
- var VERSION2 = "4.0.471";
40085
+ var VERSION2 = "4.0.472";
39294
40086
 
39295
40087
  // ../web-renderer/dist/esm/index.mjs
39296
40088
  import { AudioSample, VideoSample } from "mediabunny";
@@ -40033,7 +40825,8 @@ function createScaffold({
40033
40825
  videoEnabled,
40034
40826
  defaultCodec,
40035
40827
  defaultOutName,
40036
- allowHtmlInCanvas
40828
+ allowHtmlInCanvas,
40829
+ pixelDensity
40037
40830
  }) {
40038
40831
  if (!ReactDOM6.createRoot) {
40039
40832
  throw new Error("@remotion/web-renderer requires React 18 or higher");
@@ -40125,19 +40918,22 @@ function createScaffold({
40125
40918
  },
40126
40919
  folders: []
40127
40920
  },
40128
- children: /* @__PURE__ */ jsx217(Internals.RenderAssetManagerProvider, {
40129
- collectAssets,
40130
- children: /* @__PURE__ */ jsx217(UpdateTime, {
40131
- audioEnabled,
40132
- videoEnabled,
40133
- logLevel,
40134
- compId: id,
40135
- initialFrame,
40136
- timeUpdater,
40137
- children: /* @__PURE__ */ jsx217(Internals.CanUseRemotionHooks.Provider, {
40138
- value: true,
40139
- children: /* @__PURE__ */ jsx217(Component, {
40140
- ...resolvedProps
40921
+ children: /* @__PURE__ */ jsx217(Internals.PixelDensityContext.Provider, {
40922
+ value: pixelDensity,
40923
+ children: /* @__PURE__ */ jsx217(Internals.RenderAssetManagerProvider, {
40924
+ collectAssets,
40925
+ children: /* @__PURE__ */ jsx217(UpdateTime, {
40926
+ audioEnabled,
40927
+ videoEnabled,
40928
+ logLevel,
40929
+ compId: id,
40930
+ initialFrame,
40931
+ timeUpdater,
40932
+ children: /* @__PURE__ */ jsx217(Internals.CanUseRemotionHooks.Provider, {
40933
+ value: true,
40934
+ children: /* @__PURE__ */ jsx217(Component, {
40935
+ ...resolvedProps
40936
+ })
40141
40937
  })
40142
40938
  })
40143
40939
  })
@@ -43084,6 +43880,8 @@ var drawText = ({
43084
43880
  span.textContent = transformedText;
43085
43881
  const tokens = findWords(span);
43086
43882
  const textShadows = parseTextShadow(textShadowValue);
43883
+ const ctm = contextToDraw.getTransform();
43884
+ const blurScale = Math.hypot(ctm.a, ctm.b);
43087
43885
  const { strokeFirst } = parsePaintOrder(paintOrder);
43088
43886
  for (const token of tokens) {
43089
43887
  const measurements = contextToDraw.measureText(originalText);
@@ -43096,9 +43894,9 @@ var drawText = ({
43096
43894
  for (let i = textShadows.length - 1;i >= 0; i--) {
43097
43895
  const shadow = textShadows[i];
43098
43896
  contextToDraw.shadowColor = shadow.color;
43099
- contextToDraw.shadowBlur = shadow.blurRadius;
43100
- contextToDraw.shadowOffsetX = shadow.offsetX;
43101
- contextToDraw.shadowOffsetY = shadow.offsetY;
43897
+ contextToDraw.shadowBlur = shadow.blurRadius * blurScale;
43898
+ contextToDraw.shadowOffsetX = shadow.offsetX * ctm.a + shadow.offsetY * ctm.c;
43899
+ contextToDraw.shadowOffsetY = shadow.offsetX * ctm.b + shadow.offsetY * ctm.d;
43102
43900
  contextToDraw.fillText(token.text, x, y);
43103
43901
  }
43104
43902
  contextToDraw.shadowColor = "transparent";
@@ -43603,7 +44401,8 @@ var internalRenderMediaOnWeb = async ({
43603
44401
  initialFrame: 0,
43604
44402
  defaultCodec: resolved.defaultCodec,
43605
44403
  defaultOutName: resolved.defaultOutName,
43606
- allowHtmlInCanvas
44404
+ allowHtmlInCanvas,
44405
+ pixelDensity: scale
43607
44406
  }), 0);
43608
44407
  const {
43609
44408
  delayRenderScope,
@@ -43920,7 +44719,7 @@ var renderMediaOnWeb = (options2) => {
43920
44719
  };
43921
44720
 
43922
44721
  // src/components/homepage/Demo/DemoRender.tsx
43923
- import React70, { useCallback as useCallback47 } from "react";
44722
+ import React69, { useCallback as useCallback47 } from "react";
43924
44723
  import { z } from "zod";
43925
44724
 
43926
44725
  // src/components/homepage/Demo/DemoErrorIcon.tsx
@@ -44118,7 +44917,7 @@ var style2 = {
44118
44917
  justifyContent: "center"
44119
44918
  };
44120
44919
  var RenderButton = ({ renderData, onError, playerRef }) => {
44121
- const [state, setState] = React70.useState({
44920
+ const [state, setState] = React69.useState({
44122
44921
  type: "idle"
44123
44922
  });
44124
44923
  const triggerRender = useCallback47(async () => {
@@ -44693,7 +45492,7 @@ var PlayerVolume = ({ playerRef }) => {
44693
45492
  };
44694
45493
 
44695
45494
  // src/components/homepage/Demo/PlayPauseButton.tsx
44696
- import React75, { useCallback as useCallback51, useEffect as useEffect56 } from "react";
45495
+ import React73, { useCallback as useCallback51, useEffect as useEffect56 } from "react";
44697
45496
  import { jsx as jsx107 } from "react/jsx-runtime";
44698
45497
  var playerButtonStyle2 = {
44699
45498
  appearance: "none",
@@ -44710,7 +45509,7 @@ var playerButtonStyle2 = {
44710
45509
  color: PALETTE.TEXT_COLOR
44711
45510
  };
44712
45511
  var PlayPauseButton = ({ playerRef }) => {
44713
- const [playing, setPlaying] = React75.useState(true);
45512
+ const [playing, setPlaying] = React73.useState(true);
44714
45513
  useEffect56(() => {
44715
45514
  const { current } = playerRef;
44716
45515
  if (!current) {
@@ -44748,7 +45547,7 @@ var PlayPauseButton = ({ playerRef }) => {
44748
45547
  };
44749
45548
 
44750
45549
  // src/components/homepage/Demo/TimeDisplay.tsx
44751
- import React76, { useEffect as useEffect57 } from "react";
45550
+ import React75, { useEffect as useEffect57 } from "react";
44752
45551
  import { jsx as jsx108 } from "react/jsx-runtime";
44753
45552
  var formatTime2 = (timeInSeconds) => {
44754
45553
  const minutes = Math.floor(timeInSeconds / 60);
@@ -44756,7 +45555,7 @@ var formatTime2 = (timeInSeconds) => {
44756
45555
  return `${String(minutes)}:${String(seconds).padStart(2, "0")}`;
44757
45556
  };
44758
45557
  var TimeDisplay = ({ fps, playerRef }) => {
44759
- const [time, setTime] = React76.useState(0);
45558
+ const [time, setTime] = React75.useState(0);
44760
45559
  useEffect57(() => {
44761
45560
  const { current } = playerRef;
44762
45561
  if (!current) {
@@ -44835,7 +45634,7 @@ var PlayerControls = ({ playerRef, durationInFrames, fps, children }) => {
44835
45634
  };
44836
45635
 
44837
45636
  // src/components/homepage/Demo/ThemeNudge.tsx
44838
- import React77 from "react";
45637
+ import React76 from "react";
44839
45638
  import { jsx as jsx110, jsxs as jsxs38 } from "react/jsx-runtime";
44840
45639
  var origWidth3 = 37;
44841
45640
  var scale3 = 0.4;
@@ -44858,7 +45657,7 @@ var Icon6 = () => {
44858
45657
  };
44859
45658
  var ThemeNudge = () => {
44860
45659
  const { colorMode, setColorMode } = useColorMode();
44861
- const toggleTheme = React77.useCallback((e) => {
45660
+ const toggleTheme = React76.useCallback((e) => {
44862
45661
  e.preventDefault();
44863
45662
  setColorMode(colorMode === "dark" ? "light" : "dark");
44864
45663
  }, [colorMode, setColorMode]);