@remotion/promo-pages 4.0.471 → 4.0.473

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 +1632 -738
  2. package/dist/design.js +1357 -804
  3. package/dist/experts.js +1259 -706
  4. package/dist/homepage/Pricing.js +1357 -804
  5. package/dist/prompts/PromptsGallery.js +1357 -804
  6. package/dist/prompts/PromptsShow.js +1206 -653
  7. package/dist/prompts/PromptsSubmit.js +1206 -653
  8. package/dist/team.js +1357 -804
  9. package/dist/template-modal-content.js +1357 -804
  10. package/dist/templates.js +1357 -804
  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.473";
2285
2336
  var checkMultipleRemotionVersions = () => {
2286
2337
  if (typeof globalThis === "undefined") {
2287
2338
  return;
@@ -2320,7 +2371,8 @@ __export2(exports_timeline_position_state, {
2320
2371
  useAbsoluteTimelinePosition: () => useAbsoluteTimelinePosition,
2321
2372
  persistCurrentFrame: () => persistCurrentFrame,
2322
2373
  getInitialFrameState: () => getInitialFrameState,
2323
- getFrameForComposition: () => getFrameForComposition
2374
+ getFrameForComposition: () => getFrameForComposition,
2375
+ clampFrameToCompositionRange: () => clampFrameToCompositionRange
2324
2376
  });
2325
2377
  function mulberry32(a) {
2326
2378
  let t = a + 1831565813;
@@ -2457,6 +2509,9 @@ var getFrameForComposition = (composition) => {
2457
2509
  }
2458
2510
  return window.remotion_initialFrame ?? 0;
2459
2511
  };
2512
+ var clampFrameToCompositionRange = (frame, durationInFrames) => {
2513
+ return Math.max(0, Math.min(Math.max(0, durationInFrames - 1), frame));
2514
+ };
2460
2515
  var useTimelinePositionFromContext = (state) => {
2461
2516
  const videoConfig = useVideo();
2462
2517
  const env = useRemotionEnvironment();
@@ -2464,7 +2519,7 @@ var useTimelinePositionFromContext = (state) => {
2464
2519
  return typeof window === "undefined" ? 0 : window.remotion_initialFrame ?? 0;
2465
2520
  }
2466
2521
  const unclamped = state.frame[videoConfig.id] ?? (env.isPlayer ? 0 : getFrameForComposition(videoConfig.id));
2467
- return Math.min(videoConfig.durationInFrames - 1, unclamped);
2522
+ return clampFrameToCompositionRange(unclamped, videoConfig.durationInFrames);
2468
2523
  };
2469
2524
  var useTimelineContext = () => {
2470
2525
  const state = useContext10(TimelineContext);
@@ -2651,15 +2706,14 @@ var sequenceVisualStyleSchema = {
2651
2706
  description: "Offset"
2652
2707
  },
2653
2708
  "style.scale": {
2654
- type: "number",
2655
- min: 0.05,
2709
+ type: "scale",
2656
2710
  max: 100,
2657
2711
  step: 0.01,
2658
2712
  default: 1,
2659
2713
  description: "Scale"
2660
2714
  },
2661
2715
  "style.rotate": {
2662
- type: "rotation",
2716
+ type: "rotation-css",
2663
2717
  step: 1,
2664
2718
  default: "0deg",
2665
2719
  description: "Rotation"
@@ -2670,7 +2724,8 @@ var sequenceVisualStyleSchema = {
2670
2724
  max: 1,
2671
2725
  step: 0.01,
2672
2726
  default: 1,
2673
- description: "Opacity"
2727
+ description: "Opacity",
2728
+ hiddenFromList: false
2674
2729
  }
2675
2730
  };
2676
2731
  var sequencePremountSchema = {
@@ -2679,10 +2734,15 @@ var sequencePremountSchema = {
2679
2734
  default: 0,
2680
2735
  description: "Premount For",
2681
2736
  min: 0,
2682
- step: 1
2737
+ step: 1,
2738
+ hiddenFromList: false
2683
2739
  },
2684
2740
  postmountFor: {
2685
- type: "hidden"
2741
+ type: "number",
2742
+ default: 0,
2743
+ min: 0,
2744
+ step: 1,
2745
+ hiddenFromList: true
2686
2746
  },
2687
2747
  styleWhilePremounted: {
2688
2748
  type: "hidden"
@@ -2700,8 +2760,23 @@ var hiddenField = {
2700
2760
  default: false,
2701
2761
  description: "Hidden"
2702
2762
  };
2763
+ var durationInFramesField = {
2764
+ type: "number",
2765
+ default: undefined,
2766
+ min: 1,
2767
+ step: 1,
2768
+ hiddenFromList: true
2769
+ };
2770
+ var fromField = {
2771
+ type: "number",
2772
+ default: 0,
2773
+ step: 1,
2774
+ hiddenFromList: true
2775
+ };
2703
2776
  var sequenceSchema = {
2704
2777
  hidden: hiddenField,
2778
+ from: fromField,
2779
+ durationInFrames: durationInFramesField,
2705
2780
  layout: {
2706
2781
  type: "enum",
2707
2782
  default: "absolute-fill",
@@ -2712,6 +2787,11 @@ var sequenceSchema = {
2712
2787
  }
2713
2788
  }
2714
2789
  };
2790
+ var sequenceSchemaWithoutFrom = {
2791
+ hidden: hiddenField,
2792
+ durationInFrames: durationInFramesField,
2793
+ layout: sequenceSchema.layout
2794
+ };
2715
2795
  var sequenceSchemaDefaultLayoutNone = {
2716
2796
  ...sequenceSchema,
2717
2797
  layout: {
@@ -2882,6 +2962,25 @@ var SequenceManagerProvider = ({ children }) => {
2882
2962
  })
2883
2963
  });
2884
2964
  };
2965
+ var IsInsideSeriesContext = createContext15(false);
2966
+ var IsInsideSeriesContainer = ({ children }) => {
2967
+ return /* @__PURE__ */ jsx11(IsInsideSeriesContext.Provider, {
2968
+ value: true,
2969
+ children
2970
+ });
2971
+ };
2972
+ var IsNotInsideSeriesProvider = ({ children }) => {
2973
+ return /* @__PURE__ */ jsx11(IsInsideSeriesContext.Provider, {
2974
+ value: false,
2975
+ children
2976
+ });
2977
+ };
2978
+ var useRequireToBeInsideSeries = () => {
2979
+ const isInsideSeries = React12.useContext(IsInsideSeriesContext);
2980
+ if (!isInsideSeries) {
2981
+ throw new Error("This component must be inside a <Series /> component.");
2982
+ }
2983
+ };
2885
2984
  var ENABLE_V5_BREAKING_CHANGES = false;
2886
2985
  var deleteNestedKey = (obj, keysToRemove) => {
2887
2986
  for (const key of keysToRemove) {
@@ -2914,229 +3013,6 @@ var deleteNestedKey = (obj, keysToRemove) => {
2914
3013
  }
2915
3014
  return obj;
2916
3015
  };
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
3016
  var NEWTON_ITERATIONS = 4;
3141
3017
  var NEWTON_MIN_SLOPE = 0.001;
3142
3018
  var SUBDIVISION_PRECISION = 0.0000001;
@@ -3318,6 +3194,123 @@ class Easing {
3318
3194
  };
3319
3195
  }
3320
3196
  }
3197
+ var normalizeNumber = (value) => {
3198
+ return Math.round(value * 1e6) / 1e6;
3199
+ };
3200
+ var angleUnits = new Set(["deg", "rad", "grad", "turn"]);
3201
+ var lengthUnits = new Set([
3202
+ "%",
3203
+ "cap",
3204
+ "ch",
3205
+ "cm",
3206
+ "cqb",
3207
+ "cqh",
3208
+ "cqi",
3209
+ "cqmax",
3210
+ "cqmin",
3211
+ "cqw",
3212
+ "dvh",
3213
+ "dvw",
3214
+ "em",
3215
+ "ex",
3216
+ "ic",
3217
+ "in",
3218
+ "lh",
3219
+ "lvh",
3220
+ "lvw",
3221
+ "mm",
3222
+ "pc",
3223
+ "pt",
3224
+ "px",
3225
+ "q",
3226
+ "rem",
3227
+ "rlh",
3228
+ "svh",
3229
+ "svw",
3230
+ "vb",
3231
+ "vh",
3232
+ "vi",
3233
+ "vmax",
3234
+ "vmin",
3235
+ "vw"
3236
+ ]);
3237
+ var cssNumberRegex = /^([+-]?(?:\d+\.?\d*|\.\d+))([a-zA-Z%]+)?$/;
3238
+ var stringifyNumber = (value) => {
3239
+ return String(normalizeNumber(value));
3240
+ };
3241
+ var parseStringInterpolationComponent = (component, value) => {
3242
+ const match = cssNumberRegex.exec(component);
3243
+ if (match === null) {
3244
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not a supported scale, translate, or rotate value`);
3245
+ }
3246
+ const unit = match[2] ?? null;
3247
+ const numberValue = Number(match[1]);
3248
+ if (!Number.isFinite(numberValue)) {
3249
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not finite`);
3250
+ }
3251
+ if (unit === null) {
3252
+ return { kind: "scale", value: numberValue, unit: null };
3253
+ }
3254
+ if (angleUnits.has(unit)) {
3255
+ return { kind: "rotate", value: numberValue, unit };
3256
+ }
3257
+ if (lengthUnits.has(unit)) {
3258
+ return { kind: "translate", value: numberValue, unit };
3259
+ }
3260
+ throw new TypeError(`Cannot interpolate "${value}" because "${unit}" is not a supported translate or rotate unit`);
3261
+ };
3262
+ var parseStringInterpolationValue = (output) => {
3263
+ if (typeof output === "number") {
3264
+ if (!Number.isFinite(output)) {
3265
+ throw new Error(`outputRange must contain only finite numbers, but got [${output}]`);
3266
+ }
3267
+ return {
3268
+ kind: "scale",
3269
+ values: [output, output, 1],
3270
+ units: [null, null, null],
3271
+ dimensions: 1
3272
+ };
3273
+ }
3274
+ const parts = output.trim().split(/\s+/);
3275
+ if (parts.length < 1 || parts.length > 3 || parts[0] === "") {
3276
+ throw new TypeError(`String outputRange values must contain 1 to 3 components, but got "${output}"`);
3277
+ }
3278
+ const parsed = parts.map((part) => parseStringInterpolationComponent(part, output));
3279
+ const [{ kind }] = parsed;
3280
+ for (const part of parsed) {
3281
+ if (part.kind !== kind) {
3282
+ throw new TypeError(`Cannot interpolate "${output}" because it mixes ${kind} and ${part.kind} values`);
3283
+ }
3284
+ }
3285
+ if (kind === "scale") {
3286
+ const x = parsed[0].value;
3287
+ const y = parsed[1]?.value ?? x;
3288
+ const z = parsed[2]?.value ?? 1;
3289
+ return {
3290
+ kind,
3291
+ values: [x, y, z],
3292
+ units: [null, null, null],
3293
+ dimensions: parsed.length
3294
+ };
3295
+ }
3296
+ return {
3297
+ kind,
3298
+ values: [parsed[0].value, parsed[1]?.value ?? 0, parsed[2]?.value ?? 0],
3299
+ units: [parsed[0].unit, parsed[1]?.unit ?? null, parsed[2]?.unit ?? null],
3300
+ dimensions: parsed.length
3301
+ };
3302
+ };
3303
+ var serializeStringInterpolationValue = ({
3304
+ kind,
3305
+ values,
3306
+ units,
3307
+ dimensions
3308
+ }) => {
3309
+ if (kind === "scale") {
3310
+ return values.slice(0, dimensions).map((value) => stringifyNumber(value)).join(" ");
3311
+ }
3312
+ return values.slice(0, dimensions).map((value, index) => `${stringifyNumber(value)}${units[index]}`).join(" ");
3313
+ };
3321
3314
  function interpolateFunction(input, inputRange, outputRange, options) {
3322
3315
  const { extrapolateLeft, extrapolateRight, easing } = options;
3323
3316
  let result = input;
@@ -3362,6 +3355,130 @@ function findRange(input, inputRange) {
3362
3355
  }
3363
3356
  return i - 1;
3364
3357
  }
3358
+ var defaultEasing = (num) => num;
3359
+ var interpolateNumber = ({
3360
+ input,
3361
+ inputRange,
3362
+ outputRange,
3363
+ options
3364
+ }) => {
3365
+ if (inputRange.length === 1) {
3366
+ return outputRange[0];
3367
+ }
3368
+ const easingOption = options?.easing;
3369
+ const resolveEasingForSegment = (segmentIndex) => {
3370
+ if (easingOption === undefined) {
3371
+ return defaultEasing;
3372
+ }
3373
+ if (typeof easingOption === "function") {
3374
+ return easingOption;
3375
+ }
3376
+ return easingOption[segmentIndex];
3377
+ };
3378
+ let extrapolateLeft = "extend";
3379
+ if (options?.extrapolateLeft !== undefined) {
3380
+ extrapolateLeft = options.extrapolateLeft;
3381
+ }
3382
+ let extrapolateRight = "extend";
3383
+ if (options?.extrapolateRight !== undefined) {
3384
+ extrapolateRight = options.extrapolateRight;
3385
+ }
3386
+ const posterizedInput = options?.posterize === undefined ? input : Math.floor(input / options.posterize) * options.posterize;
3387
+ const range = findRange(posterizedInput, inputRange);
3388
+ return interpolateFunction(posterizedInput, [inputRange[range], inputRange[range + 1]], [outputRange[range], outputRange[range + 1]], {
3389
+ easing: resolveEasingForSegment(range),
3390
+ extrapolateLeft,
3391
+ extrapolateRight
3392
+ });
3393
+ };
3394
+ var interpolateString = ({
3395
+ input,
3396
+ inputRange,
3397
+ outputRange,
3398
+ options
3399
+ }) => {
3400
+ const parsedOutputRange = outputRange.map(parseStringInterpolationValue);
3401
+ const kind = parsedOutputRange[0]?.kind;
3402
+ if (kind === undefined) {
3403
+ throw new Error("outputRange must have at least 1 element");
3404
+ }
3405
+ for (const parsed of parsedOutputRange) {
3406
+ if (parsed.kind !== kind) {
3407
+ throw new TypeError(`Cannot interpolate ${kind} values with ${parsed.kind} values`);
3408
+ }
3409
+ }
3410
+ const dimensions = Math.max(...parsedOutputRange.map((parsed) => parsed.dimensions));
3411
+ const units = [
3412
+ null,
3413
+ null,
3414
+ null
3415
+ ];
3416
+ if (kind !== "scale") {
3417
+ for (let axis = 0;axis < dimensions; axis++) {
3418
+ for (const parsed of parsedOutputRange) {
3419
+ const unit = parsed.units[axis];
3420
+ if (unit === null) {
3421
+ continue;
3422
+ }
3423
+ if (units[axis] === null) {
3424
+ units[axis] = unit;
3425
+ continue;
3426
+ }
3427
+ if (units[axis] !== unit) {
3428
+ throw new TypeError(`Cannot interpolate ${kind} values with different units on axis ${axis + 1}: ${units[axis]} and ${unit}`);
3429
+ }
3430
+ }
3431
+ if (units[axis] === null) {
3432
+ throw new TypeError(`Cannot interpolate ${kind} values because axis ${axis + 1} has no unit`);
3433
+ }
3434
+ }
3435
+ }
3436
+ return serializeStringInterpolationValue({
3437
+ kind,
3438
+ values: [0, 0, 0].map((_, axis) => interpolateNumber({
3439
+ input,
3440
+ inputRange,
3441
+ outputRange: parsedOutputRange.map((parsed) => parsed.values[axis]),
3442
+ options
3443
+ })),
3444
+ units,
3445
+ dimensions
3446
+ });
3447
+ };
3448
+ var validateTupleOutputRange = (outputRange) => {
3449
+ const dimensions = outputRange[0]?.length;
3450
+ if (dimensions === undefined) {
3451
+ throw new Error("outputRange must have at least 1 element");
3452
+ }
3453
+ if (dimensions === 0) {
3454
+ throw new TypeError("outputRange tuples must contain at least 1 number");
3455
+ }
3456
+ for (const output of outputRange) {
3457
+ if (output.length !== dimensions) {
3458
+ throw new TypeError(`outputRange tuples must all have the same length, but got ${dimensions} and ${output.length}`);
3459
+ }
3460
+ for (const value of output) {
3461
+ if (typeof value !== "number" || !Number.isFinite(value)) {
3462
+ throw new TypeError(`outputRange tuples must contain only finite numbers, but got [${output.join(",")}]`);
3463
+ }
3464
+ }
3465
+ }
3466
+ return dimensions;
3467
+ };
3468
+ var interpolateTuple = ({
3469
+ input,
3470
+ inputRange,
3471
+ outputRange,
3472
+ options
3473
+ }) => {
3474
+ const dimensions = validateTupleOutputRange(outputRange);
3475
+ return new Array(dimensions).fill(true).map((_, axis) => interpolateNumber({
3476
+ input,
3477
+ inputRange,
3478
+ outputRange: outputRange.map((output) => output[axis]),
3479
+ options
3480
+ }));
3481
+ };
3365
3482
  function checkValidInputRange(arr) {
3366
3483
  for (let i = 1;i < arr.length; ++i) {
3367
3484
  if (!(arr[i] > arr[i - 1])) {
@@ -3421,42 +3538,30 @@ function interpolate(input, inputRange, outputRange, options) {
3421
3538
  throw new Error("inputRange (" + inputRange.length + ") and outputRange (" + outputRange.length + ") must have the same length");
3422
3539
  }
3423
3540
  checkInfiniteRange("inputRange", inputRange);
3424
- checkInfiniteRange("outputRange", outputRange);
3425
3541
  checkValidInputRange(inputRange);
3426
3542
  assertValidInterpolateEasingOption(options?.easing, inputRange.length);
3427
3543
  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
3544
  if (typeof input !== "number") {
3448
3545
  throw new TypeError("Cannot interpolate an input which is not a number");
3449
3546
  }
3450
- if (inputRange.length === 1) {
3451
- return outputRange[0];
3547
+ if (!Array.isArray(outputRange)) {
3548
+ throw new Error("outputRange must contain only numbers");
3452
3549
  }
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
- });
3550
+ const hasStringOutput = outputRange.some((output) => typeof output === "string");
3551
+ if (hasStringOutput) {
3552
+ if (!outputRange.every((output) => typeof output === "string" || typeof output === "number")) {
3553
+ throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
3554
+ }
3555
+ return interpolateString({ input, inputRange, outputRange, options });
3556
+ }
3557
+ if (outputRange.every((output) => Array.isArray(output))) {
3558
+ return interpolateTuple({ input, inputRange, outputRange, options });
3559
+ }
3560
+ if (!outputRange.every((output) => typeof output === "number")) {
3561
+ throw new TypeError("outputRange must contain only numbers, numeric tuples, or supported scale, translate, and rotate strings");
3562
+ }
3563
+ checkInfiniteRange("outputRange", outputRange);
3564
+ return interpolateNumber({ input, inputRange, outputRange, options });
3460
3565
  }
3461
3566
  var NUMBER = "[-+]?\\d*\\.?\\d+";
3462
3567
  var PERCENTAGE = NUMBER + "%";
@@ -3966,8 +4071,9 @@ var interpolateKeyframedStatus = ({
3966
4071
  if (keyframes.length === 0) {
3967
4072
  return null;
3968
4073
  }
3969
- const inputRange = keyframes.map((k) => k.frame);
3970
- const outputs = keyframes.map((k) => k.value);
4074
+ const sortedKeyframes = [...keyframes].sort((a2, b2) => a2.frame - b2.frame);
4075
+ const inputRange = sortedKeyframes.map((k) => k.frame);
4076
+ const outputs = sortedKeyframes.map((k) => k.value);
3971
4077
  if (interpolationFunction === "interpolateColors") {
3972
4078
  if (!outputs.every((v) => typeof v === "string")) {
3973
4079
  return null;
@@ -3986,12 +4092,6 @@ var interpolateKeyframedStatus = ({
3986
4092
  if (interpolationFunction !== "interpolate") {
3987
4093
  return null;
3988
4094
  }
3989
- if (!outputs.every((v) => typeof v === "number")) {
3990
- return null;
3991
- }
3992
- if (keyframes.length === 1) {
3993
- return outputs[0];
3994
- }
3995
4095
  try {
3996
4096
  return interpolate(frame, inputRange, outputs, {
3997
4097
  easing: easing.map(easingToFn),
@@ -4003,6 +4103,306 @@ var interpolateKeyframedStatus = ({
4003
4103
  return null;
4004
4104
  }
4005
4105
  };
4106
+ var resolveDragOverrideValue = ({
4107
+ dragOverrideValue,
4108
+ frame
4109
+ }) => {
4110
+ if (dragOverrideValue === undefined) {
4111
+ return { type: "none" };
4112
+ }
4113
+ if (dragOverrideValue.type === "static") {
4114
+ return { type: "resolved", value: dragOverrideValue.value };
4115
+ }
4116
+ if (frame === null) {
4117
+ return { type: "none" };
4118
+ }
4119
+ const interpolated = interpolateKeyframedStatus({
4120
+ frame,
4121
+ status: dragOverrideValue.status
4122
+ });
4123
+ if (interpolated === null) {
4124
+ return { type: "none" };
4125
+ }
4126
+ return { type: "resolved", value: interpolated };
4127
+ };
4128
+ var getEffectiveVisualModeValue = ({
4129
+ codeValue,
4130
+ dragOverrideValue,
4131
+ defaultValue,
4132
+ frame = null,
4133
+ shouldResortToDefaultValueIfUndefined = false
4134
+ }) => {
4135
+ const dragOverride = resolveDragOverrideValue({
4136
+ dragOverrideValue,
4137
+ frame
4138
+ });
4139
+ if (dragOverride.type === "resolved" && dragOverride.value !== undefined) {
4140
+ return dragOverride.value;
4141
+ }
4142
+ if (codeValue.status === "keyframed" && frame !== null) {
4143
+ return interpolateKeyframedStatus({
4144
+ frame,
4145
+ status: codeValue
4146
+ });
4147
+ }
4148
+ if (codeValue.codeValue === undefined && shouldResortToDefaultValueIfUndefined) {
4149
+ return defaultValue;
4150
+ }
4151
+ return codeValue.codeValue;
4152
+ };
4153
+ var OverrideIdsToNodePathsGettersContext = createContext16({
4154
+ overrideIdToNodePathMappings: {}
4155
+ });
4156
+ var OverrideIdsToNodePathsSettersContext = createContext16({
4157
+ setOverrideIdToNodePath: () => {
4158
+ throw new Error("OverrideIdsToNodePathsSettersContext not initialized");
4159
+ }
4160
+ });
4161
+ var mergeOverrides = ({
4162
+ descriptor,
4163
+ codeOverrides,
4164
+ dragOverrides,
4165
+ frame
4166
+ }) => {
4167
+ if (!codeOverrides && !dragOverrides) {
4168
+ return { params: descriptor.params, effectKey: descriptor.effectKey };
4169
+ }
4170
+ const merged = {
4171
+ ...descriptor.params
4172
+ };
4173
+ if (codeOverrides) {
4174
+ for (const [key, value] of Object.entries(codeOverrides)) {
4175
+ if (value !== undefined) {
4176
+ merged[key] = value;
4177
+ }
4178
+ }
4179
+ }
4180
+ if (dragOverrides) {
4181
+ for (const [key, value] of Object.entries(dragOverrides)) {
4182
+ const resolved = resolveDragOverrideValue({
4183
+ dragOverrideValue: value,
4184
+ frame
4185
+ });
4186
+ if (resolved.type === "resolved") {
4187
+ merged[key] = resolved.value;
4188
+ }
4189
+ }
4190
+ }
4191
+ return {
4192
+ params: merged,
4193
+ effectKey: descriptor.definition.calculateKey(merged)
4194
+ };
4195
+ };
4196
+ var extractCodeOverrides = (propStatus) => {
4197
+ if (!propStatus) {
4198
+ return null;
4199
+ }
4200
+ const out = {};
4201
+ let hasAny = false;
4202
+ for (const [key, status] of Object.entries(propStatus)) {
4203
+ if (status.status !== "computed") {
4204
+ out[key] = status.codeValue;
4205
+ hasAny = true;
4206
+ }
4207
+ }
4208
+ return hasAny ? out : null;
4209
+ };
4210
+ var useMemoizedEffectDefinitions = (effects) => {
4211
+ const previousRef = useRef5(null);
4212
+ const definitions = effects.map((descriptor) => descriptor.definition);
4213
+ const previous = previousRef.current;
4214
+ const isSame = previous !== null && previous.length === definitions.length && previous.every((def, i) => def === definitions[i]);
4215
+ if (isSame) {
4216
+ return previous;
4217
+ }
4218
+ previousRef.current = definitions;
4219
+ return definitions;
4220
+ };
4221
+ var getEffectCodeValuesCtx = ({
4222
+ codeValues,
4223
+ nodePath,
4224
+ effectIndex
4225
+ }) => {
4226
+ const status = codeValues[makeSequencePropsSubscriptionKey(nodePath)];
4227
+ if (!status) {
4228
+ return { type: "cannot-update-sequence", reason: "not-found" };
4229
+ }
4230
+ if (!status.canUpdate) {
4231
+ return { type: "cannot-update-sequence", reason: status.reason };
4232
+ }
4233
+ const effect = status.effects.find((e) => e.effectIndex === effectIndex);
4234
+ if (!effect) {
4235
+ return { type: "cannot-update-effect", reason: "not-found" };
4236
+ }
4237
+ if (!effect.canUpdate) {
4238
+ return { type: "cannot-update-effect", reason: effect.reason };
4239
+ }
4240
+ return { type: "can-update-effect", props: effect.props };
4241
+ };
4242
+ var getCodeValuesCtx = (codeValues, nodePath) => {
4243
+ const status = codeValues[makeSequencePropsSubscriptionKey(nodePath)];
4244
+ if (!status) {
4245
+ return;
4246
+ }
4247
+ if (!status.canUpdate) {
4248
+ return;
4249
+ }
4250
+ return status.props;
4251
+ };
4252
+ var useMemoizedEffects = ({
4253
+ effects,
4254
+ overrideId
4255
+ }) => {
4256
+ const previousRef = useRef5(null);
4257
+ const { codeValues } = useContext15(VisualModeCodeValuesContext);
4258
+ const { getEffectDragOverrides } = useContext15(VisualModeDragOverridesContext);
4259
+ const frame = useCurrentFrame();
4260
+ const { overrideIdToNodePathMappings } = useContext15(OverrideIdsToNodePathsGettersContext);
4261
+ const previous = previousRef.current;
4262
+ const nodePath = overrideId ? overrideIdToNodePathMappings[overrideId] ?? null : null;
4263
+ const resolved = effects.map((descriptor, index) => {
4264
+ if (nodePath === null) {
4265
+ return {
4266
+ descriptor,
4267
+ params: descriptor.params,
4268
+ effectKey: descriptor.effectKey
4269
+ };
4270
+ }
4271
+ const effectStatus = getEffectCodeValuesCtx({
4272
+ codeValues,
4273
+ nodePath,
4274
+ effectIndex: index
4275
+ });
4276
+ const codeOverrides = effectStatus.type === "can-update-effect" ? extractCodeOverrides(effectStatus.props) : null;
4277
+ const dragOverridesMap = getEffectDragOverrides(nodePath, index);
4278
+ const dragOverrides = Object.keys(dragOverridesMap).length === 0 ? null : dragOverridesMap;
4279
+ const { params, effectKey } = mergeOverrides({
4280
+ descriptor,
4281
+ codeOverrides,
4282
+ dragOverrides,
4283
+ frame
4284
+ });
4285
+ return { descriptor, params, effectKey };
4286
+ });
4287
+ const isSame = previous !== null && previous.length === resolved.length && previous.every((p, i) => p.definition === resolved[i].descriptor.definition && p.effectKey === resolved[i].effectKey);
4288
+ if (isSame) {
4289
+ return previous;
4290
+ }
4291
+ const next = resolved.map(({ descriptor, params, effectKey }) => ({
4292
+ definition: descriptor.definition,
4293
+ effectKey,
4294
+ params,
4295
+ memoized: true
4296
+ }));
4297
+ previousRef.current = next;
4298
+ return next;
4299
+ };
4300
+ var flattenActiveSchema = (schema, resolve) => {
4301
+ const out = {};
4302
+ for (const key of Object.keys(schema)) {
4303
+ const field = schema[key];
4304
+ if (field.type === "hidden") {
4305
+ continue;
4306
+ } else if (field.type === "enum") {
4307
+ out[key] = field;
4308
+ const current = resolve(key) ?? field.default;
4309
+ const variant = field.variants[current];
4310
+ if (variant) {
4311
+ Object.assign(out, flattenActiveSchema(variant, resolve));
4312
+ }
4313
+ } else {
4314
+ out[key] = field;
4315
+ }
4316
+ }
4317
+ return out;
4318
+ };
4319
+ var getFlatSchemaWithAllKeys = (schema) => {
4320
+ const out = {};
4321
+ const addKey = (key, field) => {
4322
+ if (key in out) {
4323
+ throw new Error(`Duplicate key "${key}" in schema: discriminated union variants must not share keys`);
4324
+ }
4325
+ out[key] = field;
4326
+ };
4327
+ for (const key of Object.keys(schema)) {
4328
+ const field = schema[key];
4329
+ addKey(key, field);
4330
+ if (field.type === "enum") {
4331
+ for (const variant of Object.values(field.variants)) {
4332
+ const flatVariant = getFlatSchemaWithAllKeys(variant);
4333
+ for (const variantKey of Object.keys(flatVariant)) {
4334
+ addKey(variantKey, flatVariant[variantKey]);
4335
+ }
4336
+ }
4337
+ }
4338
+ }
4339
+ return out;
4340
+ };
4341
+ var findPropsToDelete = ({
4342
+ schema,
4343
+ key,
4344
+ value
4345
+ }) => {
4346
+ const fieldSchema = schema[key];
4347
+ if (!fieldSchema) {
4348
+ throw new Error("Key " + JSON.stringify(key) + " not found in schema");
4349
+ }
4350
+ if (typeof value !== "string") {
4351
+ throw new Error("Value must be a string, but is " + JSON.stringify(value));
4352
+ }
4353
+ if (fieldSchema.type !== "enum") {
4354
+ throw new Error("Key " + JSON.stringify(key) + " is not an enum");
4355
+ }
4356
+ const currentVariant = fieldSchema.variants[value];
4357
+ if (!currentVariant) {
4358
+ 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));
4359
+ }
4360
+ const otherVariants = Object.keys(fieldSchema.variants).filter((v) => v !== value);
4361
+ const otherKeys = new Set;
4362
+ for (const variant of otherVariants) {
4363
+ const otherVariant = fieldSchema.variants[variant];
4364
+ const keys = Object.keys(otherVariant);
4365
+ for (const k of keys) {
4366
+ otherKeys.add(k);
4367
+ }
4368
+ }
4369
+ return [...otherKeys];
4370
+ };
4371
+ var makeStaticDragOverride = (value) => {
4372
+ return { type: "static", value };
4373
+ };
4374
+ var makeKeyframedDragOverride = ({
4375
+ status,
4376
+ frame,
4377
+ value
4378
+ }) => {
4379
+ const existingIndex = status.keyframes.findIndex((keyframe) => keyframe.frame === frame);
4380
+ 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);
4381
+ const easing = [...status.easing];
4382
+ while (easing.length < keyframes.length - 1) {
4383
+ easing.push("linear");
4384
+ }
4385
+ if (easing.length > keyframes.length - 1) {
4386
+ easing.length = keyframes.length - 1;
4387
+ }
4388
+ return {
4389
+ type: "keyframed",
4390
+ status: {
4391
+ ...status,
4392
+ keyframes,
4393
+ easing
4394
+ }
4395
+ };
4396
+ };
4397
+ var getStaticDragOverrideValue = (dragOverrideValue) => {
4398
+ if (dragOverrideValue?.type !== "static") {
4399
+ return;
4400
+ }
4401
+ return dragOverrideValue.value;
4402
+ };
4403
+ var isKeyframedStatus = (status) => {
4404
+ return status !== null && status.status === "keyframed";
4405
+ };
4006
4406
  var findFieldInSchema = (schema, key) => {
4007
4407
  if (key in schema) {
4008
4408
  return schema[key];
@@ -4038,21 +4438,34 @@ var computeEffectiveSchemaValuesDotNotation = ({
4038
4438
  let value;
4039
4439
  if (codeValueStatus === null) {
4040
4440
  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 {
4441
+ } else if (isKeyframedStatus(codeValueStatus)) {
4442
+ if (field?.type === "array" || field?.keyframable === false) {
4049
4443
  value = currentValue[key];
4444
+ } else {
4445
+ const dragOverride = resolveDragOverrideValue({
4446
+ dragOverrideValue: overrideValues[key],
4447
+ frame
4448
+ });
4449
+ if (dragOverride.type === "resolved") {
4450
+ value = dragOverride.value;
4451
+ } else if (frame !== null) {
4452
+ const interpolated = interpolateKeyframedStatus({
4453
+ frame,
4454
+ status: codeValueStatus
4455
+ });
4456
+ value = interpolated ?? currentValue[key];
4457
+ } else {
4458
+ value = currentValue[key];
4459
+ }
4050
4460
  }
4461
+ } else if (codeValueStatus.status === "computed") {
4462
+ value = currentValue[key];
4051
4463
  } else {
4052
4464
  value = getEffectiveVisualModeValue({
4053
4465
  codeValue: codeValueStatus,
4054
4466
  dragOverrideValue: overrideValues[key],
4055
4467
  defaultValue: field?.default,
4468
+ frame,
4056
4469
  shouldResortToDefaultValueIfUndefined: false
4057
4470
  });
4058
4471
  }
@@ -4125,13 +4538,17 @@ var mergeValues = ({
4125
4538
  return merged;
4126
4539
  };
4127
4540
  var stackToOverrideMap = {};
4128
- var wrapInSchema = (Component, schema) => {
4541
+ var wrapInSchema = ({
4542
+ Component,
4543
+ schema,
4544
+ supportsEffects
4545
+ }) => {
4129
4546
  const flatSchema = getFlatSchemaWithAllKeys(schema);
4130
4547
  const flatKeys = Object.keys(flatSchema);
4131
4548
  const Wrapped = forwardRef2((props, ref) => {
4132
4549
  const env = useRemotionEnvironment();
4133
4550
  if (!env.isStudio || env.isReadOnlyStudio || env.isRendering) {
4134
- return React12.createElement(Component, {
4551
+ return React13.createElement(Component, {
4135
4552
  ...props,
4136
4553
  _experimentalControls: null,
4137
4554
  ref
@@ -4142,7 +4559,7 @@ var wrapInSchema = (Component, schema) => {
4142
4559
  const nodePathMapping = useContext16(OverrideIdsToNodePathsGettersContext);
4143
4560
  const frame = useCurrentFrame();
4144
4561
  if (props._experimentalControls) {
4145
- return React12.createElement(Component, {
4562
+ return React13.createElement(Component, {
4146
4563
  ...props,
4147
4564
  ref
4148
4565
  });
@@ -4167,7 +4584,8 @@ var wrapInSchema = (Component, schema) => {
4167
4584
  return {
4168
4585
  schema,
4169
4586
  currentRuntimeValueDotNotation,
4170
- overrideId
4587
+ overrideId,
4588
+ supportsEffects
4171
4589
  };
4172
4590
  }, [currentRuntimeValueDotNotation, overrideId]);
4173
4591
  const { merged: valuesDotNotation, propsToDelete } = useMemo13(() => {
@@ -4192,7 +4610,7 @@ var wrapInSchema = (Component, schema) => {
4192
4610
  schemaKeys: activeKeys,
4193
4611
  propsToDelete
4194
4612
  });
4195
- return React12.createElement(Component, {
4613
+ return React13.createElement(Component, {
4196
4614
  ...mergedProps,
4197
4615
  _experimentalControls: controls,
4198
4616
  ref
@@ -4201,6 +4619,7 @@ var wrapInSchema = (Component, schema) => {
4201
4619
  Wrapped.displayName = `wrapInSchema(${Component.displayName || Component.name || "Component"})`;
4202
4620
  return Wrapped;
4203
4621
  };
4622
+ var EMPTY_EFFECTS = [];
4204
4623
  var RegularSequenceRefForwardingFunction = ({
4205
4624
  from = 0,
4206
4625
  durationInFrames = Infinity,
@@ -4295,6 +4714,7 @@ var RegularSequenceRefForwardingFunction = ({
4295
4714
  }, [name]);
4296
4715
  const resolvedDocumentationLink = documentationLink ?? (name === undefined ? "https://www.remotion.dev/docs/sequence" : null);
4297
4716
  const env = useRemotionEnvironment();
4717
+ const isInsideSeries = useContext17(IsInsideSeriesContext);
4298
4718
  const inheritedStack = other?.stack ?? null;
4299
4719
  const stackRef = useRef6(null);
4300
4720
  stackRef.current = stack ?? inheritedStack;
@@ -4307,7 +4727,7 @@ var RegularSequenceRefForwardingFunction = ({
4307
4727
  registerSequence({
4308
4728
  type: "image",
4309
4729
  controls: controls ?? null,
4310
- effects: _remotionInternalEffects ?? [],
4730
+ effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
4311
4731
  displayName: timelineClipName,
4312
4732
  documentationLink: resolvedDocumentationLink,
4313
4733
  duration: actualDurationInFrames,
@@ -4322,13 +4742,14 @@ var RegularSequenceRefForwardingFunction = ({
4322
4742
  showInTimeline,
4323
4743
  src: isMedia.src,
4324
4744
  getStack: () => stackRef.current,
4325
- refForOutline: refForOutline ?? null
4745
+ refForOutline: refForOutline ?? null,
4746
+ isInsideSeries
4326
4747
  });
4327
4748
  } else {
4328
4749
  registerSequence({
4329
4750
  type: isMedia.type,
4330
4751
  controls: controls ?? null,
4331
- effects: _remotionInternalEffects ?? [],
4752
+ effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
4332
4753
  displayName: timelineClipName,
4333
4754
  documentationLink: resolvedDocumentationLink,
4334
4755
  doesVolumeChange: isMedia.data.doesVolumeChange,
@@ -4347,7 +4768,8 @@ var RegularSequenceRefForwardingFunction = ({
4347
4768
  getStack: () => stackRef.current,
4348
4769
  startMediaFrom: isMedia.data.startMediaFrom,
4349
4770
  volume: isMedia.data.volumes,
4350
- refForOutline: refForOutline ?? null
4771
+ refForOutline: refForOutline ?? null,
4772
+ isInsideSeries
4351
4773
  });
4352
4774
  }
4353
4775
  return () => {
@@ -4370,8 +4792,9 @@ var RegularSequenceRefForwardingFunction = ({
4370
4792
  premountDisplay: premountDisplay ?? null,
4371
4793
  postmountDisplay: postmountDisplay ?? null,
4372
4794
  controls: controls ?? null,
4373
- effects: _remotionInternalEffects ?? [],
4374
- refForOutline: refForOutline ?? null
4795
+ effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
4796
+ refForOutline: refForOutline ?? null,
4797
+ isInsideSeries
4375
4798
  });
4376
4799
  return () => {
4377
4800
  unregisterSequence(id);
@@ -4397,7 +4820,8 @@ var RegularSequenceRefForwardingFunction = ({
4397
4820
  _remotionInternalEffects,
4398
4821
  isMedia,
4399
4822
  resolvedDocumentationLink,
4400
- refForOutline
4823
+ refForOutline,
4824
+ isInsideSeries
4401
4825
  ]);
4402
4826
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
4403
4827
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
@@ -4416,9 +4840,9 @@ var RegularSequenceRefForwardingFunction = ({
4416
4840
  if (hidden) {
4417
4841
  return null;
4418
4842
  }
4419
- return /* @__PURE__ */ jsx11(SequenceContext.Provider, {
4843
+ return /* @__PURE__ */ jsx12(SequenceContext.Provider, {
4420
4844
  value: contextValue,
4421
- children: content === null ? null : other.layout === "none" ? content : /* @__PURE__ */ jsx11(AbsoluteFill, {
4845
+ children: content === null ? null : other.layout === "none" ? content : /* @__PURE__ */ jsx12(AbsoluteFill, {
4422
4846
  ref,
4423
4847
  style: defaultStyle,
4424
4848
  className: other.className,
@@ -4463,10 +4887,10 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
4463
4887
  styleWhilePremounted,
4464
4888
  styleWhilePostmounted
4465
4889
  ]);
4466
- return /* @__PURE__ */ jsx11(Freeze, {
4890
+ return /* @__PURE__ */ jsx12(Freeze, {
4467
4891
  frame: freezeFrame,
4468
4892
  active: isFreezingActive,
4469
- children: /* @__PURE__ */ jsx11(SequenceInner, {
4893
+ children: /* @__PURE__ */ jsx12(SequenceInner, {
4470
4894
  ref,
4471
4895
  from,
4472
4896
  durationInFrames,
@@ -4486,20 +4910,30 @@ var SequenceRefForwardingFunction = (props, ref) => {
4486
4910
  if (props.layout !== "none" && !env.isRendering) {
4487
4911
  const effectivePremountFor = ENABLE_V5_BREAKING_CHANGES ? props.premountFor ?? fps : props.premountFor;
4488
4912
  if (effectivePremountFor || props.postmountFor) {
4489
- return /* @__PURE__ */ jsx11(PremountedPostmountedSequence, {
4913
+ return /* @__PURE__ */ jsx12(PremountedPostmountedSequence, {
4490
4914
  ref,
4491
4915
  ...props,
4492
4916
  premountFor: effectivePremountFor
4493
4917
  });
4494
4918
  }
4495
4919
  }
4496
- return /* @__PURE__ */ jsx11(RegularSequence, {
4920
+ return /* @__PURE__ */ jsx12(RegularSequence, {
4497
4921
  ...props,
4498
4922
  ref
4499
4923
  });
4500
4924
  };
4501
4925
  var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
4502
- var Sequence = wrapInSchema(SequenceInner, sequenceSchema);
4926
+ var SequenceWithoutSchema = SequenceInner;
4927
+ var Sequence = wrapInSchema({
4928
+ Component: SequenceInner,
4929
+ schema: sequenceSchema,
4930
+ supportsEffects: false
4931
+ });
4932
+ var SequenceWithoutFrom = wrapInSchema({
4933
+ Component: SequenceInner,
4934
+ schema: sequenceSchemaWithoutFrom,
4935
+ supportsEffects: false
4936
+ });
4503
4937
  var calculateImageFit = (fit, imageSize, canvasSize) => {
4504
4938
  switch (fit) {
4505
4939
  case "fill": {
@@ -4866,13 +5300,13 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effec
4866
5300
  }
4867
5301
  };
4868
5302
  }, [draw]);
4869
- return /* @__PURE__ */ jsx12("canvas", {
5303
+ return /* @__PURE__ */ jsx13("canvas", {
4870
5304
  ref: canvasRef,
4871
5305
  className,
4872
5306
  style
4873
5307
  });
4874
5308
  };
4875
- var Canvas = React14.forwardRef(CanvasRefForwardingFunction);
5309
+ var Canvas = React15.forwardRef(CanvasRefForwardingFunction);
4876
5310
  var CACHE_SIZE = 5;
4877
5311
  var getActualTime = ({
4878
5312
  loopBehavior,
@@ -5033,13 +5467,17 @@ var resolveAnimatedImageSource = (src) => {
5033
5467
  return new URL(src, window.origin).href;
5034
5468
  };
5035
5469
  var animatedImageSchema = {
5470
+ durationInFrames: durationInFramesField,
5471
+ from: fromField,
5036
5472
  playbackRate: {
5037
5473
  type: "number",
5038
5474
  min: 0,
5039
5475
  max: 10,
5040
5476
  step: 0.1,
5041
5477
  default: 1,
5042
- description: "Playback Rate"
5478
+ description: "Playback Rate",
5479
+ hiddenFromList: false,
5480
+ keyframable: false
5043
5481
  },
5044
5482
  ...sequenceVisualStyleSchema,
5045
5483
  hidden: hiddenField
@@ -5163,7 +5601,7 @@ var AnimatedImageContent = forwardRef4(({
5163
5601
  width,
5164
5602
  height
5165
5603
  ]);
5166
- return /* @__PURE__ */ jsx13(Canvas, {
5604
+ return /* @__PURE__ */ jsx14(Canvas, {
5167
5605
  ref,
5168
5606
  width,
5169
5607
  height,
@@ -5211,7 +5649,7 @@ var AnimatedImageInner = ({
5211
5649
  style,
5212
5650
  requestInit
5213
5651
  };
5214
- return /* @__PURE__ */ jsx13(Sequence, {
5652
+ return /* @__PURE__ */ jsx14(Sequence, {
5215
5653
  layout: "none",
5216
5654
  durationInFrames: resolvedDuration,
5217
5655
  name: "<AnimatedImage>",
@@ -5220,7 +5658,7 @@ var AnimatedImageInner = ({
5220
5658
  _remotionInternalEffects: memoizedEffectDefinitions,
5221
5659
  ...sequenceProps,
5222
5660
  _remotionInternalRefForOutline: actualRef,
5223
- children: /* @__PURE__ */ jsx13(AnimatedImageContent, {
5661
+ children: /* @__PURE__ */ jsx14(AnimatedImageContent, {
5224
5662
  ...animatedImageProps,
5225
5663
  ref: actualRef,
5226
5664
  effects,
@@ -5228,7 +5666,11 @@ var AnimatedImageInner = ({
5228
5666
  })
5229
5667
  });
5230
5668
  };
5231
- var AnimatedImage = wrapInSchema(AnimatedImageInner, animatedImageSchema);
5669
+ var AnimatedImage = wrapInSchema({
5670
+ Component: AnimatedImageInner,
5671
+ schema: animatedImageSchema,
5672
+ supportsEffects: true
5673
+ });
5232
5674
  AnimatedImage.displayName = "AnimatedImage";
5233
5675
  addSequenceStackTraces(AnimatedImage);
5234
5676
  var validateArtifactFilename = (filename) => {
@@ -5260,7 +5702,7 @@ var validateRenderAsset = (artifact) => {
5260
5702
  }
5261
5703
  validateContent(artifact.content);
5262
5704
  };
5263
- var RenderAssetManager = createContext16({
5705
+ var RenderAssetManager = createContext17({
5264
5706
  registerRenderAsset: () => {
5265
5707
  return;
5266
5708
  },
@@ -5310,7 +5752,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
5310
5752
  renderAssets
5311
5753
  };
5312
5754
  }, [renderAssets, registerRenderAsset, unregisterRenderAsset]);
5313
- return /* @__PURE__ */ jsx14(RenderAssetManager.Provider, {
5755
+ return /* @__PURE__ */ jsx15(RenderAssetManager.Provider, {
5314
5756
  value: contextValue,
5315
5757
  children
5316
5758
  });
@@ -5398,9 +5840,9 @@ var calculateMediaDuration = ({
5398
5840
  const actualDuration = duration / playbackRate;
5399
5841
  return Math.floor(actualDuration);
5400
5842
  };
5401
- var LoopContext = createContext17(null);
5843
+ var LoopContext = createContext18(null);
5402
5844
  var useLoop = () => {
5403
- return React15.useContext(LoopContext);
5845
+ return React16.useContext(LoopContext);
5404
5846
  };
5405
5847
  var Loop = ({
5406
5848
  durationInFrames,
@@ -5445,9 +5887,9 @@ var Loop = ({
5445
5887
  durationInFrames
5446
5888
  };
5447
5889
  }, [currentFrame, durationInFrames]);
5448
- return /* @__PURE__ */ jsx15(LoopContext.Provider, {
5890
+ return /* @__PURE__ */ jsx16(LoopContext.Provider, {
5449
5891
  value: loopContext,
5450
- children: /* @__PURE__ */ jsx15(Sequence, {
5892
+ children: /* @__PURE__ */ jsx16(Sequence, {
5451
5893
  durationInFrames,
5452
5894
  from,
5453
5895
  name: name ?? "<Loop>",
@@ -5470,7 +5912,7 @@ var playbackLogging = ({
5470
5912
  const tags = [mountTime ? Date.now() - mountTime + "ms " : null, tag].filter(Boolean).join(" ");
5471
5913
  Log.trace({ logLevel, tag: null }, `[${tags}]`, message);
5472
5914
  };
5473
- var PreloadContext = createContext18({});
5915
+ var PreloadContext = createContext19({});
5474
5916
  var preloads = {};
5475
5917
  var updaters = [];
5476
5918
  var setPreloads = (updater) => {
@@ -5488,7 +5930,7 @@ var PrefetchProvider = ({ children }) => {
5488
5930
  updaters = updaters.filter((u) => u !== updaterFunction);
5489
5931
  };
5490
5932
  }, []);
5491
- return /* @__PURE__ */ jsx16(PreloadContext.Provider, {
5933
+ return /* @__PURE__ */ jsx17(PreloadContext.Provider, {
5492
5934
  value: _preloads,
5493
5935
  children
5494
5936
  });
@@ -5794,7 +6236,7 @@ var durationReducer = (state, action) => {
5794
6236
  return state;
5795
6237
  }
5796
6238
  };
5797
- var DurationsContext = createContext19({
6239
+ var DurationsContext = createContext20({
5798
6240
  durations: {},
5799
6241
  setDurations: () => {
5800
6242
  throw new Error("context missing");
@@ -5808,7 +6250,7 @@ var DurationsContextProvider = ({ children }) => {
5808
6250
  setDurations
5809
6251
  };
5810
6252
  }, [durations]);
5811
- return /* @__PURE__ */ jsx17(DurationsContext.Provider, {
6253
+ return /* @__PURE__ */ jsx18(DurationsContext.Provider, {
5812
6254
  value,
5813
6255
  children
5814
6256
  });
@@ -6047,8 +6489,8 @@ var didPropChange = (key, newProp, prevProp) => {
6047
6489
  }
6048
6490
  return true;
6049
6491
  };
6050
- var SharedAudioContext = createContext20(null);
6051
- var SharedAudioTagsContext = createContext20(null);
6492
+ var SharedAudioContext = createContext21(null);
6493
+ var SharedAudioTagsContext = createContext21(null);
6052
6494
  var shouldSaveForLater = (state) => {
6053
6495
  if (state === "suspended" || state === "running-to-suspended" || state === "interrupted") {
6054
6496
  return true;
@@ -6211,7 +6653,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
6211
6653
  getIsResumingAudioContext,
6212
6654
  unscheduleAudioNode
6213
6655
  ]);
6214
- return /* @__PURE__ */ jsx18(SharedAudioContext.Provider, {
6656
+ return /* @__PURE__ */ jsx19(SharedAudioContext.Provider, {
6215
6657
  value: audioContextValue,
6216
6658
  children
6217
6659
  });
@@ -6241,7 +6683,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
6241
6683
  };
6242
6684
  });
6243
6685
  }, [audioContext, numberOfAudioTags]);
6244
- const effectToUse = React18.useInsertionEffect ?? React18.useLayoutEffect;
6686
+ const effectToUse = React19.useInsertionEffect ?? React19.useLayoutEffect;
6245
6687
  effectToUse(() => {
6246
6688
  return () => {
6247
6689
  requestAnimationFrame(() => {
@@ -6384,7 +6826,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
6384
6826
  value: audioTagsValue,
6385
6827
  children: [
6386
6828
  refs.map(({ id, ref }) => {
6387
- return /* @__PURE__ */ jsx18("audio", {
6829
+ return /* @__PURE__ */ jsx19("audio", {
6388
6830
  ref,
6389
6831
  preload: "metadata",
6390
6832
  src: EMPTY_AUDIO
@@ -6406,7 +6848,7 @@ var useSharedAudio = ({
6406
6848
  if (tagsCtx && tagsCtx.numberOfAudioTags > 0) {
6407
6849
  return tagsCtx.registerAudio({ aud, audioId, premounting, postmounting });
6408
6850
  }
6409
- const el = React18.createRef();
6851
+ const el = React19.createRef();
6410
6852
  const mediaElementSourceNode = audioCtx?.audioContext ? makeSharedElementSourceNode({
6411
6853
  audioContext: audioCtx.audioContext,
6412
6854
  ref: el
@@ -6425,7 +6867,7 @@ var useSharedAudio = ({
6425
6867
  }
6426
6868
  };
6427
6869
  });
6428
- const effectToUse = React18.useInsertionEffect ?? React18.useLayoutEffect;
6870
+ const effectToUse = React19.useInsertionEffect ?? React19.useLayoutEffect;
6429
6871
  if (typeof document !== "undefined") {
6430
6872
  effectToUse(() => {
6431
6873
  if (tagsCtx && tagsCtx.numberOfAudioTags > 0) {
@@ -6857,7 +7299,8 @@ var useMediaInTimeline = ({
6857
7299
  postmountDisplay,
6858
7300
  controls: null,
6859
7301
  effects: [],
6860
- refForOutline
7302
+ refForOutline,
7303
+ isInsideSeries: false
6861
7304
  });
6862
7305
  return () => {
6863
7306
  unregisterSequence(id);
@@ -6970,11 +7413,11 @@ var useBufferManager = (logLevel, mountTime) => {
6970
7413
  return { addBlock, listenForBuffering, listenForResume, buffering };
6971
7414
  }, [addBlock, buffering, listenForBuffering, listenForResume]);
6972
7415
  };
6973
- var BufferingContextReact = React19.createContext(null);
7416
+ var BufferingContextReact = React20.createContext(null);
6974
7417
  var BufferingProvider = ({ children }) => {
6975
7418
  const { logLevel, mountTime } = useContext24(LogLevelContext);
6976
7419
  const bufferManager = useBufferManager(logLevel ?? "info", mountTime);
6977
- return /* @__PURE__ */ jsx19(BufferingContextReact.Provider, {
7420
+ return /* @__PURE__ */ jsx20(BufferingContextReact.Provider, {
6978
7421
  value: bufferManager,
6979
7422
  children
6980
7423
  });
@@ -7121,7 +7564,7 @@ var useBufferUntilFirstFrame = ({
7121
7564
  }, [bufferUntilFirstFrame]);
7122
7565
  };
7123
7566
  var useCurrentTimeOfMediaTagWithUpdateTimeStamp = (mediaRef) => {
7124
- const lastUpdate = React20.useRef({
7567
+ const lastUpdate = React21.useRef({
7125
7568
  time: mediaRef.current?.currentTime ?? 0,
7126
7569
  lastUpdate: performance.now()
7127
7570
  });
@@ -7699,11 +8142,11 @@ var useMediaTag = ({
7699
8142
  env.isPlayer
7700
8143
  ]);
7701
8144
  };
7702
- var MediaVolumeContext = createContext21({
8145
+ var MediaVolumeContext = createContext22({
7703
8146
  mediaMuted: false,
7704
8147
  mediaVolume: 1
7705
8148
  });
7706
- var SetMediaVolumeContext = createContext21({
8149
+ var SetMediaVolumeContext = createContext22({
7707
8150
  setMediaMuted: () => {
7708
8151
  throw new Error("default");
7709
8152
  },
@@ -7870,7 +8313,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7870
8313
  volume: userPreferredVolume,
7871
8314
  shouldUseWebAudioApi: useWebAudioApi ?? false
7872
8315
  });
7873
- const effectToUse = React21.useInsertionEffect ?? React21.useLayoutEffect;
8316
+ const effectToUse = React22.useInsertionEffect ?? React22.useLayoutEffect;
7874
8317
  effectToUse(() => {
7875
8318
  return () => {
7876
8319
  requestAnimationFrame(() => {
@@ -7903,7 +8346,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7903
8346
  if (initialShouldPreMountAudioElements) {
7904
8347
  return null;
7905
8348
  }
7906
- return /* @__PURE__ */ jsx20("audio", {
8349
+ return /* @__PURE__ */ jsx21("audio", {
7907
8350
  ref: audioRef,
7908
8351
  preload: "metadata",
7909
8352
  crossOrigin: crossOriginValue,
@@ -8037,7 +8480,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
8037
8480
  if (!needsToRenderAudioTag) {
8038
8481
  return null;
8039
8482
  }
8040
- return /* @__PURE__ */ jsx21("audio", {
8483
+ return /* @__PURE__ */ jsx222("audio", {
8041
8484
  ref: audioRef,
8042
8485
  ...nativeProps,
8043
8486
  onError: onNativeError
@@ -8096,14 +8539,14 @@ var AudioRefForwardingFunction = (props, ref) => {
8096
8539
  });
8097
8540
  if (loop && durationFetched !== undefined) {
8098
8541
  if (!Number.isFinite(durationFetched)) {
8099
- return /* @__PURE__ */ jsx222(Html5Audio, {
8542
+ return /* @__PURE__ */ jsx23(Html5Audio, {
8100
8543
  ...propsOtherThanLoop,
8101
8544
  ref,
8102
8545
  _remotionInternalNativeLoopPassed: true
8103
8546
  });
8104
8547
  }
8105
8548
  const duration = durationFetched * fps;
8106
- return /* @__PURE__ */ jsx222(Loop, {
8549
+ return /* @__PURE__ */ jsx23(Loop, {
8107
8550
  layout: "none",
8108
8551
  durationInFrames: calculateMediaDuration({
8109
8552
  trimAfter: trimAfterValue,
@@ -8111,7 +8554,7 @@ var AudioRefForwardingFunction = (props, ref) => {
8111
8554
  playbackRate: props.playbackRate ?? 1,
8112
8555
  trimBefore: trimBeforeValue
8113
8556
  }),
8114
- children: /* @__PURE__ */ jsx222(Html5Audio, {
8557
+ children: /* @__PURE__ */ jsx23(Html5Audio, {
8115
8558
  ...propsOtherThanLoop,
8116
8559
  ref,
8117
8560
  _remotionInternalNativeLoopPassed: true
@@ -8119,13 +8562,13 @@ var AudioRefForwardingFunction = (props, ref) => {
8119
8562
  });
8120
8563
  }
8121
8564
  if (typeof trimBeforeValue !== "undefined" || typeof trimAfterValue !== "undefined") {
8122
- return /* @__PURE__ */ jsx222(Sequence, {
8565
+ return /* @__PURE__ */ jsx23(Sequence, {
8123
8566
  layout: "none",
8124
8567
  from: 0 - (trimBeforeValue ?? 0),
8125
8568
  showInTimeline: false,
8126
8569
  durationInFrames: trimAfterValue,
8127
8570
  name,
8128
- children: /* @__PURE__ */ jsx222(Html5Audio, {
8571
+ children: /* @__PURE__ */ jsx23(Html5Audio, {
8129
8572
  _remotionInternalNeedsDurationCalculation: Boolean(loop),
8130
8573
  pauseWhenBuffering: pauseWhenBuffering ?? false,
8131
8574
  ...otherProps,
@@ -8139,7 +8582,7 @@ var AudioRefForwardingFunction = (props, ref) => {
8139
8582
  volume: props.volume
8140
8583
  }, "Html5Audio");
8141
8584
  if (environment.isRendering) {
8142
- return /* @__PURE__ */ jsx222(AudioForRendering, {
8585
+ return /* @__PURE__ */ jsx23(AudioForRendering, {
8143
8586
  onDuration,
8144
8587
  ...props,
8145
8588
  ref,
@@ -8147,7 +8590,7 @@ var AudioRefForwardingFunction = (props, ref) => {
8147
8590
  _remotionInternalNeedsDurationCalculation: Boolean(loop)
8148
8591
  });
8149
8592
  }
8150
- return /* @__PURE__ */ jsx222(AudioForPreview, {
8593
+ return /* @__PURE__ */ jsx23(AudioForPreview, {
8151
8594
  _remotionInternalNativeLoopPassed: props._remotionInternalNativeLoopPassed ?? false,
8152
8595
  _remotionInternalStack: stack ?? null,
8153
8596
  shouldPreMountAudioTags: audioTagsContext !== null && audioTagsContext.numberOfAudioTags > 0,
@@ -8163,7 +8606,18 @@ var AudioRefForwardingFunction = (props, ref) => {
8163
8606
  var Html5Audio = forwardRef7(AudioRefForwardingFunction);
8164
8607
  addSequenceStackTraces(Html5Audio);
8165
8608
  var Audio = Html5Audio;
8609
+ var resolveSolidPixelDensity = (pixelDensity) => {
8610
+ if (pixelDensity === undefined) {
8611
+ return 1;
8612
+ }
8613
+ if (typeof pixelDensity !== "number" || !Number.isFinite(pixelDensity) || pixelDensity <= 0) {
8614
+ throw new Error(`<Solid>: \`pixelDensity\` must be a positive finite number. Received: ${String(pixelDensity)}.`);
8615
+ }
8616
+ return pixelDensity;
8617
+ };
8166
8618
  var solidSchema = {
8619
+ durationInFrames: durationInFramesField,
8620
+ from: fromField,
8167
8621
  color: {
8168
8622
  type: "color",
8169
8623
  default: "transparent",
@@ -8174,14 +8628,16 @@ var solidSchema = {
8174
8628
  min: 1,
8175
8629
  step: 1,
8176
8630
  default: 1920,
8177
- description: "Width"
8631
+ description: "Width",
8632
+ hiddenFromList: false
8178
8633
  },
8179
8634
  height: {
8180
8635
  type: "number",
8181
8636
  min: 1,
8182
8637
  step: 1,
8183
8638
  default: 1080,
8184
- description: "Height"
8639
+ description: "Height",
8640
+ hiddenFromList: false
8185
8641
  },
8186
8642
  ...sequenceVisualStyleSchema,
8187
8643
  hidden: hiddenField
@@ -8193,10 +8649,14 @@ var SolidInner = ({
8193
8649
  effects = [],
8194
8650
  className,
8195
8651
  style,
8652
+ pixelDensity,
8196
8653
  overrideId,
8197
8654
  reference
8198
8655
  }) => {
8199
8656
  const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
8657
+ const resolvedPixelDensity = resolveSolidPixelDensity(pixelDensity);
8658
+ const canvasWidth = Math.ceil(width * resolvedPixelDensity);
8659
+ const canvasHeight = Math.ceil(height * resolvedPixelDensity);
8200
8660
  const [outputCanvas, setOutputCanvas] = useState15(null);
8201
8661
  const memoizedEffects = useMemoizedEffects({
8202
8662
  effects,
@@ -8242,12 +8702,12 @@ var SolidInner = ({
8242
8702
  ctx.fillRect(0, 0, 1, 1);
8243
8703
  }
8244
8704
  runEffectChain({
8245
- state: chainState.get(width, height),
8705
+ state: chainState.get(canvasWidth, canvasHeight),
8246
8706
  source: sourceCanvas,
8247
8707
  effects: memoizedEffects,
8248
8708
  output: outputCanvas,
8249
- width,
8250
- height
8709
+ width: canvasWidth,
8710
+ height: canvasHeight
8251
8711
  }).then((completed) => {
8252
8712
  if (completed) {
8253
8713
  continueRender2(handle);
@@ -8263,19 +8723,26 @@ var SolidInner = ({
8263
8723
  outputCanvas,
8264
8724
  sourceCanvas,
8265
8725
  chainState,
8266
- width,
8267
- height,
8726
+ canvasWidth,
8727
+ canvasHeight,
8268
8728
  delayRender2,
8269
8729
  continueRender2,
8270
8730
  cancelRender2,
8271
8731
  memoizedEffects
8272
8732
  ]);
8273
- return /* @__PURE__ */ jsx23("canvas", {
8733
+ const canvasStyle = useMemo29(() => {
8734
+ return {
8735
+ width,
8736
+ height,
8737
+ ...style ?? {}
8738
+ };
8739
+ }, [height, style, width]);
8740
+ return /* @__PURE__ */ jsx24("canvas", {
8274
8741
  ref: canvasRef,
8275
- width,
8276
- height,
8742
+ width: canvasWidth,
8743
+ height: canvasHeight,
8277
8744
  className,
8278
- style
8745
+ style: canvasStyle
8279
8746
  });
8280
8747
  };
8281
8748
  var SolidOuter = forwardRef8(({
@@ -8291,6 +8758,7 @@ var SolidOuter = forwardRef8(({
8291
8758
  from,
8292
8759
  hidden,
8293
8760
  showInTimeline,
8761
+ pixelDensity,
8294
8762
  ...props2
8295
8763
  }, ref) => {
8296
8764
  const memoizedEffectDefinitions = useMemoizedEffectDefinitions(effects);
@@ -8298,7 +8766,7 @@ var SolidOuter = forwardRef8(({
8298
8766
  useImperativeHandle6(ref, () => {
8299
8767
  return actualRef.current;
8300
8768
  }, []);
8301
- return /* @__PURE__ */ jsx23(Sequence, {
8769
+ return /* @__PURE__ */ jsx24(Sequence, {
8302
8770
  layout: "none",
8303
8771
  from,
8304
8772
  hidden,
@@ -8310,7 +8778,7 @@ var SolidOuter = forwardRef8(({
8310
8778
  _remotionInternalRefForOutline: actualRef,
8311
8779
  _remotionInternalDocumentationLink: name === undefined ? "https://www.remotion.dev/docs/solid" : undefined,
8312
8780
  ...props2,
8313
- children: /* @__PURE__ */ jsx23(SolidInner, {
8781
+ children: /* @__PURE__ */ jsx24(SolidInner, {
8314
8782
  reference: actualRef,
8315
8783
  overrideId: controls?.overrideId ?? null,
8316
8784
  color,
@@ -8318,11 +8786,16 @@ var SolidOuter = forwardRef8(({
8318
8786
  width,
8319
8787
  className,
8320
8788
  style,
8321
- effects
8789
+ effects,
8790
+ pixelDensity
8322
8791
  })
8323
8792
  });
8324
8793
  });
8325
- var Solid = wrapInSchema(SolidOuter, solidSchema);
8794
+ var Solid = wrapInSchema({
8795
+ Component: SolidOuter,
8796
+ schema: solidSchema,
8797
+ supportsEffects: true
8798
+ });
8326
8799
  Solid.displayName = "Solid";
8327
8800
  addSequenceStackTraces(Solid);
8328
8801
  var cachedSupport = null;
@@ -8350,6 +8823,27 @@ function assertHtmlInCanvasDimensions(width, height) {
8350
8823
  throw new Error(`HtmlInCanvas: \`height\` must be a positive integer. Received: ${String(height)}.`);
8351
8824
  }
8352
8825
  }
8826
+ function resolveHtmlInCanvasPixelDensity(pixelDensity) {
8827
+ if (pixelDensity === undefined) {
8828
+ return 1;
8829
+ }
8830
+ if (typeof pixelDensity !== "number" || !Number.isFinite(pixelDensity) || pixelDensity <= 0) {
8831
+ throw new Error(`HtmlInCanvas: \`pixelDensity\` must be a positive finite number. Received: ${String(pixelDensity)}.`);
8832
+ }
8833
+ return pixelDensity;
8834
+ }
8835
+ var resizeOffscreenCanvas = ({
8836
+ offscreen,
8837
+ width,
8838
+ height
8839
+ }) => {
8840
+ if (offscreen.width !== width) {
8841
+ offscreen.width = width;
8842
+ }
8843
+ if (offscreen.height !== height) {
8844
+ offscreen.height = height;
8845
+ }
8846
+ };
8353
8847
  var defaultOnPaint = ({
8354
8848
  canvas,
8355
8849
  element,
@@ -8363,10 +8857,23 @@ var defaultOnPaint = ({
8363
8857
  const transform = ctx.drawElementImage(elementImage, 0, 0);
8364
8858
  element.style.transform = transform.toString();
8365
8859
  };
8366
- var HtmlInCanvasAncestorContext = createContext22(false);
8367
- var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPaint, onInit, controls, style }, ref) => {
8860
+ var HtmlInCanvasAncestorContext = createContext23(false);
8861
+ var HtmlInCanvasContent = forwardRef9(({
8862
+ width,
8863
+ height,
8864
+ effects,
8865
+ children,
8866
+ onPaint,
8867
+ onInit,
8868
+ pixelDensity,
8869
+ controls,
8870
+ style
8871
+ }, ref) => {
8368
8872
  const isInsideAncestorHtmlInCanvas = useContext31(HtmlInCanvasAncestorContext);
8369
8873
  assertHtmlInCanvasDimensions(width, height);
8874
+ const resolvedPixelDensity = resolveHtmlInCanvasPixelDensity(pixelDensity);
8875
+ const canvasWidth = Math.ceil(width * resolvedPixelDensity);
8876
+ const canvasHeight = Math.ceil(height * resolvedPixelDensity);
8370
8877
  const { continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
8371
8878
  if (!isHtmlInCanvasSupported()) {
8372
8879
  cancelRender2(new Error(HTML_IN_CANVAS_UNSUPPORTED_MESSAGE));
@@ -8374,7 +8881,7 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8374
8881
  const canvas2dRef = useRef22(null);
8375
8882
  const offscreenRef = useRef22(null);
8376
8883
  const divRef = useRef22(null);
8377
- const canvasSizeKey = `${width}x${height}`;
8884
+ const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
8378
8885
  const setLayoutCanvasRef = useCallback15((node) => {
8379
8886
  canvas2dRef.current = node;
8380
8887
  if (typeof ref === "function") {
@@ -8406,8 +8913,11 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8406
8913
  if (!offscreen) {
8407
8914
  throw new Error("HtmlInCanvas: offscreen canvas not ready (transferControlToOffscreen failed or canvas is remounting)");
8408
8915
  }
8409
- offscreen.width = width;
8410
- offscreen.height = height;
8916
+ resizeOffscreenCanvas({
8917
+ offscreen,
8918
+ width: canvasWidth,
8919
+ height: canvasHeight
8920
+ });
8411
8921
  try {
8412
8922
  const placeholderCanvas = canvas2dRef.current;
8413
8923
  if (!placeholderCanvas) {
@@ -8426,7 +8936,8 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8426
8936
  const cleanup = await currentOnInit({
8427
8937
  canvas: offscreen,
8428
8938
  element,
8429
- elementImage: initImage
8939
+ elementImage: initImage,
8940
+ pixelDensity: resolvedPixelDensity
8430
8941
  });
8431
8942
  if (typeof cleanup !== "function") {
8432
8943
  throw new Error("HtmlInCanvas: when `onInit` is provided, it must return a cleanup function, or a Promise that resolves to one.");
@@ -8443,21 +8954,29 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8443
8954
  await handler({
8444
8955
  canvas: offscreen,
8445
8956
  element,
8446
- elementImage: elImage
8957
+ elementImage: elImage,
8958
+ pixelDensity: resolvedPixelDensity
8447
8959
  });
8448
8960
  await runEffectChain({
8449
- state: chainState.get(width, height),
8961
+ state: chainState.get(canvasWidth, canvasHeight),
8450
8962
  source: offscreen,
8451
8963
  effects: effectsRef.current,
8452
8964
  output: offscreen,
8453
- width,
8454
- height
8965
+ width: canvasWidth,
8966
+ height: canvasHeight
8455
8967
  });
8456
8968
  continueRender2(handle);
8457
8969
  } catch (error2) {
8458
8970
  cancelRender2(error2);
8459
8971
  }
8460
- }, [chainState, continueRender2, cancelRender2, width, height]);
8972
+ }, [
8973
+ canvasHeight,
8974
+ canvasWidth,
8975
+ chainState,
8976
+ continueRender2,
8977
+ cancelRender2,
8978
+ resolvedPixelDensity
8979
+ ]);
8461
8980
  useLayoutEffect9(() => {
8462
8981
  const placeholder = canvas2dRef.current;
8463
8982
  if (!placeholder) {
@@ -8466,8 +8985,11 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8466
8985
  placeholder.layoutSubtree = true;
8467
8986
  const offscreen = placeholder.transferControlToOffscreen();
8468
8987
  offscreenRef.current = offscreen;
8469
- offscreen.width = width;
8470
- offscreen.height = height;
8988
+ resizeOffscreenCanvas({
8989
+ offscreen,
8990
+ width: canvasWidth,
8991
+ height: canvasHeight
8992
+ });
8471
8993
  initializedRef.current = false;
8472
8994
  unmountedRef.current = false;
8473
8995
  placeholder.addEventListener("paint", onPaintCb);
@@ -8479,7 +9001,7 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8479
9001
  onInitCleanupRef.current?.();
8480
9002
  onInitCleanupRef.current = null;
8481
9003
  };
8482
- }, [onPaintCb, cancelRender2, width, height]);
9004
+ }, [onPaintCb, cancelRender2, canvasWidth, canvasHeight]);
8483
9005
  const onPaintChangedRef = useRef22(false);
8484
9006
  useLayoutEffect9(() => {
8485
9007
  if (!onPaintChangedRef.current) {
@@ -8511,17 +9033,24 @@ var HtmlInCanvasContent = forwardRef9(({ width, height, effects, children, onPai
8511
9033
  height
8512
9034
  };
8513
9035
  }, [width, height]);
9036
+ const canvasStyle = useMemo30(() => {
9037
+ return {
9038
+ width,
9039
+ height,
9040
+ ...style ?? {}
9041
+ };
9042
+ }, [height, style, width]);
8514
9043
  if (isInsideAncestorHtmlInCanvas) {
8515
9044
  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
9045
  }
8517
- return /* @__PURE__ */ jsx24(HtmlInCanvasAncestorContext.Provider, {
9046
+ return /* @__PURE__ */ jsx25(HtmlInCanvasAncestorContext.Provider, {
8518
9047
  value: true,
8519
- children: /* @__PURE__ */ jsx24("canvas", {
9048
+ children: /* @__PURE__ */ jsx25("canvas", {
8520
9049
  ref: setLayoutCanvasRef,
8521
- width,
8522
- height,
8523
- style,
8524
- children: /* @__PURE__ */ jsx24("div", {
9050
+ width: canvasWidth,
9051
+ height: canvasHeight,
9052
+ style: canvasStyle,
9053
+ children: /* @__PURE__ */ jsx25("div", {
8525
9054
  ref: divRef,
8526
9055
  style: innerStyle,
8527
9056
  children
@@ -8537,6 +9066,7 @@ var HtmlInCanvasInner = forwardRef9(({
8537
9066
  children,
8538
9067
  onPaint,
8539
9068
  onInit,
9069
+ pixelDensity,
8540
9070
  _experimentalControls: controls,
8541
9071
  style,
8542
9072
  durationInFrames,
@@ -8555,7 +9085,7 @@ var HtmlInCanvasInner = forwardRef9(({
8555
9085
  ref.current = node;
8556
9086
  }
8557
9087
  }, [ref]);
8558
- return /* @__PURE__ */ jsx24(Sequence, {
9088
+ return /* @__PURE__ */ jsx25(Sequence, {
8559
9089
  durationInFrames: resolvedDuration,
8560
9090
  name: name ?? "<HtmlInCanvas>",
8561
9091
  _remotionInternalDocumentationLink: name === undefined ? "https://www.remotion.dev/docs/remotion/html-in-canvas" : undefined,
@@ -8564,13 +9094,14 @@ var HtmlInCanvasInner = forwardRef9(({
8564
9094
  _remotionInternalRefForOutline: actualRef,
8565
9095
  layout: "none",
8566
9096
  ...sequenceProps,
8567
- children: /* @__PURE__ */ jsx24(HtmlInCanvasContent, {
9097
+ children: /* @__PURE__ */ jsx25(HtmlInCanvasContent, {
8568
9098
  ref: setCanvasRef,
8569
9099
  width,
8570
9100
  height,
8571
9101
  effects,
8572
9102
  onPaint,
8573
9103
  onInit,
9104
+ pixelDensity,
8574
9105
  controls,
8575
9106
  style,
8576
9107
  children
@@ -8579,10 +9110,16 @@ var HtmlInCanvasInner = forwardRef9(({
8579
9110
  });
8580
9111
  HtmlInCanvasInner.displayName = "HtmlInCanvas";
8581
9112
  var htmlInCanvasSchema = {
9113
+ durationInFrames: durationInFramesField,
9114
+ from: fromField,
8582
9115
  ...sequenceVisualStyleSchema,
8583
9116
  hidden: hiddenField
8584
9117
  };
8585
- var HtmlInCanvasWrapped = wrapInSchema(HtmlInCanvasInner, htmlInCanvasSchema);
9118
+ var HtmlInCanvasWrapped = wrapInSchema({
9119
+ Component: HtmlInCanvasInner,
9120
+ schema: htmlInCanvasSchema,
9121
+ supportsEffects: true
9122
+ });
8586
9123
  var HtmlInCanvas = Object.assign(HtmlInCanvasWrapped, {
8587
9124
  isSupported: isHtmlInCanvasSupported
8588
9125
  });
@@ -8595,6 +9132,8 @@ function truncateSrcForLabel(src) {
8595
9132
  return src;
8596
9133
  }
8597
9134
  var canvasImageSchema = {
9135
+ durationInFrames: durationInFramesField,
9136
+ from: fromField,
8598
9137
  fit: {
8599
9138
  type: "enum",
8600
9139
  default: "fill",
@@ -8820,7 +9359,7 @@ var CanvasImageContent = forwardRef10(({
8820
9359
  sourceCanvas,
8821
9360
  width
8822
9361
  ]);
8823
- return /* @__PURE__ */ jsx25("canvas", {
9362
+ return /* @__PURE__ */ jsx26("canvas", {
8824
9363
  ...canvasProps,
8825
9364
  ref: canvasRef,
8826
9365
  width,
@@ -8864,7 +9403,7 @@ var CanvasImageInner = forwardRef10(({
8864
9403
  useImperativeHandle7(ref, () => {
8865
9404
  return actualRef.current;
8866
9405
  }, []);
8867
- return /* @__PURE__ */ jsx25(Sequence, {
9406
+ return /* @__PURE__ */ jsx26(Sequence, {
8868
9407
  layout: "none",
8869
9408
  from: from ?? 0,
8870
9409
  durationInFrames: durationInFrames ?? Infinity,
@@ -8877,7 +9416,7 @@ var CanvasImageInner = forwardRef10(({
8877
9416
  _remotionInternalIsMedia: { type: "image", src },
8878
9417
  _remotionInternalStack: stack,
8879
9418
  _remotionInternalRefForOutline: _remotionInternalRefForOutline ?? actualRef,
8880
- children: /* @__PURE__ */ jsx25(CanvasImageContent, {
9419
+ children: /* @__PURE__ */ jsx26(CanvasImageContent, {
8881
9420
  ref: actualRef,
8882
9421
  src,
8883
9422
  width,
@@ -8898,7 +9437,11 @@ var CanvasImageInner = forwardRef10(({
8898
9437
  })
8899
9438
  });
8900
9439
  });
8901
- var CanvasImage = wrapInSchema(CanvasImageInner, canvasImageSchema);
9440
+ var CanvasImage = wrapInSchema({
9441
+ Component: CanvasImageInner,
9442
+ schema: canvasImageSchema,
9443
+ supportsEffects: true
9444
+ });
8902
9445
  CanvasImage.displayName = "CanvasImage";
8903
9446
  addSequenceStackTraces(CanvasImage);
8904
9447
  var IFrameRefForwarding = ({
@@ -8925,7 +9468,7 @@ var IFrameRefForwarding = ({
8925
9468
  console.error("Error loading iframe:", e, "Handle the event using the onError() prop to make this message disappear.");
8926
9469
  }
8927
9470
  }, [handle, onError, continueRender2]);
8928
- return /* @__PURE__ */ jsx26("iframe", {
9471
+ return /* @__PURE__ */ jsx27("iframe", {
8929
9472
  referrerPolicy: "strict-origin-when-cross-origin",
8930
9473
  ...props2,
8931
9474
  ref,
@@ -9081,7 +9624,7 @@ var ImgContent = ({
9081
9624
  requestsVideoFrame: false,
9082
9625
  isClientSideRendering
9083
9626
  });
9084
- return /* @__PURE__ */ jsx27("img", {
9627
+ return /* @__PURE__ */ jsx28("img", {
9085
9628
  ...props2,
9086
9629
  ref: imageCallbackRef,
9087
9630
  crossOrigin: crossOriginValue,
@@ -9104,7 +9647,7 @@ var NativeImgInner = ({
9104
9647
  if (!src) {
9105
9648
  throw new Error('No "src" prop was passed to <Img>.');
9106
9649
  }
9107
- return /* @__PURE__ */ jsx27(Sequence, {
9650
+ return /* @__PURE__ */ jsx28(Sequence, {
9108
9651
  layout: "none",
9109
9652
  from: from ?? 0,
9110
9653
  durationInFrames: durationInFrames ?? Infinity,
@@ -9116,7 +9659,7 @@ var NativeImgInner = ({
9116
9659
  showInTimeline: showInTimeline ?? true,
9117
9660
  hidden,
9118
9661
  _remotionInternalRefForOutline: refForOutline,
9119
- children: /* @__PURE__ */ jsx27(ImgContent, {
9662
+ children: /* @__PURE__ */ jsx28(ImgContent, {
9120
9663
  src,
9121
9664
  refForOutline,
9122
9665
  ...props2
@@ -9125,6 +9668,8 @@ var NativeImgInner = ({
9125
9668
  };
9126
9669
  var CanvasImageWithPrivateProps = CanvasImage;
9127
9670
  var imgSchema = {
9671
+ durationInFrames: durationInFramesField,
9672
+ from: fromField,
9128
9673
  ...sequenceVisualStyleSchema,
9129
9674
  hidden: hiddenField
9130
9675
  };
@@ -9194,7 +9739,7 @@ var ImgInner = ({
9194
9739
  }) => {
9195
9740
  const refForOutline = useRef24(null);
9196
9741
  if (effects.length === 0) {
9197
- return /* @__PURE__ */ jsx27(NativeImgInner, {
9742
+ return /* @__PURE__ */ jsx28(NativeImgInner, {
9198
9743
  ...props2,
9199
9744
  ref,
9200
9745
  hidden,
@@ -9230,7 +9775,7 @@ var ImgInner = ({
9230
9775
  const canvasHeight = typeof height === "number" ? height : undefined;
9231
9776
  const canvasProps = props2;
9232
9777
  const canvasFit = getFitFromObjectFit(style) ?? "fill";
9233
- return /* @__PURE__ */ jsx27(CanvasImageWithPrivateProps, {
9778
+ return /* @__PURE__ */ jsx28(CanvasImageWithPrivateProps, {
9234
9779
  src,
9235
9780
  width: canvasWidth,
9236
9781
  height: canvasHeight,
@@ -9255,9 +9800,13 @@ var ImgInner = ({
9255
9800
  ...canvasProps
9256
9801
  });
9257
9802
  };
9258
- var Img = wrapInSchema(ImgInner, imgSchema);
9803
+ var Img = wrapInSchema({
9804
+ Component: ImgInner,
9805
+ schema: imgSchema,
9806
+ supportsEffects: true
9807
+ });
9259
9808
  addSequenceStackTraces(Img);
9260
- var compositionsRef = React28.createRef();
9809
+ var compositionsRef = React29.createRef();
9261
9810
  var CompositionManagerProvider = ({
9262
9811
  children,
9263
9812
  onlyRenderComposition,
@@ -9289,14 +9838,15 @@ var CompositionManagerProvider = ({
9289
9838
  return comps.filter((c2) => c2.id !== id);
9290
9839
  });
9291
9840
  }, []);
9292
- const registerFolder = useCallback19((name, parent, nonce) => {
9841
+ const registerFolder = useCallback19((name, parent, nonce, stack) => {
9293
9842
  setFolders((prevFolders) => {
9294
9843
  return [
9295
9844
  ...prevFolders,
9296
9845
  {
9297
9846
  name,
9298
9847
  parent,
9299
- nonce
9848
+ nonce,
9849
+ stack
9300
9850
  }
9301
9851
  ];
9302
9852
  });
@@ -9335,9 +9885,9 @@ var CompositionManagerProvider = ({
9335
9885
  canvasContent
9336
9886
  };
9337
9887
  }, [compositions, folders, currentCompositionMetadata, canvasContent]);
9338
- return /* @__PURE__ */ jsx28(CompositionManager.Provider, {
9888
+ return /* @__PURE__ */ jsx29(CompositionManager.Provider, {
9339
9889
  value: compositionManagerContextValue,
9340
- children: /* @__PURE__ */ jsx28(CompositionSetters.Provider, {
9890
+ children: /* @__PURE__ */ jsx29(CompositionSetters.Provider, {
9341
9891
  value: compositionManagerSetters,
9342
9892
  children
9343
9893
  })
@@ -9435,7 +9985,7 @@ var REMOTION_STUDIO_CONTAINER_ELEMENT = "__remotion-studio-container";
9435
9985
  var getPreviewDomElement = () => {
9436
9986
  return document.getElementById(REMOTION_STUDIO_CONTAINER_ELEMENT);
9437
9987
  };
9438
- var MaxMediaCacheSizeContext = React29.createContext(null);
9988
+ var MaxMediaCacheSizeContext = React30.createContext(null);
9439
9989
  var Root = null;
9440
9990
  var listeners = [];
9441
9991
  var getRoot = () => {
@@ -9453,7 +10003,7 @@ var waitForRoot = (fn) => {
9453
10003
  listeners = listeners.filter((l) => l !== fn);
9454
10004
  };
9455
10005
  };
9456
- var MediaEnabledContext = createContext23(null);
10006
+ var MediaEnabledContext = createContext24(null);
9457
10007
  var useVideoEnabled = () => {
9458
10008
  const context = useContext34(MediaEnabledContext);
9459
10009
  if (!context) {
@@ -9480,7 +10030,7 @@ var MediaEnabledProvider = ({
9480
10030
  audioEnabled
9481
10031
  }) => {
9482
10032
  const value = useMemo33(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
9483
- return /* @__PURE__ */ jsx29(MediaEnabledContext.Provider, {
10033
+ return /* @__PURE__ */ jsx30(MediaEnabledContext.Provider, {
9484
10034
  value,
9485
10035
  children
9486
10036
  });
@@ -9504,25 +10054,25 @@ var RemotionRootContexts = ({
9504
10054
  const logging = useMemo34(() => {
9505
10055
  return { logLevel, mountTime: Date.now() };
9506
10056
  }, [logLevel]);
9507
- return /* @__PURE__ */ jsx30(LogLevelContext.Provider, {
10057
+ return /* @__PURE__ */ jsx31(LogLevelContext.Provider, {
9508
10058
  value: logging,
9509
- children: /* @__PURE__ */ jsx30(NonceContext.Provider, {
10059
+ children: /* @__PURE__ */ jsx31(NonceContext.Provider, {
9510
10060
  value: nonceContext,
9511
- children: /* @__PURE__ */ jsx30(TimelineContextProvider, {
10061
+ children: /* @__PURE__ */ jsx31(TimelineContextProvider, {
9512
10062
  frameState,
9513
- children: /* @__PURE__ */ jsx30(MediaEnabledProvider, {
10063
+ children: /* @__PURE__ */ jsx31(MediaEnabledProvider, {
9514
10064
  videoEnabled,
9515
10065
  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, {
10066
+ children: /* @__PURE__ */ jsx31(EditorPropsProvider, {
10067
+ children: /* @__PURE__ */ jsx31(PrefetchProvider, {
10068
+ children: /* @__PURE__ */ jsx31(SequenceManagerProvider, {
10069
+ children: /* @__PURE__ */ jsx31(DurationsContextProvider, {
10070
+ children: /* @__PURE__ */ jsx31(BufferingProvider, {
10071
+ children: /* @__PURE__ */ jsx31(SharedAudioContextProvider, {
9522
10072
  audioLatencyHint,
9523
10073
  audioEnabled,
9524
10074
  previewSampleRate,
9525
- children: /* @__PURE__ */ jsx30(SharedAudioTagsContextProvider, {
10075
+ children: /* @__PURE__ */ jsx31(SharedAudioTagsContextProvider, {
9526
10076
  numberOfAudioTags,
9527
10077
  children
9528
10078
  })
@@ -9708,7 +10258,7 @@ var resolveVideoConfigOrCatch = (params) => {
9708
10258
  };
9709
10259
  }
9710
10260
  };
9711
- var SequenceStackTracesUpdateContext = React31.createContext(() => {});
10261
+ var SequenceStackTracesUpdateContext = React32.createContext(() => {});
9712
10262
  var getEnvVariables = () => {
9713
10263
  if (getRemotionEnvironment().isRendering) {
9714
10264
  const param = window.remotion_envVariables;
@@ -9734,8 +10284,8 @@ var setupEnvVariables = () => {
9734
10284
  window.process.env[key] = env[key];
9735
10285
  });
9736
10286
  };
9737
- var CurrentScaleContext = React32.createContext(null);
9738
- var PreviewSizeContext = createContext24({
10287
+ var CurrentScaleContext = React33.createContext(null);
10288
+ var PreviewSizeContext = createContext25({
9739
10289
  setSize: () => {
9740
10290
  return;
9741
10291
  },
@@ -9758,6 +10308,7 @@ var calculateScale = ({
9758
10308
  }
9759
10309
  return Number(previewSize);
9760
10310
  };
10311
+ var PixelDensityContext = React34.createContext(null);
9761
10312
  var getOffthreadVideoSource = ({
9762
10313
  src,
9763
10314
  transparent,
@@ -9790,9 +10341,9 @@ var OffthreadVideoForRendering = ({
9790
10341
  const frame = useCurrentFrame();
9791
10342
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior);
9792
10343
  const videoConfig = useUnsafeVideoConfig();
9793
- const sequenceContext = useContext35(SequenceContext);
10344
+ const sequenceContext = useContext36(SequenceContext);
9794
10345
  const mediaStartsAt = useMediaStartsAt();
9795
- const { registerRenderAsset, unregisterRenderAsset } = useContext35(RenderAssetManager);
10346
+ const { registerRenderAsset, unregisterRenderAsset } = useContext36(RenderAssetManager);
9796
10347
  if (!src) {
9797
10348
  throw new TypeError("No `src` was passed to <OffthreadVideo>.");
9798
10349
  }
@@ -9958,7 +10509,7 @@ var OffthreadVideoForRendering = ({
9958
10509
  return null;
9959
10510
  }
9960
10511
  continueRender2(imageSrc.handle);
9961
- return /* @__PURE__ */ jsx31(Img, {
10512
+ return /* @__PURE__ */ jsx32(Img, {
9962
10513
  src: imageSrc.src,
9963
10514
  delayRenderRetries,
9964
10515
  delayRenderTimeoutInMilliseconds,
@@ -9981,16 +10532,22 @@ var useEmitVideoFrame = ({
9981
10532
  return;
9982
10533
  }
9983
10534
  let handle = 0;
9984
- const callback = () => {
10535
+ const callback = (_now, metadata) => {
9985
10536
  if (!ref.current) {
9986
10537
  return;
9987
10538
  }
9988
- onVideoFrame(ref.current);
10539
+ onVideoFrame(ref.current, _now, metadata);
9989
10540
  handle = ref.current.requestVideoFrameCallback(callback);
9990
10541
  };
9991
- callback();
10542
+ onVideoFrame(current);
10543
+ if (!current.requestVideoFrameCallback) {
10544
+ return;
10545
+ }
10546
+ handle = current.requestVideoFrameCallback(callback);
9992
10547
  return () => {
9993
- current.cancelVideoFrameCallback(handle);
10548
+ if (handle) {
10549
+ current.cancelVideoFrameCallback(handle);
10550
+ }
9994
10551
  };
9995
10552
  }, [onVideoFrame, ref]);
9996
10553
  };
@@ -10004,7 +10561,7 @@ class MediaPlaybackError extends Error {
10004
10561
  }
10005
10562
  }
10006
10563
  var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
10007
- const context = useContext36(SharedAudioContext);
10564
+ const context = useContext37(SharedAudioContext);
10008
10565
  if (!context) {
10009
10566
  throw new Error("SharedAudioContext not found");
10010
10567
  }
@@ -10018,7 +10575,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
10018
10575
  ref: videoRef
10019
10576
  });
10020
10577
  }, [context.audioContext]);
10021
- const effectToUse = React34.useInsertionEffect ?? React34.useLayoutEffect;
10578
+ const effectToUse = React36.useInsertionEffect ?? React36.useLayoutEffect;
10022
10579
  effectToUse(() => {
10023
10580
  return () => {
10024
10581
  requestAnimationFrame(() => {
@@ -10061,7 +10618,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
10061
10618
  }
10062
10619
  const volumePropFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
10063
10620
  const { fps, durationInFrames } = useVideoConfig();
10064
- const parentSequence = useContext36(SequenceContext);
10621
+ const parentSequence = useContext37(SequenceContext);
10065
10622
  const logLevel = useLogLevel();
10066
10623
  const mountTime = useMountTime();
10067
10624
  const [timelineId] = useState20(() => String(Math.random()));
@@ -10222,7 +10779,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
10222
10779
  requestsVideoFrame: Boolean(onVideoFrame),
10223
10780
  isClientSideRendering: false
10224
10781
  });
10225
- return /* @__PURE__ */ jsx32("video", {
10782
+ return /* @__PURE__ */ jsx33("video", {
10226
10783
  ref: videoRef,
10227
10784
  muted: muted || mediaMuted || userPreferredVolume <= 0,
10228
10785
  playsInline: true,
@@ -10265,13 +10822,13 @@ var InnerOffthreadVideo = (props2) => {
10265
10822
  trimAfter
10266
10823
  });
10267
10824
  if (typeof trimBeforeValue !== "undefined" || typeof trimAfterValue !== "undefined") {
10268
- return /* @__PURE__ */ jsx33(Sequence, {
10825
+ return /* @__PURE__ */ jsx34(Sequence, {
10269
10826
  layout: "none",
10270
10827
  from: 0 - (trimBeforeValue ?? 0),
10271
10828
  showInTimeline: false,
10272
10829
  durationInFrames: trimAfterValue,
10273
10830
  name,
10274
- children: /* @__PURE__ */ jsx33(InnerOffthreadVideo, {
10831
+ children: /* @__PURE__ */ jsx34(InnerOffthreadVideo, {
10275
10832
  pauseWhenBuffering: pauseWhenBuffering ?? false,
10276
10833
  ...otherProps,
10277
10834
  trimAfter: undefined,
@@ -10286,7 +10843,7 @@ var InnerOffthreadVideo = (props2) => {
10286
10843
  }
10287
10844
  validateMediaProps(props2, "Video");
10288
10845
  if (environment.isRendering) {
10289
- return /* @__PURE__ */ jsx33(OffthreadVideoForRendering, {
10846
+ return /* @__PURE__ */ jsx34(OffthreadVideoForRendering, {
10290
10847
  pauseWhenBuffering: pauseWhenBuffering ?? false,
10291
10848
  ...otherProps,
10292
10849
  trimAfter: undefined,
@@ -10308,7 +10865,7 @@ var InnerOffthreadVideo = (props2) => {
10308
10865
  delayRenderTimeoutInMilliseconds,
10309
10866
  ...propsForPreview
10310
10867
  } = otherProps;
10311
- return /* @__PURE__ */ jsx33(VideoForPreview, {
10868
+ return /* @__PURE__ */ jsx34(VideoForPreview, {
10312
10869
  _remotionInternalStack: stack ?? null,
10313
10870
  onDuration,
10314
10871
  onlyWarnForMediaSeekingError: true,
@@ -10326,11 +10883,9 @@ var OffthreadVideo = ({
10326
10883
  acceptableTimeShiftInSeconds,
10327
10884
  allowAmplificationDuringRender,
10328
10885
  audioStreamIndex,
10329
- className,
10330
10886
  crossOrigin,
10331
10887
  delayRenderRetries,
10332
10888
  delayRenderTimeoutInMilliseconds,
10333
- id,
10334
10889
  loopVolumeCurveBehavior,
10335
10890
  muted,
10336
10891
  name,
@@ -10353,20 +10908,19 @@ var OffthreadVideo = ({
10353
10908
  endAt,
10354
10909
  stack,
10355
10910
  startFrom,
10356
- imageFormat
10911
+ imageFormat,
10912
+ ...props2
10357
10913
  }) => {
10358
10914
  if (imageFormat) {
10359
10915
  throw new TypeError(`The \`<OffthreadVideo>\` tag does no longer accept \`imageFormat\`. Use the \`transparent\` prop if you want to render a transparent video.`);
10360
10916
  }
10361
- return /* @__PURE__ */ jsx33(InnerOffthreadVideo, {
10917
+ return /* @__PURE__ */ jsx34(InnerOffthreadVideo, {
10362
10918
  acceptableTimeShiftInSeconds,
10363
10919
  allowAmplificationDuringRender: allowAmplificationDuringRender ?? true,
10364
10920
  audioStreamIndex: audioStreamIndex ?? 0,
10365
- className,
10366
10921
  crossOrigin,
10367
10922
  delayRenderRetries,
10368
10923
  delayRenderTimeoutInMilliseconds,
10369
- id,
10370
10924
  loopVolumeCurveBehavior: loopVolumeCurveBehavior ?? "repeat",
10371
10925
  muted: muted ?? false,
10372
10926
  name,
@@ -10389,24 +10943,25 @@ var OffthreadVideo = ({
10389
10943
  trimAfter,
10390
10944
  trimBefore,
10391
10945
  useWebAudioApi: useWebAudioApi ?? false,
10392
- volume
10946
+ volume,
10947
+ ...props2
10393
10948
  });
10394
10949
  };
10395
10950
  addSequenceStackTraces(OffthreadVideo);
10396
10951
  var WATCH_REMOTION_STATIC_FILES = "remotion_staticFilesChanged";
10397
10952
  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);
10953
+ const compositionManagerCtx = React38.useContext(CompositionManager);
10954
+ const timelineContext = React38.useContext(TimelineContext);
10955
+ const setTimelineContext = React38.useContext(SetTimelineContext);
10956
+ const sequenceContext = React38.useContext(SequenceContext);
10957
+ const nonceContext = React38.useContext(NonceContext);
10958
+ const canUseRemotionHooksContext = React38.useContext(CanUseRemotionHooks);
10959
+ const preloadContext = React38.useContext(PreloadContext);
10960
+ const resolveCompositionContext = React38.useContext(ResolveCompositionContext);
10961
+ const renderAssetManagerContext = React38.useContext(RenderAssetManager);
10962
+ const sequenceManagerContext = React38.useContext(SequenceManager);
10963
+ const bufferManagerContext = React38.useContext(BufferingContextReact);
10964
+ const logLevelContext = React38.useContext(LogLevelContext);
10410
10965
  return useMemo37(() => ({
10411
10966
  compositionManagerCtx,
10412
10967
  timelineContext,
@@ -10437,29 +10992,29 @@ function useRemotionContexts() {
10437
10992
  }
10438
10993
  var RemotionContextProvider = (props2) => {
10439
10994
  const { children, contexts } = props2;
10440
- return /* @__PURE__ */ jsx34(LogLevelContext.Provider, {
10995
+ return /* @__PURE__ */ jsx35(LogLevelContext.Provider, {
10441
10996
  value: contexts.logLevelContext,
10442
- children: /* @__PURE__ */ jsx34(CanUseRemotionHooks.Provider, {
10997
+ children: /* @__PURE__ */ jsx35(CanUseRemotionHooks.Provider, {
10443
10998
  value: contexts.canUseRemotionHooksContext,
10444
- children: /* @__PURE__ */ jsx34(NonceContext.Provider, {
10999
+ children: /* @__PURE__ */ jsx35(NonceContext.Provider, {
10445
11000
  value: contexts.nonceContext,
10446
- children: /* @__PURE__ */ jsx34(PreloadContext.Provider, {
11001
+ children: /* @__PURE__ */ jsx35(PreloadContext.Provider, {
10447
11002
  value: contexts.preloadContext,
10448
- children: /* @__PURE__ */ jsx34(CompositionManager.Provider, {
11003
+ children: /* @__PURE__ */ jsx35(CompositionManager.Provider, {
10449
11004
  value: contexts.compositionManagerCtx,
10450
- children: /* @__PURE__ */ jsx34(SequenceManager.Provider, {
11005
+ children: /* @__PURE__ */ jsx35(SequenceManager.Provider, {
10451
11006
  value: contexts.sequenceManagerContext,
10452
- children: /* @__PURE__ */ jsx34(RenderAssetManager.Provider, {
11007
+ children: /* @__PURE__ */ jsx35(RenderAssetManager.Provider, {
10453
11008
  value: contexts.renderAssetManagerContext,
10454
- children: /* @__PURE__ */ jsx34(ResolveCompositionContext.Provider, {
11009
+ children: /* @__PURE__ */ jsx35(ResolveCompositionContext.Provider, {
10455
11010
  value: contexts.resolveCompositionContext,
10456
- children: /* @__PURE__ */ jsx34(TimelineContext.Provider, {
11011
+ children: /* @__PURE__ */ jsx35(TimelineContext.Provider, {
10457
11012
  value: contexts.timelineContext,
10458
- children: /* @__PURE__ */ jsx34(SetTimelineContext.Provider, {
11013
+ children: /* @__PURE__ */ jsx35(SetTimelineContext.Provider, {
10459
11014
  value: contexts.setTimelineContext,
10460
- children: /* @__PURE__ */ jsx34(SequenceContext.Provider, {
11015
+ children: /* @__PURE__ */ jsx35(SequenceContext.Provider, {
10461
11016
  value: contexts.sequenceContext,
10462
- children: /* @__PURE__ */ jsx34(BufferingContextReact.Provider, {
11017
+ children: /* @__PURE__ */ jsx35(BufferingContextReact.Provider, {
10463
11018
  value: contexts.bufferManagerContext,
10464
11019
  children
10465
11020
  })
@@ -10499,6 +11054,7 @@ var Internals = {
10499
11054
  SequenceStackTracesUpdateContext,
10500
11055
  wrapInSchema,
10501
11056
  sequenceSchema,
11057
+ SequenceWithoutSchema,
10502
11058
  sequenceStyleSchema,
10503
11059
  sequenceVisualStyleSchema,
10504
11060
  sequencePremountSchema,
@@ -10527,8 +11083,10 @@ var Internals = {
10527
11083
  SharedAudioTagsContext,
10528
11084
  SharedAudioTagsContextProvider,
10529
11085
  invalidCompositionErrorMessage,
11086
+ invalidFolderNameErrorMessage,
10530
11087
  calculateMediaDuration,
10531
11088
  isCompositionIdValid,
11089
+ isFolderNameValid,
10532
11090
  getPreviewDomElement,
10533
11091
  compositionsRef,
10534
11092
  portalNode,
@@ -10563,6 +11121,7 @@ var Internals = {
10563
11121
  BufferingContextReact,
10564
11122
  getComponentsToAddStacksTo,
10565
11123
  CurrentScaleContext,
11124
+ PixelDensityContext,
10566
11125
  PreviewSizeContext,
10567
11126
  calculateScale,
10568
11127
  validateRenderAsset,
@@ -10602,13 +11161,19 @@ var Internals = {
10602
11161
  createWebGL2ContextError,
10603
11162
  computeEffectiveSchemaValuesDotNotation,
10604
11163
  interpolateKeyframedStatus,
11164
+ makeStaticDragOverride,
11165
+ makeKeyframedDragOverride,
11166
+ resolveDragOverrideValue,
11167
+ getStaticDragOverrideValue,
10605
11168
  OverrideIdsToNodePathsGettersContext,
10606
11169
  OverrideIdsToNodePathsSettersContext,
10607
11170
  findPropsToDelete,
10608
11171
  makeSequencePropsSubscriptionKey,
10609
11172
  getCodeValuesCtx,
10610
11173
  getEffectCodeValuesCtx,
10611
- hiddenField
11174
+ hiddenField,
11175
+ durationInFramesField,
11176
+ fromField
10612
11177
  };
10613
11178
  var validateFrame = ({
10614
11179
  allowFloats,
@@ -10635,34 +11200,15 @@ var validateFrame = ({
10635
11200
  }
10636
11201
  };
10637
11202
  var flattenChildren = (children) => {
10638
- const childrenArray = React37.Children.toArray(children);
11203
+ const childrenArray = React39.Children.toArray(children);
10639
11204
  return childrenArray.reduce((flatChildren, child) => {
10640
- if (child.type === React37.Fragment) {
11205
+ if (child.type === React39.Fragment) {
10641
11206
  return flatChildren.concat(flattenChildren(child.props.children));
10642
11207
  }
10643
11208
  flatChildren.push(child);
10644
11209
  return flatChildren;
10645
11210
  }, []);
10646
11211
  };
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
11212
  var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
10667
11213
  useRequireToBeInsideSeries();
10668
11214
  return /* @__PURE__ */ jsx36(IsNotInsideSeriesProvider, {
@@ -10670,6 +11216,7 @@ var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
10670
11216
  });
10671
11217
  };
10672
11218
  var SeriesSequence = forwardRef13(SeriesSequenceRefForwardingFunction);
11219
+ var SequenceWithoutSchemaWithRef = SequenceWithoutSchema;
10673
11220
  var SeriesInner = (props2) => {
10674
11221
  const childrenValue = useMemo38(() => {
10675
11222
  let startFrame = 0;
@@ -10712,13 +11259,13 @@ var SeriesInner = (props2) => {
10712
11259
  }
10713
11260
  const currentStartFrame = startFrame + offset;
10714
11261
  startFrame += durationInFramesProp + offset;
10715
- return /* @__PURE__ */ jsx36(Sequence, {
11262
+ return /* @__PURE__ */ jsx36(SequenceWithoutSchemaWithRef, {
11263
+ ref: castedChild.ref,
10716
11264
  name: name || "<Series.Sequence>",
10717
11265
  _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
10718
11266
  from: currentStartFrame,
10719
11267
  durationInFrames: durationInFramesProp,
10720
11268
  ...passedProps,
10721
- ref: castedChild.ref,
10722
11269
  children: child
10723
11270
  });
10724
11271
  });
@@ -10733,11 +11280,14 @@ var SeriesInner = (props2) => {
10733
11280
  })
10734
11281
  });
10735
11282
  };
10736
- var Series = Object.assign(wrapInSchema(SeriesInner, sequenceSchemaDefaultLayoutNone), {
11283
+ var Series = Object.assign(wrapInSchema({
11284
+ Component: SeriesInner,
11285
+ schema: sequenceSchemaDefaultLayoutNone,
11286
+ supportsEffects: false
11287
+ }), {
10737
11288
  Sequence: SeriesSequence
10738
11289
  });
10739
11290
  addSequenceStackTraces(Series);
10740
- addSequenceStackTraces(SeriesSequence);
10741
11291
  var validateSpringDuration = (dur) => {
10742
11292
  if (typeof dur === "undefined") {
10743
11293
  return;
@@ -11204,13 +11754,13 @@ var VideoForRenderingForwardFunction = ({
11204
11754
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
11205
11755
  const videoConfig = useUnsafeVideoConfig();
11206
11756
  const videoRef = useRef27(null);
11207
- const sequenceContext = useContext37(SequenceContext);
11757
+ const sequenceContext = useContext38(SequenceContext);
11208
11758
  const mediaStartsAt = useMediaStartsAt();
11209
11759
  const environment = useRemotionEnvironment();
11210
11760
  const logLevel = useLogLevel();
11211
11761
  const mountTime = useMountTime();
11212
11762
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
11213
- const { registerRenderAsset, unregisterRenderAsset } = useContext37(RenderAssetManager);
11763
+ const { registerRenderAsset, unregisterRenderAsset } = useContext38(RenderAssetManager);
11214
11764
  const id = useMemo39(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
11215
11765
  props2.src,
11216
11766
  sequenceContext?.cumulatedFrom,
@@ -11269,6 +11819,7 @@ var VideoForRenderingForwardFunction = ({
11269
11819
  useImperativeHandle10(ref, () => {
11270
11820
  return videoRef.current;
11271
11821
  }, []);
11822
+ useEmitVideoFrame({ ref: videoRef, onVideoFrame });
11272
11823
  useEffect21(() => {
11273
11824
  if (!window.remotion_videoEnabled) {
11274
11825
  return;
@@ -11412,6 +11963,7 @@ var VideoForwardingFunction = (props2, ref) => {
11412
11963
  _remotionInternalNativeLoopPassed,
11413
11964
  showInTimeline,
11414
11965
  onAutoPlayError,
11966
+ onVideoFrame,
11415
11967
  ...otherProps
11416
11968
  } = props2;
11417
11969
  const { loop, ...propsOtherThanLoop } = props2;
@@ -11420,7 +11972,7 @@ var VideoForwardingFunction = (props2, ref) => {
11420
11972
  if (environment.isClientSideRendering) {
11421
11973
  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
11974
  }
11423
- const { durations, setDurations } = useContext38(DurationsContext);
11975
+ const { durations, setDurations } = useContext39(DurationsContext);
11424
11976
  if (typeof ref === "string") {
11425
11977
  throw new Error("string refs are not supported");
11426
11978
  }
@@ -11431,7 +11983,6 @@ var VideoForwardingFunction = (props2, ref) => {
11431
11983
  const onDuration = useCallback23((src, durationInSeconds) => {
11432
11984
  setDurations({ type: "got-duration", durationInSeconds, src });
11433
11985
  }, [setDurations]);
11434
- const onVideoFrame = useCallback23(() => {}, []);
11435
11986
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props2.src)];
11436
11987
  validateMediaTrimProps({ startFrom, endAt, trimBefore, trimAfter });
11437
11988
  const { trimBeforeValue, trimAfterValue } = resolveTrimProps({
@@ -11477,6 +12028,7 @@ var VideoForwardingFunction = (props2, ref) => {
11477
12028
  name,
11478
12029
  children: /* @__PURE__ */ jsx38(Html5Video, {
11479
12030
  pauseWhenBuffering: pauseWhenBuffering ?? false,
12031
+ onVideoFrame,
11480
12032
  ...otherProps,
11481
12033
  ref,
11482
12034
  stack
@@ -11500,7 +12052,7 @@ var VideoForwardingFunction = (props2, ref) => {
11500
12052
  onlyWarnForMediaSeekingError: false,
11501
12053
  ...otherProps,
11502
12054
  ref,
11503
- onVideoFrame: null,
12055
+ onVideoFrame: onVideoFrame ?? null,
11504
12056
  pauseWhenBuffering: pauseWhenBuffering ?? false,
11505
12057
  onDuration,
11506
12058
  _remotionInternalStack: stack ?? null,
@@ -11535,6 +12087,7 @@ var Config = new Proxy(proxyObj, {
11535
12087
  Sequence.displayName = "Sequence";
11536
12088
  addSequenceStackTraces(Sequence);
11537
12089
  addSequenceStackTraces(Composition);
12090
+ addSequenceStackTraces(Folder);
11538
12091
 
11539
12092
  // src/components/team/TeamCards.tsx
11540
12093
  import { jsx as jsx39, jsxs as jsxs3 } from "react/jsx-runtime";
@@ -11972,7 +12525,7 @@ var ExpertsPageContent = ({ Link }) => {
11972
12525
  });
11973
12526
  };
11974
12527
  // ../design/dist/esm/index.mjs
11975
- import * as React22 from "react";
12528
+ import * as React23 from "react";
11976
12529
  import * as React8 from "react";
11977
12530
  import { Fragment as Fragment22, jsx as jsx45 } from "react/jsx-runtime";
11978
12531
  import React52, { useCallback as useCallback25, useRef as useRef28, useState as useState22 } from "react";
@@ -13317,7 +13870,7 @@ var getDefaultConfig = () => {
13317
13870
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
13318
13871
 
13319
13872
  // ../design/dist/esm/index.mjs
13320
- import React33, { useEffect as useEffect22, useMemo as useMemo43, useState as useState21 } from "react";
13873
+ import React35, { useEffect as useEffect22, useMemo as useMemo43, useState as useState21 } from "react";
13321
13874
 
13322
13875
  // ../paths/dist/esm/index.mjs
13323
13876
  var cutLInstruction = ({
@@ -17680,15 +18233,15 @@ import { Fragment as Fragment5, jsx as jsx142 } from "react/jsx-runtime";
17680
18233
  import { jsx as jsx152 } from "react/jsx-runtime";
17681
18234
  import * as React122 from "react";
17682
18235
  import { jsx as jsx162 } from "react/jsx-runtime";
17683
- import * as React16 from "react";
17684
- import * as React13 from "react";
18236
+ import * as React162 from "react";
18237
+ import * as React132 from "react";
17685
18238
  import * as ReactDOM from "react-dom";
17686
18239
  import { jsx as jsx172 } from "react/jsx-runtime";
17687
- import * as React142 from "react";
18240
+ import * as React14 from "react";
17688
18241
  import * as React152 from "react";
17689
18242
  import { jsx as jsx182 } from "react/jsx-runtime";
17690
18243
  import * as React17 from "react";
17691
- import * as React182 from "react";
18244
+ import * as React18 from "react";
17692
18245
  import { jsx as jsx192 } from "react/jsx-runtime";
17693
18246
  import * as React202 from "react";
17694
18247
  import * as React192 from "react";
@@ -17698,41 +18251,41 @@ import { useLayoutEffect as useLayoutEffect32, useEffect as useEffect82 } from "
17698
18251
  import * as ReactDOM2 from "react-dom";
17699
18252
  import * as React222 from "react";
17700
18253
  import { jsx as jsx202 } from "react/jsx-runtime";
17701
- import * as React23 from "react";
18254
+ import * as React232 from "react";
17702
18255
  import { jsx as jsx213 } from "react/jsx-runtime";
17703
18256
  import * as React25 from "react";
17704
18257
  import ReactDOM3 from "react-dom";
17705
18258
  import { jsx as jsx223 } from "react/jsx-runtime";
17706
18259
  import * as React26 from "react";
17707
18260
  import * as React27 from "react";
17708
- import * as React282 from "react";
18261
+ import * as React28 from "react";
17709
18262
  import { jsx as jsx232 } from "react/jsx-runtime";
17710
- import * as React35 from "react";
17711
- import * as React312 from "react";
18263
+ import * as React352 from "react";
18264
+ import * as React31 from "react";
17712
18265
  import { useState as useState112 } from "react";
17713
18266
  import * as React292 from "react";
17714
- import * as React30 from "react";
18267
+ import * as React302 from "react";
17715
18268
  import * as React342 from "react";
17716
18269
  import * as React332 from "react";
17717
18270
  import * as React322 from "react";
17718
18271
  import { Fragment as Fragment8, jsx as jsx242, jsxs as jsxs42 } from "react/jsx-runtime";
17719
18272
  import { forwardRef as forwardRef142, createElement as createElement7 } from "react";
17720
18273
  import { forwardRef as forwardRef132, createElement as createElement6 } from "react";
17721
- import * as React372 from "react";
18274
+ import * as React37 from "react";
17722
18275
  import { jsx as jsx252, jsxs as jsxs52 } from "react/jsx-runtime";
17723
18276
  import { jsx as jsx262 } from "react/jsx-runtime";
17724
18277
  import * as React49 from "react";
17725
18278
  import * as React382 from "react";
17726
18279
  import { jsx as jsx272 } from "react/jsx-runtime";
17727
18280
  import * as React47 from "react";
17728
- import React402 from "react";
17729
- import * as React39 from "react";
18281
+ import React40 from "react";
18282
+ import * as React392 from "react";
17730
18283
  import { Fragment as Fragment222, jsx as jsx282 } from "react/jsx-runtime";
17731
18284
  import { jsx as jsx292 } from "react/jsx-runtime";
17732
18285
  import React210 from "react";
17733
18286
  import { jsx as jsx2102 } from "react/jsx-runtime";
17734
18287
  import * as React42 from "react";
17735
- import * as React41 from "react";
18288
+ import * as React412 from "react";
17736
18289
  import * as React43 from "react";
17737
18290
  import * as ReactDOM5 from "react-dom";
17738
18291
  import { jsx as jsx302 } from "react/jsx-runtime";
@@ -17785,7 +18338,7 @@ function useComposedRefs(...refs) {
17785
18338
  return React8.useCallback(composeRefs(...refs), refs);
17786
18339
  }
17787
18340
  var REACT_LAZY_TYPE = Symbol.for("react.lazy");
17788
- var use = React22[" use ".trim().toString()];
18341
+ var use = React23[" use ".trim().toString()];
17789
18342
  function isPromiseLike(value) {
17790
18343
  return typeof value === "object" && value !== null && "then" in value;
17791
18344
  }
@@ -17794,25 +18347,25 @@ function isLazyComponent(element) {
17794
18347
  }
17795
18348
  function createSlot(ownerName) {
17796
18349
  const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);
17797
- const Slot2 = React22.forwardRef((props, forwardedRef) => {
18350
+ const Slot2 = React23.forwardRef((props, forwardedRef) => {
17798
18351
  let { children, ...slotProps } = props;
17799
18352
  if (isLazyComponent(children) && typeof use === "function") {
17800
18353
  children = use(children._payload);
17801
18354
  }
17802
- const childrenArray = React22.Children.toArray(children);
18355
+ const childrenArray = React23.Children.toArray(children);
17803
18356
  const slottable = childrenArray.find(isSlottable);
17804
18357
  if (slottable) {
17805
18358
  const newElement = slottable.props.children;
17806
18359
  const newChildren = childrenArray.map((child) => {
17807
18360
  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;
18361
+ if (React23.Children.count(newElement) > 1)
18362
+ return React23.Children.only(null);
18363
+ return React23.isValidElement(newElement) ? newElement.props.children : null;
17811
18364
  } else {
17812
18365
  return child;
17813
18366
  }
17814
18367
  });
17815
- return /* @__PURE__ */ jsx45(SlotClone, { ...slotProps, ref: forwardedRef, children: React22.isValidElement(newElement) ? React22.cloneElement(newElement, undefined, newChildren) : null });
18368
+ return /* @__PURE__ */ jsx45(SlotClone, { ...slotProps, ref: forwardedRef, children: React23.isValidElement(newElement) ? React23.cloneElement(newElement, undefined, newChildren) : null });
17816
18369
  }
17817
18370
  return /* @__PURE__ */ jsx45(SlotClone, { ...slotProps, ref: forwardedRef, children });
17818
18371
  });
@@ -17821,20 +18374,20 @@ function createSlot(ownerName) {
17821
18374
  }
17822
18375
  var Slot = /* @__PURE__ */ createSlot("Slot");
17823
18376
  function createSlotClone(ownerName) {
17824
- const SlotClone = React22.forwardRef((props, forwardedRef) => {
18377
+ const SlotClone = React23.forwardRef((props, forwardedRef) => {
17825
18378
  let { children, ...slotProps } = props;
17826
18379
  if (isLazyComponent(children) && typeof use === "function") {
17827
18380
  children = use(children._payload);
17828
18381
  }
17829
- if (React22.isValidElement(children)) {
18382
+ if (React23.isValidElement(children)) {
17830
18383
  const childrenRef = getElementRef(children);
17831
18384
  const props2 = mergeProps(slotProps, children.props);
17832
- if (children.type !== React22.Fragment) {
18385
+ if (children.type !== React23.Fragment) {
17833
18386
  props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
17834
18387
  }
17835
- return React22.cloneElement(children, props2);
18388
+ return React23.cloneElement(children, props2);
17836
18389
  }
17837
- return React22.Children.count(children) > 1 ? React22.Children.only(null) : null;
18390
+ return React23.Children.count(children) > 1 ? React23.Children.only(null) : null;
17838
18391
  });
17839
18392
  SlotClone.displayName = `${ownerName}.SlotClone`;
17840
18393
  return SlotClone;
@@ -17850,7 +18403,7 @@ function createSlottable(ownerName) {
17850
18403
  }
17851
18404
  var Slottable = /* @__PURE__ */ createSlottable("Slottable");
17852
18405
  function isSlottable(child) {
17853
- return React22.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;
18406
+ return React23.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;
17854
18407
  }
17855
18408
  function mergeProps(slotProps, childProps) {
17856
18409
  const overrideProps = { ...childProps };
@@ -17907,7 +18460,7 @@ var getChildNodeFrom = (htmlElement) => {
17907
18460
  return childNode;
17908
18461
  };
17909
18462
  var useHoverTransforms = (ref, disabled) => {
17910
- const [state, setState] = React33.useState({
18463
+ const [state, setState] = React35.useState({
17911
18464
  progress: 0,
17912
18465
  isActive: false
17913
18466
  });
@@ -17919,7 +18472,7 @@ var useHoverTransforms = (ref, disabled) => {
17919
18472
  eventTarget.dispatchEvent(new Event("enabled"));
17920
18473
  }
17921
18474
  }, [disabled, eventTarget]);
17922
- React33.useEffect(() => {
18475
+ React35.useEffect(() => {
17923
18476
  const element = ref.current;
17924
18477
  if (!element)
17925
18478
  return;
@@ -17994,8 +18547,8 @@ var useHoverTransforms = (ref, disabled) => {
17994
18547
  return state;
17995
18548
  };
17996
18549
  var useClickTransforms = (ref) => {
17997
- const [hoverProgress, setHoverProgress] = React33.useState(0);
17998
- React33.useEffect(() => {
18550
+ const [hoverProgress, setHoverProgress] = React35.useState(0);
18551
+ React35.useEffect(() => {
17999
18552
  const element = getChildNodeFrom(ref.current);
18000
18553
  if (!element) {
18001
18554
  return;
@@ -18723,7 +19276,7 @@ var NODES = [
18723
19276
  "ul"
18724
19277
  ];
18725
19278
  var Primitive = NODES.reduce((primitive, node) => {
18726
- const Node2 = React13.forwardRef((props, forwardedRef) => {
19279
+ const Node2 = React132.forwardRef((props, forwardedRef) => {
18727
19280
  const { asChild, ...primitiveProps } = props;
18728
19281
  const Comp = asChild ? Slot2 : node;
18729
19282
  if (typeof window !== "undefined") {
@@ -18739,11 +19292,11 @@ function dispatchDiscreteCustomEvent(target, event) {
18739
19292
  ReactDOM.flushSync(() => target.dispatchEvent(event));
18740
19293
  }
18741
19294
  function useCallbackRef(callback) {
18742
- const callbackRef = React142.useRef(callback);
18743
- React142.useEffect(() => {
19295
+ const callbackRef = React14.useRef(callback);
19296
+ React14.useEffect(() => {
18744
19297
  callbackRef.current = callback;
18745
19298
  });
18746
- return React142.useMemo(() => (...args) => callbackRef.current?.(...args), []);
19299
+ return React14.useMemo(() => (...args) => callbackRef.current?.(...args), []);
18747
19300
  }
18748
19301
  function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {
18749
19302
  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);
@@ -18762,12 +19315,12 @@ var CONTEXT_UPDATE = "dismissableLayer.update";
18762
19315
  var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside";
18763
19316
  var FOCUS_OUTSIDE = "dismissableLayer.focusOutside";
18764
19317
  var originalBodyPointerEvents;
18765
- var DismissableLayerContext = React16.createContext({
19318
+ var DismissableLayerContext = React162.createContext({
18766
19319
  layers: /* @__PURE__ */ new Set,
18767
19320
  layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set,
18768
19321
  branches: /* @__PURE__ */ new Set
18769
19322
  });
18770
- var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
19323
+ var DismissableLayer = React162.forwardRef((props, forwardedRef) => {
18771
19324
  const {
18772
19325
  disableOutsidePointerEvents = false,
18773
19326
  onEscapeKeyDown,
@@ -18777,10 +19330,10 @@ var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
18777
19330
  onDismiss,
18778
19331
  ...layerProps
18779
19332
  } = props;
18780
- const context = React16.useContext(DismissableLayerContext);
18781
- const [node, setNode] = React16.useState(null);
19333
+ const context = React162.useContext(DismissableLayerContext);
19334
+ const [node, setNode] = React162.useState(null);
18782
19335
  const ownerDocument = node?.ownerDocument ?? globalThis?.document;
18783
- const [, force] = React16.useState({});
19336
+ const [, force] = React162.useState({});
18784
19337
  const composedRefs = useComposedRefs2(forwardedRef, (node2) => setNode(node2));
18785
19338
  const layers = Array.from(context.layers);
18786
19339
  const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);
@@ -18818,7 +19371,7 @@ var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
18818
19371
  onDismiss();
18819
19372
  }
18820
19373
  }, ownerDocument);
18821
- React16.useEffect(() => {
19374
+ React162.useEffect(() => {
18822
19375
  if (!node)
18823
19376
  return;
18824
19377
  if (disableOutsidePointerEvents) {
@@ -18836,7 +19389,7 @@ var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
18836
19389
  }
18837
19390
  };
18838
19391
  }, [node, ownerDocument, disableOutsidePointerEvents, context]);
18839
- React16.useEffect(() => {
19392
+ React162.useEffect(() => {
18840
19393
  return () => {
18841
19394
  if (!node)
18842
19395
  return;
@@ -18845,7 +19398,7 @@ var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
18845
19398
  dispatchUpdate();
18846
19399
  };
18847
19400
  }, [node, context]);
18848
- React16.useEffect(() => {
19401
+ React162.useEffect(() => {
18849
19402
  const handleUpdate = () => force({});
18850
19403
  document.addEventListener(CONTEXT_UPDATE, handleUpdate);
18851
19404
  return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
@@ -18864,11 +19417,11 @@ var DismissableLayer = React16.forwardRef((props, forwardedRef) => {
18864
19417
  });
18865
19418
  DismissableLayer.displayName = DISMISSABLE_LAYER_NAME;
18866
19419
  var BRANCH_NAME = "DismissableLayerBranch";
18867
- var DismissableLayerBranch = React16.forwardRef((props, forwardedRef) => {
18868
- const context = React16.useContext(DismissableLayerContext);
18869
- const ref = React16.useRef(null);
19420
+ var DismissableLayerBranch = React162.forwardRef((props, forwardedRef) => {
19421
+ const context = React162.useContext(DismissableLayerContext);
19422
+ const ref = React162.useRef(null);
18870
19423
  const composedRefs = useComposedRefs2(forwardedRef, ref);
18871
- React16.useEffect(() => {
19424
+ React162.useEffect(() => {
18872
19425
  const node = ref.current;
18873
19426
  if (node) {
18874
19427
  context.branches.add(node);
@@ -18882,9 +19435,9 @@ var DismissableLayerBranch = React16.forwardRef((props, forwardedRef) => {
18882
19435
  DismissableLayerBranch.displayName = BRANCH_NAME;
18883
19436
  function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {
18884
19437
  const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);
18885
- const isPointerInsideReactTreeRef = React16.useRef(false);
18886
- const handleClickRef = React16.useRef(() => {});
18887
- React16.useEffect(() => {
19438
+ const isPointerInsideReactTreeRef = React162.useRef(false);
19439
+ const handleClickRef = React162.useRef(() => {});
19440
+ React162.useEffect(() => {
18888
19441
  const handlePointerDown = (event) => {
18889
19442
  if (event.target && !isPointerInsideReactTreeRef.current) {
18890
19443
  let handleAndDispatchPointerDownOutsideEvent2 = function() {
@@ -18919,8 +19472,8 @@ function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?
18919
19472
  }
18920
19473
  function useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {
18921
19474
  const handleFocusOutside = useCallbackRef(onFocusOutside);
18922
- const isFocusInsideReactTreeRef = React16.useRef(false);
18923
- React16.useEffect(() => {
19475
+ const isFocusInsideReactTreeRef = React162.useRef(false);
19476
+ React162.useEffect(() => {
18924
19477
  const handleFocus = (event) => {
18925
19478
  if (event.target && !isFocusInsideReactTreeRef.current) {
18926
19479
  const eventDetail = { originalEvent: event };
@@ -18978,7 +19531,7 @@ var AUTOFOCUS_ON_MOUNT = "focusScope.autoFocusOnMount";
18978
19531
  var AUTOFOCUS_ON_UNMOUNT = "focusScope.autoFocusOnUnmount";
18979
19532
  var EVENT_OPTIONS = { bubbles: false, cancelable: true };
18980
19533
  var FOCUS_SCOPE_NAME = "FocusScope";
18981
- var FocusScope = React182.forwardRef((props, forwardedRef) => {
19534
+ var FocusScope = React18.forwardRef((props, forwardedRef) => {
18982
19535
  const {
18983
19536
  loop = false,
18984
19537
  trapped = false,
@@ -18986,12 +19539,12 @@ var FocusScope = React182.forwardRef((props, forwardedRef) => {
18986
19539
  onUnmountAutoFocus: onUnmountAutoFocusProp,
18987
19540
  ...scopeProps
18988
19541
  } = props;
18989
- const [container22, setContainer] = React182.useState(null);
19542
+ const [container22, setContainer] = React18.useState(null);
18990
19543
  const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);
18991
19544
  const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);
18992
- const lastFocusedElementRef = React182.useRef(null);
19545
+ const lastFocusedElementRef = React18.useRef(null);
18993
19546
  const composedRefs = useComposedRefs2(forwardedRef, (node) => setContainer(node));
18994
- const focusScope = React182.useRef({
19547
+ const focusScope = React18.useRef({
18995
19548
  paused: false,
18996
19549
  pause() {
18997
19550
  this.paused = true;
@@ -19000,7 +19553,7 @@ var FocusScope = React182.forwardRef((props, forwardedRef) => {
19000
19553
  this.paused = false;
19001
19554
  }
19002
19555
  }).current;
19003
- React182.useEffect(() => {
19556
+ React18.useEffect(() => {
19004
19557
  if (trapped) {
19005
19558
  let handleFocusIn2 = function(event) {
19006
19559
  if (focusScope.paused || !container22)
@@ -19042,7 +19595,7 @@ var FocusScope = React182.forwardRef((props, forwardedRef) => {
19042
19595
  };
19043
19596
  }
19044
19597
  }, [trapped, container22, focusScope.paused]);
19045
- React182.useEffect(() => {
19598
+ React18.useEffect(() => {
19046
19599
  if (container22) {
19047
19600
  focusScopesStack.add(focusScope);
19048
19601
  const previouslyFocusedElement = document.activeElement;
@@ -19073,7 +19626,7 @@ var FocusScope = React182.forwardRef((props, forwardedRef) => {
19073
19626
  };
19074
19627
  }
19075
19628
  }, [container22, onMountAutoFocus, onUnmountAutoFocus, focusScope]);
19076
- const handleKeyDown = React182.useCallback((event) => {
19629
+ const handleKeyDown = React18.useCallback((event) => {
19077
19630
  if (!loop && !trapped)
19078
19631
  return;
19079
19632
  if (focusScope.paused)
@@ -21003,7 +21556,7 @@ var Arrow = React222.forwardRef((props, forwardedRef) => {
21003
21556
  Arrow.displayName = NAME;
21004
21557
  var Root2 = Arrow;
21005
21558
  function useSize(element) {
21006
- const [size4, setSize] = React23.useState(undefined);
21559
+ const [size4, setSize] = React232.useState(undefined);
21007
21560
  useLayoutEffect22(() => {
21008
21561
  if (element) {
21009
21562
  setSize({ width: element.offsetWidth, height: element.offsetHeight });
@@ -21325,7 +21878,7 @@ function usePrevious(value) {
21325
21878
  }, [value]);
21326
21879
  }
21327
21880
  var NAME2 = "VisuallyHidden";
21328
- var VisuallyHidden = React282.forwardRef((props, forwardedRef) => {
21881
+ var VisuallyHidden = React28.forwardRef((props, forwardedRef) => {
21329
21882
  return /* @__PURE__ */ jsx232(Primitive.span, {
21330
21883
  ...props,
21331
21884
  ref: forwardedRef,
@@ -21655,7 +22208,7 @@ var SideCar = function(_a) {
21655
22208
  if (!Target) {
21656
22209
  throw new Error("Sidecar medium not found");
21657
22210
  }
21658
- return React30.createElement(Target, __assign({}, rest));
22211
+ return React302.createElement(Target, __assign({}, rest));
21659
22212
  };
21660
22213
  SideCar.isSideCarExport = true;
21661
22214
  function exportSidecar(medium, exported) {
@@ -21666,9 +22219,9 @@ var effectCar = createSidecarMedium();
21666
22219
  var nothing = function() {
21667
22220
  return;
21668
22221
  };
21669
- var RemoveScroll = React312.forwardRef(function(props, parentRef) {
21670
- var ref = React312.useRef(null);
21671
- var _a = React312.useState({
22222
+ var RemoveScroll = React31.forwardRef(function(props, parentRef) {
22223
+ var ref = React31.useRef(null);
22224
+ var _a = React31.useState({
21672
22225
  onScrollCapture: nothing,
21673
22226
  onWheelCapture: nothing,
21674
22227
  onTouchMoveCapture: nothing
@@ -21677,7 +22230,7 @@ var RemoveScroll = React312.forwardRef(function(props, parentRef) {
21677
22230
  var SideCar2 = sideCar;
21678
22231
  var containerRef = useMergeRefs([ref, parentRef]);
21679
22232
  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));
22233
+ 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
22234
  });
21682
22235
  RemoveScroll.defaultProps = {
21683
22236
  enabled: true,
@@ -22136,8 +22689,8 @@ function getOutermostShadowParent(node) {
22136
22689
  return shadowParent;
22137
22690
  }
22138
22691
  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 }));
22692
+ var ReactRemoveScroll = React352.forwardRef(function(props, ref) {
22693
+ return React352.createElement(RemoveScroll, __assign({}, props, { ref, sideCar: sidecar_default }));
22141
22694
  });
22142
22695
  ReactRemoveScroll.classNames = RemoveScroll.classNames;
22143
22696
  var Combination_default = ReactRemoveScroll;
@@ -23143,7 +23696,7 @@ var ChevronDown = createLucideIcon("ChevronDown", [
23143
23696
  var ChevronUp = createLucideIcon("ChevronUp", [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]]);
23144
23697
  var Select2 = Root222;
23145
23698
  var SelectValue2 = Value;
23146
- var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Trigger, {
23699
+ var SelectTrigger2 = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Trigger, {
23147
23700
  ref,
23148
23701
  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
23702
  ...props,
@@ -23158,7 +23711,7 @@ var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref
23158
23711
  ]
23159
23712
  }));
23160
23713
  SelectTrigger2.displayName = Trigger.displayName;
23161
- var SelectScrollUpButton2 = React372.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(ScrollUpButton, {
23714
+ var SelectScrollUpButton2 = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(ScrollUpButton, {
23162
23715
  ref,
23163
23716
  className: cn("flex cursor-default items-center justify-center py-1", className),
23164
23717
  ...props,
@@ -23167,7 +23720,7 @@ var SelectScrollUpButton2 = React372.forwardRef(({ className, ...props }, ref) =
23167
23720
  })
23168
23721
  }));
23169
23722
  SelectScrollUpButton2.displayName = ScrollUpButton.displayName;
23170
- var SelectScrollDownButton2 = React372.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(ScrollDownButton, {
23723
+ var SelectScrollDownButton2 = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(ScrollDownButton, {
23171
23724
  ref,
23172
23725
  className: cn("flex cursor-default items-center justify-center py-1", className),
23173
23726
  ...props,
@@ -23176,7 +23729,7 @@ var SelectScrollDownButton2 = React372.forwardRef(({ className, ...props }, ref)
23176
23729
  })
23177
23730
  }));
23178
23731
  SelectScrollDownButton2.displayName = ScrollDownButton.displayName;
23179
- var SelectContent2 = React372.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx252(Portal2, {
23732
+ var SelectContent2 = React37.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx252(Portal2, {
23180
23733
  children: /* @__PURE__ */ jsxs52(Content2, {
23181
23734
  ref,
23182
23735
  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 +23746,13 @@ var SelectContent2 = React372.forwardRef(({ className, children, position = "pop
23193
23746
  })
23194
23747
  }));
23195
23748
  SelectContent2.displayName = Content2.displayName;
23196
- var SelectLabel2 = React372.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(Label, {
23749
+ var SelectLabel2 = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(Label, {
23197
23750
  ref,
23198
23751
  className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className),
23199
23752
  ...props
23200
23753
  }));
23201
23754
  SelectLabel2.displayName = Label.displayName;
23202
- var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Item, {
23755
+ var SelectItem2 = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Item, {
23203
23756
  ref,
23204
23757
  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
23758
  ...props,
@@ -23218,7 +23771,7 @@ var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) =
23218
23771
  ]
23219
23772
  }));
23220
23773
  SelectItem2.displayName = Item.displayName;
23221
- var SelectSeparator2 = React372.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(Separator, {
23774
+ var SelectSeparator2 = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx252(Separator, {
23222
23775
  ref,
23223
23776
  className: cn("-mx-1 my-1 h-px bg-muted", className),
23224
23777
  ...props
@@ -23307,22 +23860,22 @@ function composeContextScopes2(...scopes) {
23307
23860
  }
23308
23861
  function createSlot2(ownerName) {
23309
23862
  const SlotClone2 = /* @__PURE__ */ createSlotClone2(ownerName);
23310
- const Slot22 = React39.forwardRef((props, forwardedRef) => {
23863
+ const Slot22 = React392.forwardRef((props, forwardedRef) => {
23311
23864
  const { children, ...slotProps } = props;
23312
- const childrenArray = React39.Children.toArray(children);
23865
+ const childrenArray = React392.Children.toArray(children);
23313
23866
  const slottable = childrenArray.find(isSlottable3);
23314
23867
  if (slottable) {
23315
23868
  const newElement = slottable.props.children;
23316
23869
  const newChildren = childrenArray.map((child) => {
23317
23870
  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;
23871
+ if (React392.Children.count(newElement) > 1)
23872
+ return React392.Children.only(null);
23873
+ return React392.isValidElement(newElement) ? newElement.props.children : null;
23321
23874
  } else {
23322
23875
  return child;
23323
23876
  }
23324
23877
  });
23325
- return /* @__PURE__ */ jsx282(SlotClone2, { ...slotProps, ref: forwardedRef, children: React39.isValidElement(newElement) ? React39.cloneElement(newElement, undefined, newChildren) : null });
23878
+ return /* @__PURE__ */ jsx282(SlotClone2, { ...slotProps, ref: forwardedRef, children: React392.isValidElement(newElement) ? React392.cloneElement(newElement, undefined, newChildren) : null });
23326
23879
  }
23327
23880
  return /* @__PURE__ */ jsx282(SlotClone2, { ...slotProps, ref: forwardedRef, children });
23328
23881
  });
@@ -23330,24 +23883,24 @@ function createSlot2(ownerName) {
23330
23883
  return Slot22;
23331
23884
  }
23332
23885
  function createSlotClone2(ownerName) {
23333
- const SlotClone2 = React39.forwardRef((props, forwardedRef) => {
23886
+ const SlotClone2 = React392.forwardRef((props, forwardedRef) => {
23334
23887
  const { children, ...slotProps } = props;
23335
- if (React39.isValidElement(children)) {
23888
+ if (React392.isValidElement(children)) {
23336
23889
  const childrenRef = getElementRef3(children);
23337
23890
  const props2 = mergeProps3(slotProps, children.props);
23338
- if (children.type !== React39.Fragment) {
23891
+ if (children.type !== React392.Fragment) {
23339
23892
  props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
23340
23893
  }
23341
- return React39.cloneElement(children, props2);
23894
+ return React392.cloneElement(children, props2);
23342
23895
  }
23343
- return React39.Children.count(children) > 1 ? React39.Children.only(null) : null;
23896
+ return React392.Children.count(children) > 1 ? React392.Children.only(null) : null;
23344
23897
  });
23345
23898
  SlotClone2.displayName = `${ownerName}.SlotClone`;
23346
23899
  return SlotClone2;
23347
23900
  }
23348
23901
  var SLOTTABLE_IDENTIFIER2 = Symbol("radix.slottable");
23349
23902
  function isSlottable3(child) {
23350
- return React39.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER2;
23903
+ return React392.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER2;
23351
23904
  }
23352
23905
  function mergeProps3(slotProps, childProps) {
23353
23906
  const overrideProps = { ...childProps };
@@ -23392,14 +23945,14 @@ function createCollection2(name) {
23392
23945
  const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(PROVIDER_NAME, { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map });
23393
23946
  const CollectionProvider = (props) => {
23394
23947
  const { scope, children } = props;
23395
- const ref = React402.useRef(null);
23396
- const itemMap = React402.useRef(/* @__PURE__ */ new Map).current;
23948
+ const ref = React40.useRef(null);
23949
+ const itemMap = React40.useRef(/* @__PURE__ */ new Map).current;
23397
23950
  return /* @__PURE__ */ jsx292(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });
23398
23951
  };
23399
23952
  CollectionProvider.displayName = PROVIDER_NAME;
23400
23953
  const COLLECTION_SLOT_NAME = name + "CollectionSlot";
23401
23954
  const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);
23402
- const CollectionSlot = React402.forwardRef((props, forwardedRef) => {
23955
+ const CollectionSlot = React40.forwardRef((props, forwardedRef) => {
23403
23956
  const { scope, children } = props;
23404
23957
  const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);
23405
23958
  const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);
@@ -23409,12 +23962,12 @@ function createCollection2(name) {
23409
23962
  const ITEM_SLOT_NAME = name + "CollectionItemSlot";
23410
23963
  const ITEM_DATA_ATTR = "data-radix-collection-item";
23411
23964
  const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);
23412
- const CollectionItemSlot = React402.forwardRef((props, forwardedRef) => {
23965
+ const CollectionItemSlot = React40.forwardRef((props, forwardedRef) => {
23413
23966
  const { scope, children, ...itemData } = props;
23414
- const ref = React402.useRef(null);
23967
+ const ref = React40.useRef(null);
23415
23968
  const composedRefs = useComposedRefs(forwardedRef, ref);
23416
23969
  const context = useCollectionContext(ITEM_SLOT_NAME, scope);
23417
- React402.useEffect(() => {
23970
+ React40.useEffect(() => {
23418
23971
  context.itemMap.set(ref, { ref, ...itemData });
23419
23972
  return () => void context.itemMap.delete(ref);
23420
23973
  });
@@ -23423,7 +23976,7 @@ function createCollection2(name) {
23423
23976
  CollectionItemSlot.displayName = ITEM_SLOT_NAME;
23424
23977
  function useCollection2(scope) {
23425
23978
  const context = useCollectionContext(name + "CollectionConsumer", scope);
23426
- const getItems = React402.useCallback(() => {
23979
+ const getItems = React40.useCallback(() => {
23427
23980
  const collectionNode = context.collectionRef.current;
23428
23981
  if (!collectionNode)
23429
23982
  return [];
@@ -23741,7 +24294,7 @@ function toSafeIndex(array, index2) {
23741
24294
  function toSafeInteger(number) {
23742
24295
  return number !== number || number === 0 ? 0 : Math.trunc(number);
23743
24296
  }
23744
- var useLayoutEffect222 = globalThis?.document ? React41.useLayoutEffect : () => {};
24297
+ var useLayoutEffect222 = globalThis?.document ? React412.useLayoutEffect : () => {};
23745
24298
  var useReactId2 = React42[" useId ".trim().toString()] || (() => {
23746
24299
  return;
23747
24300
  });
@@ -27064,11 +27617,11 @@ import { jsx as jsx58, jsxs as jsxs14 } from "react/jsx-runtime";
27064
27617
  import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment12 } from "react/jsx-runtime";
27065
27618
  import React56 from "react";
27066
27619
  import { useContext as useContext210, useEffect as useEffect42, useState as useState38 } from "react";
27067
- import { useContext as useContext45, useLayoutEffect as useLayoutEffect17 } from "react";
27620
+ import { useContext as useContext46, useLayoutEffect as useLayoutEffect17 } from "react";
27068
27621
  import { jsx as jsx314 } from "react/jsx-runtime";
27069
27622
  import { useEffect as useEffect210, useState as useState210 } from "react";
27070
27623
  import { useLayoutEffect as useLayoutEffect23 } from "react";
27071
- import { useContext as useContext46, useEffect as useEffect52, useRef as useRef46 } from "react";
27624
+ import { useContext as useContext47, useEffect as useEffect52, useRef as useRef46 } from "react";
27072
27625
  import { useEffect as useEffect310, useRef as useRef210 } from "react";
27073
27626
  import { useCallback as useCallback36, useContext as useContext310, useMemo as useMemo53, useRef as useRef47, useState as useState39 } from "react";
27074
27627
  import { useEffect as useEffect43, useRef as useRef310 } from "react";
@@ -27119,6 +27672,123 @@ import { useCallback as useCallback112, useMemo as useMemo132, useState as useSt
27119
27672
  import { jsx as jsx133 } from "react/jsx-runtime";
27120
27673
 
27121
27674
  // ../core/dist/esm/no-react.mjs
27675
+ var normalizeNumber2 = (value) => {
27676
+ return Math.round(value * 1e6) / 1e6;
27677
+ };
27678
+ var angleUnits2 = new Set(["deg", "rad", "grad", "turn"]);
27679
+ var lengthUnits2 = new Set([
27680
+ "%",
27681
+ "cap",
27682
+ "ch",
27683
+ "cm",
27684
+ "cqb",
27685
+ "cqh",
27686
+ "cqi",
27687
+ "cqmax",
27688
+ "cqmin",
27689
+ "cqw",
27690
+ "dvh",
27691
+ "dvw",
27692
+ "em",
27693
+ "ex",
27694
+ "ic",
27695
+ "in",
27696
+ "lh",
27697
+ "lvh",
27698
+ "lvw",
27699
+ "mm",
27700
+ "pc",
27701
+ "pt",
27702
+ "px",
27703
+ "q",
27704
+ "rem",
27705
+ "rlh",
27706
+ "svh",
27707
+ "svw",
27708
+ "vb",
27709
+ "vh",
27710
+ "vi",
27711
+ "vmax",
27712
+ "vmin",
27713
+ "vw"
27714
+ ]);
27715
+ var cssNumberRegex2 = /^([+-]?(?:\d+\.?\d*|\.\d+))([a-zA-Z%]+)?$/;
27716
+ var stringifyNumber2 = (value) => {
27717
+ return String(normalizeNumber2(value));
27718
+ };
27719
+ var parseStringInterpolationComponent2 = (component, value) => {
27720
+ const match = cssNumberRegex2.exec(component);
27721
+ if (match === null) {
27722
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not a supported scale, translate, or rotate value`);
27723
+ }
27724
+ const unit = match[2] ?? null;
27725
+ const numberValue = Number(match[1]);
27726
+ if (!Number.isFinite(numberValue)) {
27727
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not finite`);
27728
+ }
27729
+ if (unit === null) {
27730
+ return { kind: "scale", value: numberValue, unit: null };
27731
+ }
27732
+ if (angleUnits2.has(unit)) {
27733
+ return { kind: "rotate", value: numberValue, unit };
27734
+ }
27735
+ if (lengthUnits2.has(unit)) {
27736
+ return { kind: "translate", value: numberValue, unit };
27737
+ }
27738
+ throw new TypeError(`Cannot interpolate "${value}" because "${unit}" is not a supported translate or rotate unit`);
27739
+ };
27740
+ var parseStringInterpolationValue2 = (output) => {
27741
+ if (typeof output === "number") {
27742
+ if (!Number.isFinite(output)) {
27743
+ throw new Error(`outputRange must contain only finite numbers, but got [${output}]`);
27744
+ }
27745
+ return {
27746
+ kind: "scale",
27747
+ values: [output, output, 1],
27748
+ units: [null, null, null],
27749
+ dimensions: 1
27750
+ };
27751
+ }
27752
+ const parts = output.trim().split(/\s+/);
27753
+ if (parts.length < 1 || parts.length > 3 || parts[0] === "") {
27754
+ throw new TypeError(`String outputRange values must contain 1 to 3 components, but got "${output}"`);
27755
+ }
27756
+ const parsed = parts.map((part) => parseStringInterpolationComponent2(part, output));
27757
+ const [{ kind }] = parsed;
27758
+ for (const part of parsed) {
27759
+ if (part.kind !== kind) {
27760
+ throw new TypeError(`Cannot interpolate "${output}" because it mixes ${kind} and ${part.kind} values`);
27761
+ }
27762
+ }
27763
+ if (kind === "scale") {
27764
+ const x = parsed[0].value;
27765
+ const y = parsed[1]?.value ?? x;
27766
+ const z = parsed[2]?.value ?? 1;
27767
+ return {
27768
+ kind,
27769
+ values: [x, y, z],
27770
+ units: [null, null, null],
27771
+ dimensions: parsed.length
27772
+ };
27773
+ }
27774
+ return {
27775
+ kind,
27776
+ values: [parsed[0].value, parsed[1]?.value ?? 0, parsed[2]?.value ?? 0],
27777
+ units: [parsed[0].unit, parsed[1]?.unit ?? null, parsed[2]?.unit ?? null],
27778
+ dimensions: parsed.length
27779
+ };
27780
+ };
27781
+ var serializeStringInterpolationValue2 = ({
27782
+ kind,
27783
+ values,
27784
+ units,
27785
+ dimensions
27786
+ }) => {
27787
+ if (kind === "scale") {
27788
+ return values.slice(0, dimensions).map((value) => stringifyNumber2(value)).join(" ");
27789
+ }
27790
+ return values.slice(0, dimensions).map((value, index2) => `${stringifyNumber2(value)}${units[index2]}`).join(" ");
27791
+ };
27122
27792
  function interpolateFunction2(input, inputRange, outputRange, options2) {
27123
27793
  const { extrapolateLeft, extrapolateRight, easing } = options2;
27124
27794
  let result = input;
@@ -27163,6 +27833,130 @@ function findRange2(input, inputRange) {
27163
27833
  }
27164
27834
  return i - 1;
27165
27835
  }
27836
+ var defaultEasing2 = (num) => num;
27837
+ var interpolateNumber2 = ({
27838
+ input,
27839
+ inputRange,
27840
+ outputRange,
27841
+ options: options2
27842
+ }) => {
27843
+ if (inputRange.length === 1) {
27844
+ return outputRange[0];
27845
+ }
27846
+ const easingOption = options2?.easing;
27847
+ const resolveEasingForSegment = (segmentIndex) => {
27848
+ if (easingOption === undefined) {
27849
+ return defaultEasing2;
27850
+ }
27851
+ if (typeof easingOption === "function") {
27852
+ return easingOption;
27853
+ }
27854
+ return easingOption[segmentIndex];
27855
+ };
27856
+ let extrapolateLeft = "extend";
27857
+ if (options2?.extrapolateLeft !== undefined) {
27858
+ extrapolateLeft = options2.extrapolateLeft;
27859
+ }
27860
+ let extrapolateRight = "extend";
27861
+ if (options2?.extrapolateRight !== undefined) {
27862
+ extrapolateRight = options2.extrapolateRight;
27863
+ }
27864
+ const posterizedInput = options2?.posterize === undefined ? input : Math.floor(input / options2.posterize) * options2.posterize;
27865
+ const range = findRange2(posterizedInput, inputRange);
27866
+ return interpolateFunction2(posterizedInput, [inputRange[range], inputRange[range + 1]], [outputRange[range], outputRange[range + 1]], {
27867
+ easing: resolveEasingForSegment(range),
27868
+ extrapolateLeft,
27869
+ extrapolateRight
27870
+ });
27871
+ };
27872
+ var interpolateString2 = ({
27873
+ input,
27874
+ inputRange,
27875
+ outputRange,
27876
+ options: options2
27877
+ }) => {
27878
+ const parsedOutputRange = outputRange.map(parseStringInterpolationValue2);
27879
+ const kind = parsedOutputRange[0]?.kind;
27880
+ if (kind === undefined) {
27881
+ throw new Error("outputRange must have at least 1 element");
27882
+ }
27883
+ for (const parsed of parsedOutputRange) {
27884
+ if (parsed.kind !== kind) {
27885
+ throw new TypeError(`Cannot interpolate ${kind} values with ${parsed.kind} values`);
27886
+ }
27887
+ }
27888
+ const dimensions = Math.max(...parsedOutputRange.map((parsed) => parsed.dimensions));
27889
+ const units = [
27890
+ null,
27891
+ null,
27892
+ null
27893
+ ];
27894
+ if (kind !== "scale") {
27895
+ for (let axis = 0;axis < dimensions; axis++) {
27896
+ for (const parsed of parsedOutputRange) {
27897
+ const unit = parsed.units[axis];
27898
+ if (unit === null) {
27899
+ continue;
27900
+ }
27901
+ if (units[axis] === null) {
27902
+ units[axis] = unit;
27903
+ continue;
27904
+ }
27905
+ if (units[axis] !== unit) {
27906
+ throw new TypeError(`Cannot interpolate ${kind} values with different units on axis ${axis + 1}: ${units[axis]} and ${unit}`);
27907
+ }
27908
+ }
27909
+ if (units[axis] === null) {
27910
+ throw new TypeError(`Cannot interpolate ${kind} values because axis ${axis + 1} has no unit`);
27911
+ }
27912
+ }
27913
+ }
27914
+ return serializeStringInterpolationValue2({
27915
+ kind,
27916
+ values: [0, 0, 0].map((_, axis) => interpolateNumber2({
27917
+ input,
27918
+ inputRange,
27919
+ outputRange: parsedOutputRange.map((parsed) => parsed.values[axis]),
27920
+ options: options2
27921
+ })),
27922
+ units,
27923
+ dimensions
27924
+ });
27925
+ };
27926
+ var validateTupleOutputRange2 = (outputRange) => {
27927
+ const dimensions = outputRange[0]?.length;
27928
+ if (dimensions === undefined) {
27929
+ throw new Error("outputRange must have at least 1 element");
27930
+ }
27931
+ if (dimensions === 0) {
27932
+ throw new TypeError("outputRange tuples must contain at least 1 number");
27933
+ }
27934
+ for (const output of outputRange) {
27935
+ if (output.length !== dimensions) {
27936
+ throw new TypeError(`outputRange tuples must all have the same length, but got ${dimensions} and ${output.length}`);
27937
+ }
27938
+ for (const value of output) {
27939
+ if (typeof value !== "number" || !Number.isFinite(value)) {
27940
+ throw new TypeError(`outputRange tuples must contain only finite numbers, but got [${output.join(",")}]`);
27941
+ }
27942
+ }
27943
+ }
27944
+ return dimensions;
27945
+ };
27946
+ var interpolateTuple2 = ({
27947
+ input,
27948
+ inputRange,
27949
+ outputRange,
27950
+ options: options2
27951
+ }) => {
27952
+ const dimensions = validateTupleOutputRange2(outputRange);
27953
+ return new Array(dimensions).fill(true).map((_, axis) => interpolateNumber2({
27954
+ input,
27955
+ inputRange,
27956
+ outputRange: outputRange.map((output) => output[axis]),
27957
+ options: options2
27958
+ }));
27959
+ };
27166
27960
  function checkValidInputRange2(arr) {
27167
27961
  for (let i = 1;i < arr.length; ++i) {
27168
27962
  if (!(arr[i] > arr[i - 1])) {
@@ -27222,42 +28016,30 @@ function interpolate3(input, inputRange, outputRange, options2) {
27222
28016
  throw new Error("inputRange (" + inputRange.length + ") and outputRange (" + outputRange.length + ") must have the same length");
27223
28017
  }
27224
28018
  checkInfiniteRange2("inputRange", inputRange);
27225
- checkInfiniteRange2("outputRange", outputRange);
27226
28019
  checkValidInputRange2(inputRange);
27227
28020
  assertValidInterpolateEasingOption2(options2?.easing, inputRange.length);
27228
28021
  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
28022
  if (typeof input !== "number") {
27249
28023
  throw new TypeError("Cannot interpolate an input which is not a number");
27250
28024
  }
27251
- if (inputRange.length === 1) {
27252
- return outputRange[0];
28025
+ if (!Array.isArray(outputRange)) {
28026
+ throw new Error("outputRange must contain only numbers");
27253
28027
  }
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
- });
28028
+ const hasStringOutput = outputRange.some((output) => typeof output === "string");
28029
+ if (hasStringOutput) {
28030
+ if (!outputRange.every((output) => typeof output === "string" || typeof output === "number")) {
28031
+ throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
28032
+ }
28033
+ return interpolateString2({ input, inputRange, outputRange, options: options2 });
28034
+ }
28035
+ if (outputRange.every((output) => Array.isArray(output))) {
28036
+ return interpolateTuple2({ input, inputRange, outputRange, options: options2 });
28037
+ }
28038
+ if (!outputRange.every((output) => typeof output === "number")) {
28039
+ throw new TypeError("outputRange must contain only numbers, numeric tuples, or supported scale, translate, and rotate strings");
28040
+ }
28041
+ checkInfiniteRange2("outputRange", outputRange);
28042
+ return interpolateNumber2({ input, inputRange, outputRange, options: options2 });
27261
28043
  }
27262
28044
  function truthy3(value) {
27263
28045
  return Boolean(value);
@@ -27808,6 +28590,45 @@ var proResProfileOptions = [
27808
28590
  "light",
27809
28591
  "proxy"
27810
28592
  ];
28593
+ var defaultScaleValue = [1, 1, 1];
28594
+ var parseScaleString = (value) => {
28595
+ const parts = value.trim().split(/\s+/);
28596
+ if (parts.length < 1 || parts.length > 3 || parts[0] === "") {
28597
+ return null;
28598
+ }
28599
+ const parsed = parts.map((part) => Number(part));
28600
+ if (!parsed.every((part) => Number.isFinite(part))) {
28601
+ return null;
28602
+ }
28603
+ const x = parsed[0];
28604
+ const y = parsed[1] ?? x;
28605
+ const z = parsed[2] ?? 1;
28606
+ return [x, y, z];
28607
+ };
28608
+ var parseValidScaleValue = (value) => {
28609
+ if (typeof value === "number") {
28610
+ return Number.isFinite(value) ? [value, value, 1] : null;
28611
+ }
28612
+ if (typeof value === "string") {
28613
+ return parseScaleString(value);
28614
+ }
28615
+ return null;
28616
+ };
28617
+ var parseScaleValue = (value) => {
28618
+ return parseValidScaleValue(value) ?? defaultScaleValue;
28619
+ };
28620
+ var serializeScaleValue = ([x, y, z]) => {
28621
+ const normalizedX = normalizeNumber2(x);
28622
+ const normalizedY = normalizeNumber2(y);
28623
+ const normalizedZ = normalizeNumber2(z);
28624
+ if (normalizedX === normalizedY && normalizedZ === 1) {
28625
+ return normalizedX;
28626
+ }
28627
+ if (normalizedZ === 1) {
28628
+ return `${normalizedX} ${normalizedY}`;
28629
+ }
28630
+ return `${normalizedX} ${normalizedY} ${normalizedZ}`;
28631
+ };
27811
28632
  var sequenceVisualStyleSchema2 = {
27812
28633
  "style.translate": {
27813
28634
  type: "translate",
@@ -27816,15 +28637,14 @@ var sequenceVisualStyleSchema2 = {
27816
28637
  description: "Offset"
27817
28638
  },
27818
28639
  "style.scale": {
27819
- type: "number",
27820
- min: 0.05,
28640
+ type: "scale",
27821
28641
  max: 100,
27822
28642
  step: 0.01,
27823
28643
  default: 1,
27824
28644
  description: "Scale"
27825
28645
  },
27826
28646
  "style.rotate": {
27827
- type: "rotation",
28647
+ type: "rotation-css",
27828
28648
  step: 1,
27829
28649
  default: "0deg",
27830
28650
  description: "Rotation"
@@ -27835,7 +28655,8 @@ var sequenceVisualStyleSchema2 = {
27835
28655
  max: 1,
27836
28656
  step: 0.01,
27837
28657
  default: 1,
27838
- description: "Opacity"
28658
+ description: "Opacity",
28659
+ hiddenFromList: false
27839
28660
  }
27840
28661
  };
27841
28662
  var sequencePremountSchema2 = {
@@ -27844,10 +28665,15 @@ var sequencePremountSchema2 = {
27844
28665
  default: 0,
27845
28666
  description: "Premount For",
27846
28667
  min: 0,
27847
- step: 1
28668
+ step: 1,
28669
+ hiddenFromList: false
27848
28670
  },
27849
28671
  postmountFor: {
27850
- type: "hidden"
28672
+ type: "number",
28673
+ default: 0,
28674
+ min: 0,
28675
+ step: 1,
28676
+ hiddenFromList: true
27851
28677
  },
27852
28678
  styleWhilePremounted: {
27853
28679
  type: "hidden"
@@ -27865,8 +28691,23 @@ var hiddenField2 = {
27865
28691
  default: false,
27866
28692
  description: "Hidden"
27867
28693
  };
28694
+ var durationInFramesField2 = {
28695
+ type: "number",
28696
+ default: undefined,
28697
+ min: 1,
28698
+ step: 1,
28699
+ hiddenFromList: true
28700
+ };
28701
+ var fromField2 = {
28702
+ type: "number",
28703
+ default: 0,
28704
+ step: 1,
28705
+ hiddenFromList: true
28706
+ };
27868
28707
  var sequenceSchema2 = {
27869
28708
  hidden: hiddenField2,
28709
+ from: fromField2,
28710
+ durationInFrames: durationInFramesField2,
27870
28711
  layout: {
27871
28712
  type: "enum",
27872
28713
  default: "absolute-fill",
@@ -27877,6 +28718,11 @@ var sequenceSchema2 = {
27877
28718
  }
27878
28719
  }
27879
28720
  };
28721
+ var sequenceSchemaWithoutFrom2 = {
28722
+ hidden: hiddenField2,
28723
+ durationInFrames: durationInFramesField2,
28724
+ layout: sequenceSchema2.layout
28725
+ };
27880
28726
  var sequenceSchemaDefaultLayoutNone2 = {
27881
28727
  ...sequenceSchema2,
27882
28728
  layout: {
@@ -28048,7 +28894,9 @@ var NoReactInternals = {
28048
28894
  validateCodec: validateCodec2,
28049
28895
  proResProfileOptions,
28050
28896
  findPropsToDelete: findPropsToDelete2,
28051
- sequenceSchema: sequenceSchema2
28897
+ sequenceSchema: sequenceSchema2,
28898
+ parseScaleValue,
28899
+ serializeScaleValue
28052
28900
  };
28053
28901
 
28054
28902
  // ../player/dist/esm/index.mjs
@@ -28061,7 +28909,7 @@ import {
28061
28909
  useRef as useRef132,
28062
28910
  useState as useState142
28063
28911
  } from "react";
28064
- import React132, {
28912
+ import React133, {
28065
28913
  forwardRef as forwardRef36,
28066
28914
  Suspense as Suspense22,
28067
28915
  useCallback as useCallback122,
@@ -28520,7 +29368,7 @@ class ThumbnailEmitter {
28520
29368
  };
28521
29369
  }
28522
29370
  var useBufferStateEmitter = (emitter) => {
28523
- const bufferManager = useContext45(Internals.BufferingContextReact);
29371
+ const bufferManager = useContext46(Internals.BufferingContextReact);
28524
29372
  if (!bufferManager) {
28525
29373
  throw new Error("BufferingContextReact not found");
28526
29374
  }
@@ -28623,12 +29471,13 @@ var usePlayer = () => {
28623
29471
  }
28624
29472
  const { buffering } = bufferingContext;
28625
29473
  const seek2 = useCallback36((newFrame) => {
29474
+ const frameToSeekTo = config ? Internals.TimelinePosition.clampFrameToCompositionRange(newFrame, config.durationInFrames) : Math.max(0, newFrame);
28626
29475
  if (video?.id) {
28627
- setTimelinePosition((c2) => ({ ...c2, [video.id]: newFrame }));
29476
+ setTimelinePosition((c2) => ({ ...c2, [video.id]: frameToSeekTo }));
28628
29477
  }
28629
- frameRef.current = newFrame;
28630
- emitter.dispatchSeek(newFrame);
28631
- }, [emitter, setTimelinePosition, video?.id]);
29478
+ frameRef.current = frameToSeekTo;
29479
+ emitter.dispatchSeek(frameToSeekTo);
29480
+ }, [config, emitter, setTimelinePosition, video?.id]);
28632
29481
  const play = useCallback36((e) => {
28633
29482
  if (imperativePlaying.current) {
28634
29483
  return;
@@ -28977,11 +29826,11 @@ var usePlayback = ({
28977
29826
  const frame = Internals.Timeline.useTimelinePosition();
28978
29827
  const { playing, pause, emitter, isPlaying } = usePlayer();
28979
29828
  const setFrame = Internals.Timeline.useTimelineSetFrame();
28980
- const sharedAudioContext = useContext46(Internals.SharedAudioContext);
29829
+ const sharedAudioContext = useContext47(Internals.SharedAudioContext);
28981
29830
  const logLevel = Internals.useLogLevel();
28982
29831
  const isBackgroundedRef = useIsBackgrounded();
28983
29832
  const lastTimeUpdateTimestamp = useRef46(0);
28984
- const context = useContext46(Internals.BufferingContextReact);
29833
+ const context = useContext47(Internals.BufferingContextReact);
28985
29834
  if (!context) {
28986
29835
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
28987
29836
  }
@@ -29195,12 +30044,22 @@ var usePlayback = ({
29195
30044
  }, [emitter, frame]);
29196
30045
  };
29197
30046
  var elementSizeHooks = [];
29198
- var useElementSize = (ref, options2) => {
30047
+ var getElement = (source) => {
30048
+ if (!source) {
30049
+ return null;
30050
+ }
30051
+ if ("current" in source) {
30052
+ return source.current;
30053
+ }
30054
+ return source;
30055
+ };
30056
+ var useElementSize = (source, options2) => {
29199
30057
  const [size4, setSize] = useState42(() => {
29200
- if (!ref.current) {
30058
+ const element = getElement(source);
30059
+ if (!element) {
29201
30060
  return null;
29202
30061
  }
29203
- const rect = ref.current.getClientRects();
30062
+ const rect = element.getClientRects();
29204
30063
  if (!rect[0]) {
29205
30064
  return null;
29206
30065
  }
@@ -29249,10 +30108,11 @@ var useElementSize = (ref, options2) => {
29249
30108
  });
29250
30109
  }, [options2.shouldApplyCssTransforms]);
29251
30110
  const updateSize = useCallback210(() => {
29252
- if (!ref.current) {
30111
+ const element = getElement(source);
30112
+ if (!element) {
29253
30113
  return;
29254
30114
  }
29255
- const rect = ref.current.getClientRects();
30115
+ const rect = element.getClientRects();
29256
30116
  if (!rect[0]) {
29257
30117
  setSize(null);
29258
30118
  return;
@@ -29273,21 +30133,24 @@ var useElementSize = (ref, options2) => {
29273
30133
  }
29274
30134
  };
29275
30135
  });
29276
- }, [ref]);
30136
+ }, [source]);
30137
+ useEffect62(() => {
30138
+ updateSize();
30139
+ }, [updateSize]);
29277
30140
  useEffect62(() => {
29278
30141
  if (!observer) {
29279
30142
  return;
29280
30143
  }
29281
- const { current } = ref;
29282
- if (current) {
29283
- observer.observe(current);
30144
+ const element = getElement(source);
30145
+ if (element) {
30146
+ observer.observe(element);
29284
30147
  }
29285
30148
  return () => {
29286
- if (current) {
29287
- observer.unobserve(current);
30149
+ if (element) {
30150
+ observer.unobserve(element);
29288
30151
  }
29289
30152
  };
29290
- }, [observer, ref, updateSize]);
30153
+ }, [observer, source]);
29291
30154
  useEffect62(() => {
29292
30155
  if (!options2.triggerOnWindowResize) {
29293
30156
  return;
@@ -31441,7 +32304,7 @@ var useThumbnail = () => {
31441
32304
  }, [emitter]);
31442
32305
  return returnValue;
31443
32306
  };
31444
- var reactVersion2 = React132.version.split(".")[0];
32307
+ var reactVersion2 = React133.version.split(".")[0];
31445
32308
  if (reactVersion2 === "0") {
31446
32309
  throw new Error(`Version ${reactVersion2} of "react" is not supported by Remotion`);
31447
32310
  }
@@ -32408,7 +33271,7 @@ var UNDERLAY_RED = curriedTransparentize$1(0.9, RED);
32408
33271
  var BLUE_TEXT = curriedDarken$1(0.3, "#42e9f5");
32409
33272
 
32410
33273
  // src/components/homepage/layout/use-color-mode.tsx
32411
- import React57, { useContext as useContext47, useMemo as useMemo55 } from "react";
33274
+ import React57, { useContext as useContext48, useMemo as useMemo55 } from "react";
32412
33275
  import { jsx as jsx59 } from "react/jsx-runtime";
32413
33276
  var Context = React57.createContext(undefined);
32414
33277
  var ColorModeProvider = ({
@@ -32425,7 +33288,7 @@ var ColorModeProvider = ({
32425
33288
  });
32426
33289
  };
32427
33290
  function useColorMode() {
32428
- const context = useContext47(Context);
33291
+ const context = useContext48(Context);
32429
33292
  if (context === null || context === undefined) {
32430
33293
  throw new Error("ColorModeProvider");
32431
33294
  }
@@ -32433,13 +33296,12 @@ function useColorMode() {
32433
33296
  }
32434
33297
 
32435
33298
  // ../media/dist/esm/index.mjs
32436
- import { useState as useState311 } from "react";
32437
- import { useMemo as useMemo312 } from "react";
33299
+ import { useMemo as useMemo312, useState as useState311 } from "react";
32438
33300
  import { useContext as useContext212, useEffect as useEffect44, useMemo as useMemo57, useRef as useRef49, useState as useState40 } from "react";
32439
33301
  import { ALL_FORMATS, Input as Input2, UrlSource } from "mediabunny";
32440
33302
  import { AudioBufferSink, InputDisposedError } from "mediabunny";
32441
33303
  import { CanvasSink } from "mediabunny";
32442
- import { useContext as useContext49, useLayoutEffect as useLayoutEffect18 } from "react";
33304
+ import { useContext as useContext50, useLayoutEffect as useLayoutEffect18 } from "react";
32443
33305
  import { jsx as jsx60 } from "react/jsx-runtime";
32444
33306
  import { useContext as useContext312, useLayoutEffect as useLayoutEffect24, useMemo as useMemo213, useState as useState212 } from "react";
32445
33307
  import React211 from "react";
@@ -32455,10 +33317,10 @@ import {
32455
33317
  } from "mediabunny";
32456
33318
  import { jsx as jsx216 } from "react/jsx-runtime";
32457
33319
  import { jsx as jsx316 } from "react/jsx-runtime";
32458
- import React58, { useMemo as useMemo63, useState as useState63 } from "react";
33320
+ import React63, { useMemo as useMemo63, useState as useState63 } from "react";
32459
33321
  import {
32460
33322
  useCallback as useCallback38,
32461
- useContext as useContext48,
33323
+ useContext as useContext49,
32462
33324
  useEffect as useEffect212,
32463
33325
  useLayoutEffect as useLayoutEffect34,
32464
33326
  useMemo as useMemo412,
@@ -34375,7 +35237,7 @@ var useCommonEffects = ({
34375
35237
  logLevel,
34376
35238
  label: label3
34377
35239
  }) => {
34378
- const sharedAudioContext = useContext49(Internals.SharedAudioContext);
35240
+ const sharedAudioContext = useContext50(Internals.SharedAudioContext);
34379
35241
  useLayoutEffect18(() => {
34380
35242
  const mediaPlayer = mediaPlayerRef.current;
34381
35243
  if (!mediaPlayer)
@@ -36870,14 +37732,17 @@ var audioSchema = {
36870
37732
  max: 20,
36871
37733
  step: 0.01,
36872
37734
  default: 1,
36873
- description: "Volume"
37735
+ description: "Volume",
37736
+ hiddenFromList: false
36874
37737
  },
36875
37738
  playbackRate: {
36876
37739
  type: "number",
36877
37740
  min: 0.1,
36878
37741
  step: 0.01,
36879
37742
  default: 1,
36880
- description: "Playback Rate"
37743
+ description: "Playback Rate",
37744
+ hiddenFromList: false,
37745
+ keyframable: false
36881
37746
  },
36882
37747
  loop: { type: "boolean", default: false, description: "Loop" },
36883
37748
  hidden: Internals.hiddenField
@@ -36962,7 +37827,11 @@ var AudioInner = (props) => {
36962
37827
  })
36963
37828
  });
36964
37829
  };
36965
- var Audio2 = Internals.wrapInSchema(AudioInner, audioSchema);
37830
+ var Audio2 = Internals.wrapInSchema({
37831
+ Component: AudioInner,
37832
+ schema: audioSchema,
37833
+ supportsEffects: false
37834
+ });
36966
37835
  Internals.addSequenceStackTraces(Audio2);
36967
37836
  var cache2 = new Map;
36968
37837
  var cacheVideoFrame = (src, sourceCanvas) => {
@@ -37042,7 +37911,8 @@ var VideoForPreviewAssertedShowing = ({
37042
37911
  _experimentalInitiallyDrawCachedFrame,
37043
37912
  effects,
37044
37913
  setMediaDurationInSeconds,
37045
- refForOutline
37914
+ refForOutline,
37915
+ ...props
37046
37916
  }) => {
37047
37917
  const src = usePreload22(unpreloadedSrc);
37048
37918
  const canvasRef = useRef211(null);
@@ -37057,7 +37927,7 @@ var VideoForPreviewAssertedShowing = ({
37057
37927
  const [shouldFallbackToNativeVideo, setShouldFallbackToNativeVideo] = useState43(false);
37058
37928
  const [playing] = Timeline2.usePlayingState();
37059
37929
  const { playbackRate: globalPlaybackRate } = Internals.usePlaybackRate();
37060
- const sharedAudioContext = useContext48(SharedAudioContext22);
37930
+ const sharedAudioContext = useContext49(SharedAudioContext22);
37061
37931
  const buffer = useBufferState();
37062
37932
  const canvasRefCallback = useCallback38((canvas) => {
37063
37933
  canvasRef.current = canvas;
@@ -37083,7 +37953,7 @@ var VideoForPreviewAssertedShowing = ({
37083
37953
  effectsRef.current = effects;
37084
37954
  const effectChainStateRef = useRef211(effectChainState);
37085
37955
  effectChainStateRef.current = effectChainState;
37086
- const parentSequence = useContext48(SequenceContext22);
37956
+ const parentSequence = useContext49(SequenceContext22);
37087
37957
  const isPremounting = Boolean(parentSequence?.premounting);
37088
37958
  const isPostmounting = Boolean(parentSequence?.postmounting);
37089
37959
  const sequenceOffset = ((parentSequence?.cumulatedFrom ?? 0) + (parentSequence?.relativeFrom ?? 0)) / videoConfig.fps;
@@ -37091,7 +37961,7 @@ var VideoForPreviewAssertedShowing = ({
37091
37961
  const currentTimeRef = useRef211(currentTime);
37092
37962
  currentTimeRef.current = currentTime;
37093
37963
  const preloadedSrc = usePreload22(src);
37094
- const buffering = useContext48(Internals.BufferingContextReact);
37964
+ const buffering = useContext49(Internals.BufferingContextReact);
37095
37965
  if (!buffering) {
37096
37966
  throw new Error("useMediaPlayback must be used inside a <BufferingContext>");
37097
37967
  }
@@ -37135,8 +38005,8 @@ var VideoForPreviewAssertedShowing = ({
37135
38005
  if (!_experimentalInitiallyDrawCachedFrame) {
37136
38006
  return;
37137
38007
  }
37138
- const canvas = canvasRef.current;
37139
38008
  return () => {
38009
+ const canvas = canvasRef.current;
37140
38010
  if (!canvas || !hasDrawnRealFrameRef.current || isPremountingRef.current) {
37141
38011
  return;
37142
38012
  }
@@ -37340,6 +38210,7 @@ var VideoForPreviewAssertedShowing = ({
37340
38210
  }, [objectFitProp, style2]);
37341
38211
  if (shouldFallbackToNativeVideo && !disallowFallbackToOffthreadVideo) {
37342
38212
  return /* @__PURE__ */ jsx412(Html5Video, {
38213
+ ...props,
37343
38214
  ref: fallbackVideoRef,
37344
38215
  src,
37345
38216
  style: actualStyle,
@@ -37361,6 +38232,7 @@ var VideoForPreviewAssertedShowing = ({
37361
38232
  return null;
37362
38233
  }
37363
38234
  return /* @__PURE__ */ jsx412("canvas", {
38235
+ ...props,
37364
38236
  ref: canvasRefCallback,
37365
38237
  style: actualStyle,
37366
38238
  className: classNameValue
@@ -37423,7 +38295,8 @@ var VideoForRendering2 = ({
37423
38295
  credentials,
37424
38296
  requestInit,
37425
38297
  objectFit: objectFitProp,
37426
- effects
38298
+ effects,
38299
+ ...props
37427
38300
  }) => {
37428
38301
  if (!src) {
37429
38302
  throw new TypeError("No `src` was passed to <Video>.");
@@ -37658,6 +38531,7 @@ var VideoForRendering2 = ({
37658
38531
  }, [objectFitProp, style2]);
37659
38532
  if (replaceWithOffthreadVideo) {
37660
38533
  const fallback = /* @__PURE__ */ jsx510(Internals.InnerOffthreadVideo, {
38534
+ ...props,
37661
38535
  src,
37662
38536
  playbackRate: playbackRate ?? 1,
37663
38537
  muted: muted ?? false,
@@ -37713,6 +38587,7 @@ var VideoForRendering2 = ({
37713
38587
  return null;
37714
38588
  }
37715
38589
  return /* @__PURE__ */ jsx510("canvas", {
38590
+ ...props,
37716
38591
  ref: canvasRef,
37717
38592
  style: styleWithObjectFit,
37718
38593
  className: classNameValue
@@ -37726,14 +38601,17 @@ var videoSchema = {
37726
38601
  max: 20,
37727
38602
  step: 0.01,
37728
38603
  default: 1,
37729
- description: "Volume"
38604
+ description: "Volume",
38605
+ hiddenFromList: false
37730
38606
  },
37731
38607
  playbackRate: {
37732
38608
  type: "number",
37733
38609
  min: 0.1,
37734
38610
  step: 0.01,
37735
38611
  default: 1,
37736
- description: "Playback Rate"
38612
+ description: "Playback Rate",
38613
+ hiddenFromList: false,
38614
+ keyframable: false
37737
38615
  },
37738
38616
  hidden: {
37739
38617
  type: "boolean",
@@ -37774,7 +38652,8 @@ var InnerVideo = ({
37774
38652
  _experimentalInitiallyDrawCachedFrame,
37775
38653
  effects,
37776
38654
  setMediaDurationInSeconds,
37777
- refForOutline
38655
+ refForOutline,
38656
+ ...props
37778
38657
  }) => {
37779
38658
  const environment = useRemotionEnvironment();
37780
38659
  if (typeof src !== "string") {
@@ -37795,6 +38674,7 @@ var InnerVideo = ({
37795
38674
  validateMediaProps22({ playbackRate, volume }, "Video");
37796
38675
  if (environment.isRendering) {
37797
38676
  return /* @__PURE__ */ jsx65(VideoForRendering2, {
38677
+ ...props,
37798
38678
  audioStreamIndex: audioStreamIndex ?? 0,
37799
38679
  className: className2,
37800
38680
  delayRenderRetries: delayRenderRetries ?? null,
@@ -37823,6 +38703,7 @@ var InnerVideo = ({
37823
38703
  });
37824
38704
  }
37825
38705
  return /* @__PURE__ */ jsx65(VideoForPreview2, {
38706
+ ...props,
37826
38707
  setMediaDurationInSeconds,
37827
38708
  audioStreamIndex: audioStreamIndex ?? 0,
37828
38709
  className: className2,
@@ -37886,7 +38767,8 @@ var VideoInner = ({
37886
38767
  effects,
37887
38768
  durationInFrames,
37888
38769
  from,
37889
- hidden
38770
+ hidden,
38771
+ ...props
37890
38772
  }) => {
37891
38773
  const fallbackLogLevel = Internals.useLogLevel();
37892
38774
  const [mediaVolume] = Internals.useMediaVolumeState();
@@ -37933,7 +38815,7 @@ var VideoInner = ({
37933
38815
  overrideId: controls?.overrideId ?? null
37934
38816
  });
37935
38817
  const memoizedEffectDefinitions = Internals.useMemoizedEffectDefinitions(effects ?? []);
37936
- const refForOutline = React58.useRef(null);
38818
+ const refForOutline = React63.useRef(null);
37937
38819
  if (sequenceDurationInFrames === 0) {
37938
38820
  return null;
37939
38821
  }
@@ -37952,6 +38834,7 @@ var VideoInner = ({
37952
38834
  showInTimeline: showInTimeline ?? true,
37953
38835
  hidden,
37954
38836
  children: /* @__PURE__ */ jsx65(InnerVideo, {
38837
+ ...props,
37955
38838
  audioStreamIndex: audioStreamIndex ?? 0,
37956
38839
  className: className2,
37957
38840
  delayRenderRetries: delayRenderRetries ?? null,
@@ -37986,7 +38869,11 @@ var VideoInner = ({
37986
38869
  })
37987
38870
  });
37988
38871
  };
37989
- var Video = Internals.wrapInSchema(VideoInner, videoSchema);
38872
+ var Video = Internals.wrapInSchema({
38873
+ Component: VideoInner,
38874
+ schema: videoSchema,
38875
+ supportsEffects: true
38876
+ });
37990
38877
  Internals.addSequenceStackTraces(Video);
37991
38878
 
37992
38879
  // src/components/homepage/Demo/Comp.tsx
@@ -39290,7 +40177,7 @@ import {
39290
40177
  import { BufferTarget, StreamTarget } from "mediabunny";
39291
40178
 
39292
40179
  // ../core/dist/esm/version.mjs
39293
- var VERSION2 = "4.0.471";
40180
+ var VERSION2 = "4.0.473";
39294
40181
 
39295
40182
  // ../web-renderer/dist/esm/index.mjs
39296
40183
  import { AudioSample, VideoSample } from "mediabunny";
@@ -40033,7 +40920,8 @@ function createScaffold({
40033
40920
  videoEnabled,
40034
40921
  defaultCodec,
40035
40922
  defaultOutName,
40036
- allowHtmlInCanvas
40923
+ allowHtmlInCanvas,
40924
+ pixelDensity
40037
40925
  }) {
40038
40926
  if (!ReactDOM6.createRoot) {
40039
40927
  throw new Error("@remotion/web-renderer requires React 18 or higher");
@@ -40125,19 +41013,22 @@ function createScaffold({
40125
41013
  },
40126
41014
  folders: []
40127
41015
  },
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
41016
+ children: /* @__PURE__ */ jsx217(Internals.PixelDensityContext.Provider, {
41017
+ value: pixelDensity,
41018
+ children: /* @__PURE__ */ jsx217(Internals.RenderAssetManagerProvider, {
41019
+ collectAssets,
41020
+ children: /* @__PURE__ */ jsx217(UpdateTime, {
41021
+ audioEnabled,
41022
+ videoEnabled,
41023
+ logLevel,
41024
+ compId: id,
41025
+ initialFrame,
41026
+ timeUpdater,
41027
+ children: /* @__PURE__ */ jsx217(Internals.CanUseRemotionHooks.Provider, {
41028
+ value: true,
41029
+ children: /* @__PURE__ */ jsx217(Component, {
41030
+ ...resolvedProps
41031
+ })
40141
41032
  })
40142
41033
  })
40143
41034
  })
@@ -43084,6 +43975,8 @@ var drawText = ({
43084
43975
  span.textContent = transformedText;
43085
43976
  const tokens = findWords(span);
43086
43977
  const textShadows = parseTextShadow(textShadowValue);
43978
+ const ctm = contextToDraw.getTransform();
43979
+ const blurScale = Math.hypot(ctm.a, ctm.b);
43087
43980
  const { strokeFirst } = parsePaintOrder(paintOrder);
43088
43981
  for (const token of tokens) {
43089
43982
  const measurements = contextToDraw.measureText(originalText);
@@ -43096,9 +43989,9 @@ var drawText = ({
43096
43989
  for (let i = textShadows.length - 1;i >= 0; i--) {
43097
43990
  const shadow = textShadows[i];
43098
43991
  contextToDraw.shadowColor = shadow.color;
43099
- contextToDraw.shadowBlur = shadow.blurRadius;
43100
- contextToDraw.shadowOffsetX = shadow.offsetX;
43101
- contextToDraw.shadowOffsetY = shadow.offsetY;
43992
+ contextToDraw.shadowBlur = shadow.blurRadius * blurScale;
43993
+ contextToDraw.shadowOffsetX = shadow.offsetX * ctm.a + shadow.offsetY * ctm.c;
43994
+ contextToDraw.shadowOffsetY = shadow.offsetX * ctm.b + shadow.offsetY * ctm.d;
43102
43995
  contextToDraw.fillText(token.text, x, y);
43103
43996
  }
43104
43997
  contextToDraw.shadowColor = "transparent";
@@ -43603,7 +44496,8 @@ var internalRenderMediaOnWeb = async ({
43603
44496
  initialFrame: 0,
43604
44497
  defaultCodec: resolved.defaultCodec,
43605
44498
  defaultOutName: resolved.defaultOutName,
43606
- allowHtmlInCanvas
44499
+ allowHtmlInCanvas,
44500
+ pixelDensity: scale
43607
44501
  }), 0);
43608
44502
  const {
43609
44503
  delayRenderScope,
@@ -43920,7 +44814,7 @@ var renderMediaOnWeb = (options2) => {
43920
44814
  };
43921
44815
 
43922
44816
  // src/components/homepage/Demo/DemoRender.tsx
43923
- import React70, { useCallback as useCallback47 } from "react";
44817
+ import React69, { useCallback as useCallback47 } from "react";
43924
44818
  import { z } from "zod";
43925
44819
 
43926
44820
  // src/components/homepage/Demo/DemoErrorIcon.tsx
@@ -44118,7 +45012,7 @@ var style2 = {
44118
45012
  justifyContent: "center"
44119
45013
  };
44120
45014
  var RenderButton = ({ renderData, onError, playerRef }) => {
44121
- const [state, setState] = React70.useState({
45015
+ const [state, setState] = React69.useState({
44122
45016
  type: "idle"
44123
45017
  });
44124
45018
  const triggerRender = useCallback47(async () => {
@@ -44693,7 +45587,7 @@ var PlayerVolume = ({ playerRef }) => {
44693
45587
  };
44694
45588
 
44695
45589
  // src/components/homepage/Demo/PlayPauseButton.tsx
44696
- import React75, { useCallback as useCallback51, useEffect as useEffect56 } from "react";
45590
+ import React73, { useCallback as useCallback51, useEffect as useEffect56 } from "react";
44697
45591
  import { jsx as jsx107 } from "react/jsx-runtime";
44698
45592
  var playerButtonStyle2 = {
44699
45593
  appearance: "none",
@@ -44710,7 +45604,7 @@ var playerButtonStyle2 = {
44710
45604
  color: PALETTE.TEXT_COLOR
44711
45605
  };
44712
45606
  var PlayPauseButton = ({ playerRef }) => {
44713
- const [playing, setPlaying] = React75.useState(true);
45607
+ const [playing, setPlaying] = React73.useState(true);
44714
45608
  useEffect56(() => {
44715
45609
  const { current } = playerRef;
44716
45610
  if (!current) {
@@ -44748,7 +45642,7 @@ var PlayPauseButton = ({ playerRef }) => {
44748
45642
  };
44749
45643
 
44750
45644
  // src/components/homepage/Demo/TimeDisplay.tsx
44751
- import React76, { useEffect as useEffect57 } from "react";
45645
+ import React75, { useEffect as useEffect57 } from "react";
44752
45646
  import { jsx as jsx108 } from "react/jsx-runtime";
44753
45647
  var formatTime2 = (timeInSeconds) => {
44754
45648
  const minutes = Math.floor(timeInSeconds / 60);
@@ -44756,7 +45650,7 @@ var formatTime2 = (timeInSeconds) => {
44756
45650
  return `${String(minutes)}:${String(seconds).padStart(2, "0")}`;
44757
45651
  };
44758
45652
  var TimeDisplay = ({ fps, playerRef }) => {
44759
- const [time, setTime] = React76.useState(0);
45653
+ const [time, setTime] = React75.useState(0);
44760
45654
  useEffect57(() => {
44761
45655
  const { current } = playerRef;
44762
45656
  if (!current) {
@@ -44835,7 +45729,7 @@ var PlayerControls = ({ playerRef, durationInFrames, fps, children }) => {
44835
45729
  };
44836
45730
 
44837
45731
  // src/components/homepage/Demo/ThemeNudge.tsx
44838
- import React77 from "react";
45732
+ import React76 from "react";
44839
45733
  import { jsx as jsx110, jsxs as jsxs38 } from "react/jsx-runtime";
44840
45734
  var origWidth3 = 37;
44841
45735
  var scale3 = 0.4;
@@ -44858,7 +45752,7 @@ var Icon6 = () => {
44858
45752
  };
44859
45753
  var ThemeNudge = () => {
44860
45754
  const { colorMode, setColorMode } = useColorMode();
44861
- const toggleTheme = React77.useCallback((e) => {
45755
+ const toggleTheme = React76.useCallback((e) => {
44862
45756
  e.preventDefault();
44863
45757
  setColorMode(colorMode === "dark" ? "light" : "dark");
44864
45758
  }, [colorMode, setColorMode]);