videobook 0.0.0-stage → 0.2.0

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 (565) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/LICENSE +21 -0
  3. package/README.md +195 -2
  4. package/bin/videobook.js +7 -0
  5. package/dist/acestep/client.js +203 -0
  6. package/dist/acestep/config.js +62 -0
  7. package/dist/acestep/errors.js +8 -0
  8. package/dist/acestep/process.js +175 -0
  9. package/dist/alive-captions/analyze.js +117 -0
  10. package/dist/alive-captions/audio.js +179 -0
  11. package/dist/alive-captions/frames.js +59 -0
  12. package/dist/alive-captions/model.js +37 -0
  13. package/dist/alive-captions/schema.js +49 -0
  14. package/dist/alive-captions/track.js +9 -0
  15. package/dist/api-key.js +33 -0
  16. package/dist/app-state.js +56 -0
  17. package/dist/app.js +257 -0
  18. package/dist/archive-b2.js +332 -0
  19. package/dist/archive-store.js +169 -0
  20. package/dist/artifact-label.js +36 -0
  21. package/dist/artifact-refs.js +49 -0
  22. package/dist/asset-tag-extraction.js +169 -0
  23. package/dist/asset-tags.js +228 -0
  24. package/dist/asset-usage.js +23 -0
  25. package/dist/audio-cue.js +71 -0
  26. package/dist/audio-encoding.js +32 -0
  27. package/dist/audio-sync-request.js +1 -0
  28. package/dist/audio-sync.js +223 -0
  29. package/dist/audio-trim-range.js +31 -0
  30. package/dist/book-context.js +31 -0
  31. package/dist/book-manager.js +374 -0
  32. package/dist/catalog-gc.js +26 -0
  33. package/dist/chain-executor.js +815 -0
  34. package/dist/chain-generation.js +115 -0
  35. package/dist/chain-plan.js +746 -0
  36. package/dist/chain-step-review.js +60 -0
  37. package/dist/character-name.js +25 -0
  38. package/dist/chat-generation-routing.js +73 -0
  39. package/dist/chat-generation-settings.js +78 -0
  40. package/dist/chat-models.js +44 -0
  41. package/dist/chat-prompt-rewrite.js +67 -0
  42. package/dist/chat-router.js +628 -0
  43. package/dist/chat-view-actions.js +49 -0
  44. package/dist/cli/args.js +242 -0
  45. package/dist/cli/config-command.js +103 -0
  46. package/dist/cli/doctor-command.js +289 -0
  47. package/dist/cli/entry.js +2 -0
  48. package/dist/cli/key-report.js +16 -0
  49. package/dist/cli/main.js +104 -0
  50. package/dist/cli/mcp-command.js +88 -0
  51. package/dist/cli/mcp-relay.js +51 -0
  52. package/dist/cli/open-browser.js +14 -0
  53. package/dist/cli/run-command.js +231 -0
  54. package/dist/cli/serve-command.js +62 -0
  55. package/dist/cli/setup-command.js +60 -0
  56. package/dist/cli/stdio-guard.js +8 -0
  57. package/dist/cold-open-model.js +7 -0
  58. package/dist/cold-open.js +79 -0
  59. package/dist/command-reference.js +95 -0
  60. package/dist/content-store.js +74 -0
  61. package/dist/cost.js +8 -0
  62. package/dist/crop-geometry.js +23 -0
  63. package/dist/dancing-workflow.js +447 -0
  64. package/dist/data-home.js +44 -0
  65. package/dist/diagnostics.js +109 -0
  66. package/dist/dialog-quality.js +34 -0
  67. package/dist/downloads-dest.js +56 -0
  68. package/dist/editing-moments.js +194 -0
  69. package/dist/elevenlabs-audio-extension.js +66 -0
  70. package/dist/engine.js +54 -0
  71. package/dist/env-file.js +91 -0
  72. package/dist/env-secrets.js +148 -0
  73. package/dist/ffmpeg-binary.js +12 -0
  74. package/dist/ffmpeg.js +425 -0
  75. package/dist/ffprobe-binary.js +77 -0
  76. package/dist/forget-asset.js +216 -0
  77. package/dist/frame-utils.js +27 -0
  78. package/dist/generation-credit-error.js +11 -0
  79. package/dist/generation-input-mentions.js +117 -0
  80. package/dist/generation-input-policy.js +68 -0
  81. package/dist/generation-reference-mentions.js +97 -0
  82. package/dist/goal-characters.js +49 -0
  83. package/dist/goal-plan-v3.js +273 -0
  84. package/dist/goal-plan.js +220 -0
  85. package/dist/goal-planner-prompt.js +28 -0
  86. package/dist/goal-prompt-budget.js +4 -0
  87. package/dist/goal-reference-images.js +25 -0
  88. package/dist/goal-state.js +261 -0
  89. package/dist/goal-stills.js +153 -0
  90. package/dist/goal-store.js +144 -0
  91. package/dist/goal-styles.js +144 -0
  92. package/dist/goal-v3-runtime.js +157 -0
  93. package/dist/guides/character_schema_guide.md +70 -0
  94. package/dist/guides/gpt_image_2_5_prompting_guide.md +21 -0
  95. package/dist/guides/grok_imagine_prompting_guide.md +72 -0
  96. package/dist/guides/image_reproduction_guide.md +84 -0
  97. package/dist/guides/kling_3_0_prompting_guide.md +136 -0
  98. package/dist/guides/nano_banana_pro_prompting_guide.md +28 -0
  99. package/dist/guides/seedance_2_prompting_guide.md +172 -0
  100. package/dist/http-access.js +49 -0
  101. package/dist/http-byte-range.js +31 -0
  102. package/dist/hydration.js +56 -0
  103. package/dist/image-compress.js +77 -0
  104. package/dist/image-edit-default.js +1 -0
  105. package/dist/image-edit-models.js +41 -0
  106. package/dist/image-edit-settings.js +11 -0
  107. package/dist/image-region-edit.js +32 -0
  108. package/dist/image-subject-map.js +523 -0
  109. package/dist/image.js +46 -0
  110. package/dist/index.js +12 -0
  111. package/dist/job-deadline.js +60 -0
  112. package/dist/jobs/_alibaba-upload.js +30 -0
  113. package/dist/jobs/_audio-chunks.js +31 -0
  114. package/dist/jobs/_download-into-asset.js +15 -0
  115. package/dist/jobs/_fal-shared.js +22 -0
  116. package/dist/jobs/_fal-upload.js +35 -0
  117. package/dist/jobs/_image-edit-adapter.js +213 -0
  118. package/dist/jobs/_kie-poll.js +119 -0
  119. package/dist/jobs/_kie-upload.js +32 -0
  120. package/dist/jobs/_lease.js +163 -0
  121. package/dist/jobs/_persist-output.js +19 -0
  122. package/dist/jobs/_storage-retry.js +21 -0
  123. package/dist/jobs/_transcribe.js +245 -0
  124. package/dist/jobs/_translate-transcript.js +270 -0
  125. package/dist/jobs/analyze-alive-captions.js +10 -0
  126. package/dist/jobs/analyze-editing-moments.js +104 -0
  127. package/dist/jobs/analyze-jokes.js +143 -0
  128. package/dist/jobs/analyze-keyword-placement.js +155 -0
  129. package/dist/jobs/analyze-music.js +14 -0
  130. package/dist/jobs/analyze-video.js +282 -0
  131. package/dist/jobs/apply-cuts.js +83 -0
  132. package/dist/jobs/apply-sfx.js +107 -0
  133. package/dist/jobs/archive-clip.js +458 -0
  134. package/dist/jobs/assemble-goal.js +98 -0
  135. package/dist/jobs/audio-boost.js +71 -0
  136. package/dist/jobs/audio-mix.js +161 -0
  137. package/dist/jobs/backfill-asset-tags.js +144 -0
  138. package/dist/jobs/burn-watermark.js +316 -0
  139. package/dist/jobs/change-video-speed.js +176 -0
  140. package/dist/jobs/clean-video-audio.js +207 -0
  141. package/dist/jobs/cold-open.js +166 -0
  142. package/dist/jobs/combine-goal.js +108 -0
  143. package/dist/jobs/complete-provider-task.js +185 -0
  144. package/dist/jobs/copy-library-asset.js +33 -0
  145. package/dist/jobs/cost-estimate-assessment.js +113 -0
  146. package/dist/jobs/crop-image.js +47 -0
  147. package/dist/jobs/crop-video.js +71 -0
  148. package/dist/jobs/describe-image.js +181 -0
  149. package/dist/jobs/detect-scenes.js +33 -0
  150. package/dist/jobs/doctor-fix.js +100 -0
  151. package/dist/jobs/download-video.js +427 -0
  152. package/dist/jobs/enqueue-search-index.js +24 -0
  153. package/dist/jobs/even-split.js +122 -0
  154. package/dist/jobs/export-sequence.js +365 -0
  155. package/dist/jobs/extend-audio.js +229 -0
  156. package/dist/jobs/extract-audio.js +72 -0
  157. package/dist/jobs/extract-frame.js +58 -0
  158. package/dist/jobs/extract-notebook-audio.js +82 -0
  159. package/dist/jobs/extract-notebook-frame.js +93 -0
  160. package/dist/jobs/extract-video-clip.js +8 -0
  161. package/dist/jobs/extract-video-poster.js +55 -0
  162. package/dist/jobs/extract-waveform.js +25 -0
  163. package/dist/jobs/finish-goal.js +255 -0
  164. package/dist/jobs/forget-asset.js +11 -0
  165. package/dist/jobs/generate-acestep-cover.js +219 -0
  166. package/dist/jobs/generate-media.js +70 -0
  167. package/dist/jobs/image-subjects.js +1059 -0
  168. package/dist/jobs/index.js +18 -0
  169. package/dist/jobs/inject-first-frame.js +175 -0
  170. package/dist/jobs/isolate-vocals.js +69 -0
  171. package/dist/jobs/kie-paygate.js +177 -0
  172. package/dist/jobs/label-music-sections.js +5 -0
  173. package/dist/jobs/osg-placement.js +135 -0
  174. package/dist/jobs/pad-video.js +72 -0
  175. package/dist/jobs/plan-goal.js +97 -0
  176. package/dist/jobs/post-record.js +21 -0
  177. package/dist/jobs/post-to-x.js +21 -0
  178. package/dist/jobs/prepare-search-reference.js +190 -0
  179. package/dist/jobs/prepare-temporal-search.js +16 -0
  180. package/dist/jobs/process-audio.js +67 -0
  181. package/dist/jobs/process-image.js +58 -0
  182. package/dist/jobs/process-upload.js +166 -0
  183. package/dist/jobs/process-video.js +438 -0
  184. package/dist/jobs/register-all.js +161 -0
  185. package/dist/jobs/relayout-notebook.js +78 -0
  186. package/dist/jobs/remove-sound.js +299 -0
  187. package/dist/jobs/render-project.js +380 -0
  188. package/dist/jobs/render-qr-outro.js +138 -0
  189. package/dist/jobs/render-timeline.js +283 -0
  190. package/dist/jobs/repair-search-indexes.js +42 -0
  191. package/dist/jobs/replace-video-audio.js +64 -0
  192. package/dist/jobs/restore-archive-clip.js +53 -0
  193. package/dist/jobs/reverse-video.js +53 -0
  194. package/dist/jobs/rewrite-script.js +173 -0
  195. package/dist/jobs/run-notebook.js +3335 -0
  196. package/dist/jobs/semantic-index.js +797 -0
  197. package/dist/jobs/smooth-scene-concat.js +257 -0
  198. package/dist/jobs/splice-video.js +280 -0
  199. package/dist/jobs/split-video.js +127 -0
  200. package/dist/jobs/suggest-cuts.js +149 -0
  201. package/dist/jobs/suggest-sfx.js +135 -0
  202. package/dist/jobs/sync-video-to-audio.js +329 -0
  203. package/dist/jobs/tag-asset.js +266 -0
  204. package/dist/jobs/task-failure.js +16 -0
  205. package/dist/jobs/timewarp-video.js +152 -0
  206. package/dist/jobs/transcribe-video-audio.js +117 -0
  207. package/dist/jobs/transcribe.js +35 -0
  208. package/dist/jobs/translate-transcript.js +55 -0
  209. package/dist/jobs/trim-audio.js +133 -0
  210. package/dist/jobs/trim-video.js +291 -0
  211. package/dist/jobs/xai-paygate.js +26 -0
  212. package/dist/keyword-placement-cache.js +74 -0
  213. package/dist/lazy-render.js +142 -0
  214. package/dist/library-browse.js +78 -0
  215. package/dist/lightning-defaults.js +206 -0
  216. package/dist/load-env.js +12 -0
  217. package/dist/local-search-models.js +206 -0
  218. package/dist/local-upload.js +318 -0
  219. package/dist/logger.js +69 -0
  220. package/dist/media/adapters/alibaba.js +20 -0
  221. package/dist/media/adapters/elevenlabs.js +58 -0
  222. package/dist/media/adapters/fal.js +45 -0
  223. package/dist/media/adapters/index.js +26 -0
  224. package/dist/media/adapters/kie.js +120 -0
  225. package/dist/media/adapters/pending.js +21 -0
  226. package/dist/media/adapters/types.js +5 -0
  227. package/dist/media/adapters/xai.js +18 -0
  228. package/dist/media/catalog.js +236 -0
  229. package/dist/media/complete.js +191 -0
  230. package/dist/media/cost.js +45 -0
  231. package/dist/media/descriptor.js +157 -0
  232. package/dist/media/endpoints.js +11 -0
  233. package/dist/media/frame-options.js +18 -0
  234. package/dist/media/insert-video-timing.js +17 -0
  235. package/dist/media/json-schema.js +75 -0
  236. package/dist/media/legacy-task-types.js +129 -0
  237. package/dist/media/listing.js +24 -0
  238. package/dist/media/model-id.js +14 -0
  239. package/dist/media/preview.js +86 -0
  240. package/dist/media/prompt-dialects.js +65 -0
  241. package/dist/media/ref-fields.js +106 -0
  242. package/dist/media/refs.js +131 -0
  243. package/dist/media/request.js +188 -0
  244. package/dist/media/types.js +6 -0
  245. package/dist/media/wire.js +161 -0
  246. package/dist/media-library.js +535 -0
  247. package/dist/media-output-path.js +33 -0
  248. package/dist/multyculty-workflow.js +757 -0
  249. package/dist/notebook-action-catalog.js +608 -0
  250. package/dist/notebook-cell-outputs.js +726 -0
  251. package/dist/notebook-credit-retry.js +45 -0
  252. package/dist/notebook-fixtures.js +8 -0
  253. package/dist/notebook-generation-contract.js +77 -0
  254. package/dist/notebook-generation-controls.js +145 -0
  255. package/dist/notebook-goal-layout.js +40 -0
  256. package/dist/notebook-graph.js +37 -0
  257. package/dist/notebook-image-edit.js +84 -0
  258. package/dist/notebook-initial-generation-prompt.js +222 -0
  259. package/dist/notebook-live-analysis.js +941 -0
  260. package/dist/notebook-media-ops.js +579 -0
  261. package/dist/notebook-mutations.js +20 -0
  262. package/dist/notebook-placement.js +41 -0
  263. package/dist/notebook-provider-failure.js +87 -0
  264. package/dist/notebook-published-post.js +26 -0
  265. package/dist/notebook-reference-resolver.js +227 -0
  266. package/dist/notebook-relayout.js +270 -0
  267. package/dist/notebook-run-plan.js +519 -0
  268. package/dist/notebook-shots.js +162 -0
  269. package/dist/notebook-workflow.js +856 -0
  270. package/dist/one-password.js +200 -0
  271. package/dist/openai-intelligence.js +99 -0
  272. package/dist/original-media-file.js +12 -0
  273. package/dist/osg-assets.js +36 -0
  274. package/dist/osg-placement-cache.js +64 -0
  275. package/dist/osg-settings.js +27 -0
  276. package/dist/paid-tools.js +22 -0
  277. package/dist/platform-guidance.js +26 -0
  278. package/dist/posts/dropbox-auth.js +91 -0
  279. package/dist/posts/dropbox-upload.js +132 -0
  280. package/dist/posts/icloud-drive.js +134 -0
  281. package/dist/posts/icloud-status.js +64 -0
  282. package/dist/posts/post-contract.js +2 -0
  283. package/dist/posts/post-copy-format.js +43 -0
  284. package/dist/posts/post-copy.js +193 -0
  285. package/dist/posts/post-folder.js +18 -0
  286. package/dist/posts/post-metrics.js +119 -0
  287. package/dist/posts/post-store.js +340 -0
  288. package/dist/posts/x-post-target.js +43 -0
  289. package/dist/preview-payload.js +90 -0
  290. package/dist/prompt-surfaces.js +22 -0
  291. package/dist/provider-prompt-transform.js +77 -0
  292. package/dist/provider-status-link.js +21 -0
  293. package/dist/provider-task-record.js +78 -0
  294. package/dist/provider-task-status.js +47 -0
  295. package/dist/provider-usage.js +294 -0
  296. package/dist/queue.js +810 -0
  297. package/dist/reference-video-duration.js +17 -0
  298. package/dist/remotion/BlurFillVideo.js +51 -0
  299. package/dist/remotion/KeywordGraphicsOverlay.js +68 -0
  300. package/dist/remotion/OsgOverlay.js +30 -0
  301. package/dist/remotion/QrOutroComposition.js +47 -0
  302. package/dist/remotion/RenderComposition.js +11 -0
  303. package/dist/remotion/browser.js +59 -0
  304. package/dist/remotion/constants.js +35 -0
  305. package/dist/remotion/index.js +66 -0
  306. package/dist/remotion/keyword-graphics.js +151 -0
  307. package/dist/remotion/keyword-placement.js +182 -0
  308. package/dist/remotion/osg-spec.js +198 -0
  309. package/dist/remotion/public/qr-outro-impact.wav +0 -0
  310. package/dist/remotion/qr-outro-audio.js +1 -0
  311. package/dist/remotion/qr-outro-spec.js +211 -0
  312. package/dist/remotion/shared-bundle.js +37 -0
  313. package/dist/remotion/subtitles/AliveCaptions.js +83 -0
  314. package/dist/remotion/subtitles/Highlight.js +58 -0
  315. package/dist/remotion/subtitles/Impact.js +67 -0
  316. package/dist/remotion/subtitles/SubtitleOverlay.js +9 -0
  317. package/dist/remotion/subtitles/alive-layout.js +321 -0
  318. package/dist/remotion/subtitles/alive-types.js +17 -0
  319. package/dist/remotion/subtitles/chunker.js +68 -0
  320. package/dist/remotion/subtitles/segments.js +42 -0
  321. package/dist/remotion/subtitles/styles.js +4 -0
  322. package/dist/remotion/subtitles/types.js +1 -0
  323. package/dist/remotion/util.js +18 -0
  324. package/dist/remotion-cancellation.js +15 -0
  325. package/dist/rename-helpers.js +204 -0
  326. package/dist/rhythm/analyze.js +128 -0
  327. package/dist/rhythm/contract.js +14 -0
  328. package/dist/rhythm/draft-model.js +19 -0
  329. package/dist/rhythm/energy.js +133 -0
  330. package/dist/rhythm/fft.js +44 -0
  331. package/dist/rhythm/model.js +71 -0
  332. package/dist/rhythm/music-analysis.js +124 -0
  333. package/dist/rhythm/music-draft.js +261 -0
  334. package/dist/rhythm/onset.js +101 -0
  335. package/dist/rhythm/run-worker.js +51 -0
  336. package/dist/rhythm/score.js +47 -0
  337. package/dist/rhythm/section-labels.js +168 -0
  338. package/dist/rhythm/sequence-rhythm.js +67 -0
  339. package/dist/rhythm/synthesize.js +103 -0
  340. package/dist/rhythm/timing.js +98 -0
  341. package/dist/rhythm/track.js +320 -0
  342. package/dist/rhythm/visual-fit.js +4 -0
  343. package/dist/rhythm/worker.js +25 -0
  344. package/dist/scene-detect.js +200 -0
  345. package/dist/scene-transition.js +12 -0
  346. package/dist/scheduled-posts.js +200 -0
  347. package/dist/search-index-coverage.js +13 -0
  348. package/dist/search-index-media.js +71 -0
  349. package/dist/search-reference-store.js +60 -0
  350. package/dist/search-scoring.js +17 -0
  351. package/dist/serve.js +125 -0
  352. package/dist/server-lock.js +143 -0
  353. package/dist/server.js +42 -0
  354. package/dist/srt.js +16 -0
  355. package/dist/tag-backfill-state.js +121 -0
  356. package/dist/tag-settings.js +30 -0
  357. package/dist/tag-vocabulary.js +237 -0
  358. package/dist/test-queue-cleanup.js +1 -0
  359. package/dist/time-parse.js +50 -0
  360. package/dist/timeline-helpers.js +554 -0
  361. package/dist/timewarp.js +87 -0
  362. package/dist/tools/_image-inputs.js +9 -0
  363. package/dist/tools/_media-refs.js +84 -0
  364. package/dist/tools/_shared.js +59 -0
  365. package/dist/tools/_suggest-shared.js +279 -0
  366. package/dist/tools/add-timeline-audio.js +73 -0
  367. package/dist/tools/alive-captions.js +157 -0
  368. package/dist/tools/analyze-jokes.js +56 -0
  369. package/dist/tools/analyze-video.js +66 -0
  370. package/dist/tools/animate-keywords.js +217 -0
  371. package/dist/tools/api-status.js +42 -0
  372. package/dist/tools/application-commands.js +34 -0
  373. package/dist/tools/apply-cuts.js +112 -0
  374. package/dist/tools/apply-sfx.js +152 -0
  375. package/dist/tools/apply-watermark.js +670 -0
  376. package/dist/tools/archive-clip.js +74 -0
  377. package/dist/tools/asset-history.js +61 -0
  378. package/dist/tools/asset-manifest.js +24 -0
  379. package/dist/tools/asset-tags.js +151 -0
  380. package/dist/tools/assign-slot.js +97 -0
  381. package/dist/tools/audio-boost.js +107 -0
  382. package/dist/tools/audio-mix.js +121 -0
  383. package/dist/tools/book-usage.js +16 -0
  384. package/dist/tools/chain.js +136 -0
  385. package/dist/tools/change-video-speed.js +105 -0
  386. package/dist/tools/chat-history.js +5 -0
  387. package/dist/tools/chat.js +848 -0
  388. package/dist/tools/clean-video-audio.js +97 -0
  389. package/dist/tools/clear-failed-tasks.js +66 -0
  390. package/dist/tools/cold-open.js +114 -0
  391. package/dist/tools/command-plan.js +1680 -0
  392. package/dist/tools/commands.js +1666 -0
  393. package/dist/tools/concat-images.js +236 -0
  394. package/dist/tools/connect-service.js +55 -0
  395. package/dist/tools/copy-file-to-clipboard.js +58 -0
  396. package/dist/tools/create-character.js +114 -0
  397. package/dist/tools/create-qart.js +253 -0
  398. package/dist/tools/create-qr-outro.js +149 -0
  399. package/dist/tools/create-qrbtf.js +215 -0
  400. package/dist/tools/create-watermark.js +97 -0
  401. package/dist/tools/crop-asset.js +18 -0
  402. package/dist/tools/crop-image.js +120 -0
  403. package/dist/tools/crop-video.js +97 -0
  404. package/dist/tools/delete-asset.js +104 -0
  405. package/dist/tools/describe-image.js +69 -0
  406. package/dist/tools/detect-scenes.js +44 -0
  407. package/dist/tools/doctor.js +126 -0
  408. package/dist/tools/download-video.js +114 -0
  409. package/dist/tools/duplicate-asset.js +184 -0
  410. package/dist/tools/edit-timeline.js +59 -0
  411. package/dist/tools/editing-moments.js +105 -0
  412. package/dist/tools/estimate-cost.js +171 -0
  413. package/dist/tools/even-split.js +295 -0
  414. package/dist/tools/export-asset-file.js +22 -0
  415. package/dist/tools/export-asset.js +140 -0
  416. package/dist/tools/export-sequence.js +250 -0
  417. package/dist/tools/export-to-downloads.js +54 -0
  418. package/dist/tools/export-transcript-srt.js +79 -0
  419. package/dist/tools/extend-audio.js +100 -0
  420. package/dist/tools/extract-audio.js +174 -0
  421. package/dist/tools/extract-frame.js +108 -0
  422. package/dist/tools/extract-notebook-audio.js +173 -0
  423. package/dist/tools/extract-notebook-frame.js +160 -0
  424. package/dist/tools/extract-video-clip.js +101 -0
  425. package/dist/tools/generate-media.js +157 -0
  426. package/dist/tools/generation-payload.js +48 -0
  427. package/dist/tools/get-timeline.js +12 -0
  428. package/dist/tools/get-watermark-config.js +38 -0
  429. package/dist/tools/goal.js +644 -0
  430. package/dist/tools/image-subjects.js +711 -0
  431. package/dist/tools/index.js +323 -0
  432. package/dist/tools/inject-first-frame.js +154 -0
  433. package/dist/tools/invert-image.js +70 -0
  434. package/dist/tools/isolate-vocals.js +66 -0
  435. package/dist/tools/list-assets.js +98 -0
  436. package/dist/tools/list-cell-generations.js +225 -0
  437. package/dist/tools/list-elevenlabs-voices.js +163 -0
  438. package/dist/tools/log-wrapper.js +29 -0
  439. package/dist/tools/make-cover-song.js +95 -0
  440. package/dist/tools/mark-asset-seen.js +23 -0
  441. package/dist/tools/media-library.js +245 -0
  442. package/dist/tools/move-timeline-audio.js +35 -0
  443. package/dist/tools/music-analysis.js +60 -0
  444. package/dist/tools/music-draft.js +29 -0
  445. package/dist/tools/pad-video.js +87 -0
  446. package/dist/tools/post-record.js +83 -0
  447. package/dist/tools/post.js +168 -0
  448. package/dist/tools/prompt-history.js +164 -0
  449. package/dist/tools/provider-key-status.js +248 -0
  450. package/dist/tools/qrbtf-render.js +849 -0
  451. package/dist/tools/read-asset-metadata.js +26 -0
  452. package/dist/tools/read-file-at-commit.js +29 -0
  453. package/dist/tools/read-transcript.js +41 -0
  454. package/dist/tools/reconcile-project-work.js +1452 -0
  455. package/dist/tools/recover-asset.js +28 -0
  456. package/dist/tools/remove-sound.js +72 -0
  457. package/dist/tools/remove-timeline-audio.js +34 -0
  458. package/dist/tools/remove-timeline-slot.js +40 -0
  459. package/dist/tools/rename-all.js +434 -0
  460. package/dist/tools/rename-asset.js +34 -0
  461. package/dist/tools/render-settings.js +47 -0
  462. package/dist/tools/render-timeline.js +120 -0
  463. package/dist/tools/render.js +384 -0
  464. package/dist/tools/reorder-character-images.js +45 -0
  465. package/dist/tools/replace-video-audio.js +133 -0
  466. package/dist/tools/restore-archive-clips.js +209 -0
  467. package/dist/tools/restore-asset-version.js +37 -0
  468. package/dist/tools/retry-generation.js +54 -0
  469. package/dist/tools/reverse-video.js +74 -0
  470. package/dist/tools/rewrite-prompt.js +388 -0
  471. package/dist/tools/rewrite-script.js +67 -0
  472. package/dist/tools/schema-from-apicity.js +66 -0
  473. package/dist/tools/search-archive.js +150 -0
  474. package/dist/tools/semantic-search.js +1214 -0
  475. package/dist/tools/sequence-rhythm.js +43 -0
  476. package/dist/tools/set-character-metadata.js +84 -0
  477. package/dist/tools/set-env-secret.js +40 -0
  478. package/dist/tools/set-osg.js +143 -0
  479. package/dist/tools/show-folder.js +37 -0
  480. package/dist/tools/smooth-scene-concat.js +122 -0
  481. package/dist/tools/splice-video.js +149 -0
  482. package/dist/tools/split-video.js +202 -0
  483. package/dist/tools/suggest-cuts.js +45 -0
  484. package/dist/tools/suggest-sfx.js +43 -0
  485. package/dist/tools/sync-video-to-audio.js +115 -0
  486. package/dist/tools/tag-backfill.js +177 -0
  487. package/dist/tools/timewarp-video.js +85 -0
  488. package/dist/tools/tool-def.js +1 -0
  489. package/dist/tools/tool-json-schema.js +116 -0
  490. package/dist/tools/transcribe.js +90 -0
  491. package/dist/tools/translate-subtitles.js +59 -0
  492. package/dist/tools/trim-audio.js +139 -0
  493. package/dist/tools/trim-video.js +168 -0
  494. package/dist/tools/update-script.js +25 -0
  495. package/dist/tools/update-timeline-audio.js +40 -0
  496. package/dist/tools/upload-file.js +41 -0
  497. package/dist/tools/verify-x-mentions.js +141 -0
  498. package/dist/tools/video-editing-command-contract.js +291 -0
  499. package/dist/tools/video-source-reference.js +30 -0
  500. package/dist/tools/video-time-input.js +18 -0
  501. package/dist/tools/videobook-domain.js +2021 -0
  502. package/dist/tools/wait-for-asset-ready.js +143 -0
  503. package/dist/tools/workspace-actions.js +54 -0
  504. package/dist/transcript-projection.js +202 -0
  505. package/dist/transcript-srt.js +33 -0
  506. package/dist/upload.js +76 -0
  507. package/dist/usage-providers.js +25 -0
  508. package/dist/video-analysis-projection.js +46 -0
  509. package/dist/video-poster.js +33 -0
  510. package/dist/video-proxy.js +99 -0
  511. package/dist/vision-regions.js +111 -0
  512. package/dist/voice-actions.js +90 -0
  513. package/dist/voice-audio.js +55 -0
  514. package/dist/voice-config.js +122 -0
  515. package/dist/voice-continuation.js +54 -0
  516. package/dist/voice-contract.js +1 -0
  517. package/dist/voice-http.js +145 -0
  518. package/dist/voice-reply-progress.js +55 -0
  519. package/dist/voice-session.js +992 -0
  520. package/dist/watermark-badge.js +259 -0
  521. package/dist/watermark-config.js +111 -0
  522. package/dist/watermark-handle-position.js +55 -0
  523. package/dist/watermark-platform.js +15 -0
  524. package/dist/watermark-timing.js +16 -0
  525. package/dist/workspace-action-catalog.js +315 -0
  526. package/dist/workspace-action-contract.js +21 -0
  527. package/dist/workspace-action-groups.js +98 -0
  528. package/dist/workspace-action-surfaces.js +7 -0
  529. package/dist/x/account.js +88 -0
  530. package/dist/x/authenticated-handle.js +30 -0
  531. package/dist/x/oauth-flow.js +191 -0
  532. package/dist/x/post-contract.js +1 -0
  533. package/dist/x/post-metadata.js +44 -0
  534. package/dist/x/post-to-x.js +456 -0
  535. package/dist/x/published-post-cell.js +90 -0
  536. package/dist/x/x-tokens.js +69 -0
  537. package/dist/ytdlp-binary.js +65 -0
  538. package/dist/zod-slots.js +334 -0
  539. package/package.json +84 -4
  540. package/ui/assets/alive-captions-BWb5nLKj.css +1 -0
  541. package/ui/assets/alive-captions-DPEr1nKM.js +1 -0
  542. package/ui/assets/confirm-bodies-D8ouHXKy.js +1 -0
  543. package/ui/assets/confirm-bodies-DrMhaXC6.css +1 -0
  544. package/ui/assets/fullscreen-B7nw4YbE.js +1 -0
  545. package/ui/assets/goal-ui-DK-xTCK0.js +2 -0
  546. package/ui/assets/goal-ui-DXdUM2KF.css +1 -0
  547. package/ui/assets/index-DzPAnCUj.css +1 -0
  548. package/ui/assets/index-kS1905s5.js +37 -0
  549. package/ui/assets/inspector-MlzQbTVo.js +1 -0
  550. package/ui/assets/jobs-ui-CoinOWx0.js +1 -0
  551. package/ui/assets/music-video-Cbe80kmQ.js +1 -0
  552. package/ui/assets/music-video-DPaiKKEq.css +1 -0
  553. package/ui/assets/ui-Oirr9VOf.css +1 -0
  554. package/ui/assets/ui-xo_Y1yQg.js +2 -0
  555. package/ui/assets/vendor-D2rfiZ5j.css +1 -0
  556. package/ui/assets/vendor-DfTCWgKm.js +19 -0
  557. package/ui/assets/vendor-flow-BXbeWxW7.js +7 -0
  558. package/ui/assets/vendor-flow-BnuhLJ6X.css +1 -0
  559. package/ui/assets/vendor-icons-CGqhCIXV.js +1 -0
  560. package/ui/assets/vendor-mcp-BTlEJcHV.js +67 -0
  561. package/ui/assets/vendor-react-Dj7D1fD4.js +9 -0
  562. package/ui/assets/vendor-remotion-CH1HXrlc.js +95 -0
  563. package/ui/assets/videobook-Qlp9HQFu.js +20 -0
  564. package/ui/favicon.svg +8 -0
  565. package/ui/index.html +126 -0
@@ -0,0 +1,95 @@
1
+ import{a as i,R as j,j as h,b as no}from"./vendor-react-Dj7D1fD4.js";var ds=Object.defineProperty,ei=(e,t)=>{for(var n in t)ds(e,n,{get:t[n],enumerable:!0,configurable:!0,set:r=>t[n]=()=>r})};if(typeof i.createContext!="function"){const e=['Remotion requires React.createContext, but it is "undefined".','If you are in a React Server Component, turn it into a client component by adding "use client" at the top of the file.',"","Before:",' import {useCurrentFrame} from "remotion";',"","After:",' "use client";',' import {useCurrentFrame} from "remotion";'];throw new Error(e.join(`
2
+ `))}var Ge=i.createContext(!1),tr=({children:e})=>h.jsx(Ge.Provider,{value:!0,children:e}),ti=i.createContext({setError:()=>{},clearError:()=>{}}),ro=()=>{try{return typeof __webpack_module__>"u"?null:__webpack_module__.hot??null}catch{return null}};class fs extends j.Component{state={hasError:!1};hmrStatusHandler=null;static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){this.props.onError(t),this.subscribeToHmrReset()}componentDidMount(){this.state.hasError||this.props.onClear()}componentDidUpdate(t,n){n.hasError&&!this.state.hasError&&this.props.onClear()}componentWillUnmount(){this.unsubscribeFromHmrReset()}subscribeToHmrReset(){if(this.hmrStatusHandler)return;const t=ro();if(!t)return;const n=r=>{r==="idle"&&(this.unsubscribeFromHmrReset(),this.setState({hasError:!1}))};this.hmrStatusHandler=n,t.addStatusHandler(n)}unsubscribeFromHmrReset(){const t=this.hmrStatusHandler;if(!t)return;this.hmrStatusHandler=null;const n=ro();n&&n.removeStatusHandler(t)}render(){return this.state.hasError?null:this.props.children}}var ct=i.createContext({compositions:[],folders:[],currentCompositionMetadata:null,canvasContent:null}),Lt=i.createContext({registerComposition:()=>{},unregisterComposition:()=>{},registerFolder:()=>{},unregisterFolder:()=>{},setCanvasContent:()=>{},onlyRenderComposition:null}),Vt=i.createContext({getNonce:()=>0}),on=0;try{typeof __webpack_module__<"u"&&__webpack_module__.hot&&__webpack_module__.hot.addStatusHandler(e=>{e==="idle"&&on++})}catch{}var mn=()=>{const t=i.useContext(Vt).getNonce(),n=i.useRef(t);n.current=t;const r=i.useRef([[on,t]]),o=i.useCallback(()=>(on!==r.current[r.current.length-1][0]&&(r.current=[...r.current,[on,n.current]]),r.current),[r]);return i.useMemo(()=>({get:o}),[o])};function dt(e){return!!e}var ni=()=>/^([a-zA-Z0-9-\u4E00-\u9FFF])+$/g,ri=e=>e.match(ni()),ms=e=>{if(e==null)throw new TypeError("You must pass a name to a <Folder />.");if(typeof e!="string")throw new TypeError(`The "name" you pass into <Folder /> must be a string. Got: ${typeof e}`);if(!ri(e))throw new Error(`Folder name can only contain a-z, A-Z, 0-9 and -. You passed ${e}`)},ps=`Folder name must match ${String(ni())}`,nr=i.createContext({folderName:null,parentName:null}),hs=e=>{const{name:t,children:n}=e,r=i.useContext(nr),{registerFolder:o,unregisterFolder:a}=i.useContext(Lt),s=mn(),u=e.stack??null;ms(t);const l=[r.parentName,r.folderName].filter(dt),c=l.length===0?null:l.join("/"),d=i.useMemo(()=>({folderName:t,parentName:c}),[t,c]);return i.useEffect(()=>(o(t,c,s.get(),u),()=>{a(t,c)}),[t,r.folderName,c,o,a,s,u]),h.jsx(nr.Provider,{value:d,children:n})};function oo(){return["NOD","E_EN","V"].join("")}var io=()=>["e","nv"].join(""),we=()=>{const e=typeof window<"u"&&window.remotion_isPlayer,t=typeof window<"u"&&typeof window.process<"u"&&typeof window.process.env<"u"&&(window.process[io()][oo()]==="test"||window.process[io()][oo()]==="production"&&typeof window<"u"&&typeof window.remotion_puppeteerTimeout<"u"),n=typeof window<"u"&&window.remotion_isStudio,r=typeof window<"u"&&window.remotion_isReadOnlyStudio;return{isStudio:n,isRendering:t,isPlayer:e,isReadOnlyStudio:r,isClientSideRendering:!1}},rr="remotion-date:",Nt="remotion-file:",gs=({data:e,indent:t,staticBase:n})=>{let r=!1,o=!1,a=!1,s=!1;try{return{serializedString:JSON.stringify(e,function(l,c){const d=this[l];return d instanceof Date?(r=!0,`${rr}${d.toISOString()}`):d instanceof Map?(a=!0,c):d instanceof Set?(s=!0,c):typeof d=="string"&&n!==null&&d.startsWith(n)?(o=!0,`${Nt}${d.replace(n+"/","")}`):c},t),customDateUsed:r,customFileUsed:o,mapUsed:a,setUsed:s}}catch(u){throw new Error("Could not serialize the passed input props to JSON: "+u.message)}},oi=e=>JSON.parse(e,(t,n)=>typeof n=="string"&&n.startsWith(rr)?new Date(n.replace(rr,"")):typeof n=="string"&&n.startsWith(Nt)?`${window.remotion_staticBase}/${n.replace(Nt,"")}`:n),vs=e=>oi(gs({data:e,indent:2,staticBase:window.remotion_staticBase}).serializedString),or=e=>we().isStudio?vs(e):e,ii=i.createContext(!1),ys=({children:e})=>h.jsx(ii.Provider,{value:!0,children:e}),wr=()=>i.useContext(ii),Ue=({className:e,classPrefix:t,type:n})=>{if(!e)return!1;if(n==="exact"){const r=e.split(" ");return t.some(o=>r.some(a=>a.trim()===o||a.trim().endsWith(`:${o}`)||a.trim().endsWith(`!${o}`)))}return t.some(r=>e.startsWith(r)||e.includes(` ${r}`)||e.includes(`!${r}`)||e.includes(`:${r}`))},ws=(e,t)=>{const{style:n,...r}=e,o=i.useMemo(()=>({position:"absolute",top:Ue({className:r.className,classPrefix:["top-","inset-"],type:"prefix"})?void 0:0,left:Ue({className:r.className,classPrefix:["left-","inset-"],type:"prefix"})?void 0:0,right:Ue({className:r.className,classPrefix:["right-","inset-"],type:"prefix"})?void 0:0,bottom:Ue({className:r.className,classPrefix:["bottom-","inset-"],type:"prefix"})?void 0:0,width:Ue({className:r.className,classPrefix:["w-"],type:"prefix"})?void 0:"100%",height:Ue({className:r.className,classPrefix:["h-"],type:"prefix"})?void 0:"100%",display:Ue({className:r.className,classPrefix:["block","inline-block","inline","flex","inline-flex","flow-root","grid","inline-grid","contents","list-item","hidden"],type:"exact"})?void 0:"flex",flexDirection:Ue({className:r.className,classPrefix:["flex-row","flex-col","flex-row-reverse","flex-col-reverse"],type:"exact"})?void 0:"column",...n}),[r.className,n]);return h.jsx("div",{ref:t,style:o,...r})},ai=i.forwardRef(ws),bs={transform:"rotate(90deg)"},ao=40,xs={color:"white",fontSize:14,fontFamily:"sans-serif"},Cs={justifyContent:"center",alignItems:"center"},Es=()=>h.jsxs(ai,{style:Cs,id:"remotion-comp-loading",children:[h.jsx("style",{type:"text/css",children:`
3
+ @keyframes anim {
4
+ from {
5
+ opacity: 0
6
+ }
7
+ to {
8
+ opacity: 1
9
+ }
10
+ }
11
+ #remotion-comp-loading {
12
+ animation: anim 2s;
13
+ animation-fill-mode: forwards;
14
+ }
15
+ `}),h.jsx("svg",{width:ao,height:ao,viewBox:"-100 -100 400 400",style:bs,children:h.jsx("path",{fill:"#555",stroke:"#555",strokeWidth:"100",strokeLinejoin:"round",d:"M 2 172 a 196 100 0 0 0 195 5 A 196 240 0 0 0 100 2.259 A 196 240 0 0 0 2 172 z"})}),h.jsxs("p",{style:xs,children:["Resolving ","<Suspense>","..."]})]}),ge=null,ir=()=>{if(!ge){if(typeof document>"u")throw new Error("Tried to call an API that only works in the browser from outside the browser");ge=document.createElement("div"),ge.style.position="absolute",ge.style.top="0px",ge.style.left="0px",ge.style.right="0px",ge.style.bottom="0px",ge.style.width="100%",ge.style.height="100%",ge.style.display="flex",ge.style.flexDirection="column";const e=document.createElement("div");e.style.position="fixed",e.style.top="-999999px",e.appendChild(ge),document.body.appendChild(e)}return ge},ar=()=>"remotion_inputPropsOverride"+window.location.origin,si=()=>{if(typeof localStorage>"u")return null;const e=localStorage.getItem(ar());return e?JSON.parse(e):null},Ss=e=>{if(!(typeof localStorage>"u")){if(e===null){localStorage.removeItem(ar());return}localStorage.setItem(ar(),JSON.stringify(e))}},so=!1,Ts=()=>{so||(so=!0,console.warn("Called `getInputProps()` on the server. This function is not available server-side and has returned an empty object."),console.warn("To hide this warning, don't call this function on the server:"),console.warn(" typeof window === 'undefined' ? {} : getInputProps()"))},Rs=()=>{if(typeof window>"u")return Ts(),{};if(we().isPlayer)throw new Error("You cannot call `getInputProps()` from a <Player>. Instead, the props are available as React props from component that you passed as `component` prop.");const e=si();if(e)return e;if(typeof window>"u"||typeof window.remotion_inputProps>"u")throw new Error("Cannot call `getInputProps()` - window.remotion_inputProps is not set. This API is only available if you are in the Studio, or while you are rendering server-side.");const t=window.remotion_inputProps;return t?oi(t):{}},br=i.createContext({props:{},updateProps:()=>{throw new Error("Not implemented")}}),ks=j.createRef(),ui=({children:e})=>{const[t,n]=j.useState({}),r=i.useCallback(({defaultProps:a,id:s,newProps:u})=>{n(l=>({...l,[s]:typeof u=="function"?u(l[s]??a):u}))},[]),o=i.useMemo(()=>({props:t,updateProps:r}),[t,r]);return h.jsx(br.Provider,{value:o,children:e})},li=j.createContext(null),ne=()=>{const e=i.useContext(li),[t]=i.useState(()=>we());return e??t};function sn(e,t,n){if(typeof e!="number")throw new Error(`The "${t}" prop ${n} must be a number, but you passed a value of type ${typeof e}`);if(isNaN(e))throw new TypeError(`The "${t}" prop ${n} must not be NaN, but is NaN.`);if(!Number.isFinite(e))throw new TypeError(`The "${t}" prop ${n} must be finite, but is ${e}.`);if(e%1!==0)throw new TypeError(`The "${t}" prop ${n} must be an integer, but is ${e}.`);if(e<=0)throw new TypeError(`The "${t}" prop ${n} must be positive, but got ${e}.`)}function pn(e,t){const{allowFloats:n,component:r}=t;if(typeof e>"u")throw new Error(`The "durationInFrames" prop ${r} is missing.`);if(typeof e!="number")throw new Error(`The "durationInFrames" prop ${r} must be a number, but you passed a value of type ${typeof e}`);if(e<=0)throw new TypeError(`The "durationInFrames" prop ${r} must be positive, but got ${e}.`);if(!n&&e%1!==0)throw new TypeError(`The "durationInFrames" prop ${r} must be an integer, but got ${e}.`);if(!Number.isFinite(e))throw new TypeError(`The "durationInFrames" prop ${r} must be finite, but got ${e}.`)}function hn(e,t,n){if(typeof e!="number")throw new Error(`"fps" must be a number, but you passed a value of type ${typeof e} ${t}`);if(!Number.isFinite(e))throw new Error(`"fps" must be a finite, but you passed ${e} ${t}`);if(isNaN(e))throw new Error(`"fps" must not be NaN, but got ${e} ${t}`);if(e<=0)throw new TypeError(`"fps" must be positive, but got ${e} ${t}`)}var gn=i.createContext(null),Is=i.createRef(),Fs=e=>!!e.calculateMetadata,xr=e=>{const t=i.useContext(gn),{props:n}=i.useContext(br),{compositions:r,canvasContent:o,currentCompositionMetadata:a}=i.useContext(ct),s=o?.type==="composition"?o.compositionId:null,u=e??s,l=r.find(m=>m.id===u),c=i.useMemo(()=>l?n[l.id]??{}:{},[n,l]),d=ne();return i.useMemo(()=>l?a?{type:"success",metadataSource:null,result:{...a,id:l.id,defaultProps:l.defaultProps??{}}}:Fs(l)?!t||!t[l.id]?null:t[l.id]:(pn(l.durationInFrames,{allowFloats:!1,component:`in <Composition id="${l.id}">`}),hn(l.fps,`in <Composition id="${l.id}">`),sn(l.width,"width",`in <Composition id="${l.id}">`),sn(l.height,"height",`in <Composition id="${l.id}">`),{type:"success",metadataSource:null,result:{width:l.width,height:l.height,fps:l.fps,id:l.id,durationInFrames:l.durationInFrames,defaultProps:l.defaultProps??{},props:{...l.defaultProps??{},...c??{},...typeof window>"u"||d.isPlayer||!window.remotion_inputProps?{}:Rs()??{}},defaultCodec:null,defaultOutName:null,defaultVideoImageFormat:null,defaultPixelFormat:null,defaultProResProfile:null,defaultSampleRate:null}}):null,[l,t,a,c,d.isPlayer])},ci=e=>{const t=e.stack??"";return t.startsWith("Error:")?t:`${e.message}
16
+ ${t}`},Ps=e=>e instanceof Error?!0:!(e===null||typeof e!="object"||!("stack"in e)||typeof e.stack!="string"||!("message"in e)||typeof e.message!="string");function Cr(e,t){let n;throw Ps(t)?(n=t,n.stack||(n.stack=new Error(n.message).stack)):typeof t=="string"?n=Error(t):n=Error("Rendering was cancelled"),e&&(e.remotion_cancelledError=ci(n)),n}function $t(e){return Cr(typeof window<"u"?window:void 0,e)}var Ms=["trace","verbose","info","warn","error"],uo=e=>Ms.indexOf(e),vn=(e,t)=>uo(e)<=uo(t),jt=({args:e,logLevel:t,tag:n})=>{const r=[...e];return we().isRendering&&!we().isClientSideRendering&&r.unshift(Symbol.for(`__remotion_level_${t}`)),n&&we().isRendering&&!we().isClientSideRendering&&r.unshift(Symbol.for(`__remotion_tag_${n}`)),r},Ns=(e,...t)=>{if(vn(e.logLevel,"verbose"))return console.debug(...jt({args:t,logLevel:"verbose",tag:e.tag}))},$s=(e,...t)=>{if(vn(e.logLevel,"trace"))return console.debug(...jt({args:t,logLevel:"trace",tag:e.tag}))},As=(e,...t)=>{if(vn(e.logLevel,"info"))return console.log(...jt({args:t,logLevel:"info",tag:e.tag}))},Ls=(e,...t)=>{if(vn(e.logLevel,"warn"))return console.warn(...jt({args:t,logLevel:"warn",tag:e.tag}))},Vs=(e,...t)=>console.error(...jt({args:t,logLevel:"error",tag:e.tag})),oe={trace:$s,verbose:Ns,info:As,warn:Ls,error:Vs};typeof window<"u"&&(window.remotion_renderReady=!1,window.remotion_delayRenderTimeouts||(window.remotion_delayRenderTimeouts={}),window.remotion_delayRenderHandles=[]);var js="The delayRender was called:",_s="Retries left: ",Os="- Rendering the frame will be retried.",Ds="handle was cleared after",Bs=3e4,di=({scope:e,environment:t,label:n,options:r})=>{if(typeof n!="string"&&n!==null)throw new Error("The label parameter of delayRender() must be a string or undefined, got: "+JSON.stringify(n));const o=Math.random();e.remotion_delayRenderHandles.push(o);const a=Error().stack?.replace(/^Error/g,"")??"";if(t.isRendering){const s=(r?.timeoutInMilliseconds??e.remotion_puppeteerTimeout??Bs)-2e3,u=(r?.retries??0)-(e.remotion_attempt-1);e.remotion_delayRenderTimeouts[o]={label:n??null,startTime:Date.now(),timeout:setTimeout(()=>{const l=["A delayRender()",n?`"${n}"`:null,`was called but not cleared after ${s}ms. See https://remotion.dev/docs/timeout for help.`,u>0?_s+u:null,u>0?Os:null,js,a].filter(dt).join(" ");t.isClientSideRendering?e.remotion_cancelledError=ci(Error(l)):Cr(e,Error(l))},s)}}return e.remotion_renderReady=!1,o},sr=(e,t)=>typeof window>"u"?Math.random():di({scope:window,environment:we(),label:e??null,options:t??{}}),fi=({scope:e,handle:t,environment:n,logLevel:r})=>{if(typeof t>"u")throw new TypeError("The continueRender() method must be called with a parameter that is the return value of delayRender(). No value was passed.");if(typeof t!="number")throw new TypeError("The parameter passed into continueRender() must be the return value of delayRender() which is a number. Got: "+JSON.stringify(t));const o=e.remotion_delayRenderHandles.includes(t),a=e.remotion_delayRenderTimeouts[t];if(o&&n.isRendering&&a){const{label:s,startTime:u,timeout:l}=a;clearTimeout(l);const c=[s?`"${s}"`:"A handle",Ds,`${Date.now()-u}ms`].filter(dt).join(" ");oe.verbose({logLevel:r,tag:"delayRender()"},c),delete e.remotion_delayRenderTimeouts[t]}e.remotion_delayRenderHandles=e.remotion_delayRenderHandles.filter(s=>s!==t),e.remotion_delayRenderHandles.length===0&&(e.remotion_renderReady=!0)},lo=e=>{typeof window>"u"||fi({scope:window,handle:e,environment:we(),logLevel:window.remotion_logLevel??"info"})},Ye=i.createContext({logLevel:"info",mountTime:0}),Me=()=>{const{logLevel:e}=i.useContext(Ye);if(e===null)throw new Error("useLogLevel must be used within a LogLevelProvider");return e},_t=()=>{const{mountTime:e}=i.useContext(Ye);if(e===null)throw new Error("useMountTime must be used within a LogLevelProvider");return e},mi=i.createContext(null),Ee=()=>{const e=ne(),t=i.useContext(mi)??(typeof window<"u"?window:void 0),n=Me(),r=i.useCallback((s,u)=>t?di({scope:t,environment:e,label:s??null,options:u??{}}):Math.random(),[e,t]),o=i.useCallback(s=>{t&&fi({scope:t,handle:s,environment:e,logLevel:n})},[e,n,t]),a=i.useCallback(s=>Cr(t??(typeof window<"u"?window:void 0),s),[t]);return{delayRender:r,continueRender:o,cancelRender:a}},pi=({compProps:e,componentName:t,noSuspense:n})=>{const r=i.useRef(null);return"component"in e&&(r.current=e.component),i.useMemo(()=>{if("component"in e){if(typeof document>"u"||n)return e.component;if(typeof e.component>"u")throw new Error(`A value of \`undefined\` was passed to the \`component\` prop. Check the value you are passing to the <${t}/> component.`);return s=>{const u=r.current;return j.createElement(u,s)}}if("lazyComponent"in e&&typeof e.lazyComponent<"u"){if(typeof e.lazyComponent>"u")throw new Error(`A value of \`undefined\` was passed to the \`lazyComponent\` prop. Check the value you are passing to the <${t}/> component.`);return j.lazy(e.lazyComponent)}throw new Error("You must pass either 'component' or 'lazyComponent'")},[e.lazyComponent])},yn=()=>{const{canvasContent:e,compositions:t,currentCompositionMetadata:n}=i.useContext(ct),r=t.find(a=>e?.type==="composition"&&a.id===e.compositionId),o=xr(r?.id??null);return i.useMemo(()=>!o||o.type==="error"||o.type==="loading"||!r?null:{...o.result,defaultProps:r.defaultProps??{},id:r.id,...n??{},component:r.component},[n,o,r])},hi=()=>/^([a-zA-Z0-9-\u4E00-\u9FFF])+$/g,gi=e=>e.match(hi()),Us=e=>{if(!gi(e))throw new Error(`Composition id can only contain a-z, A-Z, 0-9, CJK characters and -. You passed ${e}`)},qs=`Composition ID must match ${String(hi())}`,Hs=(e,t,n)=>{if(e){if(typeof e!="object")throw new Error(`"${t}" must be an object, but you passed a value of type ${typeof e}`);if(Array.isArray(e))throw new Error(`"${t}" must be an object, an array was passed ${n?`for composition "${n}"`:""}`)}},zs=()=>{const{continueRender:e,delayRender:t}=Ee();return i.useEffect(()=>{const n=t("Waiting for Root component to unsuspend");return()=>e(n)},[e,t]),null},Ws=({width:e,height:t,fps:n,durationInFrames:r,id:o,defaultProps:a,schema:s,...u})=>{const l=i.useContext(Lt),{registerComposition:c,unregisterComposition:d}=l,m=yn(),f=pi({compProps:u,componentName:"Composition",noSuspense:!1}),p=mn(),v=wr(),g=ne(),w=i.useContext(Ge);if(typeof window<"u"&&(window.remotion_seenCompositionIds=Array.from(new Set([...window.remotion_seenCompositionIds??[],o]))),w)throw v?new Error("<Composition> was mounted inside the `component` that was passed to the <Player>. See https://remotion.dev/docs/wrong-composition-mount for help."):new Error("<Composition> mounted inside another composition. See https://remotion.dev/docs/wrong-composition-mount for help.");const{folderName:x,parentName:E}=i.useContext(nr),S=u.stack??null,b="component"in u?u.component:null;i.useEffect(()=>{if(!o)throw new Error("No id for composition passed.");return Us(o),Hs(a,"defaultProps",o),c({durationInFrames:r??void 0,fps:n??void 0,height:t??void 0,width:e??void 0,id:o,folderName:x,component:f,defaultProps:or(a??{}),nonce:p.get(),parentFolderName:E,componentFromProps:b,schema:s??null,calculateMetadata:u.calculateMetadata??null,stack:S}),()=>{d(o)}},[r,n,t,f,o,x,a,e,p,E,b,s,u.calculateMetadata,S,c,d]);const y=xr(o),{setError:C,clearError:T}=i.useContext(ti),R=i.useCallback(F=>{C(F)},[C]),k=i.useCallback(()=>{T()},[T]);if(g.isStudio&&m&&m.component===f&&m.id===o){const F=f;return y===null||y.type!=="success"&&y.type!=="success-and-refreshing"?null:no.createPortal(h.jsx(tr,{children:h.jsx(fs,{onError:R,onClear:k,children:h.jsx(i.Suspense,{fallback:h.jsx(Es,{}),children:h.jsx(F,{...y.result.props??{}})})})}),ir())}if(g.isRendering&&m&&m.component===f&&m.id===o){const F=f;return y===null||y.type!=="success"&&y.type!=="success-and-refreshing"?null:no.createPortal(h.jsx(tr,{children:h.jsx(i.Suspense,{fallback:h.jsx(zs,{}),children:h.jsx(F,{...y.result.props??{}})})}),ir())}return null},un=e=>{const{onlyRenderComposition:t}=i.useContext(Lt);return t&&t!==e.id?null:h.jsx(Ws,{...e})},vi=[],yi=null,Ks=()=>vi,ce=e=>{vi.push(e)},Gs=e=>{yi=e},Ys=()=>yi,Js=e=>{const t=j.Children.toArray(e);if(t.length!==1)return null;const n=t[0];return!j.isValidElement(n)||typeof n.type!="function"&&typeof n.type!="object"?null:n.type},It="4.0.494",Zs=()=>{if(typeof globalThis>"u")return;const e=()=>{globalThis.remotion_imported=It,typeof window<"u"&&(window.remotion_imported=It)},t=globalThis.remotion_imported||typeof window<"u"&&window.remotion_imported;if(t){if(t===It)return;if(typeof t=="string"&&t.includes("webcodecs")){e();return}throw new TypeError(`🚨 Multiple versions of Remotion detected: ${[It,typeof t=="string"?t:"an older version"].filter(dt).join(" and ")}. This will cause things to break in an unexpected way.
17
+ Check that all your Remotion packages are on the same version. If your dependencies depend on Remotion, make them peer dependencies. You can also run \`npx remotion versions\` from your terminal to see which versions are mismatching.`)}e()},re=i.createContext(null),ur={};ei(ur,{useTimelineSetFrame:()=>Ti,useTimelinePosition:()=>He,useTimelineContext:()=>qe,usePlayingState:()=>Ri,usePlaybackRate:()=>Rr,useAbsoluteTimelinePosition:()=>Si,persistCurrentFrame:()=>wi,getInitialFrameState:()=>bi,getFrameForComposition:()=>xi,clampFrameToCompositionRange:()=>Ci});function co(e){let t=e+1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function Qs(e){let t=0,n=0,r=0;for(t=0;t<e.length;t++)n=e.charCodeAt(t),r=(r<<5)-r+n,r|=0;return r}var Je=(e,t)=>{if(e===null)return Math.random();if(typeof e=="string")return co(Qs(e));if(typeof e=="number")return co(e*1e10);throw new Error("random() argument must be a number or a string")},ft=i.createContext({setFrame:()=>{throw new Error("default")},setPlaying:()=>{throw new Error("default")}}),mt=i.createContext(null),Er=i.createContext(null),Sr=i.createContext(null),Xs=({children:e,frameState:t})=>{const[n,r]=i.useState(!1),o=i.useRef(!1),[a,s]=i.useState(1),u=i.useRef([]),[l]=i.useState(()=>String(Je(null))),[c,d]=i.useState(()=>bi()),m=t??c,{delayRender:f,continueRender:p}=Ee();typeof window<"u"&&i.useLayoutEffect(()=>{window.remotion_setFrame=(x,E,S)=>{window.remotion_attempt=S;const b=f(`Setting the current frame to ${x}`);let y=!0;d(C=>(C[E]??window.remotion_initialFrame)===x?(y=!1,C):{...C,[E]:x}),y?requestAnimationFrame(()=>p(b)):p(b)},window.remotion_isPlayer=!1},[p,f]);const v=i.useMemo(()=>({frame:m,playing:n,imperativePlaying:o,rootId:l,audioAndVideoTags:u}),[m,n,l]),g=i.useMemo(()=>({playbackRate:a,setPlaybackRate:s}),[a]),w=i.useMemo(()=>({setFrame:d,setPlaying:r}),[]);return h.jsx(Sr.Provider,{value:v,children:h.jsx(Er.Provider,{value:g,children:h.jsx(mt.Provider,{value:v,children:h.jsx(ft.Provider,{value:w,children:e})})})})},Tr=()=>"remotion.time-all",wi=e=>{localStorage.setItem(Tr(),JSON.stringify(e))},bi=()=>{const e=localStorage.getItem(Tr())??"{}";return JSON.parse(e)},xi=e=>{const t=localStorage.getItem(Tr())??"{}",n=JSON.parse(t);return n[e]!==void 0?Number(n[e]):typeof window>"u"?0:window.remotion_initialFrame??0},Ci=(e,t)=>Math.max(0,Math.min(Math.max(0,t-1),e)),Ei=e=>{const t=yn(),n=ne();if(!t)return typeof window>"u"?0:window.remotion_initialFrame??0;const r=e.frame[t.id]??(n.isPlayer?0:xi(t.id));return Ci(r,t.durationInFrames)},qe=()=>{const e=i.useContext(mt);if(e===null)throw new Error("TimelineContext is not available. This hook must be used inside a <Player> or the Remotion Studio.");return e},Rr=()=>{const e=i.useContext(Er);if(e===null)throw new Error("PlaybackRateContext is not available. This hook must be used inside a <Player> or the Remotion Studio.");return e},He=()=>{const e=qe();return Ei(e)},Si=()=>{const e=i.useContext(Sr);if(e===null)throw new Error("AbsoluteTimeContext is not available. This hook must be used inside a <Player> or the Remotion Studio.");return Ei(e)},Ti=()=>{const{setFrame:e}=i.useContext(ft);return e},Ri=()=>{const{playing:e,imperativePlaying:t}=qe(),{setPlaying:n}=i.useContext(ft);return i.useMemo(()=>[e,n,t],[t,e,n])},Se=()=>{const e=i.useContext(Ge),t=ne();if(!e)throw t.isPlayer?new Error("useCurrentFrame can only be called inside a component that was passed to <Player>. See: https://www.remotion.dev/docs/player/examples"):new Error("useCurrentFrame() can only be called inside a component that was registered as a composition. See https://www.remotion.dev/docs/the-fundamentals#defining-compositions");const n=He(),r=i.useContext(re),o=r?r.cumulatedFrom+r.relativeFrom:0;return n-o},wn=()=>{const e=i.useContext(re),t=e?.width??null,n=e?.height??null,r=e?.durationInFrames??null,o=yn();return i.useMemo(()=>{if(!o)return null;const{id:a,durationInFrames:s,fps:u,height:l,width:c,defaultProps:d,props:m,defaultCodec:f,defaultOutName:p,defaultVideoImageFormat:v,defaultPixelFormat:g,defaultProResProfile:w,defaultSampleRate:x}=o;return{id:a,width:t??c,height:n??l,fps:u,durationInFrames:r??s,defaultProps:d,props:m,defaultCodec:f,defaultOutName:p,defaultVideoImageFormat:v,defaultPixelFormat:g,defaultProResProfile:w,defaultSampleRate:x}},[r,n,t,o])},Ne=()=>{const e=wn(),t=i.useContext(Ge),n=wr();if(!e)throw typeof window<"u"&&window.remotion_isPlayer||n?new Error(["No video config found. Likely reasons:","- You are probably calling useVideoConfig() from outside the component passed to <Player />. See https://www.remotion.dev/docs/player/examples for how to set up the Player correctly.","- You have multiple versions of Remotion installed which causes the React context to get lost."].join("-")):new Error("No video config found. You are probably calling useVideoConfig() from a component which has not been registered as a <Composition />. See https://www.remotion.dev/docs/the-fundamentals#defining-compositions for more information.");if(!t)throw new Error("Called useVideoConfig() outside a Remotion composition.");return e},ki=({frame:e,children:t,active:n=!0})=>{const r=Se(),o=Ne();if(typeof e>"u")throw new Error("The <Freeze /> component requires a 'frame' prop, but none was passed.");if(typeof e!="number")throw new Error(`The 'frame' prop of <Freeze /> must be a number, but is of type ${typeof e}`);if(Number.isNaN(e))throw new Error("The 'frame' prop of <Freeze /> must be a real number, but it is NaN.");if(!Number.isFinite(e))throw new Error(`The 'frame' prop of <Freeze /> must be a finite number, but it is ${e}.`);const a=i.useMemo(()=>{if(typeof n=="boolean")return n;if(typeof n=="function")return n(r)},[n,r]),s=qe(),u=i.useContext(re),l=u?.relativeFrom??0,c=i.useMemo(()=>a?{...s,playing:!1,imperativePlaying:{current:!1},frame:{[o.id]:e+l}}:s,[a,s,o.id,e,l]),d=i.useMemo(()=>u?a?{...u,cumulatedFrom:0}:u:null,[u,a]);return h.jsx(mt.Provider,{value:c,children:h.jsx(re.Provider,{value:d,children:t})})},$e={"style.transformOrigin":{type:"transform-origin",step:1,default:"50% 50%",description:"Transform origin"},"style.translate":{type:"translate",step:1,default:"0px 0px",description:"Offset"},"style.scale":{type:"scale",max:100,step:.01,default:1,description:"Scale",defaultKeyframeOutput:"perceptual-scale"},"style.rotate":{type:"rotation-css",step:1,default:"0deg",description:"Rotation"},"style.opacity":{type:"number",min:0,max:1,step:.01,default:1,description:"Opacity",hiddenFromList:!1}},eu=$e,kr={"style.color":{type:"color",default:void 0,description:"Color"},"style.fontFamily":{type:"font-family",default:void 0,description:"Font family",keyframable:!1},"style.fontSize":{type:"number",default:void 0,min:0,step:1,description:"Font size",hiddenFromList:!1},"style.lineHeight":{type:"number",default:void 0,min:0,step:.05,description:"Line height",hiddenFromList:!1},"style.fontWeight":{type:"enum",default:"400",description:"Font weight",variants:{100:{},200:{},300:{},400:{},500:{},600:{},700:{},800:{},900:{},normal:{},bold:{}}},"style.fontStyle":{type:"enum",default:"normal",description:"Font style",variants:{normal:{},italic:{},oblique:{}}},"style.textAlign":{type:"enum",default:"left",description:"Text align",variants:{left:{},center:{},right:{},justify:{},start:{},end:{}}},"style.letterSpacing":{type:"number",default:void 0,step:.1,description:"Letter spacing",hiddenFromList:!1}},tu={children:{type:"text-content",default:"",description:"Text",keyframable:!1}},bn={premountFor:{type:"number",default:0,description:"Premount For",min:0,step:1,hiddenFromList:!1},postmountFor:{type:"number",default:0,min:0,step:1,hiddenFromList:!0},styleWhilePremounted:{type:"hidden"},styleWhilePostmounted:{type:"hidden"}},nu=bn,Ii={...$e,...bn},Ir={type:"boolean",default:!1,description:"Hidden"},Fi={type:"hidden"},Fr={type:"hidden"},ru=e=>({name:Fr,...e}),Pr={type:"number",default:void 0,min:1,step:1,hiddenFromList:!0},Pi={type:"number",default:0,step:1,hiddenFromList:!0},Mi={type:"number",default:0,min:0,step:1,hiddenFromList:!0},Mr={type:"number",default:null,step:1,hiddenFromList:!0},_e={durationInFrames:Pr,from:Pi,trimBefore:Mi,freeze:Mr,hidden:Ir,name:Fr,showInTimeline:Fi},lt={..._e,layout:{type:"enum",default:"absolute-fill",description:"Layout",variants:{"absolute-fill":Ii,none:{}}}},ou={durationInFrames:Pr,trimBefore:Mi,freeze:Mr,hidden:Ir,name:Fr,showInTimeline:Fi},iu={...ou,layout:lt.layout},au={...lt,layout:{...lt.layout,default:"none"}},Ni=i.createContext({premountFramesRemaining:0}),pt=j.createContext({registerSequence:()=>{throw new Error("SequenceManagerContext not initialized")},unregisterSequence:()=>{throw new Error("SequenceManagerContext not initialized")},sequences:[]}),xn=j.createContext({current:[]}),Ve=e=>`${e.absolutePath}\0${e.nodePath.join(".")}\0${e.sequenceKeys.join(".")}\0${e.effectKeys.map(t=>t.join(".")).join(".")}`,Cn=j.createContext({propStatuses:{}}),En=j.createContext({current:{}}),Sn=j.createContext({getDragOverrides:()=>{throw new Error("VisualModeDragOverridesContext not initialized")},getEffectDragOverrides:()=>{throw new Error("VisualModeDragOverridesContext not initialized")}}),$i=j.createContext({setDragOverrides:()=>{throw new Error("VisualModeSettersContext not initialized")},clearDragOverrides:()=>{throw new Error("VisualModeSettersContext not initialized")},setEffectDragOverrides:()=>{throw new Error("VisualModeSettersContext not initialized")},clearEffectDragOverrides:()=>{throw new Error("VisualModeSettersContext not initialized")},setPropStatuses:()=>{throw new Error("VisualModeSettersContext not initialized")}}),Dn=(e,t)=>`${Ve(e)}.effects.${t}`,su=({children:e})=>{const[t,n]=i.useState([]),r=i.useRef(t);r.current=t;const[o,a]=i.useState({}),s=i.useRef(o);s.current=o;const[u,l]=i.useState({}),[c,d]=i.useState({}),m=i.useRef(c);m.current=c;const f=i.useCallback((k,F,I)=>{a(N=>({...N,[Ve(k)]:{...N[Ve(k)],[F]:I}}))},[]),p=i.useCallback(k=>{a(F=>{const I=Ve(k);if(!F[I])return F;const N={...F};return delete N[I],N})},[]),v=i.useCallback((k,F,I,N)=>{l(A=>{const M=Dn(k,F);return{...A,[M]:{...A[M],[I]:N}}})},[]),g=i.useCallback((k,F)=>{l(I=>{const N=Dn(k,F);if(!I[N])return I;const A={...I};return delete A[N],A})},[]),w=i.useCallback((k,F)=>{d(I=>{const N=Ve(k),A=I[N],M=F(A);return A===M?I:{...I,[N]:M}})},[]),x=i.useCallback(k=>{n(F=>[...F,k])},[]),E=i.useCallback(k=>{n(F=>F.filter(I=>I.id!==k))},[]),S=i.useMemo(()=>({registerSequence:x,sequences:t,unregisterSequence:E}),[x,t,E]),b=i.useCallback(k=>o[Ve(k)]??{},[o]),y=i.useCallback((k,F)=>u[Dn(k,F)]??{},[u]),C=i.useMemo(()=>({propStatuses:c}),[c]),T=i.useMemo(()=>({getDragOverrides:b,getEffectDragOverrides:y}),[b,y]),R=i.useMemo(()=>({setDragOverrides:f,clearDragOverrides:p,setEffectDragOverrides:v,clearEffectDragOverrides:g,setPropStatuses:w}),[f,p,v,g,w]);return h.jsx(xn.Provider,{value:r,children:h.jsx(pt.Provider,{value:S,children:h.jsx(En.Provider,{value:m,children:h.jsx(Cn.Provider,{value:C,children:h.jsx(Sn.Provider,{value:T,children:h.jsx($i.Provider,{value:R,children:e})})})})})})},Tn=i.createContext(!1),uu=({children:e})=>h.jsx(Tn.Provider,{value:!0,children:e}),Ai=({children:e})=>h.jsx(Tn.Provider,{value:!1,children:e}),lu=()=>{if(!j.useContext(Tn))throw new Error("This component must be inside a <Series /> component.")},cu=(e,t)=>{for(const n of t){const r=n.split("."),o=[e];let a=e;for(let s=0;s<r.length-1;s++){const u=r[s],l=a[u];if(l==null){a=null;break}a=l,o.push(a)}if(a!==null){delete a[r[r.length-1]];for(let s=o.length-1;s>0;s--){const u=o[s];if(Object.keys(u).length===0){const l=r[s-1];delete o[s-1][l]}else break}}}return e},du=4,fu=.001,mu=1e-7,pu=10,Ft=11,Gt=1/(Ft-1),hu=typeof Float32Array=="function";function Li(e,t){return 1-3*t+3*e}function Vi(e,t){return 3*t-6*e}function ji(e){return 3*e}function ln(e,t,n){return((Li(t,n)*e+Vi(t,n))*e+ji(t))*e}function _i(e,t,n){return 3*Li(t,n)*e*e+2*Vi(t,n)*e+ji(t)}function gu({aX:e,_aA:t,_aB:n,mX1:r,mX2:o}){let a,s,u=0,l=t,c=n;do s=l+(c-l)/2,a=ln(s,r,o)-e,a>0?c=s:l=s;while(Math.abs(a)>mu&&++u<pu);return s}function vu(e,t,n,r){let o=t;for(let a=0;a<du;++a){const s=_i(o,n,r);if(s===0)return o;const u=ln(o,n,r)-e;o-=u/s}return o}function Oi(e,t,n,r){if(!(e>=0&&e<=1&&n>=0&&n<=1))throw new Error("bezier x values must be in [0, 1] range");const o=hu?new Float32Array(Ft):new Array(Ft);if(e!==t||n!==r)for(let s=0;s<Ft;++s)o[s]=ln(s*Gt,e,n);function a(s){let u=0,l=1;const c=Ft-1;for(;l!==c&&o[l]<=s;++l)u+=Gt;--l;const d=(s-o[l])/(o[l+1]-o[l]),m=u+d*Gt,f=_i(m,e,n);return f>=fu?vu(s,m,e,n):f===0?m:gu({aX:s,_aA:u,_aB:u+Gt,mX1:e,mX2:n})}return function(s){const u=Math.min(1,Math.max(0,s));return e===t&&n===r?u:u===0?0:u===1?1:ln(a(u),t,r)}}var yu=e=>Math.round(e*1e6)/1e6,wu=new Set(["deg","rad","grad","turn"]),Di=new Set(["%","cap","ch","cm","cqb","cqh","cqi","cqmax","cqmin","cqw","dvh","dvw","em","ex","ic","in","lh","lvh","lvw","mm","pc","pt","px","q","rem","rlh","svh","svw","vb","vh","vi","vmax","vmin","vw"]),Bi=/^([+-]?(?:\d+\.?\d*|\.\d+))([a-zA-Z%]+)?$/,Ui=new Set(["left","center","right","top","bottom"]),ot=e=>e==="left"?[{axis:"x",value:{value:0,unit:"%"}}]:e==="right"?[{axis:"x",value:{value:100,unit:"%"}}]:e==="top"?[{axis:"y",value:{value:0,unit:"%"}}]:e==="bottom"?[{axis:"y",value:{value:100,unit:"%"}}]:[{axis:"x",value:{value:50,unit:"%"}},{axis:"y",value:{value:50,unit:"%"}}],xt={value:50,unit:"%"},fo=e=>String(yu(e)),bu=(e,t)=>{const n=Bi.exec(e);if(n===null)throw new TypeError(`Cannot interpolate "${t}" because "${e}" is not a supported scale, translate, or rotate value`);const r=n[2]??null,o=Number(n[1]);if(!Number.isFinite(o))throw new TypeError(`Cannot interpolate "${t}" because "${e}" is not finite`);if(r===null)return{kind:"scale",value:o,unit:null};if(wu.has(r))return{kind:"rotate",value:o,unit:r};if(Di.has(r))return{kind:"translate",value:o,unit:r};throw new TypeError(`Cannot interpolate "${t}" because "${r}" is not a supported translate or rotate unit`)},qi=({component:e,value:t,allowPercentage:n})=>{const r=Bi.exec(e);if(r===null)throw new TypeError(`Cannot interpolate "${t}" because "${e}" is not a supported transform-origin ${n?"length-percentage":"z length"}`);const o=r[2]??null,a=Number(r[1]);if(!Number.isFinite(a))throw new TypeError(`Cannot interpolate "${t}" because "${e}" is not finite`);if(o===null||!Di.has(o)||!n&&o==="%")throw new TypeError(`Cannot interpolate "${t}" because "${e}" is not a supported transform-origin ${n?"length-percentage":"z length"}`);return{value:a,unit:o}},Bn=(e,t)=>{const n=e.toLowerCase();return Ui.has(n)?{type:"keyword",keyword:n}:{type:"length-percentage",parsed:qi({component:e,value:t,allowPercentage:!0})}},xu=(e,t,n)=>{const r=[];for(const o of ot(e))for(const a of ot(t))o.axis!==a.axis&&r.push(o.axis==="x"?[o.value,a.value]:[a.value,o.value]);if(r.length===0)throw new TypeError(`Cannot interpolate "${n}" because "${e} ${t}" is not a valid transform-origin keyword pair`);return r[0]},Cu=(e,t)=>{if(e.length===1){const u=Bn(e[0],t);return u.type==="length-percentage"?[u.parsed,xt]:u.keyword==="top"||u.keyword==="bottom"?[xt,ot(u.keyword)[0].value]:[ot(u.keyword)[0].value,xt]}const n=Bn(e[0],t),r=Bn(e[1],t);if(n.type==="length-percentage"&&r.type==="length-percentage")return[n.parsed,r.parsed];if(n.type==="keyword"&&r.type==="keyword")return xu(n.keyword,r.keyword,t);const o=n.type==="keyword"?n:r.type==="keyword"?r:null,a=n.type==="length-percentage"?n.parsed:r.type==="length-percentage"?r.parsed:null;if(o===null||a===null)throw new Error("Expected a keyword and a length-percentage value");const s=n.type==="keyword";if(o.keyword==="left"||o.keyword==="right"){if(!s)throw new TypeError(`Cannot interpolate "${t}" because horizontal transform-origin keywords must come before a length-percentage value`);return[ot(o.keyword)[0].value,a]}return o.keyword==="top"||o.keyword==="bottom"?[a,ot(o.keyword)[0].value]:s?[xt,a]:[a,xt]},Eu=(e,t)=>{const[n,r]=Cu(t.slice(0,2),e),o=t[2]===void 0?{value:0,unit:null}:qi({component:t[2],value:e,allowPercentage:!1});return{kind:"translate",values:[n.value,r.value,o.value],units:[n.unit,r.unit,o.unit],dimensions:t[2]===void 0?2:3}},Su=e=>{if(typeof e=="number"){if(!Number.isFinite(e))throw new Error(`outputRange must contain only finite numbers, but got [${e}]`);return{kind:"scale",values:[e,e,1],units:[null,null,null],dimensions:1}}const t=e.trim().split(/\s+/);if(t.length<1||t.length>3||t[0]==="")throw new TypeError(`String outputRange values must contain 1 to 3 components, but got "${e}"`);if(t.some(o=>Ui.has(o.toLowerCase())))return Eu(e,t);const n=t.map(o=>bu(o,e)),[{kind:r}]=n;for(const o of n)if(o.kind!==r)throw new TypeError(`Cannot interpolate "${e}" because it mixes ${r} and ${o.kind} values`);if(r==="scale"){const o=n[0].value,a=n[1]?.value??o,s=n[2]?.value??1;return{kind:r,values:[o,a,s],units:[null,null,null],dimensions:n.length}}return{kind:r,values:[n[0].value,n[1]?.value??0,n[2]?.value??0],units:[n[0].unit,n[1]?.unit??null,n[2]?.unit??null],dimensions:n.length}},Tu=({kind:e,values:t,units:n,dimensions:r})=>e==="scale"?t.slice(0,r).map(o=>fo(o)).join(" "):t.slice(0,r).map((o,a)=>`${fo(o)}${n[a]}`).join(" "),mo=e=>e===0?0:Math.sign(e)*e*e,Ru=e=>e===0?0:Math.sign(e)*Math.sqrt(Math.abs(e));function ku(e,t,n,r){const{extrapolateLeft:o,extrapolateRight:a,easing:s,output:u}=r;let l=e;const[c,d]=t,[m,f]=n;if(l<c){if(o==="identity")return l;if(o==="clamp")l=c;else if(o==="wrap"){const p=d-c;l=((l-c)%p+p)%p+c}}if(l>d){if(a==="identity")return l;if(a==="clamp")l=d;else if(a==="wrap"){const p=d-c;l=((l-c)%p+p)%p+c}}if(m===f)return m;if(l=(l-c)/(d-c),l=s(l),u==="perceptual-scale"){const p=mo(m),v=mo(f);l=Ru(l*(v-p)+p)}else l=l*(f-m)+m;return l}function Iu(e,t){let n;for(n=1;n<t.length-1&&!(t[n]>=e);++n);return n-1}var Fu=e=>e,Pu=e=>e??"linear",Hi=e=>e.remotionShouldExtendRight===!0,po=({easing:e,segmentIndex:t})=>e===void 0?Fu:typeof e=="function"?e:e[t],ho=({input:e,inputRange:t,outputRange:n,easing:r,extrapolateLeft:o,extrapolateRight:a,output:s})=>ku(e,t,n,{easing:r,extrapolateLeft:o,extrapolateRight:e>t[1]&&a==="clamp"&&Hi(r)?"extend":a,output:s}),Nr=({input:e,inputRange:t,outputRange:n,options:r})=>{const o=Pu(r?.output);if(t.length===1)return n[0];const a=r?.easing;let s="extend";r?.extrapolateLeft!==void 0&&(s=r.extrapolateLeft);let u="extend";r?.extrapolateRight!==void 0&&(u=r.extrapolateRight);const l=r?.posterize===void 0?e:Math.floor(e/r.posterize)*r.posterize,c=Iu(l,t),d=po({easing:a,segmentIndex:c});let m=ho({input:l,inputRange:[t[c],t[c+1]],outputRange:[n[c],n[c+1]],easing:d,extrapolateLeft:s,extrapolateRight:u,output:o});for(let f=0;f<c;f++){const p=po({easing:a,segmentIndex:f});if(!Hi(p))continue;const v=t[f+1];if(l<=v)continue;const g=ho({input:l,inputRange:[t[f],v],outputRange:[n[f],n[f+1]],easing:p,extrapolateLeft:s,extrapolateRight:"extend",output:o});m+=g-n[f+1]}return m},Mu=({input:e,inputRange:t,outputRange:n,options:r})=>{const o=n.map(Su),a=o[0]?.kind;if(a===void 0)throw new Error("outputRange must have at least 1 element");for(const c of o)if(c.kind!==a)throw new TypeError(`Cannot interpolate ${a} values with ${c.kind} values`);const s=Math.max(...o.map(c=>c.dimensions)),u=[null,null,null];if(a!=="scale")for(let c=0;c<s;c++){for(const d of o){const m=d.units[c];if(m!==null){if(u[c]===null){u[c]=m;continue}if(u[c]!==m)throw new TypeError(`Cannot interpolate ${a} values with different units on axis ${c+1}: ${u[c]} and ${m}`)}}if(u[c]===null)throw new TypeError(`Cannot interpolate ${a} values because axis ${c+1} has no unit`)}const l=[0,0,0];for(let c=0;c<s;c++)l[c]=Nr({input:e,inputRange:t,outputRange:o.map(d=>d.values[c]),options:r});return Tu({kind:a,values:l,units:u,dimensions:s})},Nu=e=>{const t=e[0]?.length;if(t===void 0)throw new Error("outputRange must have at least 1 element");if(t===0)throw new TypeError("outputRange tuples must contain at least 1 number");for(const n of e){if(n.length!==t)throw new TypeError(`outputRange tuples must all have the same length, but got ${t} and ${n.length}`);for(const r of n)if(typeof r!="number"||!Number.isFinite(r))throw new TypeError(`outputRange tuples must contain only finite numbers, but got [${n.join(",")}]`)}return t},$u=({input:e,inputRange:t,outputRange:n,options:r})=>{const o=Nu(n);return new Array(o).fill(!0).map((a,s)=>Nr({input:e,inputRange:t,outputRange:n.map(u=>u[s]),options:r}))};function Au(e){for(let t=1;t<e.length;++t)if(!(e[t]>e[t-1]))throw new Error(`inputRange must be strictly monotonically increasing but got [${e.join(",")}]`)}function go(e,t){if(t.length<1)throw new Error(e+" must have at least 1 element");for(const n of t){if(typeof n!="number")throw new Error(`${e} must contain only numbers`);if(!Number.isFinite(n))throw new Error(`${e} must contain only finite numbers, but got [${t.join(",")}]`)}}function Lu(e,t){if(e===void 0||typeof e=="function")return;const n=t-1;if(e.length!==n)throw new Error(`When easing is an array, it must have one entry per segment between keyframes (length inputRange.length - 1 = ${n}), but got length ${e.length}`);for(let r=0;r<e.length;r++)if(typeof e[r]!="function")throw new Error(`easing[${r}] must be a function`)}function Vu(e){if(e!==void 0&&(typeof e!="number"||!Number.isFinite(e)||e<=0))throw new Error(`posterize must be a positive finite number, but got ${e}`)}function ju(e){if(!(e===void 0||e==="linear"||e==="perceptual-scale"))throw new Error(`output must be "linear" or "perceptual-scale", but got ${String(e)}`)}function Ot(e,t,n,r){if(typeof e>"u")throw new Error("input can not be undefined");if(typeof t>"u")throw new Error("inputRange can not be undefined");if(typeof n>"u")throw new Error("outputRange can not be undefined");if(t.length!==n.length)throw new Error("inputRange ("+t.length+") and outputRange ("+n.length+") must have the same length");if(go("inputRange",t),Au(t),Lu(r?.easing,t.length),Vu(r?.posterize),ju(r?.output),typeof e!="number")throw new TypeError("Cannot interpolate an input which is not a number");if(!Array.isArray(n))throw new Error("outputRange must contain only numbers");if(n.some(a=>typeof a=="string")){if(!n.every(a=>typeof a=="string"||typeof a=="number"))throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");return Mu({input:e,inputRange:t,outputRange:n,options:r})}if(n.every(a=>Array.isArray(a)))return $u({input:e,inputRange:t,outputRange:n,options:r});if(!n.every(a=>typeof a=="number"))throw new TypeError("outputRange must contain only numbers, numeric tuples, or supported scale, translate, and rotate strings");return go("outputRange",n),Nr({input:e,inputRange:t,outputRange:n,options:r})}var _u=({allowFloats:e,durationInFrames:t,frame:n})=>{if(typeof n>"u")throw new TypeError('Argument missing for parameter "frame"');if(typeof n!="number")throw new TypeError(`Argument passed for "frame" is not a number: ${n}`);if(!Number.isFinite(n))throw new RangeError(`Frame ${n} is not finite`);if(n<0&&n<-t)throw new RangeError(`Cannot use frame ${n}: Duration of composition is ${t}, therefore the lowest frame that can be rendered is ${-t}`);if(n>t-1)throw new RangeError(`Cannot use frame ${n}: Duration of composition is ${t}, therefore the highest frame that can be rendered is ${t-1}`)},Ou=e=>{if(!(typeof e>"u")){if(typeof e!="number")throw new TypeError(`A "duration" of a spring must be a "number" but is "${typeof e}"`);if(Number.isNaN(e))throw new TypeError('A "duration" of a spring is NaN, which it must not be');if(!Number.isFinite(e))throw new TypeError('A "duration" of a spring must be finite, but is '+e);if(e<=0)throw new TypeError('A "duration" of a spring must be positive, but is '+e)}},Du={damping:10,mass:1,stiffness:100,overshootClamping:!1},Un={};function Bu({animation:e,now:t,config:n}){const{toValue:r,lastTimestamp:o,current:a,velocity:s}=e,u=Math.min(t-o,64);if(n.damping<=0)throw new Error("Spring damping must be greater than 0, otherwise the spring() animation will never end, causing an infinite loop.");const l=n.damping,c=n.mass,d=n.stiffness,m=[r,o,a,s,l,c,d,t].join("-");if(Un[m])return Un[m];const f=-s,p=r-a,v=l/(2*Math.sqrt(d*c)),g=Math.sqrt(d/c),w=g*Math.sqrt(1-v**2),x=u/1e3,E=Math.sin(w*x),S=Math.cos(w*x),b=Math.exp(-v*g*x),y=b*(E*((f+v*g*p)/w)+p*S),C=r-y,T=v*g*y-b*(S*(f+v*g*p)-w*p*E),R=Math.exp(-g*x),k=r-R*(p+(f+g*p)*x),F=R*(f*(x*g-1)+x*p*g*g),I={toValue:r,prevPosition:a,lastTimestamp:t,current:v<1?C:k,velocity:v<1?T:F};return Un[m]=I,I}var qn={};function zi({frame:e,fps:t,config:n={}}){const a=[e,t,n.damping,n.mass,n.overshootClamping,n.stiffness].join("-");if(qn[a])return qn[a];let s={lastTimestamp:0,current:0,toValue:1,velocity:0,prevPosition:0};const u=Math.max(0,e),l=u%1;for(let c=0;c<=Math.floor(u);c++){c===Math.floor(u)&&(c+=l);const d=c/t*1e3;s=Bu({animation:s,now:d,config:{...Du,...n}})}return qn[a]=s,s}var Hn=new Map;function Wi({fps:e,config:t={},threshold:n=.005}){if(typeof n!="number")throw new TypeError(`threshold must be a number, got ${n} of type ${typeof n}`);if(n===0)return 1/0;if(n===1)return 0;if(isNaN(n))throw new TypeError("Threshold is NaN");if(!Number.isFinite(n))throw new TypeError("Threshold is not finite");if(n<0)throw new TypeError("Threshold is below 0");const r=[e,t.damping,t.mass,t.overshootClamping,t.stiffness,n].join("-");if(Hn.has(r))return Hn.get(r);hn(e,"to the measureSpring() function");let o=0,a=0;const s=()=>zi({fps:e,frame:o,config:t});let u=s();const l=()=>Math.abs(u.current-u.toValue);let c=l();for(;c>=n;)o++,u=s(),c=l();a=o;for(let d=0;d<20;d++)o++,u=s(),c=l(),c>=n&&(d=0,a=o+1);return Hn.set(r,a),a}function vo({frame:e,fps:t,config:n={},from:r=0,to:o=1,durationInFrames:a,durationRestThreshold:s,delay:u=0,reverse:l=!1}){Ou(a),_u({frame:e,durationInFrames:1/0,allowFloats:!0}),hn(t,"to spring()");const c=l||typeof a<"u",d=c?Wi({fps:t,config:n,threshold:s}):void 0,m=c?{get:()=>d}:{get:()=>{throw new Error("did not calculate natural duration, this is an error with Remotion. Please report")}},p=(l?(a??m.get())-e:e)+(l?u:-u),v=a===void 0?p:p/(a/m.get());if(a&&p>a)return o;const g=zi({fps:t,frame:v,config:n}),w=n.overshootClamping?o>=r?Math.min(g.current,o):Math.max(g.current,o):g.current;return r===0&&o===1?w:Ot(w,[0,1],[r,o])}var yo=e=>Math.min(1,Math.max(0,e)),Ct=30;class cn{static step0(t){return t>0?1:0}static step1(t){return t>=1?1:0}static linear(t){return t}static ease(t){return cn.bezier(.42,0,1,1)(t)}static quad(t){return t*t}static cubic(t){return t*t*t}static poly(t){return n=>n**t}static sin(t){return 1-Math.cos(t*Math.PI/2)}static circle(t){const n=yo(t);return 1-Math.sqrt(1-n*n)}static exp(t){return 2**(10*(t-1))}static elastic(t=1){const n=t*Math.PI;return r=>1-Math.cos(r*Math.PI/2)**3*Math.cos(r*n)}static back(t=1.70158){return n=>n*n*((t+1)*n-t)}static spring({allowTail:t=!1,durationRestThreshold:n,...r}={}){return Object.assign(a=>a<=0?0:!t&&a>=1?1:vo(t?{fps:Ct,frame:a*Wi({fps:Ct,config:r,threshold:n}),config:r}:{fps:Ct,frame:a*Ct,config:r,durationInFrames:Ct,durationRestThreshold:n}),{remotionShouldExtendRight:t})}static bounce(t){const n=yo(t);if(n<1/2.75)return 7.5625*n*n;if(n<2/2.75){const o=n-.5454545454545454;return 7.5625*o*o+.75}if(n<2.5/2.75){const o=n-.8181818181818182;return 7.5625*o*o+.9375}const r=n-2.625/2.75;return 7.5625*r*r+.984375}static bezier(t,n,r,o){return Oi(t,n,r,o)}static in(t){return t}static out(t){return n=>1-t(1-n)}static inOut(t){return n=>n<.5?t(n*2)/2:1-t((1-n)*2)/2}}var Ce="[-+]?\\d*\\.?\\d+",Yt=Ce+"%";function Jt(...e){return"\\(\\s*("+e.join(")\\s*,\\s*(")+")\\s*\\)"}var Zt="(?:none|[-+]?\\d*\\.?\\d+(?:%|deg|rad|grad|turn)?)";function Et(e){return new RegExp(e+"\\(\\s*("+Zt+")\\s+("+Zt+")\\s+("+Zt+")(?:\\s*\\/\\s*("+Zt+"))?\\s*\\)")}function Uu(){const e={rgb:void 0,rgba:void 0,hsl:void 0,hsla:void 0,hex3:void 0,hex4:void 0,hex5:void 0,hex6:void 0,hex8:void 0,oklch:void 0,oklab:void 0,lab:void 0,lch:void 0,hwb:void 0};return e.rgb===void 0&&(e.rgb=new RegExp("rgb"+Jt(Ce,Ce,Ce)),e.rgba=new RegExp("rgba"+Jt(Ce,Ce,Ce,Ce)),e.hsl=new RegExp("hsl"+Jt(Ce,Yt,Yt)),e.hsla=new RegExp("hsla"+Jt(Ce,Yt,Yt,Ce)),e.hex3=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,e.hex4=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,e.hex6=/^#([0-9a-fA-F]{6})$/,e.hex8=/^#([0-9a-fA-F]{8})$/,e.oklch=Et("oklch"),e.oklab=Et("oklab"),e.lab=Et("lab"),e.lch=Et("lch"),e.hwb=Et("hwb")),e}function st(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function wo(e,t,n){const r=n<.5?n*(1+t):n+t-n*t,o=2*n-r,a=st(o,r,e+1/3),s=st(o,r,e),u=st(o,r,e-1/3);return Math.round(a*255)<<24|Math.round(s*255)<<16|Math.round(u*255)<<8}function nt(e){const t=Number.parseInt(e,10);return t<0?0:t>255?255:t}function bo(e){return(Number.parseFloat(e)%360+360)%360/360}function xo(e){const t=Number.parseFloat(e);return t<0?0:t>1?255:Math.round(t*255)}function Qt(e){const t=Number.parseFloat(e);return t<0?0:t>100?1:t/100}function ye(e,t){return e==="none"?0:e.endsWith("%")?Number.parseFloat(e)/100*t:Number.parseFloat(e)}function zn(e){return e==="none"?0:e.endsWith("rad")?Number.parseFloat(e)*180/Math.PI:e.endsWith("grad")?Number.parseFloat(e)*.9:e.endsWith("turn")?Number.parseFloat(e)*360:Number.parseFloat(e)}function St(e){return e===void 0||e==="none"?1:e.endsWith("%")?Math.max(0,Math.min(1,Number.parseFloat(e)/100)):Math.max(0,Math.min(1,Number.parseFloat(e)))}function ut(e){return e<=.0031308?12.92*e:1.055*e**(1/2.4)-.055}function Xt(e){return Math.max(0,Math.min(1,e))}function Tt(e,t,n,r){const o=Math.round(Xt(e)*255),a=Math.round(Xt(t)*255),s=Math.round(Xt(n)*255),u=Math.round(Xt(r)*255);return(o<<24|a<<16|s<<8|u)>>>0}function Co(e,t,n){const r=e+.3963377774*t+.2158037573*n,o=e-.1055613458*t-.0638541728*n,a=e-.0894841775*t-1.291485548*n,s=r*r*r,u=o*o*o,l=a*a*a,c=4.0767416621*s-3.3077115913*u+.2309699292*l,d=-1.2684380046*s+2.6097574011*u-.3413193965*l,m=-.0041960863*s-.7034186147*u+1.707614701*l;return[ut(c),ut(d),ut(m)]}function Eo(e,t,n){const r=.008856451679035631,o=24389/27,a=.95047,s=1,u=1.08883,l=(e+16)/116,c=t/500+l,d=l-n/200,m=c*c*c,f=d*d*d,p=m>r?m:(116*c-16)/o,v=e>o*r?((e+16)/116)**3:e/o,g=f>r?f:(116*d-16)/o,w=p*a,x=v*s,E=g*u,S=3.2404542*w-1.5371385*x-.4985314*E,b=-.969266*w+1.8760108*x+.041556*E,y=.0556434*w-.2040259*x+1.0572252*E;return[ut(S),ut(b),ut(y)]}function qu(e,t,n){if(t+n>=1){const c=t/(t+n);return[c,c,c]}const r=1,o=0,a=st(o,r,e+1/3),s=st(o,r,e),u=st(o,r,e-1/3),l=1-t-n;return[a*l+t,s*l+t,u*l+t]}var So={transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199};function Hu(e){const t=Uu();let n;if(t.hex6&&(n=t.hex6.exec(e)))return Number.parseInt(n[1]+"ff",16)>>>0;if(So[e]!==void 0)return So[e];if(t.rgb&&(n=t.rgb.exec(e)))return(nt(n[1])<<24|nt(n[2])<<16|nt(n[3])<<8|255)>>>0;if(t.rgba&&(n=t.rgba.exec(e)))return(nt(n[1])<<24|nt(n[2])<<16|nt(n[3])<<8|xo(n[4]))>>>0;if(t.hex3&&(n=t.hex3.exec(e)))return Number.parseInt(n[1]+n[1]+n[2]+n[2]+n[3]+n[3]+"ff",16)>>>0;if(t.hex8&&(n=t.hex8.exec(e)))return Number.parseInt(n[1],16)>>>0;if(t.hex4&&(n=t.hex4.exec(e)))return Number.parseInt(n[1]+n[1]+n[2]+n[2]+n[3]+n[3]+n[4]+n[4],16)>>>0;if(t.hsl&&(n=t.hsl.exec(e)))return(wo(bo(n[1]),Qt(n[2]),Qt(n[3]))|255)>>>0;if(t.hsla&&(n=t.hsla.exec(e)))return(wo(bo(n[1]),Qt(n[2]),Qt(n[3]))|xo(n[4]))>>>0;if(t.oklch&&(n=t.oklch.exec(e))){const r=ye(n[1],1),o=ye(n[2],.4),a=zn(n[3]),s=St(n[4]),u=a*Math.PI/180,[l,c,d]=Co(r,o*Math.cos(u),o*Math.sin(u));return Tt(l,c,d,s)}if(t.oklab&&(n=t.oklab.exec(e))){const r=ye(n[1],1),o=ye(n[2],.4),a=ye(n[3],.4),s=St(n[4]),[u,l,c]=Co(r,o,a);return Tt(u,l,c,s)}if(t.lab&&(n=t.lab.exec(e))){const r=ye(n[1],100),o=ye(n[2],125),a=ye(n[3],125),s=St(n[4]),[u,l,c]=Eo(r,o,a);return Tt(u,l,c,s)}if(t.lch&&(n=t.lch.exec(e))){const r=ye(n[1],100),o=ye(n[2],150),a=zn(n[3]),s=St(n[4]),u=a*Math.PI/180,[l,c,d]=Eo(r,o*Math.cos(u),o*Math.sin(u));return Tt(l,c,d,s)}if(t.hwb&&(n=t.hwb.exec(e))){const r=zn(n[1]),o=ye(n[2],1),a=ye(n[3],1),s=St(n[4]),[u,l,c]=qu(r/360,o,a);return Tt(u,l,c,s)}throw new Error(`invalid color string ${e} provided`)}var To=e=>(e>>24&255)/255,zu=e=>e>>16&255,Wu=e=>e>>8&255,Ku=e=>e&255,Gu=(e,t,n,r)=>`rgba(${e}, ${t}, ${n}, ${r})`;function Yu(e){const t=Hu(e);return(t<<24|t>>>8)>>>0}var Ju=(e,t,n,r)=>{const[o,a,s,u]=[zu,Wu,Ku,To].map(l=>{const c=Ot(e,t,n.map(d=>l(d)),{easing:r?.easing,extrapolateLeft:"clamp",extrapolateRight:"clamp",posterize:r?.posterize});return l===To?Number(c.toFixed(3)):Math.round(c)});return Gu(o,a,s,u)},Zu=(e,t,n,r)=>{if(typeof e>"u")throw new TypeError("input can not be undefined");if(typeof t>"u")throw new TypeError("inputRange can not be undefined");if(typeof n>"u")throw new TypeError("outputRange can not be undefined");if(t.length!==n.length)throw new TypeError("inputRange ("+t.length+" values provided) and outputRange ("+n.length+" values provided) must have the same length");const o=n.map(a=>Yu(a));return Ju(e,t,o,r)},Ro=({easing:e,forceSpringAllowTail:t})=>{switch(e.type){case"linear":return cn.linear;case"spring":return cn.spring({allowTail:t??e.allowTail??void 0,damping:e.damping,durationRestThreshold:e.durationRestThreshold??void 0,mass:e.mass,overshootClamping:e.overshootClamping,stiffness:e.stiffness});case"bezier":return Oi(e.x1,e.y1,e.x2,e.y2);default:throw new TypeError(`Unsupported easing: ${JSON.stringify(e)}`)}},Dt=({frame:e,forceSpringAllowTail:t,status:n})=>{const{keyframes:r,easing:o,clamping:a,interpolationFunction:s}=n;if(r.length===0)return null;const u=[...r].sort((d,m)=>d.frame-m.frame),l=u.map(d=>d.frame),c=u.map(d=>d.value);if(s==="interpolateColors"){if(!c.every(d=>typeof d=="string"))return null;if(r.length===1)return c[0];try{return Zu(e,l,c,{easing:o.map(d=>Ro({easing:d,forceSpringAllowTail:t})),posterize:n.posterize})}catch{return null}}if(s!=="interpolate")return null;try{return Ot(e,l,c,{easing:o.map(d=>Ro({easing:d,forceSpringAllowTail:t})),extrapolateLeft:a.left,extrapolateRight:a.right,output:n.output,posterize:n.posterize})}catch{return null}},Rn=({dragOverrideValue:e,frame:t})=>{if(e===void 0)return{type:"none"};if(e.type==="static")return{type:"resolved",value:e.value};if(t===null)return{type:"none"};const n=Dt({forceSpringAllowTail:null,frame:t,status:e.status});return n===null?{type:"none"}:{type:"resolved",value:n}},Ki=({propStatus:e,dragOverrideValue:t,defaultValue:n,frame:r=null,shouldResortToDefaultValueIfUndefined:o=!1})=>{const a=Rn({dragOverrideValue:t,frame:r});return a.type==="resolved"&&a.value!==void 0?a.value:e.status==="keyframed"?r!==null?Dt({forceSpringAllowTail:null,frame:r,status:e}):o?n:void 0:e.codeValue===void 0&&o?n:e.codeValue},$r=i.createContext({overrideIdToNodePathMappings:{}}),Qu=i.createContext({setOverrideIdToNodePath:()=>{throw new Error("OverrideIdsToNodePathsSettersContext not initialized")}}),Xu=({descriptor:e,propStatusOverrides:t,dragOverrides:n,frame:r})=>{if(!t&&!n)return{params:e.params,effectKey:e.effectKey};const o={...e.params};if(t)for(const[a,s]of Object.entries(t))s!==void 0&&(o[a]=s);if(n)for(const[a,s]of Object.entries(n)){const u=Rn({dragOverrideValue:s,frame:r});u.type==="resolved"&&(o[a]=u.value)}return{params:o,effectKey:e.definition.calculateKey(o)}},el=(e,t)=>{if(!e)return null;const n={};let r=!1;for(const[o,a]of Object.entries(e)){if(a.status==="static"){n[o]=a.codeValue,r=!0;continue}if(a.status==="keyframed"){const s=Dt({forceSpringAllowTail:null,frame:t,status:a});s!==null&&(n[o]=s,r=!0)}}return r?n:null},Bt=e=>{const t=i.useRef(null),n=e.map(a=>a.definition),r=t.current;return r!==null&&r.length===n.length&&r.every((a,s)=>a===n[s])?r:(t.current=n,n)},Gi=({propStatuses:e,nodePath:t,effectIndex:n})=>{const r=e[Ve(t)];if(!r)return{type:"cannot-update-sequence",reason:"not-found"};if(!r.canUpdate)return{type:"cannot-update-sequence",reason:r.reason};const o=r.effects.find(a=>a.effectIndex===n);return o?o.canUpdate?{type:"can-update-effect",props:o.props}:{type:"cannot-update-effect",reason:o.reason}:{type:"cannot-update-effect",reason:"not-found"}},Yi=(e,t)=>{const n=e[Ve(t)];if(n&&n.canUpdate)return n.props},Ut=({effects:e,overrideId:t})=>{const n=i.useRef(null),{propStatuses:r}=i.useContext(Cn),{getEffectDragOverrides:o}=i.useContext(Sn),a=Se(),{overrideIdToNodePathMappings:s}=i.useContext($r),u=n.current,l=t?s[t]??null:null,c=e.map((f,p)=>{if(l===null)return{descriptor:f,params:f.params,effectKey:f.effectKey};const v=Gi({propStatuses:r,nodePath:l,effectIndex:p}),g=v.type==="can-update-effect"?el(v.props,a):null,w=o(l,p),x=Object.keys(w).length===0?null:w,{params:E,effectKey:S}=Xu({descriptor:f,propStatusOverrides:g,dragOverrides:x,frame:a});return{descriptor:f,params:E,effectKey:S}});if(u!==null&&u.length===c.length&&u.every((f,p)=>f.definition===c[p].descriptor.definition&&f.effectKey===c[p].effectKey))return u;const m=c.map(({descriptor:f,params:p,effectKey:v})=>({definition:f.definition,effectKey:v,params:p,memoized:!0}));return n.current=m,m},Ar=(e,t)=>{const n={};for(const r of Object.keys(e)){const o=e[r];if(o.type!=="hidden")if(o.type==="enum"){n[r]=o;const a=t(r)??o.default,s=o.variants[a];s&&Object.assign(n,Ar(s,t))}else n[r]=o}return n},Lr=e=>{const t={},n=(r,o)=>{r in t||(t[r]=o)};for(const r of Object.keys(e)){const o=e[r];if(n(r,o),o.type==="enum")for(const a of Object.values(o.variants)){const s=Lr(a);for(const u of Object.keys(s))n(u,s[u])}}return t},Ji=({schema:e,key:t,value:n})=>{const r=e[t];if(!r)throw new Error("Key "+JSON.stringify(t)+" not found in schema");if(typeof n!="string")throw new Error("Value must be a string, but is "+JSON.stringify(n));if(r.type!=="enum")throw new Error("Key "+JSON.stringify(t)+" is not an enum");if(!r.variants[n])throw new Error("Value for "+JSON.stringify(t)+" must be one of "+Object.keys(r.variants).map(u=>JSON.stringify(u)).join(", ")+", got "+JSON.stringify(n));const a=Object.keys(r.variants).filter(u=>u!==n),s=new Set;for(const u of a){const l=r.variants[u],c=Object.keys(l);for(const d of c)s.add(d)}return[...s]},ko={type:"linear"},tl=({insertedKeyframeIndex:e,easingLength:t,keyframeCount:n})=>!(e>0&&e<n-1)||t===0?null:Math.min(e-1,t-1),nl=e=>({type:"static",value:e}),rl=({status:e,frame:t,value:n})=>{const r=e.keyframes.findIndex(s=>s.frame===t),o=r===-1?[...e.keyframes,{frame:t,value:n}].sort((s,u)=>s.frame-u.frame):e.keyframes.map((s,u)=>u===r?{frame:t,value:n}:s),a=[...e.easing];if(r===-1){const s=o.findIndex(c=>c.frame===t),u=tl({insertedKeyframeIndex:s,easingLength:a.length,keyframeCount:o.length}),l=u===null?ko:a[u];a.splice(s,0,l)}for(;a.length<o.length-1;)a.push(ko);return a.length>o.length-1&&(a.length=o.length-1),{type:"keyframed",status:{...e,keyframes:o,easing:a}}},ol=e=>{if(e?.type==="static")return e.value},il=e=>e!==null&&e.status==="keyframed",Zi=(e,t)=>{if(t in e)return e[t];for(const n of Object.values(e))if(n.type==="enum")for(const r of Object.values(n.variants)){const o=Zi(r,t);if(o)return o}},Qi=({schema:e,currentValue:t,overrideValues:n,propStatus:r,frame:o})=>{const a={},s=new Set;for(const u of Object.keys(t)){const l=r?.[u]??null,c=Zi(e,u);if(c?.type==="hidden")continue;let d;if(l===null)d=t[u];else if(il(l))if(c?.type==="array"||c?.keyframable===!1)d=t[u];else{const m=Rn({dragOverrideValue:n[u],frame:o});m.type==="resolved"?d=m.value:o!==null?d=Dt({forceSpringAllowTail:null,frame:o,status:l})??t[u]:d=t[u]}else l.status==="computed"?d=t[u]:d=Ki({propStatus:l,dragOverrideValue:n[u],defaultValue:c?.default,frame:o,shouldResortToDefaultValueIfUndefined:!1});c?.type==="asset"&&typeof d=="string"&&d.startsWith(Nt)&&(d=`${window.remotion_staticBase}/${d.slice(Nt.length)}`),d===void 0&&s.add(u),a[u]=d}for(const u of Object.keys(n))if(e[u]?.type==="enum"){const l=Ji({schema:e,key:u,value:a[u]});for(const c of l)s.add(c)}return{merged:a,propsToDelete:s}},Xi=(e,t)=>{const n=t.split(".");let r=e;for(const o of n){if(r==null||typeof r!="object")return;r=r[o]}return r},ea=({flatSchema:e,key:t,props:n})=>{const r=Xi(n,t);if(!(e[t]?.type==="text-content"&&typeof r!="string"))return r},al=(e,t,n)=>{const r={};for(const o of t)r[o]=n?ea({flatSchema:n,key:o,props:e}):Xi(e,o);return r},sl=(e,t)=>Object.keys(Ar(e,n=>t[n])),ul=({flatSchema:e,props:t,valuesDotNotation:n,schemaKeys:r,propsToDelete:o})=>{const a={...t};for(const u of r){const l=n[u];if(e[u]?.type==="text-content"&&l===void 0)continue;const c=u.split(".");if(c.length===1){a[u]=l;continue}let d=a;for(let m=0;m<c.length-1;m++){const f=c[m];typeof d[f]=="object"&&d[f]!==null?d[f]={...d[f]}:d[f]={},d=d[f]}d[c[c.length-1]]=l}const s=new Set([...o].filter(u=>!(e[u]?.type==="text-content"&&n[u]===void 0)));return cu(a,s),a},Io={},Oe=({Component:e,componentName:t,componentIdentity:n,schema:r,supportsEffects:o})=>{const a=ru(r),s=Lr(a),u=Object.keys(s),l=i.forwardRef((c,d)=>{const m=ne();if(!m.isStudio||m.isReadOnlyStudio||m.isRendering)return j.createElement(e,{...c,controls:null,ref:d});const{propStatuses:f}=i.useContext(Cn),{getDragOverrides:p}=i.useContext(Sn),v=i.useContext($r),g=Se();if(c.controls)return j.createElement(e,{...c,ref:d});const[w]=i.useState(()=>{const{stack:k}=c;if(!k)return String(Math.random());const F=Io[k];if(F)return F;const I=String(Math.random());return Io[k]=I,I}),x=v.overrideIdToNodePathMappings[w]??null,E=u.map(k=>ea({flatSchema:s,key:k,props:c})),S=i.useMemo(()=>al(c,u,s),E),b=i.useMemo(()=>({schema:a,currentRuntimeValueDotNotation:S,overrideId:w,supportsEffects:o,componentIdentity:n,componentName:t}),[S,w]),{merged:y,propsToDelete:C}=i.useMemo(()=>Qi({schema:a,currentValue:S,overrideValues:x===null?{}:p(x),propStatus:x===null?void 0:Yi(f,x),frame:g}),[S,p,x,f,g]),T=sl(a,y),R=ul({flatSchema:s,props:c,valuesDotNotation:y,schemaKeys:T,propsToDelete:C});return j.createElement(e,{...R,controls:b,ref:d})});return l.displayName=`withInteractivitySchema(${e.displayName||e.name||"Component"})`,l},Wn=[],ll=({from:e=0,trimBefore:t=0,freeze:n,durationInFrames:r=1/0,children:o,name:a,height:s,width:u,showInTimeline:l=!0,hidden:c=!1,controls:d,_remotionInternalEffects:m,_remotionInternalLoopDisplay:f,_remotionInternalStack:p,_remotionInternalDocumentationLink:v,_remotionInternalSingleChildComponent:g,_remotionInternalPremountDisplay:w,_remotionInternalPostmountDisplay:x,_remotionInternalIsMedia:E,outlineRef:S,...b},y)=>{const{layout:C="absolute-fill"}=b,[T]=i.useState(()=>String(Math.random())),R=i.useContext(re),{rootId:k}=qe(),F=R?R.cumulatedFrom+R.relativeFrom:0,I=mn();if(C!=="absolute-fill"&&C!=="none")throw new TypeError(`The layout prop of <Sequence /> expects either "absolute-fill" or "none", but you passed: ${C}`);if(C==="none"&&typeof b.style<"u")throw new TypeError('If layout="none", you may not pass a style. Passed: '+JSON.stringify(b.style));if(typeof r!="number")throw new TypeError(`You passed to durationInFrames an argument of type ${typeof r}, but it must be a number.`);if(r<=0)throw new TypeError(`durationInFrames must be positive, but got ${r}`);if(typeof e!="number")throw new TypeError(`You passed to the "from" props of your <Sequence> an argument of type ${typeof e}, but it must be a number.`);if(!Number.isFinite(e))throw new TypeError(`The "from" prop of a sequence must be finite, but got ${e}.`);if(typeof t!="number")throw new TypeError(`You passed to the "trimBefore" prop of your <Sequence> an argument of type ${typeof t}, but it must be a number.`);if(t<0)throw new TypeError(`The "trimBefore" prop of <Sequence /> must be greater than or equal to 0, but got ${t}.`);if(Number.isNaN(t))throw new TypeError('The "trimBefore" prop of <Sequence /> must be a real number, but it is NaN.');if(!Number.isFinite(t))throw new TypeError(`The "trimBefore" prop of <Sequence /> must be finite, but it is ${t}.`);if(typeof n<"u"&&n!==null){if(typeof n!="number")throw new TypeError(`The "freeze" prop of <Sequence /> must be a number, but is of type ${typeof n}.`);if(Number.isNaN(n))throw new TypeError('The "freeze" prop of <Sequence /> must be a real number, but it is NaN.');if(!Number.isFinite(n))throw new TypeError(`The "freeze" prop of <Sequence /> must be finite, but it is ${n}.`)}const N=He(),A=Ne(),M=e-t,D=(R?.absoluteFrom??0)+M,q=R?Math.min(R.durationInFrames-M,r):r,$=Math.max(0,Math.min(A.durationInFrames-e,q)),{registerSequence:P,unregisterSequence:_}=i.useContext(pt),V=i.useRef(null),W=b.layout==="none"?S??null:S??V,K=i.useMemo(()=>R?.premounting||!!b._remotionInternalIsPremounting,[b._remotionInternalIsPremounting,R?.premounting]),L=i.useMemo(()=>R?.postmounting||!!b._remotionInternalIsPostmounting,[b._remotionInternalIsPostmounting,R?.postmounting]),H=F+M,U=R?R.cumulatedFrom+R.relativeFrom:0,G=R?U-R.cumulatedNegativeFrom:0,z=Math.max(0,G,H),Y=H-z,ee=i.useMemo(()=>({absoluteFrom:D,cumulatedFrom:F,relativeFrom:M,cumulatedNegativeFrom:Y,durationInFrames:$,parentFrom:R?.relativeFrom??0,id:T,height:s??R?.height??null,width:u??R?.width??null,premounting:K,postmounting:L,premountDisplay:w??null,postmountDisplay:x??null}),[F,D,M,$,R,T,s,u,K,L,w,x,Y]),te=i.useMemo(()=>a??"",[a]),se=v??"https://www.remotion.dev/docs/sequence",ue=ne(),Te=i.useContext(Tn),ie=b?.stack??null,Z=i.useRef(null);Z.current=p??ie;const B=typeof n=="number"?n:null,de=t===0?null:t,De=R?.cumulatedNegativeFrom??0,be=E&&E.type!=="image"?E.data.startMediaFrom+De-Y:null,pe=E&&E.type!=="image"?E.data.startMediaFrom+De:null,Re=E&&E.type!=="image"&&pe!==null?B===null?null:pe+(f?B%f.durationInFrames:B)*E.data.playbackRate:null;i.useEffect(()=>{if(ue.isStudio)return E?(E.type==="image"?P({type:"image",controls:d??null,effects:m??Wn,displayName:te,documentationLink:se,duration:$,from:e,trimBefore:de,id:T,loopDisplay:f,nonce:I.get(),parent:R?.id??null,postmountDisplay:x??null,premountDisplay:w??null,rootId:k,showInTimeline:l,src:E.src,getStack:()=>Z.current,refForOutline:W??null,isInsideSeries:Te,frozenFrame:B,singleChildComponent:g??null}):P({type:E.type,controls:d??null,effects:m??Wn,displayName:te,documentationLink:se,doesVolumeChange:E.data.doesVolumeChange,duration:$,from:e,trimBefore:de,id:T,loopDisplay:f,nonce:I.get(),parent:R?.id??null,playbackRate:E.data.playbackRate,postmountDisplay:x??null,premountDisplay:w??null,rootId:k,showInTimeline:l,src:E.data.src,getStack:()=>Z.current,startMediaFrom:be??E.data.startMediaFrom,mediaFrameAtSequenceZero:pe,volume:E.data.volumes,refForOutline:W??null,isInsideSeries:Te,frozenFrame:B,frozenMediaFrame:Re,singleChildComponent:g??null}),()=>{_(T)}):(P({from:e,trimBefore:de,duration:$,id:T,displayName:te,documentationLink:se,parent:R?.id??null,type:"sequence",rootId:k,showInTimeline:l,nonce:I.get(),loopDisplay:f,getStack:()=>Z.current,premountDisplay:w??null,postmountDisplay:x??null,controls:d??null,effects:m??Wn,refForOutline:W??null,isInsideSeries:Te,frozenFrame:B,singleChildComponent:g??null}),()=>{_(T)})},[r,T,a,P,te,_,R?.id,$,k,e,t,de,l,I,f,w,x,ue.isStudio,d,m,E,se,W,Te,B,be,pe,Re,g]);const ke=Math.ceil(F+e+r-1),he=N<F+e||N>ke?null:o,Ae=he===null||typeof n>"u"||n===null?he:h.jsx(ki,{frame:n,children:he}),ve=b.layout==="none"?void 0:b.style,fe=i.useCallback(Le=>{V.current=Le,typeof y=="function"?y(Le):y&&(y.current=Le)},[y]),Ie=i.useMemo(()=>({flexDirection:void 0,...u?{width:u}:{},...s?{height:s}:{},...ve??{}}),[s,ve,u]);if(y!==null&&C==="none")throw new TypeError('It is not supported to pass both a `ref` and `layout="none"` to <Sequence />.');return c?null:h.jsx(re.Provider,{value:ee,children:Ae===null?null:b.layout==="none"?Ae:h.jsx(ai,{ref:fe,style:Ie,className:b.className,children:Ae})})},cl=i.forwardRef(ll),dl=(e,t)=>{const n=i.useContext(Ni),r=Se()-n.premountFramesRemaining;if(e.layout==="none")throw new Error('`<Sequence>` with `premountFor` and `postmountFor` props does not support layout="none"');const{style:o,from:a=0,durationInFrames:s=1/0,premountFor:u=0,postmountFor:l=0,styleWhilePremounted:c,styleWhilePostmounted:d,...m}=e,f=Math.ceil(a+s-1),p=r<a&&r>=a-u,v=r>f&&r<=f+l,g=p?a:v?a+s-1:0,w=p||v,x=i.useMemo(()=>({...o,opacity:p||v?0:o?.opacity,pointerEvents:p||v?"none":o?.pointerEvents??void 0,...p?c:{},...v?d:{}}),[o,p,v,c,d]);return h.jsx(ki,{frame:g,active:w,children:h.jsx(kn,{ref:t,from:a,durationInFrames:s,style:x,_remotionInternalPremountDisplay:u,_remotionInternalPostmountDisplay:l,_remotionInternalIsPremounting:p,_remotionInternalIsPostmounting:v,...m})})},fl=i.forwardRef(dl),ml=(e,t)=>{const n=ne(),{fps:r}=Ne();if(e.layout!=="none"&&!n.isRendering){const o=e.premountFor;if(o||e.postmountFor)return h.jsx(fl,{ref:t,...e,premountFor:o})}return h.jsx(cl,{...e,ref:t})},kn=i.forwardRef(ml),ta=kn,me=Oe({Component:kn,componentName:"<Sequence>",componentIdentity:"dev.remotion.remotion.Sequence",schema:lt,supportsEffects:!1});Oe({Component:kn,componentName:"<Sequence>",componentIdentity:null,schema:iu,supportsEffects:!1});var na=(e,t,n)=>{switch(e){case"fill":return[0,0,t.width,t.height,0,0,n.width,n.height];case"contain":{const r=Math.min(n.width/t.width,n.height/t.height),o=(n.width-t.width*r)/2,a=(n.height-t.height*r)/2;return[0,0,t.width,t.height,o,a,t.width*r,t.height*r]}case"cover":{const r=Math.max(n.width/t.width,n.height/t.height),o=(n.width-t.width*r)/2,a=(n.height-t.height*r)/2;return[0,0,t.width,t.height,o,a,t.width*r,t.height*r]}default:throw new Error("Unknown fit: "+e)}},pl="https://remotion.dev/docs/troubleshooting/webgl2-context",ra=(e,t)=>`Failed to acquire ${e} context for ${t}. Pass --gl=angle when using the CLI, set chromiumOptions: { gl: "angle" } when using SSR APIs, or set "OpenGL render backend" to "angle" in the Advanced section when rendering in the Studio. See ${pl}`,hl=e=>new Error(ra("WebGL",e)),oa=e=>new Error(ra("WebGL2",e));class gl{width;height;pairs=new Map;lostContexts=new Set;constructor(t,n){this.width=t,this.height=n}getPair(t){const n=this.pairs.get(t);if(n)return n;const r=[this.allocateCanvas(t),this.allocateCanvas(t)];return this.pairs.set(t,r),r}assertContextNotLost(t){if(this.lostContexts.has(t))throw new Error("WebGL context was lost during canvas effect rendering. This typically happens in headless or memory-constrained environments (e.g. Remotion Lambda). Try reducing concurrency or increasing the Lambda function memory.")}allocateCanvas(t){const n=document.createElement("canvas");switch(n.width=this.width,n.height=this.height,t){case"2d":{if(!n.getContext("2d",{colorSpace:"srgb"}))throw new Error("Failed to acquire 2D context for canvas effect");return n}case"webgl2":{const r=n.getContext("webgl2",{premultipliedAlpha:!0,alpha:!0,preserveDrawingBuffer:!0});if(!r)throw oa("canvas effect");return n.addEventListener("webglcontextlost",o=>{o.preventDefault(),this.lostContexts.add(n)}),n.addEventListener("webglcontextrestored",()=>{this.lostContexts.delete(n)}),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),n}case"webgpu":{if(typeof navigator>"u"||!("gpu"in navigator))throw new Error("WebGPU is not available in this environment for canvas effect");return n}default:{const r=t;throw new Error(`Unknown effect backend: ${r}`)}}}}var vl=e=>{const t=[];let n=[],r=null;for(const o of e){const{backend:a}=o.definition;r===null||a===r?(n.push(o),r=a):(t.push({backend:r,effects:n}),n=[o],r=a)}return r!==null&&n.length>0&&t.push({backend:r,effects:n}),t},en=null,yl=()=>en||(en=(async()=>{if(typeof navigator>"u"||!("gpu"in navigator))throw new Error("WebGPU is not available in this environment");const{gpu:e}=navigator,t=await e.requestAdapter();if(!t)throw new Error("No WebGPU adapter available");return t.requestDevice()})(),en),ia=(e,t)=>({pool:new gl(e,t),setupCache:new WeakMap,cleanupRegistry:[],currentRunId:0}),lr=e=>{e.currentRunId++;for(const t of e.cleanupRegistry)t.definition.cleanup(t.state)},wl=(e,t,n)=>{const r=t;let o=e.setupCache.get(r);if(o||(o=new WeakMap,e.setupCache.set(r,o)),o.has(n))return o.get(n);const a=t.setup(n);return o.set(n,a),e.cleanupRegistry.push({definition:r,state:a}),a},qt=async({state:e,source:t,effects:n,output:r,width:o,height:a})=>{const s=++e.currentRunId,u=()=>e.currentRunId!==s,l=n.filter(w=>!w.params.disabled),c=vl(l);let d=t,m=null;if(c.length===0){if(t===r)return!0;const w=r.getContext("2d");if(!w)throw new Error("Failed to acquire 2D context for output canvas");return w.clearRect(0,0,o,a),w.drawImage(d,0,0,o,a),!0}let f=!1;for(const w of c)if(w.backend==="webgpu"){f=!0;break}const p=f?await yl():null;if(u())return!1;let v=!0;for(let w=0;w<c.length;w++){const x=c[w],[E,S]=e.pool.getPair(x.backend);let b=E;for(const C of x.effects){const T=C.definition,R=wl(e,T,b);T.apply({source:d,target:b,state:R,params:C.params,width:o,height:a,gpuDevice:p,flipSourceY:x.backend==="webgl2"?v:!1}),x.backend==="webgl2"&&(v=!0,e.pool.assertContextNotLost(b)),d=b,b=b===E?S:E}m=d??m;const y=c[w+1];if(y&&y.backend!==x.backend&&m)if(x.backend==="2d"&&y.backend==="webgl2")d=m,v=!0;else{const C=await createImageBitmap(m);if(u())return C.close(),!1;d=C,y.backend==="webgl2"&&(v=!1)}}if(!m)return!0;const g=r.getContext("2d");if(!g)throw new Error("Failed to acquire 2D context for output canvas");return g.clearRect(0,0,o,a),g.drawImage(m,0,0,o,a),!0},Ht=()=>{const e=i.useRef(null),t=i.useRef(null);return i.useEffect(()=>()=>{e.current&&lr(e.current)},[]),i.useMemo(()=>({get:(n,r)=>((!t.current||t.current.width!==n||t.current.height!==r)&&(e.current&&lr(e.current),e.current=ia(n,r),t.current={width:n,height:r}),e.current)}),[])},bl=({width:e,height:t,fit:n,className:r,style:o,effects:a,...s},u)=>{const l=i.useRef(null),c=Ht(),d=i.useMemo(()=>typeof document>"u"?null:document.createElement("canvas"),[]),m=i.useCallback(f=>{const p=l.current,v=e??f.displayWidth,g=t??f.displayHeight;if(!p)throw new Error("Canvas ref is not set");if(!d)throw new Error("Source canvas is not available");d.width=v,d.height=g;const w=d.getContext("2d");if(!w)throw new Error("Could not get 2d context for source canvas");return w.drawImage(f,...na(n,{height:f.displayHeight,width:f.displayWidth},{width:v,height:g})),p.width=v,p.height=g,qt({state:c.get(v,g),source:d,effects:a,output:p,width:v,height:g})},[c,a,n,t,d,e]);return i.useImperativeHandle(u,()=>({draw:m,getCanvas:()=>{if(!l.current)throw new Error("Canvas ref is not set");return l.current},clear:()=>{const f=l.current?.getContext("2d");if(!f)throw new Error("Could not get 2d context");f.clearRect(0,0,l.current.width,l.current.height)}}),[m]),h.jsx("canvas",{ref:l,className:r,style:o,...s})},xl=j.forwardRef(bl),Cl=5,Fo=({loopBehavior:e,durationFound:t,timeInSec:n})=>e==="loop"?t?n%t:n:Math.min(n,t||1/0),El=async({resolvedSrc:e,signal:t,requestInit:n,currentTime:r,initialLoopBehavior:o})=>{if(typeof ImageDecoder>"u")throw new Error("Your browser does not support the WebCodecs ImageDecoder API.");const a=await fetch(e,{...n,signal:t}),{body:s}=a;if(!s)throw new Error("Got no body");const u=new ImageDecoder({data:s,type:a.headers.get("Content-Type")||"image/gif"});await u.completed;const{selectedTrack:l}=u.tracks;if(!l)throw new Error("No selected track");const c=[];let d=null;const m=async g=>{const w=c.find(E=>E.frameIndex===g);if(w&&w.frame)return w;const x=await u.decode({frameIndex:g,completeFramesOnly:!0});return w?w.frame=x.image:c.push({frame:x.image,frameIndex:g,timeInSeconds:x.image.timestamp/1e6}),{frame:x.image,frameIndex:g,timeInSeconds:x.image.timestamp/1e6}},f=g=>{const x=c.filter(E=>E.frame).sort((E,S)=>{const b=Math.abs(E.timeInSeconds-g),y=Math.abs(S.timeInSeconds-g);return b-y});for(let E=0;E<x.length;E++){if(E<Cl)continue;const S=x[E];S.frame=null}},p=async({timeInSec:g,loopBehavior:w})=>{const x=Fo({durationFound:d,loopBehavior:w,timeInSec:g}),S=c.filter(y=>y.timeInSeconds<=x).map(y=>y.frameIndex).reduce((y,C)=>Math.max(y,C),0);let b=S;for(;;){const y=await m(b);if(b++,!y.frame)throw new Error("No frame found");if(!y.frame.duration||(b===l.frameCount&&d===null&&(d=(y.frame.timestamp+y.frame.duration)/1e6),y.timeInSeconds>x||b===l.frameCount))break}l.frameCount-S<3&&w==="loop"&&await m(0),f(x)};return await p({timeInSec:r,loopBehavior:o}),await p({timeInSec:r,loopBehavior:o}),{getFrame:async(g,w)=>{if(d!==null&&g>d&&w==="clear-after-finish")return null;const x=Fo({loopBehavior:w,durationFound:d,timeInSec:g});await p({timeInSec:x,loopBehavior:w});const S=c.filter(b=>b.frame).reduce((b,y)=>{const C=Math.abs(b.timeInSeconds-x),T=Math.abs(y.timeInSeconds-x);return C<T?b:y});if(!S.frame)throw new Error("No frame found");return S},frameCount:l.frameCount}},Sl=({frame:e,playbackRate:t,fps:n})=>e*t/n,Tl=e=>{if(!e)return null;const t={...e};delete t.signal;const{headers:n,...r}=t;return JSON.stringify({...r,headers:n?Array.from(new Headers(n).entries()):null})},Rl=e=>typeof window>"u"?e:new URL(e,window.origin).href,kl={src:{type:"asset",default:void 0,description:"Source",keyframable:!1},..._e,playbackRate:{type:"number",min:0,max:10,step:.1,default:1,description:"Playback rate",hiddenFromList:!1,keyframable:!1},...$e},Il=e=>{const t={},n=t;for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(r.startsWith("data-")||r.startsWith("aria-"))&&(n[r]=e[r]);return t},aa=i.forwardRef(({src:e,width:t,height:n,onError:r,loopBehavior:o="loop",playbackRate:a=1,fit:s="fill",requestInit:u,effects:l,controls:c,...d},m)=>{const f=Rl(e),[p,v]=i.useState(null),{delayRender:g,continueRender:w}=Ee(),[x]=i.useState(()=>g(`Rendering <AnimatedImage/> with src="${f}"`)),E=Se(),{fps:S}=Ne(),b=Sl({frame:E,playbackRate:a,fps:S}),y=i.useRef(b);y.current=b;const C=Tl(u),T=i.useRef(u);T.current=u;const R=i.useRef(null),k=Ut({effects:l,overrideId:c?.overrideId??null});i.useImperativeHandle(m,()=>{const I=R.current?.getCanvas();if(!I)throw new Error("Canvas ref is not set");return I},[]);const[F]=i.useState(()=>o);return i.useEffect(()=>{const I=new AbortController;return El({resolvedSrc:f,signal:I.signal,requestInit:T.current,currentTime:y.current,initialLoopBehavior:F}).then(N=>{v(N),w(x)}).catch(N=>{if(N.name==="AbortError"){w(x);return}r?(r?.(N),w(x)):$t(N)}),()=>{I.abort()}},[f,x,r,C,F,w]),i.useLayoutEffect(()=>{if(!p)return;const I=g(`Rendering frame at ${b} of <AnimatedImage src="${e}"/>`);let N=!1;return p.getFrame(b,o).then(async A=>{if(N)return;if(A===null){R.current?.clear(),w(I);return}await R.current?.draw(A.frame)&&!N&&w(I)}).catch(A=>{N||(r?(r(A),w(I)):$t(A))}),()=>{N=!0,w(I)}},[b,p,o,r,e,w,g,k,s,t,n]),h.jsx(xl,{ref:R,width:t,height:n,fit:s,effects:k,...d})});aa.displayName="AnimatedImageContent";var Fl=({src:e,width:t,height:n,onError:r,fit:o,playbackRate:a,loopBehavior:s,id:u,className:l,style:c,durationInFrames:d,requestInit:m,effects:f=[],controls:p,ref:v,...g})=>{const w=i.useRef(null),x=Bt(f);i.useImperativeHandle(v,()=>w.current,[]);const E=Il(g),S={src:e,width:t,height:n,onError:r,fit:o,playbackRate:a,loopBehavior:s,id:u,className:l,style:c,requestInit:m,...E};return h.jsx(me,{layout:"none",durationInFrames:d,name:"<AnimatedImage>",_remotionInternalDocumentationLink:"https://www.remotion.dev/docs/animatedimage",controls:p,_remotionInternalEffects:x,...g,outlineRef:w,children:h.jsx(aa,{...S,ref:w,effects:f,controls:p})})},sa=Oe({Component:Fl,componentName:"<AnimatedImage>",componentIdentity:"dev.remotion.remotion.AnimatedImage",schema:kl,supportsEffects:!0});sa.displayName="AnimatedImage";ce(sa);var Pl={type:"boolean",default:!1,description:"Disabled"},Ml=e=>{const{calculateKey:t,validateParams:n}=e,r={...e,documentationLink:e.documentationLink??null,calculateKey:a=>{const s=a.disabled??!1;return`${t(a)}-disabled-${s}`},schema:{disabled:Pl,...e.schema}};return(a={})=>(n(a),{definition:r,params:a,effectKey:r.calculateKey(a),memoized:!1})},Nl=e=>{if(typeof e!="string")throw new TypeError(`The "filename" must be a string, but you passed a value of type ${typeof e}`);if(e.trim()==="")throw new Error("The `filename` must not be empty");if(!e.match(/^([0-9a-zA-Z-!_.*'()/:&$@=;+,?]+)/g))throw new Error('The `filename` must match "/^([0-9a-zA-Z-!_.*\'()/:&$@=;+,?]+)/g". Use forward slashes only, even on Windows.')},$l=e=>{if(typeof e!="string"&&!(e instanceof Uint8Array))throw new TypeError(`The "content" must be a string or Uint8Array, but you passed a value of type ${typeof e}`);if(typeof e=="string"&&e.trim()==="")throw new Error("The `content` must not be empty")},ua=e=>{e.type==="artifact"&&(Nl(e.filename),e.contentType!=="thumbnail"&&$l(e.content))},Ze=i.createContext({registerRenderAsset:()=>{},unregisterRenderAsset:()=>{},renderAssets:[]}),Al=({children:e,collectAssets:t})=>{const[n,r]=i.useState([]),o=i.useRef([]),a=i.useCallback(l=>{ua(l),o.current=[...o.current,l],r(o.current)},[]);t&&i.useImperativeHandle(t,()=>({collectAssets:()=>{const l=o.current;return o.current=[],r([]),l}}),[]);const s=i.useCallback(l=>{o.current=o.current.filter(c=>c.id!==l),r(o.current)},[]);i.useLayoutEffect(()=>{typeof window<"u"&&(window.remotion_collectAssets=()=>{const l=o.current;return o.current=[],r([]),l})},[]);const u=i.useMemo(()=>({registerRenderAsset:a,unregisterRenderAsset:s,renderAssets:n}),[n,a,s]);return h.jsx(Ze.Provider,{value:u,children:e})},Pe=e=>typeof window>"u"||e.startsWith("http://")||e.startsWith("https://")||e.startsWith("file://")||e.startsWith("blob:")||e.startsWith("data:")?e:new URL(e,window.origin).href,In=({trimAfter:e,mediaDurationInFrames:t,playbackRate:n,trimBefore:r})=>{let o=t;typeof e<"u"&&(o=e),typeof r<"u"&&(o-=r);const a=o/n;return Number(a.toFixed(10))},la=i.createContext(null),Ll=()=>j.useContext(la),Fn=({durationInFrames:e,times:t=1/0,children:n,name:r,showInTimeline:o,...a})=>{const s=Se(),{durationInFrames:u}=Ne();if(pn(e,{component:"of the <Loop /> component",allowFloats:!0}),typeof t!="number")throw new TypeError(`You passed to "times" an argument of type ${typeof t}, but it must be a number.`);if(t!==1/0&&t%1!==0)throw new TypeError(`The "times" prop of a loop must be an integer, but got ${t}.`);if(t<0)throw new TypeError(`The "times" prop of a loop must be at least 0, but got ${t}`);const l=Math.ceil(u/e),c=Math.min(l,t),d=a.layout==="none"?void 0:a.style,m=e*(c-1),p=Math.floor(s/e)*e,v=Math.min(p,m),g=i.useMemo(()=>({numberOfTimes:Math.min(u/e,t),startOffset:-v,durationInFrames:e}),[u,e,v,t]),w=i.useMemo(()=>({iteration:Math.floor(s/e),durationInFrames:e}),[s,e]);return h.jsx(la.Provider,{value:w,children:h.jsx(me,{durationInFrames:e,from:v,name:r??"<Loop>",_remotionInternalDocumentationLink:"https://www.remotion.dev/docs/loop",_remotionInternalLoopDisplay:g,layout:a.layout,style:d,showInTimeline:o,children:n})})};Fn.useLoop=Ll;var le=({logLevel:e,tag:t,message:n,mountTime:r})=>{const o=[r?Date.now()-r+"ms ":null,t].filter(Boolean).join(" ");oe.trace({logLevel:e,tag:null},`[${o}]`,n)},Pn=i.createContext({}),Po={},Kn=[],ca=({children:e})=>{const[t,n]=i.useState(()=>Po);return i.useEffect(()=>{const r=()=>{n(Po)};return Kn.push(r),()=>{Kn=Kn.filter(o=>o!==r)}},[]),h.jsx(Pn.Provider,{value:t,children:e})},da=e=>{const t=e.indexOf("#");return t===-1?null:t},Vl=e=>{const t=da(e);return t===null?e:e.slice(0,t)},Qe=e=>{const t=i.useContext(Pn),n=da(e),r=Vl(e);return t[r]?n!==null?t[r]+e.slice(n):t[r]:e},Mn=(e,t)=>{if(typeof e.volume!="number"&&typeof e.volume!="function"&&typeof e.volume<"u")throw new TypeError(`You have passed a volume of type ${typeof e.volume} to your <${t} /> component. Volume must be a number or a function with the signature '(frame: number) => number' undefined.`);if(typeof e.volume=="number"&&e.volume<0)throw new TypeError(`You have passed a volume below 0 to your <${t} /> component. Volume must be between 0 and 1`);if(typeof e.playbackRate!="number"&&typeof e.playbackRate<"u")throw new TypeError(`You have passed a playbackRate of type ${typeof e.playbackRate} to your <${t} /> component. Playback rate must a real number or undefined.`);if(typeof e.playbackRate=="number"&&(isNaN(e.playbackRate)||!Number.isFinite(e.playbackRate)||e.playbackRate<=0))throw new TypeError(`You have passed a playbackRate of ${e.playbackRate} to your <${t} /> component. Playback rate must be a real number above 0.`);if(typeof e.preservePitch!="boolean"&&typeof e.preservePitch<"u")throw new TypeError(`'preservePitch' must be a boolean or undefined but got '${typeof e.preservePitch}' instead`)},jl=(e,t)=>{if(typeof e<"u"){if(typeof e!="number")throw new TypeError(`type of startFrom prop must be a number, instead got type ${typeof e}.`);if(isNaN(e)||e===1/0)throw new TypeError("startFrom prop can not be NaN or Infinity.");if(e<0)throw new TypeError(`startFrom must be greater than equal to 0 instead got ${e}.`)}if(typeof t<"u"){if(typeof t!="number")throw new TypeError(`type of endAt prop must be a number, instead got type ${typeof t}.`);if(isNaN(t))throw new TypeError("endAt prop can not be NaN.");if(t<=0)throw new TypeError(`endAt must be a positive number, instead got ${t}.`)}if(t<e)throw new TypeError("endAt prop must be greater than startFrom prop.")},_l=(e,t)=>{if(typeof e<"u"){if(typeof e!="number")throw new TypeError(`type of trimBefore prop must be a number, instead got type ${typeof e}.`);if(isNaN(e)||e===1/0)throw new TypeError("trimBefore prop can not be NaN or Infinity.");if(e<0)throw new TypeError(`trimBefore must be greater than equal to 0 instead got ${e}.`)}if(typeof t<"u"){if(typeof t!="number")throw new TypeError(`type of trimAfter prop must be a number, instead got type ${typeof t}.`);if(isNaN(t))throw new TypeError("trimAfter prop can not be NaN.");if(t<=0)throw new TypeError(`trimAfter must be a positive number, instead got ${t}.`)}if(t<=e)throw new TypeError("trimAfter prop must be greater than trimBefore prop.")},Nn=({startFrom:e,endAt:t,trimBefore:n,trimAfter:r})=>{if(typeof e<"u"&&typeof n<"u")throw new TypeError("Cannot use both startFrom and trimBefore props. Use trimBefore instead as startFrom is deprecated.");if(typeof t<"u"&&typeof r<"u")throw new TypeError("Cannot use both endAt and trimAfter props. Use trimAfter instead as endAt is deprecated.");typeof n<"u"||typeof r<"u"?_l(n,r):(typeof e<"u"||typeof t<"u")&&jl(e,t)},$n=({startFrom:e,endAt:t,trimBefore:n,trimAfter:r})=>({trimBeforeValue:n??e??void 0,trimAfterValue:r??t??void 0}),Ol=(e,t)=>{if(t.type==="got-duration"){const n=Pe(t.src);return e[n]===t.durationInSeconds?e:{...e,[n]:t.durationInSeconds}}else return e},Vr=i.createContext({durations:{},setDurations:()=>{throw new Error("context missing")}}),fa=({children:e})=>{const[t,n]=i.useReducer(Ol,{}),r=i.useMemo(()=>({durations:t,setDurations:n}),[t]);return h.jsx(Vr.Provider,{value:r,children:e})},jr=({crossOrigin:e,requestsVideoFrame:t,isClientSideRendering:n})=>{if(e!=null)return e;if(n||t)return"anonymous"},dn=({mediaRef:e,mediaType:t,onAutoPlayError:n,logLevel:r,mountTime:o,reason:a,isPlayer:s})=>{const{current:u}=e;if(!u)return;le({logLevel:r,tag:"play",message:`Attempting to play ${u.src}. Reason: ${a}`,mountTime:o});const l=u.play();l.catch&&l.catch(c=>{if(u&&!c.message.includes("request was interrupted by a call to pause")&&!c.message.includes("The operation was aborted.")&&!c.message.includes("The fetching process for the media resource was aborted by the user agent")&&!c.message.includes("request was interrupted by a new load request")&&!c.message.includes("because the media was removed from the document")&&!(c.message.includes("user didn't interact with the document")&&u.muted)&&(console.log(`Could not play ${t} due to following error: `,c),!u.muted)){if(n){n();return}t==="video"&&s&&(oe.info({logLevel:r,tag:"<"+t+">"},"The video will be muted and we'll retry playing it."),oe.info({logLevel:r,tag:"<"+t+">"},"Use onAutoPlayError() to handle this error yourself."),u.muted=!0,u.play())}})},_r=({audioContext:e,ref:t})=>{let n=null,r=!1;return{attemptToConnect:()=>{if(r)throw new Error("SharedElementSourceNode has been disposed");!n&&t.current&&(n=e.createMediaElementSource(t.current))},get:()=>{if(!n)throw new Error("Audio element not connected");return n},cleanup:()=>{n&&(n.disconnect(),n=null),r=!0}}},Mo=!1,Dl=e=>{Mo||(Mo=!0,typeof window<"u"&&oe.warn({logLevel:e,tag:null},"AudioContext is not supported in this browser"))},Bl=({logLevel:e,latencyHint:t,audioEnabled:n,sampleRate:r})=>{const o=ne(),a=i.useRef(r);if(r!==a.current)throw new Error(`Changing the AudioContext sample rate dynamically is not supported. The sample rate was initialized with ${a.current} Hz, but ${r} Hz was passed later.`);return i.useMemo(()=>{if(o.isRendering||!n)return null;if(typeof AudioContext>"u")return Dl(e),null;const u=new AudioContext({latencyHint:t,sampleRate:r}),l=u.createGain();l.connect(u.destination),oe.trace({logLevel:e,tag:"audio"},"Creating new audio context"),u.suspend();let c=null;return{audioContext:u,gainNode:l,getState:()=>{const p=u.state;return c==="running"&&p!=="running"?"suspended-to-running":c==="suspended"&&p!=="suspended"?"running-to-suspended":p},resume:()=>{c="running";const p=u.resume();return p.finally(()=>{c==="running"&&(c=null)}),p},suspend:()=>{c="suspended";const p=u.suspend();return p.finally(()=>{c==="suspended"&&(c=null)}),p}}},[e,t,o.isRendering,n,r])},Ul=(e,t)=>new Promise(n=>{const r=e.currentTime,a=e.getOutputTimestamp().performanceTime,s=performance.now(),u=()=>{const{currentTime:l}=e,c=e.getOutputTimestamp(),d=performance.now()-s;if(a!==void 0&&c.performanceTime!==void 0&&c.performanceTime>a&&c.contextTime!==void 0&&c.contextTime>r){oe.verbose({logLevel:t,tag:"audio"},`waitUntilActuallyResumed: getOutputTimestamp.performanceTime advanced from ${a.toFixed(6)} to ${c.performanceTime.toFixed(6)} after ${d.toFixed(1)}ms. currentTime=${l.toFixed(6)} (advanced by ${(l-r).toFixed(6)}), getOutputTimestamp.performanceTime=${c.performanceTime?.toFixed(1)??"undefined"}`),n();return}requestAnimationFrame(u)};requestAnimationFrame(u)}),Gn="data:audio/mp3;base64,/+MYxAAJcAV8AAgAABn//////+/gQ5BAMA+D4Pg+BAQBAEAwD4Pg+D4EBAEAQDAPg++hYBH///hUFQVBUFREDQNHmf///////+MYxBUGkAGIMAAAAP/29Xt6lUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MYxDUAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",ql=(e,t)=>{const n=Object.keys(e).sort(),r=Object.keys(t).sort();if(n.length!==r.length)return!1;for(let o=0;o<n.length;o++)if(n[o]!==r[o]||e[n[o]]!==t[r[o]])return!1;return!0},Hl=(e,t,n)=>e==="src"&&!n.startsWith("data:")&&!t.startsWith("data:")?new URL(n,window.origin).toString()!==new URL(t,window.origin).toString():n!==t,ht=i.createContext(null),An=i.createContext(null),zl=e=>{if(e==="suspended"||e==="running-to-suspended"||e==="interrupted")return!0;if(e==="running"||e==="suspended-to-running")return!1;throw new Error(`Unexpected audio context state: ${e}`)},ma=({children:e,audioLatencyHint:t,audioEnabled:n,previewSampleRate:r})=>{const o=Me(),a=r??48e3;i.useEffect(()=>{typeof window>"u"||(window.remotion_sampleRate=a)},[a]);const s=Bl({logLevel:o,latencyHint:t,audioEnabled:n,sampleRate:a}),u=i.useRef(!1),l=i.useRef(null),c=i.useMemo(()=>({value:0}),[]),d=i.useRef([]),m=i.useMemo(()=>({dispatch:b=>{d.current.forEach(y=>y(b))},subscribe:b=>(d.current.push(b),{remove:()=>{d.current=d.current.filter(y=>y!==b)}})}),[]),f=i.useRef({scheduledEndTime:null,mediaEndTime:null}),p=i.useRef(new Map),v=i.useCallback(b=>{p.current.delete(b)},[]),g=i.useMemo(()=>({node:b,mediaTimestamp:y,sourceOffset:C,scheduledTime:T,duration:R,offset:k,originalUnloopedMediaTimestamp:F})=>{if(!s)throw new Error("Audio context not found");const I=s.getState();if(I==="closed")return{type:"not-started",reason:"audio context is closed"};const N=zl(I);R>0&&(N?p.current.set(b,{scheduledTime:T,offset:k,duration:R}):b.start(T,k,R));const A=T+R/b.playbackRate.value,M=y+k-C,D=M+R,q=s.audioContext.baseLatency+s.audioContext.outputLatency,$=T-s.audioContext.currentTime,P=f.current,_=P.scheduledEndTime!==null&&Math.abs(T-P.scheduledEndTime)>.001,V=P.mediaEndTime!==null&&Math.abs(M-P.mediaEndTime)>.001;return oe.verbose({logLevel:o,tag:"audio-scheduling"},"scheduled %c%s%c %s %c%s%c %s %c%s%c %s %s %s %s %s",_?"color: red; font-weight: bold":"",T.toFixed(4),"",A.toFixed(4),V?"color: red; font-weight: bold":"",M.toFixed(4),"",D.toFixed(4),R<0||$<0?"color: red; font-weight: bold":"color: blue; font-weight: bold",R<0?"missed "+Math.abs(k).toFixed(2)+"s":Math.abs($).toFixed(2)+($<0?" delay":" ahead"),"","current="+s.audioContext.currentTime.toFixed(4),"offset="+k.toFixed(4),"latency="+q.toFixed(4),"state="+s.audioContext.state,F!==M?"original_ts="+F.toFixed(4):"","action="+(N?"schedule":"start"),""),P.scheduledEndTime=A,P.mediaEndTime=D,R>0?{type:"started",scheduledTime:T}:{type:"not-started",reason:"missed "+Math.abs(k).toFixed(2)+"s"}},[s,o]),w=i.useCallback(()=>{if(!s||u.current)return Promise.resolve();u.current=!0,s.gainNode.gain.cancelScheduledValues(s.audioContext.currentTime),s.gainNode.gain.setValueAtTime(0,s.audioContext.currentTime),s.gainNode.gain.linearRampToValueAtTime(1,s.audioContext.currentTime+.03),p.current.forEach((y,C)=>{C.start(y.scheduledTime,y.offset,y.duration)}),p.current.clear();const b=s.resume();return l.current=new Promise(y=>{Ul(s.audioContext,o).then(y),b.catch(C=>{oe.warn({logLevel:o,tag:"audio"},"AudioContext resume rejected, continuing without audio sync",C),y()})}).finally(()=>{l.current=null}),b.catch(()=>{})},[s,o]),x=i.useCallback(()=>l.current,[]),E=i.useCallback(()=>!s||!u.current?Promise.resolve():(u.current=!1,s.suspend()),[s]),S=i.useMemo(()=>({audioContext:s?.audioContext??null,getAudioContextState:()=>s?.getState()??null,gainNode:s?.gainNode??null,audioSyncAnchor:c,audioSyncAnchorEmitter:m,scheduleAudioNode:g,resume:w,suspend:E,getIsResumingAudioContext:x,unscheduleAudioNode:v}),[s,c,m,g,w,E,x,v]);return h.jsx(ht.Provider,{value:S,children:e})},pa=({children:e,numberOfAudioTags:t})=>{const n=i.useRef([]),[r]=i.useState(t);if(t!==r)throw new Error("The number of shared audio tags has changed dynamically. Once you have set this property, you cannot change it afterwards.");const o=Me(),a=_t(),s=ne(),u=i.useContext(ht),l=u?.audioContext??null,c=u?.resume,d=i.useMemo(()=>new Array(t).fill(!0).map(()=>{const b=i.createRef();return{id:Math.random(),ref:b,mediaElementSourceNode:l?_r({audioContext:l,ref:b}):null}}),[l,t]);(j.useInsertionEffect??j.useLayoutEffect)(()=>()=>{requestAnimationFrame(()=>{d.forEach(({mediaElementSourceNode:b})=>{b?.cleanup()})})},[d]);const f=i.useRef(new Array(t).fill(!1)),p=i.useCallback(()=>{d.forEach(({ref:b,id:y})=>{const C=n.current?.find(R=>R.id===y),{current:T}=b;if(T){if(C===void 0){T.src!==Gn&&(T.src=Gn);return}if(!C)throw new TypeError("Expected audio data to be there");Object.keys(C.props).forEach(R=>{Hl(R,C.props[R],T[R])&&(T[R]=C.props[R])})}})},[d]),v=i.useCallback(b=>{const{aud:y,audioId:C,premounting:T,postmounting:R}=b,k=n.current?.find(q=>q.audioId===C);if(k)return k;const F=f.current.findIndex(q=>q===!1);if(F===-1)throw new Error(`Tried to simultaneously mount ${t+1} <Html5Audio /> tags at the same time. With the current settings, the maximum amount of <Html5Audio /> tags is limited to ${t} at the same time. Remotion pre-mounts silent audio tags to help avoid browser autoplay restrictions. See https://remotion.dev/docs/player/autoplay#using-the-numberofsharedaudiotags-prop for more information on how to increase this limit.`);const{id:I,ref:N,mediaElementSourceNode:A}=d[F],M=[...f.current];M[F]=I,f.current=M;const D={props:y,id:I,el:N,audioId:C,mediaElementSourceNode:A,premounting:T,audioMounted:!!N.current,postmounting:R,cleanupOnMediaTagUnmount:()=>{}};return n.current?.push(D),p(),D},[t,d,p]),g=i.useCallback(b=>{const y=[...f.current],C=d.findIndex(T=>T.id===b);if(C===-1)throw new TypeError("Error occured in ");y[C]=!1,f.current=y,n.current=n.current?.filter(T=>T.id!==b),p()},[d,p]),w=i.useCallback(({aud:b,audioId:y,id:C,premounting:T,postmounting:R})=>{let k=!1;n.current=n.current?.map(F=>{const I=!!F.el.current;return F.audioMounted!==I&&(k=!0),F.id===C?ql(b,F.props)&&F.premounting===T&&F.postmounting===R?F.audioMounted===I?F:{...F,audioMounted:I}:(k=!0,{...F,props:b,premounting:T,postmounting:R,audioId:y,audioMounted:I}):F.audioMounted===I?F:{...F,audioMounted:I}}),k&&p()},[p]),x=i.useCallback(()=>{d.forEach(b=>{n.current.find(C=>C.el===b.ref)?.premounting||dn({mediaRef:b.ref,mediaType:"audio",onAutoPlayError:null,logLevel:o,mountTime:a,reason:"playing all audios",isPlayer:s.isPlayer})}),c?.()},[o,a,d,s.isPlayer,c]),E=i.useMemo(()=>({registerAudio:v,unregisterAudio:g,updateAudio:w,playAllAudios:x,numberOfAudioTags:t}),[t,x,v,g,w]),S=i.useMemo(()=>d.map(({id:b,ref:y})=>h.jsx("audio",{ref:y,preload:"metadata",src:Gn},b)),[d]);return h.jsxs(An.Provider,{value:E,children:[S,e]})},Wl=({aud:e,audioId:t,premounting:n,postmounting:r})=>{const o=i.useContext(ht),a=i.useContext(An),[s]=i.useState(()=>{if(a&&a.numberOfAudioTags>0)return a.registerAudio({aud:e,audioId:t,premounting:n,postmounting:r});const l=j.createRef(),c=o?.audioContext?_r({audioContext:o.audioContext,ref:l}):null;return{el:l,id:Math.random(),props:e,audioId:t,mediaElementSourceNode:c,premounting:n,audioMounted:!!l.current,postmounting:r,cleanupOnMediaTagUnmount:()=>{c?.cleanup()}}}),u=j.useInsertionEffect??j.useLayoutEffect;return typeof document<"u"&&(u(()=>{a&&a.numberOfAudioTags>0&&a.updateAudio({id:s.id,aud:e,audioId:t,premounting:n,postmounting:r})},[e,a,s.id,t,n,r]),u(()=>()=>{a&&a.numberOfAudioTags>0&&a.unregisterAudio(s.id)},[a,s.id])),s},Kl=1e-5,fn=(e,t)=>Math.abs(e-t)<Kl,ha=(e,t)=>Math.round(e/t*100)/100,cr=()=>typeof window>"u"||!/AppleWebKit/.test(window.navigator.userAgent)?!1:!window.navigator.userAgent.includes("Chrome/"),Ln=()=>typeof window>"u"?!1:/iP(ad|od|hone)/i.test(window.navigator.userAgent)&&cr(),Gl=e=>Ln()&&e.startsWith("blob:"),dr=({actualFrom:e,fps:t})=>ha(Math.max(0,-e),t),fr=({duration:e,fps:t})=>ha(e,t),Yl=({actualSrc:e,actualFrom:t,duration:n,fps:r})=>{if(Gl(e)||e.startsWith("data:")||!!new URL(e,(typeof window>"u"?null:window.location.href)??"http://localhost:3000").hash||!Number.isFinite(t))return e;const a=`${e}#t=${dr({actualFrom:t,fps:r})}`;return Number.isFinite(n)?`${a},${fr({duration:n,fps:r})}`:a},Jl=({prevStartFrom:e,newStartFrom:t,prevDuration:n,newDuration:r,fps:o})=>{const a=dr({actualFrom:e,fps:o}),s=dr({actualFrom:t,fps:o}),u=fr({duration:n,fps:o}),l=fr({duration:r,fps:o});return!(s<a||l>u)},Zl=({actualSrc:e,actualFrom:t,duration:n,fps:r})=>{const o=i.useRef(t),a=i.useRef(n),s=i.useRef(e);return(!Jl({prevStartFrom:o.current,newStartFrom:t,prevDuration:a.current,newDuration:n,fps:r})||e!==s.current)&&(o.current=t,a.current=n,s.current=e),Yl({actualSrc:s.current,actualFrom:o.current,duration:a.current,fps:r})},No=!1,Ql=e=>{No||(No=!0,oe.warn({logLevel:e,tag:null},"In Safari, setting a volume and a playback rate at the same time is buggy."),oe.warn({logLevel:e,tag:null},"In Desktop Safari, only volumes <= 1 will be applied."),oe.warn({logLevel:e,tag:null},e,"In Mobile Safari, the volume will be ignored and set to 1 if a playbackRate is set."))},ga=({mediaRef:e,volume:t,logLevel:n,source:r,shouldUseWebAudioApi:o})=>{const a=i.useRef(null),s=i.useRef(t);s.current=t;const u=i.useContext(ht);if(!u)throw new Error("useAmplification must be used within a SharedAudioContext");const{audioContext:l,gainNode:c}=u;if(typeof window<"u"&&i.useLayoutEffect(()=>{if(!l||!e.current||!o)return;if(e.current.playbackRate!==1&&cr()){Ql(n);return}if(!r||!c)return;const f=new GainNode(l,{gain:s.current});return r.attemptToConnect(),r.get().connect(f),f.connect(c),a.current={gainNode:f},oe.trace({logLevel:n,tag:null},`Starting to amplify ${e.current?.src}. Gain = ${s.current}, playbackRate = ${e.current?.playbackRate}`),()=>{a.current=null,f.disconnect(),r.get().disconnect()}},[n,e,l,r,o,c]),a.current){const f=t;fn(a.current.gainNode.gain.value,f)||(a.current.gainNode.gain.value=f,oe.trace({logLevel:n,tag:null},`Setting gain to ${f} for ${e.current?.src}`))}return(cr()&&e.current&&e.current?.playbackRate!==1||!o)&&e.current&&!fn(t,e.current?.volume)&&(e.current.volume=Math.min(t,1)),a},Ke=()=>i.useContext(re)?.cumulatedNegativeFrom??0,gt=e=>{const t=Fn.useLoop(),n=Se(),r=Ke();return e==="repeat"||t===null?n+r:n+r+t.durationInFrames*t.iteration},va=e=>{if(/data:|blob:/.test(e.substring(0,5)))return"Data URL";const t=e.split("/").map(n=>n.split("\\")).flat(1);return t[t.length-1]},Xl=({compositionDurationInFrames:e,playbackRate:t,trimBefore:n,trimAfter:r,parentSequenceDurationInFrames:o,loop:a})=>{if(a)return e;const s=In({mediaDurationInFrames:e*t+(n??0),playbackRate:t,trimBefore:n,trimAfter:r});if(o!==null){const u=Math.min(o,s);return Number(u.toFixed(10))}return s},Xe=({frame:e,volume:t,mediaVolume:n=1})=>{if(typeof t=="number")return t*n;if(typeof t>"u")return Number(n);const r=t(e)*n;if(typeof r!="number")throw new TypeError(`You passed in a a function to the volume prop but it did not return a number but a value of type ${typeof r} for frame ${e}`);if(Number.isNaN(r))throw new TypeError(`You passed in a function to the volume prop but it returned NaN for frame ${e}.`);if(!Number.isFinite(r))throw new TypeError(`You passed in a function to the volume prop but it returned a non-finite number for frame ${e}.`);return Math.max(0,r)},$o={},ec=e=>{$o[e]||(console.warn(e),$o[e]=!0)},ya=({volume:e,mediaVolume:t,mediaType:n,src:r,displayName:o,trimBefore:a,trimAfter:s,playbackRate:u,sequenceDurationInFrames:l,mediaStartsAt:c,loop:d})=>{if(!r)throw new Error("No src passed");const m=i.useContext(re),[f]=i.useState(()=>e),p=Xl({compositionDurationInFrames:l,playbackRate:u,trimBefore:a,trimAfter:s,parentSequenceDurationInFrames:m?.durationInFrames??null,loop:d}),v=i.useMemo(()=>typeof e=="number"?e:new Array(Math.floor(Math.max(0,p+c))).fill(!0).map((b,y)=>Xe({frame:y+c,volume:e,mediaVolume:t})).join(","),[p,c,e,t]);i.useEffect(()=>{typeof e=="number"&&e!==f&&ec(`Remotion: The ${n} with src ${r} has changed it's volume. Prefer the callback syntax for setting volume to get better timeline display: https://www.remotion.dev/docs/audio/volume`)},[f,n,r,e]);const g=typeof e=="function",w=mn(),{rootId:x}=qe(),E=0-c+(a??0);return i.useMemo(()=>({volumes:v,duration:p,doesVolumeChange:g,nonce:w,rootId:x,finalDisplayName:o??va(r),startMediaFrom:E,src:r,playbackRate:u}),[v,p,g,w,x,o,r,E,u])},Or=({volume:e,mediaVolume:t,src:n,mediaType:r,playbackRate:o,displayName:a,id:s,getStack:u,showInTimeline:l,premountDisplay:c,postmountDisplay:d,loopDisplay:m,documentationLink:f,refForOutline:p})=>{const v=i.useContext(re),g=Ke(),{registerSequence:w,unregisterSequence:x}=i.useContext(pt),{durationInFrames:E}=Ne(),S=Ke(),{volumes:b,duration:y,doesVolumeChange:C,nonce:T,rootId:R,finalDisplayName:k}=ya({volume:e,mediaVolume:t,mediaType:r,src:n,displayName:a,trimAfter:void 0,trimBefore:void 0,playbackRate:o,sequenceDurationInFrames:E,mediaStartsAt:S,loop:!1}),{isStudio:F}=ne();i.useEffect(()=>{if(!n)throw new Error("No src passed");if(!(!F&&window.process?.env?.NODE_ENV!=="test")&&l)return w({type:r,src:n,id:s,duration:y,from:0,trimBefore:null,parent:v?.id??null,displayName:k,documentationLink:f,rootId:R,volume:b,showInTimeline:!0,nonce:T.get(),startMediaFrom:0-g,mediaFrameAtSequenceZero:null,doesVolumeChange:C,loopDisplay:m,playbackRate:o,getStack:u,premountDisplay:c,postmountDisplay:d,controls:null,effects:[],refForOutline:p,isInsideSeries:!1,frozenFrame:null,frozenMediaFrame:null}),()=>{x(s)}},[y,s,v,n,w,x,b,C,T,r,g,o,u,l,c,d,m,f,R,k,F,p])},tc=(e,t)=>{const[n,r]=i.useState([]),[o,a]=i.useState([]),[s,u]=i.useState([]),c=ne().isRendering,d=i.useRef(!1),m=i.useCallback(v=>{if(c)return{unblock:()=>{}};let g=!1;return r(w=>[...w,v]),{unblock:()=>{g||(g=!0,r(w=>{const x=w.filter(E=>E!==v);return x.length===w.length?w:x}))}}},[c]),f=i.useCallback(v=>(a(g=>[...g,v]),{remove:()=>{a(g=>g.filter(w=>w!==v))}}),[]),p=i.useCallback(v=>(u(g=>[...g,v]),{remove:()=>{u(g=>g.filter(w=>w!==v))}}),[]);return i.useEffect(()=>{c||n.length>0&&!d.current&&(d.current=!0,o.forEach(v=>v()),le({logLevel:e,message:"Player is entering buffer state",mountTime:t,tag:"player"}))},[n]),typeof window<"u"&&i.useLayoutEffect(()=>{c||n.length===0&&d.current&&(d.current=!1,s.forEach(v=>v()),le({logLevel:e,message:"Player is exiting buffer state",mountTime:t,tag:"player"}))},[n]),i.useMemo(()=>({addBlock:m,listenForBuffering:f,listenForResume:p,buffering:d}),[m,d,f,p])},vt=j.createContext(null),wa=({children:e})=>{const{logLevel:t,mountTime:n}=i.useContext(Ye),r=tc(t??"info",n);return h.jsx(vt.Provider,{value:r,children:e})},ba=e=>{const[t,n]=i.useState(e.buffering.current);return i.useEffect(()=>{const r=()=>{n(!0)},o=()=>{n(!1)},a=e.listenForBuffering(r),s=e.listenForResume(o);return()=>{a.remove(),s.remove()}},[e]),t},Vn=()=>{const e=i.useContext(vt),t=Me(),n=e?e.addBlock:null;return i.useMemo(()=>({delayPlayback:()=>{if(!n)throw new Error("Tried to enable the buffering state, but a Remotion context was not found. This API can only be called in a component that was passed to the Remotion Player or a <Composition>. Or you might have experienced a version mismatch - run `npx remotion versions` and ensure all packages have the same version. This error is thrown by the buffer state https://remotion.dev/docs/player/buffer-state");oe.trace({logLevel:t,tag:"[buffer-state]"},"Adding buffer handle",new Error().stack);const{unblock:r}=n({id:String(Math.random())});let o=!1;return{unblock:()=>{o||(o=!0,oe.trace({logLevel:t,tag:"[buffer-state]"},"Removing buffer handle"),r())}}}}),[n,t])},nc=()=>/^((?!chrome|android).)*safari/i.test(window.navigator.userAgent),rc=({mediaRef:e,mediaType:t,onVariableFpsVideoDetected:n,pauseWhenBuffering:r,logLevel:o,mountTime:a})=>{const s=i.useRef(!1),{delayPlayback:u}=Vn(),l=i.useCallback(c=>{if(t!=="video"||!r)return;const d=e.current;if(!d)return;if(d.readyState>=d.HAVE_FUTURE_DATA&&!nc()){le({logLevel:o,message:`Not using buffer until first frame, because readyState is ${d.readyState} and is not Safari or Desktop Chrome`,mountTime:a,tag:"buffer"});return}if(!d.requestVideoFrameCallback){le({logLevel:o,message:"Not using buffer until first frame, because requestVideoFrameCallback is not supported",mountTime:a,tag:"buffer"});return}s.current=!0,le({logLevel:o,message:`Buffering ${e.current?.src} until the first frame is received`,mountTime:a,tag:"buffer"});const m=u(),f=()=>{m.unblock(),d.removeEventListener("ended",f,{once:!0}),d.removeEventListener("pause",f,{once:!0}),s.current=!1},p=()=>{f()};d.requestVideoFrameCallback((v,g)=>{Math.abs(g.mediaTime-c)>.5&&n(),f()}),d.addEventListener("ended",p,{once:!0}),d.addEventListener("pause",p,{once:!0}),d.addEventListener("canplay",p,{once:!0})},[u,o,e,t,a,n,r]);return i.useMemo(()=>({isBuffering:()=>s.current,bufferUntilFirstFrame:l}),[l])},oc=e=>{const{duration:t,currentTime:n,paused:r,ended:o,desiredUnclampedTime:a,mediaTagTime:s,mediaTagLastUpdate:u,rvcTime:l,rvcLastUpdate:c,isVariableFpsVideo:d,acceptableTimeShift:m,lastSeekDueToShift:f,playing:p,playbackRate:v,mediaTagBufferingOrStalled:g,playerBuffering:w,absoluteFrame:x,onlyWarnForMediaSeekingError:E,isPremounting:S,isPostmounting:b,pauseWhenBuffering:y}=e,C=!Number.isNaN(t)&&Number.isFinite(t)?Math.min(t,a):a,T=Math.abs(C-s),R=l?Math.abs(C-l):null,k=c&&l>u?R:T,F=R&&!d?k:T;if(F>m&&f!==C)return{type:"seek-due-to-shift",shouldBeTime:C,why:`because time shift is too big. shouldBeTime = ${C}, isTime = ${s}, requestVideoCallbackTime = ${l}, timeShift = ${F}${d?", isVariableFpsVideo = true":""}, isPremounting = ${S}, isPostmounting = ${b}, pauseWhenBuffering = ${y}`,bufferUntilFirstFrame:p&&v>0,playReason:p&&r?"player is playing but media tag is paused, and just seeked":null,warnAboutNonSeekable:!E};const I=p?.15:.01,N=Math.abs(n-C)>I;if(!p||w&&!g)return{type:"seek-if-not-playing",shouldBeTime:C,why:N?`not playing or something else is buffering. time offset is over seek threshold (${I})`:null};if(!p||w)return{type:"none"};const M=r&&!o;if(M||x===0){const q=M?"media tag is paused":"absolute frame is 0";return{type:"play-and-seek",shouldBeTime:C,why:N?`is over timeshift threshold (threshold = ${I}) and ${q}`:null,playReason:`player is playing and ${q}`,bufferUntilFirstFrame:!d&&v>0}}return{type:"none"}},ic=e=>{const t=j.useRef({time:e.current?.currentTime??0,lastUpdate:performance.now()}),n=e.current?.currentTime??null;return n!==null&&t.current.time!==n&&(t.current.time=n,t.current.lastUpdate=performance.now()),t},an=({mediaRef:e,time:t,logLevel:n,why:r,mountTime:o})=>{const a=Ln()?Number(t.toFixed(1)):t;return le({logLevel:n,tag:"seek",message:`Seeking from ${e.currentTime} to ${a}. src= ${e.src} Reason: ${r}`,mountTime:o}),e.currentTime=a,a},ac=({element:e,shouldBuffer:t,isPremounting:n,isPostmounting:r,logLevel:o,mountTime:a,src:s})=>{const u=Vn(),[l,c]=i.useState(!1);return i.useEffect(()=>{let d=[];const{current:m}=e;if(!m||!t)return;if(n||r){if((n||r)&&m.readyState<m.HAVE_FUTURE_DATA&&!navigator.userAgent.includes("Firefox/")){le({logLevel:o,message:`Calling .load() on ${m.src} because readyState is ${m.readyState} and it is not Firefox. Element is premounted ${m.playbackRate}`,tag:"load",mountTime:a});const g=m.playbackRate;m.load(),m.playbackRate=g}return}const f=g=>{let w=!1;d.forEach(x=>{x(g),w=!0}),d=[],c(x=>(x&&(w=!0),!1)),w&&le({logLevel:o,message:`Unmarking as buffering: ${m.src}. Reason: ${g}`,tag:"buffer",mountTime:a})},p=g=>{c(!0),le({logLevel:o,message:`Marking as buffering: ${m.src}. Reason: ${g}`,tag:"buffer",mountTime:a});const{unblock:w}=u.delayPlayback(),x=()=>{f('"canplay" was fired'),v()},E=()=>{f('"error" event was occurred'),v()};m.addEventListener("canplay",x,{once:!0}),d.push(()=>{m.removeEventListener("canplay",x)}),m.addEventListener("error",E,{once:!0}),d.push(()=>{m.removeEventListener("error",E)}),d.push(S=>{le({logLevel:o,message:`Unblocking ${m.src} from buffer. Reason: ${S}`,tag:"buffer",mountTime:a}),w()})},v=()=>{if(m.readyState<m.HAVE_FUTURE_DATA){if(p(`readyState is ${m.readyState}, which is less than HAVE_FUTURE_DATA`),!navigator.userAgent.includes("Firefox/")){le({logLevel:o,message:`Calling .load() on ${s} because readyState is ${m.readyState} and it is not Firefox. ${m.playbackRate}`,tag:"load",mountTime:a});const g=m.playbackRate;m.load(),m.playbackRate=g}}else{const g=()=>{p('"waiting" event was fired')};m.addEventListener("waiting",g),d.push(()=>{m.removeEventListener("waiting",g)})}};return v(),()=>{f("element was unmounted or prop changed")}},[u,s,e,n,r,o,t,a]),l},sc=({mediaRef:e,mediaType:t,lastSeek:n,onVariableFpsVideoDetected:r})=>{const o=i.useRef(null);return i.useEffect(()=>{const{current:a}=e;if(a)o.current={time:a.currentTime,lastUpdate:performance.now()};else{o.current=null;return}if(t!=="video"){o.current=null;return}const s=a;if(!s.requestVideoFrameCallback)return;let u=()=>{};const l=()=>{if(!s)return;const c=s.requestVideoFrameCallback((d,m)=>{if(o.current!==null){const f=Math.abs(o.current.time-m.mediaTime),p=Math.abs(n.current===null?1/0:m.mediaTime-n.current);f>.5&&p>.5&&m.mediaTime>o.current.time&&r()}o.current={time:m.mediaTime,lastUpdate:performance.now()},l()});u=()=>{s.cancelVideoFrameCallback(c),u=()=>{}}};return l(),()=>{u()}},[n,e,t,r]),o},xa=({frame:e,playbackRate:t,startFrom:n})=>Ot(e,[-1,n,n+1],[-1,n,n+t]),Ca=({fps:e,frame:t,playbackRate:n,startFrom:r})=>{const o=xa({frame:t,playbackRate:n,startFrom:r}),a=1e3/e;return o*a/1e3},Ao={},uc=(e,t)=>{if(e===null||e.seekable.length===0||e.seekable.length>1||Ao[e.src])return;const n={start:e.seekable.start(0),end:e.seekable.end(0)};if(n.start===0&&n.end===0){const r=[`The media ${e.src} cannot be seeked. This could be one of few reasons:`,"1) The media resource was replaced while the video is playing but it was not loaded yet.","2) The media does not support seeking.","3) The media was loaded with security headers prventing it from being included.","Please see https://remotion.dev/docs/non-seekable-media for assistance."].join(`
18
+ `);console.error(r),Ao[e.src]=!0}},Ea=({mediaRef:e,src:t,mediaType:n,playbackRate:r,preservePitch:o=!0,onlyWarnForMediaSeekingError:a,acceptableTimeshift:s,pauseWhenBuffering:u,isPremounting:l,isPostmounting:c,onAutoPlayError:d})=>{const{playbackRate:m}=Rr(),f=Se(),p=He(),[v]=Ri(),g=i.useContext(vt),{fps:w}=Ne(),x=Ke(),E=i.useRef(null),S=i.useRef(null),b=Me(),y=_t();if(!g)throw new Error("useMediaPlayback must be used inside a <BufferingContext>");const C=i.useRef({}),T=i.useCallback(()=>{t&&(C.current[t]||(oe.verbose({logLevel:b,tag:null},`Detected ${t} as a variable FPS video. Disabling buffering while seeking.`),C.current[t]=!0))},[b,t]),R=sc({mediaRef:e,mediaType:n,lastSeek:S,onVariableFpsVideoDetected:T}),k=ic(e),F=Ca({frame:f,playbackRate:r,startFrom:-x,fps:w}),I=ac({element:e,shouldBuffer:u,isPremounting:l,isPostmounting:c,logLevel:b,mountTime:y,src:t??null}),{bufferUntilFirstFrame:N,isBuffering:A}=rc({mediaRef:e,mediaType:n,onVariableFpsVideoDetected:T,pauseWhenBuffering:u,logLevel:b,mountTime:y}),M=r*m,D=e.current?.duration?Math.min(e.current.duration,s??.65):s??.65,q=ba(g);i.useEffect(()=>{if(e.current?.paused)return;if(!v){le({logLevel:b,tag:"pause",message:`Pausing ${e.current?.src} because ${l?"media is premounting":c?"media is postmounting":"Player is not playing"}`,mountTime:y}),e.current?.pause();return}const P=I||A();g.buffering.current&&!P&&(le({logLevel:b,tag:"pause",message:`Pausing ${e.current?.src} because player is buffering but media tag is not`,mountTime:y}),e.current?.pause())},[A,I,g,q,l,b,e,n,y,v,c]);const $=ne();i.useLayoutEffect(()=>{const P=Math.max(0,M);e.current&&e.current.playbackRate!==P&&(e.current.playbackRate=P),e.current&&e.current.preservesPitch!==o&&(e.current.preservesPitch=o)},[e,M,o]),i.useEffect(()=>{const P=n==="audio"?"<Html5Audio>":"<Html5Video>";if(!e.current)throw new Error(`No ${n} ref found`);if(!t)throw new Error(`No 'src' attribute was passed to the ${P} element.`);const{current:_}=e,V=oc({duration:_.duration,currentTime:_.currentTime,paused:_.paused,ended:_.ended,desiredUnclampedTime:F,mediaTagTime:k.current.time,mediaTagLastUpdate:k.current.lastUpdate,rvcTime:R.current?.time??null,rvcLastUpdate:R.current?.lastUpdate??null,isVariableFpsVideo:!!C.current[t],acceptableTimeShift:D,lastSeekDueToShift:E.current,playing:v,playbackRate:M,mediaTagBufferingOrStalled:I||A(),playerBuffering:g.buffering.current,absoluteFrame:p,onlyWarnForMediaSeekingError:a,isPremounting:l,isPostmounting:c,pauseWhenBuffering:u});if(V.type!=="none"){if(V.type==="seek-due-to-shift"){S.current=an({mediaRef:_,time:V.shouldBeTime,logLevel:b,why:V.why,mountTime:y}),E.current=S.current,V.bufferUntilFirstFrame&&N(V.shouldBeTime),V.playReason!==null&&dn({mediaRef:e,mediaType:n,onAutoPlayError:d,logLevel:b,mountTime:y,reason:V.playReason,isPlayer:$.isPlayer}),V.warnAboutNonSeekable&&uc(_);return}if(V.type==="seek-if-not-playing"){V.why!==null&&(S.current=an({mediaRef:_,time:V.shouldBeTime,logLevel:b,why:V.why,mountTime:y}));return}V.why!==null&&(S.current=an({mediaRef:_,time:V.shouldBeTime,logLevel:b,why:V.why,mountTime:y})),dn({mediaRef:e,mediaType:n,onAutoPlayError:d,logLevel:b,mountTime:y,reason:V.playReason,isPlayer:$.isPlayer}),V.bufferUntilFirstFrame&&N(V.shouldBeTime)}},[p,D,N,g.buffering,R,b,F,A,I,e,n,a,M,v,t,d,l,c,u,y,k,$.isPlayer])},Sa=({mediaRef:e,id:t,mediaType:n,onAutoPlayError:r,isPremounting:o,isPostmounting:a})=>{const{audioAndVideoTags:s,imperativePlaying:u}=qe(),l=Me(),c=_t(),d=ne();i.useEffect(()=>{const m={id:t,play:f=>{if(u.current&&!(o||a))return dn({mediaRef:e,mediaType:n,onAutoPlayError:r,logLevel:l,mountTime:c,reason:f,isPlayer:d.isPlayer})}};return s.current.push(m),()=>{s.current=s.current.filter(f=>f.id!==t)}},[s,t,e,n,r,u,o,a,l,c,d.isPlayer])},Dr=i.createContext({playerMuted:!1,mediaVolume:1}),Br=i.createContext({setPlayerMuted:()=>{throw new Error("default")},setMediaVolume:()=>{throw new Error("default")}}),Ur=()=>{const{mediaVolume:e}=i.useContext(Dr),{setMediaVolume:t}=i.useContext(Br);return i.useMemo(()=>[e,t],[e,t])},qr=()=>{const{playerMuted:e}=i.useContext(Dr),{setPlayerMuted:t}=i.useContext(Br);return i.useMemo(()=>[e,t],[e,t])},yt=e=>{if(e>=100)throw new Error(`Volume was set to ${e}, but regular volume is 1, not 100. Did you forget to divide by 100? Set a volume of less than 100 to dismiss this error.`)},lc=(e,t)=>{const[n]=i.useState(e.shouldPreMountAudioTags);if(e.shouldPreMountAudioTags!==n)throw new Error("Cannot change the behavior for pre-mounting audio tags dynamically.");const r=Me(),{volume:o,muted:a,playbackRate:s,preservePitch:u,shouldPreMountAudioTags:l,src:c,onDuration:d,acceptableTimeShiftInSeconds:m,_remotionInternalNeedsDurationCalculation:f,_remotionInternalNativeLoopPassed:p,_remotionInternalStack:v,allowAmplificationDuringRender:g,name:w,pauseWhenBuffering:x,showInTimeline:E,loopVolumeCurveBehavior:S,stack:b,crossOrigin:y,delayRenderRetries:C,delayRenderTimeoutInMilliseconds:T,toneFrequency:R,useWebAudioApi:k,onError:F,onNativeError:I,audioStreamIndex:N,...A}=e,[M]=Ur(),[D]=qr(),q=gt(S??"repeat");if(!c)throw new TypeError("No 'src' was passed to <Html5Audio>.");const $=Qe(c),P=i.useContext(re),[_]=i.useState(()=>String(Math.random())),V=Xe({frame:q,volume:o,mediaVolume:M});yt(V);const W=jr({crossOrigin:y,requestsVideoFrame:!1,isClientSideRendering:!1}),K=i.useMemo(()=>({muted:a||D||V<=0,src:$,loop:p,crossOrigin:W,...A}),[p,D,a,A,$,V,W]),L=i.useMemo(()=>`audio-${Je(c??"")}-${P?.relativeFrom}-${P?.cumulatedFrom}-${P?.durationInFrames}-muted:${e.muted}-loop:${e.loop}`,[c,P?.relativeFrom,P?.cumulatedFrom,P?.durationInFrames,e.muted,e.loop]),{el:H,mediaElementSourceNode:U,cleanupOnMediaTagUnmount:G}=Wl({aud:K,audioId:L,premounting:!!P?.premounting,postmounting:!!P?.postmounting}),z=i.useCallback(()=>v??null,[v]);Or({volume:o,mediaVolume:M,src:c,mediaType:"audio",playbackRate:s??1,displayName:w??null,id:_,getStack:z,showInTimeline:E,premountDisplay:P?.premountDisplay??null,postmountDisplay:P?.postmountDisplay??null,loopDisplay:void 0,documentationLink:"https://www.remotion.dev/docs/html5-audio",refForOutline:null}),Ea({mediaRef:H,src:c,mediaType:"audio",playbackRate:s??1,preservePitch:u,onlyWarnForMediaSeekingError:!1,acceptableTimeshift:m??null,isPremounting:!!P?.premounting,isPostmounting:!!P?.postmounting,pauseWhenBuffering:x,onAutoPlayError:null}),Sa({id:_,isPostmounting:!!P?.postmounting,isPremounting:!!P?.premounting,mediaRef:H,mediaType:"audio",onAutoPlayError:null}),ga({logLevel:r,mediaRef:H,source:U,volume:V,shouldUseWebAudioApi:k??!1}),(j.useInsertionEffect??j.useLayoutEffect)(()=>()=>{requestAnimationFrame(()=>{G()})},[G]),i.useImperativeHandle(t,()=>H.current,[H]);const ee=i.useRef(d);return ee.current=d,i.useEffect(()=>{const{current:te}=H;if(!te)return;if(te.duration){ee.current?.(te.src,te.duration);return}const se=()=>{ee.current?.(te.src,te.duration)};return te.addEventListener("loadedmetadata",se),()=>{te.removeEventListener("loadedmetadata",se)}},[H,c]),n?null:h.jsx("audio",{ref:H,preload:"metadata",crossOrigin:W,...K})},Ta=i.forwardRef(lc),cc=(e,t)=>{const n=i.useRef(null),{volume:r,playbackRate:o,allowAmplificationDuringRender:a,onDuration:s,toneFrequency:u,_remotionInternalNeedsDurationCalculation:l,_remotionInternalNativeLoopPassed:c,acceptableTimeShiftInSeconds:d,name:m,onNativeError:f,delayRenderRetries:p,delayRenderTimeoutInMilliseconds:v,loopVolumeCurveBehavior:g,pauseWhenBuffering:w,audioStreamIndex:x,preservePitch:E,...S}=e,b=He(),y=gt(g??"repeat"),C=Se(),T=i.useContext(re),{registerRenderAsset:R,unregisterRenderAsset:k}=i.useContext(Ze),{delayRender:F,continueRender:I}=Ee(),N=i.useMemo(()=>`audio-${Je(e.src??"")}-${T?.relativeFrom}-${T?.cumulatedFrom}-${T?.durationInFrames}`,[e.src,T?.relativeFrom,T?.cumulatedFrom,T?.durationInFrames]),A=Xe({volume:r,frame:y,mediaVolume:1});yt(A),i.useImperativeHandle(t,()=>n.current,[]),i.useEffect(()=>{if(!e.src)throw new Error("No src passed");if(window.remotion_audioEnabled&&!e.muted&&!(A<=0))return R({type:"audio",src:Pe(e.src),id:N,frame:b,volume:A,mediaFrame:C,playbackRate:e.playbackRate??1,toneFrequency:u??1,audioStartFrame:Math.max(0,-(T?.cumulatedNegativeFrom??0)),audioStreamIndex:x??0}),()=>k(N)},[e.muted,e.src,R,b,N,k,A,y,C,o,e.playbackRate,u,T?.cumulatedNegativeFrom,x]);const{src:M}=e,D=t||l;return i.useLayoutEffect(()=>{if(window.process?.env?.NODE_ENV==="test"||!D)return;const q=F("Loading <Html5Audio> duration with src="+M,{retries:p??void 0,timeoutInMilliseconds:v??void 0}),{current:$}=n,P=()=>{$?.duration&&s($.src,$.duration),I(q)};return $?.duration?(s($.src,$.duration),I(q)):$?.addEventListener("loadedmetadata",P,{once:!0}),()=>{$?.removeEventListener("loadedmetadata",P),I(q)}},[M,s,D,p,v,I,F]),D?h.jsx("audio",{ref:n,...S,onError:f}):null},dc=i.forwardRef(cc),fc=(e,t)=>{const n=i.useContext(An),r=e,{startFrom:o,endAt:a,trimBefore:s,trimAfter:u,name:l,stack:c,pauseWhenBuffering:d,showInTimeline:m,onError:f,freeze:p,...v}=r,{loop:g,freeze:w,...x}=r,{fps:E}=Ne(),S=ne();if(S.isClientSideRendering)throw new Error("<Html5Audio> is not supported in @remotion/web-renderer. Use <Audio> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");if(typeof p<"u")throw new TypeError('The "freeze" prop is not supported on <Html5Audio />. Use <Sequence freeze={...}> to freeze media playback.');const{durations:b,setDurations:y}=i.useContext(Vr);if(typeof e.src!="string")throw new TypeError(`The \`<Html5Audio>\` tag requires a string for \`src\`, but got ${JSON.stringify(e.src)} instead.`);const C=Qe(e.src),T=i.useCallback(N=>{console.log(N.currentTarget.error);const A=`Could not play audio with src ${C}: ${N.currentTarget.error}. See https://remotion.dev/docs/media-playback-error for help.`;if(g){if(f){f(new Error(A));return}$t(new Error(A))}else f?.(new Error(A)),console.warn(A)},[g,f,C]),R=i.useCallback((N,A)=>{y({type:"got-duration",durationInSeconds:A,src:N})},[y]),k=b[Pe(C)]??b[Pe(e.src)];Nn({startFrom:o,endAt:a,trimBefore:s,trimAfter:u});const{trimBeforeValue:F,trimAfterValue:I}=$n({startFrom:o,endAt:a,trimBefore:s,trimAfter:u});if(g&&k!==void 0){if(!Number.isFinite(k))return h.jsx(Pt,{...x,ref:t,_remotionInternalNativeLoopPassed:!0});const N=k*E;return h.jsx(Fn,{layout:"none",durationInFrames:In({trimAfter:I,mediaDurationInFrames:N,playbackRate:e.playbackRate??1,trimBefore:F}),children:h.jsx(Pt,{...x,ref:t,_remotionInternalNativeLoopPassed:!0})})}return typeof F<"u"||typeof I<"u"?h.jsx(me,{layout:"none",from:0-(F??0),showInTimeline:!1,durationInFrames:I,name:l,children:h.jsx(Pt,{_remotionInternalNeedsDurationCalculation:!!g,pauseWhenBuffering:d??!1,...v,ref:t})}):(Mn({playbackRate:e.playbackRate,preservePitch:e.preservePitch,volume:e.volume},"Html5Audio"),S.isRendering?h.jsx(dc,{onDuration:R,...e,ref:t,onNativeError:T,_remotionInternalNeedsDurationCalculation:!!g}):h.jsx(Ta,{_remotionInternalNativeLoopPassed:e._remotionInternalNativeLoopPassed??!1,_remotionInternalStack:c??null,shouldPreMountAudioTags:n!==null&&n.numberOfAudioTags>0,...e,ref:t,onNativeError:T,onDuration:R,pauseWhenBuffering:d??!1,_remotionInternalNeedsDurationCalculation:!!g,showInTimeline:m??!0}))},Pt=i.forwardRef(fc);ce(Pt);var km=Pt,mc=e=>{if(e===void 0)return 1;if(typeof e!="number"||!Number.isFinite(e)||e<=0)throw new Error(`<Solid>: \`pixelDensity\` must be a positive finite number. Received: ${String(e)}.`);return e},pc={..._e,color:{type:"color",default:"transparent",description:"Color"},width:{type:"number",min:1,step:1,default:1920,description:"Width",hiddenFromList:!1},height:{type:"number",min:1,step:1,default:1080,description:"Height",hiddenFromList:!1},pixelDensity:{type:"number",min:1,max:3,step:.1,default:1,description:"Pixel density",hiddenFromList:!1},...$e},hc=({color:e,width:t,height:n,effects:r=[],className:o,style:a,pixelDensity:s,overrideId:u,reference:l})=>{const{delayRender:c,continueRender:d,cancelRender:m}=Ee(),f=mc(s),p=Math.ceil(t*f),v=Math.ceil(n*f),[g,w]=i.useState(null),x=Ut({effects:r,overrideId:u??null}),E=i.useMemo(()=>{if(typeof document>"u")return null;const C=document.createElement("canvas");return C.width=1,C.height=1,C},[]),S=Ht(),b=i.useCallback(C=>{w(C),typeof l=="function"?l(C):l&&(l.current=C)},[l]);i.useEffect(()=>{if(!g||!E)return;const C=c("Solid effect chain");if(!S)return d(C),()=>{d(C)};const T=E.getContext("2d",{colorSpace:"srgb"});if(!T){m(new Error("Failed to acquire 2D context for <Solid> source"));return}return T.clearRect(0,0,1,1),e!==void 0&&(T.fillStyle=e,T.fillRect(0,0,1,1)),qt({state:S.get(p,v),source:E,effects:x,output:g,width:p,height:v}).then(R=>{R&&d(C)}).catch(R=>{m(R)}),()=>{d(C)}},[e,g,E,S,p,v,c,d,m,x]);const y=i.useMemo(()=>({width:t,height:n,...a??{}}),[n,a,t]);return h.jsx("canvas",{ref:b,width:p,height:v,className:o,style:y})},gc=i.forwardRef(({effects:e=[],controls:t,color:n,height:r,width:o,className:a,durationInFrames:s,style:u,name:l,from:c,trimBefore:d,freeze:m,hidden:f,showInTimeline:p,pixelDensity:v,...g},w)=>{const x=Bt(e),E=i.useRef(null);return i.useImperativeHandle(w,()=>E.current,[]),h.jsx(me,{layout:"none",from:c,trimBefore:d,freeze:m,hidden:f,showInTimeline:p,controls:t,_remotionInternalEffects:x,durationInFrames:s,name:l??"<Solid>",outlineRef:E,_remotionInternalDocumentationLink:"https://www.remotion.dev/docs/solid",...g,children:h.jsx(hc,{reference:E,overrideId:t?.overrideId??null,color:n,height:r,width:o,className:a,style:u,effects:e,pixelDensity:v})})}),Ra=Oe({Component:gc,componentName:"<Solid>",componentIdentity:"dev.remotion.remotion.Solid",schema:pc,supportsEffects:!0});Ra.displayName="Solid";ce(Ra);var tn=null,ka=()=>{if(tn!==null)return tn;if(typeof document>"u")return!1;const e=document.createElement("canvas");return tn=typeof e.getContext("2d")?.drawElementImage=="function"&&typeof e.requestPaint=="function"&&typeof e.captureElementImage=="function"&&"transferControlToOffscreen"in HTMLCanvasElement.prototype,tn},vc="HTML in Canvas is not supported. Two common causes: Chrome is older than version 148 (update Chrome), or the HTML-in-Canvas flag is disabled at chrome://flags/#canvas-draw-element (enable it and restart Chrome).";function yc(e,t){if(typeof e!="number"||typeof t!="number")throw new Error(`HtmlInCanvas: \`width\` and \`height\` must be numbers. Received width=${String(e)}, height=${String(t)}.`);if(!Number.isInteger(e)||e<=0)throw new Error(`HtmlInCanvas: \`width\` must be a positive integer. Received: ${String(e)}.`);if(!Number.isInteger(t)||t<=0)throw new Error(`HtmlInCanvas: \`height\` must be a positive integer. Received: ${String(t)}.`)}function wc(e){if(e===void 0)return 1;if(typeof e!="number"||!Number.isFinite(e)||e<=0)throw new Error(`HtmlInCanvas: \`pixelDensity\` must be a positive finite number. Received: ${String(e)}.`);return e}var nn=e=>e instanceof DOMException&&e.name==="InvalidStateError",Lo="HtmlInCanvas: Expected the element to be inside the viewport during rendering, but Chrome had no cached paint record for it.",Vo=({target:e,width:t,height:n})=>{e.width!==t&&(e.width=t),e.height!==n&&(e.height=n)},bc=({canvas:e,element:t,elementImage:n})=>{const r=e.getContext("2d");if(!r)throw new Error("Failed to acquire 2D context for <HtmlInCanvas> canvas");r.reset();const o=r.drawElementImage(n,0,0);t.style.transform=o.toString()},jo=i.createContext(null),Ia=i.forwardRef(({width:e,height:t,effects:n,children:r,onPaint:o,onInit:a,pixelDensity:s,controls:u,style:l},c)=>{const d=i.useContext(jo);yc(e,t);const m=wc(s),f=Math.ceil(e*m),p=Math.ceil(t*m),{continueRender:v,cancelRender:g}=Ee(),{isClientSideRendering:w,isRendering:x}=ne(),E=!x||w,S=o===void 0&&a===void 0;ka()||g(new Error(vc));const b=i.useRef(null),y=i.useRef(null),C=i.useRef(null),T=`${e}x${t}@${m}-${S?"direct":"offscreen"}`,R=i.useCallback(L=>{b.current=L,typeof c=="function"?c(L):c&&(c.current=L)},[c]),k=Ht(),F=Ut({effects:n,overrideId:u?.overrideId??null}),I=i.useRef(F);I.current=F;const N=i.useRef(o);N.current=o;const A=i.useRef(a);A.current=a;const M=i.useRef(!1),D=i.useRef(null),q=i.useRef(!1),$=i.useRef(d);$.current=d;const P=i.useCallback(async()=>{const L=C.current;if(!L)throw new Error("Canvas or scene element not found");const H=y.current;if(!H)throw new Error("HtmlInCanvas: paint target is not ready because the canvas is remounting");Vo({target:H,width:f,height:p});try{const U=b.current;if(!U)throw new Error("Canvas not found");const G=sr("onPaint");if(!M.current){const Y=A.current;if(!Y)M.current=!0;else{let ee;try{ee=U.captureElementImage(L)}catch(te){if(nn(te)&&E){v(G);return}throw nn(te)?new Error(Lo):te}M.current=!0;try{if(H instanceof HTMLCanvasElement)throw new Error("HtmlInCanvas: onInit requires an OffscreenCanvas paint target");const te=await Y({canvas:H,element:L,elementImage:ee,pixelDensity:m});if(typeof te!="function")throw new Error("HtmlInCanvas: when `onInit` is provided, it must return a cleanup function, or a Promise that resolves to one.");q.current?te():D.current=te}finally{ee.close()}}}let z;try{z=U.captureElementImage(L)}catch(Y){if(nn(Y)&&E){v(G);return}throw nn(Y)?new Error(Lo):Y}try{const Y=N.current;if(Y){if(H instanceof HTMLCanvasElement)throw new Error("HtmlInCanvas: onPaint requires an OffscreenCanvas paint target");const ee=Y({canvas:H,element:L,elementImage:z,pixelDensity:m});ee&&await ee}else bc({canvas:H,element:L,elementImage:z,pixelDensity:m});await qt({state:k.get(f,p),source:H,effects:I.current,output:H,width:f,height:p})}finally{z.close()}$.current?.requestParentPaint(),v(G)}catch(U){g(U)}},[p,f,k,v,g,m,E]);i.useLayoutEffect(()=>{const L=b.current;if(!L)throw new Error("Canvas not found");L.layoutSubtree=!0;const H=S?L:L.transferControlToOffscreen();return y.current=H,Vo({target:H,width:f,height:p}),M.current=!1,q.current=!1,L.addEventListener("paint",P),()=>{L.removeEventListener("paint",P),y.current=null,M.current=!1,q.current=!0,D.current?.(),D.current=null}},[P,g,f,p,S]);const _=i.useRef(!1);i.useLayoutEffect(()=>{if(!_.current){_.current=!0;return}const L=b.current;L&&L.requestPaint?.()},[o,F]),i.useLayoutEffect(()=>{const L=b.current;if(!L)return;const H=sr("waiting for first paint after canvas resize");return L.addEventListener("paint",()=>{v(H)},{once:!0}),()=>{v(H)}},[e,t,v,T]);const V=i.useMemo(()=>({width:e,height:t}),[e,t]),W=i.useMemo(()=>({width:e,height:t,...l??{}}),[t,l,e]),K=i.useMemo(()=>({requestParentPaint:()=>{b.current?.requestPaint?.()}}),[]);return h.jsx(jo.Provider,{value:K,children:h.jsx("canvas",{ref:R,width:f,height:p,style:W,children:h.jsx("div",{ref:C,style:V,children:r})},T)})});Ia.displayName="HtmlInCanvasContent";var Fa=i.forwardRef(({width:e,height:t,effects:n=[],children:r,onPaint:o,onInit:a,pixelDensity:s,controls:u,style:l,durationInFrames:c,name:d,...m},f)=>{const p=Bt(n),v=i.useRef(null),g=i.useCallback(w=>{v.current=w,typeof f=="function"?f(w):f&&(f.current=w)},[f]);return h.jsx(me,{durationInFrames:c,name:d??"<HtmlInCanvas>",_remotionInternalDocumentationLink:"https://www.remotion.dev/docs/remotion/html-in-canvas",controls:u,_remotionInternalEffects:p,outlineRef:v,layout:"none",...m,children:h.jsx(Ia,{ref:g,width:e,height:t,effects:n,onPaint:o,onInit:a,pixelDensity:s,controls:u,style:l,children:r})})});Fa.displayName="HtmlInCanvas";var xc={..._e,pixelDensity:{type:"number",min:1,max:3,step:.1,default:1,description:"Pixel density",hiddenFromList:!1},...$e},Cc=Oe({Component:Fa,componentName:"<HtmlInCanvas>",componentIdentity:"dev.remotion.remotion.HtmlInCanvas",schema:xc,supportsEffects:!0}),Pa=Object.assign(Cc,{isSupported:ka});Pa.displayName="HtmlInCanvas";ce(Pa);function je(e){return e.startsWith("data:")&&e.length>100?e.slice(0,60)+"...["+e.length+" chars total]":e}var Ec={..._e,fit:{type:"enum",default:"fill",description:"Fit",variants:{fill:{},contain:{},cover:{}}},...$e},Sc=()=>{if(typeof DOMException<"u")return new DOMException("Image loading was aborted","AbortError");const e=new Error("Image loading was aborted");return e.name="AbortError",e},Tc=({src:e,signal:t})=>new Promise((n,r)=>{const o=new Image;let a=!1;function s(){o.onload=null,o.onerror=null}function u(c){a||(a=!0,s(),c())}function l(){u(()=>r(Sc()))}if(o.onload=()=>{Promise.resolve(o.decode?.()).catch(()=>{}).then(()=>{const c=o.naturalWidth||o.width,d=o.naturalHeight||o.height;if(c<=0||d<=0){u(()=>r(new Error(`Could not determine dimensions for <CanvasImage> with src="${je(e)}"`)));return}u(()=>n({element:o,width:c,height:d}))})},o.onerror=()=>{u(()=>r(new Error(`Could not load <CanvasImage> with src="${je(e)}"`)))},t.addEventListener("abort",l,{once:!0}),t.aborted){l();return}o.crossOrigin="anonymous",o.src=e});function Rc(e){return 1e3*2**(e-1)}var kc=({onFrame:e})=>{if(typeof requestAnimationFrame>"u")return e(),()=>{};const t=requestAnimationFrame(e);return()=>cancelAnimationFrame(t)},Ma=i.forwardRef(({src:e,width:t,height:n,fit:r="fill",effects:o,controls:a,onError:s,className:u,style:l,id:c,pauseWhenLoading:d,maxRetries:m=2,delayRenderRetries:f,delayRenderTimeoutInMilliseconds:p,refForOutline:v,...g},w)=>{const{delayRender:x,continueRender:E,cancelRender:S}=Ee(),{delayPlayback:b}=Vn(),[y,C]=i.useState(null),[T,R]=i.useState(null),k=Qe(e),F=Ht(),I=Ut({effects:o,overrideId:a?.overrideId??null}),N=i.useContext(re),A=i.useRef(null),[M,D]=i.useState(!1),q=!!N?.premounting,$=!!N?.postmounting,P=i.useCallback(({markAsReady:W})=>{const K=A.current;!K||K.continued||(K.continued=!0,W&&D(!1),E(K.handle),A.current=null)},[E]),_=i.useMemo(()=>typeof document>"u"?null:document.createElement("canvas"),[]),V=i.useCallback(W=>{C(W),v&&(v.current=W),typeof w=="function"?w(W):w&&(w.current=W)},[w,v]);return i.useLayoutEffect(()=>{if(!(!d||!M||q||$))return b().unblock},[b,M,$,q,d]),i.useLayoutEffect(()=>{const W=x(`Rendering <CanvasImage> with src="${je(k)}"`,{retries:f??void 0,timeoutInMilliseconds:p??void 0}),K=new AbortController;let L=!1,H=0,U=null;R(null),D(!0),A.current={handle:W,continued:!1};const G=()=>{Tc({src:k,signal:K.signal}).then(z=>{L||R(z)}).catch(z=>{if(z.name==="AbortError"){P({markAsReady:!1});return}if(H++,H<=m){const Y=Rc(H);console.warn(`Could not load <CanvasImage> with src="${je(k)}", retrying in ${Y}ms`),U=setTimeout(()=>{L||G()},Y)}else s?(s(z),P({markAsReady:!0})):S(z)})};return G(),()=>{L=!0,U!==null&&clearTimeout(U),K.abort(),P({markAsReady:!1})}},[k,S,P,x,f,p,m,s]),i.useLayoutEffect(()=>{if(!T||!y||!_)return;const W=x(`Applying effects to <CanvasImage> with src="${je(k)}"`);let K=!1,L=!1,H=()=>{};const U=()=>{L||(L=!0,E(W))},G=t??T.width,z=n??T.height,Y=_.getContext("2d",{colorSpace:"srgb"});return Y?(_.width=G,_.height=z,y.width=G,y.height=z,Y.clearRect(0,0,G,z),Y.drawImage(T.element,...na(r,{width:T.width,height:T.height},{width:G,height:z})),qt({state:F.get(G,z),source:_,effects:I,output:y,width:G,height:z}).then(ee=>{ee&&!K&&(H=kc({onFrame:()=>{K||(U(),P({markAsReady:!0}))}}))}).catch(ee=>{K||(s?(s(ee),U(),P({markAsReady:!0})):S(ee))}),()=>{K=!0,H(),U()}):(S(new Error("Could not get 2D context for <CanvasImage> source canvas")),U(),()=>{U()})},[k,S,F,E,P,x,r,n,T,I,s,y,_,t]),h.jsx("canvas",{...g,ref:V,width:t,height:n,className:u,style:l,id:c})});Ma.displayName="CanvasImageContent";var Ic=i.forwardRef(({src:e,width:t,height:n,fit:r,effects:o=[],className:a,style:s,id:u,onError:l,pauseWhenLoading:c,maxRetries:d,delayRenderRetries:m,delayRenderTimeoutInMilliseconds:f,durationInFrames:p,from:v,trimBefore:g,freeze:w,hidden:x,name:E,showInTimeline:S,stack:b,controls:y,_remotionInternalDocumentationLink:C,outlineRef:T,...R},k)=>{if(!e)throw new Error('No "src" prop was passed to <CanvasImage>.');const F=Bt(o),I=i.useRef(null);return i.useImperativeHandle(k,()=>I.current,[]),h.jsx(me,{layout:"none",from:v??0,trimBefore:g,durationInFrames:p??1/0,freeze:w,hidden:x,showInTimeline:S??!0,name:E??"<CanvasImage>",_remotionInternalDocumentationLink:C??"https://www.remotion.dev/docs/canvasimage",controls:y,_remotionInternalEffects:F,_remotionInternalIsMedia:{type:"image",src:e},_remotionInternalStack:b,outlineRef:T??I,children:h.jsx(Ma,{ref:I,src:e,width:t,height:n,fit:r,effects:o,controls:y,className:a,style:s,id:u,onError:l,pauseWhenLoading:c,maxRetries:d,delayRenderRetries:m,delayRenderTimeoutInMilliseconds:f,refForOutline:T??null,...R})})}),Hr=Oe({Component:Ic,componentName:"<CanvasImage>",componentIdentity:"dev.remotion.remotion.CanvasImage",schema:Ec,supportsEffects:!0});Hr.displayName="CanvasImage";ce(Hr);var Fc=({onLoad:e,onError:t,delayRenderRetries:n,delayRenderTimeoutInMilliseconds:r,...o},a)=>{const{delayRender:s,continueRender:u}=Ee(),[l]=i.useState(()=>s(`Loading <IFrame> with source ${o.src}`,{retries:n??void 0,timeoutInMilliseconds:r??void 0})),c=i.useCallback(m=>{u(l),e?.(m)},[l,e,u]),d=i.useCallback(m=>{u(l),t?t(m):console.error("Error loading iframe:",m,"Handle the event using the onError() prop to make this message disappear.")},[l,t,u]);return h.jsx("iframe",{referrerPolicy:"strict-origin-when-cross-origin",...o,ref:a,onError:d,onLoad:c})};i.forwardRef(Fc);function Pc(e){return 1e3*2**(e-1)}var Mc=({onError:e,maxRetries:t=2,src:n,pauseWhenLoading:r,delayRenderRetries:o,delayRenderTimeoutInMilliseconds:a,onImageFrame:s,crossOrigin:u,decoding:l,ref:c,refForOutline:d,...m})=>{const f=i.useRef(null),p=i.useRef({}),{delayPlayback:v}=Vn(),g=i.useContext(re),[w,x]=i.useState(!1),E=i.useCallback(M=>{f.current=M,d.current=M,typeof c=="function"?c(M):c&&(c.current=M)},[c,d]),S=Qe(n),b=i.useCallback(M=>{if(!f.current)return;const D=f.current.src;setTimeout(()=>{if(!f.current)return;const q=f.current?.src;q===D&&(f.current.removeAttribute("src"),f.current.setAttribute("src",q))},M)},[]),{delayRender:y,continueRender:C,cancelRender:T}=Ee(),R=!!g?.premounting,k=!!g?.postmounting,F=i.useCallback(M=>{if(p.current){if(p.current[f.current?.src]=(p.current[f.current?.src]??0)+1,e&&(p.current[f.current?.src]??0)>t){e(M);return}if((p.current[f.current?.src]??0)<=t){const D=Pc(p.current[f.current?.src]??0);console.warn(`Could not load image with source ${je(f.current?.src)}, retrying again in ${D}ms`),b(D);return}try{T("Error loading image with src: "+je(f.current?.src))}catch{}}},[T,t,e,b]);typeof window<"u"&&(i.useLayoutEffect(()=>{if(!(!r||!w||R||k))return v().unblock},[v,w,k,R,r]),i.useLayoutEffect(()=>{if(window.process?.env?.NODE_ENV==="test"){f.current&&(f.current.src=S);return}const{current:M}=f;if(!M)return;x(!0);const D=y("Loading <Img> with src="+je(S),{retries:o??void 0,timeoutInMilliseconds:a??void 0});let q=!1;const $=()=>{if(q){C(D);return}(p.current[f.current?.src]??0)>0&&(delete p.current[f.current?.src],console.info(`Retry successful - ${je(f.current?.src)} is now loaded`)),M&&s?.(M),x(!1),C(D)};if(!f.current){$();return}return M.src=S,M.decode().then($).catch(P=>{console.warn(P),M.complete&&M.naturalWidth>0&&M.naturalHeight>0?$():M.addEventListener("load",$)}),()=>{q=!0,M.removeEventListener("load",$),C(D)}},[S,o,a,s,C,y]));const{isClientSideRendering:I,isRendering:N}=ne(),A=jr({crossOrigin:u,requestsVideoFrame:!1,isClientSideRendering:I});return h.jsx("img",{...m,ref:E,crossOrigin:A,onError:F,decoding:N?"sync":l})},Nc=({hidden:e,name:t,stack:n,showInTimeline:r,src:o,from:a,trimBefore:s,durationInFrames:u,freeze:l,controls:c,outlineRef:d,...m})=>{if(!o)throw new Error('No "src" prop was passed to <Img>.');return h.jsx(me,{layout:"none",from:a??0,trimBefore:s,durationInFrames:u??1/0,freeze:l,_remotionInternalStack:n,_remotionInternalDocumentationLink:"https://www.remotion.dev/docs/img",_remotionInternalIsMedia:{type:"image",src:o},name:t??"<Img>",controls:c,showInTimeline:r??!0,hidden:e,outlineRef:d,children:h.jsx(Mc,{src:o,refForOutline:d,...m})})},$c=Hr,Ac={src:{type:"asset",default:void 0,description:"Source",keyframable:!1},..._e,...$e},Lc=new Set(["alt","crossOrigin","decoding","fetchPriority","loading","onError","onImageFrame","onLoad","sizes","srcSet","useMap"]),Vc=e=>Object.keys(e).filter(t=>e[t]!==void 0&&Lc.has(t)),jc=e=>e.map(t=>`"${t}"`).join(", "),_c=({props:e,ref:t,width:n,height:r})=>{if(typeof n=="string"||typeof r=="string")throw new Error('The "width" and "height" props must be numbers on <Img> when effects are passed, because <Img> renders a <CanvasImage>. Use numeric props or CSS dimensions in "style".');const o=Vc(e);if(t!=null&&o.unshift("ref"),o.length!==0)throw new Error(`The ${jc(o)} prop${o.length===1?"":"s"} cannot be used on <Img> when effects are passed, because <Img> renders a <canvas> instead of a native <img>. Remove ${o.length===1?"this prop":"these props"}.`)},Oc=e=>{const t=e?.objectFit;if(t==="fill"||t==="contain"||t==="cover")return t},Dc=({effects:e=[],ref:t,hidden:n,name:r,stack:o,showInTimeline:a,src:s,from:u,trimBefore:l,durationInFrames:c,freeze:d,controls:m,width:f,height:p,className:v,style:g,id:w,pauseWhenLoading:x,maxRetries:E,delayRenderRetries:S,delayRenderTimeoutInMilliseconds:b,...y})=>{const C=i.useRef(null);if(e.length===0)return h.jsx(Nc,{...y,ref:t,hidden:n,name:r,stack:o,showInTimeline:a,src:s,from:u,trimBefore:l,durationInFrames:c,freeze:d,controls:m,width:f,height:p,className:v,style:g,id:w,pauseWhenLoading:x,maxRetries:E,delayRenderRetries:S,delayRenderTimeoutInMilliseconds:b,outlineRef:C});if(!s)throw new Error('No "src" prop was passed to <Img>.');_c({props:y,ref:t,width:f,height:p});const T=typeof f=="number"?f:void 0,R=typeof p=="number"?p:void 0,k=y,F=Oc(g)??"fill";return h.jsx($c,{src:s,width:T,height:R,fit:F,effects:e,className:v,style:g,id:w,pauseWhenLoading:x,maxRetries:E,delayRenderRetries:S,delayRenderTimeoutInMilliseconds:b,from:u,trimBefore:l,durationInFrames:c,freeze:d,hidden:n,name:r??"<Img>",showInTimeline:a,stack:o,_remotionInternalDocumentationLink:"https://www.remotion.dev/docs/img",controls:m,outlineRef:C,...k})},Na=Oe({Component:Dc,componentName:"<Img>",componentIdentity:"dev.remotion.remotion.Img",schema:Ac,supportsEffects:!0});ce(Na);var Bc=e=>{if(e==="remotion")return"dev.remotion.remotion";if(e.startsWith("@remotion/"))return`dev.remotion.${e.slice(10).replace(/-([a-z])/g,(n,r)=>r.toUpperCase())}`;throw new Error(`Unsupported Remotion package name: ${e}`)},$a=({packageName:e,componentName:t})=>`${Bc(e)}.${t}`,Uc={..._e,...$e,...kr,...tu},qc=(e,t)=>{typeof e=="function"?e(t):e&&(e.current=t)},Aa=e=>{const t=Oe(e);return ce(t),t},J=(e,t)=>{const n=i.forwardRef((o,a)=>{const{durationInFrames:s,from:u,trimBefore:l,freeze:c,hidden:d,name:m,showInTimeline:f,stack:p,controls:v,...g}=o,w=i.useRef(null),x=i.useCallback(E=>{w.current=E,qc(a,E)},[a]);return h.jsx(me,{layout:"none",from:u??0,trimBefore:l,durationInFrames:s??1/0,freeze:c,hidden:d,name:m??t,showInTimeline:f??!0,controls:v,_remotionInternalStack:p,_remotionInternalDocumentationLink:"https://www.remotion.dev/docs/interactive",outlineRef:w,children:j.createElement(e,{...g,ref:x})})});n.displayName=t;const r=Aa({Component:n,componentName:t,componentIdentity:$a({packageName:"remotion",componentName:t.slice(1,-1)}),schema:Uc,supportsEffects:!1});return r.displayName=t,r},ze={baseSchema:_e,transformSchema:$e,textSchema:kr,premountSchema:bn,sequenceSchema:lt,withSchema:Aa,_internalMakeRemotionComponentIdentity:$a,A:J("a","<Interactive.A>"),Article:J("article","<Interactive.Article>"),Aside:J("aside","<Interactive.Aside>"),Button:J("button","<Interactive.Button>"),Circle:J("circle","<Interactive.Circle>"),Code:J("code","<Interactive.Code>"),Div:J("div","<Interactive.Div>"),Ellipse:J("ellipse","<Interactive.Ellipse>"),Em:J("em","<Interactive.Em>"),Footer:J("footer","<Interactive.Footer>"),G:J("g","<Interactive.G>"),H1:J("h1","<Interactive.H1>"),H2:J("h2","<Interactive.H2>"),H3:J("h3","<Interactive.H3>"),H4:J("h4","<Interactive.H4>"),H5:J("h5","<Interactive.H5>"),H6:J("h6","<Interactive.H6>"),Header:J("header","<Interactive.Header>"),Label:J("label","<Interactive.Label>"),Li:J("li","<Interactive.Li>"),Line:J("line","<Interactive.Line>"),Main:J("main","<Interactive.Main>"),Nav:J("nav","<Interactive.Nav>"),Ol:J("ol","<Interactive.Ol>"),P:J("p","<Interactive.P>"),Path:J("path","<Interactive.Path>"),Pre:J("pre","<Interactive.Pre>"),Rect:J("rect","<Interactive.Rect>"),Section:J("section","<Interactive.Section>"),Small:J("small","<Interactive.Small>"),Span:J("span","<Interactive.Span>"),Strong:J("strong","<Interactive.Strong>"),Svg:J("svg","<Interactive.Svg>"),Text:J("text","<Interactive.Text>"),Ul:J("ul","<Interactive.Ul>")},La=j.createRef(),Hc=({children:e,onlyRenderComposition:t,currentCompositionMetadata:n,initialCompositions:r,initialCanvasContent:o})=>{const[a,s]=i.useState([]),[u,l]=i.useState(o),[c,d]=i.useState(r),m=i.useRef(c),f=i.useCallback(S=>{d(b=>{const y=S(b);return m.current=y,y})},[]),p=i.useCallback(S=>{f(b=>{if(b.find(y=>y.id===S.id))throw new Error(`Multiple composition with id ${S.id} are registered.`);return[...b,S]})},[f]),v=i.useCallback(S=>{d(b=>b.filter(y=>y.id!==S))},[]),g=i.useCallback((S,b,y,C)=>{s(T=>[...T,{name:S,parent:b,nonce:y,stack:C}])},[]),w=i.useCallback((S,b)=>{s(y=>y.filter(C=>!(C.name===S&&C.parent===b)))},[]);i.useImperativeHandle(La,()=>({getCompositions:()=>m.current}),[]);const x=i.useMemo(()=>({registerComposition:p,unregisterComposition:v,registerFolder:g,unregisterFolder:w,setCanvasContent:l,onlyRenderComposition:t}),[p,g,v,w,t]),E=i.useMemo(()=>({compositions:c,folders:a,currentCompositionMetadata:n,canvasContent:u}),[c,a,n,u]);return h.jsx(ct.Provider,{value:E,children:h.jsx(Lt.Provider,{value:x,children:e})})},Va={};ei(Va,{makeDefaultPreviewCSS:()=>Wc,injectCSS:()=>zc,OBJECTFIT_CONTAIN_CLASS_NAME:()=>At});var rn={},zc=e=>{if(typeof document>"u")return()=>{};if(rn[e])return()=>{};const t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");return n.appendChild(document.createTextNode(e)),t.prepend(n),rn[e]=n,()=>{const r=rn[e];r&&(r.parentNode&&r.parentNode.removeChild(r),delete rn[e])}},At="__remotion_objectfitcontain",Wc=(e,t)=>e?`
19
+ ${e} * {
20
+ box-sizing: border-box;
21
+ }
22
+ ${e} *:-webkit-full-screen {
23
+ width: 100%;
24
+ height: 100%;
25
+ }
26
+ ${e} .${At} {
27
+ object-fit: contain;
28
+ }
29
+ `:`
30
+ * {
31
+ box-sizing: border-box;
32
+ }
33
+ body {
34
+ margin: 0;
35
+ background-color: ${t};
36
+ }
37
+ .${At} {
38
+ object-fit: contain;
39
+ }
40
+ `,ja="__remotion-studio-container",Kc=()=>document.getElementById(ja),Gc=j.createContext(null),Yc=null,Yn=[],Jc=()=>Yc,Zc=e=>(Yn.push(e),()=>{Yn=Yn.filter(t=>t!==e)}),zr=i.createContext(null),Qc=()=>{const e=i.useContext(zr);return!e||e.videoEnabled===null?window.remotion_videoEnabled:e.videoEnabled},Xc=()=>{const e=i.useContext(zr);return!e||e.audioEnabled===null?window.remotion_audioEnabled:e.audioEnabled},ed=({children:e,videoEnabled:t,audioEnabled:n})=>{const r=i.useMemo(()=>({videoEnabled:t,audioEnabled:n}),[t,n]);return h.jsx(zr.Provider,{value:r,children:e})},td=({children:e,numberOfAudioTags:t,logLevel:n,audioLatencyHint:r,previewSampleRate:o,videoEnabled:a,audioEnabled:s,frameState:u})=>{const l=i.useMemo(()=>{let d=0;return{getNonce:()=>d++}},[]),c=i.useMemo(()=>({logLevel:n,mountTime:Date.now()}),[n]);return h.jsx(Ye.Provider,{value:c,children:h.jsx(Vt.Provider,{value:l,children:h.jsx(Xs,{frameState:u,children:h.jsx(ed,{videoEnabled:a,audioEnabled:s,children:h.jsx(ui,{children:h.jsx(ca,{children:h.jsx(su,{children:h.jsx(fa,{children:h.jsx(wa,{children:h.jsx(ma,{audioLatencyHint:r,audioEnabled:s,previewSampleRate:o,children:h.jsx(pa,{numberOfAudioTags:t,children:e})})})})})})})})})})})},_o=["h264","h265","vp8","vp9","av1","mp3","aac","wav","prores","h264-mkv","h264-ts","gif"];function nd(e,t,n){if(!(typeof e>"u")){if(typeof e!="string")throw new TypeError(`The "${n}" prop ${t} must be a string, but you passed a value of type ${typeof e}.`);if(!_o.includes(e))throw new Error(`The "${n}" prop ${t} must be one of ${_o.join(", ")}, but you passed ${e}.`)}}var rd=({calculated:e,compositionId:t,compositionFps:n,compositionHeight:r,compositionWidth:o,compositionDurationInFrames:a})=>{const s=`calculated by calculateMetadata() for the composition "${t}"`,u=`of the "<Composition />" component with the id "${t}"`,l=e?.width??o??void 0;sn(l,"width",e?.width?s:u);const c=e?.height??r??void 0;sn(c,"height",e?.height?s:u);const d=e?.fps??n??null;hn(d,e?.fps?s:u);const m=e?.durationInFrames??a??null;pn(m,{allowFloats:!1,component:`of the "<Composition />" component with the id "${t}"`});const f=e?.defaultCodec;nd(f,s,"defaultCodec");const p=e?.defaultOutName,v=e?.defaultVideoImageFormat,g=e?.defaultPixelFormat,w=e?.defaultProResProfile,x=e?.defaultSampleRate;return{width:l,height:c,fps:d,durationInFrames:m,defaultCodec:f,defaultOutName:p,defaultVideoImageFormat:v,defaultPixelFormat:g,defaultProResProfile:w,defaultSampleRate:x}},Oo=({calculated:e,compositionDurationInFrames:t,compositionFps:n,compositionHeight:r,compositionId:o,compositionWidth:a,defaultProps:s,originalProps:u})=>{const l=rd({calculated:e,compositionDurationInFrames:t,compositionFps:n,compositionHeight:r,compositionWidth:a,compositionId:o});return{metadataSource:{durationInFrames:e?.durationInFrames===void 0?"composition":"calculate-metadata",fps:e?.fps===void 0?"composition":"calculate-metadata",height:e?.height===void 0?"composition":"calculate-metadata",width:e?.width===void 0?"composition":"calculate-metadata"},videoConfig:{...l,id:o,defaultProps:or(s??{}),props:or(e?.props??u),defaultCodec:l.defaultCodec??null,defaultOutName:l.defaultOutName??null,defaultVideoImageFormat:l.defaultVideoImageFormat??null,defaultPixelFormat:l.defaultPixelFormat??null,defaultProResProfile:l.defaultProResProfile??null,defaultSampleRate:l.defaultSampleRate??null}}},_a=({calculateMetadata:e,signal:t,defaultProps:n,inputProps:r,compositionId:o,compositionDurationInFrames:a,compositionFps:s,compositionHeight:u,compositionWidth:l})=>{const c=e?e({defaultProps:n,props:r,abortSignal:t,compositionId:o,isRendering:we().isRendering}):null;return c!==null&&typeof c=="object"&&"then"in c?c.then(d=>Oo({calculated:d,compositionDurationInFrames:a,compositionFps:s,compositionHeight:u,compositionWidth:l,compositionId:o,defaultProps:n,originalProps:r})):Oo({calculated:c,compositionDurationInFrames:a,compositionFps:s,compositionHeight:u,compositionWidth:l,compositionId:o,defaultProps:n,originalProps:r})},Oa=e=>{const t=_a(e);return typeof t=="object"&&"then"in t?t.then(({videoConfig:n})=>n):t.videoConfig},od=e=>{try{return{type:"success",result:_a(e)}}catch(t){return{type:"error",error:t}}},id=e=>{try{return{type:"success",result:Oa(e)}}catch(t){return{type:"error",error:t}}},ad=j.createContext(()=>{}),sd=()=>{if(we().isRendering){const e=window.remotion_envVariables;return e?{...JSON.parse(e),NODE_ENV:"production"}:{}}return{NODE_ENV:"production"}},ud=()=>{const e=sd();window.process||(window.process={}),window.process.env||(window.process.env={}),Object.keys(e).forEach(t=>{window.process.env[t]=e[t]})},ld=j.createContext(null),cd=i.createContext({setSize:()=>{},size:{size:"auto",translation:{x:0,y:0}}}),dd=({canvasSize:e,compositionHeight:t,compositionWidth:n,previewSize:r})=>{const o=e.height/t,a=e.width/n,s=Math.min(o,a);return r==="auto"?s===0?1:s:Number(r)},fd=j.createContext(null),md=({src:e,transparent:t,currentTime:n,toneMapped:r})=>`http://localhost:${window.remotion_proxyPort}/proxy?src=${encodeURIComponent(Pe(e))}&time=${encodeURIComponent(Math.max(0,n))}&transparent=${String(t)}&toneMapped=${String(r)}`,pd=({onError:e,volume:t,playbackRate:n,src:r,muted:o,allowAmplificationDuringRender:a,transparent:s,toneMapped:u,toneFrequency:l,name:c,loopVolumeCurveBehavior:d,delayRenderRetries:m,delayRenderTimeoutInMilliseconds:f,onVideoFrame:p,crossOrigin:v,audioStreamIndex:g,preservePitch:w,...x})=>{const E=He(),S=Se(),b=gt(d),y=wn(),C=i.useContext(re),T=Ke(),{registerRenderAsset:R,unregisterRenderAsset:k}=i.useContext(Ze);if(!r)throw new TypeError("No `src` was passed to <OffthreadVideo>.");const F=i.useMemo(()=>`offthreadvideo-${Je(r)}-${C?.cumulatedFrom}-${C?.relativeFrom}-${C?.durationInFrames}`,[r,C?.cumulatedFrom,C?.relativeFrom,C?.durationInFrames]);if(!y)throw new Error("No video config found");const I=Xe({volume:t,frame:b,mediaVolume:1});yt(I),i.useEffect(()=>{if(!r)throw new Error("No src passed");if(window.remotion_audioEnabled&&!o&&!(I<=0))return R({type:"video",src:Pe(r),id:F,frame:E,volume:I,mediaFrame:S,playbackRate:n,toneFrequency:l,audioStartFrame:Math.max(0,-(C?.cumulatedNegativeFrom??0)),audioStreamIndex:g}),()=>k(F)},[o,r,R,F,k,I,S,E,n,l,C?.cumulatedNegativeFrom,g]);const N=i.useMemo(()=>xa({frame:S,playbackRate:n||1,startFrom:-T})/y.fps,[S,T,n,y.fps]),A=i.useMemo(()=>md({src:r,currentTime:N,transparent:s,toneMapped:u}),[u,N,r,s]),[M,D]=i.useState(null),{delayRender:q,continueRender:$}=Ee();i.useLayoutEffect(()=>{if(!window.remotion_videoEnabled)return;const W=[];D(null);const K=new AbortController,L=q(`Fetching ${A} from server`,{retries:m??void 0,timeoutInMilliseconds:f??void 0});return(async()=>{try{const U=await fetch(A,{signal:K.signal,cache:"no-store"});if(U.status!==200){if(U.status===500){const Y=await U.json();if(Y.error){const ee=Y.error.replace(/^Error: /,"");throw new Error(ee)}}throw new Error(`Server returned status ${U.status} while fetching ${A}`)}const G=await U.blob(),z=URL.createObjectURL(G);W.push(()=>URL.revokeObjectURL(z)),D({src:z,handle:L})}catch(U){if(U.message.includes("aborted")){$(L);return}if(K.signal.aborted){$(L);return}U.message.includes("Failed to fetch")&&(U=new Error(`Failed to fetch ${A}. This could be caused by Chrome rejecting the request because the disk space is low. Consider increasing the disk size of your environment.`,{cause:U})),e?e(U):$t(U)}})(),W.push(()=>{K.signal.aborted||K.abort()}),()=>{W.forEach(U=>U())}},[A,m,f,e,$,q]);const P=i.useCallback(()=>{e?e?.(new Error("Failed to load image with src "+M)):$t("Failed to load image with src "+M)},[M,e]),_=i.useMemo(()=>[At,x.className].filter(dt).join(" "),[x.className]),V=i.useCallback(W=>{p&&p(W)},[p]);return!M||!window.remotion_videoEnabled?null:($(M.handle),h.jsx(Na,{src:M.src,delayRenderRetries:m,delayRenderTimeoutInMilliseconds:f,onImageFrame:V,...x,onError:P,className:_}))},Da=({ref:e,onVideoFrame:t})=>{i.useEffect(()=>{const{current:n}=e;if(!n||!t)return;let r=0;const o=(a,s)=>{e.current&&(t(e.current,a,s),r=e.current.requestVideoFrameCallback(o))};if(t(n),!!n.requestVideoFrameCallback)return r=n.requestVideoFrameCallback(o),()=>{r&&n.cancelVideoFrameCallback(r)}},[t,e])};class it extends Error{src;constructor({message:t,src:n}){super(t),this.name="MediaPlaybackError",this.src=n}}var hd=(e,t)=>{const n=i.useContext(ht);if(!n)throw new Error("SharedAudioContext not found");const r=i.useRef(null),o=i.useMemo(()=>n.audioContext?_r({audioContext:n.audioContext,ref:r}):null,[n.audioContext]);(j.useInsertionEffect??j.useLayoutEffect)(()=>()=>{requestAnimationFrame(()=>{o?.cleanup()})},[o]);const{volume:s,muted:u,playbackRate:l,preservePitch:c,onlyWarnForMediaSeekingError:d,src:m,onDuration:f,acceptableTimeShift:p,acceptableTimeShiftInSeconds:v,toneFrequency:g,name:w,_remotionInternalNativeLoopPassed:x,_remotionInternalStack:E,style:S,pauseWhenBuffering:b,showInTimeline:y,loopVolumeCurveBehavior:C,onError:T,onAutoPlayError:R,onVideoFrame:k,crossOrigin:F,delayRenderRetries:I,delayRenderTimeoutInMilliseconds:N,allowAmplificationDuringRender:A,useWebAudioApi:M,audioStreamIndex:D,...q}=e,$=gt(C??"repeat"),{fps:P,durationInFrames:_}=Ne(),V=i.useContext(re),W=Me(),K=_t(),[L]=i.useState(()=>String(Math.random()));if(typeof p<"u")throw new Error("acceptableTimeShift has been removed. Use acceptableTimeShiftInSeconds instead.");const[H]=Ur(),[U]=qr(),G=Xe({frame:$,volume:s,mediaVolume:H});yt(G);const z=i.useCallback(()=>E??null,[E]);Or({volume:s,mediaVolume:H,mediaType:"video",src:m,playbackRate:e.playbackRate??1,displayName:w??null,id:L,getStack:z,showInTimeline:y,premountDisplay:V?.premountDisplay??null,postmountDisplay:V?.postmountDisplay??null,loopDisplay:void 0,documentationLink:d?"https://www.remotion.dev/docs/offthreadvideo":"https://www.remotion.dev/docs/html5-video",refForOutline:r}),Ea({mediaRef:r,src:m,mediaType:"video",playbackRate:e.playbackRate??1,preservePitch:c,onlyWarnForMediaSeekingError:d,acceptableTimeshift:v??null,isPremounting:!!V?.premounting,isPostmounting:!!V?.postmounting,pauseWhenBuffering:b,onAutoPlayError:R??null}),Sa({id:L,isPostmounting:!!V?.postmounting,isPremounting:!!V?.premounting,mediaRef:r,mediaType:"video",onAutoPlayError:R??null}),ga({logLevel:W,mediaRef:r,volume:G,source:o,shouldUseWebAudioApi:M??!1});const Y=V?V.relativeFrom:0,ee=V?Math.min(V.durationInFrames,_):_,te=Qe(m),se=Zl({actualSrc:te,actualFrom:Y,duration:ee,fps:P});i.useImperativeHandle(t,()=>r.current,[]),i.useState(()=>le({logLevel:W,message:`Mounting video with source = ${se}, v=${It}, user agent=${typeof navigator>"u"?"server":navigator.userAgent}`,tag:"video",mountTime:K})),i.useEffect(()=>{const{current:Z}=r;if(!Z)return;const B=()=>{if(Z.error){if(console.error("Error occurred in video",Z?.error),T){const de=new it({message:`Code ${Z.error.code}: ${Z.error.message}`,src:m});T(de);return}throw new it({message:`The browser threw an error while playing the video ${m}: Code ${Z.error.code} - ${Z?.error?.message}. See https://remotion.dev/docs/media-playback-error for help. Pass an onError() prop to handle the error.`,src:m})}else{if(T){const de=new it({message:`The browser threw an error while playing the video ${m}`,src:m});T(de);return}throw new it({message:"The browser threw an error while playing the video",src:m})}};return Z.addEventListener("error",B,{once:!0}),()=>{Z.removeEventListener("error",B)}},[T,m]);const ue=i.useRef(f);ue.current=f,Da({ref:r,onVideoFrame:k}),i.useEffect(()=>{const{current:Z}=r;if(!Z)return;if(Z.duration){ue.current?.(m,Z.duration);return}const B=()=>{ue.current?.(m,Z.duration)};return Z.addEventListener("loadedmetadata",B),()=>{Z.removeEventListener("loadedmetadata",B)}},[m]),i.useEffect(()=>{const{current:Z}=r;Z&&(Ln()?Z.preload="metadata":Z.preload="auto")},[]);const Te=i.useMemo(()=>({...S}),[S]),ie=jr({crossOrigin:F,requestsVideoFrame:!!k,isClientSideRendering:!1});return h.jsx("video",{...q,ref:r,muted:u||U||G<=0,playsInline:!0,src:se,loop:x,style:Te,disableRemotePlayback:!0,crossOrigin:ie,controls:!1})},Wr=i.forwardRef(hd),Kr=e=>{const{startFrom:t,endAt:n,trimBefore:r,trimAfter:o,name:a,pauseWhenBuffering:s,stack:u,showInTimeline:l,...c}=e,d=ne();if(d.isClientSideRendering)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");const m=i.useCallback(()=>{},[]);if(typeof e.src!="string")throw new TypeError(`The \`<OffthreadVideo>\` tag requires a string for \`src\`, but got ${JSON.stringify(e.src)} instead.`);Nn({startFrom:t,endAt:n,trimBefore:r,trimAfter:o});const{trimBeforeValue:f,trimAfterValue:p}=$n({startFrom:t,endAt:n,trimBefore:r,trimAfter:o});if(typeof f<"u"||typeof p<"u")return h.jsx(me,{layout:"none",from:0-(f??0),showInTimeline:!1,durationInFrames:p,name:a,children:h.jsx(Kr,{pauseWhenBuffering:s??!1,...c,trimAfter:void 0,name:void 0,showInTimeline:l,trimBefore:void 0,stack:void 0,startFrom:void 0,endAt:void 0})});if(Mn(e,"Video"),d.isRendering)return h.jsx(pd,{pauseWhenBuffering:s??!1,...c,trimAfter:void 0,name:void 0,showInTimeline:l,trimBefore:void 0,stack:void 0,startFrom:void 0,endAt:void 0});const{transparent:v,toneMapped:g,onAutoPlayError:w,onVideoFrame:x,crossOrigin:E,delayRenderRetries:S,delayRenderTimeoutInMilliseconds:b,...y}=c;return h.jsx(Wr,{_remotionInternalStack:u??null,onDuration:m,onlyWarnForMediaSeekingError:!0,pauseWhenBuffering:s??!1,showInTimeline:l??!0,onAutoPlayError:w??void 0,onVideoFrame:x??null,crossOrigin:E,...y,_remotionInternalNativeLoopPassed:!1})},gd=({src:e,acceptableTimeShiftInSeconds:t,allowAmplificationDuringRender:n,audioStreamIndex:r,crossOrigin:o,delayRenderRetries:a,delayRenderTimeoutInMilliseconds:s,loopVolumeCurveBehavior:u,muted:l,name:c,onAutoPlayError:d,onError:m,onVideoFrame:f,pauseWhenBuffering:p,playbackRate:v,preservePitch:g,showInTimeline:w,style:x,toneFrequency:E,toneMapped:S,transparent:b,trimAfter:y,trimBefore:C,useWebAudioApi:T,volume:R,_remotionInternalNativeLoopPassed:k,endAt:F,stack:I,startFrom:N,imageFormat:A,...M})=>{if(A)throw new TypeError("The `<OffthreadVideo>` tag does no longer accept `imageFormat`. Use the `transparent` prop if you want to render a transparent video.");return h.jsx(Kr,{acceptableTimeShiftInSeconds:t,allowAmplificationDuringRender:n??!0,audioStreamIndex:r??0,crossOrigin:o,delayRenderRetries:a,delayRenderTimeoutInMilliseconds:s,loopVolumeCurveBehavior:u??"repeat",muted:l??!1,name:c,onAutoPlayError:d??null,onError:m,onVideoFrame:f,pauseWhenBuffering:p??!0,playbackRate:v??1,preservePitch:g,toneFrequency:E??1,showInTimeline:w??!0,src:e,stack:I,startFrom:N,_remotionInternalNativeLoopPassed:k??!1,endAt:F,style:x,toneMapped:S??!0,transparent:b??!1,trimAfter:y,trimBefore:C,useWebAudioApi:T??!1,volume:R,...M})};ce(gd);var vd="remotion_staticFilesChanged";function yd(){const e=j.useContext(ct),t=j.useContext(mt),n=j.useContext(ft),r=j.useContext(re),o=j.useContext(Vt),a=j.useContext(Ge),s=j.useContext(Pn),u=j.useContext(gn),l=j.useContext(Ze),c=j.useContext(pt),d=j.useContext(xn),m=j.useContext(En),f=j.useContext(vt),p=j.useContext(Ye);return i.useMemo(()=>({compositionManagerCtx:e,timelineContext:t,setTimelineContext:n,sequenceContext:r,nonceContext:o,canUseRemotionHooksContext:a,preloadContext:s,resolveCompositionContext:u,renderAssetManagerContext:l,sequenceManagerContext:c,sequenceManagerRefContext:d,visualModePropStatusesRefContext:m,bufferManagerContext:f,logLevelContext:p}),[e,o,r,n,t,a,s,u,l,c,d,m,f,p])}var wd=e=>{const{children:t,contexts:n}=e;return h.jsx(Ye.Provider,{value:n.logLevelContext,children:h.jsx(Ge.Provider,{value:n.canUseRemotionHooksContext,children:h.jsx(Vt.Provider,{value:n.nonceContext,children:h.jsx(Pn.Provider,{value:n.preloadContext,children:h.jsx(ct.Provider,{value:n.compositionManagerCtx,children:h.jsx(xn.Provider,{value:n.sequenceManagerRefContext,children:h.jsx(pt.Provider,{value:n.sequenceManagerContext,children:h.jsx(En.Provider,{value:n.visualModePropStatusesRefContext,children:h.jsx(Ze.Provider,{value:n.renderAssetManagerContext,children:h.jsx(gn.Provider,{value:n.resolveCompositionContext,children:h.jsx(mt.Provider,{value:n.timelineContext,children:h.jsx(ft.Provider,{value:n.setTimelineContext,children:h.jsx(re.Provider,{value:n.sequenceContext,children:h.jsx(vt.Provider,{value:n.bufferManagerContext,children:t})})})})})})})})})})})})})})},bd=i.createRef(),O={MaxMediaCacheSizeContext:Gc,useUnsafeVideoConfig:wn,useFrameForVolumeProp:gt,useTimelinePosition:He,useAbsoluteTimelinePosition:Si,evaluateVolume:Xe,getAbsoluteSrc:Pe,getAssetDisplayName:va,Timeline:ur,validateMediaTrimProps:Nn,validateMediaProps:Mn,resolveTrimProps:$n,VideoForPreview:Wr,CompositionManager:ct,CompositionSetters:Lt,VisualModePropStatusesContext:Cn,VisualModePropStatusesRefContext:En,VisualModeDragOverridesContext:Sn,VisualModeSettersContext:$i,SequenceManager:pt,SequenceManagerRefContext:xn,SequenceStackTracesUpdateContext:ad,baseSchema:_e,sequenceSchema:lt,SequenceWithoutSchema:ta,sequenceStyleSchema:Ii,sequenceVisualStyleSchema:eu,sequencePremountSchema:nu,textSchema:kr,transformSchema:$e,premountSchema:bn,flattenActiveSchema:Ar,getFlatSchemaWithAllKeys:Lr,RemotionRootContexts:td,CompositionManagerProvider:Hc,useVideo:yn,getRoot:Jc,useMediaVolumeState:Ur,usePlayerMutedState:qr,useMediaInTimeline:Or,useLazyComponent:pi,truthy:dt,SequenceContext:re,PremountContext:Ni,useRemotionContexts:yd,RemotionContextProvider:wd,CSSUtils:Va,setupEnvVariables:ud,MediaVolumeContext:Dr,SetMediaVolumeContext:Br,getRemotionEnvironment:we,SharedAudioContext:ht,SharedAudioContextProvider:ma,SharedAudioTagsContext:An,SharedAudioTagsContextProvider:pa,invalidCompositionErrorMessage:qs,invalidFolderNameErrorMessage:ps,calculateMediaDuration:In,isCompositionIdValid:gi,isFolderNameValid:ri,getPreviewDomElement:Kc,compositionsRef:La,portalNode:ir,waitForRoot:Zc,SetTimelineContext:ft,CanUseRemotionHooksProvider:tr,CanUseRemotionHooks:Ge,PrefetchProvider:ca,DurationsContextProvider:fa,IsPlayerContextProvider:ys,useIsPlayer:wr,EditorPropsProvider:ui,EditorPropsContext:br,usePreload:Qe,NonceContext:Vt,resolveVideoConfig:Oa,resolveVideoConfigOrCatch:id,resolveVideoConfigWithMetadataOrCatch:od,ResolveCompositionContext:gn,useResolvedVideoConfig:xr,resolveCompositionsRef:Is,REMOTION_STUDIO_CONTAINER_ELEMENT:ja,RenderAssetManager:Ze,persistCurrentFrame:wi,usePlaybackRate:Rr,useTimelineContext:qe,useTimelineSetFrame:Ti,isIosSafari:Ln,WATCH_REMOTION_STATIC_FILES:vd,addSequenceStackTraces:ce,useMediaStartsAt:Ke,BufferingProvider:wa,BufferingContextReact:vt,getComponentsToAddStacksTo:Ks,getSequenceComponent:Ys,getSingleChildComponent:Js,CurrentScaleContext:ld,PixelDensityContext:fd,PreviewSizeContext:cd,calculateScale:dd,validateRenderAsset:ua,Log:oe,LogLevelContext:Ye,useLogLevel:Me,playbackLogging:le,timeValueRef:ks,compositionSelectorRef:bd,RemotionEnvironmentContext:li,warnAboutTooHighVolume:yt,AudioForPreview:Ta,OBJECTFIT_CONTAIN_CLASS_NAME:At,InnerOffthreadVideo:Kr,useBasicMediaInTimeline:ya,getInputPropsOverride:si,setInputPropsOverride:Ss,useVideoEnabled:Qc,useAudioEnabled:Xc,useIsPlayerBuffering:ba,TimelinePosition:ur,DelayRenderContextType:mi,TimelineContext:mt,PlaybackRateContext:Er,AbsoluteTimeContext:Sr,RenderAssetManagerProvider:Al,getEffectiveVisualModeValue:Ki,CompositionRenderErrorContext:ti,useEffectChainState:Ht,createEffectChainState:ia,cleanupEffectChainState:lr,runEffectChain:qt,useMemoizedEffects:Ut,useMemoizedEffectDefinitions:Bt,createEffect:Ml,createWebGLContextError:hl,createWebGL2ContextError:oa,computeEffectiveSchemaValuesDotNotation:Qi,interpolateKeyframedStatus:Dt,makeStaticDragOverride:nl,makeKeyframedDragOverride:rl,resolveDragOverrideValue:Rn,getStaticDragOverrideValue:ol,OverrideIdsToNodePathsGettersContext:$r,OverrideIdsToNodePathsSettersContext:Qu,findPropsToDelete:Ji,makeSequencePropsSubscriptionKey:Ve,getPropStatusesCtx:Yi,getEffectPropStatusesCtx:Gi,hiddenField:Ir,durationInFramesField:Pr,freezeField:Mr,fromField:Pi},Ba=e=>j.Children.toArray(e).reduce((n,r)=>r.type===j.Fragment?n.concat(Ba(r.props.children)):(n.push(r),n),[]),xd={durationInFrames:ze.baseSchema.durationInFrames,name:ze.sequenceSchema.name,hidden:ze.sequenceSchema.hidden,showInTimeline:ze.sequenceSchema.showInTimeline,freeze:ze.baseSchema.freeze,layout:ze.sequenceSchema.layout},Cd=i.forwardRef(({offset:e=0,className:t="",stack:n=null,_remotionInternalRender:r=null,...o},a)=>(lu(),r?r({...o,offset:e,className:t||void 0,stack:n},a):h.jsx(Ai,{children:o.children}))),Ua=ze.withSchema({Component:Cd,componentName:"<Series.Sequence>",componentIdentity:"dev.remotion.remotion.Series.Sequence",schema:xd,supportsEffects:!1}),Ed=ta,Do=({durationInFrames:e,offset:t,index:n,childrenLength:r})=>{const o=`index = ${n}, duration = ${e}`;(n!==r-1||e!==1/0)&&pn(e,{component:"of a <Series.Sequence /> component",allowFloats:!0});const a=t??0;if(Number.isNaN(a))throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${o}).`);if(!Number.isFinite(a))throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${a} (${o}).`);if(a%1!==0)throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${a} (${o}).`);return a},Sd=e=>{const t=i.useMemo(()=>{const n=Ba(e.children),r=(o,a)=>{if(o===n.length)return null;const u=n[o];if(typeof u=="string"){if(u.trim()==="")return r(o+1,a);throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but you passed a string "${u}"`)}if(u.type!==Ua)throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but got ${u} instead`);const l=u;return Do({durationInFrames:l.props.durationInFrames,offset:l.props.offset,index:o,childrenLength:n.length}),j.cloneElement(l,{_remotionInternalRender:(c,d)=>{const m=c.durationInFrames,{durationInFrames:f,children:p,offset:v,controls:g,stack:w,from:x,name:E,...S}=c,b=Do({durationInFrames:m,offset:v,index:o,childrenLength:n.length}),y=a+b,C=a+m+b;return h.jsxs(h.Fragment,{children:[h.jsx(Ed,{ref:d,name:E||"<Series.Sequence>",_remotionInternalDocumentationLink:E?void 0:"https://www.remotion.dev/docs/series",_remotionInternalStack:w??void 0,controls:g??void 0,from:y,durationInFrames:m,...S,children:h.jsx(Ai,{children:p})}),r(o+1,C)]})}})};return r(0,0)},[e.children]);return h.jsx(uu,{children:h.jsx(me,{layout:"none",name:"<Series>",_remotionInternalDocumentationLink:"https://www.remotion.dev/docs/series",...e,children:t})})},Td=Object.assign(Oe({Component:Sd,componentName:"<Series>",componentIdentity:"dev.remotion.remotion.Series",schema:au,supportsEffects:!1}),{Sequence:Ua});ce(Td);var Rd=e=>{const t={...e,durationInFrames:1,fps:1};return j.createElement(un,t)};ce(Rd);var Bo=e=>Math.round(e*1e5)/1e5,Jn=({element:e,desiredTime:t,logLevel:n,mountTime:r})=>{if(fn(e.currentTime,t))return{wait:Promise.resolve(t),cancel:()=>{}};an({logLevel:n,mediaRef:e,time:t,why:"Seeking during rendering",mountTime:r});let o,a=null;const s=new Promise(l=>{o=e.requestVideoFrameCallback((c,d)=>{const m=d.expectedDisplayTime-c;if(m<=0){l(d.mediaTime);return}setTimeout(()=>{l(d.mediaTime)},m+150)})}),u=new Promise(l=>{const c=()=>{l()};e.addEventListener("seeked",c,{once:!0}),a=()=>{e.removeEventListener("seeked",c)}});return{wait:Promise.all([s,u]).then(([l])=>l),cancel:()=>{a?.(),e.cancelVideoFrameCallback(o)}}},kd=({element:e,desiredTime:t,fps:n,logLevel:r,mountTime:o})=>{const a=1/n/2;let s=()=>{};return Number.isFinite(e.duration)&&e.currentTime>=e.duration&&t>=e.duration?{prom:Promise.resolve(),cancel:()=>{}}:{prom:new Promise((l,c)=>{const d=Jn({element:e,desiredTime:t+a,logLevel:r,mountTime:o});d.wait.then(m=>{if(Math.abs(t-m)<=a)return l();const p=t>m?1:-1,v=Jn({element:e,desiredTime:m+a*p,logLevel:r,mountTime:o});s=v.cancel,v.wait.then(g=>{const w=Math.abs(t-g);if(Bo(w)<=Bo(a))return l();const x=Jn({element:e,desiredTime:t+a,logLevel:r,mountTime:o});return s=x.cancel,x.wait.then(()=>{l()}).catch(E=>{c(E)})}).catch(g=>{c(g)})}),s=d.cancel}),cancel:()=>{s()}}},Id=({onError:e,volume:t,allowAmplificationDuringRender:n,playbackRate:r,onDuration:o,toneFrequency:a,name:s,acceptableTimeShiftInSeconds:u,delayRenderRetries:l,delayRenderTimeoutInMilliseconds:c,loopVolumeCurveBehavior:d,audioStreamIndex:m,onVideoFrame:f,preservePitch:p,...v},g)=>{const w=He(),x=Se(),E=gt(d??"repeat"),S=wn(),b=i.useRef(null),y=i.useContext(re),C=Ke(),T=ne(),R=Me(),k=_t(),{delayRender:F,continueRender:I}=Ee(),{registerRenderAsset:N,unregisterRenderAsset:A}=i.useContext(Ze),M=i.useMemo(()=>`video-${Je(v.src??"")}-${y?.cumulatedFrom}-${y?.relativeFrom}-${y?.durationInFrames}`,[v.src,y?.cumulatedFrom,y?.relativeFrom,y?.durationInFrames]);if(!S)throw new Error("No video config found");const D=Xe({volume:t,frame:E,mediaVolume:1});yt(D),i.useEffect(()=>{if(!v.src)throw new Error("No src passed");if(!v.muted&&!(D<=0)&&window.remotion_audioEnabled)return N({type:"video",src:Pe(v.src),id:M,frame:w,volume:D,mediaFrame:x,playbackRate:r??1,toneFrequency:a??1,audioStartFrame:Math.max(0,-(y?.cumulatedNegativeFrom??0)),audioStreamIndex:m??0}),()=>A(M)},[v.muted,v.src,N,M,A,D,x,w,r,a,y?.cumulatedNegativeFrom,m]),i.useImperativeHandle(g,()=>b.current,[]),Da({ref:b,onVideoFrame:f}),i.useEffect(()=>{if(!window.remotion_videoEnabled)return;const{current:$}=b;if(!$)return;const P=Ca({frame:x,playbackRate:r||1,startFrom:-C,fps:S.fps}),_=F(`Rendering <Html5Video /> with src="${v.src}" at time ${P}`,{retries:l??void 0,timeoutInMilliseconds:c??void 0});if(window.process?.env?.NODE_ENV==="test"){I(_);return}if(fn($.currentTime,P)){if($.readyState>=2){I(_);return}const L=()=>{I(_)};return $.addEventListener("loadeddata",L,{once:!0}),()=>{$.removeEventListener("loadeddata",L)}}const V=()=>{I(_)},W=kd({element:$,desiredTime:P,fps:S.fps,logLevel:R,mountTime:k});W.prom.then(()=>{I(_)}),$.addEventListener("ended",V,{once:!0});const K=()=>{if($?.error){if(console.error("Error occurred in video",$?.error),e)return;throw new it({message:`The browser threw an error while playing the video ${v.src}: Code ${$.error.code} - ${$?.error?.message}. See https://remotion.dev/docs/media-playback-error for help. Pass an onError() prop to handle the error.`,src:v.src})}else throw new it({message:"The browser threw an error",src:v.src})};return $.addEventListener("error",K,{once:!0}),()=>{W.cancel(),$.removeEventListener("ended",V),$.removeEventListener("error",K),I(_)}},[E,v.src,r,S.fps,x,C,e,l,c,R,k,I,F]);const{src:q}=v;return T.isRendering&&i.useLayoutEffect(()=>{if(window.process?.env?.NODE_ENV==="test")return;const $=F("Loading <Html5Video> duration with src="+q,{retries:l??void 0,timeoutInMilliseconds:c??void 0}),{current:P}=b,_=()=>{P?.duration&&o(q,P.duration),I($)};return P?.duration?(o(q,P.duration),I($)):P?.addEventListener("loadedmetadata",_,{once:!0}),()=>{P?.removeEventListener("loadedmetadata",_),I($)}},[q,o,l,c,I,F]),h.jsx("video",{ref:b,disableRemotePlayback:!0,...v})},Fd=i.forwardRef(Id),Pd=(e,t)=>{const{startFrom:n,endAt:r,trimBefore:o,trimAfter:a,name:s,pauseWhenBuffering:u,stack:l,_remotionInternalNativeLoopPassed:c,showInTimeline:d,onAutoPlayError:m,onVideoFrame:f,...p}=e,{loop:v,...g}=e,{fps:w}=Ne(),x=ne();if(x.isClientSideRendering)throw new Error("<Html5Video> is not supported in @remotion/web-renderer. Use <Video> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");const{durations:E,setDurations:S}=i.useContext(Vr);if(typeof t=="string")throw new Error("string refs are not supported");if(typeof e.src!="string")throw new TypeError(`The \`<Html5Video>\` tag requires a string for \`src\`, but got ${JSON.stringify(e.src)} instead.`);const b=Qe(e.src),y=i.useCallback((k,F)=>{S({type:"got-duration",durationInSeconds:F,src:k})},[S]),C=E[Pe(b)]??E[Pe(e.src)];Nn({startFrom:n,endAt:r,trimBefore:o,trimAfter:a});const{trimBeforeValue:T,trimAfterValue:R}=$n({startFrom:n,endAt:r,trimBefore:o,trimAfter:a});if(v&&C!==void 0){if(!Number.isFinite(C))return h.jsx(Mt,{...g,ref:t,stack:l,_remotionInternalNativeLoopPassed:!0});const k=C*w;return h.jsx(Fn,{durationInFrames:In({trimAfter:R,mediaDurationInFrames:k,playbackRate:e.playbackRate??1,trimBefore:T}),layout:"none",name:s,showInTimeline:!1,children:h.jsx(Mt,{...g,ref:t,stack:l,_remotionInternalNativeLoopPassed:!0})})}return typeof T<"u"||typeof R<"u"?h.jsx(me,{layout:"none",from:0-(T??0),showInTimeline:!1,durationInFrames:R===void 0?void 0:R/(e.playbackRate??1),name:s,children:h.jsx(Mt,{pauseWhenBuffering:u??!1,onVideoFrame:f,...p,ref:t,stack:l})}):(Mn({playbackRate:e.playbackRate,preservePitch:e.preservePitch,volume:e.volume},"Html5Video"),x.isRendering?h.jsx(Fd,{onDuration:y,onVideoFrame:f??null,...p,ref:t}):h.jsx(Wr,{onlyWarnForMediaSeekingError:!1,...p,ref:t,onVideoFrame:f??null,pauseWhenBuffering:u??!1,onDuration:y,_remotionInternalStack:l??null,_remotionInternalNativeLoopPassed:c??!1,showInTimeline:d??!0,onAutoPlayError:m??void 0}))},Mt=i.forwardRef(Pd);ce(Mt);var Im=Mt;Zs();var Md={},Nd=new Proxy(Md,{get(e,t){return t==="Bundling"||t==="Rendering"||t==="Log"||t==="Puppeteer"||t==="Output"?Nd:()=>{console.warn("⚠️ The CLI configuration has been extracted from Remotion Core."),console.warn("Update the import from the config file:"),console.warn(),console.warn("- Delete:"),console.warn('import {Config} from "remotion";'),console.warn("+ Replace:"),console.warn('import {Config} from "@remotion/cli/config";'),console.warn(),console.warn("For more information, see https://www.remotion.dev/docs/4-0-migration."),process.exit(1)}}});me.displayName="Sequence";ce(me);Gs(me);ce(un);ce(hs);typeof window<"u"&&(window.remotion_renderReady=!1,window.remotion_delayRenderTimeouts||(window.remotion_delayRenderTimeouts={}),window.remotion_delayRenderHandles=[]);var $d={"style.transformOrigin":{type:"transform-origin",step:1,default:"50% 50%",description:"Transform origin"},"style.translate":{type:"translate",step:1,default:"0px 0px",description:"Offset"},"style.scale":{type:"scale",max:100,step:.01,default:1,description:"Scale",defaultKeyframeOutput:"perceptual-scale"},"style.rotate":{type:"rotation-css",step:1,default:"0deg",description:"Rotation"},"style.opacity":{type:"number",min:0,max:1,step:.01,default:1,description:"Opacity",hiddenFromList:!1}},Ad={premountFor:{type:"number",default:0,description:"Premount For",min:0,step:1,hiddenFromList:!1},postmountFor:{type:"number",default:0,min:0,step:1,hiddenFromList:!0},styleWhilePremounted:{type:"hidden"},styleWhilePostmounted:{type:"hidden"}},Ld={...$d,...Ad},Vd={layout:{type:"enum",default:"absolute-fill",description:"Layout",variants:{"absolute-fill":Ld,none:{}}}};({...Vd.layout});var jd=(e,t,n)=>{if(e){if(typeof e!="object")throw new Error(`"${t}" must be an object, but you passed a value of type ${typeof e}`);if(Array.isArray(e))throw new Error(`"${t}" must be an object, an array was passed ${n?`for composition "${n}"`:""}`)}};function _d(e,t,n){if(typeof e!="number")throw new Error(`The "${t}" prop ${n} must be a number, but you passed a value of type ${typeof e}`);if(isNaN(e))throw new TypeError(`The "${t}" prop ${n} must not be NaN, but is NaN.`);if(!Number.isFinite(e))throw new TypeError(`The "${t}" prop ${n} must be finite, but is ${e}.`);if(e%1!==0)throw new TypeError(`The "${t}" prop ${n} must be an integer, but is ${e}.`);if(e<=0)throw new TypeError(`The "${t}" prop ${n} must be positive, but got ${e}.`)}function Od(e,t){const{allowFloats:n,component:r}=t;if(typeof e>"u")throw new Error(`The "durationInFrames" prop ${r} is missing.`);if(typeof e!="number")throw new Error(`The "durationInFrames" prop ${r} must be a number, but you passed a value of type ${typeof e}`);if(e<=0)throw new TypeError(`The "durationInFrames" prop ${r} must be positive, but got ${e}.`);if(!n&&e%1!==0)throw new TypeError(`The "durationInFrames" prop ${r} must be an integer, but got ${e}.`);if(!Number.isFinite(e))throw new TypeError(`The "durationInFrames" prop ${r} must be finite, but got ${e}.`)}function Dd(e,t,n){if(typeof e!="number")throw new Error(`"fps" must be a number, but you passed a value of type ${typeof e} ${t}`);if(!Number.isFinite(e))throw new Error(`"fps" must be a finite, but you passed ${e} ${t}`);if(isNaN(e))throw new Error(`"fps" must not be NaN, but got ${e} ${t}`);if(e<=0)throw new TypeError(`"fps" must be positive, but got ${e} ${t}`);if(n&&e>50)throw new TypeError("The FPS for a GIF cannot be higher than 50. Use the --every-nth-frame option to lower the FPS: https://remotion.dev/docs/render-as-gif")}var jn={validateFps:Dd,validateDimension:_d,validateDurationInFrames:Od,validateDefaultAndInputProps:jd};if(typeof i.createContext!="function"){const e=['Remotion requires React.createContext, but it is "undefined".','If you are in a React Server Component, turn it into a client component by adding "use client" at the top of the file.',"","Before:",' import {Player} from "@remotion/player";',"","After:",' "use client";',' import {Player} from "@remotion/player";'];throw new Error(e.join(`
41
+ `))}var ae=25,mr=16,Bd=()=>h.jsx("svg",{width:ae,height:ae,viewBox:"0 0 25 25",fill:"none",children:h.jsx("path",{d:"M8 6.375C7.40904 8.17576 7.06921 10.2486 7.01438 12.3871C6.95955 14.5255 7.19163 16.6547 7.6875 18.5625C9.95364 18.2995 12.116 17.6164 14.009 16.5655C15.902 15.5147 17.4755 14.124 18.6088 12.5C17.5158 10.8949 15.9949 9.51103 14.1585 8.45082C12.3222 7.3906 10.2174 6.68116 8 6.375Z",fill:"white",stroke:"white",strokeWidth:"6.25",strokeLinejoin:"round"})}),Ud=()=>h.jsxs("svg",{viewBox:"0 0 100 100",width:ae,height:ae,children:[h.jsx("rect",{x:"25",y:"20",width:"20",height:"60",fill:"#fff",ry:"5",rx:"5"}),h.jsx("rect",{x:"55",y:"20",width:"20",height:"60",fill:"#fff",ry:"5",rx:"5"})]}),qd=({isFullscreen:e})=>{const r=e?0:3,o=e?6*1.6:6/2,a=e?6*1.6:12;return h.jsxs("svg",{viewBox:"0 0 32 32",height:mr,width:mr,children:[h.jsx("path",{d:`
42
+ M ${r} ${a}
43
+ L ${o} ${o}
44
+ L ${a} ${r}
45
+ `,stroke:"#fff",strokeWidth:6,fill:"none"}),h.jsx("path",{d:`
46
+ M ${32-r} ${a}
47
+ L ${32-o} ${o}
48
+ L ${32-a} ${r}
49
+ `,stroke:"#fff",strokeWidth:6,fill:"none"}),h.jsx("path",{d:`
50
+ M ${r} ${32-a}
51
+ L ${o} ${32-o}
52
+ L ${a} ${32-r}
53
+ `,stroke:"#fff",strokeWidth:6,fill:"none"}),h.jsx("path",{d:`
54
+ M ${32-r} ${32-a}
55
+ L ${32-o} ${32-o}
56
+ L ${32-a} ${32-r}
57
+ `,stroke:"#fff",strokeWidth:6,fill:"none"})]})},Hd=()=>h.jsx("svg",{width:ae,height:ae,viewBox:"0 0 24 24",children:h.jsx("path",{d:"M3.63 3.63a.996.996 0 000 1.41L7.29 8.7 7 9H4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 1.71-.71v-4.17l4.18 4.18c-.49.37-1.02.68-1.6.91-.36.15-.58.53-.58.92 0 .72.73 1.18 1.39.91.8-.33 1.55-.77 2.22-1.31l1.34 1.34a.996.996 0 101.41-1.41L5.05 3.63c-.39-.39-1.02-.39-1.42 0zM19 12c0 .82-.15 1.61-.41 2.34l1.53 1.53c.56-1.17.88-2.48.88-3.87 0-3.83-2.4-7.11-5.78-8.4-.59-.23-1.22.23-1.22.86v.19c0 .38.25.71.61.85C17.18 6.54 19 9.06 19 12zm-8.71-6.29l-.17.17L12 7.76V6.41c0-.89-1.08-1.33-1.71-.7zM16.5 12A4.5 4.5 0 0014 7.97v1.79l2.48 2.48c.01-.08.02-.16.02-.24z",fill:"#fff"})}),zd=()=>h.jsx("svg",{width:ae,height:ae,viewBox:"0 0 24 24",children:h.jsx("path",{d:"M3 10v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 1.71-.71V6.41c0-.89-1.08-1.34-1.71-.71L7 9H4c-.55 0-1 .45-1 1zm13.5 2A4.5 4.5 0 0014 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 4.45v.2c0 .38.25.71.6.85C17.18 6.53 19 9.06 19 12s-1.82 5.47-4.4 6.5c-.36.14-.6.47-.6.85v.2c0 .63.63 1.07 1.21.85C18.6 19.11 21 15.84 21 12s-2.4-7.11-5.79-8.4c-.58-.23-1.21.22-1.21.85z",fill:"#fff"})}),Uo="__remotion_buffering_indicator",qo="__remotion_buffering_animation",Wd={width:ae,height:ae,overflow:"hidden",lineHeight:"normal",fontSize:"inherit"},Kd={width:14,height:14,overflow:"hidden",lineHeight:"normal",fontSize:"inherit"},Gd=({type:e})=>{const t=e==="player"?Wd:Kd;return h.jsxs(h.Fragment,{children:[h.jsx("style",{type:"text/css",children:`
58
+ @keyframes ${qo} {
59
+ 0% {
60
+ rotate: 0deg;
61
+ }
62
+ 100% {
63
+ rotate: 360deg;
64
+ }
65
+ }
66
+
67
+ .${Uo} {
68
+ animation: ${qo} 1s linear infinite;
69
+ }
70
+ `}),h.jsx("div",{style:t,children:h.jsx("svg",{viewBox:e==="player"?"0 0 22 22":"0 0 18 18",style:t,className:Uo,children:h.jsx("path",{d:e==="player"?"M 11 4 A 7 7 0 0 1 15.1145 16.66312":"M 9 2 A 7 7 0 0 1 13.1145 14.66312",stroke:"white",strokeLinecap:"round",fill:"none",strokeWidth:3})})})]})},Yd=({currentSize:e,width:t,height:n,compositionWidth:r,compositionHeight:o})=>t!==void 0&&n===void 0?{aspectRatio:[r,o].join("/")}:n!==void 0&&t===void 0?{aspectRatio:[r,o].join("/")}:e?{width:r,height:o}:{width:r,height:o},qa=({previewSize:e,compositionWidth:t,compositionHeight:n,canvasSize:r})=>{const o=O.calculateScale({canvasSize:r,compositionHeight:n,compositionWidth:t,previewSize:e}),a=0-(1-o)/2,s=a*t,u=a*n,l=t*o,c=n*o,d=r.width/2-l/2,m=r.height/2-c/2;return{centerX:d,centerY:m,xCorrection:s,yCorrection:u,scale:o}},Ha=({config:e,style:t,canvasSize:n,overflowVisible:r,layout:o})=>e?{position:"relative",overflow:r?"visible":"hidden",...Yd({compositionHeight:e.height,compositionWidth:e.width,currentSize:n,height:t?.height,width:t?.width}),opacity:o?1:0,...t}:{},za=({config:e,layout:t,scale:n,overflowVisible:r})=>e?t?{position:"absolute",width:e.width,height:e.height,display:"flex",transform:`scale(${n})`,marginLeft:t.xCorrection,marginTop:t.yCorrection,overflow:r?"visible":"hidden"}:{position:"absolute",width:e.width,height:e.height,display:"flex",transform:`scale(${n})`,overflow:r?"visible":"hidden"}:{},Wa=({layout:e,scale:t,config:n,overflowVisible:r})=>{if(!n)return{};if(!e)return{width:n.width*t,height:n.height*t,display:"flex",flexDirection:"column",position:"absolute",overflow:r?"visible":"hidden"};const{centerX:o,centerY:a}=e;return{width:n.width*t,height:n.height*t,display:"flex",flexDirection:"column",position:"absolute",left:o,top:a,overflow:r?"visible":"hidden"}},Ka=j.createContext(void 0),Ga=j.createContext(void 0);class Jd{listeners={ended:[],error:[],pause:[],play:[],ratechange:[],scalechange:[],seeked:[],timeupdate:[],frameupdate:[],fullscreenchange:[],volumechange:[],mutechange:[],waiting:[],resume:[]};addEventListener(t,n){this.listeners[t].push(n)}removeEventListener(t,n){this.listeners[t]=this.listeners[t].filter(r=>r!==n)}dispatchEvent(t,n){this.listeners[t].forEach(r=>{r({detail:n})})}dispatchSeek=t=>{this.dispatchEvent("seeked",{frame:t})};dispatchVolumeChange=t=>{this.dispatchEvent("volumechange",{volume:t})};dispatchPause=()=>{this.dispatchEvent("pause",void 0)};dispatchPlay=()=>{this.dispatchEvent("play",void 0)};dispatchEnded=()=>{this.dispatchEvent("ended",void 0)};dispatchRateChange=t=>{this.dispatchEvent("ratechange",{playbackRate:t})};dispatchScaleChange=t=>{this.dispatchEvent("scalechange",{scale:t})};dispatchError=t=>{this.dispatchEvent("error",{error:t})};dispatchTimeUpdate=t=>{this.dispatchEvent("timeupdate",t)};dispatchFrameUpdate=t=>{this.dispatchEvent("frameupdate",t)};dispatchFullscreenChange=t=>{this.dispatchEvent("fullscreenchange",t)};dispatchMuteChange=t=>{this.dispatchEvent("mutechange",t)};dispatchWaiting=t=>{this.dispatchEvent("waiting",t)};dispatchResume=t=>{this.dispatchEvent("resume",t)}}class Zd{listeners={error:[],waiting:[],resume:[]};addEventListener(t,n){this.listeners[t].push(n)}removeEventListener(t,n){this.listeners[t]=this.listeners[t].filter(r=>r!==n)}dispatchEvent(t,n){this.listeners[t].forEach(r=>{r({detail:n})})}dispatchError=t=>{this.dispatchEvent("error",{error:t})};dispatchWaiting=t=>{this.dispatchEvent("waiting",t)};dispatchResume=t=>{this.dispatchEvent("resume",t)}}var Ya=e=>{const t=i.useContext(O.BufferingContextReact);if(!t)throw new Error("BufferingContextReact not found");i.useLayoutEffect(()=>{const n=t.listenForBuffering(()=>{t.buffering.current=!0,e.dispatchWaiting({})}),r=t.listenForResume(()=>{t.buffering.current=!1,e.dispatchResume({})});return()=>{n.remove(),r.remove()}},[t,e])},Qd=({children:e,currentPlaybackRate:t})=>{const[n]=i.useState(()=>new Jd);if(!i.useContext(O.BufferingContextReact))throw new Error("BufferingContextReact not found");return i.useEffect(()=>{t&&n.dispatchRateChange(t)},[n,t]),Ya(n),h.jsx(Ka.Provider,{value:n,children:e})},Gr=(e,t)=>{const[n,r]=i.useState(!1);return i.useEffect(()=>{const{current:o}=e;if(!o)return;let a;const s=()=>{t&&(clearTimeout(a),a=setTimeout(()=>{r(!1)},t===!0?3e3:t))},u=()=>{r(!0),s()},l=()=>{r(!1),clearTimeout(a)},c=()=>{r(!0),s()};return o.addEventListener("mouseenter",u),o.addEventListener("mouseleave",l),o.addEventListener("mousemove",c),()=>{o.removeEventListener("mouseenter",u),o.removeEventListener("mouseleave",l),o.removeEventListener("mousemove",c),clearTimeout(a)}},[t,e]),n},_n=()=>{const[e,t,n]=O.Timeline.usePlayingState(),[r,o]=i.useState(!1),a=O.Timeline.useTimelinePosition(),s=i.useRef(a),u=O.Timeline.useTimelineSetFrame(),l=O.Timeline.useTimelineSetFrame(),c=i.useContext(O.SharedAudioContext),d=i.useContext(O.SharedAudioTagsContext),{audioAndVideoTags:m}=O.useTimelineContext(),f=i.useRef(a);f.current=a;const p=O.useVideo(),v=O.useUnsafeVideoConfig(),g=i.useContext(Ka),w=(v?.durationInFrames??1)-1,x=a===w,E=a===0;if(!g)throw new TypeError("Expected Player event emitter context");const S=i.useContext(O.BufferingContextReact);if(!S)throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");const{buffering:b}=S,y=i.useCallback($=>{const P=v?O.TimelinePosition.clampFrameToCompositionRange($,v.durationInFrames):Math.max(0,$);p?.id&&l(_=>({..._,[p.id]:P})),f.current=P,g.dispatchSeek(P)},[v,g,l,p?.id]),C=i.useCallback($=>{n.current||(o(!0),x&&y(0),c?.resume(),d&&d.numberOfAudioTags>0&&$&&d.playAllAudios(),m.current.forEach(P=>P.play("player play() was called and playing audio from a click")),n.current=!0,t(!0),s.current=f.current,g.dispatchPlay())},[n,x,c,d,t,g,y,m]),T=i.useCallback(()=>{n.current&&(n.current=!1,t(!1),g.dispatchPause(),c?.suspend())},[g,n,t,c]),R=i.useCallback(()=>{n.current&&(n.current=!1,f.current=s.current,v&&(l($=>({...$,[v.id]:s.current})),t(!1),g.dispatchPause()))},[v,g,n,t,l]),k=p?.id,F=i.useCallback($=>{if(!k)return null;n.current||u(P=>{const _=P[k]??window.remotion_initialFrame??0,V=Math.max(0,_-$);return _===V?P:{...P,[k]:V}})},[n,u,k]),I=i.useCallback($=>{if(!k)return null;n.current||u(P=>{const _=P[k]??window.remotion_initialFrame??0,V=Math.min(w,_+$);return _===V?P:{...P,[k]:V}})},[k,n,w,u]),N=i.useCallback($=>{n.current?T():C($)},[n,T,C]),A=i.useCallback(()=>n.current,[n]),M=i.useCallback(()=>f.current,[f]),D=i.useCallback(()=>b.current,[b]);return i.useMemo(()=>({frameBack:F,frameForward:I,isLastFrame:x,emitter:g,playing:e,play:C,pause:T,seek:y,isFirstFrame:E,getCurrentFrame:M,isPlaying:A,isBuffering:D,pauseAndReturnToPlayStart:R,hasPlayed:r,toggle:N}),[g,F,I,r,E,x,M,T,R,C,e,y,N,A,D])},Xd=({browserMediaControlsBehavior:e,videoConfig:t,playbackRate:n})=>{const{playing:r,pause:o,play:a,emitter:s,getCurrentFrame:u,seek:l}=_n(),c=i.useRef(!1);i.useEffect(()=>{r&&(c.current=!0)},[r]),i.useEffect(()=>{navigator.mediaSession&&e.mode!=="do-nothing"&&(r?navigator.mediaSession.playbackState="playing":c.current&&(navigator.mediaSession.playbackState="paused"))},[e.mode,r]),i.useEffect(()=>{if(!navigator.mediaSession||e.mode==="do-nothing")return;const d=()=>{t&&navigator.mediaSession&&navigator.mediaSession.setPositionState({duration:t.durationInFrames/t.fps,playbackRate:n,position:u()/t.fps})};return s.addEventListener("timeupdate",d),()=>{s.removeEventListener("timeupdate",d)}},[e.mode,s,u,n,t]),i.useEffect(()=>{if(navigator.mediaSession&&e.mode!=="do-nothing")return navigator.mediaSession.setActionHandler("play",()=>{e.mode==="register-media-session"&&a()}),navigator.mediaSession.setActionHandler("pause",()=>{e.mode==="register-media-session"&&o()}),navigator.mediaSession.setActionHandler("seekto",d=>{e.mode==="register-media-session"&&d.seekTime!==void 0&&t&&l(Math.round(d.seekTime*t.fps))}),navigator.mediaSession.setActionHandler("seekbackward",()=>{e.mode==="register-media-session"&&t&&l(Math.max(0,Math.round((u()-10)*t.fps)))}),navigator.mediaSession.setActionHandler("seekforward",()=>{e.mode==="register-media-session"&&t&&l(Math.max(t.durationInFrames-1,Math.round((u()+10)*t.fps)))}),navigator.mediaSession.setActionHandler("previoustrack",()=>{e.mode==="register-media-session"&&l(0)}),()=>{navigator.mediaSession.metadata=null,navigator.mediaSession.setActionHandler("play",null),navigator.mediaSession.setActionHandler("pause",null),navigator.mediaSession.setActionHandler("seekto",null),navigator.mediaSession.setActionHandler("seekbackward",null),navigator.mediaSession.setActionHandler("seekforward",null),navigator.mediaSession.setActionHandler("previoustrack",null)}},[e.mode,u,o,a,l,t])},ef=({time:e,currentFrame:t,playbackSpeed:n,fps:r,actualLastFrame:o,actualFirstFrame:a,framesAdvanced:s,shouldLoop:u})=>{const c=(n<0?Math.ceil:Math.floor)(e*n/(1e3/r))-s,d=c+t,m=t>o||t<a,f=d>o||d<a,p=!u&&f&&!m;return n>0?f?{nextFrame:a,framesToAdvance:c,hasEnded:p}:{nextFrame:d,framesToAdvance:c,hasEnded:p}:f?{nextFrame:o,framesToAdvance:c,hasEnded:p}:{nextFrame:d,framesToAdvance:c,hasEnded:p}},Ho=()=>typeof document>"u"?!1:document.visibilityState==="hidden",tf=()=>{const e=i.useRef(Ho());return i.useEffect(()=>{const t=()=>{e.current=Ho()};return document.addEventListener("visibilitychange",t),()=>{document.removeEventListener("visibilitychange",t)}},[]),e},nf=.1,zo=({audioContext:e,audioSyncAnchor:t,absoluteTimeInSeconds:n,globalPlaybackRate:r,logLevel:o,force:a})=>{const s=e.currentTime-n/r,u=s-t.value,{outputLatency:l}=e,c=l===0?.3:l,d=e.baseLatency+c;return Math.abs(u)<nf+d&&!a||Math.abs(u)<Number.EPSILON?!1:(O.Log.verbose({logLevel:o,tag:"audio-scheduling"},"Anchor "+(a?"forcibly ":"")+"changed from %s to %s with shift %s",t.value,s,u),t.value=s,!0)},rf=e=>{if(e==="suspended"||e==="running-to-suspended")return!0;if(e==="closed"||e==="interrupted"||e==="running"||e==="suspended-to-running")return!1;throw new Error(`Unexpected audio context state: ${e}`)},of=({loop:e,playbackRate:t,moveToBeginningWhenEnded:n,inFrame:r,outFrame:o,browserMediaControlsBehavior:a,getCurrentFrame:s,muted:u})=>{const l=O.useUnsafeVideoConfig(),c=O.Timeline.useTimelinePosition(),{playing:d,pause:m,emitter:f,isPlaying:p}=_n(),v=O.Timeline.useTimelineSetFrame(),g=i.useContext(O.SharedAudioContext),w=O.useLogLevel(),x=tf(),E=i.useRef(0),S=i.useContext(O.BufferingContextReact);if(!S)throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");Xd({browserMediaControlsBehavior:a,playbackRate:t,videoConfig:l}),i.useLayoutEffect(()=>{if(!g||!g.audioContext||!l||u)return;zo({audioContext:g.audioContext,audioSyncAnchor:g.audioSyncAnchor,absoluteTimeInSeconds:c/l.fps,globalPlaybackRate:t,logLevel:w,force:!1})&&g.audioSyncAnchorEmitter.dispatch("changed")},[l,c,w,t,g,u]),i.useLayoutEffect(()=>{const b=g?.audioContext;if(!b||!l||u)return;const y=()=>{const C=g?.getAudioContextState();C&&rf(C)&&zo({audioContext:b,audioSyncAnchor:g.audioSyncAnchor,absoluteTimeInSeconds:s()/l.fps,globalPlaybackRate:t,logLevel:w,force:!0})};return b?.addEventListener("statechange",y),()=>{b?.removeEventListener("statechange",y)}},[l,s,w,u,t,g]),i.useEffect(()=>{if(!l)return;if(!d){g?.suspend?.();return}let b=!1,y=null,C=performance.now(),T=0;const R=()=>{y!==null&&(y.type==="raf"?cancelAnimationFrame(y.id):clearTimeout(y.id))},k=()=>{b=!0,R()},F=()=>{if(b)return;if(!p()){g?.suspend?.();return}!u&&!S.buffering.current&&g?.resume?.();const A=performance.now()-C,M=o??l.durationInFrames-1,D=r??0,q=s(),{nextFrame:$,framesToAdvance:P,hasEnded:_}=ef({time:A,currentFrame:q,playbackSpeed:t,fps:l.fps,actualFirstFrame:D,actualLastFrame:M,framesAdvanced:T,shouldLoop:e});if(T+=P,$!==s()&&(!_||n)&&!S.buffering.current&&v(V=>({...V,[l.id]:$})),_){k(),m(),f.dispatchEnded();return}I()},I=()=>{const A=g?.getIsResumingAudioContext?.()??null;if(A!==null&&!u){A.then(()=>{C=performance.now(),T=0,I()});return}if(S.buffering.current){u||g?.suspend?.();const M=S.listenForResume(()=>{M.remove(),C=performance.now(),T=0,I()});return}if(x.current){y={type:"timeout",id:setTimeout(F,1e3/l.fps)};return}y={type:"raf",id:requestAnimationFrame(F)}};I();const N=()=>{document.visibilityState!=="visible"&&(R(),F())};return window.addEventListener("visibilitychange",N),()=>{window.removeEventListener("visibilitychange",N),k()}},[l,e,m,d,v,f,t,r,o,n,x,s,S,p,g,w,u]),i.useEffect(()=>{const b=performance.now(),y=b-E.current;if(y>=250){f.dispatchTimeUpdate({frame:c}),E.current=b;return}const C=setTimeout(()=>{f.dispatchTimeUpdate({frame:c}),E.current=performance.now()},250-y);return()=>clearTimeout(C)},[f,c]),i.useEffect(()=>{f.dispatchFrameUpdate({frame:c})},[f,c])},Zn=[],Qn=e=>e?"current"in e?e.current:e:null,Yr=(e,t)=>{const[n,r]=i.useState(()=>{const s=Qn(e);if(!s)return null;const u=s.getClientRects();return u[0]?{width:u[0].width,height:u[0].height,left:u[0].x,top:u[0].y,windowSize:{height:window.innerHeight,width:window.innerWidth}}:null}),o=i.useMemo(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(s=>{const{contentRect:u,target:l}=s[0],c=l.getClientRects();if(!c?.[0]){r(null);return}const d=u.width===0?1:c[0].width/u.width,m=u.height===0?1:c[0].height/u.height,f=t.shouldApplyCssTransforms||d===0?c[0].width:c[0].width*(1/d),p=t.shouldApplyCssTransforms||m===0?c[0].height:c[0].height*(1/m);r(v=>v&&v.width===f&&v.height===p&&v.left===c[0].x&&v.top===c[0].y&&v.windowSize.height===window.innerHeight&&v.windowSize.width===window.innerWidth?v:{width:f,height:p,left:c[0].x,top:c[0].y,windowSize:{height:window.innerHeight,width:window.innerWidth}})}),[t.shouldApplyCssTransforms]),a=i.useCallback(()=>{const s=Qn(e);if(!s)return;const u=s.getClientRects();if(!u[0]){r(null);return}r(l=>l&&l.width===u[0].width&&l.height===u[0].height&&l.left===u[0].x&&l.top===u[0].y&&l.windowSize.height===window.innerHeight&&l.windowSize.width===window.innerWidth?l:{width:u[0].width,height:u[0].height,left:u[0].x,top:u[0].y,windowSize:{height:window.innerHeight,width:window.innerWidth}})},[e]);return i.useEffect(()=>{a()},[a]),i.useEffect(()=>{if(!o)return;const s=Qn(e);return s&&o.observe(s),()=>{s&&o.unobserve(s)}},[o,e]),i.useEffect(()=>{if(t.triggerOnWindowResize)return window.addEventListener("resize",a),()=>{window.removeEventListener("resize",a)}},[t.triggerOnWindowResize,a]),i.useEffect(()=>(Zn.push(a),()=>{Zn=Zn.filter(s=>s!==a)}),[a]),i.useMemo(()=>n?{...n,refresh:a}:null,[n,a])},Jr=e=>e??"__remotion-player",af={display:"flex",justifyContent:"center",alignItems:"center",flex:1,height:"100%",width:"100%"};class Ja extends j.Component{state={hasError:null};static getDerivedStateFromError(t){return{hasError:t}}componentDidCatch(t){this.props.onError(t)}render(){return this.state.hasError?h.jsx("div",{style:af,children:this.props.errorFallback({error:this.state.hasError})}):this.props.children}}var sf=async()=>{if(typeof window>"u"||typeof window.crypto>"u"||typeof window.crypto.subtle>"u")return null;try{const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(window.location.hostname));return Array.from(new Uint8Array(e)).map(t=>t.toString(16).padStart(2,"0")).join("")}catch{return null}},Xn={backgroundColor:"red",position:"absolute",padding:12,fontFamily:"Arial"},uf=["28d262b44cc61fa750f1686b16ad0604dabfe193fbc263eec05c89b7ad4c2cd6","4db1b0a94be33165dfefcb3ba03d04c7a2666dd27c496d3dc9fa41858e94925e","fbc48530bbf245da790f63675e84e06bab38c3b114fab07eb350025119922bdc","7baf10a8932757b1b3a22b3fce10a048747ac2f8eaf638603487e3705b07eb83","8a6c21a598d8c667272b5207c051b85997bf5b45d5fb712378be3f27cd72c6a6","a2f7aaac9c50a9255e7fc376110c4e0bfe153722dc66ed3c5d3bf2a135f65518"],Wo=!1,lf=()=>{const[e,t]=j.useState(!1);return i.useEffect(()=>{Wo||(Wo=!0,sf().then(n=>{n&&uf.includes(n)&&t(!0)}).catch(()=>{}))},[]),i.useEffect(()=>{if(!e)return;const n=()=>{if(!document.querySelector(".warning-banner")){const a=document.createElement("div");a.className="warning-banner",Object.assign(a.style,Xn,{zIndex:"9999",cssText:`${Xn.cssText} !important;`}),a.innerHTML=`
71
+ <a href="https://github.com/remotion-dev/remotion/pull/4589" style="color: white;">
72
+ Remotion Unlicensed – Contact hi@remotion.dev
73
+ </a>
74
+ `,document.body.appendChild(a)}},r=new MutationObserver(()=>n());return r.observe(document.body,{childList:!0,subtree:!0}),()=>{r.disconnect()}},[e]),e?h.jsx("div",{style:Xn,className:"warning-banner",children:h.jsx("a",{style:{color:"white"},href:"https://github.com/remotion-dev/remotion/pull/4589",children:"Remotion Unlicensed – Contact hi@remotion.dev"})}):null},Ko=({playing:e,buffering:t})=>e&&t?h.jsx(Gd,{type:"player"}):e?h.jsx(Ud,{}):h.jsx(Bd,{}),rt=12,Go=5,cf=({volume:e,isVertical:t,onBlur:n,inputRef:r,setVolume:o})=>{const a=i.useMemo(()=>{const f={paddingLeft:5,height:ae,width:We,display:"inline-flex",alignItems:"center"};return t?{...f,position:"absolute",transform:`rotate(-90deg) translateX(${We/2+ae/2}px)`}:{...f}},[t]),s=typeof j.useId>"u"?"volume-slider":j.useId(),[u]=i.useState(()=>`__remotion-volume-slider-${Je(s)}`.replace(".","")),l=i.useCallback(m=>{o(parseFloat(m.target.value))},[o]),c=i.useMemo(()=>{const m={WebkitAppearance:"none",backgroundColor:"rgba(255, 255, 255, 0.5)",borderRadius:Go/2,cursor:"pointer",height:Go,width:We,backgroundImage:`linear-gradient(
75
+ to right,
76
+ white ${e*100}%, rgba(255, 255, 255, 0) ${e*100}%
77
+ )`};return t?{...m,bottom:ae+We/2}:m},[t,e]),d=`
78
+ .${u}::-webkit-slider-thumb {
79
+ -webkit-appearance: none;
80
+ background-color: white;
81
+ border-radius: ${rt/2}px;
82
+ box-shadow: 0 0 2px black;
83
+ height: ${rt}px;
84
+ width: ${rt}px;
85
+ }
86
+
87
+ .${u}::-moz-range-thumb {
88
+ -webkit-appearance: none;
89
+ background-color: white;
90
+ border-radius: ${rt/2}px;
91
+ box-shadow: 0 0 2px black;
92
+ height: ${rt}px;
93
+ width: ${rt}px;
94
+ }
95
+ `;return h.jsxs("div",{style:a,children:[h.jsx("style",{dangerouslySetInnerHTML:{__html:d}}),h.jsx("input",{ref:r,"aria-label":"Change volume",className:u,max:1,min:0,onBlur:n,onChange:l,step:.01,type:"range",value:e,style:c})]})},df=e=>h.jsx(cf,{...e}),We=100,ff=({displayVerticalVolumeSlider:e,renderMuteButton:t,renderVolumeSlider:n})=>{const[r,o]=O.usePlayerMutedState(),[a,s]=O.useMediaVolumeState(),[u,l]=i.useState(!1),c=i.useRef(null),d=i.useRef(null),m=Gr(c,!1),f=i.useCallback(()=>{setTimeout(()=>{d.current&&document.activeElement!==d.current&&l(!1)},10)},[]),p=a===0,v=i.useCallback(()=>{if(p){s(1),o(!1);return}o(b=>!b)},[p,o,s]),g=i.useMemo(()=>({display:"inline-flex",background:"none",border:"none",justifyContent:"center",alignItems:"center",touchAction:"none",...e&&{position:"relative"}}),[e]),w=i.useMemo(()=>({display:"inline",width:ae,height:ae,cursor:"pointer",appearance:"none",background:"none",border:"none",padding:0}),[]),x=i.useCallback(({muted:b,volume:y})=>{const C=b||y===0;return h.jsx("button",{"aria-label":C?"Unmute sound":"Mute sound",title:C?"Unmute sound":"Mute sound",onClick:v,onBlur:f,onFocus:()=>l(!0),style:w,type:"button",children:C?h.jsx(Hd,{}):h.jsx(zd,{})})},[f,v,w]),E=i.useMemo(()=>t?t({muted:r,volume:a}):x({muted:r,volume:a}),[r,a,x,t]),S=i.useMemo(()=>(u||m)&&!r&&!O.isIosSafari()?(n??df)({isVertical:e,volume:a,onBlur:()=>l(!1),inputRef:d,setVolume:s}):null,[e,u,m,r,a,n,s]);return h.jsxs("div",{ref:c,style:g,children:[E,S]})};function mf(e){const[t,n]=i.useState(e),r=i.useRef(null);return i.useEffect(()=>{const o=a=>{r.current&&!r.current.contains(a.target)&&n(!1)};return document.addEventListener("pointerup",o,!0),()=>{document.removeEventListener("pointerup",o,!0)}},[]),{ref:r,isComponentVisible:t,setIsComponentVisible:n}}var pf=35,hf=70,gf={height:30,paddingRight:15,paddingLeft:12,display:"flex",flexDirection:"row",alignItems:"center"},vf={width:22,display:"flex",alignItems:"center"},yf={width:14,height:14,color:"black"},wf=()=>h.jsx("svg",{viewBox:"0 0 512 512",style:yf,children:h.jsx("path",{fill:"currentColor",d:"M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z"})}),bf=e=>{const t=e.toString();return t.includes(".")?t:t+".0"},xf=({rate:e,onSelect:t,selectedRate:n,keyboardSelectedRate:r})=>{const o=i.useCallback(m=>{m.stopPropagation(),m.preventDefault(),t(e)},[t,e]),[a,s]=i.useState(!1),u=i.useCallback(()=>{s(!0)},[]),l=i.useCallback(()=>{s(!1)},[]),c=r===e,d=i.useMemo(()=>({...gf,backgroundColor:a||c?"#eee":"transparent"}),[a,c]);return h.jsxs("div",{onPointerEnter:u,onPointerLeave:l,tabIndex:0,style:d,onClick:o,children:[h.jsx("div",{style:vf,children:e===n?h.jsx(wf,{}):null}),bf(e),"x"]},e)},Cf=({setIsComponentVisible:e,playbackRates:t,canvasSize:n})=>{const{setPlaybackRate:r,playbackRate:o}=O.usePlaybackRate(),[a,s]=i.useState(o);i.useEffect(()=>{const c=d=>{if(d.preventDefault(),d.key==="ArrowUp"){const m=t.findIndex(f=>f===a);if(m===0)return;s(m===-1?t[0]:t[m-1])}else if(d.key==="ArrowDown"){const m=t.findIndex(f=>f===a);if(m===t.length-1)return;s(m===-1?t[t.length-1]:t[m+1])}else d.key==="Enter"&&(r(a),e(!1))};return window.addEventListener("keydown",c),()=>{window.removeEventListener("keydown",c)}},[t,a,r,e]);const u=i.useCallback(c=>{r(c),e(!1)},[e,r]),l=i.useMemo(()=>({position:"absolute",right:0,width:125,maxHeight:n.height-hf-pf,bottom:35,background:"#fff",borderRadius:4,overflow:"auto",color:"black",textAlign:"left"}),[n.height]);return h.jsx("div",{style:l,children:t.map(c=>h.jsx(xf,{selectedRate:o,onSelect:u,rate:c,keyboardSelectedRate:a},c))})},Ef={fontSize:13,fontWeight:"bold",color:"white",border:"2px solid white",borderRadius:20,paddingLeft:8,paddingRight:8,paddingTop:2,paddingBottom:2},pr={appearance:"none",backgroundColor:"transparent",border:"none",cursor:"pointer",paddingLeft:0,paddingRight:0,paddingTop:6,paddingBottom:6,height:37,display:"inline-flex",marginBottom:0,marginTop:0,alignItems:"center"},Sf={...pr,position:"relative"},Tf=({playbackRates:e,canvasSize:t})=>{const{ref:n,isComponentVisible:r,setIsComponentVisible:o}=mf(!1),{playbackRate:a}=O.usePlaybackRate(),s=i.useCallback(u=>{u.stopPropagation(),u.preventDefault(),o(l=>!l)},[o]);return h.jsx("div",{ref:n,children:h.jsxs("button",{type:"button","aria-label":"Change playback rate",style:Sf,onClick:s,children:[h.jsxs("div",{style:Ef,children:[a,"x"]}),r&&h.jsx(Cf,{canvasSize:t,playbackRates:e,setIsComponentVisible:o})]})})},Yo=(e,t,n)=>Math.round(Ot(e,[0,n],[0,t-1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"})),at=5,Rt=12,hr=4,Rf={userSelect:"none",WebkitUserSelect:"none",paddingTop:hr,paddingBottom:hr,boxSizing:"border-box",cursor:"pointer",position:"relative",touchAction:"none"},kf={height:at,backgroundColor:"rgba(255, 255, 255, 0.25)",width:"100%",borderRadius:at/2},If=e=>{let t=e;for(;t.parentElement;)t=t.parentElement;return t},Ff=({durationInFrames:e,onSeekEnd:t,onSeekStart:n,inFrame:r,outFrame:o})=>{const a=i.useRef(null),s=Gr(a,!1),u=Yr(a,{triggerOnWindowResize:!0,shouldApplyCssTransforms:!0}),{seek:l,play:c,pause:d,playing:m}=_n(),f=O.Timeline.useTimelinePosition(),[p,v]=i.useState({dragging:!1}),g=u?.width??0,w=i.useCallback(C=>{if(C.button!==0)return;const T=a.current?.getBoundingClientRect().left,R=Yo(C.clientX-T,e,g);d(),l(R),v({dragging:!0,wasPlaying:m}),n()},[e,g,d,l,m,n]),x=i.useCallback(C=>{if(!u)throw new Error("Player has no size");if(!p.dragging)return;const T=a.current?.getBoundingClientRect().left,R=Yo(C.clientX-T,e,u.width);l(R)},[p.dragging,e,l,u]),E=i.useCallback(()=>{v({dragging:!1}),p.dragging&&(p.wasPlaying?c():d(),t())},[p,t,d,c]);i.useEffect(()=>{if(!p.dragging)return;const C=If(a.current);return C.addEventListener("pointermove",x),C.addEventListener("pointerup",E),()=>{C.removeEventListener("pointermove",x),C.removeEventListener("pointerup",E)}},[p.dragging,x,E]);const S=i.useMemo(()=>({height:Rt,width:Rt,borderRadius:Rt/2,position:"absolute",top:hr-Rt/2+5/2,backgroundColor:"white",left:Math.max(0,f/Math.max(1,e-1)*g-Rt/2),boxShadow:"0 0 2px black",opacity:Number(s||p.dragging)}),[s,p.dragging,e,f,g]),b=i.useMemo(()=>({height:at,backgroundColor:"rgba(255, 255, 255, 1)",width:(f-(r??0))/(e-1)*g,marginLeft:(r??0)/(e-1)*g,borderRadius:at/2}),[e,f,r,g]),y=i.useMemo(()=>({height:at,backgroundColor:"rgba(255, 255, 255, 0.25)",width:((o??e-1)-(r??0))/(e-1)*100+"%",marginLeft:(r??0)/(e-1)*100+"%",borderRadius:at/2,position:"absolute"}),[e,r,o]);return h.jsxs("div",{ref:a,onPointerDown:w,style:Rf,children:[h.jsxs("div",{style:kf,children:[h.jsx("div",{style:y}),h.jsx("div",{style:b})]}),h.jsx("div",{style:S})]})},Jo=e=>{const t=Math.floor(e/60),n=Math.floor(e-t*60);return`${String(t)}:${String(n).padStart(2,"0")}`},Pf=({durationInFrames:e,maxTimeLabelWidth:t,fps:n})=>{const r=O.Timeline.useTimelinePosition(),o=i.useMemo(()=>({color:"white",fontFamily:"sans-serif",fontSize:14,maxWidth:t===null?void 0:t,overflow:"hidden",textOverflow:"ellipsis"}),[t]),s=r===e-1?r+1:r;return h.jsxs("div",{style:o,children:[Jo(s/n)," / ",Jo(e/n)]})},Mf=10,gr=12,Nf=({allowFullscreen:e,playerWidth:t})=>i.useMemo(()=>{const r=ae,o=ae,a=e?mr:0,s=o+r+a+gr*2+Mf*2,u=t-s,l=Math.max(u,0),c=l-We,m=(c<We?l:c)+s+We,f=t<m;return{maxTimeLabelWidth:l===0?null:l,displayVerticalVolumeSlider:f}},[e,t]),$f=[0,.013,.049,.104,.175,.259,.352,.45,.55,.648,.741,.825,.896,.951,.987],Af=[0,8.1,15.5,22.5,29,35.3,41.2,47.1,52.9,58.8,64.7,71,77.5,84.5,91.9],Lf=1/.7,Vf={boxSizing:"border-box",position:"absolute",bottom:0,width:"100%",paddingTop:40,paddingBottom:10,backgroundImage:`linear-gradient(to bottom,${$f.map((e,t)=>`hsla(0, 0%, 0%, ${e}) ${Af[t]*Lf}%`).join(", ")}, hsl(0, 0%, 0%) 100%)`,backgroundSize:"auto 145px",display:"flex",paddingRight:gr,paddingLeft:gr,flexDirection:"column",transition:"opacity 0.3s"},jf={display:"flex",flexDirection:"row",width:"100%",alignItems:"center",justifyContent:"center",userSelect:"none",WebkitUserSelect:"none"},_f={display:"flex",flexDirection:"row",userSelect:"none",WebkitUserSelect:"none",alignItems:"center"},kt={width:12},Of={height:8},Df={flex:1},Bf={},Uf=({durationInFrames:e,isFullscreen:t,fps:n,showVolumeControls:r,onFullscreenButtonClick:o,allowFullscreen:a,onExitFullscreenButtonClick:s,spaceKeyToPlayOrPause:u,onSeekEnd:l,onSeekStart:c,inFrame:d,outFrame:m,initiallyShowControls:f,canvasSize:p,renderPlayPauseButton:v,renderFullscreenButton:g,alwaysShowControls:w,showPlaybackRateControl:x,containerRef:E,buffering:S,hideControlsWhenPointerDoesntMove:b,onPointerDown:y,onDoubleClick:C,renderMuteButton:T,renderVolumeSlider:R,playing:k,toggle:F,renderCustomControls:I})=>{const N=i.useRef(null),[A,M]=i.useState(!1),D=Gr(E,b),{maxTimeLabelWidth:q,displayVerticalVolumeSlider:$}=Nf({allowFullscreen:a,playerWidth:p?.width??0}),[P,_]=i.useState(()=>{if(typeof f=="boolean")return f;if(typeof f=="number"){if(f%1!==0)throw new Error("initiallyShowControls must be an integer or a boolean");if(Number.isNaN(f))throw new Error("initiallyShowControls must not be NaN");if(!Number.isFinite(f))throw new Error("initiallyShowControls must be finite");if(f<=0)throw new Error("initiallyShowControls must be a positive integer");return f}throw new TypeError("initiallyShowControls must be a number or a boolean")}),V=i.useMemo(()=>({...Vf,opacity:Number(D||!k||P||w)}),[D,P,k,w]);i.useEffect(()=>{N.current&&u&&N.current.focus({preventScroll:!0})},[k,u]),i.useEffect(()=>{M((typeof document<"u"&&(document.fullscreenEnabled||document.webkitFullscreenEnabled))??!1)},[]),i.useEffect(()=>{if(P===!1)return;const Y=setTimeout(()=>{_(!1)},P===!0?2e3:P);return()=>{clearInterval(Y)}},[P]);const W=i.useMemo(()=>{if(x===!0)return[.5,.8,1,1.2,1.5,1.8,2,2.5,3];if(Array.isArray(x)){for(const z of x){if(typeof z!="number")throw new Error("Every item in showPlaybackRateControl must be a number");if(z<=0)throw new Error("Every item in showPlaybackRateControl must be positive")}return x}return null},[x]),K=I?I():null,L=i.useRef(null),H=i.useRef(null),U=i.useCallback(z=>{(z.target===L.current||z.target===H.current)&&y?.(z)},[y]),G=i.useCallback(z=>{(z.target===L.current||z.target===H.current)&&C?.(z)},[C]);return h.jsxs("div",{ref:L,style:V,onPointerDown:U,onDoubleClick:G,children:[h.jsxs("div",{ref:H,style:jf,children:[h.jsxs("div",{style:_f,children:[h.jsx("button",{ref:N,type:"button",style:pr,onClick:F,"aria-label":k?"Pause video":"Play video",title:k?"Pause video":"Play video",children:v===null?h.jsx(Ko,{buffering:S,playing:k}):v({playing:k,isBuffering:S})??h.jsx(Ko,{buffering:S,playing:k})}),r?h.jsxs(h.Fragment,{children:[h.jsx("div",{style:kt}),h.jsx(ff,{renderMuteButton:T,renderVolumeSlider:R,displayVerticalVolumeSlider:$})]}):null,h.jsx("div",{style:kt}),h.jsx(Pf,{durationInFrames:e,fps:n,maxTimeLabelWidth:q}),h.jsx("div",{style:kt})]}),h.jsx("div",{style:Df}),K,K&&W&&p?h.jsx("div",{style:kt}):null,W&&p&&h.jsx(Tf,{canvasSize:p,playbackRates:W}),W&&A&&a?h.jsx("div",{style:kt}):null,h.jsx("div",{style:Bf,children:A&&a?h.jsx("button",{type:"button","aria-label":t?"Exit fullscreen":"Enter Fullscreen",title:t?"Exit fullscreen":"Enter Fullscreen",style:pr,onClick:t?s:o,children:g===null?h.jsx(qd,{isFullscreen:t}):g({isFullscreen:t})}):null})]}),h.jsx("div",{style:Of}),h.jsx(Ff,{onSeekEnd:l,onSeekStart:c,durationInFrames:e,inFrame:d,outFrame:m})]})},Za=typeof document>"u",qf=e=>{let t=!1;return{promise:new Promise((r,o)=>{e.then(a=>{if(t){o({isCanceled:t,value:a});return}r(a)}).catch(a=>{o({isCanceled:t,error:a})})}),cancel:()=>{t=!0}}},Hf=e=>new Promise(t=>setTimeout(t,e)),zf=()=>{const e=i.useRef([]),t=i.useCallback(a=>{e.current=[...e.current,a]},[]),n=i.useCallback(a=>{e.current=e.current.filter(s=>s!==a)},[]),r=i.useCallback(()=>e.current.map(a=>a.cancel()),[]);return i.useMemo(()=>({appendPendingPromise:t,removePendingPromise:n,clearPendingPromises:r}),[t,r,n])},Wf=(e,t,n)=>{const r=zf(),o=i.useCallback(async l=>{if(l instanceof PointerEvent?l.pointerType==="touch":l.nativeEvent.pointerType==="touch"){e(l);return}r.clearPendingPromises();const c=qf(Hf(200));r.appendPendingPromise(c);try{await c.promise,r.removePendingPromise(c),e(l)}catch(d){const m=d;if(r.removePendingPromise(c),!m.isCanceled)throw m.error}},[r,e]),a=i.useCallback(()=>{document.addEventListener("pointerup",l=>{o(l)},{once:!0})},[o]),s=i.useCallback(()=>{r.clearPendingPromises(),t()},[r,t]);return i.useMemo(()=>n?{handlePointerDown:a,handleDoubleClick:s}:{handlePointerDown:e,handleDoubleClick:()=>{}},[n,s,a,e])},vr=j.version.split(".")[0];if(vr==="0")throw new Error(`Version ${vr} of "react" is not supported by Remotion`);var Kf=parseInt(vr,10)>=18,Gf=({controls:e,style:t,loop:n,autoPlay:r,allowFullscreen:o,inputProps:a,clickToPlay:s,showVolumeControls:u,doubleClickToFullscreen:l,spaceKeyToPlayOrPause:c,errorFallback:d,playbackRate:m,renderLoading:f,renderPoster:p,className:v,moveToBeginningWhenEnded:g,showPosterWhenUnplayed:w,showPosterWhenEnded:x,showPosterWhenPaused:E,showPosterWhenBuffering:S,showPosterWhenBufferingAndPaused:b,inFrame:y,outFrame:C,initiallyShowControls:T,renderFullscreen:R,renderPlayPauseButton:k,renderMuteButton:F,renderVolumeSlider:I,renderCustomControls:N,alwaysShowControls:A,showPlaybackRateControl:M,posterFillMode:D,bufferStateDelayInMilliseconds:q,hideControlsWhenPointerDoesntMove:$,overflowVisible:P,browserMediaControlsBehavior:_,overrideInternalClassName:V,noSuspense:W},K)=>{const L=O.useUnsafeVideoConfig(),H=O.useVideo(),U=i.useRef(null),G=Yr(U,{triggerOnWindowResize:!1,shouldApplyCssTransforms:!1}),[z,Y]=i.useState(!1),[ee,te]=i.useState(r),[se,ue]=i.useState(()=>!1),[Te,ie]=i.useState(!1),Z=i.useMemo(()=>typeof document>"u"?!1:!!(document.fullscreenEnabled||document.webkitFullscreenEnabled),[]),B=_n(),de=B.toggle,{playerMuted:De,mediaVolume:be}=i.useContext(O.MediaVolumeContext);i.useEffect(()=>{B.emitter.dispatchVolumeChange(be)},[B.emitter,be]);const pe=De||be===0;i.useEffect(()=>{B.emitter.dispatchMuteChange({isMuted:pe})},[B.emitter,pe]),of({loop:n,playbackRate:m,moveToBeginningWhenEnded:g,inFrame:y,outFrame:C,getCurrentFrame:B.getCurrentFrame,browserMediaControlsBehavior:_,muted:pe}),i.useEffect(()=>{z&&!B.playing&&(Y(!1),B.play())},[z,B]),i.useEffect(()=>{const{current:Q}=U;if(!Q)return;const X=()=>{const xe=document.fullscreenElement===Q||document.webkitFullscreenElement===Q;ue(xe)};return document.addEventListener("fullscreenchange",X),document.addEventListener("webkitfullscreenchange",X),()=>{document.removeEventListener("fullscreenchange",X),document.removeEventListener("webkitfullscreenchange",X)}},[]);const Re=i.useCallback(Q=>{de(Q)},[de]),ke=i.useCallback(()=>{if(!o)throw new Error("allowFullscreen is false");if(!Z)throw new Error("Browser doesnt support fullscreen");if(!U.current)throw new Error("No player ref found");U.current.webkitRequestFullScreen?U.current.webkitRequestFullScreen():U.current.requestFullscreen()},[o,Z]),he=i.useCallback(()=>{document.webkitExitFullscreen?document.webkitExitFullscreen():document.exitFullscreen()},[]);i.useEffect(()=>{const{current:Q}=U;if(!Q)return;const X=()=>{const xe=document.webkitFullscreenElement??document.fullscreenElement;xe&&xe===U.current?B.emitter.dispatchFullscreenChange({isFullscreen:!0}):B.emitter.dispatchFullscreenChange({isFullscreen:!1})};return Q.addEventListener("webkitfullscreenchange",X),Q.addEventListener("fullscreenchange",X),()=>{Q.removeEventListener("webkitfullscreenchange",X),Q.removeEventListener("fullscreenchange",X)}},[B.emitter]);const Ae=L?.durationInFrames??1,ve=i.useMemo(()=>!L||!G?null:qa({canvasSize:G,compositionHeight:L.height,compositionWidth:L.width,previewSize:"auto"}),[G,L]),fe=ve?.scale??1,Ie=i.useRef(!1);i.useEffect(()=>{if(!Ie.current){Ie.current=!0;return}B.emitter.dispatchScaleChange(fe)},[B.emitter,fe]);const{setMediaVolume:Le,setPlayerMuted:wt}=i.useContext(O.SetMediaVolumeContext),[Be,et]=i.useState(!1);i.useEffect(()=>{let Q=null,X=!1;const xe=()=>{X=!1,requestAnimationFrame(()=>{q===0?et(!0):Q=setTimeout(()=>{X||et(!0)},q)})},tt=()=>{requestAnimationFrame(()=>{X=!0,et(!1),Q&&clearTimeout(Q)})};return B.emitter.addEventListener("waiting",xe),B.emitter.addEventListener("resume",tt),()=>{B.emitter.removeEventListener("waiting",xe),B.emitter.removeEventListener("resume",tt),et(!1),Q&&clearTimeout(Q),X=!0}},[q,B.emitter]),i.useImperativeHandle(K,()=>{const Q={play:B.play,pause:()=>{Y(!1),B.pause()},toggle:Re,getContainerNode:()=>U.current,getCurrentFrame:B.getCurrentFrame,isPlaying:B.isPlaying,seekTo:X=>{const xe=Ae-1,tt=Math.max(0,Math.min(xe,X));B.isPlaying()&&(Y(tt!==xe||n),B.pause()),tt===xe&&!n&&B.emitter.dispatchEnded(),B.seek(tt)},isFullscreen:()=>{const{current:X}=U;return X?document.fullscreenElement===X||document.webkitFullscreenElement===X:!1},requestFullscreen:ke,exitFullscreen:he,getVolume:()=>De?0:be,setVolume:X=>{if(typeof X!="number")throw new TypeError(`setVolume() takes a number, got value of type ${typeof X}`);if(isNaN(X))throw new TypeError("setVolume() got a number that is NaN. Volume must be between 0 and 1.");if(X<0||X>1)throw new TypeError(`setVolume() got a number that is out of range. Must be between 0 and 1, got ${X}`);Le(X)},isMuted:()=>pe,mute:()=>{wt(!0)},unmute:()=>{wt(!1)},getScale:()=>fe,pauseAndReturnToPlayStart:()=>{B.pauseAndReturnToPlayStart()}};return Object.assign(B.emitter,Q)},[Ae,he,n,De,pe,be,B,ke,wt,Le,Re,fe]);const bt=H?H.component:null,Fe=i.useMemo(()=>Ha({canvasSize:G,config:L,style:t,overflowVisible:P,layout:ve}),[G,L,ve,P,t]),On=i.useMemo(()=>Wa({config:L,layout:ve,scale:fe,overflowVisible:P}),[L,ve,P,fe]),es=i.useMemo(()=>za({config:L,layout:ve,scale:fe,overflowVisible:P}),[L,ve,P,fe]),Qr=B.pause,Xr=B.emitter.dispatchError,ts=i.useCallback(Q=>{Qr(),Xr(Q)},[Xr,Qr]),ns=i.useCallback(Q=>{Q.stopPropagation(),ke()},[ke]),rs=i.useCallback(Q=>{Q.stopPropagation(),he()},[he]),os=i.useCallback(Q=>{(Q instanceof MouseEvent?Q.button===2:Q.nativeEvent.button)||Re(Q)},[Re]),is=i.useCallback(()=>{ie(!0)},[]),as=i.useCallback(()=>{ie(!1)},[]),ss=i.useCallback(()=>{se?he():ke()},[he,se,ke]),{handlePointerDown:zt,handleDoubleClick:Wt}=Wf(os,ss,l&&o&&Z);i.useEffect(()=>{ee&&(B.play(),te(!1))},[ee,B]);const us=i.useMemo(()=>f?f({height:Fe.height,width:Fe.width,isBuffering:Be}):null,[Fe.height,Fe.width,f,Be]),ls=i.useMemo(()=>({type:"scale",scale:fe}),[fe]);if(!L)return null;const Kt=p?p({height:D==="player-size"?Fe.height:L.height,width:D==="player-size"?Fe.width:L.width,isBuffering:Be}):null;if(Kt===void 0)throw new TypeError("renderPoster() must return a React element, but undefined was returned");const eo=Kt&&[E&&!B.isPlaying()&&!Te,x&&B.isLastFrame&&!B.isPlaying(),w&&!B.hasPlayed&&!B.isPlaying(),S&&Be&&B.isPlaying(),b&&Be&&!B.isPlaying()].some(Boolean),{left:xm,top:Cm,width:Em,height:Sm,...cs}=On,to=h.jsxs(h.Fragment,{children:[h.jsxs("div",{style:On,onPointerDown:s?zt:void 0,onDoubleClick:l?Wt:void 0,children:[h.jsxs("div",{style:es,className:Jr(V),children:[bt?h.jsx(Ja,{onError:ts,errorFallback:d,children:h.jsx(O.CurrentScaleContext.Provider,{value:ls,children:h.jsx(bt,{...H?.props??{},...a??{}})})}):null,eo&&D==="composition-size"?h.jsx("div",{style:{...cs,width:L.width,height:L.height},onPointerDown:s?zt:void 0,onDoubleClick:l?Wt:void 0,children:Kt}):null]}),h.jsx(lf,{})]}),eo&&D==="player-size"?h.jsx("div",{style:On,onPointerDown:s?zt:void 0,onDoubleClick:l?Wt:void 0,children:Kt}):null,e?h.jsx(Uf,{fps:L.fps,playing:B.playing,toggle:B.toggle,durationInFrames:L.durationInFrames,containerRef:U,onFullscreenButtonClick:ns,isFullscreen:se,allowFullscreen:o,showVolumeControls:u,onExitFullscreenButtonClick:rs,spaceKeyToPlayOrPause:c,onSeekEnd:as,onSeekStart:is,inFrame:y,outFrame:C,initiallyShowControls:T,canvasSize:G,renderFullscreenButton:R,renderPlayPauseButton:k,alwaysShowControls:A,showPlaybackRateControl:M,buffering:Be,hideControlsWhenPointerDoesntMove:$,onDoubleClick:l?Wt:void 0,onPointerDown:s?zt:void 0,renderMuteButton:F,renderVolumeSlider:I,renderCustomControls:N}):null]});return W||Za&&!Kf?h.jsx("div",{ref:U,style:Fe,className:v,children:to}):h.jsx("div",{ref:U,style:Fe,className:v,children:h.jsx(i.Suspense,{fallback:us,children:to})})},Yf=i.forwardRef(Gf),Qa="remotion.volumePreference",Jf=(e,t,n)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(n??Qa,String(e))}catch(r){O.Log.error({logLevel:t,tag:null},"Could not persist volume",r)}},Zf=e=>{if(typeof window>"u")return 1;try{const t=window.localStorage.getItem(e??Qa);return t?Number(t):1}catch{return 1}},Zr="player-comp",Xa=({children:e,timelineContext:t,playbackRateContext:n,fps:r,compositionHeight:o,compositionWidth:a,durationInFrames:s,component:u,numberOfSharedAudioTags:l,initiallyMuted:c,logLevel:d,audioLatencyHint:m,sampleRate:f,volumePersistenceKey:p,initialVolume:v,inputProps:g,audioEnabled:w})=>{const x=v===void 0,E=i.useMemo(()=>({compositions:[{component:u,durationInFrames:s,height:o,width:a,fps:r,id:Zr,nonce:[[0,777]],folderName:null,parentFolderName:null,schema:null,calculateMetadata:null,stack:null}],folders:[],currentCompositionMetadata:{defaultCodec:null,defaultOutName:null,defaultPixelFormat:null,defaultProResProfile:null,defaultSampleRate:null,defaultVideoImageFormat:null,durationInFrames:s,fps:r,height:o,width:a,props:g},canvasContent:{type:"composition",compositionId:"player-comp"}}),[u,s,o,a,r,g]),[S,b]=i.useState(()=>c),[y,C]=i.useState(()=>x?Zf(p??null):v),T=i.useMemo(()=>({playerMuted:S,mediaVolume:y}),[S,y]),R=i.useRef(!1),k=R.current||w&&!S&&y>0;R.current=k;const F=i.useCallback(M=>{C(M),x&&Jf(M,d,p??null)},[x,d,p]),I=i.useMemo(()=>({setPlayerMuted:b,setMediaVolume:F}),[F]),N=i.useMemo(()=>({logLevel:d,mountTime:Date.now()}),[d]),A=i.useMemo(()=>({isPlayer:!0,isRendering:!1,isStudio:!1,isClientSideRendering:!1,isReadOnlyStudio:!1}),[]);return h.jsx(O.RemotionEnvironmentContext.Provider,{value:A,children:h.jsx(O.LogLevelContext.Provider,{value:N,children:h.jsx(O.CanUseRemotionHooksProvider,{children:h.jsx(O.AbsoluteTimeContext.Provider,{value:t,children:h.jsx(O.PlaybackRateContext.Provider,{value:n,children:h.jsx(O.TimelineContext.Provider,{value:t,children:h.jsx(O.CompositionManager.Provider,{value:E,children:h.jsx(O.PrefetchProvider,{children:h.jsx(O.DurationsContextProvider,{children:h.jsx(O.MediaVolumeContext.Provider,{value:T,children:h.jsx(O.SetMediaVolumeContext.Provider,{value:I,children:h.jsx(O.BufferingProvider,{children:h.jsx(O.SharedAudioContextProvider,{audioLatencyHint:m,audioEnabled:k,previewSampleRate:f,children:h.jsx(O.SharedAudioTagsContextProvider,{numberOfAudioTags:l,children:e})})})})})})})})})})})})})})},Zo=!1,Qf=(e,t)=>{e||Zo||(Zo=!0,O.Log.warn({logLevel:t,tag:null},"Note: Some companies are required to obtain a license to use Remotion. See: https://remotion.dev/license\nPass the `acknowledgeRemotionLicense` prop to `<Player />` function to make this message disappear."))},Qo=(e,t)=>{if(typeof e>"u"||e===null)return e??null;if(typeof e!="number")throw new TypeError(`"${t}" must be a number, but is ${JSON.stringify(e)}`);if(Number.isNaN(e))throw new TypeError(`"${t}" must not be NaN, but is ${JSON.stringify(e)}`);if(!Number.isFinite(e))throw new TypeError(`"${t}" must be finite, but is ${JSON.stringify(e)}`);if(e%1!==0)throw new TypeError(`"${t}" must be an integer, but is ${JSON.stringify(e)}`);return e},Xf=({inFrame:e,durationInFrames:t,outFrame:n})=>{const r=Qo(e,"inFrame"),o=Qo(n,"outFrame");if(!(r===null&&o===null)){if(r!==null&&r>t-1)throw new Error("inFrame must be less than (durationInFrames - 1), but is "+r);if(o!==null&&o>t-1)throw new Error("outFrame must be less than (durationInFrames - 1), but is "+o);if(r!==null&&r<0)throw new Error("inFrame must be greater than 0, but is "+r);if(o!==null&&o<=0)throw new Error(`outFrame must be greater than 0, but is ${o}. If you want to render a single frame, use <Thumbnail /> instead.`);if(o!==null&&r!==null&&o<=r)throw new Error("outFrame must be greater than inFrame, but is "+o+" <= "+r)}},em=({initialFrame:e,durationInFrames:t})=>{if(typeof t!="number")throw new Error(`\`durationInFrames\` must be a number, but is ${JSON.stringify(t)}`);if(!(typeof e>"u")){if(typeof e!="number")throw new Error(`\`initialFrame\` must be a number, but is ${JSON.stringify(e)}`);if(Number.isNaN(e))throw new Error("`initialFrame` must be a number, but is NaN");if(!Number.isFinite(e))throw new Error("`initialFrame` must be a number, but is Infinity");if(e%1!==0)throw new Error(`\`initialFrame\` must be an integer, but is ${JSON.stringify(e)}`);if(e>t-1)throw new Error(`\`initialFrame\` must be less or equal than \`durationInFrames - 1\`, but is ${JSON.stringify(e)}`)}},tm=e=>{if(e!==void 0){if(e>10)throw new Error(`The highest possible playback rate is 10. You passed: ${e}`);if(e<-10)throw new Error(`The lowest possible playback rate is -10. You passed: ${e}`);if(e===0)throw new Error("A playback rate of 0 is not supported.")}},nm=jn.validateFps,Xo=jn.validateDimension,rm=jn.validateDurationInFrames,om=jn.validateDefaultAndInputProps,im=e=>"component"in e?e.component:null,am=({durationInFrames:e,compositionHeight:t,compositionWidth:n,fps:r,inputProps:o,style:a,controls:s=!1,loop:u=!1,autoPlay:l=!1,showVolumeControls:c=!0,allowFullscreen:d=!0,clickToPlay:m,doubleClickToFullscreen:f=!1,spaceKeyToPlayOrPause:p=!0,moveToBeginningWhenEnded:v=!0,numberOfSharedAudioTags:g=5,errorFallback:w=()=>"⚠️",playbackRate:x=1,renderLoading:E,className:S,showPosterWhenUnplayed:b,showPosterWhenEnded:y,showPosterWhenPaused:C,showPosterWhenBuffering:T,showPosterWhenBufferingAndPaused:R,initialFrame:k,renderPoster:F,inFrame:I,outFrame:N,initiallyShowControls:A,renderFullscreenButton:M,renderPlayPauseButton:D,renderVolumeSlider:q,renderCustomControls:$,alwaysShowControls:P=!1,initiallyMuted:_=!1,showPlaybackRateControl:V=!1,posterFillMode:W="player-size",bufferStateDelayInMilliseconds:K,hideControlsWhenPointerDoesntMove:L=!0,overflowVisible:H=!1,renderMuteButton:U,browserMediaControlsBehavior:G,overrideInternalClassName:z,logLevel:Y="info",noSuspense:ee,acknowledgeRemotionLicense:te,audioLatencyHint:se="playback",sampleRate:ue=48e3,volumePersistenceKey:Te,initialVolume:ie,...Z},B)=>{if(typeof window<"u"&&(window.remotion_isPlayer=!0),Z.defaultProps!==void 0)throw new Error("The <Player /> component does not accept `defaultProps`, but some were passed. Use `inputProps` instead.");const de=im(Z);if(de?.type===un)throw new TypeError("'component' should not be an instance of <Composition/>. Pass the React component directly, and set the duration, fps and dimensions as separate props. See https://www.remotion.dev/docs/player/examples for an example.");if(de===un)throw new TypeError("'component' must not be the 'Composition' component. Pass your own React component directly, and set the duration, fps and dimensions as separate props. See https://www.remotion.dev/docs/player/examples for an example.");i.useState(()=>Qf(!!te,Y));const De=O.useLazyComponent({compProps:Z,componentName:"Player",noSuspense:!!ee});em({initialFrame:k,durationInFrames:e});const[be,pe]=i.useState(()=>({[Zr]:k??0})),[Re,ke]=i.useState(!1),[he]=i.useState("player-comp"),Ae=i.useRef(null),ve=i.useRef([]),fe=i.useRef(!1),[Ie,Le]=i.useState(x);if(typeof t!="number")throw new TypeError(`'compositionHeight' must be a number but got '${typeof t}' instead`);if(typeof n!="number")throw new TypeError(`'compositionWidth' must be a number but got '${typeof n}' instead`);if(Xo(t,"compositionHeight","of the <Player /> component"),Xo(n,"compositionWidth","of the <Player /> component"),rm(e,{component:"of the <Player/> component",allowFloats:!1}),nm(r,"as a prop of the <Player/> component",!1),om(o,"inputProps",null),Xf({durationInFrames:e,inFrame:I,outFrame:N}),typeof s!="boolean"&&typeof s<"u")throw new TypeError(`'controls' must be a boolean or undefined but got '${typeof s}' instead`);if(typeof l!="boolean"&&typeof l<"u")throw new TypeError(`'autoPlay' must be a boolean or undefined but got '${typeof l}' instead`);if(typeof u!="boolean"&&typeof u<"u")throw new TypeError(`'loop' must be a boolean or undefined but got '${typeof u}' instead`);if(typeof f!="boolean"&&typeof f<"u")throw new TypeError(`'doubleClickToFullscreen' must be a boolean or undefined but got '${typeof f}' instead`);if(typeof c!="boolean"&&typeof c<"u")throw new TypeError(`'showVolumeControls' must be a boolean or undefined but got '${typeof c}' instead`);if(typeof d!="boolean"&&typeof d<"u")throw new TypeError(`'allowFullscreen' must be a boolean or undefined but got '${typeof d}' instead`);if(typeof m!="boolean"&&typeof m<"u")throw new TypeError(`'clickToPlay' must be a boolean or undefined but got '${typeof m}' instead`);if(typeof p!="boolean"&&typeof p<"u")throw new TypeError(`'spaceKeyToPlayOrPause' must be a boolean or undefined but got '${typeof p}' instead`);if(typeof ue!="number"||!Number.isFinite(ue)||Number.isNaN(ue)||ue<=0||ue%1!==0)throw new TypeError(`'sampleRate' must be a positive integer but got '${ue}' instead`);if(typeof ie<"u"&&typeof ie!="number")throw new TypeError(`'initialVolume' must be a number or undefined but got '${typeof ie}' instead`);if(typeof ie=="number"&&(!Number.isFinite(ie)||Number.isNaN(ie)||ie<0||ie>1))throw new TypeError(`'initialVolume' must be between 0 and 1 but got '${ie}' instead`);if(typeof g!="number"||g%1!==0||!Number.isFinite(g)||Number.isNaN(g)||g<0)throw new TypeError(`'numberOfSharedAudioTags' must be an integer but got '${g}' instead`);tm(Ie),i.useEffect(()=>{Le(x)},[x]),i.useImperativeHandle(B,()=>Ae.current,[]),i.useState(()=>{O.playbackLogging({logLevel:Y,message:`[player] Mounting <Player>. User agent = ${typeof navigator>"u"?"server":navigator.userAgent}`,tag:"player",mountTime:Date.now()})});const wt=i.useMemo(()=>({frame:be,playing:Re,rootId:he,imperativePlaying:fe,audioAndVideoTags:ve}),[be,Re,he]),Be=i.useMemo(()=>({playbackRate:Ie,setPlaybackRate:Le}),[Ie]),et=i.useMemo(()=>({setFrame:pe,setPlaying:ke}),[pe]);typeof window<"u"&&i.useLayoutEffect(()=>{O.CSSUtils.injectCSS(O.CSSUtils.makeDefaultPreviewCSS(`.${Jr(z)}`,"#fff"))},[z]);const bt=i.useMemo(()=>o??{},[o]),Fe=i.useMemo(()=>G??{mode:"prevent-media-session"},[G]);return h.jsx(O.IsPlayerContextProvider,{children:h.jsx(Xa,{timelineContext:wt,playbackRateContext:Be,component:De,compositionHeight:t,compositionWidth:n,durationInFrames:e,fps:r,numberOfSharedAudioTags:g,initiallyMuted:_,logLevel:Y,audioLatencyHint:se,sampleRate:ue,volumePersistenceKey:Te,initialVolume:ie,inputProps:bt,audioEnabled:!0,children:h.jsx(O.SetTimelineContext.Provider,{value:et,children:h.jsx(Qd,{currentPlaybackRate:Ie,children:h.jsx(Yf,{ref:Ae,posterFillMode:W,renderLoading:E,autoPlay:!!l,loop:!!u,controls:!!s,errorFallback:w,style:a,inputProps:bt,allowFullscreen:!!d,moveToBeginningWhenEnded:!!v,clickToPlay:typeof m=="boolean"?m:!!s,showVolumeControls:!!c,doubleClickToFullscreen:!!f,spaceKeyToPlayOrPause:!!p,playbackRate:Ie,className:S??void 0,showPosterWhenUnplayed:!!b,showPosterWhenEnded:!!y,showPosterWhenPaused:!!C,showPosterWhenBuffering:!!T,showPosterWhenBufferingAndPaused:!!R,renderPoster:F,inFrame:I??null,outFrame:N??null,initiallyShowControls:A??!0,renderFullscreen:M??null,renderPlayPauseButton:D??null,renderMuteButton:U??null,renderVolumeSlider:q??null,renderCustomControls:$??null,alwaysShowControls:P,showPlaybackRateControl:V,bufferStateDelayInMilliseconds:K??300,hideControlsWhenPointerDoesntMove:L,overflowVisible:H,browserMediaControlsBehavior:Fe,overrideInternalClassName:z??void 0,noSuspense:!!ee})})})})})},sm=i.forwardRef,Fm=sm(am),um=()=>{const e=i.useContext(Ga);if(!e)throw new TypeError("Expected Player event emitter context");return i.useMemo(()=>({emitter:e}),[e])},yr=j.version.split(".")[0];if(yr==="0")throw new Error(`Version ${yr} of "react" is not supported by Remotion`);var lm=parseInt(yr,10)>=18,cm=({style:e,inputProps:t,errorFallback:n,renderLoading:r,className:o,overflowVisible:a,noSuspense:s,overrideInternalClassName:u},l)=>{const c=O.useUnsafeVideoConfig(),d=O.useVideo(),m=i.useRef(null),f=Yr(m,{triggerOnWindowResize:!1,shouldApplyCssTransforms:!1}),p=i.useMemo(()=>!c||!f?null:qa({canvasSize:f,compositionHeight:c.height,compositionWidth:c.width,previewSize:"auto"}),[f,c]),v=p?.scale??1,g=um();Ya(g.emitter),i.useImperativeHandle(l,()=>{const R={getContainerNode:()=>m.current,getScale:()=>v};return Object.assign(g.emitter,R)},[v,g.emitter]);const w=d?d.component:null,x=i.useMemo(()=>Ha({config:c,style:e,canvasSize:f,overflowVisible:a,layout:p}),[f,c,p,a,e]),E=i.useMemo(()=>Wa({config:c,layout:p,scale:v,overflowVisible:a}),[c,p,a,v]),S=i.useMemo(()=>za({config:c,layout:p,scale:v,overflowVisible:a}),[c,p,a,v]),b=i.useCallback(R=>{g.emitter.dispatchError(R)},[g.emitter]),y=i.useMemo(()=>r?r({height:x.height,width:x.width,isBuffering:!1}):null,[x.height,x.width,r]),C=i.useMemo(()=>({type:"scale",scale:v}),[v]);if(!c)return null;const T=h.jsx("div",{style:E,children:h.jsx("div",{style:S,className:Jr(u),children:w?h.jsx(Ja,{onError:b,errorFallback:n,children:h.jsx(O.CurrentScaleContext.Provider,{value:C,children:h.jsx(w,{...d?.props??{},...t??{}})})}):null})});return s||Za&&!lm?h.jsx("div",{ref:m,style:x,className:o,children:T}):h.jsx("div",{ref:m,style:x,className:o,children:h.jsx(i.Suspense,{fallback:y,children:T})})},dm=i.forwardRef(cm),fm=({frameToDisplay:e,style:t,inputProps:n,compositionHeight:r,compositionWidth:o,durationInFrames:a,fps:s,className:u,errorFallback:l=()=>"⚠️",renderLoading:c,overflowVisible:d=!1,overrideInternalClassName:m,logLevel:f="info",noSuspense:p,...v},g)=>{typeof window<"u"&&i.useLayoutEffect(()=>{window.remotion_isPlayer=!0},[]);const[w]=i.useState(()=>String(Je(null))),x=i.useRef(null),E=i.useMemo(()=>({playing:!1,frame:{[Zr]:e},rootId:w,imperativePlaying:{current:!1},audioAndVideoTags:{current:[]}}),[e,w]),S=i.useMemo(()=>({playbackRate:1,setPlaybackRate:()=>{throw new Error("thumbnail")}}),[]);i.useImperativeHandle(g,()=>x.current,[]);const b=O.useLazyComponent({compProps:v,componentName:"Thumbnail",noSuspense:!!p}),[y]=i.useState(()=>new Zd),C=i.useMemo(()=>n??{},[n]);return h.jsx(O.IsPlayerContextProvider,{children:h.jsx(Xa,{timelineContext:E,playbackRateContext:S,component:b,compositionHeight:r,compositionWidth:o,durationInFrames:a,fps:s,numberOfSharedAudioTags:0,initiallyMuted:!0,logLevel:f,audioLatencyHint:"playback",sampleRate:48e3,inputProps:C,audioEnabled:!1,children:h.jsx(Ga.Provider,{value:y,children:h.jsx(dm,{ref:x,className:u,errorFallback:l,inputProps:C,renderLoading:c,style:t,overflowVisible:d,overrideInternalClassName:m,noSuspense:!!p})})})})},mm=i.forwardRef;mm(fm);var pm=e=>/^\[\d+\]$/.test(e),hm=(e,t)=>Number(e.slice(1,-1))-Number(t.slice(1,-1)),gm=({availableSubsetKeys:e,metaSubsets:t,requestedSubset:n})=>{if(e.includes(n))return[n];if(!t.includes(n))return[n];const r=e.filter(pm).sort(hm);return r.length===0?[n]:r},er={},vm=function(){let e,t;return{promise:new Promise((r,o)=>{e=r,t=o}),resolve:e,reject:t}},ym=e=>{const t=vm(),n=setTimeout(()=>{t.reject(new Error("Timed out loading Google Font"))},18e3);return Promise.race([e.load().then(()=>{clearTimeout(n)}),t.promise])},wm=(e,t,n)=>{const r=Array.isArray(n?.weights)&&Array.isArray(n?.subsets)&&n.weights.length>0&&n.subsets.length>0,o=[],a=Object.keys(e.fonts);let s=0;for(const u of a){if(typeof FontFace>"u")continue;if(!e.fonts[u])throw new Error(`The font ${e.fontFamily} does not have a style ${u}`);const l=Object.keys(e.fonts[u]);for(const c of l){if(!e.fonts[u][c])throw new Error(`The font ${e.fontFamily} does not have a weight ${c} in style ${u}`);const d=Object.keys(e.fonts[u][c]),m=Object.keys(e.fonts[u][c]),f=[...new Set(d.flatMap(p=>gm({availableSubsetKeys:m,metaSubsets:e.subsets,requestedSubset:p})))];for(const p of f){let v=e.fonts[u]?.[c]?.[p];if(!v)throw new Error(`weight: ${c} subset: ${p} is not available for '${e.fontFamily}'`);let g=`${e.fontFamily}-${u}-${c}-${p}`;const w=er[g];if(w){o.push(w);continue}const x=`Fetching ${e.fontFamily} font ${JSON.stringify({style:u,weight:c,subset:p})}`,E=r?x:`${x}. This might be caused by loading too many font variations. Read more: https://www.remotion.dev/docs/troubleshooting/font-loading-errors#render-timeout-when-loading-google-fonts`,S=sr(E,{timeoutInMilliseconds:6e4});s++;const b=new FontFace(e.fontFamily,`url(${v}) format('woff2')`,{weight:c,style:u,unicodeRange:e.unicodeRanges[p]});let y=2;const C=()=>{if(b.status==="loaded"){lo(S);return}const T=ym(b).then(()=>{document.fonts.add(b),lo(S)}).catch(R=>{if(er[g]=void 0,y===0)throw R;y--,C()});er[g]=T,o.push(T)};C()}}s>20&&console.warn(`Made ${s} network requests to load fonts for ${e.fontFamily}. Consider loading fewer weights and subsets by passing options to loadFont(). Disable this warning by passing "ignoreTooManyRequestsWarning: true" to "options".`)}return{fontFamily:e.fontFamily,fonts:e.fonts,unicodeRanges:e.unicodeRanges,waitUntilDone:()=>Promise.all(o).then(()=>{})}},bm=()=>({fontFamily:"Anton",importName:"Anton",version:"v27",url:"https://fonts.googleapis.com/css2?family=Anton:ital,wght@0,400",unicodeRanges:{vietnamese:"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB","latin-ext":"U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF",latin:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},fonts:{normal:{400:{vietnamese:"https://fonts.gstatic.com/s/anton/v27/1Ptgg87LROyAm3K8-C8QSw.woff2","latin-ext":"https://fonts.gstatic.com/s/anton/v27/1Ptgg87LROyAm3K9-C8QSw.woff2",latin:"https://fonts.gstatic.com/s/anton/v27/1Ptgg87LROyAm3Kz-C8.woff2"}}},subsets:["latin","latin-ext","vietnamese"]}),Pm=(e,t)=>wm(bm(),e,t);export{ai as A,Na as I,Fm as P,me as S,Im as V,Ne as a,km as b,Ot as i,Pm as l,Se as u};