@remotion/promo-pages 4.0.475 → 4.0.477

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/dist/Homepage.js +1397 -949
  2. package/dist/cn.d.ts +2 -0
  3. package/dist/cn.js +5 -0
  4. package/dist/components/3DEngine/ButtonDemo.d.ts +2 -0
  5. package/dist/components/3DEngine/ButtonDemo.js +43 -0
  6. package/dist/components/3DEngine/Faces.d.ts +5 -0
  7. package/dist/components/3DEngine/Faces.js +7 -0
  8. package/dist/components/3DEngine/Outer.d.ts +8 -0
  9. package/dist/components/3DEngine/Outer.js +56 -0
  10. package/dist/components/3DEngine/Switch.d.ts +4 -0
  11. package/dist/components/3DEngine/Switch.js +4 -0
  12. package/dist/components/3DEngine/get-child-node-from.d.ts +1 -0
  13. package/dist/components/3DEngine/get-child-node-from.js +14 -0
  14. package/dist/components/3DEngine/hover-transforms.d.ts +9 -0
  15. package/dist/components/3DEngine/hover-transforms.js +177 -0
  16. package/dist/components/BackButton.d.ts +6 -0
  17. package/dist/components/BackButton.js +9 -0
  18. package/dist/components/CommandCopyButton.d.ts +5 -0
  19. package/dist/components/CommandCopyButton.js +4 -0
  20. package/dist/components/Homepage.d.ts +6 -0
  21. package/dist/components/Homepage.js +20 -0
  22. package/dist/components/ManageTeamMembers.d.ts +2 -0
  23. package/dist/components/ManageTeamMembers.js +42 -0
  24. package/dist/components/Spinner.d.ts +3 -0
  25. package/dist/components/Spinner.js +4 -0
  26. package/dist/components/TeamPicture.d.ts +1 -0
  27. package/dist/components/TeamPicture.js +4 -0
  28. package/dist/components/design.d.ts +1 -0
  29. package/dist/components/design.js +33 -0
  30. package/dist/components/experts/ExpertsPage.d.ts +11 -0
  31. package/dist/components/experts/ExpertsPage.js +50 -0
  32. package/dist/components/experts/experts-data.d.ts +19 -0
  33. package/dist/components/experts/experts-data.js +391 -0
  34. package/dist/components/experts/experts-icons.d.ts +8 -0
  35. package/dist/components/experts/experts-icons.js +42 -0
  36. package/dist/components/experts.d.ts +3 -0
  37. package/dist/components/experts.js +2 -0
  38. package/dist/components/homepage/AutomationsSection.d.ts +3 -0
  39. package/dist/components/homepage/AutomationsSection.js +85 -0
  40. package/dist/components/homepage/BackgroundAnimation.d.ts +2 -0
  41. package/dist/components/homepage/BackgroundAnimation.js +66 -0
  42. package/dist/components/homepage/ChooseTemplate.d.ts +2 -0
  43. package/dist/components/homepage/ChooseTemplate.js +25 -0
  44. package/dist/components/homepage/CommunityStats.d.ts +3 -0
  45. package/dist/components/homepage/CommunityStats.js +6 -0
  46. package/dist/components/homepage/CommunityStatsItems.d.ts +7 -0
  47. package/dist/components/homepage/CommunityStatsItems.js +58 -0
  48. package/dist/components/homepage/Demo/Card.d.ts +15 -0
  49. package/dist/components/homepage/Demo/Card.js +174 -0
  50. package/dist/components/homepage/Demo/Cards.d.ts +15 -0
  51. package/dist/components/homepage/Demo/Cards.js +57 -0
  52. package/dist/components/homepage/Demo/Comp.d.ts +38 -0
  53. package/dist/components/homepage/Demo/Comp.js +72 -0
  54. package/dist/components/homepage/Demo/CurrentCountry.d.ts +9 -0
  55. package/dist/components/homepage/Demo/CurrentCountry.js +48 -0
  56. package/dist/components/homepage/Demo/DemoError.d.ts +2 -0
  57. package/dist/components/homepage/Demo/DemoError.js +10 -0
  58. package/dist/components/homepage/Demo/DemoErrorIcon.d.ts +2 -0
  59. package/dist/components/homepage/Demo/DemoErrorIcon.js +16 -0
  60. package/dist/components/homepage/Demo/DemoRender.d.ts +33 -0
  61. package/dist/components/homepage/Demo/DemoRender.js +107 -0
  62. package/dist/components/homepage/Demo/DigitWheel.d.ts +9 -0
  63. package/dist/components/homepage/Demo/DigitWheel.js +94 -0
  64. package/dist/components/homepage/Demo/DisplayedEmoji.d.ts +5 -0
  65. package/dist/components/homepage/Demo/DisplayedEmoji.js +59 -0
  66. package/dist/components/homepage/Demo/DoneCheckmark.d.ts +2 -0
  67. package/dist/components/homepage/Demo/DoneCheckmark.js +20 -0
  68. package/dist/components/homepage/Demo/DownloadNudge.d.ts +2 -0
  69. package/dist/components/homepage/Demo/DownloadNudge.js +27 -0
  70. package/dist/components/homepage/Demo/DragAndDropNudge.d.ts +3 -0
  71. package/dist/components/homepage/Demo/DragAndDropNudge.js +26 -0
  72. package/dist/components/homepage/Demo/EmojiCard.d.ts +10 -0
  73. package/dist/components/homepage/Demo/EmojiCard.js +120 -0
  74. package/dist/components/homepage/Demo/Minus.d.ts +5 -0
  75. package/dist/components/homepage/Demo/Minus.js +11 -0
  76. package/dist/components/homepage/Demo/PlayPauseButton.d.ts +5 -0
  77. package/dist/components/homepage/Demo/PlayPauseButton.js +47 -0
  78. package/dist/components/homepage/Demo/PlayerControls.d.ts +8 -0
  79. package/dist/components/homepage/Demo/PlayerControls.js +15 -0
  80. package/dist/components/homepage/Demo/PlayerSeekBar.d.ts +11 -0
  81. package/dist/components/homepage/Demo/PlayerSeekBar.js +216 -0
  82. package/dist/components/homepage/Demo/PlayerVolume.d.ts +5 -0
  83. package/dist/components/homepage/Demo/PlayerVolume.js +53 -0
  84. package/dist/components/homepage/Demo/Progress.d.ts +4 -0
  85. package/dist/components/homepage/Demo/Progress.js +14 -0
  86. package/dist/components/homepage/Demo/Spinner.d.ts +5 -0
  87. package/dist/components/homepage/Demo/Spinner.js +37 -0
  88. package/dist/components/homepage/Demo/Switcher.d.ts +6 -0
  89. package/dist/components/homepage/Demo/Switcher.js +25 -0
  90. package/dist/components/homepage/Demo/Temperature.d.ts +6 -0
  91. package/dist/components/homepage/Demo/Temperature.js +21 -0
  92. package/dist/components/homepage/Demo/TemperatureNumber.d.ts +5 -0
  93. package/dist/components/homepage/Demo/TemperatureNumber.js +36 -0
  94. package/dist/components/homepage/Demo/ThemeNudge.d.ts +3 -0
  95. package/dist/components/homepage/Demo/ThemeNudge.js +35 -0
  96. package/dist/components/homepage/Demo/TimeDisplay.d.ts +6 -0
  97. package/dist/components/homepage/Demo/TimeDisplay.js +27 -0
  98. package/dist/components/homepage/Demo/TrendingRepos.d.ts +6 -0
  99. package/dist/components/homepage/Demo/TrendingRepos.js +65 -0
  100. package/dist/components/homepage/Demo/icons.d.ts +10 -0
  101. package/dist/components/homepage/Demo/icons.js +22 -0
  102. package/dist/components/homepage/Demo/index.d.ts +2 -0
  103. package/dist/components/homepage/Demo/index.js +95 -0
  104. package/dist/components/homepage/Demo/math.d.ts +10 -0
  105. package/dist/components/homepage/Demo/math.js +29 -0
  106. package/dist/components/homepage/Demo/types.d.ts +6 -0
  107. package/dist/components/homepage/Demo/types.js +0 -0
  108. package/dist/components/homepage/EditorStarterSection.d.ts +3 -0
  109. package/dist/components/homepage/EditorStarterSection.js +8 -0
  110. package/dist/components/homepage/EvaluateRemotion.d.ts +3 -0
  111. package/dist/components/homepage/EvaluateRemotion.js +21 -0
  112. package/dist/components/homepage/FreePricing.d.ts +4 -0
  113. package/dist/components/homepage/FreePricing.js +133 -0
  114. package/dist/components/homepage/GetStartedStrip.d.ts +2 -0
  115. package/dist/components/homepage/GetStartedStrip.js +14 -0
  116. package/dist/components/homepage/GitHubButton.d.ts +2 -0
  117. package/dist/components/homepage/GitHubButton.js +7 -0
  118. package/dist/components/homepage/IconForTemplate.d.ts +6 -0
  119. package/dist/components/homepage/IconForTemplate.js +105 -0
  120. package/dist/components/homepage/IfYouKnowReact.d.ts +3 -0
  121. package/dist/components/homepage/IfYouKnowReact.js +23 -0
  122. package/dist/components/homepage/MoreTemplatesButton.d.ts +2 -0
  123. package/dist/components/homepage/MoreTemplatesButton.js +11 -0
  124. package/dist/components/homepage/MuxVideo.d.ts +7 -0
  125. package/dist/components/homepage/MuxVideo.js +45 -0
  126. package/dist/components/homepage/NewsletterButton.d.ts +2 -0
  127. package/dist/components/homepage/NewsletterButton.js +38 -0
  128. package/dist/components/homepage/ParameterizeAndEdit.d.ts +2 -0
  129. package/dist/components/homepage/ParameterizeAndEdit.js +22 -0
  130. package/dist/components/homepage/Pricing.d.ts +2 -0
  131. package/dist/components/homepage/Pricing.js +15 -0
  132. package/dist/components/homepage/PricingBulletPoint.d.ts +6 -0
  133. package/dist/components/homepage/PricingBulletPoint.js +19 -0
  134. package/dist/components/homepage/RealMp4Videos.d.ts +2 -0
  135. package/dist/components/homepage/RealMp4Videos.js +41 -0
  136. package/dist/components/homepage/Spacer.d.ts +2 -0
  137. package/dist/components/homepage/Spacer.js +4 -0
  138. package/dist/components/homepage/TemplateIcon.d.ts +5 -0
  139. package/dist/components/homepage/TemplateIcon.js +24 -0
  140. package/dist/components/homepage/TextInput.d.ts +7 -0
  141. package/dist/components/homepage/TextInput.js +34 -0
  142. package/dist/components/homepage/TrustedByBanner.d.ts +2 -0
  143. package/dist/components/homepage/TrustedByBanner.js +27 -0
  144. package/dist/components/homepage/VideoApps.d.ts +4 -0
  145. package/dist/components/homepage/VideoApps.js +72 -0
  146. package/dist/components/homepage/VideoAppsShowcase.d.ts +3 -0
  147. package/dist/components/homepage/VideoAppsShowcase.js +139 -0
  148. package/dist/components/homepage/VideoAppsTitle.d.ts +4 -0
  149. package/dist/components/homepage/VideoAppsTitle.js +4 -0
  150. package/dist/components/homepage/VideoPlayerWithControls.d.ts +20 -0
  151. package/dist/components/homepage/VideoPlayerWithControls.js +105 -0
  152. package/dist/components/homepage/WriteInReact.d.ts +2 -0
  153. package/dist/components/homepage/WriteInReact.js +10 -0
  154. package/dist/components/homepage/YouAreHere.d.ts +2 -0
  155. package/dist/components/homepage/YouAreHere.js +23 -0
  156. package/dist/components/homepage/layout/Button.d.ts +22 -0
  157. package/dist/components/homepage/layout/Button.js +30 -0
  158. package/dist/components/homepage/layout/colors.d.ts +13 -0
  159. package/dist/components/homepage/layout/colors.js +14 -0
  160. package/dist/components/homepage/layout/use-color-mode.d.ts +21 -0
  161. package/dist/components/homepage/layout/use-color-mode.js +22 -0
  162. package/dist/components/homepage/layout/use-el-size.d.ts +5 -0
  163. package/dist/components/homepage/layout/use-el-size.js +40 -0
  164. package/dist/components/homepage/layout/use-mobile-layout.d.ts +1 -0
  165. package/dist/components/homepage/layout/use-mobile-layout.js +6 -0
  166. package/dist/components/icons/blank.d.ts +3 -0
  167. package/dist/components/icons/blank.js +4 -0
  168. package/dist/components/icons/brain.d.ts +2 -0
  169. package/dist/components/icons/brain.js +4 -0
  170. package/dist/components/icons/clone.d.ts +2 -0
  171. package/dist/components/icons/clone.js +2 -0
  172. package/dist/components/icons/code-hike.d.ts +3 -0
  173. package/dist/components/icons/code-hike.js +4 -0
  174. package/dist/components/icons/cubes.d.ts +3 -0
  175. package/dist/components/icons/cubes.js +4 -0
  176. package/dist/components/icons/editor.d.ts +3 -0
  177. package/dist/components/icons/editor.js +4 -0
  178. package/dist/components/icons/electron.d.ts +4 -0
  179. package/dist/components/icons/electron.js +4 -0
  180. package/dist/components/icons/js.d.ts +3 -0
  181. package/dist/components/icons/js.js +4 -0
  182. package/dist/components/icons/music.d.ts +2 -0
  183. package/dist/components/icons/music.js +4 -0
  184. package/dist/components/icons/next.d.ts +4 -0
  185. package/dist/components/icons/next.js +4 -0
  186. package/dist/components/icons/overlay.d.ts +3 -0
  187. package/dist/components/icons/overlay.js +4 -0
  188. package/dist/components/icons/prompt-to-video.d.ts +2 -0
  189. package/dist/components/icons/prompt-to-video.js +4 -0
  190. package/dist/components/icons/recorder.d.ts +3 -0
  191. package/dist/components/icons/recorder.js +4 -0
  192. package/dist/components/icons/remix.d.ts +3 -0
  193. package/dist/components/icons/remix.js +4 -0
  194. package/dist/components/icons/render-server.d.ts +3 -0
  195. package/dist/components/icons/render-server.js +4 -0
  196. package/dist/components/icons/skia.d.ts +3 -0
  197. package/dist/components/icons/skia.js +4 -0
  198. package/dist/components/icons/stargazer.d.ts +3 -0
  199. package/dist/components/icons/stargazer.js +4 -0
  200. package/dist/components/icons/still.d.ts +3 -0
  201. package/dist/components/icons/still.js +4 -0
  202. package/dist/components/icons/tailwind.d.ts +3 -0
  203. package/dist/components/icons/tailwind.js +4 -0
  204. package/dist/components/icons/tiktok.d.ts +3 -0
  205. package/dist/components/icons/tiktok.js +4 -0
  206. package/dist/components/icons/timeline.d.ts +3 -0
  207. package/dist/components/icons/timeline.js +4 -0
  208. package/dist/components/icons/ts.d.ts +3 -0
  209. package/dist/components/icons/ts.js +4 -0
  210. package/dist/components/icons/undo.d.ts +3 -0
  211. package/dist/components/icons/undo.js +2 -0
  212. package/dist/components/icons/vercel.d.ts +4 -0
  213. package/dist/components/icons/vercel.js +4 -0
  214. package/dist/components/icons/waveform.d.ts +3 -0
  215. package/dist/components/icons/waveform.js +4 -0
  216. package/dist/components/prompts/CardLikeButton.d.ts +5 -0
  217. package/dist/components/prompts/CardLikeButton.js +49 -0
  218. package/dist/components/prompts/ClipboardIcon.d.ts +5 -0
  219. package/dist/components/prompts/ClipboardIcon.js +4 -0
  220. package/dist/components/prompts/CopyPromptButton.d.ts +4 -0
  221. package/dist/components/prompts/CopyPromptButton.js +13 -0
  222. package/dist/components/prompts/LikeButton.d.ts +5 -0
  223. package/dist/components/prompts/LikeButton.js +49 -0
  224. package/dist/components/prompts/MuxPlayer.d.ts +8 -0
  225. package/dist/components/prompts/MuxPlayer.js +21 -0
  226. package/dist/components/prompts/NewBackButton.d.ts +5 -0
  227. package/dist/components/prompts/NewBackButton.js +8 -0
  228. package/dist/components/prompts/Page.d.ts +8 -0
  229. package/dist/components/prompts/Page.js +7 -0
  230. package/dist/components/prompts/PromptsGallery.d.ts +7 -0
  231. package/dist/components/prompts/PromptsGallery.js +60 -0
  232. package/dist/components/prompts/PromptsShow.d.ts +5 -0
  233. package/dist/components/prompts/PromptsShow.js +17 -0
  234. package/dist/components/prompts/PromptsSubmit.d.ts +2 -0
  235. package/dist/components/prompts/PromptsSubmit.js +173 -0
  236. package/dist/components/prompts/config.d.ts +1 -0
  237. package/dist/components/prompts/config.js +1 -0
  238. package/dist/components/prompts/prompt-helpers.d.ts +8 -0
  239. package/dist/components/prompts/prompt-helpers.js +76 -0
  240. package/dist/components/prompts/prompt-types.d.ts +14 -0
  241. package/dist/components/prompts/prompt-types.js +0 -0
  242. package/dist/components/prompts/use-heart-animation.d.ts +5 -0
  243. package/dist/components/prompts/use-heart-animation.js +29 -0
  244. package/dist/components/team/TeamCards.d.ts +6 -0
  245. package/dist/components/team/TeamCards.js +19 -0
  246. package/dist/components/team/TitleTeamCards.d.ts +2 -0
  247. package/dist/components/team/TitleTeamCards.js +6 -0
  248. package/dist/components/team/TrustSection.d.ts +2 -0
  249. package/dist/components/team/TrustSection.js +59 -0
  250. package/dist/components/team.d.ts +3 -0
  251. package/dist/components/team.js +15 -0
  252. package/dist/components/template-modal-content.d.ts +5 -0
  253. package/dist/components/template-modal-content.js +73 -0
  254. package/dist/components/templates.d.ts +2 -0
  255. package/dist/components/templates.js +27 -0
  256. package/dist/design.js +1180 -766
  257. package/dist/experts.js +655 -554
  258. package/dist/helpers/mobile-layout.d.ts +1 -0
  259. package/dist/helpers/mobile-layout.js +6 -0
  260. package/dist/helpers/use-el-size.d.ts +5 -0
  261. package/dist/helpers/use-el-size.js +40 -0
  262. package/dist/homepage/Pricing.js +1174 -760
  263. package/dist/main.d.ts +1 -0
  264. package/dist/main.js +6 -0
  265. package/dist/prompts/PromptsGallery.js +1176 -762
  266. package/dist/prompts/PromptsShow.js +1180 -766
  267. package/dist/prompts/PromptsSubmit.js +1182 -768
  268. package/dist/prompts-show.d.ts +1 -0
  269. package/dist/prompts-show.js +20 -0
  270. package/dist/prompts-submit.d.ts +1 -0
  271. package/dist/prompts-submit.js +6 -0
  272. package/dist/prompts.d.ts +1 -0
  273. package/dist/prompts.js +6 -0
  274. package/dist/team.d.ts +1 -0
  275. package/dist/team.js +1172 -758
  276. package/dist/template-modal-content.js +1179 -765
  277. package/dist/templates.js +1172 -758
  278. package/package.json +13 -13
@@ -36,7 +36,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
36
36
  import * as React23 from "react";
37
37
  import * as React3 from "react";
38
38
  import { Fragment as Fragment2, jsx as jsx43 } from "react/jsx-runtime";
39
- import React52, { useCallback as useCallback26, useRef as useRef210, useState as useState22 } from "react";
39
+ import React52, { useCallback as useCallback27, useRef as useRef210, useState as useState22 } from "react";
40
40
 
41
41
  // ../../node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
