@remotion/promo-pages 4.0.466 → 4.0.468

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.
package/dist/design.js CHANGED
@@ -35,8 +35,8 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
35
35
  // ../design/dist/esm/index.mjs
36
36
  import * as React24 from "react";
37
37
  import * as React3 from "react";
38
- import { Fragment as Fragment2, jsx as jsx38 } from "react/jsx-runtime";
39
- import React52, { useCallback as useCallback24, useRef as useRef25, useState as useState22 } from "react";
38
+ import { Fragment as Fragment2, jsx as jsx39 } from "react/jsx-runtime";
39
+ import React52, { useCallback as useCallback25, useRef as useRef25, useState as useState22 } from "react";
40
40
 
41
41
  // ../../node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
42
42
  function r(e) {
@@ -1378,7 +1378,7 @@ var getDefaultConfig = () => {
1378
1378
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
1379
1379
 
1380
1380
  // ../design/dist/esm/index.mjs
1381
- import React33, { useEffect as useEffect20, useMemo as useMemo39, useState as useState20 } from "react";
1381
+ import React33, { useEffect as useEffect21, useMemo as useMemo40, useState as useState21 } from "react";
1382
1382
 
1383
1383
  // ../paths/dist/esm/index.mjs
1384
1384
  var cutLInstruction = ({
@@ -5748,9 +5748,9 @@ import {
5748
5748
  useContext as useContext17,
5749
5749
  useEffect as useEffect3,
5750
5750
  useMemo as useMemo14,
5751
+ useRef as useRef6,
5751
5752
  useState as useState5
5752
5753
  } from "react";
5753
- import { useRef as useRef6 } from "react";
5754
5754
  import { useContext as useContext14, useMemo as useMemo11 } from "react";
5755
5755
  import { createContext as createContext12 } from "react";
5756
5756
  import { useContext as useContext10, useMemo as useMemo9 } from "react";
@@ -5883,76 +5883,85 @@ import {
5883
5883
  } from "react";
5884
5884
  import { jsx as jsx23 } from "react/jsx-runtime";
5885
5885
  import { jsx as jsx24 } from "react/jsx-runtime";
5886
- import { forwardRef as forwardRef10, useCallback as useCallback16, useState as useState16 } from "react";
5887
- import { jsx as jsx25 } from "react/jsx-runtime";
5888
5886
  import {
5887
+ forwardRef as forwardRef10,
5889
5888
  useCallback as useCallback17,
5889
+ useContext as useContext33,
5890
+ useEffect as useEffect16,
5891
+ useMemo as useMemo31,
5892
+ useState as useState16
5893
+ } from "react";
5894
+ import {
5895
+ useCallback as useCallback16,
5890
5896
  useContext as useContext32,
5891
5897
  useImperativeHandle as useImperativeHandle6,
5892
5898
  useLayoutEffect as useLayoutEffect10,
5893
5899
  useRef as useRef21
5894
5900
  } from "react";
5901
+ import { jsx as jsx25 } from "react/jsx-runtime";
5895
5902
  import { jsx as jsx26 } from "react/jsx-runtime";
5903
+ import { forwardRef as forwardRef11, useCallback as useCallback18, useState as useState17 } from "react";
5904
+ import { jsx as jsx27 } from "react/jsx-runtime";
5896
5905
  import { createRef as createRef3 } from "react";
5897
5906
  import React28 from "react";
5898
5907
  import {
5899
- useCallback as useCallback18,
5908
+ useCallback as useCallback19,
5900
5909
  useImperativeHandle as useImperativeHandle7,
5901
- useMemo as useMemo31,
5910
+ useMemo as useMemo322,
5902
5911
  useRef as useRef22,
5903
- useState as useState17
5912
+ useState as useState18
5904
5913
  } from "react";
5905
- import { jsx as jsx27 } from "react/jsx-runtime";
5906
- import React29 from "react";
5907
- import { useMemo as useMemo33 } from "react";
5908
- import { createContext as createContext23, useContext as useContext33, useMemo as useMemo322 } from "react";
5909
5914
  import { jsx as jsx28 } from "react/jsx-runtime";
5915
+ import React29 from "react";
5916
+ import { useMemo as useMemo34 } from "react";
5917
+ import { createContext as createContext23, useContext as useContext34, useMemo as useMemo33 } from "react";
5910
5918
  import { jsx as jsx29 } from "react/jsx-runtime";
5919
+ import { jsx as jsx30 } from "react/jsx-runtime";
5911
5920
  import React31 from "react";
5912
5921
  import React32, { createContext as createContext24 } from "react";
5913
- import { useCallback as useCallback21 } from "react";
5922
+ import { useCallback as useCallback22 } from "react";
5914
5923
  import {
5915
- useCallback as useCallback19,
5916
- useContext as useContext34,
5917
- useEffect as useEffect16,
5924
+ useCallback as useCallback20,
5925
+ useContext as useContext35,
5926
+ useEffect as useEffect17,
5918
5927
  useLayoutEffect as useLayoutEffect11,
5919
- useMemo as useMemo34,
5920
- useState as useState18
5928
+ useMemo as useMemo35,
5929
+ useState as useState19
5921
5930
  } from "react";
5922
- import { jsx as jsx30 } from "react/jsx-runtime";
5931
+ import { jsx as jsx31 } from "react/jsx-runtime";
5923
5932
  import React34, {
5924
- forwardRef as forwardRef11,
5925
- useContext as useContext35,
5926
- useEffect as useEffect18,
5933
+ forwardRef as forwardRef12,
5934
+ useContext as useContext36,
5935
+ useEffect as useEffect19,
5927
5936
  useImperativeHandle as useImperativeHandle8,
5928
- useMemo as useMemo35,
5937
+ useMemo as useMemo36,
5929
5938
  useRef as useRef23,
5930
- useState as useState19,
5931
- useCallback as useCallback20
5939
+ useState as useState20,
5940
+ useCallback as useCallback21
5932
5941
  } from "react";
5933
- import { useEffect as useEffect17 } from "react";
5934
- import { jsx as jsx31 } from "react/jsx-runtime";
5942
+ import { useEffect as useEffect18 } from "react";
5935
5943
  import { jsx as jsx322 } from "react/jsx-runtime";
5936
- import React36, { useMemo as useMemo36 } from "react";
5937
5944
  import { jsx as jsx33 } from "react/jsx-runtime";
5938
- import { Children, forwardRef as forwardRef12, useMemo as useMemo37 } from "react";
5945
+ import React36, { useMemo as useMemo37 } from "react";
5946
+ import { jsx as jsx34 } from "react/jsx-runtime";
5947
+ import { Children, forwardRef as forwardRef13, useMemo as useMemo38 } from "react";
5939
5948
  import React37 from "react";
5940
5949
  import React38, { createContext as createContext25 } from "react";
5941
- import { jsx as jsx34 } from "react/jsx-runtime";
5942
5950
  import { jsx as jsx35 } from "react/jsx-runtime";
5951
+ import { jsx as jsx36 } from "react/jsx-runtime";
5943
5952
  import React40 from "react";
5944
- import { forwardRef as forwardRef14, useCallback as useCallback22, useContext as useContext37 } from "react";
5953
+ import { forwardRef as forwardRef15, useCallback as useCallback23, useContext as useContext38 } from "react";
5945
5954
  import {
5946
- forwardRef as forwardRef13,
5947
- useContext as useContext36,
5948
- useEffect as useEffect19,
5955
+ forwardRef as forwardRef14,
5956
+ useContext as useContext37,
5957
+ useEffect as useEffect20,
5949
5958
  useImperativeHandle as useImperativeHandle9,
5950
5959
  useLayoutEffect as useLayoutEffect12,
5951
- useMemo as useMemo38,
5960
+ useMemo as useMemo39,
5952
5961
  useRef as useRef24
5953
5962
  } from "react";
5954
- import { jsx as jsx36 } from "react/jsx-runtime";
5955
5963
  import { jsx as jsx37 } from "react/jsx-runtime";
5964
+ import { jsx as jsx38 } from "react/jsx-runtime";
5956
5965
  var __defProp2 = Object.defineProperty;
5957
5966
  var __export2 = (target, all) => {
5958
5967
  for (var name in all)
@@ -7075,7 +7084,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
7075
7084
  var addSequenceStackTraces = (component) => {
7076
7085
  componentsToAddStacksTo.push(component);
7077
7086
  };
7078
- var VERSION = "4.0.466";
7087
+ var VERSION = "4.0.468";
7079
7088
  var checkMultipleRemotionVersions = () => {
7080
7089
  if (typeof globalThis === "undefined") {
7081
7090
  return;
@@ -8164,10 +8173,16 @@ var RegularSequenceRefForwardingFunction = ({
8164
8173
  const postmounting = useMemo14(() => {
8165
8174
  return parentSequence?.postmounting || Boolean(other._remotionInternalIsPostmounting);
8166
8175
  }, [other._remotionInternalIsPostmounting, parentSequence?.postmounting]);
8176
+ const currentSequenceStart = cumulatedFrom + from;
8177
+ const parentSequenceStart = parentSequence ? parentSequence.cumulatedFrom + parentSequence.relativeFrom : 0;
8178
+ const parentFirstFrame = parentSequence ? parentSequenceStart - parentSequence.cumulatedNegativeFrom : 0;
8179
+ const firstFrame = Math.max(0, parentFirstFrame, currentSequenceStart);
8180
+ const cumulatedNegativeFrom = currentSequenceStart - firstFrame;
8167
8181
  const contextValue = useMemo14(() => {
8168
8182
  return {
8169
8183
  cumulatedFrom,
8170
8184
  relativeFrom: from,
8185
+ cumulatedNegativeFrom,
8171
8186
  durationInFrames: actualDurationInFrames,
8172
8187
  parentFrom: parentSequence?.relativeFrom ?? 0,
8173
8188
  id,
@@ -8189,7 +8204,8 @@ var RegularSequenceRefForwardingFunction = ({
8189
8204
  premounting,
8190
8205
  postmounting,
8191
8206
  premountDisplay,
8192
- postmountDisplay
8207
+ postmountDisplay,
8208
+ cumulatedNegativeFrom
8193
8209
  ]);
8194
8210
  const timelineClipName = useMemo14(() => {
8195
8211
  return name ?? "";
@@ -8397,6 +8413,54 @@ var SequenceRefForwardingFunction = (props, ref) => {
8397
8413
  };
8398
8414
  var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
8399
8415
  var Sequence = wrapInSchema(SequenceInner, sequenceSchema);
8416
+ var calculateImageFit = (fit, imageSize, canvasSize) => {
8417
+ switch (fit) {
8418
+ case "fill": {
8419
+ return [
8420
+ 0,
8421
+ 0,
8422
+ imageSize.width,
8423
+ imageSize.height,
8424
+ 0,
8425
+ 0,
8426
+ canvasSize.width,
8427
+ canvasSize.height
8428
+ ];
8429
+ }
8430
+ case "contain": {
8431
+ const ratio = Math.min(canvasSize.width / imageSize.width, canvasSize.height / imageSize.height);
8432
+ const centerX = (canvasSize.width - imageSize.width * ratio) / 2;
8433
+ const centerY = (canvasSize.height - imageSize.height * ratio) / 2;
8434
+ return [
8435
+ 0,
8436
+ 0,
8437
+ imageSize.width,
8438
+ imageSize.height,
8439
+ centerX,
8440
+ centerY,
8441
+ imageSize.width * ratio,
8442
+ imageSize.height * ratio
8443
+ ];
8444
+ }
8445
+ case "cover": {
8446
+ const ratio = Math.max(canvasSize.width / imageSize.width, canvasSize.height / imageSize.height);
8447
+ const centerX = (canvasSize.width - imageSize.width * ratio) / 2;
8448
+ const centerY = (canvasSize.height - imageSize.height * ratio) / 2;
8449
+ return [
8450
+ 0,
8451
+ 0,
8452
+ imageSize.width,
8453
+ imageSize.height,
8454
+ centerX,
8455
+ centerY,
8456
+ imageSize.width * ratio,
8457
+ imageSize.height * ratio
8458
+ ];
8459
+ }
8460
+ default:
8461
+ throw new Error("Unknown fit: " + fit);
8462
+ }
8463
+ };
8400
8464
  var WEBGL_CONTEXT_DOCS_URL = "https://remotion.dev/docs/troubleshooting/webgl2-context";
8401
8465
  var webGlContextErrorMessage = (versionLabel, effectName) => `Failed to acquire ${versionLabel} context for ${effectName}. ` + '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 ${WEBGL_CONTEXT_DOCS_URL}`;
8402
8466
  var createWebGLContextError = (effectName) => new Error(webGlContextErrorMessage("WebGL", effectName));
@@ -8649,54 +8713,6 @@ var useEffectChainState = () => {
8649
8713
  }
8650
8714
  }), []);
8651
8715
  };
8652
- var calcArgs = (fit, frameSize, canvasSize) => {
8653
- switch (fit) {
8654
- case "fill": {
8655
- return [
8656
- 0,
8657
- 0,
8658
- frameSize.width,
8659
- frameSize.height,
8660
- 0,
8661
- 0,
8662
- canvasSize.width,
8663
- canvasSize.height
8664
- ];
8665
- }
8666
- case "contain": {
8667
- const ratio = Math.min(canvasSize.width / frameSize.width, canvasSize.height / frameSize.height);
8668
- const centerX = (canvasSize.width - frameSize.width * ratio) / 2;
8669
- const centerY = (canvasSize.height - frameSize.height * ratio) / 2;
8670
- return [
8671
- 0,
8672
- 0,
8673
- frameSize.width,
8674
- frameSize.height,
8675
- centerX,
8676
- centerY,
8677
- frameSize.width * ratio,
8678
- frameSize.height * ratio
8679
- ];
8680
- }
8681
- case "cover": {
8682
- const ratio = Math.max(canvasSize.width / frameSize.width, canvasSize.height / frameSize.height);
8683
- const centerX = (canvasSize.width - frameSize.width * ratio) / 2;
8684
- const centerY = (canvasSize.height - frameSize.height * ratio) / 2;
8685
- return [
8686
- 0,
8687
- 0,
8688
- frameSize.width,
8689
- frameSize.height,
8690
- centerX,
8691
- centerY,
8692
- frameSize.width * ratio,
8693
- frameSize.height * ratio
8694
- ];
8695
- }
8696
- default:
8697
- throw new Error("Unknown fit: " + fit);
8698
- }
8699
- };
8700
8716
  var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effects }, ref) => {
8701
8717
  const canvasRef = useRef8(null);
8702
8718
  const chainState = useEffectChainState();
@@ -8706,7 +8722,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effec
8706
8722
  }
8707
8723
  return document.createElement("canvas");
8708
8724
  }, []);
8709
- const draw = useCallback6(async (imageData) => {
8725
+ const draw = useCallback6((imageData) => {
8710
8726
  const canvas = canvasRef.current;
8711
8727
  const canvasWidth = width ?? imageData.displayWidth;
8712
8728
  const canvasHeight = height ?? imageData.displayHeight;
@@ -8722,7 +8738,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effec
8722
8738
  if (!sourceCtx) {
8723
8739
  throw new Error("Could not get 2d context for source canvas");
8724
8740
  }
8725
- sourceCtx.drawImage(imageData, ...calcArgs(fit, {
8741
+ sourceCtx.drawImage(imageData, ...calculateImageFit(fit, {
8726
8742
  height: imageData.displayHeight,
8727
8743
  width: imageData.displayWidth
8728
8744
  }, {
@@ -10230,9 +10246,43 @@ var useSingletonAudioContext = ({
10230
10246
  gainNode.connect(audioContext.destination);
10231
10247
  Log.trace({ logLevel, tag: "audio" }, "Creating new audio context");
10232
10248
  audioContext.suspend();
10249
+ let transitionTarget = null;
10250
+ const getState = () => {
10251
+ const nativeState = audioContext.state;
10252
+ if (transitionTarget === "running" && nativeState !== "running") {
10253
+ return "suspended-to-running";
10254
+ }
10255
+ if (transitionTarget === "suspended" && nativeState !== "suspended") {
10256
+ return "running-to-suspended";
10257
+ }
10258
+ return nativeState;
10259
+ };
10260
+ const resume = () => {
10261
+ transitionTarget = "running";
10262
+ const promise = audioContext.resume();
10263
+ promise.finally(() => {
10264
+ if (transitionTarget === "running") {
10265
+ transitionTarget = null;
10266
+ }
10267
+ });
10268
+ return promise;
10269
+ };
10270
+ const suspend = () => {
10271
+ transitionTarget = "suspended";
10272
+ const promise = audioContext.suspend();
10273
+ promise.finally(() => {
10274
+ if (transitionTarget === "suspended") {
10275
+ transitionTarget = null;
10276
+ }
10277
+ });
10278
+ return promise;
10279
+ };
10233
10280
  return {
10234
10281
  audioContext,
10235
- gainNode
10282
+ gainNode,
10283
+ getState,
10284
+ resume,
10285
+ suspend
10236
10286
  };
10237
10287
  }, [logLevel, latencyHint, env.isRendering, audioEnabled]);
10238
10288
  return context;
@@ -10285,6 +10335,15 @@ var didPropChange = (key, newProp, prevProp) => {
10285
10335
  };
10286
10336
  var SharedAudioContext = createContext21(null);
10287
10337
  var SharedAudioTagsContext = createContext21(null);
10338
+ var shouldSaveForLater = (state) => {
10339
+ if (state === "suspended" || state === "running-to-suspended" || state === "interrupted") {
10340
+ return true;
10341
+ }
10342
+ if (state === "running" || state === "suspended-to-running") {
10343
+ return false;
10344
+ }
10345
+ throw new Error(`Unexpected audio context state: ${state}`);
10346
+ };
10288
10347
  var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled }) => {
10289
10348
  const logLevel = useLogLevel();
10290
10349
  const ctxAndGain = useSingletonAudioContext({
@@ -10320,7 +10379,6 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
10320
10379
  return ({
10321
10380
  node,
10322
10381
  mediaTimestamp,
10323
- currentTime,
10324
10382
  scheduledTime,
10325
10383
  duration,
10326
10384
  offset,
@@ -10329,7 +10387,14 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
10329
10387
  if (!ctxAndGain) {
10330
10388
  throw new Error("Audio context not found");
10331
10389
  }
10332
- const saveForLater = ctxAndGain.audioContext.state === "suspended" && !isResuming.current;
10390
+ const currentState = ctxAndGain.getState();
10391
+ if (currentState === "closed") {
10392
+ return {
10393
+ type: "not-started",
10394
+ reason: "audio context is closed"
10395
+ };
10396
+ }
10397
+ const saveForLater = shouldSaveForLater(currentState);
10333
10398
  if (duration > 0) {
10334
10399
  if (saveForLater) {
10335
10400
  nodesToResume.current.set(node, {
@@ -10349,7 +10414,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
10349
10414
  const prev = prevEndTimes.current;
10350
10415
  const scheduledMismatch = prev.scheduledEndTime !== null && Math.abs(scheduledTime - prev.scheduledEndTime) > 0.001;
10351
10416
  const mediaMismatch = prev.mediaEndTime !== null && Math.abs(mediaTime - prev.mediaEndTime) > 0.001;
10352
- Log.verbose({ logLevel, tag: "audio-scheduling" }, "scheduled %c%s%c %s %c%s%c %s %c%s%c %s %s %s %s %s", scheduledMismatch ? "color: red; font-weight: bold" : "", scheduledTime.toFixed(4), "", scheduledEndTime.toFixed(4), mediaMismatch ? "color: red; font-weight: bold" : "", mediaTime.toFixed(4), "", mediaEndTime.toFixed(4), duration < 0 ? "color: red; font-weight: bold" : timeDiff < 0 ? "color: red; font-weight: bold" : "color: blue; font-weight: bold", duration < 0 ? "missed " + Math.abs(offset).toFixed(2) + "s" : Math.abs(timeDiff).toFixed(2) + (timeDiff < 0 ? " delay" : " ahead"), "", "current=" + currentTime.toFixed(4), "actualcurrent=" + ctxAndGain.audioContext.currentTime.toFixed(4), "offset=" + offset.toFixed(4), "latency=" + latency.toFixed(4), "state=" + ctxAndGain.audioContext.state, originalUnloopedMediaTimestamp !== mediaTime ? "original_ts=" + originalUnloopedMediaTimestamp.toFixed(4) : "", "action=" + (saveForLater ? "schedule" : "start"), "");
10417
+ Log.verbose({ logLevel, tag: "audio-scheduling" }, "scheduled %c%s%c %s %c%s%c %s %c%s%c %s %s %s %s %s", scheduledMismatch ? "color: red; font-weight: bold" : "", scheduledTime.toFixed(4), "", scheduledEndTime.toFixed(4), mediaMismatch ? "color: red; font-weight: bold" : "", mediaTime.toFixed(4), "", mediaEndTime.toFixed(4), duration < 0 ? "color: red; font-weight: bold" : timeDiff < 0 ? "color: red; font-weight: bold" : "color: blue; font-weight: bold", duration < 0 ? "missed " + Math.abs(offset).toFixed(2) + "s" : Math.abs(timeDiff).toFixed(2) + (timeDiff < 0 ? " delay" : " ahead"), "", "current=" + ctxAndGain.audioContext.currentTime.toFixed(4), "offset=" + offset.toFixed(4), "latency=" + latency.toFixed(4), "state=" + ctxAndGain.audioContext.state, originalUnloopedMediaTimestamp !== mediaTime ? "original_ts=" + originalUnloopedMediaTimestamp.toFixed(4) : "", "action=" + (saveForLater ? "schedule" : "start"), "");
10353
10418
  prev.scheduledEndTime = scheduledEndTime;
10354
10419
  prev.mediaEndTime = mediaEndTime;
10355
10420
  return duration > 0 ? {
@@ -10376,7 +10441,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
10376
10441
  node.start(r2.scheduledTime, r2.offset, r2.duration);
10377
10442
  });
10378
10443
  nodesToResume.current.clear();
10379
- const resumePromise = ctxAndGain.audioContext.resume();
10444
+ const resumePromise = ctxAndGain.resume();
10380
10445
  isResuming.current = new Promise((resolve) => {
10381
10446
  waitUntilActuallyResumed(ctxAndGain.audioContext, logLevel).then(resolve);
10382
10447
  resumePromise.catch((err) => {
@@ -10393,17 +10458,18 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
10393
10458
  }, []);
10394
10459
  const suspend = useCallback10(() => {
10395
10460
  if (!ctxAndGain) {
10396
- return;
10461
+ return Promise.resolve();
10397
10462
  }
10398
10463
  if (!audioContextIsPlayingEventually.current) {
10399
- return;
10464
+ return Promise.resolve();
10400
10465
  }
10401
10466
  audioContextIsPlayingEventually.current = false;
10402
- ctxAndGain.audioContext.suspend();
10467
+ return ctxAndGain.suspend();
10403
10468
  }, [ctxAndGain]);
10404
10469
  const audioContextValue = useMemo23(() => {
10405
10470
  return {
10406
10471
  audioContext: ctxAndGain?.audioContext ?? null,
10472
+ getAudioContextState: () => ctxAndGain?.getState() ?? null,
10407
10473
  gainNode: ctxAndGain?.gainNode ?? null,
10408
10474
  audioSyncAnchor,
10409
10475
  audioSyncAnchorEmitter,
@@ -10858,8 +10924,7 @@ var useVolume = ({
10858
10924
  };
10859
10925
  var useMediaStartsAt = () => {
10860
10926
  const parentSequence = useContext23(SequenceContext);
10861
- const startsAt = Math.min(0, parentSequence?.relativeFrom ?? 0);
10862
- return startsAt;
10927
+ return parentSequence?.cumulatedNegativeFrom ?? 0;
10863
10928
  };
10864
10929
  var useFrameForVolumeProp = (behavior) => {
10865
10930
  const loop = Loop.useLoop();
@@ -10895,7 +10960,8 @@ var getTimelineDuration = ({
10895
10960
  trimAfter
10896
10961
  });
10897
10962
  if (parentSequenceDurationInFrames !== null) {
10898
- return Math.floor(Math.min(parentSequenceDurationInFrames * playbackRate, mediaDuration));
10963
+ const cappedDuration = Math.min(parentSequenceDurationInFrames * playbackRate, mediaDuration);
10964
+ return Number(cappedDuration.toFixed(10));
10899
10965
  }
10900
10966
  return mediaDuration;
10901
10967
  };
@@ -12310,7 +12376,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
12310
12376
  mediaFrame: frame,
12311
12377
  playbackRate: props.playbackRate ?? 1,
12312
12378
  toneFrequency: toneFrequency ?? 1,
12313
- audioStartFrame: Math.max(0, -(sequenceContext?.relativeFrom ?? 0)),
12379
+ audioStartFrame: Math.max(0, -(sequenceContext?.cumulatedNegativeFrom ?? 0)),
12314
12380
  audioStreamIndex: audioStreamIndex ?? 0
12315
12381
  });
12316
12382
  return () => unregisterRenderAsset(id);
@@ -12327,7 +12393,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
12327
12393
  playbackRate,
12328
12394
  props.playbackRate,
12329
12395
  toneFrequency,
12330
- sequenceContext?.relativeFrom,
12396
+ sequenceContext?.cumulatedNegativeFrom,
12331
12397
  audioStreamIndex
12332
12398
  ]);
12333
12399
  const { src } = props;
@@ -12498,41 +12564,6 @@ var AudioRefForwardingFunction = (props, ref) => {
12498
12564
  var Html5Audio = forwardRef9(AudioRefForwardingFunction);
12499
12565
  addSequenceStackTraces(Html5Audio);
12500
12566
  var Audio = Html5Audio;
12501
- var kSplineTableSize = 11;
12502
- var kSampleStepSize = 1 / (kSplineTableSize - 1);
12503
- var IFrameRefForwarding = ({
12504
- onLoad,
12505
- onError,
12506
- delayRenderRetries,
12507
- delayRenderTimeoutInMilliseconds,
12508
- ...props2
12509
- }, ref) => {
12510
- const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
12511
- const [handle] = useState16(() => delayRender2(`Loading <IFrame> with source ${props2.src}`, {
12512
- retries: delayRenderRetries ?? undefined,
12513
- timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
12514
- }));
12515
- const didLoad = useCallback16((e) => {
12516
- continueRender2(handle);
12517
- onLoad?.(e);
12518
- }, [handle, onLoad, continueRender2]);
12519
- const didGetError = useCallback16((e) => {
12520
- continueRender2(handle);
12521
- if (onError) {
12522
- onError(e);
12523
- } else {
12524
- console.error("Error loading iframe:", e, "Handle the event using the onError() prop to make this message disappear.");
12525
- }
12526
- }, [handle, onError, continueRender2]);
12527
- return /* @__PURE__ */ jsx25("iframe", {
12528
- referrerPolicy: "strict-origin-when-cross-origin",
12529
- ...props2,
12530
- ref,
12531
- onError: didGetError,
12532
- onLoad: didLoad
12533
- });
12534
- };
12535
- var IFrame = forwardRef10(IFrameRefForwarding);
12536
12567
  function exponentialBackoff(errorCount) {
12537
12568
  return 1000 * 2 ** (errorCount - 1);
12538
12569
  }
@@ -12551,6 +12582,7 @@ var ImgContent = ({
12551
12582
  delayRenderTimeoutInMilliseconds,
12552
12583
  onImageFrame,
12553
12584
  crossOrigin,
12585
+ decoding,
12554
12586
  ref,
12555
12587
  ...props2
12556
12588
  }) => {
@@ -12566,7 +12598,7 @@ var ImgContent = ({
12566
12598
  return imageRef.current;
12567
12599
  }, []);
12568
12600
  const actualSrc = usePreload(src);
12569
- const retryIn = useCallback17((timeout) => {
12601
+ const retryIn = useCallback16((timeout) => {
12570
12602
  if (!imageRef.current) {
12571
12603
  return;
12572
12604
  }
@@ -12584,7 +12616,7 @@ var ImgContent = ({
12584
12616
  }, timeout);
12585
12617
  }, []);
12586
12618
  const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
12587
- const didGetError = useCallback17((e) => {
12619
+ const didGetError = useCallback16((e) => {
12588
12620
  if (!errors.current) {
12589
12621
  return;
12590
12622
  }
@@ -12672,18 +12704,18 @@ var ImgContent = ({
12672
12704
  delayRender2
12673
12705
  ]);
12674
12706
  }
12675
- const { isClientSideRendering } = useRemotionEnvironment();
12707
+ const { isClientSideRendering, isRendering } = useRemotionEnvironment();
12676
12708
  const crossOriginValue = getCrossOriginValue({
12677
12709
  crossOrigin,
12678
12710
  requestsVideoFrame: false,
12679
12711
  isClientSideRendering
12680
12712
  });
12681
- return /* @__PURE__ */ jsx26("img", {
12713
+ return /* @__PURE__ */ jsx25("img", {
12682
12714
  ...props2,
12683
12715
  ref: imageRef,
12684
12716
  crossOrigin: crossOriginValue,
12685
12717
  onError: didGetError,
12686
- decoding: "sync"
12718
+ decoding: isRendering ? "sync" : decoding
12687
12719
  });
12688
12720
  };
12689
12721
  var ImgInner = ({
@@ -12700,7 +12732,7 @@ var ImgInner = ({
12700
12732
  if (!src) {
12701
12733
  throw new Error('No "src" prop was passed to <Img>.');
12702
12734
  }
12703
- return /* @__PURE__ */ jsx26(Sequence, {
12735
+ return /* @__PURE__ */ jsx25(Sequence, {
12704
12736
  layout: "none",
12705
12737
  from: from ?? 0,
12706
12738
  durationInFrames: durationInFrames ?? Infinity,
@@ -12711,7 +12743,7 @@ var ImgInner = ({
12711
12743
  _experimentalControls: controls,
12712
12744
  showInTimeline: showInTimeline ?? true,
12713
12745
  hidden,
12714
- children: /* @__PURE__ */ jsx26(ImgContent, {
12746
+ children: /* @__PURE__ */ jsx25(ImgContent, {
12715
12747
  src,
12716
12748
  ...props2
12717
12749
  })
@@ -12723,6 +12755,331 @@ var imgSchema = {
12723
12755
  };
12724
12756
  var Img = wrapInSchema(ImgInner, imgSchema);
12725
12757
  addSequenceStackTraces(Img);
12758
+ var canvasImageSchema = {
12759
+ fit: {
12760
+ type: "enum",
12761
+ default: "fill",
12762
+ description: "Fit",
12763
+ variants: {
12764
+ fill: {},
12765
+ contain: {},
12766
+ cover: {}
12767
+ }
12768
+ },
12769
+ ...sequenceVisualStyleSchema,
12770
+ hidden: hiddenField
12771
+ };
12772
+ var makeAbortError = () => {
12773
+ if (typeof DOMException !== "undefined") {
12774
+ return new DOMException("Image loading was aborted", "AbortError");
12775
+ }
12776
+ const error2 = new Error("Image loading was aborted");
12777
+ error2.name = "AbortError";
12778
+ return error2;
12779
+ };
12780
+ var loadImage = ({
12781
+ src,
12782
+ signal
12783
+ }) => {
12784
+ return new Promise((resolve, reject) => {
12785
+ const image = new Image;
12786
+ let settled = false;
12787
+ function cleanup() {
12788
+ image.onload = null;
12789
+ image.onerror = null;
12790
+ }
12791
+ function settle(callback) {
12792
+ if (settled) {
12793
+ return;
12794
+ }
12795
+ settled = true;
12796
+ cleanup();
12797
+ callback();
12798
+ }
12799
+ function onAbort() {
12800
+ settle(() => reject(makeAbortError()));
12801
+ }
12802
+ image.onload = () => {
12803
+ Promise.resolve(image.decode?.()).catch(() => {
12804
+ return;
12805
+ }).then(() => {
12806
+ const imageWidth = image.naturalWidth || image.width;
12807
+ const imageHeight = image.naturalHeight || image.height;
12808
+ if (imageWidth <= 0 || imageHeight <= 0) {
12809
+ settle(() => reject(new Error(`Could not determine dimensions for <CanvasImage> with src="${truncateSrcForLabel(src)}"`)));
12810
+ return;
12811
+ }
12812
+ settle(() => resolve({ element: image, width: imageWidth, height: imageHeight }));
12813
+ });
12814
+ };
12815
+ image.onerror = () => {
12816
+ settle(() => reject(new Error(`Could not load <CanvasImage> with src="${truncateSrcForLabel(src)}"`)));
12817
+ };
12818
+ signal.addEventListener("abort", onAbort, { once: true });
12819
+ if (signal.aborted) {
12820
+ onAbort();
12821
+ return;
12822
+ }
12823
+ image.crossOrigin = "anonymous";
12824
+ image.src = src;
12825
+ });
12826
+ };
12827
+ function exponentialBackoff2(errorCount) {
12828
+ return 1000 * 2 ** (errorCount - 1);
12829
+ }
12830
+ var CanvasImageContent = forwardRef10(({
12831
+ src,
12832
+ width,
12833
+ height,
12834
+ fit = "fill",
12835
+ effects,
12836
+ controls,
12837
+ onError,
12838
+ className,
12839
+ style,
12840
+ id,
12841
+ pauseWhenLoading,
12842
+ maxRetries = 2,
12843
+ delayRenderRetries,
12844
+ delayRenderTimeoutInMilliseconds
12845
+ }, ref) => {
12846
+ const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
12847
+ const { delayPlayback } = useBufferState();
12848
+ const [outputCanvas, setOutputCanvas] = useState16(null);
12849
+ const actualSrc = usePreload(src);
12850
+ const chainState = useEffectChainState();
12851
+ const memoizedEffects = useMemoizedEffects({
12852
+ effects,
12853
+ overrideId: controls?.overrideId ?? null
12854
+ });
12855
+ const sequenceContext = useContext33(SequenceContext);
12856
+ const sourceCanvas = useMemo31(() => {
12857
+ if (typeof document === "undefined") {
12858
+ return null;
12859
+ }
12860
+ return document.createElement("canvas");
12861
+ }, []);
12862
+ const canvasRef = useCallback17((canvas) => {
12863
+ setOutputCanvas(canvas);
12864
+ if (typeof ref === "function") {
12865
+ ref(canvas);
12866
+ } else if (ref) {
12867
+ ref.current = canvas;
12868
+ }
12869
+ }, [ref]);
12870
+ useEffect16(() => {
12871
+ if (!outputCanvas || !sourceCanvas) {
12872
+ return;
12873
+ }
12874
+ const isPremounting = Boolean(sequenceContext?.premounting);
12875
+ const isPostmounting = Boolean(sequenceContext?.postmounting);
12876
+ const handle = delayRender2(`Rendering <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`, {
12877
+ retries: delayRenderRetries ?? undefined,
12878
+ timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
12879
+ });
12880
+ const unblock = pauseWhenLoading && !isPremounting && !isPostmounting ? delayPlayback().unblock : () => {
12881
+ return;
12882
+ };
12883
+ const controller = new AbortController;
12884
+ let cancelled = false;
12885
+ let continued = false;
12886
+ let errorCount = 0;
12887
+ let timeoutId = null;
12888
+ const continueRenderOnce = () => {
12889
+ if (continued) {
12890
+ return;
12891
+ }
12892
+ continued = true;
12893
+ unblock();
12894
+ continueRender2(handle);
12895
+ };
12896
+ const attemptLoad = () => {
12897
+ loadImage({ src: actualSrc, signal: controller.signal }).then((image) => {
12898
+ if (cancelled) {
12899
+ return;
12900
+ }
12901
+ const canvasWidth = width ?? image.width;
12902
+ const canvasHeight = height ?? image.height;
12903
+ const sourceContext = sourceCanvas.getContext("2d", {
12904
+ colorSpace: "srgb"
12905
+ });
12906
+ if (!sourceContext) {
12907
+ throw new Error("Could not get 2D context for <CanvasImage> source canvas");
12908
+ }
12909
+ sourceCanvas.width = canvasWidth;
12910
+ sourceCanvas.height = canvasHeight;
12911
+ outputCanvas.width = canvasWidth;
12912
+ outputCanvas.height = canvasHeight;
12913
+ sourceContext.clearRect(0, 0, canvasWidth, canvasHeight);
12914
+ sourceContext.drawImage(image.element, ...calculateImageFit(fit, { width: image.width, height: image.height }, { width: canvasWidth, height: canvasHeight }));
12915
+ return runEffectChain({
12916
+ state: chainState.get(canvasWidth, canvasHeight),
12917
+ source: sourceCanvas,
12918
+ effects: memoizedEffects,
12919
+ output: outputCanvas,
12920
+ width: canvasWidth,
12921
+ height: canvasHeight
12922
+ });
12923
+ }).then((completed) => {
12924
+ if (completed && !cancelled) {
12925
+ continueRenderOnce();
12926
+ }
12927
+ }).catch((err) => {
12928
+ if (err.name === "AbortError") {
12929
+ continueRenderOnce();
12930
+ return;
12931
+ }
12932
+ errorCount++;
12933
+ if (errorCount <= maxRetries) {
12934
+ const backoff = exponentialBackoff2(errorCount);
12935
+ console.warn(`Could not load <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}", retrying in ${backoff}ms`);
12936
+ timeoutId = setTimeout(() => {
12937
+ if (!cancelled) {
12938
+ attemptLoad();
12939
+ }
12940
+ }, backoff);
12941
+ } else if (onError) {
12942
+ onError(err);
12943
+ continueRenderOnce();
12944
+ } else {
12945
+ cancelRender2(err);
12946
+ }
12947
+ });
12948
+ };
12949
+ attemptLoad();
12950
+ return () => {
12951
+ cancelled = true;
12952
+ if (timeoutId !== null) {
12953
+ clearTimeout(timeoutId);
12954
+ }
12955
+ controller.abort();
12956
+ continueRenderOnce();
12957
+ };
12958
+ }, [
12959
+ actualSrc,
12960
+ cancelRender2,
12961
+ chainState,
12962
+ continueRender2,
12963
+ delayPlayback,
12964
+ delayRender2,
12965
+ delayRenderRetries,
12966
+ delayRenderTimeoutInMilliseconds,
12967
+ fit,
12968
+ height,
12969
+ maxRetries,
12970
+ memoizedEffects,
12971
+ onError,
12972
+ outputCanvas,
12973
+ pauseWhenLoading,
12974
+ sequenceContext?.postmounting,
12975
+ sequenceContext?.premounting,
12976
+ sourceCanvas,
12977
+ width
12978
+ ]);
12979
+ return /* @__PURE__ */ jsx26("canvas", {
12980
+ ref: canvasRef,
12981
+ width,
12982
+ height,
12983
+ className,
12984
+ style,
12985
+ id
12986
+ });
12987
+ });
12988
+ CanvasImageContent.displayName = "CanvasImageContent";
12989
+ var CanvasImageInner = forwardRef10(({
12990
+ src,
12991
+ width,
12992
+ height,
12993
+ fit,
12994
+ effects = [],
12995
+ className,
12996
+ style,
12997
+ id,
12998
+ onError,
12999
+ pauseWhenLoading,
13000
+ maxRetries,
13001
+ delayRenderRetries,
13002
+ delayRenderTimeoutInMilliseconds,
13003
+ durationInFrames,
13004
+ from,
13005
+ hidden,
13006
+ name,
13007
+ showInTimeline,
13008
+ stack,
13009
+ _experimentalControls: controls
13010
+ }, ref) => {
13011
+ if (!src) {
13012
+ throw new Error('No "src" prop was passed to <CanvasImage>.');
13013
+ }
13014
+ const memoizedEffectDefinitions = useMemoizedEffectDefinitions(effects);
13015
+ return /* @__PURE__ */ jsx26(Sequence, {
13016
+ layout: "none",
13017
+ from: from ?? 0,
13018
+ durationInFrames: durationInFrames ?? Infinity,
13019
+ hidden,
13020
+ showInTimeline: showInTimeline ?? true,
13021
+ name: name ?? "<CanvasImage>",
13022
+ _experimentalControls: controls,
13023
+ _remotionInternalEffects: memoizedEffectDefinitions,
13024
+ _remotionInternalIsMedia: { type: "image", src },
13025
+ _remotionInternalStack: stack,
13026
+ children: /* @__PURE__ */ jsx26(CanvasImageContent, {
13027
+ ref,
13028
+ src,
13029
+ width,
13030
+ height,
13031
+ fit,
13032
+ effects,
13033
+ controls,
13034
+ className,
13035
+ style,
13036
+ id,
13037
+ onError,
13038
+ pauseWhenLoading,
13039
+ maxRetries,
13040
+ delayRenderRetries,
13041
+ delayRenderTimeoutInMilliseconds
13042
+ })
13043
+ });
13044
+ });
13045
+ var CanvasImage = wrapInSchema(CanvasImageInner, canvasImageSchema);
13046
+ CanvasImage.displayName = "CanvasImage";
13047
+ addSequenceStackTraces(CanvasImage);
13048
+ var kSplineTableSize = 11;
13049
+ var kSampleStepSize = 1 / (kSplineTableSize - 1);
13050
+ var IFrameRefForwarding = ({
13051
+ onLoad,
13052
+ onError,
13053
+ delayRenderRetries,
13054
+ delayRenderTimeoutInMilliseconds,
13055
+ ...props2
13056
+ }, ref) => {
13057
+ const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
13058
+ const [handle] = useState17(() => delayRender2(`Loading <IFrame> with source ${props2.src}`, {
13059
+ retries: delayRenderRetries ?? undefined,
13060
+ timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
13061
+ }));
13062
+ const didLoad = useCallback18((e) => {
13063
+ continueRender2(handle);
13064
+ onLoad?.(e);
13065
+ }, [handle, onLoad, continueRender2]);
13066
+ const didGetError = useCallback18((e) => {
13067
+ continueRender2(handle);
13068
+ if (onError) {
13069
+ onError(e);
13070
+ } else {
13071
+ console.error("Error loading iframe:", e, "Handle the event using the onError() prop to make this message disappear.");
13072
+ }
13073
+ }, [handle, onError, continueRender2]);
13074
+ return /* @__PURE__ */ jsx27("iframe", {
13075
+ referrerPolicy: "strict-origin-when-cross-origin",
13076
+ ...props2,
13077
+ ref,
13078
+ onError: didGetError,
13079
+ onLoad: didLoad
13080
+ });
13081
+ };
13082
+ var IFrame = forwardRef11(IFrameRefForwarding);
12726
13083
  var compositionsRef = React28.createRef();
12727
13084
  var CompositionManagerProvider = ({
12728
13085
  children,
@@ -12731,18 +13088,18 @@ var CompositionManagerProvider = ({
12731
13088
  initialCompositions,
12732
13089
  initialCanvasContent
12733
13090
  }) => {
12734
- const [folders, setFolders] = useState17([]);
12735
- const [canvasContent, setCanvasContent] = useState17(initialCanvasContent);
12736
- const [compositions, setCompositions] = useState17(initialCompositions);
13091
+ const [folders, setFolders] = useState18([]);
13092
+ const [canvasContent, setCanvasContent] = useState18(initialCanvasContent);
13093
+ const [compositions, setCompositions] = useState18(initialCompositions);
12737
13094
  const currentcompositionsRef = useRef22(compositions);
12738
- const updateCompositions = useCallback18((updateComps) => {
13095
+ const updateCompositions = useCallback19((updateComps) => {
12739
13096
  setCompositions((comps) => {
12740
13097
  const updated = updateComps(comps);
12741
13098
  currentcompositionsRef.current = updated;
12742
13099
  return updated;
12743
13100
  });
12744
13101
  }, []);
12745
- const registerComposition = useCallback18((comp) => {
13102
+ const registerComposition = useCallback19((comp) => {
12746
13103
  updateCompositions((comps) => {
12747
13104
  if (comps.find((c2) => c2.id === comp.id)) {
12748
13105
  throw new Error(`Multiple composition with id ${comp.id} are registered.`);
@@ -12750,12 +13107,12 @@ var CompositionManagerProvider = ({
12750
13107
  return [...comps, comp];
12751
13108
  });
12752
13109
  }, [updateCompositions]);
12753
- const unregisterComposition = useCallback18((id) => {
13110
+ const unregisterComposition = useCallback19((id) => {
12754
13111
  setCompositions((comps) => {
12755
13112
  return comps.filter((c2) => c2.id !== id);
12756
13113
  });
12757
13114
  }, []);
12758
- const registerFolder = useCallback18((name, parent, nonce) => {
13115
+ const registerFolder = useCallback19((name, parent, nonce) => {
12759
13116
  setFolders((prevFolders) => {
12760
13117
  return [
12761
13118
  ...prevFolders,
@@ -12767,7 +13124,7 @@ var CompositionManagerProvider = ({
12767
13124
  ];
12768
13125
  });
12769
13126
  }, []);
12770
- const unregisterFolder = useCallback18((name, parent) => {
13127
+ const unregisterFolder = useCallback19((name, parent) => {
12771
13128
  setFolders((prevFolders) => {
12772
13129
  return prevFolders.filter((p) => !(p.name === name && p.parent === parent));
12773
13130
  });
@@ -12777,7 +13134,7 @@ var CompositionManagerProvider = ({
12777
13134
  getCompositions: () => currentcompositionsRef.current
12778
13135
  };
12779
13136
  }, []);
12780
- const compositionManagerSetters = useMemo31(() => {
13137
+ const compositionManagerSetters = useMemo322(() => {
12781
13138
  return {
12782
13139
  registerComposition,
12783
13140
  unregisterComposition,
@@ -12793,7 +13150,7 @@ var CompositionManagerProvider = ({
12793
13150
  unregisterFolder,
12794
13151
  onlyRenderComposition
12795
13152
  ]);
12796
- const compositionManagerContextValue = useMemo31(() => {
13153
+ const compositionManagerContextValue = useMemo322(() => {
12797
13154
  return {
12798
13155
  compositions,
12799
13156
  folders,
@@ -12801,9 +13158,9 @@ var CompositionManagerProvider = ({
12801
13158
  canvasContent
12802
13159
  };
12803
13160
  }, [compositions, folders, currentCompositionMetadata, canvasContent]);
12804
- return /* @__PURE__ */ jsx27(CompositionManager.Provider, {
13161
+ return /* @__PURE__ */ jsx28(CompositionManager.Provider, {
12805
13162
  value: compositionManagerContextValue,
12806
- children: /* @__PURE__ */ jsx27(CompositionSetters.Provider, {
13163
+ children: /* @__PURE__ */ jsx28(CompositionSetters.Provider, {
12807
13164
  value: compositionManagerSetters,
12808
13165
  children
12809
13166
  })
@@ -12921,7 +13278,7 @@ var waitForRoot = (fn) => {
12921
13278
  };
12922
13279
  var MediaEnabledContext = createContext23(null);
12923
13280
  var useVideoEnabled = () => {
12924
- const context = useContext33(MediaEnabledContext);
13281
+ const context = useContext34(MediaEnabledContext);
12925
13282
  if (!context) {
12926
13283
  return window.remotion_videoEnabled;
12927
13284
  }
@@ -12931,7 +13288,7 @@ var useVideoEnabled = () => {
12931
13288
  return context.videoEnabled;
12932
13289
  };
12933
13290
  var useAudioEnabled = () => {
12934
- const context = useContext33(MediaEnabledContext);
13291
+ const context = useContext34(MediaEnabledContext);
12935
13292
  if (!context) {
12936
13293
  return window.remotion_audioEnabled;
12937
13294
  }
@@ -12945,8 +13302,8 @@ var MediaEnabledProvider = ({
12945
13302
  videoEnabled,
12946
13303
  audioEnabled
12947
13304
  }) => {
12948
- const value = useMemo322(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
12949
- return /* @__PURE__ */ jsx28(MediaEnabledContext.Provider, {
13305
+ const value = useMemo33(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
13306
+ return /* @__PURE__ */ jsx29(MediaEnabledContext.Provider, {
12950
13307
  value,
12951
13308
  children
12952
13309
  });
@@ -12960,33 +13317,33 @@ var RemotionRootContexts = ({
12960
13317
  audioEnabled,
12961
13318
  frameState
12962
13319
  }) => {
12963
- const nonceContext = useMemo33(() => {
13320
+ const nonceContext = useMemo34(() => {
12964
13321
  let counter = 0;
12965
13322
  return {
12966
13323
  getNonce: () => counter++
12967
13324
  };
12968
13325
  }, []);
12969
- const logging = useMemo33(() => {
13326
+ const logging = useMemo34(() => {
12970
13327
  return { logLevel, mountTime: Date.now() };
12971
13328
  }, [logLevel]);
12972
- return /* @__PURE__ */ jsx29(LogLevelContext.Provider, {
13329
+ return /* @__PURE__ */ jsx30(LogLevelContext.Provider, {
12973
13330
  value: logging,
12974
- children: /* @__PURE__ */ jsx29(NonceContext.Provider, {
13331
+ children: /* @__PURE__ */ jsx30(NonceContext.Provider, {
12975
13332
  value: nonceContext,
12976
- children: /* @__PURE__ */ jsx29(TimelineContextProvider, {
13333
+ children: /* @__PURE__ */ jsx30(TimelineContextProvider, {
12977
13334
  frameState,
12978
- children: /* @__PURE__ */ jsx29(MediaEnabledProvider, {
13335
+ children: /* @__PURE__ */ jsx30(MediaEnabledProvider, {
12979
13336
  videoEnabled,
12980
13337
  audioEnabled,
12981
- children: /* @__PURE__ */ jsx29(EditorPropsProvider, {
12982
- children: /* @__PURE__ */ jsx29(PrefetchProvider, {
12983
- children: /* @__PURE__ */ jsx29(SequenceManagerProvider, {
12984
- children: /* @__PURE__ */ jsx29(DurationsContextProvider, {
12985
- children: /* @__PURE__ */ jsx29(BufferingProvider, {
12986
- children: /* @__PURE__ */ jsx29(SharedAudioContextProvider, {
13338
+ children: /* @__PURE__ */ jsx30(EditorPropsProvider, {
13339
+ children: /* @__PURE__ */ jsx30(PrefetchProvider, {
13340
+ children: /* @__PURE__ */ jsx30(SequenceManagerProvider, {
13341
+ children: /* @__PURE__ */ jsx30(DurationsContextProvider, {
13342
+ children: /* @__PURE__ */ jsx30(BufferingProvider, {
13343
+ children: /* @__PURE__ */ jsx30(SharedAudioContextProvider, {
12987
13344
  audioLatencyHint,
12988
13345
  audioEnabled,
12989
- children: /* @__PURE__ */ jsx29(SharedAudioTagsContextProvider, {
13346
+ children: /* @__PURE__ */ jsx30(SharedAudioTagsContextProvider, {
12990
13347
  numberOfAudioTags,
12991
13348
  children
12992
13349
  })
@@ -13254,13 +13611,13 @@ var OffthreadVideoForRendering = ({
13254
13611
  const frame = useCurrentFrame();
13255
13612
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior);
13256
13613
  const videoConfig = useUnsafeVideoConfig();
13257
- const sequenceContext = useContext34(SequenceContext);
13614
+ const sequenceContext = useContext35(SequenceContext);
13258
13615
  const mediaStartsAt = useMediaStartsAt();
13259
- const { registerRenderAsset, unregisterRenderAsset } = useContext34(RenderAssetManager);
13616
+ const { registerRenderAsset, unregisterRenderAsset } = useContext35(RenderAssetManager);
13260
13617
  if (!src) {
13261
13618
  throw new TypeError("No `src` was passed to <OffthreadVideo>.");
13262
13619
  }
13263
- const id = useMemo34(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
13620
+ const id = useMemo35(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
13264
13621
  src,
13265
13622
  sequenceContext?.cumulatedFrom,
13266
13623
  sequenceContext?.relativeFrom,
@@ -13275,7 +13632,7 @@ var OffthreadVideoForRendering = ({
13275
13632
  mediaVolume: 1
13276
13633
  });
13277
13634
  warnAboutTooHighVolume(volume);
13278
- useEffect16(() => {
13635
+ useEffect17(() => {
13279
13636
  if (!src) {
13280
13637
  throw new Error("No src passed");
13281
13638
  }
@@ -13297,7 +13654,7 @@ var OffthreadVideoForRendering = ({
13297
13654
  mediaFrame: frame,
13298
13655
  playbackRate,
13299
13656
  toneFrequency,
13300
- audioStartFrame: Math.max(0, -(sequenceContext?.relativeFrom ?? 0)),
13657
+ audioStartFrame: Math.max(0, -(sequenceContext?.cumulatedNegativeFrom ?? 0)),
13301
13658
  audioStreamIndex
13302
13659
  });
13303
13660
  return () => unregisterRenderAsset(id);
@@ -13312,17 +13669,17 @@ var OffthreadVideoForRendering = ({
13312
13669
  absoluteFrame,
13313
13670
  playbackRate,
13314
13671
  toneFrequency,
13315
- sequenceContext?.relativeFrom,
13672
+ sequenceContext?.cumulatedNegativeFrom,
13316
13673
  audioStreamIndex
13317
13674
  ]);
13318
- const currentTime = useMemo34(() => {
13675
+ const currentTime = useMemo35(() => {
13319
13676
  return getExpectedMediaFrameUncorrected({
13320
13677
  frame,
13321
13678
  playbackRate: playbackRate || 1,
13322
13679
  startFrom: -mediaStartsAt
13323
13680
  }) / videoConfig.fps;
13324
13681
  }, [frame, mediaStartsAt, playbackRate, videoConfig.fps]);
13325
- const actualSrc = useMemo34(() => {
13682
+ const actualSrc = useMemo35(() => {
13326
13683
  return getOffthreadVideoSource({
13327
13684
  src,
13328
13685
  currentTime,
@@ -13330,7 +13687,7 @@ var OffthreadVideoForRendering = ({
13330
13687
  toneMapped
13331
13688
  });
13332
13689
  }, [toneMapped, currentTime, src, transparent]);
13333
- const [imageSrc, setImageSrc] = useState18(null);
13690
+ const [imageSrc, setImageSrc] = useState19(null);
13334
13691
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
13335
13692
  useLayoutEffect11(() => {
13336
13693
  if (!window.remotion_videoEnabled) {
@@ -13403,17 +13760,17 @@ var OffthreadVideoForRendering = ({
13403
13760
  continueRender2,
13404
13761
  delayRender2
13405
13762
  ]);
13406
- const onErr = useCallback19(() => {
13763
+ const onErr = useCallback20(() => {
13407
13764
  if (onError) {
13408
13765
  onError?.(new Error("Failed to load image with src " + imageSrc));
13409
13766
  } else {
13410
13767
  cancelRender("Failed to load image with src " + imageSrc);
13411
13768
  }
13412
13769
  }, [imageSrc, onError]);
13413
- const className = useMemo34(() => {
13770
+ const className = useMemo35(() => {
13414
13771
  return [OBJECTFIT_CONTAIN_CLASS_NAME, props2.className].filter(truthy2).join(" ");
13415
13772
  }, [props2.className]);
13416
- const onImageFrame = useCallback19((img) => {
13773
+ const onImageFrame = useCallback20((img) => {
13417
13774
  if (onVideoFrame) {
13418
13775
  onVideoFrame(img);
13419
13776
  }
@@ -13422,7 +13779,7 @@ var OffthreadVideoForRendering = ({
13422
13779
  return null;
13423
13780
  }
13424
13781
  continueRender2(imageSrc.handle);
13425
- return /* @__PURE__ */ jsx30(Img, {
13782
+ return /* @__PURE__ */ jsx31(Img, {
13426
13783
  src: imageSrc.src,
13427
13784
  delayRenderRetries,
13428
13785
  delayRenderTimeoutInMilliseconds,
@@ -13436,7 +13793,7 @@ var useEmitVideoFrame = ({
13436
13793
  ref,
13437
13794
  onVideoFrame
13438
13795
  }) => {
13439
- useEffect17(() => {
13796
+ useEffect18(() => {
13440
13797
  const { current } = ref;
13441
13798
  if (!current) {
13442
13799
  return;
@@ -13468,12 +13825,12 @@ class MediaPlaybackError extends Error {
13468
13825
  }
13469
13826
  }
13470
13827
  var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
13471
- const context = useContext35(SharedAudioContext);
13828
+ const context = useContext36(SharedAudioContext);
13472
13829
  if (!context) {
13473
13830
  throw new Error("SharedAudioContext not found");
13474
13831
  }
13475
13832
  const videoRef = useRef23(null);
13476
- const sharedSource = useMemo35(() => {
13833
+ const sharedSource = useMemo36(() => {
13477
13834
  if (!context.audioContext) {
13478
13835
  return null;
13479
13836
  }
@@ -13525,10 +13882,10 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
13525
13882
  }
13526
13883
  const volumePropFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
13527
13884
  const { fps, durationInFrames } = useVideoConfig();
13528
- const parentSequence = useContext35(SequenceContext);
13885
+ const parentSequence = useContext36(SequenceContext);
13529
13886
  const logLevel = useLogLevel();
13530
13887
  const mountTime = useMountTime();
13531
- const [timelineId] = useState19(() => String(Math.random()));
13888
+ const [timelineId] = useState20(() => String(Math.random()));
13532
13889
  if (typeof acceptableTimeShift !== "undefined") {
13533
13890
  throw new Error("acceptableTimeShift has been removed. Use acceptableTimeShiftInSeconds instead.");
13534
13891
  }
@@ -13540,7 +13897,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
13540
13897
  mediaVolume
13541
13898
  });
13542
13899
  warnAboutTooHighVolume(userPreferredVolume);
13543
- const getStack = useCallback20(() => {
13900
+ const getStack = useCallback21(() => {
13544
13901
  return _remotionInternalStack ?? null;
13545
13902
  }, [_remotionInternalStack]);
13546
13903
  useMediaInTimeline({
@@ -13598,13 +13955,13 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
13598
13955
  useImperativeHandle8(ref, () => {
13599
13956
  return videoRef.current;
13600
13957
  }, []);
13601
- useState19(() => playbackLogging({
13958
+ useState20(() => playbackLogging({
13602
13959
  logLevel,
13603
13960
  message: `Mounting video with source = ${actualSrc}, v=${VERSION}, user agent=${typeof navigator === "undefined" ? "server" : navigator.userAgent}`,
13604
13961
  tag: "video",
13605
13962
  mountTime
13606
13963
  }));
13607
- useEffect18(() => {
13964
+ useEffect19(() => {
13608
13965
  const { current } = videoRef;
13609
13966
  if (!current) {
13610
13967
  return;
@@ -13647,7 +14004,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
13647
14004
  const currentOnDurationCallback = useRef23(onDuration);
13648
14005
  currentOnDurationCallback.current = onDuration;
13649
14006
  useEmitVideoFrame({ ref: videoRef, onVideoFrame });
13650
- useEffect18(() => {
14007
+ useEffect19(() => {
13651
14008
  const { current } = videoRef;
13652
14009
  if (!current) {
13653
14010
  return;
@@ -13664,7 +14021,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
13664
14021
  current.removeEventListener("loadedmetadata", onLoadedMetadata);
13665
14022
  };
13666
14023
  }, [src]);
13667
- useEffect18(() => {
14024
+ useEffect19(() => {
13668
14025
  const { current } = videoRef;
13669
14026
  if (!current) {
13670
14027
  return;
@@ -13675,7 +14032,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
13675
14032
  current.preload = "auto";
13676
14033
  }
13677
14034
  }, []);
13678
- const actualStyle = useMemo35(() => {
14035
+ const actualStyle = useMemo36(() => {
13679
14036
  return {
13680
14037
  ...style
13681
14038
  };
@@ -13685,7 +14042,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
13685
14042
  requestsVideoFrame: Boolean(onVideoFrame),
13686
14043
  isClientSideRendering: false
13687
14044
  });
13688
- return /* @__PURE__ */ jsx31("video", {
14045
+ return /* @__PURE__ */ jsx322("video", {
13689
14046
  ref: videoRef,
13690
14047
  muted: muted || mediaMuted || userPreferredVolume <= 0,
13691
14048
  playsInline: true,
@@ -13697,7 +14054,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
13697
14054
  ...nativeProps
13698
14055
  });
13699
14056
  };
13700
- var VideoForPreview = forwardRef11(VideoForDevelopmentRefForwardingFunction);
14057
+ var VideoForPreview = forwardRef12(VideoForDevelopmentRefForwardingFunction);
13701
14058
  var InnerOffthreadVideo = (props2) => {
13702
14059
  const {
13703
14060
  startFrom,
@@ -13714,7 +14071,7 @@ var InnerOffthreadVideo = (props2) => {
13714
14071
  if (environment.isClientSideRendering) {
13715
14072
  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");
13716
14073
  }
13717
- const onDuration = useCallback21(() => {
14074
+ const onDuration = useCallback22(() => {
13718
14075
  return;
13719
14076
  }, []);
13720
14077
  if (typeof props2.src !== "string") {
@@ -13728,13 +14085,13 @@ var InnerOffthreadVideo = (props2) => {
13728
14085
  trimAfter
13729
14086
  });
13730
14087
  if (typeof trimBeforeValue !== "undefined" || typeof trimAfterValue !== "undefined") {
13731
- return /* @__PURE__ */ jsx322(Sequence, {
14088
+ return /* @__PURE__ */ jsx33(Sequence, {
13732
14089
  layout: "none",
13733
14090
  from: 0 - (trimBeforeValue ?? 0),
13734
14091
  showInTimeline: false,
13735
14092
  durationInFrames: trimAfterValue,
13736
14093
  name,
13737
- children: /* @__PURE__ */ jsx322(InnerOffthreadVideo, {
14094
+ children: /* @__PURE__ */ jsx33(InnerOffthreadVideo, {
13738
14095
  pauseWhenBuffering: pauseWhenBuffering ?? false,
13739
14096
  ...otherProps,
13740
14097
  trimAfter: undefined,
@@ -13749,7 +14106,7 @@ var InnerOffthreadVideo = (props2) => {
13749
14106
  }
13750
14107
  validateMediaProps(props2, "Video");
13751
14108
  if (environment.isRendering) {
13752
- return /* @__PURE__ */ jsx322(OffthreadVideoForRendering, {
14109
+ return /* @__PURE__ */ jsx33(OffthreadVideoForRendering, {
13753
14110
  pauseWhenBuffering: pauseWhenBuffering ?? false,
13754
14111
  ...otherProps,
13755
14112
  trimAfter: undefined,
@@ -13771,7 +14128,7 @@ var InnerOffthreadVideo = (props2) => {
13771
14128
  delayRenderTimeoutInMilliseconds,
13772
14129
  ...propsForPreview
13773
14130
  } = otherProps;
13774
- return /* @__PURE__ */ jsx322(VideoForPreview, {
14131
+ return /* @__PURE__ */ jsx33(VideoForPreview, {
13775
14132
  _remotionInternalStack: stack ?? null,
13776
14133
  onDuration,
13777
14134
  onlyWarnForMediaSeekingError: true,
@@ -13821,7 +14178,7 @@ var OffthreadVideo = ({
13821
14178
  if (imageFormat) {
13822
14179
  throw new TypeError(`The \`<OffthreadVideo>\` tag does no longer accept \`imageFormat\`. Use the \`transparent\` prop if you want to render a transparent video.`);
13823
14180
  }
13824
- return /* @__PURE__ */ jsx322(InnerOffthreadVideo, {
14181
+ return /* @__PURE__ */ jsx33(InnerOffthreadVideo, {
13825
14182
  acceptableTimeShiftInSeconds,
13826
14183
  allowAmplificationDuringRender: allowAmplificationDuringRender ?? true,
13827
14184
  audioStreamIndex: audioStreamIndex ?? 0,
@@ -13870,7 +14227,7 @@ function useRemotionContexts() {
13870
14227
  const sequenceManagerContext = React36.useContext(SequenceManager);
13871
14228
  const bufferManagerContext = React36.useContext(BufferingContextReact);
13872
14229
  const logLevelContext = React36.useContext(LogLevelContext);
13873
- return useMemo36(() => ({
14230
+ return useMemo37(() => ({
13874
14231
  compositionManagerCtx,
13875
14232
  timelineContext,
13876
14233
  setTimelineContext,
@@ -13900,29 +14257,29 @@ function useRemotionContexts() {
13900
14257
  }
13901
14258
  var RemotionContextProvider = (props2) => {
13902
14259
  const { children, contexts } = props2;
13903
- return /* @__PURE__ */ jsx33(LogLevelContext.Provider, {
14260
+ return /* @__PURE__ */ jsx34(LogLevelContext.Provider, {
13904
14261
  value: contexts.logLevelContext,
13905
- children: /* @__PURE__ */ jsx33(CanUseRemotionHooks.Provider, {
14262
+ children: /* @__PURE__ */ jsx34(CanUseRemotionHooks.Provider, {
13906
14263
  value: contexts.canUseRemotionHooksContext,
13907
- children: /* @__PURE__ */ jsx33(NonceContext.Provider, {
14264
+ children: /* @__PURE__ */ jsx34(NonceContext.Provider, {
13908
14265
  value: contexts.nonceContext,
13909
- children: /* @__PURE__ */ jsx33(PreloadContext.Provider, {
14266
+ children: /* @__PURE__ */ jsx34(PreloadContext.Provider, {
13910
14267
  value: contexts.preloadContext,
13911
- children: /* @__PURE__ */ jsx33(CompositionManager.Provider, {
14268
+ children: /* @__PURE__ */ jsx34(CompositionManager.Provider, {
13912
14269
  value: contexts.compositionManagerCtx,
13913
- children: /* @__PURE__ */ jsx33(SequenceManager.Provider, {
14270
+ children: /* @__PURE__ */ jsx34(SequenceManager.Provider, {
13914
14271
  value: contexts.sequenceManagerContext,
13915
- children: /* @__PURE__ */ jsx33(RenderAssetManager.Provider, {
14272
+ children: /* @__PURE__ */ jsx34(RenderAssetManager.Provider, {
13916
14273
  value: contexts.renderAssetManagerContext,
13917
- children: /* @__PURE__ */ jsx33(ResolveCompositionContext.Provider, {
14274
+ children: /* @__PURE__ */ jsx34(ResolveCompositionContext.Provider, {
13918
14275
  value: contexts.resolveCompositionContext,
13919
- children: /* @__PURE__ */ jsx33(TimelineContext.Provider, {
14276
+ children: /* @__PURE__ */ jsx34(TimelineContext.Provider, {
13920
14277
  value: contexts.timelineContext,
13921
- children: /* @__PURE__ */ jsx33(SetTimelineContext.Provider, {
14278
+ children: /* @__PURE__ */ jsx34(SetTimelineContext.Provider, {
13922
14279
  value: contexts.setTimelineContext,
13923
- children: /* @__PURE__ */ jsx33(SequenceContext.Provider, {
14280
+ children: /* @__PURE__ */ jsx34(SequenceContext.Provider, {
13924
14281
  value: contexts.sequenceContext,
13925
- children: /* @__PURE__ */ jsx33(BufferingContextReact.Provider, {
14282
+ children: /* @__PURE__ */ jsx34(BufferingContextReact.Provider, {
13926
14283
  value: contexts.bufferManagerContext,
13927
14284
  children
13928
14285
  })
@@ -13947,6 +14304,7 @@ var Internals = {
13947
14304
  useAbsoluteTimelinePosition,
13948
14305
  evaluateVolume,
13949
14306
  getAbsoluteSrc,
14307
+ getAssetDisplayName,
13950
14308
  Timeline: exports_timeline_position_state,
13951
14309
  validateMediaTrimProps,
13952
14310
  validateMediaProps,
@@ -14107,13 +14465,13 @@ var flattenChildren = (children) => {
14107
14465
  };
14108
14466
  var IsInsideSeriesContext = createContext25(false);
14109
14467
  var IsInsideSeriesContainer = ({ children }) => {
14110
- return /* @__PURE__ */ jsx34(IsInsideSeriesContext.Provider, {
14468
+ return /* @__PURE__ */ jsx35(IsInsideSeriesContext.Provider, {
14111
14469
  value: true,
14112
14470
  children
14113
14471
  });
14114
14472
  };
14115
14473
  var IsNotInsideSeriesProvider = ({ children }) => {
14116
- return /* @__PURE__ */ jsx34(IsInsideSeriesContext.Provider, {
14474
+ return /* @__PURE__ */ jsx35(IsInsideSeriesContext.Provider, {
14117
14475
  value: false,
14118
14476
  children
14119
14477
  });
@@ -14126,13 +14484,13 @@ var useRequireToBeInsideSeries = () => {
14126
14484
  };
14127
14485
  var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
14128
14486
  useRequireToBeInsideSeries();
14129
- return /* @__PURE__ */ jsx35(IsNotInsideSeriesProvider, {
14487
+ return /* @__PURE__ */ jsx36(IsNotInsideSeriesProvider, {
14130
14488
  children
14131
14489
  });
14132
14490
  };
14133
- var SeriesSequence = forwardRef12(SeriesSequenceRefForwardingFunction);
14491
+ var SeriesSequence = forwardRef13(SeriesSequenceRefForwardingFunction);
14134
14492
  var SeriesInner = (props2) => {
14135
- const childrenValue = useMemo37(() => {
14493
+ const childrenValue = useMemo38(() => {
14136
14494
  let startFrame = 0;
14137
14495
  const flattenedChildren = flattenChildren(props2.children);
14138
14496
  return Children.map(flattenedChildren, (child, i) => {
@@ -14173,7 +14531,7 @@ var SeriesInner = (props2) => {
14173
14531
  }
14174
14532
  const currentStartFrame = startFrame + offset;
14175
14533
  startFrame += durationInFramesProp + offset;
14176
- return /* @__PURE__ */ jsx35(Sequence, {
14534
+ return /* @__PURE__ */ jsx36(Sequence, {
14177
14535
  name: name || "<Series.Sequence>",
14178
14536
  _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
14179
14537
  from: currentStartFrame,
@@ -14184,8 +14542,8 @@ var SeriesInner = (props2) => {
14184
14542
  });
14185
14543
  });
14186
14544
  }, [props2.children]);
14187
- return /* @__PURE__ */ jsx35(IsInsideSeriesContainer, {
14188
- children: /* @__PURE__ */ jsx35(Sequence, {
14545
+ return /* @__PURE__ */ jsx36(IsInsideSeriesContainer, {
14546
+ children: /* @__PURE__ */ jsx36(Sequence, {
14189
14547
  layout: "none",
14190
14548
  name: "<Series>",
14191
14549
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/series",
@@ -14665,14 +15023,14 @@ var VideoForRenderingForwardFunction = ({
14665
15023
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
14666
15024
  const videoConfig = useUnsafeVideoConfig();
14667
15025
  const videoRef = useRef24(null);
14668
- const sequenceContext = useContext36(SequenceContext);
15026
+ const sequenceContext = useContext37(SequenceContext);
14669
15027
  const mediaStartsAt = useMediaStartsAt();
14670
15028
  const environment = useRemotionEnvironment();
14671
15029
  const logLevel = useLogLevel();
14672
15030
  const mountTime = useMountTime();
14673
15031
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
14674
- const { registerRenderAsset, unregisterRenderAsset } = useContext36(RenderAssetManager);
14675
- const id = useMemo38(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
15032
+ const { registerRenderAsset, unregisterRenderAsset } = useContext37(RenderAssetManager);
15033
+ const id = useMemo39(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
14676
15034
  props2.src,
14677
15035
  sequenceContext?.cumulatedFrom,
14678
15036
  sequenceContext?.relativeFrom,
@@ -14687,7 +15045,7 @@ var VideoForRenderingForwardFunction = ({
14687
15045
  mediaVolume: 1
14688
15046
  });
14689
15047
  warnAboutTooHighVolume(volume);
14690
- useEffect19(() => {
15048
+ useEffect20(() => {
14691
15049
  if (!props2.src) {
14692
15050
  throw new Error("No src passed");
14693
15051
  }
@@ -14709,7 +15067,7 @@ var VideoForRenderingForwardFunction = ({
14709
15067
  mediaFrame: frame,
14710
15068
  playbackRate: playbackRate ?? 1,
14711
15069
  toneFrequency: toneFrequency ?? 1,
14712
- audioStartFrame: Math.max(0, -(sequenceContext?.relativeFrom ?? 0)),
15070
+ audioStartFrame: Math.max(0, -(sequenceContext?.cumulatedNegativeFrom ?? 0)),
14713
15071
  audioStreamIndex: audioStreamIndex ?? 0
14714
15072
  });
14715
15073
  return () => unregisterRenderAsset(id);
@@ -14724,13 +15082,13 @@ var VideoForRenderingForwardFunction = ({
14724
15082
  absoluteFrame,
14725
15083
  playbackRate,
14726
15084
  toneFrequency,
14727
- sequenceContext?.relativeFrom,
15085
+ sequenceContext?.cumulatedNegativeFrom,
14728
15086
  audioStreamIndex
14729
15087
  ]);
14730
15088
  useImperativeHandle9(ref, () => {
14731
15089
  return videoRef.current;
14732
15090
  }, []);
14733
- useEffect19(() => {
15091
+ useEffect20(() => {
14734
15092
  if (!window.remotion_videoEnabled) {
14735
15093
  return;
14736
15094
  }
@@ -14854,13 +15212,13 @@ var VideoForRenderingForwardFunction = ({
14854
15212
  delayRender2
14855
15213
  ]);
14856
15214
  }
14857
- return /* @__PURE__ */ jsx36("video", {
15215
+ return /* @__PURE__ */ jsx37("video", {
14858
15216
  ref: videoRef,
14859
15217
  disableRemotePlayback: true,
14860
15218
  ...props2
14861
15219
  });
14862
15220
  };
14863
- var VideoForRendering = forwardRef13(VideoForRenderingForwardFunction);
15221
+ var VideoForRendering = forwardRef14(VideoForRenderingForwardFunction);
14864
15222
  var VideoForwardingFunction = (props2, ref) => {
14865
15223
  const {
14866
15224
  startFrom,
@@ -14881,7 +15239,7 @@ var VideoForwardingFunction = (props2, ref) => {
14881
15239
  if (environment.isClientSideRendering) {
14882
15240
  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");
14883
15241
  }
14884
- const { durations, setDurations } = useContext37(DurationsContext);
15242
+ const { durations, setDurations } = useContext38(DurationsContext);
14885
15243
  if (typeof ref === "string") {
14886
15244
  throw new Error("string refs are not supported");
14887
15245
  }
@@ -14889,10 +15247,10 @@ var VideoForwardingFunction = (props2, ref) => {
14889
15247
  throw new TypeError(`The \`<Html5Video>\` tag requires a string for \`src\`, but got ${JSON.stringify(props2.src)} instead.`);
14890
15248
  }
14891
15249
  const preloadedSrc = usePreload(props2.src);
14892
- const onDuration = useCallback22((src, durationInSeconds) => {
15250
+ const onDuration = useCallback23((src, durationInSeconds) => {
14893
15251
  setDurations({ type: "got-duration", durationInSeconds, src });
14894
15252
  }, [setDurations]);
14895
- const onVideoFrame = useCallback22(() => {}, []);
15253
+ const onVideoFrame = useCallback23(() => {}, []);
14896
15254
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props2.src)];
14897
15255
  validateMediaTrimProps({ startFrom, endAt, trimBefore, trimAfter });
14898
15256
  const { trimBeforeValue, trimAfterValue } = resolveTrimProps({
@@ -14903,7 +15261,7 @@ var VideoForwardingFunction = (props2, ref) => {
14903
15261
  });
14904
15262
  if (loop && durationFetched !== undefined) {
14905
15263
  if (!Number.isFinite(durationFetched)) {
14906
- return /* @__PURE__ */ jsx37(Html5Video, {
15264
+ return /* @__PURE__ */ jsx38(Html5Video, {
14907
15265
  ...propsOtherThanLoop,
14908
15266
  ref,
14909
15267
  stack,
@@ -14911,7 +15269,7 @@ var VideoForwardingFunction = (props2, ref) => {
14911
15269
  });
14912
15270
  }
14913
15271
  const mediaDuration = durationFetched * fps;
14914
- return /* @__PURE__ */ jsx37(Loop, {
15272
+ return /* @__PURE__ */ jsx38(Loop, {
14915
15273
  durationInFrames: calculateMediaDuration({
14916
15274
  trimAfter: trimAfterValue,
14917
15275
  mediaDurationInFrames: mediaDuration,
@@ -14921,7 +15279,7 @@ var VideoForwardingFunction = (props2, ref) => {
14921
15279
  layout: "none",
14922
15280
  name,
14923
15281
  showInTimeline: false,
14924
- children: /* @__PURE__ */ jsx37(Html5Video, {
15282
+ children: /* @__PURE__ */ jsx38(Html5Video, {
14925
15283
  ...propsOtherThanLoop,
14926
15284
  ref,
14927
15285
  stack,
@@ -14930,13 +15288,13 @@ var VideoForwardingFunction = (props2, ref) => {
14930
15288
  });
14931
15289
  }
14932
15290
  if (typeof trimBeforeValue !== "undefined" || typeof trimAfterValue !== "undefined") {
14933
- return /* @__PURE__ */ jsx37(Sequence, {
15291
+ return /* @__PURE__ */ jsx38(Sequence, {
14934
15292
  layout: "none",
14935
15293
  from: 0 - (trimBeforeValue ?? 0),
14936
15294
  showInTimeline: false,
14937
15295
  durationInFrames: trimAfterValue === undefined ? undefined : trimAfterValue / (props2.playbackRate ?? 1),
14938
15296
  name,
14939
- children: /* @__PURE__ */ jsx37(Html5Video, {
15297
+ children: /* @__PURE__ */ jsx38(Html5Video, {
14940
15298
  pauseWhenBuffering: pauseWhenBuffering ?? false,
14941
15299
  ...otherProps,
14942
15300
  ref,
@@ -14950,14 +15308,14 @@ var VideoForwardingFunction = (props2, ref) => {
14950
15308
  volume: props2.volume
14951
15309
  }, "Html5Video");
14952
15310
  if (environment.isRendering) {
14953
- return /* @__PURE__ */ jsx37(VideoForRendering, {
15311
+ return /* @__PURE__ */ jsx38(VideoForRendering, {
14954
15312
  onDuration,
14955
15313
  onVideoFrame: onVideoFrame ?? null,
14956
15314
  ...otherProps,
14957
15315
  ref
14958
15316
  });
14959
15317
  }
14960
- return /* @__PURE__ */ jsx37(VideoForPreview, {
15318
+ return /* @__PURE__ */ jsx38(VideoForPreview, {
14961
15319
  onlyWarnForMediaSeekingError: false,
14962
15320
  ...otherProps,
14963
15321
  ref,
@@ -14970,7 +15328,7 @@ var VideoForwardingFunction = (props2, ref) => {
14970
15328
  onAutoPlayError: onAutoPlayError ?? undefined
14971
15329
  });
14972
15330
  };
14973
- var Html5Video = forwardRef14(VideoForwardingFunction);
15331
+ var Html5Video = forwardRef15(VideoForwardingFunction);
14974
15332
  addSequenceStackTraces(Html5Video);
14975
15333
  checkMultipleRemotionVersions();
14976
15334
  var proxyObj = {};
@@ -14999,7 +15357,7 @@ addSequenceStackTraces(Composition);
14999
15357
 
15000
15358
  // ../design/dist/esm/index.mjs
15001
15359
  import { jsx as jsx210, Fragment as Fragment3 } from "react/jsx-runtime";
15002
- import { jsx as jsx39, jsxs as jsxs3 } from "react/jsx-runtime";
15360
+ import { jsx as jsx310, jsxs as jsxs3 } from "react/jsx-runtime";
15003
15361
  import { useEffect as useEffect22, useMemo as useMemo210, useRef as useRef26 } from "react";
15004
15362
  import { jsx as jsx43 } from "react/jsx-runtime";
15005
15363
  import { jsx as jsx53, jsxs as jsxs23 } from "react/jsx-runtime";
@@ -15155,9 +15513,9 @@ function createSlot(ownerName) {
15155
15513
  return child;
15156
15514
  }
15157
15515
  });
15158
- return /* @__PURE__ */ jsx38(SlotClone, { ...slotProps, ref: forwardedRef, children: React24.isValidElement(newElement) ? React24.cloneElement(newElement, undefined, newChildren) : null });
15516
+ return /* @__PURE__ */ jsx39(SlotClone, { ...slotProps, ref: forwardedRef, children: React24.isValidElement(newElement) ? React24.cloneElement(newElement, undefined, newChildren) : null });
15159
15517
  }
15160
- return /* @__PURE__ */ jsx38(SlotClone, { ...slotProps, ref: forwardedRef, children });
15518
+ return /* @__PURE__ */ jsx39(SlotClone, { ...slotProps, ref: forwardedRef, children });
15161
15519
  });
15162
15520
  Slot2.displayName = `${ownerName}.Slot`;
15163
15521
  return Slot2;
@@ -15185,7 +15543,7 @@ function createSlotClone(ownerName) {
15185
15543
  var SLOTTABLE_IDENTIFIER = Symbol("radix.slottable");
15186
15544
  function createSlottable(ownerName) {
15187
15545
  const Slottable2 = ({ children }) => {
15188
- return /* @__PURE__ */ jsx38(Fragment2, { children });
15546
+ return /* @__PURE__ */ jsx39(Fragment2, { children });
15189
15547
  };
15190
15548
  Slottable2.displayName = `${ownerName}.Slottable`;
15191
15549
  Slottable2.__radixId = SLOTTABLE_IDENTIFIER;
@@ -15254,8 +15612,8 @@ var useHoverTransforms = (ref, disabled) => {
15254
15612
  progress: 0,
15255
15613
  isActive: false
15256
15614
  });
15257
- const eventTarget = useMemo39(() => new EventTarget, []);
15258
- useEffect20(() => {
15615
+ const eventTarget = useMemo40(() => new EventTarget, []);
15616
+ useEffect21(() => {
15259
15617
  if (disabled) {
15260
15618
  eventTarget.dispatchEvent(new Event("disabled"));
15261
15619
  } else {
@@ -15401,8 +15759,8 @@ var getAngle = (ref, coordinates) => {
15401
15759
  };
15402
15760
  var lastCoordinates = null;
15403
15761
  var useMousePosition = (ref) => {
15404
- const [angle, setAngle] = useState20(getAngle(ref.current, lastCoordinates));
15405
- useEffect20(() => {
15762
+ const [angle, setAngle] = useState21(getAngle(ref.current, lastCoordinates));
15763
+ useEffect21(() => {
15406
15764
  const element = ref.current;
15407
15765
  if (!element) {
15408
15766
  return;
@@ -15486,7 +15844,7 @@ var Outer = ({
15486
15844
  className: "relative",
15487
15845
  style: { width, height },
15488
15846
  children: [
15489
- /* @__PURE__ */ jsx39("svg", {
15847
+ /* @__PURE__ */ jsx310("svg", {
15490
15848
  viewBox,
15491
15849
  style: {
15492
15850
  overflow: "visible",
@@ -15497,11 +15855,11 @@ var Outer = ({
15497
15855
  left: 0
15498
15856
  },
15499
15857
  pointerEvents: "none",
15500
- children: /* @__PURE__ */ jsx39(Faces, {
15858
+ children: /* @__PURE__ */ jsx310(Faces, {
15501
15859
  elements: inbetween
15502
15860
  })
15503
15861
  }),
15504
- /* @__PURE__ */ jsx39("div", {
15862
+ /* @__PURE__ */ jsx310("div", {
15505
15863
  style: {
15506
15864
  transform: makeMatrix3dTransform(frontFace),
15507
15865
  width,
@@ -15570,7 +15928,7 @@ var Button = ({
15570
15928
  const [dimensions, setDimensions] = useState22(null);
15571
15929
  const ref = useRef25(null);
15572
15930
  const { isActive, progress } = useHoverTransforms(ref, Boolean(disabled || loading));
15573
- const onPointerEnter = useCallback24((e) => {
15931
+ const onPointerEnter = useCallback25((e) => {
15574
15932
  if (e.pointerType !== "mouse") {
15575
15933
  return;
15576
15934
  }
@@ -15607,7 +15965,7 @@ var Button = ({
15607
15965
  const isDisabled = disabled || loading;
15608
15966
  const isAnchor = !asChild && "href" in rest && rest.href !== undefined;
15609
15967
  const sharedClasses = cn("text-text", "inline-flex", "justify-center", "bg-button-bg", "items-center", "font-brand", "border-solid", "text-[1em]", "rounded-lg", "border-black", "border-2", "border-b-4", "cursor-pointer", "px-4", "h-12", "flex-row", "items-center", "relative", "overflow-hidden", isDisabled && "cursor-default opacity-50", className);
15610
- const preventInteraction = useCallback24((e) => {
15968
+ const preventInteraction = useCallback25((e) => {
15611
15969
  e.preventDefault();
15612
15970
  e.stopPropagation();
15613
15971
  }, []);
@@ -21701,11 +22059,11 @@ var Triangle2 = (props) => {
21701
22059
  };
21702
22060
 
21703
22061
  // src/components/design.tsx
21704
- import { useCallback as useCallback35, useState as useState40 } from "react";
22062
+ import { useCallback as useCallback36, useState as useState39 } from "react";
21705
22063
 
21706
22064
  // src/components/ManageTeamMembers.tsx
21707
- import React53, { useCallback as useCallback34, useState as useState39 } from "react";
21708
- import { jsx as jsx40, jsxs as jsxs6, Fragment as Fragment9 } from "react/jsx-runtime";
22065
+ import React53, { useCallback as useCallback35, useState as useState38 } from "react";
22066
+ import { jsx as jsx41, jsxs as jsxs6, Fragment as Fragment9 } from "react/jsx-runtime";
21709
22067
  function generateId() {
21710
22068
  return Math.random().toString(36).substr(2, 9);
21711
22069
  }
@@ -21717,26 +22075,26 @@ var Row = ({ value, onChange, onDelete, disableDelete }) => {
21717
22075
  return /* @__PURE__ */ jsxs6("div", {
21718
22076
  className: "flex flex-row gap-2 items-center",
21719
22077
  children: [
21720
- /* @__PURE__ */ jsx40(Input, {
22078
+ /* @__PURE__ */ jsx41(Input, {
21721
22079
  placeholder: "Enter username",
21722
22080
  className: "w-full block flex-1",
21723
22081
  value,
21724
22082
  onChange: (e) => onChange(e.target.value)
21725
22083
  }),
21726
- /* @__PURE__ */ jsx40(Button, {
22084
+ /* @__PURE__ */ jsx41(Button, {
21727
22085
  className: "hover:text-white hover:bg-warn transition-colors w-10 h-10 p-0 rounded-full",
21728
22086
  onClick: onDelete,
21729
22087
  type: "button",
21730
22088
  disabled: disableDelete,
21731
22089
  "aria-label": "Delete member",
21732
22090
  depth: 0.5,
21733
- children: /* @__PURE__ */ jsx40("svg", {
22091
+ children: /* @__PURE__ */ jsx41("svg", {
21734
22092
  width: "16",
21735
22093
  height: "16",
21736
22094
  viewBox: "0 0 10 10",
21737
22095
  fill: "none",
21738
22096
  xmlns: "http://www.w3.org/2000/svg",
21739
- children: /* @__PURE__ */ jsx40("path", {
22097
+ children: /* @__PURE__ */ jsx41("path", {
21740
22098
  d: "M1 1L9 9M1 9L9 1",
21741
22099
  stroke: "currentColor",
21742
22100
  strokeWidth: "1.5",
@@ -21748,9 +22106,9 @@ var Row = ({ value, onChange, onDelete, disableDelete }) => {
21748
22106
  });
21749
22107
  };
21750
22108
  var ManageTeamMembers = () => {
21751
- const [members, setMembers] = useState39(initialMembers);
22109
+ const [members, setMembers] = useState38(initialMembers);
21752
22110
  const displayedMembers = [...members, { id: "NEW", name: "" }];
21753
- const updateMember = useCallback34((idx, value) => {
22111
+ const updateMember = useCallback35((idx, value) => {
21754
22112
  if (idx === members.length) {
21755
22113
  if (value.trim() !== "") {
21756
22114
  setMembers((prev) => [...prev, { id: generateId(), name: value }]);
@@ -21759,11 +22117,11 @@ var ManageTeamMembers = () => {
21759
22117
  setMembers((prev) => prev.map((m, i) => i === idx ? { ...m, name: value } : m));
21760
22118
  }
21761
22119
  }, [members.length]);
21762
- const deleteMember = useCallback34((idx) => {
22120
+ const deleteMember = useCallback35((idx) => {
21763
22121
  setMembers((prev) => prev.filter((_, i) => i !== idx));
21764
22122
  }, []);
21765
- const [loading, setLoading] = useState39(false);
21766
- const save = useCallback34(() => {
22123
+ const [loading, setLoading] = useState38(false);
22124
+ const save = useCallback35(() => {
21767
22125
  setLoading(true);
21768
22126
  setTimeout(() => {
21769
22127
  setLoading(false);
@@ -21771,32 +22129,32 @@ var ManageTeamMembers = () => {
21771
22129
  }, []);
21772
22130
  return /* @__PURE__ */ jsxs6(Fragment9, {
21773
22131
  children: [
21774
- /* @__PURE__ */ jsx40("h2", {
22132
+ /* @__PURE__ */ jsx41("h2", {
21775
22133
  children: "Manage team members"
21776
22134
  }),
21777
- /* @__PURE__ */ jsx40("p", {
22135
+ /* @__PURE__ */ jsx41("p", {
21778
22136
  className: "font-brand",
21779
22137
  children: "Add a new team member to your team."
21780
22138
  }),
21781
22139
  displayedMembers.map((member, idx) => /* @__PURE__ */ jsxs6(React53.Fragment, {
21782
22140
  children: [
21783
- /* @__PURE__ */ jsx40(Row, {
22141
+ /* @__PURE__ */ jsx41(Row, {
21784
22142
  value: member.name,
21785
22143
  onChange: (val) => updateMember(idx, val),
21786
22144
  onDelete: idx < members.length ? () => deleteMember(idx) : undefined,
21787
22145
  disableDelete: idx >= members.length
21788
22146
  }),
21789
- /* @__PURE__ */ jsx40("div", {
22147
+ /* @__PURE__ */ jsx41("div", {
21790
22148
  className: "h-2"
21791
22149
  })
21792
22150
  ]
21793
22151
  }, idx)),
21794
- /* @__PURE__ */ jsx40("div", {
22152
+ /* @__PURE__ */ jsx41("div", {
21795
22153
  className: "h-4"
21796
22154
  }),
21797
- /* @__PURE__ */ jsx40("div", {
22155
+ /* @__PURE__ */ jsx41("div", {
21798
22156
  className: "flex flex-row justify-end",
21799
- children: /* @__PURE__ */ jsx40(Button, {
22157
+ children: /* @__PURE__ */ jsx41(Button, {
21800
22158
  className: "bg-brand text-white",
21801
22159
  loading,
21802
22160
  onClick: save,
@@ -21808,67 +22166,67 @@ var ManageTeamMembers = () => {
21808
22166
  };
21809
22167
 
21810
22168
  // src/components/design.tsx
21811
- import { jsx as jsx41, jsxs as jsxs8 } from "react/jsx-runtime";
22169
+ import { jsx as jsx44, jsxs as jsxs8 } from "react/jsx-runtime";
21812
22170
  var Explainer = ({ children }) => {
21813
- return /* @__PURE__ */ jsx41("div", {
21814
- children: /* @__PURE__ */ jsx41("div", {
22171
+ return /* @__PURE__ */ jsx44("div", {
22172
+ children: /* @__PURE__ */ jsx44("div", {
21815
22173
  className: "text-gray-500 font-brand text-sm mb-2",
21816
22174
  children
21817
22175
  })
21818
22176
  });
21819
22177
  };
21820
22178
  var DesignPage = () => {
21821
- const [count4, setCount] = useState40(10);
21822
- const [active, setActive] = useState40(false);
21823
- const [submitButtonActive, setSubmitButtonActive] = useState40(true);
21824
- const [submitButtonPrimaryActive, setSubmitButtonPrimaryActive] = useState40(true);
21825
- const onClick = useCallback35(() => {
22179
+ const [count4, setCount] = useState39(10);
22180
+ const [active, setActive] = useState39(false);
22181
+ const [submitButtonActive, setSubmitButtonActive] = useState39(true);
22182
+ const [submitButtonPrimaryActive, setSubmitButtonPrimaryActive] = useState39(true);
22183
+ const onClick = useCallback36(() => {
21826
22184
  setSubmitButtonActive(false);
21827
22185
  setTimeout(() => {
21828
22186
  setSubmitButtonActive(true);
21829
22187
  }, 1000);
21830
22188
  }, []);
21831
- const onClickPrimary = useCallback35(() => {
22189
+ const onClickPrimary = useCallback36(() => {
21832
22190
  setSubmitButtonPrimaryActive(false);
21833
22191
  setTimeout(() => {
21834
22192
  setSubmitButtonPrimaryActive(true);
21835
22193
  }, 1000);
21836
22194
  }, []);
21837
- const [saving, setSaving] = useState40(false);
21838
- const save = useCallback35(() => {
22195
+ const [saving, setSaving] = useState39(false);
22196
+ const save = useCallback36(() => {
21839
22197
  setSaving(true);
21840
22198
  setTimeout(() => {
21841
22199
  setSaving(false);
21842
22200
  }, 1000);
21843
22201
  }, []);
21844
- return /* @__PURE__ */ jsx41("div", {
22202
+ return /* @__PURE__ */ jsx44("div", {
21845
22203
  className: "bg-[var(--background)] relative",
21846
22204
  children: /* @__PURE__ */ jsxs8("div", {
21847
22205
  className: "max-w-[800px] mx-auto pt-10 pb-10 px-4",
21848
22206
  children: [
21849
- /* @__PURE__ */ jsx41("h1", {
22207
+ /* @__PURE__ */ jsx44("h1", {
21850
22208
  children: "@remotion/design"
21851
22209
  }),
21852
- /* @__PURE__ */ jsx41("a", {
22210
+ /* @__PURE__ */ jsx44("a", {
21853
22211
  href: "https://github.com/remotion-dev/remotion/blob/main/packages/promo-pages/src/components/design.tsx",
21854
22212
  className: "font-brand text-brand",
21855
22213
  target: "_blank",
21856
22214
  children: "View source"
21857
22215
  }),
21858
- /* @__PURE__ */ jsx41("br", {}),
21859
- /* @__PURE__ */ jsx41("br", {}),
21860
- /* @__PURE__ */ jsx41("h2", {
22216
+ /* @__PURE__ */ jsx44("br", {}),
22217
+ /* @__PURE__ */ jsx44("br", {}),
22218
+ /* @__PURE__ */ jsx44("h2", {
21861
22219
  className: "text-brand",
21862
22220
  children: "<Button />"
21863
22221
  }),
21864
- /* @__PURE__ */ jsx41(Explainer, {
22222
+ /* @__PURE__ */ jsx44(Explainer, {
21865
22223
  children: "Button with label"
21866
22224
  }),
21867
- /* @__PURE__ */ jsx41(Button, {
22225
+ /* @__PURE__ */ jsx44(Button, {
21868
22226
  children: "Click me"
21869
22227
  }),
21870
- /* @__PURE__ */ jsx41("br", {}),
21871
- /* @__PURE__ */ jsx41(Explainer, {
22228
+ /* @__PURE__ */ jsx44("br", {}),
22229
+ /* @__PURE__ */ jsx44(Explainer, {
21872
22230
  children: "Disabled"
21873
22231
  }),
21874
22232
  /* @__PURE__ */ jsxs8(Button, {
@@ -21878,101 +22236,101 @@ var DesignPage = () => {
21878
22236
  " click me"
21879
22237
  ]
21880
22238
  }),
21881
- /* @__PURE__ */ jsx41("br", {}),
21882
- /* @__PURE__ */ jsx41(Explainer, {
22239
+ /* @__PURE__ */ jsx44("br", {}),
22240
+ /* @__PURE__ */ jsx44(Explainer, {
21883
22241
  children: "Primary"
21884
22242
  }),
21885
- /* @__PURE__ */ jsx41(Button, {
22243
+ /* @__PURE__ */ jsx44(Button, {
21886
22244
  className: "bg-brand text-white",
21887
22245
  children: "Primary"
21888
22246
  }),
21889
- /* @__PURE__ */ jsx41("br", {}),
21890
- /* @__PURE__ */ jsx41(Explainer, {
22247
+ /* @__PURE__ */ jsx44("br", {}),
22248
+ /* @__PURE__ */ jsx44(Explainer, {
21891
22249
  children: "Click to disable"
21892
22250
  }),
21893
- /* @__PURE__ */ jsx41(Button, {
22251
+ /* @__PURE__ */ jsx44(Button, {
21894
22252
  onClick,
21895
22253
  loading: !submitButtonActive,
21896
22254
  children: "Submit"
21897
22255
  }),
21898
- /* @__PURE__ */ jsx41("br", {}),
21899
- /* @__PURE__ */ jsx41(Explainer, {
22256
+ /* @__PURE__ */ jsx44("br", {}),
22257
+ /* @__PURE__ */ jsx44(Explainer, {
21900
22258
  children: "Click to disable (primary)"
21901
22259
  }),
21902
- /* @__PURE__ */ jsx41(Button, {
22260
+ /* @__PURE__ */ jsx44(Button, {
21903
22261
  onClick: onClickPrimary,
21904
22262
  className: "bg-brand text-white",
21905
22263
  loading: !submitButtonPrimaryActive,
21906
22264
  children: "Submit"
21907
22265
  }),
21908
- /* @__PURE__ */ jsx41("br", {}),
21909
- /* @__PURE__ */ jsx41(Explainer, {
22266
+ /* @__PURE__ */ jsx44("br", {}),
22267
+ /* @__PURE__ */ jsx44(Explainer, {
21910
22268
  children: "Loading state"
21911
22269
  }),
21912
- /* @__PURE__ */ jsx41(Button, {
22270
+ /* @__PURE__ */ jsx44(Button, {
21913
22271
  onClick,
21914
22272
  loading: true,
21915
22273
  children: "Loading"
21916
22274
  }),
21917
- /* @__PURE__ */ jsx41("br", {}),
21918
- /* @__PURE__ */ jsx41(Explainer, {
22275
+ /* @__PURE__ */ jsx44("br", {}),
22276
+ /* @__PURE__ */ jsx44(Explainer, {
21919
22277
  children: "Loading state (primary)"
21920
22278
  }),
21921
- /* @__PURE__ */ jsx41(Button, {
22279
+ /* @__PURE__ */ jsx44(Button, {
21922
22280
  onClick,
21923
22281
  className: "bg-brand text-white",
21924
22282
  loading: true,
21925
22283
  children: "Loading"
21926
22284
  }),
21927
- /* @__PURE__ */ jsx41("br", {}),
21928
- /* @__PURE__ */ jsx41(Explainer, {
22285
+ /* @__PURE__ */ jsx44("br", {}),
22286
+ /* @__PURE__ */ jsx44(Explainer, {
21929
22287
  children: "Rounded"
21930
22288
  }),
21931
- /* @__PURE__ */ jsx41(Button, {
22289
+ /* @__PURE__ */ jsx44(Button, {
21932
22290
  className: "rounded-full",
21933
22291
  children: "Rounded"
21934
22292
  }),
21935
- /* @__PURE__ */ jsx41("br", {}),
21936
- /* @__PURE__ */ jsx41(Explainer, {
22293
+ /* @__PURE__ */ jsx44("br", {}),
22294
+ /* @__PURE__ */ jsx44(Explainer, {
21937
22295
  children: "Full width"
21938
22296
  }),
21939
- /* @__PURE__ */ jsx41(Button, {
22297
+ /* @__PURE__ */ jsx44(Button, {
21940
22298
  className: "w-full",
21941
22299
  children: "Choose a template"
21942
22300
  }),
21943
- /* @__PURE__ */ jsx41("br", {}),
21944
- /* @__PURE__ */ jsx41(Explainer, {
22301
+ /* @__PURE__ */ jsx44("br", {}),
22302
+ /* @__PURE__ */ jsx44(Explainer, {
21945
22303
  children: "Full width rounded"
21946
22304
  }),
21947
- /* @__PURE__ */ jsx41(Button, {
22305
+ /* @__PURE__ */ jsx44(Button, {
21948
22306
  className: "w-full rounded-full",
21949
22307
  children: "Fully rounded"
21950
22308
  }),
21951
- /* @__PURE__ */ jsx41("div", {
22309
+ /* @__PURE__ */ jsx44("div", {
21952
22310
  className: "h-8"
21953
22311
  }),
21954
- /* @__PURE__ */ jsx41(Explainer, {
22312
+ /* @__PURE__ */ jsx44(Explainer, {
21955
22313
  children: "Circular"
21956
22314
  }),
21957
- /* @__PURE__ */ jsx41(Button, {
22315
+ /* @__PURE__ */ jsx44(Button, {
21958
22316
  className: "rounded-full bg-brand w-12 h-12"
21959
22317
  }),
21960
- /* @__PURE__ */ jsx41("div", {
22318
+ /* @__PURE__ */ jsx44("div", {
21961
22319
  className: "h-8"
21962
22320
  }),
21963
- /* @__PURE__ */ jsx41(Explainer, {
22321
+ /* @__PURE__ */ jsx44(Explainer, {
21964
22322
  children: "Remove"
21965
22323
  }),
21966
- /* @__PURE__ */ jsx41(Button, {
22324
+ /* @__PURE__ */ jsx44(Button, {
21967
22325
  className: "hover:text-white hover:bg-warn transition-colors w-10 h-10 p-0 rounded-full",
21968
22326
  depth: 0.5,
21969
- children: /* @__PURE__ */ jsx41("svg", {
22327
+ children: /* @__PURE__ */ jsx44("svg", {
21970
22328
  width: "16",
21971
22329
  height: "16",
21972
22330
  viewBox: "0 0 10 10",
21973
22331
  fill: "none",
21974
22332
  xmlns: "http://www.w3.org/2000/svg",
21975
- children: /* @__PURE__ */ jsx41("path", {
22333
+ children: /* @__PURE__ */ jsx44("path", {
21976
22334
  d: "M1 1L9 9M1 9L9 1",
21977
22335
  stroke: "currentColor",
21978
22336
  strokeWidth: "1.5",
@@ -21980,56 +22338,56 @@ var DesignPage = () => {
21980
22338
  })
21981
22339
  })
21982
22340
  }),
21983
- /* @__PURE__ */ jsx41("div", {
22341
+ /* @__PURE__ */ jsx44("div", {
21984
22342
  className: "h-8"
21985
22343
  }),
21986
- /* @__PURE__ */ jsx41(Explainer, {
22344
+ /* @__PURE__ */ jsx44(Explainer, {
21987
22345
  children: "Link button"
21988
22346
  }),
21989
- /* @__PURE__ */ jsx41(Button, {
22347
+ /* @__PURE__ */ jsx44(Button, {
21990
22348
  href: "/design",
21991
22349
  children: "Link button"
21992
22350
  }),
21993
- /* @__PURE__ */ jsx41("br", {}),
22351
+ /* @__PURE__ */ jsx44("br", {}),
21994
22352
  /* @__PURE__ */ jsxs8(Explainer, {
21995
22353
  children: [
21996
22354
  "Link button with ",
21997
- /* @__PURE__ */ jsx41("code", {
22355
+ /* @__PURE__ */ jsx44("code", {
21998
22356
  children: "<span>"
21999
22357
  })
22000
22358
  ]
22001
22359
  }),
22002
- /* @__PURE__ */ jsx41(Button, {
22360
+ /* @__PURE__ */ jsx44(Button, {
22003
22361
  href: "/design",
22004
- children: /* @__PURE__ */ jsx41("span", {
22362
+ children: /* @__PURE__ */ jsx44("span", {
22005
22363
  children: "Link button with span child"
22006
22364
  })
22007
22365
  }),
22008
- /* @__PURE__ */ jsx41("br", {}),
22009
- /* @__PURE__ */ jsx41(Explainer, {
22366
+ /* @__PURE__ */ jsx44("br", {}),
22367
+ /* @__PURE__ */ jsx44(Explainer, {
22010
22368
  children: "External link button"
22011
22369
  }),
22012
- /* @__PURE__ */ jsx41(Button, {
22370
+ /* @__PURE__ */ jsx44(Button, {
22013
22371
  href: "https://github.com/remotion-dev/remotion",
22014
22372
  target: "_blank",
22015
22373
  children: "GitHub"
22016
22374
  }),
22017
- /* @__PURE__ */ jsx41("div", {
22375
+ /* @__PURE__ */ jsx44("div", {
22018
22376
  className: "h-8"
22019
22377
  }),
22020
- /* @__PURE__ */ jsx41(Explainer, {
22378
+ /* @__PURE__ */ jsx44(Explainer, {
22021
22379
  children: "Remove (small)"
22022
22380
  }),
22023
- /* @__PURE__ */ jsx41(Button, {
22381
+ /* @__PURE__ */ jsx44(Button, {
22024
22382
  className: "hover:text-white hover:bg-warn transition-colors w-6 h-6 p-0 rounded-full",
22025
22383
  depth: 0.5,
22026
- children: /* @__PURE__ */ jsx41("svg", {
22384
+ children: /* @__PURE__ */ jsx44("svg", {
22027
22385
  width: "10",
22028
22386
  height: "10",
22029
22387
  viewBox: "0 0 10 10",
22030
22388
  fill: "none",
22031
22389
  xmlns: "http://www.w3.org/2000/svg",
22032
- children: /* @__PURE__ */ jsx41("path", {
22390
+ children: /* @__PURE__ */ jsx44("path", {
22033
22391
  d: "M1 1L9 9M1 9L9 1",
22034
22392
  stroke: "currentColor",
22035
22393
  strokeWidth: "1.5",
@@ -22037,74 +22395,74 @@ var DesignPage = () => {
22037
22395
  })
22038
22396
  })
22039
22397
  }),
22040
- /* @__PURE__ */ jsx41("div", {
22398
+ /* @__PURE__ */ jsx44("div", {
22041
22399
  className: "h-8"
22042
22400
  }),
22043
- /* @__PURE__ */ jsx41("h2", {
22401
+ /* @__PURE__ */ jsx44("h2", {
22044
22402
  className: "text-brand",
22045
22403
  children: "<Counter />"
22046
22404
  }),
22047
- /* @__PURE__ */ jsx41(Counter, {
22405
+ /* @__PURE__ */ jsx44(Counter, {
22048
22406
  count: count4,
22049
22407
  setCount,
22050
22408
  minCount: 1,
22051
22409
  step: 1,
22052
22410
  incrementStep: 1
22053
22411
  }),
22054
- /* @__PURE__ */ jsx41("br", {}),
22412
+ /* @__PURE__ */ jsx44("br", {}),
22055
22413
  " ",
22056
- /* @__PURE__ */ jsx41("h2", {
22414
+ /* @__PURE__ */ jsx44("h2", {
22057
22415
  className: "text-brand",
22058
22416
  children: "<Switch />"
22059
22417
  }),
22060
- /* @__PURE__ */ jsx41(Switch, {
22418
+ /* @__PURE__ */ jsx44(Switch, {
22061
22419
  active,
22062
22420
  onToggle: () => setActive((e) => !e)
22063
22421
  }),
22064
- /* @__PURE__ */ jsx41("br", {}),
22422
+ /* @__PURE__ */ jsx44("br", {}),
22065
22423
  " ",
22066
- /* @__PURE__ */ jsx41("h2", {
22424
+ /* @__PURE__ */ jsx44("h2", {
22067
22425
  className: "text-brand",
22068
22426
  children: "<Card />"
22069
22427
  }),
22070
22428
  /* @__PURE__ */ jsxs8(Card, {
22071
22429
  className: "px-4 py-4",
22072
22430
  children: [
22073
- /* @__PURE__ */ jsx41("h3", {
22431
+ /* @__PURE__ */ jsx44("h3", {
22074
22432
  className: "text-text",
22075
22433
  children: "Card"
22076
22434
  }),
22077
- /* @__PURE__ */ jsx41("div", {
22435
+ /* @__PURE__ */ jsx44("div", {
22078
22436
  className: "text-gray-500",
22079
22437
  children: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
22080
22438
  })
22081
22439
  ]
22082
22440
  }),
22083
- /* @__PURE__ */ jsx41("br", {}),
22084
- /* @__PURE__ */ jsx41("h2", {
22441
+ /* @__PURE__ */ jsx44("br", {}),
22442
+ /* @__PURE__ */ jsx44("h2", {
22085
22443
  className: "text-brand",
22086
22444
  children: "<Select />"
22087
22445
  }),
22088
22446
  /* @__PURE__ */ jsxs8(Select2, {
22089
22447
  defaultValue: "option1",
22090
22448
  children: [
22091
- /* @__PURE__ */ jsx41(SelectTrigger2, {
22449
+ /* @__PURE__ */ jsx44(SelectTrigger2, {
22092
22450
  style: { width: "200px" },
22093
- children: /* @__PURE__ */ jsx41(SelectValue2, {
22451
+ children: /* @__PURE__ */ jsx44(SelectValue2, {
22094
22452
  placeholder: "Select an option"
22095
22453
  })
22096
22454
  }),
22097
22455
  /* @__PURE__ */ jsxs8(SelectContent2, {
22098
22456
  children: [
22099
- /* @__PURE__ */ jsx41(SelectItem2, {
22457
+ /* @__PURE__ */ jsx44(SelectItem2, {
22100
22458
  value: "option1",
22101
22459
  children: "Option 1"
22102
22460
  }),
22103
- /* @__PURE__ */ jsx41(SelectItem2, {
22461
+ /* @__PURE__ */ jsx44(SelectItem2, {
22104
22462
  value: "option2",
22105
22463
  children: "Option 2"
22106
22464
  }),
22107
- /* @__PURE__ */ jsx41(SelectItem2, {
22465
+ /* @__PURE__ */ jsx44(SelectItem2, {
22108
22466
  value: "option3",
22109
22467
  children: "Option 3"
22110
22468
  })
@@ -22112,8 +22470,8 @@ var DesignPage = () => {
22112
22470
  })
22113
22471
  ]
22114
22472
  }),
22115
- /* @__PURE__ */ jsx41("br", {}),
22116
- /* @__PURE__ */ jsx41("h2", {
22473
+ /* @__PURE__ */ jsx44("br", {}),
22474
+ /* @__PURE__ */ jsx44("h2", {
22117
22475
  className: "text-brand",
22118
22476
  children: "<Tabs />"
22119
22477
  }),
@@ -22122,63 +22480,63 @@ var DesignPage = () => {
22122
22480
  children: [
22123
22481
  /* @__PURE__ */ jsxs8(TabsList2, {
22124
22482
  children: [
22125
- /* @__PURE__ */ jsx41(TabsTrigger2, {
22483
+ /* @__PURE__ */ jsx44(TabsTrigger2, {
22126
22484
  value: "tab1",
22127
22485
  children: "Tab 1"
22128
22486
  }),
22129
- /* @__PURE__ */ jsx41(TabsTrigger2, {
22487
+ /* @__PURE__ */ jsx44(TabsTrigger2, {
22130
22488
  value: "tab2",
22131
22489
  children: "Tab 2"
22132
22490
  }),
22133
- /* @__PURE__ */ jsx41(TabsTrigger2, {
22491
+ /* @__PURE__ */ jsx44(TabsTrigger2, {
22134
22492
  value: "tab3",
22135
22493
  children: "Tab 3"
22136
22494
  })
22137
22495
  ]
22138
22496
  }),
22139
- /* @__PURE__ */ jsx41(TabsContent2, {
22497
+ /* @__PURE__ */ jsx44(TabsContent2, {
22140
22498
  value: "tab1",
22141
- children: /* @__PURE__ */ jsx41("div", {
22499
+ children: /* @__PURE__ */ jsx44("div", {
22142
22500
  className: "font-brand",
22143
22501
  children: "Content for Tab 1"
22144
22502
  })
22145
22503
  }),
22146
- /* @__PURE__ */ jsx41(TabsContent2, {
22504
+ /* @__PURE__ */ jsx44(TabsContent2, {
22147
22505
  value: "tab2",
22148
- children: /* @__PURE__ */ jsx41("div", {
22506
+ children: /* @__PURE__ */ jsx44("div", {
22149
22507
  className: "font-brand",
22150
22508
  children: "Content for Tab 2"
22151
22509
  })
22152
22510
  }),
22153
- /* @__PURE__ */ jsx41(TabsContent2, {
22511
+ /* @__PURE__ */ jsx44(TabsContent2, {
22154
22512
  value: "tab3",
22155
- children: /* @__PURE__ */ jsx41("div", {
22513
+ children: /* @__PURE__ */ jsx44("div", {
22156
22514
  className: "font-brand",
22157
22515
  children: "Content for Tab 3"
22158
22516
  })
22159
22517
  })
22160
22518
  ]
22161
22519
  }),
22162
- /* @__PURE__ */ jsx41("br", {}),
22163
- /* @__PURE__ */ jsx41("h2", {
22520
+ /* @__PURE__ */ jsx44("br", {}),
22521
+ /* @__PURE__ */ jsx44("h2", {
22164
22522
  className: "text-brand",
22165
22523
  children: "<Input />"
22166
22524
  }),
22167
- /* @__PURE__ */ jsx41(Input, {
22525
+ /* @__PURE__ */ jsx44(Input, {
22168
22526
  placeholder: "Enter your email"
22169
22527
  }),
22170
- /* @__PURE__ */ jsx41("br", {}),
22171
- /* @__PURE__ */ jsx41("br", {}),
22172
- /* @__PURE__ */ jsx41("h2", {
22528
+ /* @__PURE__ */ jsx44("br", {}),
22529
+ /* @__PURE__ */ jsx44("br", {}),
22530
+ /* @__PURE__ */ jsx44("h2", {
22173
22531
  className: "text-brand",
22174
22532
  children: "<Textarea />"
22175
22533
  }),
22176
- /* @__PURE__ */ jsx41(Textarea, {
22534
+ /* @__PURE__ */ jsx44(Textarea, {
22177
22535
  placeholder: "Enter your message"
22178
22536
  }),
22179
- /* @__PURE__ */ jsx41("br", {}),
22180
- /* @__PURE__ */ jsx41("br", {}),
22181
- /* @__PURE__ */ jsx41("h2", {
22537
+ /* @__PURE__ */ jsx44("br", {}),
22538
+ /* @__PURE__ */ jsx44("br", {}),
22539
+ /* @__PURE__ */ jsx44("h2", {
22182
22540
  className: "text-brand",
22183
22541
  children: "<InlineCode />"
22184
22542
  }),
@@ -22186,18 +22544,18 @@ var DesignPage = () => {
22186
22544
  className: "font-brand",
22187
22545
  children: [
22188
22546
  "Use ",
22189
- /* @__PURE__ */ jsx41(InlineCode, {
22547
+ /* @__PURE__ */ jsx44(InlineCode, {
22190
22548
  children: "useCurrentFrame()"
22191
22549
  }),
22192
22550
  " to get the current frame and ",
22193
- /* @__PURE__ */ jsx41(InlineCode, {
22551
+ /* @__PURE__ */ jsx44(InlineCode, {
22194
22552
  children: "useVideoConfig()"
22195
22553
  }),
22196
22554
  " to get the video configuration."
22197
22555
  ]
22198
22556
  }),
22199
- /* @__PURE__ */ jsx41("br", {}),
22200
- /* @__PURE__ */ jsx41("h2", {
22557
+ /* @__PURE__ */ jsx44("br", {}),
22558
+ /* @__PURE__ */ jsx44("h2", {
22201
22559
  className: "text-brand",
22202
22560
  children: "<Link />"
22203
22561
  }),
@@ -22206,7 +22564,7 @@ var DesignPage = () => {
22206
22564
  children: [
22207
22565
  "See the",
22208
22566
  " ",
22209
- /* @__PURE__ */ jsx41(Link, {
22567
+ /* @__PURE__ */ jsx44(Link, {
22210
22568
  href: "https://www.remotion.dev/docs",
22211
22569
  target: "_blank",
22212
22570
  rel: "noopener noreferrer",
@@ -22216,38 +22574,38 @@ var DesignPage = () => {
22216
22574
  "for more information."
22217
22575
  ]
22218
22576
  }),
22219
- /* @__PURE__ */ jsx41("br", {}),
22220
- /* @__PURE__ */ jsx41("br", {}),
22221
- /* @__PURE__ */ jsx41("h1", {
22577
+ /* @__PURE__ */ jsx44("br", {}),
22578
+ /* @__PURE__ */ jsx44("br", {}),
22579
+ /* @__PURE__ */ jsx44("h1", {
22222
22580
  children: "Example form set"
22223
22581
  }),
22224
- /* @__PURE__ */ jsx41("br", {}),
22225
- /* @__PURE__ */ jsx41("h2", {
22582
+ /* @__PURE__ */ jsx44("br", {}),
22583
+ /* @__PURE__ */ jsx44("h2", {
22226
22584
  children: "Change email"
22227
22585
  }),
22228
- /* @__PURE__ */ jsx41("p", {
22586
+ /* @__PURE__ */ jsx44("p", {
22229
22587
  className: "font-brand",
22230
22588
  children: "A email will be sent to the new email address. You will need to click on the link in the email to confirm the change."
22231
22589
  }),
22232
- /* @__PURE__ */ jsx41(Input, {
22590
+ /* @__PURE__ */ jsx44(Input, {
22233
22591
  placeholder: "Enter your email",
22234
22592
  className: "w-full block"
22235
22593
  }),
22236
- /* @__PURE__ */ jsx41("div", {
22594
+ /* @__PURE__ */ jsx44("div", {
22237
22595
  className: "h-2"
22238
22596
  }),
22239
- /* @__PURE__ */ jsx41("div", {
22597
+ /* @__PURE__ */ jsx44("div", {
22240
22598
  className: "flex flex-row justify-end",
22241
- children: /* @__PURE__ */ jsx41(Button, {
22599
+ children: /* @__PURE__ */ jsx44(Button, {
22242
22600
  className: "bg-brand text-white",
22243
22601
  loading: saving,
22244
22602
  onClick: save,
22245
22603
  children: "Change"
22246
22604
  })
22247
22605
  }),
22248
- /* @__PURE__ */ jsx41("br", {}),
22249
- /* @__PURE__ */ jsx41("br", {}),
22250
- /* @__PURE__ */ jsx41(ManageTeamMembers, {})
22606
+ /* @__PURE__ */ jsx44("br", {}),
22607
+ /* @__PURE__ */ jsx44("br", {}),
22608
+ /* @__PURE__ */ jsx44(ManageTeamMembers, {})
22251
22609
  ]
22252
22610
  })
22253
22611
  });