42
42
  function r(e) {
@@ -4173,6 +4173,7 @@ import { useContext as useContext8, useMemo as useMemo7 } from "react";
4173
4173
  import { jsx as jsx7 } from "react/jsx-runtime";
4174
4174
  import {
4175
4175
  forwardRef as forwardRef3,
4176
+ useCallback as useCallback6,
4176
4177
  useContext as useContext17,
4177
4178
  useEffect as useEffect3,
4178
4179
  useMemo as useMemo14,
@@ -4211,14 +4212,14 @@ import {
4211
4212
  useRef as useRef9,
4212
4213
  useState as useState6
4213
4214
  } from "react";
4214
- import React15, { useCallback as useCallback6, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
4215
+ import React15, { useCallback as useCallback7, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
4215
4216
  import { useEffect as useEffect4, useMemo as useMemo15, useRef as useRef7 } from "react";
4216
4217
  import { jsx as jsx13 } from "react/jsx-runtime";
4217
4218
  import { jsx as jsx14 } from "react/jsx-runtime";
4218
4219
  import { useContext as useContext18, useLayoutEffect as useLayoutEffect4, useState as useState8 } from "react";
4219
4220
  import {
4220
4221
  createContext as createContext17,
4221
- useCallback as useCallback7,
4222
+ useCallback as useCallback8,
4222
4223
  useImperativeHandle as useImperativeHandle3,
4223
4224
  useLayoutEffect as useLayoutEffect3,
4224
4225
  useMemo as useMemo17,
@@ -4226,7 +4227,7 @@ import {
4226
4227
  useState as useState7
4227
4228
  } from "react";
4228
4229
  import { jsx as jsx15 } from "react/jsx-runtime";
4229
- import { forwardRef as forwardRef7, useCallback as useCallback13, useContext as useContext30 } from "react";
4230
+ import { forwardRef as forwardRef7, useCallback as useCallback14, useContext as useContext30 } from "react";
4230
4231
  import React16, { createContext as createContext18, useMemo as useMemo18 } from "react";
4231
4232
  import { jsx as jsx16 } from "react/jsx-runtime";
4232
4233
  import { useContext as useContext19 } from "react";
@@ -4234,7 +4235,7 @@ import { createContext as createContext19, useEffect as useEffect6, useState as
4234
4235
  import { jsx as jsx17 } from "react/jsx-runtime";
4235
4236
  import { createContext as createContext20, useMemo as useMemo19, useReducer } from "react";
4236
4237
  import { jsx as jsx18 } from "react/jsx-runtime";
4237
- import { useCallback as useCallback12 } from "react";
4238
+ import { useCallback as useCallback13 } from "react";
4238
4239
  import React22, {
4239
4240
  forwardRef as forwardRef5,
4240
4241
  useContext as useContext28,
@@ -4248,7 +4249,7 @@ import { useContext as useContext21, useLayoutEffect as useLayoutEffect5, useRef
4248
4249
  import React19, {
4249
4250
  createContext as createContext21,
4250
4251
  createRef as createRef2,
4251
- useCallback as useCallback8,
4252
+ useCallback as useCallback9,
4252
4253
  useContext as useContext20,
4253
4254
  useEffect as useEffect7,
4254
4255
  useMemo as useMemo21,
@@ -4261,16 +4262,16 @@ import { useRef as useRef13 } from "react";
4261
4262
  import { useContext as useContext23, useEffect as useEffect8, useMemo as useMemo22, useState as useState11 } from "react";
4262
4263
  import { useContext as useContext22 } from "react";
4263
4264
  import {
4264
- useCallback as useCallback11,
4265
+ useCallback as useCallback12,
4265
4266
  useContext as useContext26,
4266
4267
  useEffect as useEffect12,
4267
4268
  useLayoutEffect as useLayoutEffect7,
4268
4269
  useRef as useRef18
4269
4270
  } from "react";
4270
- import { useCallback as useCallback10, useMemo as useMemo25, useRef as useRef16 } from "react";
4271
+ import { useCallback as useCallback11, useMemo as useMemo25, useRef as useRef16 } from "react";
4271
4272
  import { useContext as useContext25, useMemo as useMemo24 } from "react";
4272
4273
  import React20, {
4273
- useCallback as useCallback9,
4274
+ useCallback as useCallback10,
4274
4275
  useContext as useContext24,
4275
4276
  useEffect as useEffect9,
4276
4277
  useLayoutEffect as useLayoutEffect6,
@@ -4298,7 +4299,7 @@ import { jsx as jsx22 } from "react/jsx-runtime";
4298
4299
  import { jsx as jsx23 } from "react/jsx-runtime";
4299
4300
  import {
4300
4301
  forwardRef as forwardRef8,
4301
- useCallback as useCallback14,
4302
+ useCallback as useCallback15,
4302
4303
  useEffect as useEffect16,
4303
4304
  useImperativeHandle as useImperativeHandle6,
4304
4305
  useMemo as useMemo29,
@@ -4309,7 +4310,7 @@ import { jsx as jsx24 } from "react/jsx-runtime";
4309
4310
  import {
4310
4311
  createContext as createContext23,
4311
4312
  forwardRef as forwardRef9,
4312
- useCallback as useCallback15,
4313
+ useCallback as useCallback16,
4313
4314
  useContext as useContext31,
4314
4315
  useLayoutEffect as useLayoutEffect9,
4315
4316
  useMemo as useMemo30,
@@ -4318,7 +4319,7 @@ import {
4318
4319
  import { jsx as jsx25 } from "react/jsx-runtime";
4319
4320
  import {
4320
4321
  forwardRef as forwardRef10,
4321
- useCallback as useCallback16,
4322
+ useCallback as useCallback17,
4322
4323
  useContext as useContext32,
4323
4324
  useEffect as useEffect17,
4324
4325
  useImperativeHandle as useImperativeHandle7,
@@ -4327,16 +4328,16 @@ import {
4327
4328
  useState as useState16
4328
4329
  } from "react";
4329
4330
  import { jsx as jsx26 } from "react/jsx-runtime";
4330
- import { forwardRef as forwardRef11, useCallback as useCallback17, useState as useState17 } from "react";
4331
+ import { forwardRef as forwardRef11, useCallback as useCallback18, useState as useState17 } from "react";
4331
4332
  import { jsx as jsx27 } from "react/jsx-runtime";
4332
- import { useCallback as useCallback18, useContext as useContext33, useLayoutEffect as useLayoutEffect10, useRef as useRef24 } from "react";
4333
+ import { useCallback as useCallback19, useContext as useContext33, useLayoutEffect as useLayoutEffect10, useRef as useRef24 } from "react";
4333
4334
  import { jsx as jsx28 } from "react/jsx-runtime";
4334
- import React29, { forwardRef as forwardRef12, useCallback as useCallback19, useRef as useRef25 } from "react";
4335
+ import React29, { forwardRef as forwardRef12, useCallback as useCallback20, useRef as useRef25 } from "react";
4335
4336
  import { jsx as jsx29 } from "react/jsx-runtime";
4336
4337
  import { createRef as createRef3 } from "react";
4337
4338
  import React30 from "react";
4338
4339
  import {
4339
- useCallback as useCallback20,
4340
+ useCallback as useCallback21,
4340
4341
  useImperativeHandle as useImperativeHandle8,
4341
4342
  useMemo as useMemo32,
4342
4343
  useRef as useRef26,
@@ -4351,9 +4352,9 @@ import { jsx as jsx32 } from "react/jsx-runtime";
4351
4352
  import React33 from "react";
4352
4353
  import React34, { createContext as createContext25 } from "react";
4353
4354
  import React35, { useContext as useContext35 } from "react";
4354
- import { useCallback as useCallback23 } from "react";
4355
+ import { useCallback as useCallback24 } from "react";
4355
4356
  import {
4356
- useCallback as useCallback21,
4357
+ useCallback as useCallback22,
4357
4358
  useContext as useContext36,
4358
4359
  useEffect as useEffect18,
4359
4360
  useLayoutEffect as useLayoutEffect11,
@@ -4363,7 +4364,7 @@ import {
4363
4364
  import { jsx as jsx33 } from "react/jsx-runtime";
4364
4365
  import React37, {
4365
4366
  forwardRef as forwardRef13,
4366
- useCallback as useCallback22,
4367
+ useCallback as useCallback23,
4367
4368
  useContext as useContext37,
4368
4369
  useEffect as useEffect20,
4369
4370
  useImperativeHandle as useImperativeHandle9,
@@ -4384,7 +4385,7 @@ import {
4384
4385
  import React40 from "react";
4385
4386
  import { jsx as jsx37 } from "react/jsx-runtime";
4386
4387
  import React42 from "react";
4387
- import { forwardRef as forwardRef16, useCallback as useCallback24, useContext as useContext39 } from "react";
4388
+ import { forwardRef as forwardRef16, useCallback as useCallback25, useContext as useContext39 } from "react";
4388
4389
  import {
4389
4390
  forwardRef as forwardRef15,
4390
4391
  useContext as useContext38,
@@ -5564,7 +5565,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
5564
5565
  var addSequenceStackTraces = (component) => {
5565
5566
  componentsToAddStacksTo.push(component);
5566
5567
  };
5567
- var VERSION = "4.0.475";
5568
+ var VERSION = "4.0.477";
5568
5569
  var checkMultipleRemotionVersions = () => {
5569
5570
  if (typeof globalThis === "undefined") {
5570
5571
  return;
@@ -5998,6 +5999,18 @@ var hiddenField = {
5998
5999
  default: false,
5999
6000
  description: "Hidden"
6000
6001
  };
6002
+ var showInTimelineField = {
6003
+ type: "hidden"
6004
+ };
6005
+ var sequenceNameField = {
6006
+ type: "hidden"
6007
+ };
6008
+ var extendSchemaWithSequenceName = (schema) => {
6009
+ return {
6010
+ name: sequenceNameField,
6011
+ ...schema
6012
+ };
6013
+ };
6001
6014
  var durationInFramesField = {
6002
6015
  type: "number",
6003
6016
  default: undefined,
@@ -6011,9 +6024,17 @@ var fromField = {
6011
6024
  step: 1,
6012
6025
  hiddenFromList: true
6013
6026
  };
6014
- var sequenceSchema = {
6027
+ var freezeField = {
6028
+ type: "number",
6029
+ default: null,
6030
+ step: 1,
6031
+ hiddenFromList: true
6032
+ };
6033
+ var sequenceSchema = extendSchemaWithSequenceName({
6015
6034
  hidden: hiddenField,
6035
+ showInTimeline: showInTimelineField,
6016
6036
  from: fromField,
6037
+ freeze: freezeField,
6017
6038
  durationInFrames: durationInFramesField,
6018
6039
  layout: {
6019
6040
  type: "enum",
@@ -6024,12 +6045,14 @@ var sequenceSchema = {
6024
6045
  none: {}
6025
6046
  }
6026
6047
  }
6027
- };
6028
- var sequenceSchemaWithoutFrom = {
6048
+ });
6049
+ var sequenceSchemaWithoutFrom = extendSchemaWithSequenceName({
6029
6050
  hidden: hiddenField,
6051
+ showInTimeline: showInTimelineField,
6052
+ freeze: freezeField,
6030
6053
  durationInFrames: durationInFramesField,
6031
6054
  layout: sequenceSchema.layout
6032
- };
6055
+ });
6033
6056
  var sequenceSchemaDefaultLayoutNone = {
6034
6057
  ...sequenceSchema,
6035
6058
  layout: {
@@ -6373,81 +6396,6 @@ function bezier(mX1, mY1, mX2, mY2) {
6373
6396
  return calcBezier(getTForX(clampedX), mY1, mY2);
6374
6397
  };
6375
6398
  }
6376
- var clampUnit = (t) => Math.min(1, Math.max(0, t));
6377
-
6378
- class Easing {
6379
- static step0(n) {
6380
- return n > 0 ? 1 : 0;
6381
- }
6382
- static step1(n) {
6383
- return n >= 1 ? 1 : 0;
6384
- }
6385
- static linear(t) {
6386
- return t;
6387
- }
6388
- static ease(t) {
6389
- return Easing.bezier(0.42, 0, 1, 1)(t);
6390
- }
6391
- static quad(t) {
6392
- return t * t;
6393
- }
6394
- static cubic(t) {
6395
- return t * t * t;
6396
- }
6397
- static poly(n) {
6398
- return (t) => t ** n;
6399
- }
6400
- static sin(t) {
6401
- return 1 - Math.cos(t * Math.PI / 2);
6402
- }
6403
- static circle(t) {
6404
- const u = clampUnit(t);
6405
- return 1 - Math.sqrt(1 - u * u);
6406
- }
6407
- static exp(t) {
6408
- return 2 ** (10 * (t - 1));
6409
- }
6410
- static elastic(bounciness = 1) {
6411
- const p = bounciness * Math.PI;
6412
- return (t) => 1 - Math.cos(t * Math.PI / 2) ** 3 * Math.cos(t * p);
6413
- }
6414
- static back(s = 1.70158) {
6415
- return (t) => t * t * ((s + 1) * t - s);
6416
- }
6417
- static bounce(t) {
6418
- const u = clampUnit(t);
6419
- if (u < 1 / 2.75) {
6420
- return 7.5625 * u * u;
6421
- }
6422
- if (u < 2 / 2.75) {
6423
- const t2_ = u - 1.5 / 2.75;
6424
- return 7.5625 * t2_ * t2_ + 0.75;
6425
- }
6426
- if (u < 2.5 / 2.75) {
6427
- const t2_ = u - 2.25 / 2.75;
6428
- return 7.5625 * t2_ * t2_ + 0.9375;
6429
- }
6430
- const t2 = u - 2.625 / 2.75;
6431
- return 7.5625 * t2 * t2 + 0.984375;
6432
- }
6433
- static bezier(x1, y1, x2, y2) {
6434
- return bezier(x1, y1, x2, y2);
6435
- }
6436
- static in(easing) {
6437
- return easing;
6438
- }
6439
- static out(easing) {
6440
- return (t) => 1 - easing(1 - t);
6441
- }
6442
- static inOut(easing) {
6443
- return (t) => {
6444
- if (t < 0.5) {
6445
- return easing(t * 2) / 2;
6446
- }
6447
- return 1 - easing((1 - t) * 2) / 2;
6448
- };
6449
- }
6450
- }
6451
6399
  var normalizeNumber = (value) => {
6452
6400
  return Math.round(value * 1e6) / 1e6;
6453
6401
  };
@@ -6950,128 +6898,478 @@ function interpolate(input, inputRange, outputRange, options) {
6950
6898
  checkInfiniteRange("outputRange", outputRange);
6951
6899
  return interpolateNumber({ input, inputRange, outputRange, options });
6952
6900
  }
6953
- var NUMBER = "[-+]?\\d*\\.?\\d+";
6954
- var PERCENTAGE = NUMBER + "%";
6955
- function call(...args) {
6956
- return "\\(\\s*(" + args.join(")\\s*,\\s*(") + ")\\s*\\)";
6957
- }
6958
- var MODERN_VALUE = "(?:none|[-+]?\\d*\\.?\\d+(?:%|deg|rad|grad|turn)?)";
6959
- function modernColorCall(name) {
6960
- return new RegExp(name + "\\(\\s*(" + MODERN_VALUE + ")\\s+(" + MODERN_VALUE + ")\\s+(" + MODERN_VALUE + ")(?:\\s*\\/\\s*(" + MODERN_VALUE + "))?\\s*\\)");
6961
- }
6962
- function getMatchers() {
6963
- const cachedMatchers = {
6964
- rgb: undefined,
6965
- rgba: undefined,
6966
- hsl: undefined,
6967
- hsla: undefined,
6968
- hex3: undefined,
6969
- hex4: undefined,
6970
- hex5: undefined,
6971
- hex6: undefined,
6972
- hex8: undefined,
6973
- oklch: undefined,
6974
- oklab: undefined,
6975
- lab: undefined,
6976
- lch: undefined,
6977
- hwb: undefined
6978
- };
6979
- if (cachedMatchers.rgb === undefined) {
6980
- cachedMatchers.rgb = new RegExp("rgb" + call(NUMBER, NUMBER, NUMBER));
6981
- cachedMatchers.rgba = new RegExp("rgba" + call(NUMBER, NUMBER, NUMBER, NUMBER));
6982
- cachedMatchers.hsl = new RegExp("hsl" + call(NUMBER, PERCENTAGE, PERCENTAGE));
6983
- cachedMatchers.hsla = new RegExp("hsla" + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER));
6984
- cachedMatchers.hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;
6985
- cachedMatchers.hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;
6986
- cachedMatchers.hex6 = /^#([0-9a-fA-F]{6})$/;
6987
- cachedMatchers.hex8 = /^#([0-9a-fA-F]{8})$/;
6988
- cachedMatchers.oklch = modernColorCall("oklch");
6989
- cachedMatchers.oklab = modernColorCall("oklab");
6990
- cachedMatchers.lab = modernColorCall("lab");
6991
- cachedMatchers.lch = modernColorCall("lch");
6992
- cachedMatchers.hwb = modernColorCall("hwb");
6993
- }
6994
- return cachedMatchers;
6995
- }
6996
- function hue2rgb(p, q, t) {
6997
- if (t < 0) {
6998
- t += 1;
6999
- }
7000
- if (t > 1) {
7001
- t -= 1;
6901
+ var validateFrame = ({
6902
+ allowFloats,
6903
+ durationInFrames,
6904
+ frame
6905
+ }) => {
6906
+ if (typeof frame === "undefined") {
6907
+ throw new TypeError(`Argument missing for parameter "frame"`);
7002
6908
  }
7003
- if (t < 1 / 6) {
7004
- return p + (q - p) * 6 * t;
6909
+ if (typeof frame !== "number") {
6910
+ throw new TypeError(`Argument passed for "frame" is not a number: ${frame}`);
7005
6911
  }
7006
- if (t < 1 / 2) {
7007
- return q;
6912
+ if (!Number.isFinite(frame)) {
6913
+ throw new RangeError(`Frame ${frame} is not finite`);
7008
6914
  }
7009
- if (t < 2 / 3) {
7010
- return p + (q - p) * (2 / 3 - t) * 6;
6915
+ if (frame % 1 !== 0 && !allowFloats) {
6916
+ throw new RangeError(`Argument for frame must be an integer, but got ${frame}`);
7011
6917
  }
7012
- return p;
7013
- }
7014
- function hslToRgb(h, s, l) {
7015
- const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
7016
- const p = 2 * l - q;
7017
- const r2 = hue2rgb(p, q, h + 1 / 3);
7018
- const g = hue2rgb(p, q, h);
7019
- const b2 = hue2rgb(p, q, h - 1 / 3);
7020
- return Math.round(r2 * 255) << 24 | Math.round(g * 255) << 16 | Math.round(b2 * 255) << 8;
7021
- }
7022
- function parse255(str) {
7023
- const int = Number.parseInt(str, 10);
7024
- if (int < 0) {
7025
- return 0;
6918
+ if (frame < 0 && frame < -durationInFrames) {
6919
+ throw new RangeError(`Cannot use frame ${frame}: Duration of composition is ${durationInFrames}, therefore the lowest frame that can be rendered is ${-durationInFrames}`);
7026
6920
  }
7027
- if (int > 255) {
7028
- return 255;
6921
+ if (frame > durationInFrames - 1) {
6922
+ throw new RangeError(`Cannot use frame ${frame}: Duration of composition is ${durationInFrames}, therefore the highest frame that can be rendered is ${durationInFrames - 1}`);
7029
6923
  }
7030
- return int;
7031
- }
7032
- function parse360(str) {
7033
- const int = Number.parseFloat(str);
7034
- return (int % 360 + 360) % 360 / 360;
7035
- }
7036
- function parse1(str) {
7037
- const num = Number.parseFloat(str);
7038
- if (num < 0) {
7039
- return 0;
6924
+ };
6925
+ var validateSpringDuration = (dur) => {
6926
+ if (typeof dur === "undefined") {
6927
+ return;
7040
6928
  }
7041
- if (num > 1) {
7042
- return 255;
6929
+ if (typeof dur !== "number") {
6930
+ throw new TypeError(`A "duration" of a spring must be a "number" but is "${typeof dur}"`);
7043
6931
  }
7044
- return Math.round(num * 255);
7045
- }
7046
- function parsePercentage(str) {
7047
- const int = Number.parseFloat(str);
7048
- if (int < 0) {
7049
- return 0;
6932
+ if (Number.isNaN(dur)) {
6933
+ throw new TypeError('A "duration" of a spring is NaN, which it must not be');
7050
6934
  }
7051
- if (int > 100) {
7052
- return 1;
6935
+ if (!Number.isFinite(dur)) {
6936
+ throw new TypeError('A "duration" of a spring must be finite, but is ' + dur);
7053
6937
  }
7054
- return int / 100;
7055
- }
7056
- function parseModernComponent(str, percentScale) {
7057
- if (str === "none")
7058
- return 0;
7059
- if (str.endsWith("%")) {
7060
- return Number.parseFloat(str) / 100 * percentScale;
6938
+ if (dur <= 0) {
6939
+ throw new TypeError('A "duration" of a spring must be positive, but is ' + dur);
7061
6940
  }
7062
- return Number.parseFloat(str);
7063
- }
7064
- function parseHueAngle(str) {
7065
- if (str === "none")
7066
- return 0;
7067
- if (str.endsWith("rad")) {
7068
- return Number.parseFloat(str) * 180 / Math.PI;
6941
+ };
6942
+ var defaultSpringConfig = {
6943
+ damping: 10,
6944
+ mass: 1,
6945
+ stiffness: 100,
6946
+ overshootClamping: false
6947
+ };
6948
+ var advanceCache = {};
6949
+ function advance({
6950
+ animation,
6951
+ now,
6952
+ config
6953
+ }) {
6954
+ const { toValue: toValue2, lastTimestamp, current, velocity } = animation;
6955
+ const deltaTime = Math.min(now - lastTimestamp, 64);
6956
+ if (config.damping <= 0) {
6957
+ throw new Error("Spring damping must be greater than 0, otherwise the spring() animation will never end, causing an infinite loop.");
7069
6958
  }
7070
- if (str.endsWith("grad"))
7071
- return Number.parseFloat(str) * 0.9;
7072
- if (str.endsWith("turn"))
7073
- return Number.parseFloat(str) * 360;
7074
- return Number.parseFloat(str);
6959
+ const c2 = config.damping;
6960
+ const m = config.mass;
6961
+ const k = config.stiffness;
6962
+ const cacheKey = [
6963
+ toValue2,
6964
+ lastTimestamp,
6965
+ current,
6966
+ velocity,
6967
+ c2,
6968
+ m,
6969
+ k,
6970
+ now
6971
+ ].join("-");
6972
+ if (advanceCache[cacheKey]) {
6973
+ return advanceCache[cacheKey];
6974
+ }
6975
+ const v0 = -velocity;
6976
+ const x0 = toValue2 - current;
6977
+ const zeta = c2 / (2 * Math.sqrt(k * m));
6978
+ const omega0 = Math.sqrt(k / m);
6979
+ const omega1 = omega0 * Math.sqrt(1 - zeta ** 2);
6980
+ const t = deltaTime / 1000;
6981
+ const sin1 = Math.sin(omega1 * t);
6982
+ const cos1 = Math.cos(omega1 * t);
6983
+ const underDampedEnvelope = Math.exp(-zeta * omega0 * t);
6984
+ const underDampedFrag1 = underDampedEnvelope * (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);
6985
+ const underDampedPosition = toValue2 - underDampedFrag1;
6986
+ const underDampedVelocity = zeta * omega0 * underDampedFrag1 - underDampedEnvelope * (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);
6987
+ const criticallyDampedEnvelope = Math.exp(-omega0 * t);
6988
+ const criticallyDampedPosition = toValue2 - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);
6989
+ const criticallyDampedVelocity = criticallyDampedEnvelope * (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);
6990
+ const animationNode = {
6991
+ toValue: toValue2,
6992
+ prevPosition: current,
6993
+ lastTimestamp: now,
6994
+ current: zeta < 1 ? underDampedPosition : criticallyDampedPosition,
6995
+ velocity: zeta < 1 ? underDampedVelocity : criticallyDampedVelocity
6996
+ };
6997
+ advanceCache[cacheKey] = animationNode;
6998
+ return animationNode;
6999
+ }
7000
+ var calculationCache = {};
7001
+ function springCalculation({
7002
+ frame,
7003
+ fps,
7004
+ config = {}
7005
+ }) {
7006
+ const from = 0;
7007
+ const to = 1;
7008
+ const cacheKey = [
7009
+ frame,
7010
+ fps,
7011
+ config.damping,
7012
+ config.mass,
7013
+ config.overshootClamping,
7014
+ config.stiffness
7015
+ ].join("-");
7016
+ if (calculationCache[cacheKey]) {
7017
+ return calculationCache[cacheKey];
7018
+ }
7019
+ let animation = {
7020
+ lastTimestamp: 0,
7021
+ current: from,
7022
+ toValue: to,
7023
+ velocity: 0,
7024
+ prevPosition: 0
7025
+ };
7026
+ const frameClamped = Math.max(0, frame);
7027
+ const unevenRest = frameClamped % 1;
7028
+ for (let f = 0;f <= Math.floor(frameClamped); f++) {
7029
+ if (f === Math.floor(frameClamped)) {
7030
+ f += unevenRest;
7031
+ }
7032
+ const time = f / fps * 1000;
7033
+ animation = advance({
7034
+ animation,
7035
+ now: time,
7036
+ config: {
7037
+ ...defaultSpringConfig,
7038
+ ...config
7039
+ }
7040
+ });
7041
+ }
7042
+ calculationCache[cacheKey] = animation;
7043
+ return animation;
7044
+ }
7045
+ var cache = new Map;
7046
+ function measureSpring({
7047
+ fps,
7048
+ config = {},
7049
+ threshold = 0.005
7050
+ }) {
7051
+ if (typeof threshold !== "number") {
7052
+ throw new TypeError(`threshold must be a number, got ${threshold} of type ${typeof threshold}`);
7053
+ }
7054
+ if (threshold === 0) {
7055
+ return Infinity;
7056
+ }
7057
+ if (threshold === 1) {
7058
+ return 0;
7059
+ }
7060
+ if (isNaN(threshold)) {
7061
+ throw new TypeError("Threshold is NaN");
7062
+ }
7063
+ if (!Number.isFinite(threshold)) {
7064
+ throw new TypeError("Threshold is not finite");
7065
+ }
7066
+ if (threshold < 0) {
7067
+ throw new TypeError("Threshold is below 0");
7068
+ }
7069
+ const cacheKey = [
7070
+ fps,
7071
+ config.damping,
7072
+ config.mass,
7073
+ config.overshootClamping,
7074
+ config.stiffness,
7075
+ threshold
7076
+ ].join("-");
7077
+ if (cache.has(cacheKey)) {
7078
+ return cache.get(cacheKey);
7079
+ }
7080
+ validateFps(fps, "to the measureSpring() function", false);
7081
+ let frame = 0;
7082
+ let finishedFrame = 0;
7083
+ const calc = () => {
7084
+ return springCalculation({
7085
+ fps,
7086
+ frame,
7087
+ config
7088
+ });
7089
+ };
7090
+ let animation = calc();
7091
+ const calcDifference = () => {
7092
+ return Math.abs(animation.current - animation.toValue);
7093
+ };
7094
+ let difference = calcDifference();
7095
+ while (difference >= threshold) {
7096
+ frame++;
7097
+ animation = calc();
7098
+ difference = calcDifference();
7099
+ }
7100
+ finishedFrame = frame;
7101
+ for (let i = 0;i < 20; i++) {
7102
+ frame++;
7103
+ animation = calc();
7104
+ difference = calcDifference();
7105
+ if (difference >= threshold) {
7106
+ i = 0;
7107
+ finishedFrame = frame + 1;
7108
+ }
7109
+ }
7110
+ cache.set(cacheKey, finishedFrame);
7111
+ return finishedFrame;
7112
+ }
7113
+ function spring({
7114
+ frame: passedFrame,
7115
+ fps,
7116
+ config = {},
7117
+ from = 0,
7118
+ to = 1,
7119
+ durationInFrames: passedDurationInFrames,
7120
+ durationRestThreshold,
7121
+ delay = 0,
7122
+ reverse = false
7123
+ }) {
7124
+ validateSpringDuration(passedDurationInFrames);
7125
+ validateFrame({
7126
+ frame: passedFrame,
7127
+ durationInFrames: Infinity,
7128
+ allowFloats: true
7129
+ });
7130
+ validateFps(fps, "to spring()", false);
7131
+ const needsToCalculateNaturalDuration = reverse || typeof passedDurationInFrames !== "undefined";
7132
+ const naturalDuration = needsToCalculateNaturalDuration ? measureSpring({
7133
+ fps,
7134
+ config,
7135
+ threshold: durationRestThreshold
7136
+ }) : undefined;
7137
+ const naturalDurationGetter = needsToCalculateNaturalDuration ? {
7138
+ get: () => naturalDuration
7139
+ } : {
7140
+ get: () => {
7141
+ throw new Error("did not calculate natural duration, this is an error with Remotion. Please report");
7142
+ }
7143
+ };
7144
+ const reverseProcessed = reverse ? (passedDurationInFrames ?? naturalDurationGetter.get()) - passedFrame : passedFrame;
7145
+ const delayProcessed = reverseProcessed + (reverse ? delay : -delay);
7146
+ const durationProcessed = passedDurationInFrames === undefined ? delayProcessed : delayProcessed / (passedDurationInFrames / naturalDurationGetter.get());
7147
+ if (passedDurationInFrames && delayProcessed > passedDurationInFrames) {
7148
+ return to;
7149
+ }
7150
+ const spr = springCalculation({
7151
+ fps,
7152
+ frame: durationProcessed,
7153
+ config
7154
+ });
7155
+ const inner = config.overshootClamping ? to >= from ? Math.min(spr.current, to) : Math.max(spr.current, to) : spr.current;
7156
+ const interpolated = from === 0 && to === 1 ? inner : interpolate(inner, [0, 1], [from, to]);
7157
+ return interpolated;
7158
+ }
7159
+ var clampUnit = (t) => Math.min(1, Math.max(0, t));
7160
+ var springEasingDurationInFrames = 30;
7161
+
7162
+ class Easing {
7163
+ static step0(n) {
7164
+ return n > 0 ? 1 : 0;
7165
+ }
7166
+ static step1(n) {
7167
+ return n >= 1 ? 1 : 0;
7168
+ }
7169
+ static linear(t) {
7170
+ return t;
7171
+ }
7172
+ static ease(t) {
7173
+ return Easing.bezier(0.42, 0, 1, 1)(t);
7174
+ }
7175
+ static quad(t) {
7176
+ return t * t;
7177
+ }
7178
+ static cubic(t) {
7179
+ return t * t * t;
7180
+ }
7181
+ static poly(n) {
7182
+ return (t) => t ** n;
7183
+ }
7184
+ static sin(t) {
7185
+ return 1 - Math.cos(t * Math.PI / 2);
7186
+ }
7187
+ static circle(t) {
7188
+ const u = clampUnit(t);
7189
+ return 1 - Math.sqrt(1 - u * u);
7190
+ }
7191
+ static exp(t) {
7192
+ return 2 ** (10 * (t - 1));
7193
+ }
7194
+ static elastic(bounciness = 1) {
7195
+ const p = bounciness * Math.PI;
7196
+ return (t) => 1 - Math.cos(t * Math.PI / 2) ** 3 * Math.cos(t * p);
7197
+ }
7198
+ static back(s = 1.70158) {
7199
+ return (t) => t * t * ((s + 1) * t - s);
7200
+ }
7201
+ static spring(config = {}) {
7202
+ return (t) => {
7203
+ if (t <= 0) {
7204
+ return 0;
7205
+ }
7206
+ if (t >= 1) {
7207
+ return 1;
7208
+ }
7209
+ return spring({
7210
+ fps: springEasingDurationInFrames,
7211
+ frame: t * springEasingDurationInFrames,
7212
+ config,
7213
+ durationInFrames: springEasingDurationInFrames
7214
+ });
7215
+ };
7216
+ }
7217
+ static bounce(t) {
7218
+ const u = clampUnit(t);
7219
+ if (u < 1 / 2.75) {
7220
+ return 7.5625 * u * u;
7221
+ }
7222
+ if (u < 2 / 2.75) {
7223
+ const t2_ = u - 1.5 / 2.75;
7224
+ return 7.5625 * t2_ * t2_ + 0.75;
7225
+ }
7226
+ if (u < 2.5 / 2.75) {
7227
+ const t2_ = u - 2.25 / 2.75;
7228
+ return 7.5625 * t2_ * t2_ + 0.9375;
7229
+ }
7230
+ const t2 = u - 2.625 / 2.75;
7231
+ return 7.5625 * t2 * t2 + 0.984375;
7232
+ }
7233
+ static bezier(x1, y1, x2, y2) {
7234
+ return bezier(x1, y1, x2, y2);
7235
+ }
7236
+ static in(easing) {
7237
+ return easing;
7238
+ }
7239
+ static out(easing) {
7240
+ return (t) => 1 - easing(1 - t);
7241
+ }
7242
+ static inOut(easing) {
7243
+ return (t) => {
7244
+ if (t < 0.5) {
7245
+ return easing(t * 2) / 2;
7246
+ }
7247
+ return 1 - easing((1 - t) * 2) / 2;
7248
+ };
7249
+ }
7250
+ }
7251
+ var NUMBER = "[-+]?\\d*\\.?\\d+";
7252
+ var PERCENTAGE = NUMBER + "%";
7253
+ function call(...args) {
7254
+ return "\\(\\s*(" + args.join(")\\s*,\\s*(") + ")\\s*\\)";
7255
+ }
7256
+ var MODERN_VALUE = "(?:none|[-+]?\\d*\\.?\\d+(?:%|deg|rad|grad|turn)?)";
7257
+ function modernColorCall(name) {
7258
+ return new RegExp(name + "\\(\\s*(" + MODERN_VALUE + ")\\s+(" + MODERN_VALUE + ")\\s+(" + MODERN_VALUE + ")(?:\\s*\\/\\s*(" + MODERN_VALUE + "))?\\s*\\)");
7259
+ }
7260
+ function getMatchers() {
7261
+ const cachedMatchers = {
7262
+ rgb: undefined,
7263
+ rgba: undefined,
7264
+ hsl: undefined,
7265
+ hsla: undefined,
7266
+ hex3: undefined,
7267
+ hex4: undefined,
7268
+ hex5: undefined,
7269
+ hex6: undefined,
7270
+ hex8: undefined,
7271
+ oklch: undefined,
7272
+ oklab: undefined,
7273
+ lab: undefined,
7274
+ lch: undefined,
7275
+ hwb: undefined
7276
+ };
7277
+ if (cachedMatchers.rgb === undefined) {
7278
+ cachedMatchers.rgb = new RegExp("rgb" + call(NUMBER, NUMBER, NUMBER));
7279
+ cachedMatchers.rgba = new RegExp("rgba" + call(NUMBER, NUMBER, NUMBER, NUMBER));
7280
+ cachedMatchers.hsl = new RegExp("hsl" + call(NUMBER, PERCENTAGE, PERCENTAGE));
7281
+ cachedMatchers.hsla = new RegExp("hsla" + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER));
7282
+ cachedMatchers.hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;
7283
+ cachedMatchers.hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;
7284
+ cachedMatchers.hex6 = /^#([0-9a-fA-F]{6})$/;
7285
+ cachedMatchers.hex8 = /^#([0-9a-fA-F]{8})$/;
7286
+ cachedMatchers.oklch = modernColorCall("oklch");
7287
+ cachedMatchers.oklab = modernColorCall("oklab");
7288
+ cachedMatchers.lab = modernColorCall("lab");
7289
+ cachedMatchers.lch = modernColorCall("lch");
7290
+ cachedMatchers.hwb = modernColorCall("hwb");
7291
+ }
7292
+ return cachedMatchers;
7293
+ }
7294
+ function hue2rgb(p, q, t) {
7295
+ if (t < 0) {
7296
+ t += 1;
7297
+ }
7298
+ if (t > 1) {
7299
+ t -= 1;
7300
+ }
7301
+ if (t < 1 / 6) {
7302
+ return p + (q - p) * 6 * t;
7303
+ }
7304
+ if (t < 1 / 2) {
7305
+ return q;
7306
+ }
7307
+ if (t < 2 / 3) {
7308
+ return p + (q - p) * (2 / 3 - t) * 6;
7309
+ }
7310
+ return p;
7311
+ }
7312
+ function hslToRgb(h, s, l) {
7313
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
7314
+ const p = 2 * l - q;
7315
+ const r2 = hue2rgb(p, q, h + 1 / 3);
7316
+ const g = hue2rgb(p, q, h);
7317
+ const b2 = hue2rgb(p, q, h - 1 / 3);
7318
+ return Math.round(r2 * 255) << 24 | Math.round(g * 255) << 16 | Math.round(b2 * 255) << 8;
7319
+ }
7320
+ function parse255(str) {
7321
+ const int = Number.parseInt(str, 10);
7322
+ if (int < 0) {
7323
+ return 0;
7324
+ }
7325
+ if (int > 255) {
7326
+ return 255;
7327
+ }
7328
+ return int;
7329
+ }
7330
+ function parse360(str) {
7331
+ const int = Number.parseFloat(str);
7332
+ return (int % 360 + 360) % 360 / 360;
7333
+ }
7334
+ function parse1(str) {
7335
+ const num = Number.parseFloat(str);
7336
+ if (num < 0) {
7337
+ return 0;
7338
+ }
7339
+ if (num > 1) {
7340
+ return 255;
7341
+ }
7342
+ return Math.round(num * 255);
7343
+ }
7344
+ function parsePercentage(str) {
7345
+ const int = Number.parseFloat(str);
7346
+ if (int < 0) {
7347
+ return 0;
7348
+ }
7349
+ if (int > 100) {
7350
+ return 1;
7351
+ }
7352
+ return int / 100;
7353
+ }
7354
+ function parseModernComponent(str, percentScale) {
7355
+ if (str === "none")
7356
+ return 0;
7357
+ if (str.endsWith("%")) {
7358
+ return Number.parseFloat(str) / 100 * percentScale;
7359
+ }
7360
+ return Number.parseFloat(str);
7361
+ }
7362
+ function parseHueAngle(str) {
7363
+ if (str === "none")
7364
+ return 0;
7365
+ if (str.endsWith("rad")) {
7366
+ return Number.parseFloat(str) * 180 / Math.PI;
7367
+ }
7368
+ if (str.endsWith("grad"))
7369
+ return Number.parseFloat(str) * 0.9;
7370
+ if (str.endsWith("turn"))
7371
+ return Number.parseFloat(str) * 360;
7372
+ return Number.parseFloat(str);
7075
7373
  }
7076
7374
  function parseModernAlpha(str) {
7077
7375
  if (str === undefined || str === "none")
@@ -7943,10 +8241,12 @@ var mergeValues = ({
7943
8241
  var stackToOverrideMap = {};
7944
8242
  var wrapInSchema = ({
7945
8243
  Component,
8244
+ componentIdentity,
7946
8245
  schema,
7947
8246
  supportsEffects
7948
8247
  }) => {
7949
- const flatSchema = getFlatSchemaWithAllKeys(schema);
8248
+ const schemaWithSequenceName = extendSchemaWithSequenceName(schema);
8249
+ const flatSchema = getFlatSchemaWithAllKeys(schemaWithSequenceName);
7950
8250
  const flatKeys = Object.keys(flatSchema);
7951
8251
  const Wrapped = forwardRef2((props, ref) => {
7952
8252
  const env = useRemotionEnvironment();
@@ -7985,15 +8285,16 @@ var wrapInSchema = ({
7985
8285
  const currentRuntimeValueDotNotation = useMemo13(() => readValuesFromProps(props, flatKeys), runtimeValues);
7986
8286
  const controls = useMemo13(() => {
7987
8287
  return {
7988
- schema,
8288
+ schema: schemaWithSequenceName,
7989
8289
  currentRuntimeValueDotNotation,
7990
8290
  overrideId,
7991
- supportsEffects
8291
+ supportsEffects,
8292
+ componentIdentity
7992
8293
  };
7993
8294
  }, [currentRuntimeValueDotNotation, overrideId]);
7994
8295
  const { merged: valuesDotNotation, propsToDelete } = useMemo13(() => {
7995
8296
  return computeEffectiveSchemaValuesDotNotation({
7996
- schema,
8297
+ schema: schemaWithSequenceName,
7997
8298
  currentValue: currentRuntimeValueDotNotation,
7998
8299
  overrideValues: nodePath === null ? {} : getDragOverrides(nodePath),
7999
8300
  propStatus: nodePath === null ? undefined : getPropStatusesCtx(propStatuses, nodePath),
@@ -8006,7 +8307,7 @@ var wrapInSchema = ({
8006
8307
  propStatuses,
8007
8308
  frame
8008
8309
  ]);
8009
- const activeKeys = selectActiveKeys(schema, valuesDotNotation);
8310
+ const activeKeys = selectActiveKeys(schemaWithSequenceName, valuesDotNotation);
8010
8311
  const mergedProps = mergeValues({
8011
8312
  props,
8012
8313
  valuesDotNotation,
@@ -8025,6 +8326,7 @@ var wrapInSchema = ({
8025
8326
  var EMPTY_EFFECTS = [];
8026
8327
  var RegularSequenceRefForwardingFunction = ({
8027
8328
  from = 0,
8329
+ freeze,
8028
8330
  durationInFrames = Infinity,
8029
8331
  children,
8030
8332
  name,
@@ -8040,7 +8342,7 @@ var RegularSequenceRefForwardingFunction = ({
8040
8342
  _remotionInternalPremountDisplay: premountDisplay,
8041
8343
  _remotionInternalPostmountDisplay: postmountDisplay,
8042
8344
  _remotionInternalIsMedia: isMedia,
8043
- _remotionInternalRefForOutline: refForOutline,
8345
+ _remotionInternalRefForOutline: passedRefForOutline,
8044
8346
  ...other
8045
8347
  }, ref) => {
8046
8348
  const { layout = "absolute-fill" } = other;
@@ -8048,6 +8350,7 @@ var RegularSequenceRefForwardingFunction = ({
8048
8350
  const parentSequence = useContext17(SequenceContext);
8049
8351
  const { rootId } = useTimelineContext();
8050
8352
  const cumulatedFrom = parentSequence ? parentSequence.cumulatedFrom + parentSequence.relativeFrom : 0;
8353
+ const absoluteFrom = (parentSequence?.absoluteFrom ?? 0) + from;
8051
8354
  const nonce = useNonce();
8052
8355
  if (layout !== "absolute-fill" && layout !== "none") {
8053
8356
  throw new TypeError(`The layout prop of <Sequence /> expects either "absolute-fill" or "none", but you passed: ${layout}`);
@@ -8067,11 +8370,24 @@ var RegularSequenceRefForwardingFunction = ({
8067
8370
  if (!Number.isFinite(from)) {
8068
8371
  throw new TypeError(`The "from" prop of a sequence must be finite, but got ${from}.`);
8069
8372
  }
8373
+ if (typeof freeze !== "undefined" && freeze !== null) {
8374
+ if (typeof freeze !== "number") {
8375
+ throw new TypeError(`The "freeze" prop of <Sequence /> must be a number, but is of type ${typeof freeze}.`);
8376
+ }
8377
+ if (Number.isNaN(freeze)) {
8378
+ throw new TypeError(`The "freeze" prop of <Sequence /> must be a real number, but it is NaN.`);
8379
+ }
8380
+ if (!Number.isFinite(freeze)) {
8381
+ throw new TypeError(`The "freeze" prop of <Sequence /> must be finite, but it is ${freeze}.`);
8382
+ }
8383
+ }
8070
8384
  const absoluteFrame = useTimelinePosition();
8071
8385
  const videoConfig = useVideoConfig();
8072
8386
  const parentSequenceDuration = parentSequence ? Math.min(parentSequence.durationInFrames - from, durationInFrames) : durationInFrames;
8073
8387
  const actualDurationInFrames = Math.max(0, Math.min(videoConfig.durationInFrames - from, parentSequenceDuration));
8074
8388
  const { registerSequence, unregisterSequence } = useContext17(SequenceManager);
8389
+ const wrapperRefForOutline = useRef6(null);
8390
+ const refForOutline = other.layout === "none" ? passedRefForOutline ?? null : passedRefForOutline ?? wrapperRefForOutline;
8075
8391
  const premounting = useMemo14(() => {
8076
8392
  return parentSequence?.premounting || Boolean(other._remotionInternalIsPremounting);
8077
8393
  }, [other._remotionInternalIsPremounting, parentSequence?.premounting]);
@@ -8085,6 +8401,7 @@ var RegularSequenceRefForwardingFunction = ({
8085
8401
  const cumulatedNegativeFrom = currentSequenceStart - firstFrame;
8086
8402
  const contextValue = useMemo14(() => {
8087
8403
  return {
8404
+ absoluteFrom,
8088
8405
  cumulatedFrom,
8089
8406
  relativeFrom: from,
8090
8407
  cumulatedNegativeFrom,
@@ -8100,6 +8417,7 @@ var RegularSequenceRefForwardingFunction = ({
8100
8417
  };
8101
8418
  }, [
8102
8419
  cumulatedFrom,
8420
+ absoluteFrom,
8103
8421
  from,
8104
8422
  actualDurationInFrames,
8105
8423
  parentSequence,
@@ -8115,7 +8433,7 @@ var RegularSequenceRefForwardingFunction = ({
8115
8433
  const timelineClipName = useMemo14(() => {
8116
8434
  return name ?? "";
8117
8435
  }, [name]);
8118
- const resolvedDocumentationLink = documentationLink ?? (name === undefined ? "https://www.remotion.dev/docs/sequence" : null);
8436
+ const resolvedDocumentationLink = documentationLink ?? "https://www.remotion.dev/docs/sequence";
8119
8437
  const env = useRemotionEnvironment();
8120
8438
  const isInsideSeries = useContext17(IsInsideSeriesContext);
8121
8439
  const inheritedStack = other?.stack ?? null;
@@ -8228,7 +8546,19 @@ var RegularSequenceRefForwardingFunction = ({
8228
8546
  ]);
8229
8547
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
8230
8548
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
8549
+ const frozenContent = content === null || typeof freeze === "undefined" || freeze === null ? content : /* @__PURE__ */ jsx12(Freeze, {
8550
+ frame: freeze,
8551
+ children: content
8552
+ });
8231
8553
  const styleIfThere = other.layout === "none" ? undefined : other.style;
8554
+ const sequenceRef = useCallback6((node) => {
8555
+ wrapperRefForOutline.current = node;
8556
+ if (typeof ref === "function") {
8557
+ ref(node);
8558
+ } else if (ref) {
8559
+ ref.current = node;
8560
+ }
8561
+ }, [ref]);
8232
8562
  const defaultStyle = useMemo14(() => {
8233
8563
  return {
8234
8564
  flexDirection: undefined,
@@ -8245,11 +8575,11 @@ var RegularSequenceRefForwardingFunction = ({
8245
8575
  }
8246
8576
  return /* @__PURE__ */ jsx12(SequenceContext.Provider, {
8247
8577
  value: contextValue,
8248
- children: content === null ? null : other.layout === "none" ? content : /* @__PURE__ */ jsx12(AbsoluteFill, {
8249
- ref,
8578
+ children: frozenContent === null ? null : other.layout === "none" ? frozenContent : /* @__PURE__ */ jsx12(AbsoluteFill, {
8579
+ ref: sequenceRef,
8250
8580
  style: defaultStyle,
8251
8581
  className: other.className,
8252
- children: content
8582
+ children: frozenContent
8253
8583
  })
8254
8584
  });
8255
8585
  };
@@ -8329,11 +8659,13 @@ var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
8329
8659
  var SequenceWithoutSchema = SequenceInner;
8330
8660
  var Sequence = wrapInSchema({
8331
8661
  Component: SequenceInner,
8662
+ componentIdentity: "dev.remotion.remotion.Sequence",
8332
8663
  schema: sequenceSchema,
8333
8664
  supportsEffects: false
8334
8665
  });
8335
8666
  var SequenceWithoutFrom = wrapInSchema({
8336
8667
  Component: SequenceInner,
8668
+ componentIdentity: null,
8337
8669
  schema: sequenceSchemaWithoutFrom,
8338
8670
  supportsEffects: false
8339
8671
  });
@@ -8651,7 +8983,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effec
8651
8983
  }
8652
8984
  return document.createElement("canvas");
8653
8985
  }, []);
8654
- const draw = useCallback6((imageData) => {
8986
+ const draw = useCallback7((imageData) => {
8655
8987
  const canvas = canvasRef.current;
8656
8988
  const canvasWidth = width ?? imageData.displayWidth;
8657
8989
  const canvasHeight = height ?? imageData.displayHeight;
@@ -8742,10 +9074,10 @@ var decodeImage = async ({
8742
9074
  if (!selectedTrack) {
8743
9075
  throw new Error("No selected track");
8744
9076
  }
8745
- const cache = [];
9077
+ const cache2 = [];
8746
9078
  let durationFound = null;
8747
9079
  const getFrameByIndex = async (frameIndex) => {
8748
- const foundInCache = cache.find((c2) => c2.frameIndex === frameIndex);
9080
+ const foundInCache = cache2.find((c2) => c2.frameIndex === frameIndex);
8749
9081
  if (foundInCache && foundInCache.frame) {
8750
9082
  return foundInCache;
8751
9083
  }
@@ -8756,7 +9088,7 @@ var decodeImage = async ({
8756
9088
  if (foundInCache) {
8757
9089
  foundInCache.frame = frame.image;
8758
9090
  } else {
8759
- cache.push({
9091
+ cache2.push({
8760
9092
  frame: frame.image,
8761
9093
  frameIndex,
8762
9094
  timeInSeconds: frame.image.timestamp / 1e6
@@ -8769,7 +9101,7 @@ var decodeImage = async ({
8769
9101
  };
8770
9102
  };
8771
9103
  const clearCache = (closeToTimeInSec) => {
8772
- const itemsInCache = cache.filter((c2) => c2.frame);
9104
+ const itemsInCache = cache2.filter((c2) => c2.frame);
8773
9105
  const sortByClosestToCurrentTime = itemsInCache.sort((a2, b2) => {
8774
9106
  const aDiff = Math.abs(a2.timeInSeconds - closeToTimeInSec);
8775
9107
  const bDiff = Math.abs(b2.timeInSeconds - closeToTimeInSec);
@@ -8792,7 +9124,7 @@ var decodeImage = async ({
8792
9124
  loopBehavior,
8793
9125
  timeInSec
8794
9126
  });
8795
- const framesBefore = cache.filter((c2) => c2.timeInSeconds <= actualTimeInSec);
9127
+ const framesBefore = cache2.filter((c2) => c2.timeInSeconds <= actualTimeInSec);
8796
9128
  const biggestIndex = framesBefore.map((c2) => c2.frameIndex).reduce((a2, b2) => Math.max(a2, b2), 0);
8797
9129
  let i = biggestIndex;
8798
9130
  while (true) {
@@ -8835,7 +9167,7 @@ var decodeImage = async ({
8835
9167
  timeInSec
8836
9168
  });
8837
9169
  await ensureFrameBeforeAndAfter({ timeInSec: actualTimeInSec, loopBehavior });
8838
- const itemsInCache = cache.filter((c2) => c2.frame);
9170
+ const itemsInCache = cache2.filter((c2) => c2.frame);
8839
9171
  const closest = itemsInCache.reduce((a2, b2) => {
8840
9172
  const aDiff = Math.abs(a2.timeInSeconds - actualTimeInSec);
8841
9173
  const bDiff = Math.abs(b2.timeInSeconds - actualTimeInSec);
@@ -8872,6 +9204,7 @@ var resolveAnimatedImageSource = (src) => {
8872
9204
  var animatedImageSchema = {
8873
9205
  durationInFrames: durationInFramesField,
8874
9206
  from: fromField,
9207
+ freeze: freezeField,
8875
9208
  playbackRate: {
8876
9209
  type: "number",
8877
9210
  min: 0,
@@ -9071,6 +9404,7 @@ var AnimatedImageInner = ({
9071
9404
  };
9072
9405
  var AnimatedImage = wrapInSchema({
9073
9406
  Component: AnimatedImageInner,
9407
+ componentIdentity: "dev.remotion.remotion.AnimatedImage",
9074
9408
  schema: animatedImageSchema,
9075
9409
  supportsEffects: true
9076
9410
  });
@@ -9117,7 +9451,7 @@ var RenderAssetManager = createContext17({
9117
9451
  var RenderAssetManagerProvider = ({ children, collectAssets }) => {
9118
9452
  const [renderAssets, setRenderAssets] = useState7([]);
9119
9453
  const renderAssetsRef = useRef10([]);
9120
- const registerRenderAsset = useCallback7((renderAsset) => {
9454
+ const registerRenderAsset = useCallback8((renderAsset) => {
9121
9455
  validateRenderAsset(renderAsset);
9122
9456
  renderAssetsRef.current = [...renderAssetsRef.current, renderAsset];
9123
9457
  setRenderAssets(renderAssetsRef.current);
@@ -9134,7 +9468,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
9134
9468
  };
9135
9469
  }, []);
9136
9470
  }
9137
- const unregisterRenderAsset = useCallback7((id) => {
9471
+ const unregisterRenderAsset = useCallback8((id) => {
9138
9472
  renderAssetsRef.current = renderAssetsRef.current.filter((a2) => a2.id !== id);
9139
9473
  setRenderAssets(renderAssetsRef.current);
9140
9474
  }, []);
@@ -9296,7 +9630,7 @@ var Loop = ({
9296
9630
  durationInFrames,
9297
9631
  from,
9298
9632
  name: name ?? "<Loop>",
9299
- _remotionInternalDocumentationLink: name === undefined ? "https://www.remotion.dev/docs/loop" : undefined,
9633
+ _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/loop",
9300
9634
  _remotionInternalLoopDisplay: loopDisplay,
9301
9635
  layout: props.layout,
9302
9636
  style,
@@ -9939,7 +10273,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
9939
10273
  }, []);
9940
10274
  const prevEndTimes = useRef12({ scheduledEndTime: null, mediaEndTime: null });
9941
10275
  const nodesToResume = useRef12(new Map);
9942
- const unscheduleAudioNode = useCallback8((node) => {
10276
+ const unscheduleAudioNode = useCallback9((node) => {
9943
10277
  nodesToResume.current.delete(node);
9944
10278
  }, []);
9945
10279
  const scheduleAudioNode = useMemo21(() => {
@@ -9993,7 +10327,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
9993
10327
  };
9994
10328
  };
9995
10329
  }, [ctxAndGain, logLevel]);
9996
- const resume = useCallback8(() => {
10330
+ const resume = useCallback9(() => {
9997
10331
  if (!ctxAndGain) {
9998
10332
  return Promise.resolve();
9999
10333
  }
@@ -10020,10 +10354,10 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
10020
10354
  });
10021
10355
  return resumePromise.catch(() => {});
10022
10356
  }, [ctxAndGain, logLevel]);
10023
- const getIsResumingAudioContext = useCallback8(() => {
10357
+ const getIsResumingAudioContext = useCallback9(() => {
10024
10358
  return isResuming.current;
10025
10359
  }, []);
10026
- const suspend = useCallback8(() => {
10360
+ const suspend = useCallback9(() => {
10027
10361
  if (!ctxAndGain) {
10028
10362
  return Promise.resolve();
10029
10363
  }
@@ -10097,7 +10431,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10097
10431
  };
10098
10432
  }, [refs]);
10099
10433
  const takenAudios = useRef12(new Array(numberOfAudioTags).fill(false));
10100
- const rerenderAudios = useCallback8(() => {
10434
+ const rerenderAudios = useCallback9(() => {
10101
10435
  refs.forEach(({ ref, id }) => {
10102
10436
  const data = audios.current?.find((a2) => a2.id === id);
10103
10437
  const { current } = ref;
@@ -10118,7 +10452,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10118
10452
  });
10119
10453
  });
10120
10454
  }, [refs]);
10121
- const registerAudio = useCallback8((options) => {
10455
+ const registerAudio = useCallback9((options) => {
10122
10456
  const { aud, audioId, premounting, postmounting } = options;
10123
10457
  const found = audios.current?.find((a2) => a2.audioId === audioId);
10124
10458
  if (found) {
@@ -10147,7 +10481,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10147
10481
  rerenderAudios();
10148
10482
  return newElem;
10149
10483
  }, [numberOfAudioTags, refs, rerenderAudios]);
10150
- const unregisterAudio = useCallback8((id) => {
10484
+ const unregisterAudio = useCallback9((id) => {
10151
10485
  const cloned = [...takenAudios.current];
10152
10486
  const index = refs.findIndex((r2) => r2.id === id);
10153
10487
  if (index === -1) {
@@ -10158,7 +10492,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10158
10492
  audios.current = audios.current?.filter((a2) => a2.id !== id);
10159
10493
  rerenderAudios();
10160
10494
  }, [refs, rerenderAudios]);
10161
- const updateAudio = useCallback8(({
10495
+ const updateAudio = useCallback9(({
10162
10496
  aud,
10163
10497
  audioId,
10164
10498
  id,
@@ -10192,7 +10526,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10192
10526
  rerenderAudios();
10193
10527
  }
10194
10528
  }, [rerenderAudios]);
10195
- const playAllAudios = useCallback8(() => {
10529
+ const playAllAudios = useCallback9(() => {
10196
10530
  refs.forEach((ref) => {
10197
10531
  const audio = audios.current.find((a2) => a2.el === ref.ref);
10198
10532
  if (audio?.premounting) {
@@ -10740,7 +11074,7 @@ var useBufferManager = (logLevel, mountTime) => {
10740
11074
  const env = useRemotionEnvironment();
10741
11075
  const rendering = env.isRendering;
10742
11076
  const buffering = useRef15(false);
10743
- const addBlock = useCallback9((block) => {
11077
+ const addBlock = useCallback10((block) => {
10744
11078
  if (rendering) {
10745
11079
  return {
10746
11080
  unblock: () => {
@@ -10766,7 +11100,7 @@ var useBufferManager = (logLevel, mountTime) => {
10766
11100
  }
10767
11101
  };
10768
11102
  }, [rendering]);
10769
- const listenForBuffering = useCallback9((callback) => {
11103
+ const listenForBuffering = useCallback10((callback) => {
10770
11104
  setOnBufferingCallbacks((c2) => [...c2, callback]);
10771
11105
  return {
10772
11106
  remove: () => {
@@ -10774,7 +11108,7 @@ var useBufferManager = (logLevel, mountTime) => {
10774
11108
  }
10775
11109
  };
10776
11110
  }, []);
10777
- const listenForResume = useCallback9((callback) => {
11111
+ const listenForResume = useCallback10((callback) => {
10778
11112
  setOnResumeCallbacks((c2) => [...c2, callback]);
10779
11113
  return {
10780
11114
  remove: () => {
@@ -10888,7 +11222,7 @@ var useBufferUntilFirstFrame = ({
10888
11222
  }) => {
10889
11223
  const bufferingRef = useRef16(false);
10890
11224
  const { delayPlayback } = useBufferState();
10891
- const bufferUntilFirstFrame = useCallback10((requestedTime) => {
11225
+ const bufferUntilFirstFrame = useCallback11((requestedTime) => {
10892
11226
  if (mediaType !== "video") {
10893
11227
  return;
10894
11228
  }
@@ -11278,7 +11612,7 @@ var useMediaPlayback = ({
11278
11612
  throw new Error("useMediaPlayback must be used inside a <BufferingContext>");
11279
11613
  }
11280
11614
  const isVariableFpsVideoMap = useRef18({});
11281
- const onVariableFpsVideoDetected = useCallback11(() => {
11615
+ const onVariableFpsVideoDetected = useCallback12(() => {
11282
11616
  if (!src) {
11283
11617
  return;
11284
11618
  }
@@ -11669,7 +12003,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
11669
12003
  premounting: Boolean(sequenceContext?.premounting),
11670
12004
  postmounting: Boolean(sequenceContext?.postmounting)
11671
12005
  });
11672
- const getStack = useCallback12(() => {
12006
+ const getStack = useCallback13(() => {
11673
12007
  return _remotionInternalStack ?? null;
11674
12008
  }, [_remotionInternalStack]);
11675
12009
  useMediaInTimeline({
@@ -11685,7 +12019,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
11685
12019
  premountDisplay: sequenceContext?.premountDisplay ?? null,
11686
12020
  postmountDisplay: sequenceContext?.postmountDisplay ?? null,
11687
12021
  loopDisplay: undefined,
11688
- documentationLink: name === undefined ? "https://www.remotion.dev/docs/html5-audio" : null,
12022
+ documentationLink: "https://www.remotion.dev/docs/html5-audio",
11689
12023
  refForOutline: null
11690
12024
  });
11691
12025
  useMediaPlayback({
@@ -11915,7 +12249,7 @@ var AudioRefForwardingFunction = (props, ref) => {
11915
12249
  throw new TypeError(`The \`<Html5Audio>\` tag requires a string for \`src\`, but got ${JSON.stringify(props.src)} instead.`);
11916
12250
  }
11917
12251
  const preloadedSrc = usePreload(props.src);
11918
- const onError = useCallback13((e) => {
12252
+ const onError = useCallback14((e) => {
11919
12253
  console.log(e.currentTarget.error);
11920
12254
  const errMessage = `Could not play audio with src ${preloadedSrc}: ${e.currentTarget.error}. See https://remotion.dev/docs/media-playback-error for help.`;
11921
12255
  if (loop) {
@@ -11929,7 +12263,7 @@ var AudioRefForwardingFunction = (props, ref) => {
11929
12263
  console.warn(errMessage);
11930
12264
  }
11931
12265
  }, [loop, onRemotionError, preloadedSrc]);
11932
- const onDuration = useCallback13((src, durationInSeconds) => {
12266
+ const onDuration = useCallback14((src, durationInSeconds) => {
11933
12267
  setDurations({ type: "got-duration", durationInSeconds, src });
11934
12268
  }, [setDurations]);
11935
12269
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props.src)];
@@ -12021,6 +12355,7 @@ var resolveSolidPixelDensity = (pixelDensity) => {
12021
12355
  var solidSchema = {
12022
12356
  durationInFrames: durationInFramesField,
12023
12357
  from: fromField,
12358
+ freeze: freezeField,
12024
12359
  color: {
12025
12360
  type: "color",
12026
12361
  default: "transparent",
@@ -12075,7 +12410,7 @@ var SolidInner = ({
12075
12410
  return canvas;
12076
12411
  }, []);
12077
12412
  const chainState = useEffectChainState();
12078
- const canvasRef = useCallback14((canvas) => {
12413
+ const canvasRef = useCallback15((canvas) => {
12079
12414
  setOutputCanvas(canvas);
12080
12415
  if (typeof reference === "function") {
12081
12416
  reference(canvas);
@@ -12159,6 +12494,7 @@ var SolidOuter = forwardRef8(({
12159
12494
  style,
12160
12495
  name,
12161
12496
  from,
12497
+ freeze,
12162
12498
  hidden,
12163
12499
  showInTimeline,
12164
12500
  pixelDensity,
@@ -12172,6 +12508,7 @@ var SolidOuter = forwardRef8(({
12172
12508
  return /* @__PURE__ */ jsx24(Sequence, {
12173
12509
  layout: "none",
12174
12510
  from,
12511
+ freeze,
12175
12512
  hidden,
12176
12513
  showInTimeline,
12177
12514
  _experimentalControls: controls,
@@ -12179,7 +12516,7 @@ var SolidOuter = forwardRef8(({
12179
12516
  durationInFrames,
12180
12517
  name: name ?? "<Solid>",
12181
12518
  _remotionInternalRefForOutline: actualRef,
12182
- _remotionInternalDocumentationLink: name === undefined ? "https://www.remotion.dev/docs/solid" : undefined,
12519
+ _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/solid",
12183
12520
  ...props2,
12184
12521
  children: /* @__PURE__ */ jsx24(SolidInner, {
12185
12522
  reference: actualRef,
@@ -12196,6 +12533,7 @@ var SolidOuter = forwardRef8(({
12196
12533
  });
12197
12534
  var Solid = wrapInSchema({
12198
12535
  Component: SolidOuter,
12536
+ componentIdentity: "dev.remotion.remotion.Solid",
12199
12537
  schema: solidSchema,
12200
12538
  supportsEffects: true
12201
12539
  });
@@ -12285,7 +12623,7 @@ var HtmlInCanvasContent = forwardRef9(({
12285
12623
  const offscreenRef = useRef22(null);
12286
12624
  const divRef = useRef22(null);
12287
12625
  const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
12288
- const setLayoutCanvasRef = useCallback15((node) => {
12626
+ const setLayoutCanvasRef = useCallback16((node) => {
12289
12627
  canvas2dRef.current = node;
12290
12628
  if (typeof ref === "function") {
12291
12629
  ref(node);
@@ -12307,7 +12645,7 @@ var HtmlInCanvasContent = forwardRef9(({
12307
12645
  const initializedRef = useRef22(false);
12308
12646
  const onInitCleanupRef = useRef22(null);
12309
12647
  const unmountedRef = useRef22(false);
12310
- const onPaintCb = useCallback15(async () => {
12648
+ const onPaintCb = useCallback16(async () => {
12311
12649
  const element = divRef.current;
12312
12650
  if (!element) {
12313
12651
  throw new Error("Canvas or scene element not found");
@@ -12480,7 +12818,7 @@ var HtmlInCanvasInner = forwardRef9(({
12480
12818
  const resolvedDuration = durationInFrames ?? videoDuration;
12481
12819
  const memoizedEffectDefinitions = useMemoizedEffectDefinitions(effects);
12482
12820
  const actualRef = useRef22(null);
12483
- const setCanvasRef = useCallback15((node) => {
12821
+ const setCanvasRef = useCallback16((node) => {
12484
12822
  actualRef.current = node;
12485
12823
  if (typeof ref === "function") {
12486
12824
  ref(node);
@@ -12491,7 +12829,7 @@ var HtmlInCanvasInner = forwardRef9(({
12491
12829
  return /* @__PURE__ */ jsx25(Sequence, {
12492
12830
  durationInFrames: resolvedDuration,
12493
12831
  name: name ?? "<HtmlInCanvas>",
12494
- _remotionInternalDocumentationLink: name === undefined ? "https://www.remotion.dev/docs/remotion/html-in-canvas" : undefined,
12832
+ _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/remotion/html-in-canvas",
12495
12833
  _experimentalControls: controls,
12496
12834
  _remotionInternalEffects: memoizedEffectDefinitions,
12497
12835
  _remotionInternalRefForOutline: actualRef,
@@ -12515,11 +12853,13 @@ HtmlInCanvasInner.displayName = "HtmlInCanvas";
12515
12853
  var htmlInCanvasSchema = {
12516
12854
  durationInFrames: durationInFramesField,
12517
12855
  from: fromField,
12856
+ freeze: freezeField,
12518
12857
  ...sequenceVisualStyleSchema,
12519
12858
  hidden: hiddenField
12520
12859
  };
12521
12860
  var HtmlInCanvasWrapped = wrapInSchema({
12522
12861
  Component: HtmlInCanvasInner,
12862
+ componentIdentity: "dev.remotion.remotion.HtmlInCanvas",
12523
12863
  schema: htmlInCanvasSchema,
12524
12864
  supportsEffects: true
12525
12865
  });
@@ -12537,6 +12877,7 @@ function truncateSrcForLabel(src) {
12537
12877
  var canvasImageSchema = {
12538
12878
  durationInFrames: durationInFramesField,
12539
12879
  from: fromField,
12880
+ freeze: freezeField,
12540
12881
  fit: {
12541
12882
  type: "enum",
12542
12883
  default: "fill",
@@ -12642,7 +12983,7 @@ var CanvasImageContent = forwardRef10(({
12642
12983
  }
12643
12984
  return document.createElement("canvas");
12644
12985
  }, []);
12645
- const canvasRef = useCallback16((canvas) => {
12986
+ const canvasRef = useCallback17((canvas) => {
12646
12987
  setOutputCanvas(canvas);
12647
12988
  if (refForOutline) {
12648
12989
  refForOutline.current = canvas;
@@ -12789,6 +13130,7 @@ var CanvasImageInner = forwardRef10(({
12789
13130
  delayRenderTimeoutInMilliseconds,
12790
13131
  durationInFrames,
12791
13132
  from,
13133
+ freeze,
12792
13134
  hidden,
12793
13135
  name,
12794
13136
  showInTimeline,
@@ -12810,6 +13152,7 @@ var CanvasImageInner = forwardRef10(({
12810
13152
  layout: "none",
12811
13153
  from: from ?? 0,
12812
13154
  durationInFrames: durationInFrames ?? Infinity,
13155
+ freeze,
12813
13156
  hidden,
12814
13157
  showInTimeline: showInTimeline ?? true,
12815
13158
  name: name ?? "<CanvasImage>",
@@ -12842,6 +13185,7 @@ var CanvasImageInner = forwardRef10(({
12842
13185
  });
12843
13186
  var CanvasImage = wrapInSchema({
12844
13187
  Component: CanvasImageInner,
13188
+ componentIdentity: "dev.remotion.remotion.CanvasImage",
12845
13189
  schema: canvasImageSchema,
12846
13190
  supportsEffects: true
12847
13191
  });
@@ -12859,11 +13203,11 @@ var IFrameRefForwarding = ({
12859
13203
  retries: delayRenderRetries ?? undefined,
12860
13204
  timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
12861
13205
  }));
12862
- const didLoad = useCallback17((e) => {
13206
+ const didLoad = useCallback18((e) => {
12863
13207
  continueRender2(handle);
12864
13208
  onLoad?.(e);
12865
13209
  }, [handle, onLoad, continueRender2]);
12866
- const didGetError = useCallback17((e) => {
13210
+ const didGetError = useCallback18((e) => {
12867
13211
  continueRender2(handle);
12868
13212
  if (onError) {
12869
13213
  onError(e);
@@ -12905,7 +13249,7 @@ var ImgContent = ({
12905
13249
  if (!_propsValid) {
12906
13250
  throw new Error("typecheck error");
12907
13251
  }
12908
- const imageCallbackRef = useCallback18((img) => {
13252
+ const imageCallbackRef = useCallback19((img) => {
12909
13253
  imageRef.current = img;
12910
13254
  refForOutline.current = img;
12911
13255
  if (typeof ref === "function") {
@@ -12915,7 +13259,7 @@ var ImgContent = ({
12915
13259
  }
12916
13260
  }, [ref, refForOutline]);
12917
13261
  const actualSrc = usePreload(src);
12918
- const retryIn = useCallback18((timeout) => {
13262
+ const retryIn = useCallback19((timeout) => {
12919
13263
  if (!imageRef.current) {
12920
13264
  return;
12921
13265
  }
@@ -12933,7 +13277,7 @@ var ImgContent = ({
12933
13277
  }, timeout);
12934
13278
  }, []);
12935
13279
  const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
12936
- const didGetError = useCallback18((e) => {
13280
+ const didGetError = useCallback19((e) => {
12937
13281
  if (!errors.current) {
12938
13282
  return;
12939
13283
  }
@@ -13043,6 +13387,7 @@ var NativeImgInner = ({
13043
13387
  src,
13044
13388
  from,
13045
13389
  durationInFrames,
13390
+ freeze,
13046
13391
  _experimentalControls: controls,
13047
13392
  _remotionInternalRefForOutline: refForOutline,
13048
13393
  ...props2
@@ -13054,8 +13399,9 @@ var NativeImgInner = ({
13054
13399
  layout: "none",
13055
13400
  from: from ?? 0,
13056
13401
  durationInFrames: durationInFrames ?? Infinity,
13402
+ freeze,
13057
13403
  _remotionInternalStack: stack,
13058
- _remotionInternalDocumentationLink: name === undefined ? "https://www.remotion.dev/docs/img" : undefined,
13404
+ _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/img",
13059
13405
  _remotionInternalIsMedia: { type: "image", src },
13060
13406
  name: name ?? "<Img>",
13061
13407
  _experimentalControls: controls,
@@ -13073,6 +13419,7 @@ var CanvasImageWithPrivateProps = CanvasImage;
13073
13419
  var imgSchema = {
13074
13420
  durationInFrames: durationInFramesField,
13075
13421
  from: fromField,
13422
+ freeze: freezeField,
13076
13423
  ...sequenceVisualStyleSchema,
13077
13424
  hidden: hiddenField
13078
13425
  };
@@ -13128,6 +13475,7 @@ var ImgInner = ({
13128
13475
  src,
13129
13476
  from,
13130
13477
  durationInFrames,
13478
+ freeze,
13131
13479
  _experimentalControls: controls,
13132
13480
  width,
13133
13481
  height,
@@ -13152,6 +13500,7 @@ var ImgInner = ({
13152
13500
  src,
13153
13501
  from,
13154
13502
  durationInFrames,
13503
+ freeze,
13155
13504
  _experimentalControls: controls,
13156
13505
  width,
13157
13506
  height,
@@ -13193,11 +13542,12 @@ var ImgInner = ({
13193
13542
  delayRenderTimeoutInMilliseconds,
13194
13543
  from,
13195
13544
  durationInFrames,
13545
+ freeze,
13196
13546
  hidden,
13197
13547
  name: name ?? "<Img>",
13198
13548
  showInTimeline,
13199
13549
  stack,
13200
- _remotionInternalDocumentationLink: name === undefined ? "https://www.remotion.dev/docs/img" : undefined,
13550
+ _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/img",
13201
13551
  _experimentalControls: controls,
13202
13552
  _remotionInternalRefForOutline: refForOutline,
13203
13553
  ...canvasProps
@@ -13205,6 +13555,7 @@ var ImgInner = ({
13205
13555
  };
13206
13556
  var Img = wrapInSchema({
13207
13557
  Component: ImgInner,
13558
+ componentIdentity: "dev.remotion.remotion.Img",
13208
13559
  schema: imgSchema,
13209
13560
  supportsEffects: true
13210
13561
  });
@@ -13212,6 +13563,7 @@ addSequenceStackTraces(Img);
13212
13563
  var interactiveElementSchema = {
13213
13564
  durationInFrames: durationInFramesField,
13214
13565
  from: fromField,
13566
+ freeze: freezeField,
13215
13567
  ...sequenceVisualStyleSchema,
13216
13568
  hidden: hiddenField
13217
13569
  };
@@ -13227,6 +13579,7 @@ var makeInteractiveElement = (tag, displayName) => {
13227
13579
  const {
13228
13580
  durationInFrames,
13229
13581
  from,
13582
+ freeze,
13230
13583
  hidden,
13231
13584
  name,
13232
13585
  showInTimeline,
@@ -13235,7 +13588,7 @@ var makeInteractiveElement = (tag, displayName) => {
13235
13588
  ...props2
13236
13589
  } = propsWithControls;
13237
13590
  const refForOutline = useRef25(null);
13238
- const callbackRef = useCallback19((element) => {
13591
+ const callbackRef = useCallback20((element) => {
13239
13592
  refForOutline.current = element;
13240
13593
  setRef(ref, element);
13241
13594
  }, [ref]);
@@ -13243,11 +13596,13 @@ var makeInteractiveElement = (tag, displayName) => {
13243
13596
  layout: "none",
13244
13597
  from: from ?? 0,
13245
13598
  durationInFrames: durationInFrames ?? Infinity,
13599
+ freeze,
13246
13600
  hidden,
13247
13601
  name: name ?? displayName,
13248
13602
  showInTimeline: showInTimeline ?? true,
13249
13603
  _experimentalControls,
13250
13604
  _remotionInternalStack: stack,
13605
+ _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/interactive",
13251
13606
  _remotionInternalRefForOutline: refForOutline,
13252
13607
  children: React29.createElement(tag, {
13253
13608
  ...props2,
@@ -13258,6 +13613,7 @@ var makeInteractiveElement = (tag, displayName) => {
13258
13613
  Inner.displayName = displayName;
13259
13614
  const Wrapped = wrapInSchema({
13260
13615
  Component: Inner,
13616
+ componentIdentity: `dev.remotion.remotion.${displayName.slice(1, -1)}`,
13261
13617
  schema: interactiveElementSchema,
13262
13618
  supportsEffects: false
13263
13619
  });
@@ -13314,14 +13670,14 @@ var CompositionManagerProvider = ({
13314
13670
  const [canvasContent, setCanvasContent] = useState18(initialCanvasContent);
13315
13671
  const [compositions, setCompositions] = useState18(initialCompositions);
13316
13672
  const currentcompositionsRef = useRef26(compositions);
13317
- const updateCompositions = useCallback20((updateComps) => {
13673
+ const updateCompositions = useCallback21((updateComps) => {
13318
13674
  setCompositions((comps) => {
13319
13675
  const updated = updateComps(comps);
13320
13676
  currentcompositionsRef.current = updated;
13321
13677
  return updated;
13322
13678
  });
13323
13679
  }, []);
13324
- const registerComposition = useCallback20((comp) => {
13680
+ const registerComposition = useCallback21((comp) => {
13325
13681
  updateCompositions((comps) => {
13326
13682
  if (comps.find((c2) => c2.id === comp.id)) {
13327
13683
  throw new Error(`Multiple composition with id ${comp.id} are registered.`);
@@ -13329,12 +13685,12 @@ var CompositionManagerProvider = ({
13329
13685
  return [...comps, comp];
13330
13686
  });
13331
13687
  }, [updateCompositions]);
13332
- const unregisterComposition = useCallback20((id) => {
13688
+ const unregisterComposition = useCallback21((id) => {
13333
13689
  setCompositions((comps) => {
13334
13690
  return comps.filter((c2) => c2.id !== id);
13335
13691
  });
13336
13692
  }, []);
13337
- const registerFolder = useCallback20((name, parent, nonce, stack) => {
13693
+ const registerFolder = useCallback21((name, parent, nonce, stack) => {
13338
13694
  setFolders((prevFolders) => {
13339
13695
  return [
13340
13696
  ...prevFolders,
@@ -13347,7 +13703,7 @@ var CompositionManagerProvider = ({
13347
13703
  ];
13348
13704
  });
13349
13705
  }, []);
13350
- const unregisterFolder = useCallback20((name, parent) => {
13706
+ const unregisterFolder = useCallback21((name, parent) => {
13351
13707
  setFolders((prevFolders) => {
13352
13708
  return prevFolders.filter((p) => !(p.name === name && p.parent === parent));
13353
13709
  });
@@ -13986,7 +14342,7 @@ var OffthreadVideoForRendering = ({
13986
14342
  continueRender2,
13987
14343
  delayRender2
13988
14344
  ]);
13989
- const onErr = useCallback21(() => {
14345
+ const onErr = useCallback22(() => {
13990
14346
  if (onError) {
13991
14347
  onError?.(new Error("Failed to load image with src " + imageSrc));
13992
14348
  } else {
@@ -13996,7 +14352,7 @@ var OffthreadVideoForRendering = ({
13996
14352
  const className = useMemo35(() => {
13997
14353
  return [OBJECTFIT_CONTAIN_CLASS_NAME, props2.className].filter(truthy).join(" ");
13998
14354
  }, [props2.className]);
13999
- const onImageFrame = useCallback21((img) => {
14355
+ const onImageFrame = useCallback22((img) => {
14000
14356
  if (onVideoFrame) {
14001
14357
  onVideoFrame(img);
14002
14358
  }
@@ -14129,7 +14485,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
14129
14485
  mediaVolume
14130
14486
  });
14131
14487
  warnAboutTooHighVolume(userPreferredVolume);
14132
- const getStack = useCallback22(() => {
14488
+ const getStack = useCallback23(() => {
14133
14489
  return _remotionInternalStack ?? null;
14134
14490
  }, [_remotionInternalStack]);
14135
14491
  useMediaInTimeline({
@@ -14145,7 +14501,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
14145
14501
  premountDisplay: parentSequence?.premountDisplay ?? null,
14146
14502
  postmountDisplay: parentSequence?.postmountDisplay ?? null,
14147
14503
  loopDisplay: undefined,
14148
- documentationLink: name === undefined ? onlyWarnForMediaSeekingError ? "https://www.remotion.dev/docs/offthreadvideo" : "https://www.remotion.dev/docs/html5-video" : null,
14504
+ documentationLink: onlyWarnForMediaSeekingError ? "https://www.remotion.dev/docs/offthreadvideo" : "https://www.remotion.dev/docs/html5-video",
14149
14505
  refForOutline: videoRef
14150
14506
  });
14151
14507
  useMediaPlayback({
@@ -14276,6 +14632,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
14276
14632
  isClientSideRendering: false
14277
14633
  });
14278
14634
  return /* @__PURE__ */ jsx34("video", {
14635
+ ...nativeProps,
14279
14636
  ref: videoRef,
14280
14637
  muted: muted || mediaMuted || userPreferredVolume <= 0,
14281
14638
  playsInline: true,
@@ -14284,7 +14641,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
14284
14641
  style: actualStyle,
14285
14642
  disableRemotePlayback: true,
14286
14643
  crossOrigin: crossOriginValue,
14287
- ...nativeProps
14644
+ controls: false
14288
14645
  });
14289
14646
  };
14290
14647
  var VideoForPreview = forwardRef13(VideoForDevelopmentRefForwardingFunction);
@@ -14304,7 +14661,7 @@ var InnerOffthreadVideo = (props2) => {
14304
14661
  if (environment.isClientSideRendering) {
14305
14662
  throw new Error("<OffthreadVideo> is not supported in @remotion/web-renderer. Use <Video> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");
14306
14663
  }
14307
- const onDuration = useCallback23(() => {
14664
+ const onDuration = useCallback24(() => {
14308
14665
  return;
14309
14666
  }, []);
14310
14667
  if (typeof props2.src !== "string") {
@@ -14672,42 +15029,19 @@ var Internals = {
14672
15029
  computeEffectiveSchemaValuesDotNotation,
14673
15030
  interpolateKeyframedStatus,
14674
15031
  makeStaticDragOverride,
14675
- makeKeyframedDragOverride,
14676
- resolveDragOverrideValue,
14677
- getStaticDragOverrideValue,
14678
- OverrideIdsToNodePathsGettersContext,
14679
- OverrideIdsToNodePathsSettersContext,
14680
- findPropsToDelete,
14681
- makeSequencePropsSubscriptionKey,
14682
- getPropStatusesCtx,
14683
- getEffectPropStatusesCtx,
14684
- hiddenField,
14685
- durationInFramesField,
14686
- fromField
14687
- };
14688
- var validateFrame = ({
14689
- allowFloats,
14690
- durationInFrames,
14691
- frame
14692
- }) => {
14693
- if (typeof frame === "undefined") {
14694
- throw new TypeError(`Argument missing for parameter "frame"`);
14695
- }
14696
- if (typeof frame !== "number") {
14697
- throw new TypeError(`Argument passed for "frame" is not a number: ${frame}`);
14698
- }
14699
- if (!Number.isFinite(frame)) {
14700
- throw new RangeError(`Frame ${frame} is not finite`);
14701
- }
14702
- if (frame % 1 !== 0 && !allowFloats) {
14703
- throw new RangeError(`Argument for frame must be an integer, but got ${frame}`);
14704
- }
14705
- if (frame < 0 && frame < -durationInFrames) {
14706
- throw new RangeError(`Cannot use frame ${frame}: Duration of composition is ${durationInFrames}, therefore the lowest frame that can be rendered is ${-durationInFrames}`);
14707
- }
14708
- if (frame > durationInFrames - 1) {
14709
- throw new RangeError(`Cannot use frame ${frame}: Duration of composition is ${durationInFrames}, therefore the highest frame that can be rendered is ${durationInFrames - 1}`);
14710
- }
15032
+ makeKeyframedDragOverride,
15033
+ resolveDragOverrideValue,
15034
+ getStaticDragOverrideValue,
15035
+ OverrideIdsToNodePathsGettersContext,
15036
+ OverrideIdsToNodePathsSettersContext,
15037
+ findPropsToDelete,
15038
+ makeSequencePropsSubscriptionKey,
15039
+ getPropStatusesCtx,
15040
+ getEffectPropStatusesCtx,
15041
+ hiddenField,
15042
+ durationInFramesField,
15043
+ freezeField,
15044
+ fromField
14711
15045
  };
14712
15046
  var flattenChildren = (children) => {
14713
15047
  const childrenArray = React40.Children.toArray(children);
@@ -14783,255 +15117,22 @@ var SeriesInner = (props2) => {
14783
15117
  return /* @__PURE__ */ jsx37(IsInsideSeriesContainer, {
14784
15118
  children: /* @__PURE__ */ jsx37(Sequence, {
14785
15119
  layout: "none",
14786
- name: "<Series>",
14787
- _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/series",
14788
- ...props2,
14789
- children: childrenValue
14790
- })
14791
- });
14792
- };
14793
- var Series = Object.assign(wrapInSchema({
14794
- Component: SeriesInner,
14795
- schema: sequenceSchemaDefaultLayoutNone,
14796
- supportsEffects: false
14797
- }), {
14798
- Sequence: SeriesSequence
14799
- });
14800
- addSequenceStackTraces(Series);
14801
- var validateSpringDuration = (dur) => {
14802
- if (typeof dur === "undefined") {
14803
- return;
14804
- }
14805
- if (typeof dur !== "number") {
14806
- throw new TypeError(`A "duration" of a spring must be a "number" but is "${typeof dur}"`);
14807
- }
14808
- if (Number.isNaN(dur)) {
14809
- throw new TypeError('A "duration" of a spring is NaN, which it must not be');
14810
- }
14811
- if (!Number.isFinite(dur)) {
14812
- throw new TypeError('A "duration" of a spring must be finite, but is ' + dur);
14813
- }
14814
- if (dur <= 0) {
14815
- throw new TypeError('A "duration" of a spring must be positive, but is ' + dur);
14816
- }
14817
- };
14818
- var defaultSpringConfig = {
14819
- damping: 10,
14820
- mass: 1,
14821
- stiffness: 100,
14822
- overshootClamping: false
14823
- };
14824
- var advanceCache = {};
14825
- function advance({
14826
- animation,
14827
- now,
14828
- config
14829
- }) {
14830
- const { toValue: toValue2, lastTimestamp, current, velocity } = animation;
14831
- const deltaTime = Math.min(now - lastTimestamp, 64);
14832
- if (config.damping <= 0) {
14833
- throw new Error("Spring damping must be greater than 0, otherwise the spring() animation will never end, causing an infinite loop.");
14834
- }
14835
- const c2 = config.damping;
14836
- const m = config.mass;
14837
- const k = config.stiffness;
14838
- const cacheKey = [
14839
- toValue2,
14840
- lastTimestamp,
14841
- current,
14842
- velocity,
14843
- c2,
14844
- m,
14845
- k,
14846
- now
14847
- ].join("-");
14848
- if (advanceCache[cacheKey]) {
14849
- return advanceCache[cacheKey];
14850
- }
14851
- const v0 = -velocity;
14852
- const x0 = toValue2 - current;
14853
- const zeta = c2 / (2 * Math.sqrt(k * m));
14854
- const omega0 = Math.sqrt(k / m);
14855
- const omega1 = omega0 * Math.sqrt(1 - zeta ** 2);
14856
- const t = deltaTime / 1000;
14857
- const sin1 = Math.sin(omega1 * t);
14858
- const cos1 = Math.cos(omega1 * t);
14859
- const underDampedEnvelope = Math.exp(-zeta * omega0 * t);
14860
- const underDampedFrag1 = underDampedEnvelope * (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);
14861
- const underDampedPosition = toValue2 - underDampedFrag1;
14862
- const underDampedVelocity = zeta * omega0 * underDampedFrag1 - underDampedEnvelope * (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);
14863
- const criticallyDampedEnvelope = Math.exp(-omega0 * t);
14864
- const criticallyDampedPosition = toValue2 - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);
14865
- const criticallyDampedVelocity = criticallyDampedEnvelope * (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);
14866
- const animationNode = {
14867
- toValue: toValue2,
14868
- prevPosition: current,
14869
- lastTimestamp: now,
14870
- current: zeta < 1 ? underDampedPosition : criticallyDampedPosition,
14871
- velocity: zeta < 1 ? underDampedVelocity : criticallyDampedVelocity
14872
- };
14873
- advanceCache[cacheKey] = animationNode;
14874
- return animationNode;
14875
- }
14876
- var calculationCache = {};
14877
- function springCalculation({
14878
- frame,
14879
- fps,
14880
- config = {}
14881
- }) {
14882
- const from = 0;
14883
- const to = 1;
14884
- const cacheKey = [
14885
- frame,
14886
- fps,
14887
- config.damping,
14888
- config.mass,
14889
- config.overshootClamping,
14890
- config.stiffness
14891
- ].join("-");
14892
- if (calculationCache[cacheKey]) {
14893
- return calculationCache[cacheKey];
14894
- }
14895
- let animation = {
14896
- lastTimestamp: 0,
14897
- current: from,
14898
- toValue: to,
14899
- velocity: 0,
14900
- prevPosition: 0
14901
- };
14902
- const frameClamped = Math.max(0, frame);
14903
- const unevenRest = frameClamped % 1;
14904
- for (let f = 0;f <= Math.floor(frameClamped); f++) {
14905
- if (f === Math.floor(frameClamped)) {
14906
- f += unevenRest;
14907
- }
14908
- const time = f / fps * 1000;
14909
- animation = advance({
14910
- animation,
14911
- now: time,
14912
- config: {
14913
- ...defaultSpringConfig,
14914
- ...config
14915
- }
14916
- });
14917
- }
14918
- calculationCache[cacheKey] = animation;
14919
- return animation;
14920
- }
14921
- var cache = new Map;
14922
- function measureSpring({
14923
- fps,
14924
- config = {},
14925
- threshold = 0.005
14926
- }) {
14927
- if (typeof threshold !== "number") {
14928
- throw new TypeError(`threshold must be a number, got ${threshold} of type ${typeof threshold}`);
14929
- }
14930
- if (threshold === 0) {
14931
- return Infinity;
14932
- }
14933
- if (threshold === 1) {
14934
- return 0;
14935
- }
14936
- if (isNaN(threshold)) {
14937
- throw new TypeError("Threshold is NaN");
14938
- }
14939
- if (!Number.isFinite(threshold)) {
14940
- throw new TypeError("Threshold is not finite");
14941
- }
14942
- if (threshold < 0) {
14943
- throw new TypeError("Threshold is below 0");
14944
- }
14945
- const cacheKey = [
14946
- fps,
14947
- config.damping,
14948
- config.mass,
14949
- config.overshootClamping,
14950
- config.stiffness,
14951
- threshold
14952
- ].join("-");
14953
- if (cache.has(cacheKey)) {
14954
- return cache.get(cacheKey);
14955
- }
14956
- validateFps(fps, "to the measureSpring() function", false);
14957
- let frame = 0;
14958
- let finishedFrame = 0;
14959
- const calc = () => {
14960
- return springCalculation({
14961
- fps,
14962
- frame,
14963
- config
14964
- });
14965
- };
14966
- let animation = calc();
14967
- const calcDifference = () => {
14968
- return Math.abs(animation.current - animation.toValue);
14969
- };
14970
- let difference = calcDifference();
14971
- while (difference >= threshold) {
14972
- frame++;
14973
- animation = calc();
14974
- difference = calcDifference();
14975
- }
14976
- finishedFrame = frame;
14977
- for (let i = 0;i < 20; i++) {
14978
- frame++;
14979
- animation = calc();
14980
- difference = calcDifference();
14981
- if (difference >= threshold) {
14982
- i = 0;
14983
- finishedFrame = frame + 1;
14984
- }
14985
- }
14986
- cache.set(cacheKey, finishedFrame);
14987
- return finishedFrame;
14988
- }
14989
- function spring({
14990
- frame: passedFrame,
14991
- fps,
14992
- config = {},
14993
- from = 0,
14994
- to = 1,
14995
- durationInFrames: passedDurationInFrames,
14996
- durationRestThreshold,
14997
- delay = 0,
14998
- reverse = false
14999
- }) {
15000
- validateSpringDuration(passedDurationInFrames);
15001
- validateFrame({
15002
- frame: passedFrame,
15003
- durationInFrames: Infinity,
15004
- allowFloats: true
15005
- });
15006
- validateFps(fps, "to spring()", false);
15007
- const needsToCalculateNaturalDuration = reverse || typeof passedDurationInFrames !== "undefined";
15008
- const naturalDuration = needsToCalculateNaturalDuration ? measureSpring({
15009
- fps,
15010
- config,
15011
- threshold: durationRestThreshold
15012
- }) : undefined;
15013
- const naturalDurationGetter = needsToCalculateNaturalDuration ? {
15014
- get: () => naturalDuration
15015
- } : {
15016
- get: () => {
15017
- throw new Error("did not calculate natural duration, this is an error with Remotion. Please report");
15018
- }
15019
- };
15020
- const reverseProcessed = reverse ? (passedDurationInFrames ?? naturalDurationGetter.get()) - passedFrame : passedFrame;
15021
- const delayProcessed = reverseProcessed + (reverse ? delay : -delay);
15022
- const durationProcessed = passedDurationInFrames === undefined ? delayProcessed : delayProcessed / (passedDurationInFrames / naturalDurationGetter.get());
15023
- if (passedDurationInFrames && delayProcessed > passedDurationInFrames) {
15024
- return to;
15025
- }
15026
- const spr = springCalculation({
15027
- fps,
15028
- frame: durationProcessed,
15029
- config
15120
+ name: "<Series>",
15121
+ _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/series",
15122
+ ...props2,
15123
+ children: childrenValue
15124
+ })
15030
15125
  });
15031
- const inner = config.overshootClamping ? to >= from ? Math.min(spr.current, to) : Math.max(spr.current, to) : spr.current;
15032
- const interpolated = from === 0 && to === 1 ? inner : interpolate(inner, [0, 1], [from, to]);
15033
- return interpolated;
15034
- }
15126
+ };
15127
+ var Series = Object.assign(wrapInSchema({
15128
+ Component: SeriesInner,
15129
+ componentIdentity: "dev.remotion.remotion.Series",
15130
+ schema: sequenceSchemaDefaultLayoutNone,
15131
+ supportsEffects: false
15132
+ }), {
15133
+ Sequence: SeriesSequence
15134
+ });
15135
+ addSequenceStackTraces(Series);
15035
15136
  var problematicCharacters = {
15036
15137
  "%3A": ":",
15037
15138
  "%2F": "/",
@@ -15490,7 +15591,7 @@ var VideoForwardingFunction = (props2, ref) => {
15490
15591
  throw new TypeError(`The \`<Html5Video>\` tag requires a string for \`src\`, but got ${JSON.stringify(props2.src)} instead.`);
15491
15592
  }
15492
15593
  const preloadedSrc = usePreload(props2.src);
15493
- const onDuration = useCallback24((src, durationInSeconds) => {
15594
+ const onDuration = useCallback25((src, durationInSeconds) => {
15494
15595
  setDurations({ type: "got-duration", durationInSeconds, src });
15495
15596
  }, [setDurations]);
15496
15597
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props2.src)];
@@ -15600,7 +15701,7 @@ addSequenceStackTraces(Composition);
15600
15701
  addSequenceStackTraces(Folder);
15601
15702
 
15602
15703
  // ../shapes/dist/esm/index.mjs
15603
- import React, { useCallback as useCallback25, useMemo as useMemo40, useRef as useRef29 } from "react";
15704
+ import React, { useCallback as useCallback26, useMemo as useMemo40, useRef as useRef29 } from "react";
15604
15705
  import { version } from "react-dom";
15605
15706
  import { jsx as jsx40, jsxs as jsxs3 } from "react/jsx-runtime";
15606
15707
  import { jsx as jsx210 } from "react/jsx-runtime";
@@ -15612,6 +15713,7 @@ import { jsx as jsx72 } from "react/jsx-runtime";
15612
15713
  import { jsx as jsx82 } from "react/jsx-runtime";
15613
15714
  import { jsx as jsx92 } from "react/jsx-runtime";
15614
15715
  import { jsx as jsx102 } from "react/jsx-runtime";
15716
+ import { jsx as jsx112 } from "react/jsx-runtime";
15615
15717
  var unitDir = (from, to) => {
15616
15718
  const dx = to[0] - from[0];
15617
15719
  const dy = to[1] - from[1];
@@ -15770,6 +15872,7 @@ var RenderSvg = ({
15770
15872
  pixelDensity,
15771
15873
  durationInFrames,
15772
15874
  from,
15875
+ freeze,
15773
15876
  hidden,
15774
15877
  name,
15775
15878
  showInTimeline,
@@ -15790,10 +15893,10 @@ var RenderSvg = ({
15790
15893
  };
15791
15894
  }, [pathStyle]);
15792
15895
  const outlineRef = useRef29(null);
15793
- const setSvgRef = useCallback25((node) => {
15896
+ const setSvgRef = useCallback26((node) => {
15794
15897
  outlineRef.current = node;
15795
15898
  }, []);
15796
- const setCanvasRef = useCallback25((canvas) => {
15899
+ const setCanvasRef = useCallback26((canvas) => {
15797
15900
  outlineRef.current = canvas;
15798
15901
  }, []);
15799
15902
  const memoizedEffectDefinitions = Internals.useMemoizedEffectDefinitions(effects);
@@ -15878,6 +15981,7 @@ var RenderSvg = ({
15878
15981
  return /* @__PURE__ */ jsx40(Sequence, {
15879
15982
  layout: "none",
15880
15983
  from,
15984
+ freeze,
15881
15985
  hidden,
15882
15986
  showInTimeline,
15883
15987
  _experimentalControls: controls,
@@ -15928,56 +16032,477 @@ var colorField = ({
15928
16032
  description
15929
16033
  };
15930
16034
  };
15931
- var enumField = ({
15932
- defaultValue,
15933
- description,
15934
- variants
16035
+ var enumField = ({
16036
+ defaultValue,
16037
+ description,
16038
+ variants
16039
+ }) => {
16040
+ return {
16041
+ type: "enum",
16042
+ default: defaultValue,
16043
+ description,
16044
+ variants: Object.fromEntries(variants.map((variant) => [variant, {}]))
16045
+ };
16046
+ };
16047
+ var makeShapeSchema = (shapeFields) => {
16048
+ return {
16049
+ from: Internals.sequenceSchema.from,
16050
+ freeze: Internals.sequenceSchema.freeze,
16051
+ durationInFrames: Internals.sequenceSchema.durationInFrames,
16052
+ ...shapeFields,
16053
+ fill: colorField({
16054
+ defaultValue: "#0b84ff",
16055
+ description: "Fill"
16056
+ }),
16057
+ ...Internals.sequenceVisualStyleSchema,
16058
+ hidden: Internals.sequenceSchema.hidden
16059
+ };
16060
+ };
16061
+ var arrowSchema = makeShapeSchema({
16062
+ length: numberField({
16063
+ defaultValue: 300,
16064
+ description: "Length",
16065
+ min: 0
16066
+ }),
16067
+ headWidth: numberField({
16068
+ defaultValue: 185,
16069
+ description: "Head Width",
16070
+ min: 0
16071
+ }),
16072
+ headLength: numberField({
16073
+ defaultValue: 120,
16074
+ description: "Head Length",
16075
+ min: 0
16076
+ }),
16077
+ shaftWidth: numberField({
16078
+ defaultValue: 80,
16079
+ description: "Shaft Width",
16080
+ min: 0
16081
+ }),
16082
+ direction: enumField({
16083
+ defaultValue: "right",
16084
+ description: "Direction",
16085
+ variants: ["right", "left", "up", "down"]
16086
+ }),
16087
+ cornerRadius: numberField({
16088
+ defaultValue: 0,
16089
+ description: "Corner Radius",
16090
+ min: 0
16091
+ })
16092
+ });
16093
+ var ArrowInner = ({
16094
+ length: length2,
16095
+ headWidth,
16096
+ headLength,
16097
+ shaftWidth,
16098
+ direction,
16099
+ cornerRadius,
16100
+ ...props
16101
+ }) => {
16102
+ return /* @__PURE__ */ jsx210(RenderSvg, {
16103
+ defaultName: "<Arrow>",
16104
+ documentationLink: "https://www.remotion.dev/docs/shapes/arrow",
16105
+ ...makeArrow({
16106
+ length: length2,
16107
+ headWidth,
16108
+ headLength,
16109
+ shaftWidth,
16110
+ direction,
16111
+ cornerRadius
16112
+ }),
16113
+ ...props
16114
+ });
16115
+ };
16116
+ var Arrow = Internals.wrapInSchema({
16117
+ Component: ArrowInner,
16118
+ componentIdentity: "dev.remotion.shapes.Arrow",
16119
+ schema: arrowSchema,
16120
+ supportsEffects: true
16121
+ });
16122
+ Internals.addSequenceStackTraces(Arrow);
16123
+ var shortenVector = (vector, radius) => {
16124
+ const [x, y] = vector;
16125
+ const currentLength = Math.sqrt(x * x + y * y);
16126
+ const scalingFactor = (currentLength - radius) / currentLength;
16127
+ return [x * scalingFactor, y * scalingFactor];
16128
+ };
16129
+ var scaleVectorToLength = (vector, length2) => {
16130
+ const [x, y] = vector;
16131
+ const currentLength = Math.sqrt(x * x + y * y);
16132
+ const scalingFactor = length2 / currentLength;
16133
+ return [x * scalingFactor, y * scalingFactor];
16134
+ };
16135
+ var joinPoints = (points, {
16136
+ edgeRoundness,
16137
+ cornerRadius,
16138
+ roundCornerStrategy
16139
+ }) => {
16140
+ return points.map(([x, y], i) => {
16141
+ const prevPointIndex = i === 0 ? points.length - 2 : i - 1;
16142
+ const prevPoint = points[prevPointIndex];
16143
+ const nextPointIndex = i === points.length - 1 ? 1 : i + 1;
16144
+ const nextPoint = points[nextPointIndex];
16145
+ const middleOfLine = [(x + nextPoint[0]) / 2, (y + nextPoint[1]) / 2];
16146
+ const prevPointMiddleOfLine = [
16147
+ (x + prevPoint[0]) / 2,
16148
+ (y + prevPoint[1]) / 2
16149
+ ];
16150
+ const prevVector = [x - prevPoint[0], y - prevPoint[1]];
16151
+ const nextVector = [nextPoint[0] - x, nextPoint[1] - y];
16152
+ if (i === 0) {
16153
+ if (edgeRoundness !== null) {
16154
+ return [
16155
+ {
16156
+ type: "M",
16157
+ x: middleOfLine[0],
16158
+ y: middleOfLine[1]
16159
+ }
16160
+ ];
16161
+ }
16162
+ if (cornerRadius !== 0) {
16163
+ const computeRadius = shortenVector(nextVector, cornerRadius);
16164
+ return [
16165
+ {
16166
+ type: "M",
16167
+ x: computeRadius[0] + x,
16168
+ y: computeRadius[1] + y
16169
+ }
16170
+ ];
16171
+ }
16172
+ return [
16173
+ {
16174
+ type: "M",
16175
+ x,
16176
+ y
16177
+ }
16178
+ ];
16179
+ }
16180
+ if (cornerRadius && edgeRoundness !== null) {
16181
+ throw new Error(`"cornerRadius" and "edgeRoundness" cannot be specified at the same time.`);
16182
+ }
16183
+ if (edgeRoundness === null) {
16184
+ if (cornerRadius === 0) {
16185
+ return [
16186
+ {
16187
+ type: "L",
16188
+ x,
16189
+ y
16190
+ }
16191
+ ];
16192
+ }
16193
+ const prevVectorMinusRadius = shortenVector(prevVector, cornerRadius);
16194
+ const prevVectorLength = scaleVectorToLength(prevVector, cornerRadius);
16195
+ const nextVectorMinusRadius = scaleVectorToLength(nextVector, cornerRadius);
16196
+ const firstDraw = [
16197
+ prevPoint[0] + prevVectorMinusRadius[0],
16198
+ prevPoint[1] + prevVectorMinusRadius[1]
16199
+ ];
16200
+ return [
16201
+ {
16202
+ type: "L",
16203
+ x: firstDraw[0],
16204
+ y: firstDraw[1]
16205
+ },
16206
+ roundCornerStrategy === "arc" ? {
16207
+ type: "a",
16208
+ rx: cornerRadius,
16209
+ ry: cornerRadius,
16210
+ xAxisRotation: 0,
16211
+ dx: prevVectorLength[0] + nextVectorMinusRadius[0],
16212
+ dy: prevVectorLength[1] + nextVectorMinusRadius[1],
16213
+ largeArcFlag: false,
16214
+ sweepFlag: true
16215
+ } : {
16216
+ type: "C",
16217
+ x: firstDraw[0] + prevVectorLength[0] + nextVectorMinusRadius[0],
16218
+ y: firstDraw[1] + prevVectorLength[1] + nextVectorMinusRadius[1],
16219
+ cp1x: x,
16220
+ cp1y: y,
16221
+ cp2x: x,
16222
+ cp2y: y
16223
+ }
16224
+ ];
16225
+ }
16226
+ const controlPoint1 = [
16227
+ prevPointMiddleOfLine[0] + prevVector[0] * edgeRoundness * 0.5,
16228
+ prevPointMiddleOfLine[1] + prevVector[1] * edgeRoundness * 0.5
16229
+ ];
16230
+ const controlPoint2 = [
16231
+ middleOfLine[0] - nextVector[0] * edgeRoundness * 0.5,
16232
+ middleOfLine[1] - nextVector[1] * edgeRoundness * 0.5
16233
+ ];
16234
+ return [
16235
+ {
16236
+ type: "C",
16237
+ cp1x: controlPoint1[0],
16238
+ cp1y: controlPoint1[1],
16239
+ cp2x: controlPoint2[0],
16240
+ cp2y: controlPoint2[1],
16241
+ x: middleOfLine[0],
16242
+ y: middleOfLine[1]
16243
+ }
16244
+ ];
16245
+ }).flat(1);
16246
+ };
16247
+ var ensurePositive = (name, value) => {
16248
+ if (typeof value !== "number" || value <= 0) {
16249
+ throw new Error(`"${name}" must be a positive number, got ${value}`);
16250
+ }
16251
+ };
16252
+ var pointerInterval = ({
16253
+ availableLength,
16254
+ pointerBaseWidth,
16255
+ pointerPosition
16256
+ }) => {
16257
+ const center = availableLength * pointerPosition;
16258
+ const half = pointerBaseWidth / 2;
16259
+ return {
16260
+ center,
16261
+ start: Math.max(0, center - half),
16262
+ end: Math.min(availableLength, center + half)
16263
+ };
16264
+ };
16265
+ var areSamePoint = (a2, b2) => {
16266
+ return a2[0] === b2[0] && a2[1] === b2[1];
16267
+ };
16268
+ var normalizeClosedPoints = (points) => {
16269
+ const deduplicated = points.reduce((acc, entry) => {
16270
+ const previous = acc[acc.length - 1];
16271
+ if (previous && areSamePoint(previous.point, entry.point)) {
16272
+ acc[acc.length - 1] = {
16273
+ point: previous.point,
16274
+ round: previous.round && entry.round
16275
+ };
16276
+ return acc;
16277
+ }
16278
+ return [...acc, entry];
16279
+ }, []);
16280
+ if (deduplicated.length === 0) {
16281
+ return deduplicated;
16282
+ }
16283
+ const first = deduplicated[0];
16284
+ const last = deduplicated[deduplicated.length - 1];
16285
+ if (areSamePoint(first.point, last.point)) {
16286
+ const [firstEntry, ...rest] = deduplicated;
16287
+ const withoutLast = rest.slice(0, -1);
16288
+ const mergedFirst = {
16289
+ point: firstEntry.point,
16290
+ round: firstEntry.round && last.round
16291
+ };
16292
+ return [mergedFirst, ...withoutLast, mergedFirst];
16293
+ }
16294
+ return [...deduplicated, first];
16295
+ };
16296
+ var unitDir2 = (from, to) => {
16297
+ const dx = to[0] - from[0];
16298
+ const dy = to[1] - from[1];
16299
+ const len = Math.sqrt(dx * dx + dy * dy);
16300
+ if (len === 0) {
16301
+ return [0, 0];
16302
+ }
16303
+ return [dx / len, dy / len];
16304
+ };
16305
+ var makeInstructions2 = ({
16306
+ points,
16307
+ edgeRoundness,
16308
+ cornerRadius
16309
+ }) => {
16310
+ const rawPoints = points.map((p) => p.point);
16311
+ if (edgeRoundness !== null || cornerRadius === 0) {
16312
+ return [
16313
+ ...joinPoints(rawPoints, {
16314
+ edgeRoundness,
16315
+ cornerRadius,
16316
+ roundCornerStrategy: "arc"
16317
+ }),
16318
+ {
16319
+ type: "Z"
16320
+ }
16321
+ ];
16322
+ }
16323
+ const uniquePoints = areSamePoint(points[0].point, points[points.length - 1].point) ? points.slice(0, -1) : points;
16324
+ const firstPoint = uniquePoints[0];
16325
+ const startDir = firstPoint.round ? unitDir2(uniquePoints[0].point, uniquePoints[1].point) : null;
16326
+ const startPoint = startDir ? [
16327
+ firstPoint.point[0] + startDir[0] * cornerRadius,
16328
+ firstPoint.point[1] + startDir[1] * cornerRadius
16329
+ ] : firstPoint.point;
16330
+ const instructions = [
16331
+ { type: "M", x: startPoint[0], y: startPoint[1] }
16332
+ ];
16333
+ for (let i = 1;i < uniquePoints.length; i++) {
16334
+ const current = uniquePoints[i];
16335
+ if (!current.round) {
16336
+ instructions.push({
16337
+ type: "L",
16338
+ x: current.point[0],
16339
+ y: current.point[1]
16340
+ });
16341
+ continue;
16342
+ }
16343
+ const previous = uniquePoints[i - 1].point;
16344
+ const next = uniquePoints[(i + 1) % uniquePoints.length].point;
16345
+ const incoming = unitDir2(previous, current.point);
16346
+ const outgoing = unitDir2(current.point, next);
16347
+ const arcStart = [
16348
+ current.point[0] - incoming[0] * cornerRadius,
16349
+ current.point[1] - incoming[1] * cornerRadius
16350
+ ];
16351
+ instructions.push({
16352
+ type: "L",
16353
+ x: arcStart[0],
16354
+ y: arcStart[1]
16355
+ }, {
16356
+ type: "a",
16357
+ rx: cornerRadius,
16358
+ ry: cornerRadius,
16359
+ xAxisRotation: 0,
16360
+ dx: incoming[0] * cornerRadius + outgoing[0] * cornerRadius,
16361
+ dy: incoming[1] * cornerRadius + outgoing[1] * cornerRadius,
16362
+ largeArcFlag: false,
16363
+ sweepFlag: true
16364
+ });
16365
+ }
16366
+ if (firstPoint.round) {
16367
+ const previous = uniquePoints[uniquePoints.length - 1].point;
16368
+ const incoming = unitDir2(previous, firstPoint.point);
16369
+ instructions.push({
16370
+ type: "L",
16371
+ x: firstPoint.point[0] - incoming[0] * cornerRadius,
16372
+ y: firstPoint.point[1] - incoming[1] * cornerRadius
16373
+ }, {
16374
+ type: "a",
16375
+ rx: cornerRadius,
16376
+ ry: cornerRadius,
16377
+ xAxisRotation: 0,
16378
+ dx: incoming[0] * cornerRadius + startDir[0] * cornerRadius,
16379
+ dy: incoming[1] * cornerRadius + startDir[1] * cornerRadius,
16380
+ largeArcFlag: false,
16381
+ sweepFlag: true
16382
+ });
16383
+ }
16384
+ instructions.push({ type: "Z" });
16385
+ return instructions;
16386
+ };
16387
+ var makeCallout = ({
16388
+ width = 500,
16389
+ height = 200,
16390
+ pointerLength = 40,
16391
+ pointerBaseWidth = 60,
16392
+ pointerPosition = 0.5,
16393
+ pointerDirection = "down",
16394
+ edgeRoundness = null,
16395
+ cornerRadius = 0
15935
16396
  }) => {
15936
- return {
15937
- type: "enum",
15938
- default: defaultValue,
15939
- description,
15940
- variants: Object.fromEntries(variants.map((variant) => [variant, {}]))
16397
+ ensurePositive("width", width);
16398
+ ensurePositive("height", height);
16399
+ ensurePositive("pointerLength", pointerLength);
16400
+ ensurePositive("pointerBaseWidth", pointerBaseWidth);
16401
+ if (typeof pointerPosition !== "number" || pointerPosition < 0 || pointerPosition > 1) {
16402
+ throw new Error(`"pointerPosition" must be a number between 0 and 1, got ${pointerPosition}`);
16403
+ }
16404
+ const horizontalInterval = pointerInterval({
16405
+ availableLength: width,
16406
+ pointerBaseWidth,
16407
+ pointerPosition
16408
+ });
16409
+ const verticalInterval = pointerInterval({
16410
+ availableLength: height,
16411
+ pointerBaseWidth,
16412
+ pointerPosition
16413
+ });
16414
+ const pointsByDirection = {
16415
+ up: [
16416
+ { point: [0, pointerLength], round: true },
16417
+ { point: [horizontalInterval.start, pointerLength], round: false },
16418
+ { point: [horizontalInterval.center, 0], round: false },
16419
+ { point: [horizontalInterval.end, pointerLength], round: false },
16420
+ { point: [width, pointerLength], round: true },
16421
+ { point: [width, height + pointerLength], round: true },
16422
+ { point: [0, height + pointerLength], round: true },
16423
+ { point: [0, pointerLength], round: true }
16424
+ ],
16425
+ down: [
16426
+ { point: [0, 0], round: true },
16427
+ { point: [width, 0], round: true },
16428
+ { point: [width, height], round: true },
16429
+ { point: [horizontalInterval.end, height], round: false },
16430
+ {
16431
+ point: [horizontalInterval.center, height + pointerLength],
16432
+ round: false
16433
+ },
16434
+ { point: [horizontalInterval.start, height], round: false },
16435
+ { point: [0, height], round: true },
16436
+ { point: [0, 0], round: true }
16437
+ ],
16438
+ left: [
16439
+ { point: [pointerLength, 0], round: true },
16440
+ { point: [width + pointerLength, 0], round: true },
16441
+ { point: [width + pointerLength, height], round: true },
16442
+ { point: [pointerLength, height], round: true },
16443
+ { point: [pointerLength, verticalInterval.end], round: false },
16444
+ { point: [0, verticalInterval.center], round: false },
16445
+ { point: [pointerLength, verticalInterval.start], round: false },
16446
+ { point: [pointerLength, 0], round: true }
16447
+ ],
16448
+ right: [
16449
+ { point: [0, 0], round: true },
16450
+ { point: [width, 0], round: true },
16451
+ { point: [width, verticalInterval.start], round: false },
16452
+ { point: [width + pointerLength, verticalInterval.center], round: false },
16453
+ { point: [width, verticalInterval.end], round: false },
16454
+ { point: [width, height], round: true },
16455
+ { point: [0, height], round: true },
16456
+ { point: [0, 0], round: true }
16457
+ ]
15941
16458
  };
15942
- };
15943
- var makeShapeSchema = (shapeFields) => {
16459
+ const points = normalizeClosedPoints(pointsByDirection[pointerDirection]);
16460
+ const instructions = makeInstructions2({ points, edgeRoundness, cornerRadius });
16461
+ const path = serializeInstructions(instructions);
16462
+ const shapeWidth = pointerDirection === "left" || pointerDirection === "right" ? width + pointerLength : width;
16463
+ const shapeHeight = pointerDirection === "up" || pointerDirection === "down" ? height + pointerLength : height;
16464
+ const bodyX = pointerDirection === "left" ? pointerLength : 0;
16465
+ const bodyY = pointerDirection === "up" ? pointerLength : 0;
15944
16466
  return {
15945
- from: Internals.sequenceSchema.from,
15946
- durationInFrames: Internals.sequenceSchema.durationInFrames,
15947
- ...shapeFields,
15948
- fill: colorField({
15949
- defaultValue: "#0b84ff",
15950
- description: "Fill"
15951
- }),
15952
- ...Internals.sequenceVisualStyleSchema,
15953
- hidden: Internals.sequenceSchema.hidden
16467
+ width: shapeWidth,
16468
+ height: shapeHeight,
16469
+ instructions,
16470
+ path,
16471
+ transformOrigin: `${bodyX + width / 2} ${bodyY + height / 2}`
15954
16472
  };
15955
16473
  };
15956
- var arrowSchema = makeShapeSchema({
15957
- length: numberField({
15958
- defaultValue: 300,
15959
- description: "Length",
15960
- min: 0
16474
+ var calloutSchema = makeShapeSchema({
16475
+ width: numberField({
16476
+ defaultValue: 500,
16477
+ description: "Width",
16478
+ min: 1
15961
16479
  }),
15962
- headWidth: numberField({
15963
- defaultValue: 185,
15964
- description: "Head Width",
15965
- min: 0
16480
+ height: numberField({
16481
+ defaultValue: 200,
16482
+ description: "Height",
16483
+ min: 1
15966
16484
  }),
15967
- headLength: numberField({
15968
- defaultValue: 120,
15969
- description: "Head Length",
15970
- min: 0
16485
+ pointerLength: numberField({
16486
+ defaultValue: 40,
16487
+ description: "Pointer Length",
16488
+ min: 1
15971
16489
  }),
15972
- shaftWidth: numberField({
15973
- defaultValue: 80,
15974
- description: "Shaft Width",
15975
- min: 0
16490
+ pointerBaseWidth: numberField({
16491
+ defaultValue: 60,
16492
+ description: "Pointer Base Width",
16493
+ min: 1
15976
16494
  }),
15977
- direction: enumField({
15978
- defaultValue: "right",
15979
- description: "Direction",
15980
- variants: ["right", "left", "up", "down"]
16495
+ pointerPosition: numberField({
16496
+ defaultValue: 0.5,
16497
+ description: "Pointer Position",
16498
+ min: 0,
16499
+ max: 1,
16500
+ step: 0.01
16501
+ }),
16502
+ pointerDirection: enumField({
16503
+ defaultValue: "down",
16504
+ description: "Pointer Direction",
16505
+ variants: ["up", "down", "left", "right"]
15981
16506
  }),
15982
16507
  cornerRadius: numberField({
15983
16508
  defaultValue: 0,
@@ -15985,35 +16510,40 @@ var arrowSchema = makeShapeSchema({
15985
16510
  min: 0
15986
16511
  })
15987
16512
  });
15988
- var ArrowInner = ({
15989
- length: length2,
15990
- headWidth,
15991
- headLength,
15992
- shaftWidth,
15993
- direction,
16513
+ var CalloutInner = ({
16514
+ width,
16515
+ height,
16516
+ pointerLength,
16517
+ pointerBaseWidth,
16518
+ pointerPosition,
16519
+ pointerDirection,
16520
+ edgeRoundness,
15994
16521
  cornerRadius,
15995
16522
  ...props
15996
16523
  }) => {
15997
- return /* @__PURE__ */ jsx210(RenderSvg, {
15998
- defaultName: "<Arrow>",
15999
- documentationLink: "https://www.remotion.dev/docs/shapes/arrow",
16000
- ...makeArrow({
16001
- length: length2,
16002
- headWidth,
16003
- headLength,
16004
- shaftWidth,
16005
- direction,
16524
+ return /* @__PURE__ */ jsx310(RenderSvg, {
16525
+ defaultName: "<Callout>",
16526
+ documentationLink: "https://www.remotion.dev/docs/shapes/callout",
16527
+ ...makeCallout({
16528
+ width,
16529
+ height,
16530
+ pointerLength,
16531
+ pointerBaseWidth,
16532
+ pointerPosition,
16533
+ pointerDirection,
16534
+ edgeRoundness,
16006
16535
  cornerRadius
16007
16536
  }),
16008
16537
  ...props
16009
16538
  });
16010
16539
  };
16011
- var Arrow = Internals.wrapInSchema({
16012
- Component: ArrowInner,
16013
- schema: arrowSchema,
16540
+ var Callout = Internals.wrapInSchema({
16541
+ Component: CalloutInner,
16542
+ componentIdentity: "dev.remotion.shapes.Callout",
16543
+ schema: calloutSchema,
16014
16544
  supportsEffects: true
16015
16545
  });
16016
- Internals.addSequenceStackTraces(Arrow);
16546
+ Internals.addSequenceStackTraces(Callout);
16017
16547
  var makeCircle = ({ radius }) => {
16018
16548
  const instructions = [
16019
16549
  {
@@ -16062,7 +16592,7 @@ var circleSchema = makeShapeSchema({
16062
16592
  })
16063
16593
  });
16064
16594
  var CircleInner = ({ radius, ...props }) => {
16065
- return /* @__PURE__ */ jsx310(RenderSvg, {
16595
+ return /* @__PURE__ */ jsx42(RenderSvg, {
16066
16596
  defaultName: "<Circle>",
16067
16597
  documentationLink: "https://www.remotion.dev/docs/shapes/circle",
16068
16598
  ...makeCircle({ radius }),
@@ -16071,6 +16601,7 @@ var CircleInner = ({ radius, ...props }) => {
16071
16601
  };
16072
16602
  var Circle = Internals.wrapInSchema({
16073
16603
  Component: CircleInner,
16604
+ componentIdentity: "dev.remotion.shapes.Circle",
16074
16605
  schema: circleSchema,
16075
16606
  supportsEffects: true
16076
16607
  });
@@ -16118,7 +16649,7 @@ var ellipseSchema = makeShapeSchema({
16118
16649
  })
16119
16650
  });
16120
16651
  var EllipseInner = ({ rx, ry, ...props }) => {
16121
- return /* @__PURE__ */ jsx42(RenderSvg, {
16652
+ return /* @__PURE__ */ jsx52(RenderSvg, {
16122
16653
  defaultName: "<Ellipse>",
16123
16654
  documentationLink: "https://www.remotion.dev/docs/shapes/ellipse",
16124
16655
  ...makeEllipse({ rx, ry }),
@@ -16127,6 +16658,7 @@ var EllipseInner = ({ rx, ry, ...props }) => {
16127
16658
  };
16128
16659
  var Ellipse = Internals.wrapInSchema({
16129
16660
  Component: EllipseInner,
16661
+ componentIdentity: "dev.remotion.shapes.Ellipse",
16130
16662
  schema: ellipseSchema,
16131
16663
  supportsEffects: true
16132
16664
  });
@@ -16250,7 +16782,7 @@ var HeartInner = ({
16250
16782
  depthAdjustment = 0,
16251
16783
  ...props
16252
16784
  }) => {
16253
- return /* @__PURE__ */ jsx52(RenderSvg, {
16785
+ return /* @__PURE__ */ jsx62(RenderSvg, {
16254
16786
  defaultName: "<Heart>",
16255
16787
  documentationLink: "https://www.remotion.dev/docs/shapes/heart",
16256
16788
  ...makeHeart({
@@ -16264,6 +16796,7 @@ var HeartInner = ({
16264
16796
  };
16265
16797
  var Heart = Internals.wrapInSchema({
16266
16798
  Component: HeartInner,
16799
+ componentIdentity: "dev.remotion.shapes.Heart",
16267
16800
  schema: heartSchema,
16268
16801
  supportsEffects: true
16269
16802
  });
@@ -16408,7 +16941,7 @@ var PieInner = ({
16408
16941
  rotation,
16409
16942
  ...props
16410
16943
  }) => {
16411
- return /* @__PURE__ */ jsx62(RenderSvg, {
16944
+ return /* @__PURE__ */ jsx72(RenderSvg, {
16412
16945
  defaultName: "<Pie>",
16413
16946
  documentationLink: "https://www.remotion.dev/docs/shapes/pie",
16414
16947
  ...makePie({ radius, progress, closePath, counterClockwise, rotation }),
@@ -16417,134 +16950,11 @@ var PieInner = ({
16417
16950
  };
16418
16951
  var Pie = Internals.wrapInSchema({
16419
16952
  Component: PieInner,
16953
+ componentIdentity: "dev.remotion.shapes.Pie",
16420
16954
  schema: pieSchema,
16421
16955
  supportsEffects: true
16422
16956
  });
16423
16957
  Internals.addSequenceStackTraces(Pie);
16424
- var shortenVector = (vector, radius) => {
16425
- const [x, y] = vector;
16426
- const currentLength = Math.sqrt(x * x + y * y);
16427
- const scalingFactor = (currentLength - radius) / currentLength;
16428
- return [x * scalingFactor, y * scalingFactor];
16429
- };
16430
- var scaleVectorToLength = (vector, length2) => {
16431
- const [x, y] = vector;
16432
- const currentLength = Math.sqrt(x * x + y * y);
16433
- const scalingFactor = length2 / currentLength;
16434
- return [x * scalingFactor, y * scalingFactor];
16435
- };
16436
- var joinPoints = (points, {
16437
- edgeRoundness,
16438
- cornerRadius,
16439
- roundCornerStrategy
16440
- }) => {
16441
- return points.map(([x, y], i) => {
16442
- const prevPointIndex = i === 0 ? points.length - 2 : i - 1;
16443
- const prevPoint = points[prevPointIndex];
16444
- const nextPointIndex = i === points.length - 1 ? 1 : i + 1;
16445
- const nextPoint = points[nextPointIndex];
16446
- const middleOfLine = [(x + nextPoint[0]) / 2, (y + nextPoint[1]) / 2];
16447
- const prevPointMiddleOfLine = [
16448
- (x + prevPoint[0]) / 2,
16449
- (y + prevPoint[1]) / 2
16450
- ];
16451
- const prevVector = [x - prevPoint[0], y - prevPoint[1]];
16452
- const nextVector = [nextPoint[0] - x, nextPoint[1] - y];
16453
- if (i === 0) {
16454
- if (edgeRoundness !== null) {
16455
- return [
16456
- {
16457
- type: "M",
16458
- x: middleOfLine[0],
16459
- y: middleOfLine[1]
16460
- }
16461
- ];
16462
- }
16463
- if (cornerRadius !== 0) {
16464
- const computeRadius = shortenVector(nextVector, cornerRadius);
16465
- return [
16466
- {
16467
- type: "M",
16468
- x: computeRadius[0] + x,
16469
- y: computeRadius[1] + y
16470
- }
16471
- ];
16472
- }
16473
- return [
16474
- {
16475
- type: "M",
16476
- x,
16477
- y
16478
- }
16479
- ];
16480
- }
16481
- if (cornerRadius && edgeRoundness !== null) {
16482
- throw new Error(`"cornerRadius" and "edgeRoundness" cannot be specified at the same time.`);
16483
- }
16484
- if (edgeRoundness === null) {
16485
- if (cornerRadius === 0) {
16486
- return [
16487
- {
16488
- type: "L",
16489
- x,
16490
- y
16491
- }
16492
- ];
16493
- }
16494
- const prevVectorMinusRadius = shortenVector(prevVector, cornerRadius);
16495
- const prevVectorLength = scaleVectorToLength(prevVector, cornerRadius);
16496
- const nextVectorMinusRadius = scaleVectorToLength(nextVector, cornerRadius);
16497
- const firstDraw = [
16498
- prevPoint[0] + prevVectorMinusRadius[0],
16499
- prevPoint[1] + prevVectorMinusRadius[1]
16500
- ];
16501
- return [
16502
- {
16503
- type: "L",
16504
- x: firstDraw[0],
16505
- y: firstDraw[1]
16506
- },
16507
- roundCornerStrategy === "arc" ? {
16508
- type: "a",
16509
- rx: cornerRadius,
16510
- ry: cornerRadius,
16511
- xAxisRotation: 0,
16512
- dx: prevVectorLength[0] + nextVectorMinusRadius[0],
16513
- dy: prevVectorLength[1] + nextVectorMinusRadius[1],
16514
- largeArcFlag: false,
16515
- sweepFlag: true
16516
- } : {
16517
- type: "C",
16518
- x: firstDraw[0] + prevVectorLength[0] + nextVectorMinusRadius[0],
16519
- y: firstDraw[1] + prevVectorLength[1] + nextVectorMinusRadius[1],
16520
- cp1x: x,
16521
- cp1y: y,
16522
- cp2x: x,
16523
- cp2y: y
16524
- }
16525
- ];
16526
- }
16527
- const controlPoint1 = [
16528
- prevPointMiddleOfLine[0] + prevVector[0] * edgeRoundness * 0.5,
16529
- prevPointMiddleOfLine[1] + prevVector[1] * edgeRoundness * 0.5
16530
- ];
16531
- const controlPoint2 = [
16532
- middleOfLine[0] - nextVector[0] * edgeRoundness * 0.5,
16533
- middleOfLine[1] - nextVector[1] * edgeRoundness * 0.5
16534
- ];
16535
- return [
16536
- {
16537
- type: "C",
16538
- cp1x: controlPoint1[0],
16539
- cp1y: controlPoint1[1],
16540
- cp2x: controlPoint2[0],
16541
- cp2y: controlPoint2[1],
16542
- x: middleOfLine[0],
16543
- y: middleOfLine[1]
16544
- }
16545
- ];
16546
- }).flat(1);
16547
- };
16548
16958
  function polygon({
16549
16959
  points,
16550
16960
  radius,
@@ -16625,7 +17035,7 @@ var PolygonInner = ({
16625
17035
  edgeRoundness,
16626
17036
  ...props
16627
17037
  }) => {
16628
- return /* @__PURE__ */ jsx72(RenderSvg, {
17038
+ return /* @__PURE__ */ jsx82(RenderSvg, {
16629
17039
  defaultName: "<Polygon>",
16630
17040
  documentationLink: "https://www.remotion.dev/docs/shapes/polygon",
16631
17041
  ...makePolygon({
@@ -16639,6 +17049,7 @@ var PolygonInner = ({
16639
17049
  };
16640
17050
  var Polygon = Internals.wrapInSchema({
16641
17051
  Component: PolygonInner,
17052
+ componentIdentity: "dev.remotion.shapes.Polygon",
16642
17053
  schema: polygonSchema,
16643
17054
  supportsEffects: true
16644
17055
  });
@@ -16695,7 +17106,7 @@ var RectInner = ({
16695
17106
  cornerRadius,
16696
17107
  ...props
16697
17108
  }) => {
16698
- return /* @__PURE__ */ jsx82(RenderSvg, {
17109
+ return /* @__PURE__ */ jsx92(RenderSvg, {
16699
17110
  defaultName: "<Rect>",
16700
17111
  documentationLink: "https://www.remotion.dev/docs/shapes/rect",
16701
17112
  ...makeRect({ height, width, edgeRoundness, cornerRadius }),
@@ -16704,6 +17115,7 @@ var RectInner = ({
16704
17115
  };
16705
17116
  var Rect = Internals.wrapInSchema({
16706
17117
  Component: RectInner,
17118
+ componentIdentity: "dev.remotion.shapes.Rect",
16707
17119
  schema: rectSchema,
16708
17120
  supportsEffects: true
16709
17121
  });
@@ -16798,7 +17210,7 @@ var StarInner = ({
16798
17210
  edgeRoundness,
16799
17211
  ...props
16800
17212
  }) => {
16801
- return /* @__PURE__ */ jsx92(RenderSvg, {
17213
+ return /* @__PURE__ */ jsx102(RenderSvg, {
16802
17214
  defaultName: "<Star>",
16803
17215
  documentationLink: "https://www.remotion.dev/docs/shapes/star",
16804
17216
  ...makeStar({
@@ -16813,6 +17225,7 @@ var StarInner = ({
16813
17225
  };
16814
17226
  var Star = Internals.wrapInSchema({
16815
17227
  Component: StarInner,
17228
+ componentIdentity: "dev.remotion.shapes.Star",
16816
17229
  schema: starSchema,
16817
17230
  supportsEffects: true
16818
17231
  });
@@ -16909,7 +17322,7 @@ var TriangleInner = ({
16909
17322
  cornerRadius,
16910
17323
  ...props
16911
17324
  }) => {
16912
- return /* @__PURE__ */ jsx102(RenderSvg, {
17325
+ return /* @__PURE__ */ jsx112(RenderSvg, {
16913
17326
  defaultName: "<Triangle>",
16914
17327
  documentationLink: "https://www.remotion.dev/docs/shapes/triangle",
16915
17328
  ...makeTriangle({ length: length2, direction, edgeRoundness, cornerRadius }),
@@ -16918,6 +17331,7 @@ var TriangleInner = ({
16918
17331
  };
16919
17332
  var Triangle = Internals.wrapInSchema({
16920
17333
  Component: TriangleInner,
17334
+ componentIdentity: "dev.remotion.shapes.Triangle",
16921
17335
  schema: triangleSchema,
16922
17336
  supportsEffects: true
16923
17337
  });
@@ -17998,7 +18412,7 @@ import { jsx as jsx83, jsxs as jsxs32 } from "react/jsx-runtime";
17998
18412
  import { jsx as jsx93 } from "react/jsx-runtime";
17999
18413
  import React72 from "react";
18000
18414
  import { jsx as jsx103 } from "react/jsx-runtime";
18001
- import { jsx as jsx112 } from "react/jsx-runtime";
18415
+ import { jsx as jsx113 } from "react/jsx-runtime";
18002
18416
  import { jsx as jsx122 } from "react/jsx-runtime";
18003
18417
  import * as React36 from "react";
18004
18418
  import * as ReactDOM4 from "react-dom";
@@ -18558,7 +18972,7 @@ var Button = ({
18558
18972
  const [dimensions, setDimensions] = useState22(null);
18559
18973
  const ref = useRef210(null);
18560
18974
  const { isActive, progress } = useHoverTransforms(ref, Boolean(disabled || loading));
18561
- const onPointerEnter = useCallback26((e) => {
18975
+ const onPointerEnter = useCallback27((e) => {
18562
18976
  if (e.pointerType !== "mouse") {
18563
18977
  return;
18564
18978
  }
@@ -18595,7 +19009,7 @@ var Button = ({
18595
19009
  const isDisabled = disabled || loading;
18596
19010
  const isAnchor = !asChild && "href" in rest && rest.href !== undefined;
18597
19011
  const sharedClasses = cn("text-text", "inline-flex", "justify-center", "bg-button-bg", "items-center", "font-brand", "border-solid", "text-[1em]", "rounded-lg", "border-black", "border-2", "border-b-4", "cursor-pointer", "px-4", "h-12", "flex-row", "items-center", "relative", "overflow-hidden", isDisabled && "cursor-default opacity-50", className);
18598
- const preventInteraction = useCallback26((e) => {
19012
+ const preventInteraction = useCallback27((e) => {
18599
19013
  e.preventDefault();
18600
19014
  e.stopPropagation();
18601
19015
  }, []);
@@ -18806,7 +19220,7 @@ var Link = ({
18806
19220
  className,
18807
19221
  ...props
18808
19222
  }) => {
18809
- return /* @__PURE__ */ jsx112("a", {
19223
+ return /* @__PURE__ */ jsx113("a", {
18810
19224
  ...props,
18811
19225
  className: cn(className, "text-brand underline underline-offset-4"),
18812
19226
  children: props.children
@@ -24689,7 +25103,7 @@ var Triangle22 = (props) => {
24689
25103
  };
24690
25104
 
24691
25105
  // src/components/template-modal-content.tsx
24692
- import { useCallback as useCallback39, useState as useState40 } from "react";
25106
+ import { useCallback as useCallback40, useState as useState40 } from "react";
24693
25107
 
24694
25108
  // ../../node_modules/.bun/tailwind-merge@2.5.2/node_modules/tailwind-merge/dist/bundle-mjs.mjs
24695
25109
  var CLASS_PART_SEPARATOR2 = "-";
@@ -26008,7 +26422,7 @@ function cn2(...inputs) {
26008
26422
  }
26009
26423
 
26010
26424
  // src/helpers/use-el-size.ts
26011
- import { useCallback as useCallback37, useEffect as useEffect41, useMemo as useMemo51, useState as useState38 } from "react";
26425
+ import { useCallback as useCallback38, useEffect as useEffect41, useMemo as useMemo51, useState as useState38 } from "react";
26012
26426
  var useElementSize = (ref) => {
26013
26427
  const [size4, setSize] = useState38(null);
26014
26428
  const observer = useMemo51(() => {
@@ -26022,7 +26436,7 @@ var useElementSize = (ref) => {
26022
26436
  });
26023
26437
  });
26024
26438
  }, []);
26025
- const updateSize = useCallback37(() => {
26439
+ const updateSize = useCallback38(() => {
26026
26440
  if (ref === null) {
26027
26441
  return;
26028
26442
  }
@@ -26117,7 +26531,7 @@ import { forwardRef as forwardRef37, useEffect as useEffect43, useImperativeHand
26117
26531
  // src/components/homepage/VideoPlayerWithControls.tsx
26118
26532
  import Hls from "hls.js";
26119
26533
  import"plyr/dist/plyr.css";
26120
- import { forwardRef as forwardRef36, useCallback as useCallback38, useEffect as useEffect42, useRef as useRef47, useState as useState39 } from "react";
26534
+ import { forwardRef as forwardRef36, useCallback as useCallback39, useEffect as useEffect42, useRef as useRef47, useState as useState39 } from "react";
26121
26535
  import { jsx as jsx47 } from "react/jsx-runtime";
26122
26536
  var useCombinedRefs = function(...refs) {
26123
26537
  const targetRef = useRef47(null);
@@ -26139,8 +26553,8 @@ var VideoPlayerWithControls = forwardRef36(({ playbackId, poster, currentTime, o
26139
26553
  const metaRef = useCombinedRefs(ref, videoRef);
26140
26554
  const playerRef = useRef47(null);
26141
26555
  const [playerInitTime] = useState39(Date.now());
26142
- const videoError = useCallback38((event) => onError(event), [onError]);
26143
- const onImageLoad = useCallback38((event) => {
26556
+ const videoError = useCallback39((event) => onError(event), [onError]);
26557
+ const onImageLoad = useCallback39((event) => {
26144
26558
  const [w, h] = [event.target.width, event.target.height];
26145
26559
  if (w && h) {
26146
26560
  onSize({ width: w, height: h });
@@ -26315,7 +26729,7 @@ var copyTimeout = null;
26315
26729
  var TemplateModalContent = ({ template }) => {
26316
26730
  const [copied, setCopied] = useState40(false);
26317
26731
  const mobileLayout = useMobileLayout();
26318
- const copyCommand = useCallback39(async (command) => {
26732
+ const copyCommand = useCallback40(async (command) => {
26319
26733
  clearTimeout(copyTimeout);
26320
26734
  const permissionName = "clipboard-write";
26321
26735
  try {