@remotion/promo-pages 4.0.490 → 4.0.492

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/experts.js CHANGED
@@ -941,6 +941,7 @@ import * as React6 from "react";
941
941
  import React7, { useMemo as useMemo6, useRef as useRef2 } from "react";
942
942
  import { useContext as useContext8, useMemo as useMemo7 } from "react";
943
943
  import { jsx as jsx7 } from "react/jsx-runtime";
944
+ import React9 from "react";
944
945
  import {
945
946
  forwardRef as forwardRef3,
946
947
  useCallback as useCallback6,
@@ -966,11 +967,11 @@ import { useContext as useContext13 } from "react";
966
967
  import { useContext as useContext12, useMemo as useMemo10 } from "react";
967
968
  import { jsx as jsx9 } from "react/jsx-runtime";
968
969
  import { createContext as createContext14 } from "react";
969
- import React11, { useCallback as useCallback5, useMemo as useMemo12, useRef as useRef4, useState as useState3 } from "react";
970
+ import React12, { useCallback as useCallback5, useMemo as useMemo12, useRef as useRef4, useState as useState3 } from "react";
970
971
  import { jsx as jsx10 } from "react/jsx-runtime";
971
- import React12, { createContext as createContext15 } from "react";
972
+ import React13, { createContext as createContext15 } from "react";
972
973
  import { jsx as jsx11 } from "react/jsx-runtime";
973
- import React13, { forwardRef as forwardRef2, useContext as useContext16, useMemo as useMemo13, useState as useState4 } from "react";
974
+ import React14, { forwardRef as forwardRef2, useContext as useContext16, useMemo as useMemo13, useState as useState4 } from "react";
974
975
  import { useContext as useContext15, useRef as useRef5 } from "react";
975
976
  import { createContext as createContext16 } from "react";
976
977
  import { jsx as jsx12 } from "react/jsx-runtime";
@@ -982,7 +983,7 @@ import {
982
983
  useRef as useRef9,
983
984
  useState as useState6
984
985
  } from "react";
985
- import React15, { useCallback as useCallback7, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
986
+ import React16, { useCallback as useCallback7, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
986
987
  import { useEffect as useEffect4, useMemo as useMemo15, useRef as useRef7 } from "react";
987
988
  import { jsx as jsx13 } from "react/jsx-runtime";
988
989
  import { jsx as jsx14 } from "react/jsx-runtime";
@@ -998,7 +999,7 @@ import {
998
999
  } from "react";
999
1000
  import { jsx as jsx15 } from "react/jsx-runtime";
1000
1001
  import { forwardRef as forwardRef7, useCallback as useCallback14, useContext as useContext30 } from "react";
1001
- import React16, { createContext as createContext18, useMemo as useMemo18 } from "react";
1002
+ import React17, { createContext as createContext18, useMemo as useMemo18 } from "react";
1002
1003
  import { jsx as jsx16 } from "react/jsx-runtime";
1003
1004
  import { useContext as useContext19 } from "react";
1004
1005
  import { createContext as createContext19, useEffect as useEffect6, useState as useState9 } from "react";
@@ -1006,7 +1007,7 @@ import { jsx as jsx17 } from "react/jsx-runtime";
1006
1007
  import { createContext as createContext20, useMemo as useMemo19, useReducer } from "react";
1007
1008
  import { jsx as jsx18 } from "react/jsx-runtime";
1008
1009
  import { useCallback as useCallback13 } from "react";
1009
- import React22, {
1010
+ import React23, {
1010
1011
  forwardRef as forwardRef5,
1011
1012
  useContext as useContext28,
1012
1013
  useEffect as useEffect14,
@@ -1016,7 +1017,7 @@ import React22, {
1016
1017
  useState as useState14
1017
1018
  } from "react";
1018
1019
  import { useContext as useContext21, useLayoutEffect as useLayoutEffect5, useRef as useRef14 } from "react";
1019
- import React19, {
1020
+ import React20, {
1020
1021
  createContext as createContext21,
1021
1022
  createRef as createRef2,
1022
1023
  useCallback as useCallback9,
@@ -1040,7 +1041,7 @@ import {
1040
1041
  } from "react";
1041
1042
  import { useCallback as useCallback11, useMemo as useMemo25, useRef as useRef16 } from "react";
1042
1043
  import { useContext as useContext25, useMemo as useMemo24 } from "react";
1043
- import React20, {
1044
+ import React21, {
1044
1045
  useCallback as useCallback10,
1045
1046
  useContext as useContext24,
1046
1047
  useEffect as useEffect9,
@@ -1050,7 +1051,7 @@ import React20, {
1050
1051
  useState as useState12
1051
1052
  } from "react";
1052
1053
  import { jsx as jsx20 } from "react/jsx-runtime";
1053
- import React21 from "react";
1054
+ import React22 from "react";
1054
1055
  import { useEffect as useEffect10, useState as useState13 } from "react";
1055
1056
  import { useEffect as useEffect11, useRef as useRef17 } from "react";
1056
1057
  import { useEffect as useEffect13 } from "react";
@@ -1108,10 +1109,10 @@ import {
1108
1109
  useState as useState18
1109
1110
  } from "react";
1110
1111
  import { jsx as jsx28 } from "react/jsx-runtime";
1111
- import React29, { forwardRef as forwardRef12, useCallback as useCallback20, useRef as useRef25 } from "react";
1112
+ import React30, { forwardRef as forwardRef12, useCallback as useCallback20, useRef as useRef25 } from "react";
1112
1113
  import { jsx as jsx29 } from "react/jsx-runtime";
1113
1114
  import { createRef as createRef3 } from "react";
1114
- import React30 from "react";
1115
+ import React31 from "react";
1115
1116
  import {
1116
1117
  useCallback as useCallback21,
1117
1118
  useImperativeHandle as useImperativeHandle8,
@@ -1120,14 +1121,14 @@ import {
1120
1121
  useState as useState19
1121
1122
  } from "react";
1122
1123
  import { jsx as jsx30 } from "react/jsx-runtime";
1123
- import React31 from "react";
1124
+ import React32 from "react";
1124
1125
  import { useMemo as useMemo34 } from "react";
1125
1126
  import { createContext as createContext24, useContext as useContext34, useMemo as useMemo33 } from "react";
1126
1127
  import { jsx as jsx31 } from "react/jsx-runtime";
1127
1128
  import { jsx as jsx32 } from "react/jsx-runtime";
1128
- import React33 from "react";
1129
- import React34, { createContext as createContext25 } from "react";
1130
- import React35, { useContext as useContext35 } from "react";
1129
+ import React34 from "react";
1130
+ import React35, { createContext as createContext25 } from "react";
1131
+ import React36, { useContext as useContext35 } from "react";
1131
1132
  import { useCallback as useCallback24 } from "react";
1132
1133
  import {
1133
1134
  useCallback as useCallback22,
@@ -1138,7 +1139,7 @@ import {
1138
1139
  useState as useState20
1139
1140
  } from "react";
1140
1141
  import { jsx as jsx33 } from "react/jsx-runtime";
1141
- import React37, {
1142
+ import React38, {
1142
1143
  forwardRef as forwardRef13,
1143
1144
  useCallback as useCallback23,
1144
1145
  useContext as useContext37,
@@ -1151,16 +1152,15 @@ import React37, {
1151
1152
  import { useEffect as useEffect18 } from "react";
1152
1153
  import { jsx as jsx34 } from "react/jsx-runtime";
1153
1154
  import { jsx as jsx35 } from "react/jsx-runtime";
1154
- import React39, { useMemo as useMemo37 } from "react";
1155
+ import React40, { useMemo as useMemo37 } from "react";
1155
1156
  import { jsx as jsx36 } from "react/jsx-runtime";
1156
- import {
1157
- Children,
1157
+ import React42, {
1158
1158
  forwardRef as forwardRef14,
1159
1159
  useMemo as useMemo38
1160
1160
  } from "react";
1161
- import React40 from "react";
1162
- import { jsx as jsx37 } from "react/jsx-runtime";
1163
- import React42 from "react";
1161
+ import React41 from "react";
1162
+ import { jsx as jsx37, jsxs as jsxs3, Fragment } from "react/jsx-runtime";
1163
+ import React43 from "react";
1164
1164
  import { forwardRef as forwardRef16, useCallback as useCallback25, useContext as useContext39 } from "react";
1165
1165
  import {
1166
1166
  forwardRef as forwardRef15,
@@ -2238,6 +2238,7 @@ var InnerComposition = ({
2238
2238
  }
2239
2239
  const { folderName, parentName } = useContext9(FolderContext);
2240
2240
  const stack = compProps.stack ?? null;
2241
+ const componentFromProps = "component" in compProps ? compProps.component : null;
2241
2242
  useEffect2(() => {
2242
2243
  if (!id) {
2243
2244
  throw new Error("No id for composition passed.");
@@ -2255,6 +2256,7 @@ var InnerComposition = ({
2255
2256
  defaultProps: serializeThenDeserializeInStudio(defaultProps ?? {}),
2256
2257
  nonce: nonce.get(),
2257
2258
  parentFolderName: parentName,
2259
+ componentFromProps,
2258
2260
  schema: schema ?? null,
2259
2261
  calculateMetadata: compProps.calculateMetadata ?? null,
2260
2262
  stack
@@ -2273,6 +2275,7 @@ var InnerComposition = ({
2273
2275
  width,
2274
2276
  nonce,
2275
2277
  parentName,
2278
+ componentFromProps,
2276
2279
  schema,
2277
2280
  compProps.calculateMetadata,
2278
2281
  stack,
@@ -2331,11 +2334,30 @@ var Composition = (props) => {
2331
2334
  });
2332
2335
  };
2333
2336
  var componentsToAddStacksTo = [];
2337
+ var sequenceComponent = null;
2334
2338
  var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2335
2339
  var addSequenceStackTraces = (component) => {
2336
2340
  componentsToAddStacksTo.push(component);
2337
2341
  };
2338
- var VERSION = "4.0.490";
2342
+ var setSequenceComponent = (component) => {
2343
+ sequenceComponent = component;
2344
+ };
2345
+ var getSequenceComponent = () => sequenceComponent;
2346
+ var getSingleChildComponent = (children) => {
2347
+ const mountedChildren = React9.Children.toArray(children);
2348
+ if (mountedChildren.length !== 1) {
2349
+ return null;
2350
+ }
2351
+ const child = mountedChildren[0];
2352
+ if (!React9.isValidElement(child)) {
2353
+ return null;
2354
+ }
2355
+ if (typeof child.type !== "function" && typeof child.type !== "object") {
2356
+ return null;
2357
+ }
2358
+ return child.type;
2359
+ };
2360
+ var VERSION = "4.0.492";
2339
2361
  var checkMultipleRemotionVersions = () => {
2340
2362
  if (typeof globalThis === "undefined") {
2341
2363
  return;
@@ -2935,7 +2957,7 @@ var sequenceSchemaDefaultLayoutNone = {
2935
2957
  var PremountContext = createContext14({
2936
2958
  premountFramesRemaining: 0
2937
2959
  });
2938
- var SequenceManager = React11.createContext({
2960
+ var SequenceManager = React12.createContext({
2939
2961
  registerSequence: () => {
2940
2962
  throw new Error("SequenceManagerContext not initialized");
2941
2963
  },
@@ -2944,19 +2966,19 @@ var SequenceManager = React11.createContext({
2944
2966
  },
2945
2967
  sequences: []
2946
2968
  });
2947
- var SequenceManagerRefContext = React11.createContext({
2969
+ var SequenceManagerRefContext = React12.createContext({
2948
2970
  current: []
2949
2971
  });
2950
2972
  var makeSequencePropsSubscriptionKey = (key) => {
2951
- return `${key.nodePath.join(".")}.${key.sequenceKeys.join(".")}.${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
2973
+ return `${key.absolutePath}\x00${key.nodePath.join(".")}\x00${key.sequenceKeys.join(".")}\x00${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
2952
2974
  };
2953
- var VisualModePropStatusesContext = React11.createContext({
2975
+ var VisualModePropStatusesContext = React12.createContext({
2954
2976
  propStatuses: {}
2955
2977
  });
2956
- var VisualModePropStatusesRefContext = React11.createContext({
2978
+ var VisualModePropStatusesRefContext = React12.createContext({
2957
2979
  current: {}
2958
2980
  });
2959
- var VisualModeDragOverridesContext = React11.createContext({
2981
+ var VisualModeDragOverridesContext = React12.createContext({
2960
2982
  getDragOverrides: () => {
2961
2983
  throw new Error("VisualModeDragOverridesContext not initialized");
2962
2984
  },
@@ -2964,7 +2986,7 @@ var VisualModeDragOverridesContext = React11.createContext({
2964
2986
  throw new Error("VisualModeDragOverridesContext not initialized");
2965
2987
  }
2966
2988
  });
2967
- var VisualModeSettersContext = React11.createContext({
2989
+ var VisualModeSettersContext = React12.createContext({
2968
2990
  setDragOverrides: () => {
2969
2991
  throw new Error("VisualModeSettersContext not initialized");
2970
2992
  },
@@ -3128,7 +3150,7 @@ var IsNotInsideSeriesProvider = ({ children }) => {
3128
3150
  });
3129
3151
  };
3130
3152
  var useRequireToBeInsideSeries = () => {
3131
- const isInsideSeries = React12.useContext(IsInsideSeriesContext);
3153
+ const isInsideSeries = React13.useContext(IsInsideSeriesContext);
3132
3154
  if (!isInsideSeries) {
3133
3155
  throw new Error("This component must be inside a <Series /> component.");
3134
3156
  }
@@ -5197,6 +5219,9 @@ var computeEffectiveSchemaValuesDotNotation = ({
5197
5219
  shouldResortToDefaultValueIfUndefined: false
5198
5220
  });
5199
5221
  }
5222
+ if (field?.type === "asset" && typeof value === "string" && value.startsWith(FILE_TOKEN)) {
5223
+ value = `${window.remotion_staticBase}/${value.slice(FILE_TOKEN.length)}`;
5224
+ }
5200
5225
  if (value === undefined) {
5201
5226
  propsToDelete.add(key);
5202
5227
  }
@@ -5295,7 +5320,7 @@ var withInteractivitySchema = ({
5295
5320
  const Wrapped = forwardRef2((props, ref) => {
5296
5321
  const env = useRemotionEnvironment();
5297
5322
  if (!env.isStudio || env.isReadOnlyStudio || env.isRendering) {
5298
- return React13.createElement(Component, {
5323
+ return React14.createElement(Component, {
5299
5324
  ...props,
5300
5325
  controls: null,
5301
5326
  ref
@@ -5306,7 +5331,7 @@ var withInteractivitySchema = ({
5306
5331
  const nodePathMapping = useContext16(OverrideIdsToNodePathsGettersContext);
5307
5332
  const frame = useCurrentFrame();
5308
5333
  if (props.controls) {
5309
- return React13.createElement(Component, {
5334
+ return React14.createElement(Component, {
5310
5335
  ...props,
5311
5336
  ref
5312
5337
  });
@@ -5364,7 +5389,7 @@ var withInteractivitySchema = ({
5364
5389
  schemaKeys: activeKeys,
5365
5390
  propsToDelete
5366
5391
  });
5367
- return React13.createElement(Component, {
5392
+ return React14.createElement(Component, {
5368
5393
  ...mergedProps,
5369
5394
  controls,
5370
5395
  ref
@@ -5390,6 +5415,7 @@ var RegularSequenceRefForwardingFunction = ({
5390
5415
  _remotionInternalLoopDisplay: loopDisplay,
5391
5416
  _remotionInternalStack: stack,
5392
5417
  _remotionInternalDocumentationLink: documentationLink,
5418
+ _remotionInternalSingleChildComponent: singleChildComponent,
5393
5419
  _remotionInternalPremountDisplay: premountDisplay,
5394
5420
  _remotionInternalPostmountDisplay: postmountDisplay,
5395
5421
  _remotionInternalIsMedia: isMedia,
@@ -5536,7 +5562,8 @@ var RegularSequenceRefForwardingFunction = ({
5536
5562
  getStack: () => stackRef.current,
5537
5563
  refForOutline: refForOutline ?? null,
5538
5564
  isInsideSeries,
5539
- frozenFrame: registeredFrozenFrame
5565
+ frozenFrame: registeredFrozenFrame,
5566
+ singleChildComponent: singleChildComponent ?? null
5540
5567
  });
5541
5568
  } else {
5542
5569
  registerSequence({
@@ -5561,11 +5588,13 @@ var RegularSequenceRefForwardingFunction = ({
5561
5588
  src: isMedia.data.src,
5562
5589
  getStack: () => stackRef.current,
5563
5590
  startMediaFrom: startMediaFrom ?? isMedia.data.startMediaFrom,
5591
+ mediaFrameAtSequenceZero,
5564
5592
  volume: isMedia.data.volumes,
5565
5593
  refForOutline: refForOutline ?? null,
5566
5594
  isInsideSeries,
5567
5595
  frozenFrame: registeredFrozenFrame,
5568
- frozenMediaFrame
5596
+ frozenMediaFrame,
5597
+ singleChildComponent: singleChildComponent ?? null
5569
5598
  });
5570
5599
  }
5571
5600
  return () => {
@@ -5592,7 +5621,8 @@ var RegularSequenceRefForwardingFunction = ({
5592
5621
  effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
5593
5622
  refForOutline: refForOutline ?? null,
5594
5623
  isInsideSeries,
5595
- frozenFrame: registeredFrozenFrame
5624
+ frozenFrame: registeredFrozenFrame,
5625
+ singleChildComponent: singleChildComponent ?? null
5596
5626
  });
5597
5627
  return () => {
5598
5628
  unregisterSequence(id);
@@ -5624,7 +5654,9 @@ var RegularSequenceRefForwardingFunction = ({
5624
5654
  isInsideSeries,
5625
5655
  registeredFrozenFrame,
5626
5656
  startMediaFrom,
5627
- frozenMediaFrame
5657
+ mediaFrameAtSequenceZero,
5658
+ frozenMediaFrame,
5659
+ singleChildComponent
5628
5660
  ]);
5629
5661
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
5630
5662
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
@@ -6126,7 +6158,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effec
6126
6158
  ...props
6127
6159
  });
6128
6160
  };
6129
- var Canvas = React15.forwardRef(CanvasRefForwardingFunction);
6161
+ var Canvas = React16.forwardRef(CanvasRefForwardingFunction);
6130
6162
  var CACHE_SIZE = 5;
6131
6163
  var getActualTime = ({
6132
6164
  loopBehavior,
@@ -6287,6 +6319,12 @@ var resolveAnimatedImageSource = (src) => {
6287
6319
  return new URL(src, window.origin).href;
6288
6320
  };
6289
6321
  var animatedImageSchema = {
6322
+ src: {
6323
+ type: "asset",
6324
+ default: undefined,
6325
+ description: "Source",
6326
+ keyframable: false
6327
+ },
6290
6328
  ...baseSchema,
6291
6329
  playbackRate: {
6292
6330
  type: "number",
@@ -6704,7 +6742,7 @@ var calculateMediaDuration = ({
6704
6742
  };
6705
6743
  var LoopContext = createContext18(null);
6706
6744
  var useLoop = () => {
6707
- return React16.useContext(LoopContext);
6745
+ return React17.useContext(LoopContext);
6708
6746
  };
6709
6747
  var Loop = ({
6710
6748
  durationInFrames,
@@ -7555,7 +7593,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7555
7593
  };
7556
7594
  });
7557
7595
  }, [audioContext, numberOfAudioTags]);
7558
- const effectToUse = React19.useInsertionEffect ?? React19.useLayoutEffect;
7596
+ const effectToUse = React20.useInsertionEffect ?? React20.useLayoutEffect;
7559
7597
  effectToUse(() => {
7560
7598
  return () => {
7561
7599
  requestAnimationFrame(() => {
@@ -7574,7 +7612,9 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7574
7612
  return;
7575
7613
  }
7576
7614
  if (data === undefined) {
7577
- current.src = EMPTY_AUDIO;
7615
+ if (current.src !== EMPTY_AUDIO) {
7616
+ current.src = EMPTY_AUDIO;
7617
+ }
7578
7618
  return;
7579
7619
  }
7580
7620
  if (!data) {
@@ -7643,7 +7683,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7643
7683
  if (prevA.id === id) {
7644
7684
  const isTheSame = compareProps(aud, prevA.props) && prevA.premounting === premounting && prevA.postmounting === postmounting;
7645
7685
  if (isTheSame) {
7646
- return prevA;
7686
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
7647
7687
  }
7648
7688
  changed = true;
7649
7689
  return {
@@ -7655,7 +7695,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7655
7695
  audioMounted
7656
7696
  };
7657
7697
  }
7658
- return prevA;
7698
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
7659
7699
  });
7660
7700
  if (changed) {
7661
7701
  rerenderAudios();
@@ -7694,16 +7734,19 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7694
7734
  unregisterAudio,
7695
7735
  updateAudio
7696
7736
  ]);
7737
+ const sharedAudioTagElements = useMemo21(() => {
7738
+ return refs.map(({ id, ref }) => {
7739
+ return /* @__PURE__ */ jsx19("audio", {
7740
+ ref,
7741
+ preload: "metadata",
7742
+ src: EMPTY_AUDIO
7743
+ }, id);
7744
+ });
7745
+ }, [refs]);
7697
7746
  return /* @__PURE__ */ jsxs22(SharedAudioTagsContext.Provider, {
7698
7747
  value: audioTagsValue,
7699
7748
  children: [
7700
- refs.map(({ id, ref }) => {
7701
- return /* @__PURE__ */ jsx19("audio", {
7702
- ref,
7703
- preload: "metadata",
7704
- src: EMPTY_AUDIO
7705
- }, id);
7706
- }),
7749
+ sharedAudioTagElements,
7707
7750
  children
7708
7751
  ]
7709
7752
  });
@@ -7720,7 +7763,7 @@ var useSharedAudio = ({
7720
7763
  if (tagsCtx && tagsCtx.numberOfAudioTags > 0) {
7721
7764
  return tagsCtx.registerAudio({ aud, audioId, premounting, postmounting });
7722
7765
  }
7723
- const el = React19.createRef();
7766
+ const el = React20.createRef();
7724
7767
  const mediaElementSourceNode = audioCtx?.audioContext ? makeSharedElementSourceNode({
7725
7768
  audioContext: audioCtx.audioContext,
7726
7769
  ref: el
@@ -7739,7 +7782,7 @@ var useSharedAudio = ({
7739
7782
  }
7740
7783
  };
7741
7784
  });
7742
- const effectToUse = React19.useInsertionEffect ?? React19.useLayoutEffect;
7785
+ const effectToUse = React20.useInsertionEffect ?? React20.useLayoutEffect;
7743
7786
  if (typeof document !== "undefined") {
7744
7787
  effectToUse(() => {
7745
7788
  if (tagsCtx && tagsCtx.numberOfAudioTags > 0) {
@@ -8164,6 +8207,7 @@ var useMediaInTimeline = ({
8164
8207
  showInTimeline: true,
8165
8208
  nonce: nonce.get(),
8166
8209
  startMediaFrom: 0 - startsAt,
8210
+ mediaFrameAtSequenceZero: null,
8167
8211
  doesVolumeChange,
8168
8212
  loopDisplay,
8169
8213
  playbackRate,
@@ -8290,7 +8334,7 @@ var useBufferManager = (logLevel, mountTime) => {
8290
8334
  return { addBlock, listenForBuffering, listenForResume, buffering };
8291
8335
  }, [addBlock, buffering, listenForBuffering, listenForResume]);
8292
8336
  };
8293
- var BufferingContextReact = React20.createContext(null);
8337
+ var BufferingContextReact = React21.createContext(null);
8294
8338
  var BufferingProvider = ({ children }) => {
8295
8339
  const { logLevel, mountTime } = useContext24(LogLevelContext);
8296
8340
  const bufferManager = useBufferManager(logLevel ?? "info", mountTime);
@@ -8503,7 +8547,7 @@ var getMediaSyncAction = (input) => {
8503
8547
  return { type: "none" };
8504
8548
  };
8505
8549
  var useCurrentTimeOfMediaTagWithUpdateTimeStamp = (mediaRef) => {
8506
- const lastUpdate = React21.useRef({
8550
+ const lastUpdate = React22.useRef({
8507
8551
  time: mediaRef.current?.currentTime ?? 0,
8508
8552
  lastUpdate: performance.now()
8509
8553
  });
@@ -9256,7 +9300,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
9256
9300
  volume: userPreferredVolume,
9257
9301
  shouldUseWebAudioApi: useWebAudioApi ?? false
9258
9302
  });
9259
- const effectToUse = React22.useInsertionEffect ?? React22.useLayoutEffect;
9303
+ const effectToUse = React23.useInsertionEffect ?? React23.useLayoutEffect;
9260
9304
  effectToUse(() => {
9261
9305
  return () => {
9262
9306
  requestAnimationFrame(() => {
@@ -9797,16 +9841,16 @@ var isMissingPaintRecordError = (error2) => {
9797
9841
  return error2 instanceof DOMException && error2.name === "InvalidStateError";
9798
9842
  };
9799
9843
  var missingPaintRecordMessage = "HtmlInCanvas: Expected the element to be inside the viewport during rendering, but Chrome had no cached paint record for it.";
9800
- var resizeOffscreenCanvas = ({
9801
- offscreen,
9844
+ var resizePaintTarget = ({
9845
+ target,
9802
9846
  width,
9803
9847
  height
9804
9848
  }) => {
9805
- if (offscreen.width !== width) {
9806
- offscreen.width = width;
9849
+ if (target.width !== width) {
9850
+ target.width = width;
9807
9851
  }
9808
- if (offscreen.height !== height) {
9809
- offscreen.height = height;
9852
+ if (target.height !== height) {
9853
+ target.height = height;
9810
9854
  }
9811
9855
  };
9812
9856
  var defaultOnPaint = ({
@@ -9822,7 +9866,7 @@ var defaultOnPaint = ({
9822
9866
  const transform = ctx.drawElementImage(elementImage, 0, 0);
9823
9867
  element.style.transform = transform.toString();
9824
9868
  };
9825
- var HtmlInCanvasAncestorContext = createContext23(false);
9869
+ var HtmlInCanvasAncestorContext = createContext23(null);
9826
9870
  var HtmlInCanvasContent = forwardRef9(({
9827
9871
  width,
9828
9872
  height,
@@ -9834,20 +9878,22 @@ var HtmlInCanvasContent = forwardRef9(({
9834
9878
  controls,
9835
9879
  style
9836
9880
  }, ref) => {
9837
- const isInsideAncestorHtmlInCanvas = useContext31(HtmlInCanvasAncestorContext);
9881
+ const ancestor = useContext31(HtmlInCanvasAncestorContext);
9838
9882
  assertHtmlInCanvasDimensions(width, height);
9839
9883
  const resolvedPixelDensity = resolveHtmlInCanvasPixelDensity(pixelDensity);
9840
9884
  const canvasWidth = Math.ceil(width * resolvedPixelDensity);
9841
9885
  const canvasHeight = Math.ceil(height * resolvedPixelDensity);
9842
9886
  const { continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
9843
- const { isRendering } = useRemotionEnvironment();
9887
+ const { isClientSideRendering, isRendering } = useRemotionEnvironment();
9888
+ const canRetryMissingPaintRecord = !isRendering || isClientSideRendering;
9889
+ const usesDirectLayoutCanvas = onPaint === undefined && onInit === undefined;
9844
9890
  if (!isHtmlInCanvasSupported()) {
9845
9891
  cancelRender2(new Error(HTML_IN_CANVAS_UNSUPPORTED_MESSAGE));
9846
9892
  }
9847
9893
  const canvas2dRef = useRef22(null);
9848
- const offscreenRef = useRef22(null);
9894
+ const paintTargetRef = useRef22(null);
9849
9895
  const divRef = useRef22(null);
9850
- const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
9896
+ const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}-${usesDirectLayoutCanvas ? "direct" : "offscreen"}`;
9851
9897
  const setLayoutCanvasRef = useCallback16((node) => {
9852
9898
  canvas2dRef.current = node;
9853
9899
  if (typeof ref === "function") {
@@ -9870,17 +9916,19 @@ var HtmlInCanvasContent = forwardRef9(({
9870
9916
  const initializedRef = useRef22(false);
9871
9917
  const onInitCleanupRef = useRef22(null);
9872
9918
  const unmountedRef = useRef22(false);
9919
+ const ancestorRef = useRef22(ancestor);
9920
+ ancestorRef.current = ancestor;
9873
9921
  const onPaintCb = useCallback16(async () => {
9874
9922
  const element = divRef.current;
9875
9923
  if (!element) {
9876
9924
  throw new Error("Canvas or scene element not found");
9877
9925
  }
9878
- const offscreen = offscreenRef.current;
9879
- if (!offscreen) {
9880
- throw new Error("HtmlInCanvas: offscreen canvas not ready (transferControlToOffscreen failed or canvas is remounting)");
9926
+ const paintTarget = paintTargetRef.current;
9927
+ if (!paintTarget) {
9928
+ throw new Error("HtmlInCanvas: paint target is not ready because the canvas is remounting");
9881
9929
  }
9882
- resizeOffscreenCanvas({
9883
- offscreen,
9930
+ resizePaintTarget({
9931
+ target: paintTarget,
9884
9932
  width: canvasWidth,
9885
9933
  height: canvasHeight
9886
9934
  });
@@ -9891,22 +9939,30 @@ var HtmlInCanvasContent = forwardRef9(({
9891
9939
  }
9892
9940
  const handle = delayRender("onPaint");
9893
9941
  if (!initializedRef.current) {
9894
- let initImage = null;
9895
- try {
9896
- initImage = placeholderCanvas.captureElementImage(element);
9897
- } catch (error2) {
9898
- if (isMissingPaintRecordError(error2) && !isRendering) {} else if (isMissingPaintRecordError(error2)) {
9899
- throw new Error(missingPaintRecordMessage);
9900
- } else {
9942
+ const currentOnInit = onInitRef.current;
9943
+ if (!currentOnInit) {
9944
+ initializedRef.current = true;
9945
+ } else {
9946
+ let initImage;
9947
+ try {
9948
+ initImage = placeholderCanvas.captureElementImage(element);
9949
+ } catch (error2) {
9950
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
9951
+ continueRender2(handle);
9952
+ return;
9953
+ }
9954
+ if (isMissingPaintRecordError(error2)) {
9955
+ throw new Error(missingPaintRecordMessage);
9956
+ }
9901
9957
  throw error2;
9902
9958
  }
9903
- }
9904
- if (initImage) {
9905
9959
  initializedRef.current = true;
9906
- const currentOnInit = onInitRef.current;
9907
- if (currentOnInit) {
9960
+ try {
9961
+ if (paintTarget instanceof HTMLCanvasElement) {
9962
+ throw new Error("HtmlInCanvas: onInit requires an OffscreenCanvas paint target");
9963
+ }
9908
9964
  const cleanup = await currentOnInit({
9909
- canvas: offscreen,
9965
+ canvas: paintTarget,
9910
9966
  element,
9911
9967
  elementImage: initImage,
9912
9968
  pixelDensity: resolvedPixelDensity
@@ -9919,15 +9975,16 @@ var HtmlInCanvasContent = forwardRef9(({
9919
9975
  } else {
9920
9976
  onInitCleanupRef.current = cleanup;
9921
9977
  }
9978
+ } finally {
9979
+ initImage.close();
9922
9980
  }
9923
9981
  }
9924
9982
  }
9925
- const handler = onPaintRef.current ?? defaultOnPaint;
9926
9983
  let elImage;
9927
9984
  try {
9928
9985
  elImage = placeholderCanvas.captureElementImage(element);
9929
9986
  } catch (error2) {
9930
- if (isMissingPaintRecordError(error2) && !isRendering) {
9987
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
9931
9988
  continueRender2(handle);
9932
9989
  return;
9933
9990
  }
@@ -9936,20 +9993,41 @@ var HtmlInCanvasContent = forwardRef9(({
9936
9993
  }
9937
9994
  throw error2;
9938
9995
  }
9939
- await handler({
9940
- canvas: offscreen,
9941
- element,
9942
- elementImage: elImage,
9943
- pixelDensity: resolvedPixelDensity
9944
- });
9945
- await runEffectChain({
9946
- state: chainState.get(canvasWidth, canvasHeight),
9947
- source: offscreen,
9948
- effects: effectsRef.current,
9949
- output: offscreen,
9950
- width: canvasWidth,
9951
- height: canvasHeight
9952
- });
9996
+ try {
9997
+ const currentOnPaint = onPaintRef.current;
9998
+ if (currentOnPaint) {
9999
+ if (paintTarget instanceof HTMLCanvasElement) {
10000
+ throw new Error("HtmlInCanvas: onPaint requires an OffscreenCanvas paint target");
10001
+ }
10002
+ const paintResult = currentOnPaint({
10003
+ canvas: paintTarget,
10004
+ element,
10005
+ elementImage: elImage,
10006
+ pixelDensity: resolvedPixelDensity
10007
+ });
10008
+ if (paintResult) {
10009
+ await paintResult;
10010
+ }
10011
+ } else {
10012
+ defaultOnPaint({
10013
+ canvas: paintTarget,
10014
+ element,
10015
+ elementImage: elImage,
10016
+ pixelDensity: resolvedPixelDensity
10017
+ });
10018
+ }
10019
+ await runEffectChain({
10020
+ state: chainState.get(canvasWidth, canvasHeight),
10021
+ source: paintTarget,
10022
+ effects: effectsRef.current,
10023
+ output: paintTarget,
10024
+ width: canvasWidth,
10025
+ height: canvasHeight
10026
+ });
10027
+ } finally {
10028
+ elImage.close();
10029
+ }
10030
+ ancestorRef.current?.requestParentPaint();
9953
10031
  continueRender2(handle);
9954
10032
  } catch (error2) {
9955
10033
  cancelRender2(error2);
@@ -9961,7 +10039,7 @@ var HtmlInCanvasContent = forwardRef9(({
9961
10039
  continueRender2,
9962
10040
  cancelRender2,
9963
10041
  resolvedPixelDensity,
9964
- isRendering
10042
+ canRetryMissingPaintRecord
9965
10043
  ]);
9966
10044
  useLayoutEffect9(() => {
9967
10045
  const placeholder = canvas2dRef.current;
@@ -9969,10 +10047,10 @@ var HtmlInCanvasContent = forwardRef9(({
9969
10047
  throw new Error("Canvas not found");
9970
10048
  }
9971
10049
  placeholder.layoutSubtree = true;
9972
- const offscreen = placeholder.transferControlToOffscreen();
9973
- offscreenRef.current = offscreen;
9974
- resizeOffscreenCanvas({
9975
- offscreen,
10050
+ const paintTarget = usesDirectLayoutCanvas ? placeholder : placeholder.transferControlToOffscreen();
10051
+ paintTargetRef.current = paintTarget;
10052
+ resizePaintTarget({
10053
+ target: paintTarget,
9976
10054
  width: canvasWidth,
9977
10055
  height: canvasHeight
9978
10056
  });
@@ -9981,13 +10059,19 @@ var HtmlInCanvasContent = forwardRef9(({
9981
10059
  placeholder.addEventListener("paint", onPaintCb);
9982
10060
  return () => {
9983
10061
  placeholder.removeEventListener("paint", onPaintCb);
9984
- offscreenRef.current = null;
10062
+ paintTargetRef.current = null;
9985
10063
  initializedRef.current = false;
9986
10064
  unmountedRef.current = true;
9987
10065
  onInitCleanupRef.current?.();
9988
10066
  onInitCleanupRef.current = null;
9989
10067
  };
9990
- }, [onPaintCb, cancelRender2, canvasWidth, canvasHeight]);
10068
+ }, [
10069
+ onPaintCb,
10070
+ cancelRender2,
10071
+ canvasWidth,
10072
+ canvasHeight,
10073
+ usesDirectLayoutCanvas
10074
+ ]);
9991
10075
  const onPaintChangedRef = useRef22(false);
9992
10076
  useLayoutEffect9(() => {
9993
10077
  if (!onPaintChangedRef.current) {
@@ -10026,11 +10110,15 @@ var HtmlInCanvasContent = forwardRef9(({
10026
10110
  ...style ?? {}
10027
10111
  };
10028
10112
  }, [height, style, width]);
10029
- if (isInsideAncestorHtmlInCanvas) {
10030
- throw new Error("<HtmlInCanvas> effects cannot be nested together. Chrome will only display the outer effect. Consider merging the effects into one if you can.");
10031
- }
10113
+ const ancestorValue = useMemo30(() => {
10114
+ return {
10115
+ requestParentPaint: () => {
10116
+ canvas2dRef.current?.requestPaint?.();
10117
+ }
10118
+ };
10119
+ }, []);
10032
10120
  return /* @__PURE__ */ jsx25(HtmlInCanvasAncestorContext.Provider, {
10033
- value: true,
10121
+ value: ancestorValue,
10034
10122
  children: /* @__PURE__ */ jsx25("canvas", {
10035
10123
  ref: setLayoutCanvasRef,
10036
10124
  width: canvasWidth,
@@ -10758,6 +10846,12 @@ var NativeImgInner = ({
10758
10846
  };
10759
10847
  var CanvasImageWithPrivateProps = CanvasImage;
10760
10848
  var imgSchema = {
10849
+ src: {
10850
+ type: "asset",
10851
+ default: undefined,
10852
+ description: "Source",
10853
+ keyframable: false
10854
+ },
10761
10855
  ...baseSchema,
10762
10856
  ...transformSchema
10763
10857
  };
@@ -10968,7 +11062,7 @@ var makeInteractiveElement = (tag, displayName) => {
10968
11062
  _remotionInternalStack: stack,
10969
11063
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/interactive",
10970
11064
  outlineRef: refForOutline,
10971
- children: React29.createElement(tag, {
11065
+ children: React30.createElement(tag, {
10972
11066
  ...props2,
10973
11067
  ref: callbackRef
10974
11068
  })
@@ -11032,7 +11126,7 @@ var Interactive = {
11032
11126
  Text: makeInteractiveElement("text", "<Interactive.Text>"),
11033
11127
  Ul: makeInteractiveElement("ul", "<Interactive.Ul>")
11034
11128
  };
11035
- var compositionsRef = React30.createRef();
11129
+ var compositionsRef = React31.createRef();
11036
11130
  var CompositionManagerProvider = ({
11037
11131
  children,
11038
11132
  onlyRenderComposition,
@@ -11181,7 +11275,7 @@ var REMOTION_STUDIO_CONTAINER_ELEMENT = "__remotion-studio-container";
11181
11275
  var getPreviewDomElement = () => {
11182
11276
  return document.getElementById(REMOTION_STUDIO_CONTAINER_ELEMENT);
11183
11277
  };
11184
- var MaxMediaCacheSizeContext = React31.createContext(null);
11278
+ var MaxMediaCacheSizeContext = React32.createContext(null);
11185
11279
  var Root = null;
11186
11280
  var listeners = [];
11187
11281
  var getRoot = () => {
@@ -11454,7 +11548,7 @@ var resolveVideoConfigOrCatch = (params) => {
11454
11548
  };
11455
11549
  }
11456
11550
  };
11457
- var SequenceStackTracesUpdateContext = React33.createContext(() => {});
11551
+ var SequenceStackTracesUpdateContext = React34.createContext(() => {});
11458
11552
  var getEnvVariables = () => {
11459
11553
  if (getRemotionEnvironment().isRendering) {
11460
11554
  const param = window.remotion_envVariables;
@@ -11480,7 +11574,7 @@ var setupEnvVariables = () => {
11480
11574
  window.process.env[key] = env[key];
11481
11575
  });
11482
11576
  };
11483
- var CurrentScaleContext = React34.createContext(null);
11577
+ var CurrentScaleContext = React35.createContext(null);
11484
11578
  var PreviewSizeContext = createContext25({
11485
11579
  setSize: () => {
11486
11580
  return;
@@ -11504,7 +11598,7 @@ var calculateScale = ({
11504
11598
  }
11505
11599
  return Number(previewSize);
11506
11600
  };
11507
- var PixelDensityContext = React35.createContext(null);
11601
+ var PixelDensityContext = React36.createContext(null);
11508
11602
  var getOffthreadVideoSource = ({
11509
11603
  src,
11510
11604
  transparent,
@@ -11771,7 +11865,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
11771
11865
  ref: videoRef
11772
11866
  });
11773
11867
  }, [context.audioContext]);
11774
- const effectToUse = React37.useInsertionEffect ?? React37.useLayoutEffect;
11868
+ const effectToUse = React38.useInsertionEffect ?? React38.useLayoutEffect;
11775
11869
  effectToUse(() => {
11776
11870
  return () => {
11777
11871
  requestAnimationFrame(() => {
@@ -12147,20 +12241,20 @@ var OffthreadVideo = ({
12147
12241
  addSequenceStackTraces(OffthreadVideo);
12148
12242
  var WATCH_REMOTION_STATIC_FILES = "remotion_staticFilesChanged";
12149
12243
  function useRemotionContexts() {
12150
- const compositionManagerCtx = React39.useContext(CompositionManager);
12151
- const timelineContext = React39.useContext(TimelineContext);
12152
- const setTimelineContext = React39.useContext(SetTimelineContext);
12153
- const sequenceContext = React39.useContext(SequenceContext);
12154
- const nonceContext = React39.useContext(NonceContext);
12155
- const canUseRemotionHooksContext = React39.useContext(CanUseRemotionHooks);
12156
- const preloadContext = React39.useContext(PreloadContext);
12157
- const resolveCompositionContext = React39.useContext(ResolveCompositionContext);
12158
- const renderAssetManagerContext = React39.useContext(RenderAssetManager);
12159
- const sequenceManagerContext = React39.useContext(SequenceManager);
12160
- const sequenceManagerRefContext = React39.useContext(SequenceManagerRefContext);
12161
- const visualModePropStatusesRefContext = React39.useContext(VisualModePropStatusesRefContext);
12162
- const bufferManagerContext = React39.useContext(BufferingContextReact);
12163
- const logLevelContext = React39.useContext(LogLevelContext);
12244
+ const compositionManagerCtx = React40.useContext(CompositionManager);
12245
+ const timelineContext = React40.useContext(TimelineContext);
12246
+ const setTimelineContext = React40.useContext(SetTimelineContext);
12247
+ const sequenceContext = React40.useContext(SequenceContext);
12248
+ const nonceContext = React40.useContext(NonceContext);
12249
+ const canUseRemotionHooksContext = React40.useContext(CanUseRemotionHooks);
12250
+ const preloadContext = React40.useContext(PreloadContext);
12251
+ const resolveCompositionContext = React40.useContext(ResolveCompositionContext);
12252
+ const renderAssetManagerContext = React40.useContext(RenderAssetManager);
12253
+ const sequenceManagerContext = React40.useContext(SequenceManager);
12254
+ const sequenceManagerRefContext = React40.useContext(SequenceManagerRefContext);
12255
+ const visualModePropStatusesRefContext = React40.useContext(VisualModePropStatusesRefContext);
12256
+ const bufferManagerContext = React40.useContext(BufferingContextReact);
12257
+ const logLevelContext = React40.useContext(LogLevelContext);
12164
12258
  return useMemo37(() => ({
12165
12259
  compositionManagerCtx,
12166
12260
  timelineContext,
@@ -12334,6 +12428,8 @@ var Internals = {
12334
12428
  BufferingProvider,
12335
12429
  BufferingContextReact,
12336
12430
  getComponentsToAddStacksTo,
12431
+ getSequenceComponent,
12432
+ getSingleChildComponent,
12337
12433
  CurrentScaleContext,
12338
12434
  PixelDensityContext,
12339
12435
  PreviewSizeContext,
@@ -12391,75 +12487,139 @@ var Internals = {
12391
12487
  fromField
12392
12488
  };
12393
12489
  var flattenChildren = (children) => {
12394
- const childrenArray = React40.Children.toArray(children);
12490
+ const childrenArray = React41.Children.toArray(children);
12395
12491
  return childrenArray.reduce((flatChildren, child) => {
12396
- if (child.type === React40.Fragment) {
12492
+ if (child.type === React41.Fragment) {
12397
12493
  return flatChildren.concat(flattenChildren(child.props.children));
12398
12494
  }
12399
12495
  flatChildren.push(child);
12400
12496
  return flatChildren;
12401
12497
  }, []);
12402
12498
  };
12403
- var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
12499
+ var seriesSequenceSchema = {
12500
+ durationInFrames: Interactive.baseSchema.durationInFrames,
12501
+ name: Interactive.sequenceSchema.name,
12502
+ hidden: Interactive.sequenceSchema.hidden,
12503
+ showInTimeline: Interactive.sequenceSchema.showInTimeline,
12504
+ freeze: Interactive.baseSchema.freeze,
12505
+ layout: Interactive.sequenceSchema.layout
12506
+ };
12507
+ var SeriesSequenceInner = forwardRef14(({
12508
+ offset = 0,
12509
+ className = "",
12510
+ stack = null,
12511
+ _remotionInternalRender = null,
12512
+ ...props2
12513
+ }, ref) => {
12404
12514
  useRequireToBeInsideSeries();
12515
+ if (_remotionInternalRender) {
12516
+ return _remotionInternalRender({ ...props2, offset, className: className || undefined, stack }, ref);
12517
+ }
12405
12518
  return /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
12406
- children
12519
+ children: props2.children
12407
12520
  });
12408
- };
12409
- var SeriesSequence = forwardRef14(SeriesSequenceRefForwardingFunction);
12521
+ });
12522
+ var SeriesSequence = Interactive.withSchema({
12523
+ Component: SeriesSequenceInner,
12524
+ componentName: "<Series.Sequence>",
12525
+ componentIdentity: "dev.remotion.remotion.Series.Sequence",
12526
+ schema: seriesSequenceSchema,
12527
+ supportsEffects: false
12528
+ });
12410
12529
  var SequenceWithoutSchemaWithRef = SequenceWithoutSchema;
12530
+ var validateSeriesSequenceProps = ({
12531
+ durationInFrames,
12532
+ offset: offsetProp,
12533
+ index,
12534
+ childrenLength
12535
+ }) => {
12536
+ const debugInfo = `index = ${index}, duration = ${durationInFrames}`;
12537
+ if (index !== childrenLength - 1 || durationInFrames !== Infinity) {
12538
+ validateDurationInFrames(durationInFrames, {
12539
+ component: `of a <Series.Sequence /> component`,
12540
+ allowFloats: true
12541
+ });
12542
+ }
12543
+ const offset = offsetProp ?? 0;
12544
+ if (Number.isNaN(offset)) {
12545
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`);
12546
+ }
12547
+ if (!Number.isFinite(offset)) {
12548
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
12549
+ }
12550
+ if (offset % 1 !== 0) {
12551
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
12552
+ }
12553
+ return offset;
12554
+ };
12411
12555
  var SeriesInner = (props2) => {
12412
12556
  const childrenValue = useMemo38(() => {
12413
- let startFrame = 0;
12414
12557
  const flattenedChildren = flattenChildren(props2.children);
12415
- return Children.map(flattenedChildren, (child, i) => {
12558
+ const renderChildren = (i, startFrame) => {
12559
+ if (i === flattenedChildren.length) {
12560
+ return null;
12561
+ }
12562
+ const child = flattenedChildren[i];
12416
12563
  const castedChild = child;
12417
12564
  if (typeof castedChild === "string") {
12418
12565
  if (castedChild.trim() === "") {
12419
- return null;
12566
+ return renderChildren(i + 1, startFrame);
12420
12567
  }
12421
12568
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but you passed a string "${castedChild}"`);
12422
12569
  }
12423
12570
  if (castedChild.type !== SeriesSequence) {
12424
12571
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but got ${castedChild} instead`);
12425
12572
  }
12426
- const debugInfo = `index = ${i}, duration = ${castedChild.props.durationInFrames}`;
12427
- const durationInFramesProp = castedChild.props.durationInFrames;
12428
- const {
12429
- durationInFrames,
12430
- children: _children,
12431
- from,
12432
- name,
12433
- ...passedProps
12434
- } = castedChild.props;
12435
- if (i !== flattenedChildren.length - 1 || durationInFramesProp !== Infinity) {
12436
- validateDurationInFrames(durationInFramesProp, {
12437
- component: `of a <Series.Sequence /> component`,
12438
- allowFloats: true
12439
- });
12440
- }
12441
- const offset = castedChild.props.offset ?? 0;
12442
- if (Number.isNaN(offset)) {
12443
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`);
12444
- }
12445
- if (!Number.isFinite(offset)) {
12446
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
12447
- }
12448
- if (offset % 1 !== 0) {
12449
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
12450
- }
12451
- const currentStartFrame = startFrame + offset;
12452
- startFrame += durationInFramesProp + offset;
12453
- return /* @__PURE__ */ jsx37(SequenceWithoutSchemaWithRef, {
12454
- ref: castedChild.ref,
12455
- name: name || "<Series.Sequence>",
12456
- _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
12457
- from: currentStartFrame,
12458
- durationInFrames: durationInFramesProp,
12459
- ...passedProps,
12460
- children: child
12573
+ const castedElement = castedChild;
12574
+ validateSeriesSequenceProps({
12575
+ durationInFrames: castedElement.props.durationInFrames,
12576
+ offset: castedElement.props.offset,
12577
+ index: i,
12578
+ childrenLength: flattenedChildren.length
12461
12579
  });
12462
- });
12580
+ return React42.cloneElement(castedElement, {
12581
+ _remotionInternalRender: (resolvedProps, ref) => {
12582
+ const durationInFramesProp = resolvedProps.durationInFrames;
12583
+ const {
12584
+ durationInFrames: _durationInFrames,
12585
+ children: sequenceChildren,
12586
+ offset: offsetProp,
12587
+ controls,
12588
+ stack,
12589
+ from: _from,
12590
+ name,
12591
+ ...passedProps
12592
+ } = resolvedProps;
12593
+ const offset = validateSeriesSequenceProps({
12594
+ durationInFrames: durationInFramesProp,
12595
+ offset: offsetProp,
12596
+ index: i,
12597
+ childrenLength: flattenedChildren.length
12598
+ });
12599
+ const currentStartFrame = startFrame + offset;
12600
+ const nextStartFrame = startFrame + durationInFramesProp + offset;
12601
+ return /* @__PURE__ */ jsxs3(Fragment, {
12602
+ children: [
12603
+ /* @__PURE__ */ jsx37(SequenceWithoutSchemaWithRef, {
12604
+ ref,
12605
+ name: name || "<Series.Sequence>",
12606
+ _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
12607
+ _remotionInternalStack: stack ?? undefined,
12608
+ controls: controls ?? undefined,
12609
+ from: currentStartFrame,
12610
+ durationInFrames: durationInFramesProp,
12611
+ ...passedProps,
12612
+ children: /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
12613
+ children: sequenceChildren
12614
+ })
12615
+ }),
12616
+ renderChildren(i + 1, nextStartFrame)
12617
+ ]
12618
+ });
12619
+ }
12620
+ });
12621
+ };
12622
+ return renderChildren(0, 0);
12463
12623
  }, [props2.children]);
12464
12624
  return /* @__PURE__ */ jsx37(IsInsideSeriesContainer, {
12465
12625
  children: /* @__PURE__ */ jsx37(Sequence, {
@@ -12575,7 +12735,7 @@ var Still = (props2) => {
12575
12735
  durationInFrames: 1,
12576
12736
  fps: 1
12577
12737
  };
12578
- return React42.createElement(Composition, newProps);
12738
+ return React43.createElement(Composition, newProps);
12579
12739
  };
12580
12740
  addSequenceStackTraces(Still);
12581
12741
  var roundTo6Commas = (num) => {
@@ -13054,11 +13214,12 @@ var Config = new Proxy(proxyObj, {
13054
13214
  });
13055
13215
  Sequence.displayName = "Sequence";
13056
13216
  addSequenceStackTraces(Sequence);
13217
+ setSequenceComponent(Sequence);
13057
13218
  addSequenceStackTraces(Composition);
13058
13219
  addSequenceStackTraces(Folder);
13059
13220
 
13060
13221
  // src/components/team/TeamCards.tsx
13061
- import { jsx as jsx40, jsxs as jsxs3 } from "react/jsx-runtime";
13222
+ import { jsx as jsx40, jsxs as jsxs4 } from "react/jsx-runtime";
13062
13223
  var LinkedInLogo = () => {
13063
13224
  return /* @__PURE__ */ jsx40("svg", {
13064
13225
  xmlns: "http://www.w3.org/2000/svg",
@@ -13113,14 +13274,14 @@ var TeamMemberCard = ({
13113
13274
  github,
13114
13275
  email
13115
13276
  }) => {
13116
- return /* @__PURE__ */ jsxs3("div", {
13277
+ return /* @__PURE__ */ jsxs4("div", {
13117
13278
  className: "flex-1 rounded-[15px] flex flex-col md:flex-row gap-2 md:gap-4",
13118
13279
  children: [
13119
13280
  /* @__PURE__ */ jsx40("img", {
13120
13281
  src: image,
13121
13282
  className: "w-[250px] h-[250px] rounded-xl border-effect"
13122
13283
  }),
13123
- /* @__PURE__ */ jsxs3("div", {
13284
+ /* @__PURE__ */ jsxs4("div", {
13124
13285
  className: "flex flex-col border-effect px-4 py-3 bg-pane",
13125
13286
  children: [
13126
13287
  /* @__PURE__ */ jsx40("h2", {
@@ -13138,7 +13299,7 @@ var TeamMemberCard = ({
13138
13299
  /* @__PURE__ */ jsx40("div", {
13139
13300
  className: "flex-1"
13140
13301
  }),
13141
- /* @__PURE__ */ jsxs3("div", {
13302
+ /* @__PURE__ */ jsxs4("div", {
13142
13303
  className: "gap-3 flex flex-row",
13143
13304
  children: [
13144
13305
  /* @__PURE__ */ jsx40("a", {
@@ -13173,7 +13334,7 @@ var TeamMemberCard = ({
13173
13334
  });
13174
13335
  };
13175
13336
  var TeamCardsLayout = () => {
13176
- return /* @__PURE__ */ jsxs3("div", {
13337
+ return /* @__PURE__ */ jsxs4("div", {
13177
13338
  className: "flex flex-col gap-12 md:gap-4",
13178
13339
  children: [
13179
13340
  /* @__PURE__ */ jsx40(TeamMemberCard, {
@@ -13241,7 +13402,7 @@ var PersonalWebsite = () => {
13241
13402
  };
13242
13403
 
13243
13404
  // src/components/experts/ExpertsPage.tsx
13244
- import { jsx as jsx43, jsxs as jsxs4, Fragment } from "react/jsx-runtime";
13405
+ import { jsx as jsx43, jsxs as jsxs6, Fragment as Fragment2 } from "react/jsx-runtime";
13245
13406
  var arrowIcon = {
13246
13407
  height: 16,
13247
13408
  marginLeft: 10
@@ -13272,7 +13433,7 @@ var wrapperStyle = {
13272
13433
  paddingBottom: 100
13273
13434
  };
13274
13435
  var ExpertCard = ({ expert, Link }) => {
13275
- return /* @__PURE__ */ jsxs4("div", {
13436
+ return /* @__PURE__ */ jsxs6("div", {
13276
13437
  className: "flex-1 rounded-[15px] flex flex-col md:flex-row gap-2 md:gap-4",
13277
13438
  children: [
13278
13439
  /* @__PURE__ */ jsx43(Link, {
@@ -13284,7 +13445,7 @@ var ExpertCard = ({ expert, Link }) => {
13284
13445
  className: "w-[250px] h-[250px] rounded-xl border-effect object-cover"
13285
13446
  })
13286
13447
  }),
13287
- /* @__PURE__ */ jsxs4("div", {
13448
+ /* @__PURE__ */ jsxs6("div", {
13288
13449
  className: "flex flex-col border-effect px-4 py-3 bg-pane flex-1",
13289
13450
  children: [
13290
13451
  /* @__PURE__ */ jsx43(Link, {
@@ -13299,10 +13460,10 @@ var ExpertCard = ({ expert, Link }) => {
13299
13460
  className: "mt-2 mb-3 leading-normal font-brand",
13300
13461
  children: expert.description
13301
13462
  }),
13302
- /* @__PURE__ */ jsxs4("div", {
13463
+ /* @__PURE__ */ jsxs6("div", {
13303
13464
  className: "leading-6 mb-4",
13304
13465
  children: [
13305
- /* @__PURE__ */ jsxs4(Link, {
13466
+ /* @__PURE__ */ jsxs6(Link, {
13306
13467
  className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center",
13307
13468
  href: `/experts/${expert.slug}`,
13308
13469
  children: [
@@ -13319,10 +13480,10 @@ var ExpertCard = ({ expert, Link }) => {
13319
13480
  })
13320
13481
  ]
13321
13482
  }),
13322
- expert.videocall ? /* @__PURE__ */ jsxs4(Fragment, {
13483
+ expert.videocall ? /* @__PURE__ */ jsxs6(Fragment2, {
13323
13484
  children: [
13324
13485
  /* @__PURE__ */ jsx43("br", {}),
13325
- /* @__PURE__ */ jsxs4("a", {
13486
+ /* @__PURE__ */ jsxs6("a", {
13326
13487
  className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center",
13327
13488
  target: "_blank",
13328
13489
  href: expert.videocall,
@@ -13347,7 +13508,7 @@ var ExpertCard = ({ expert, Link }) => {
13347
13508
  /* @__PURE__ */ jsx43("div", {
13348
13509
  className: "flex-1"
13349
13510
  }),
13350
- /* @__PURE__ */ jsxs4("div", {
13511
+ /* @__PURE__ */ jsxs6("div", {
13351
13512
  className: "gap-3 flex flex-row flex-wrap",
13352
13513
  children: [
13353
13514
  expert.website ? /* @__PURE__ */ jsx43("a", {
@@ -13403,14 +13564,14 @@ var ExpertsPageContent = ({ Link }) => {
13403
13564
  }, []);
13404
13565
  return /* @__PURE__ */ jsx43("div", {
13405
13566
  className: "relative bg-[var(--background)]",
13406
- children: /* @__PURE__ */ jsxs4("div", {
13567
+ children: /* @__PURE__ */ jsxs6("div", {
13407
13568
  style: wrapperStyle,
13408
13569
  children: [
13409
13570
  /* @__PURE__ */ jsx43("h1", {
13410
13571
  className: "experts-pagetitle",
13411
13572
  children: "Find a Remotion Expert"
13412
13573
  }),
13413
- /* @__PURE__ */ jsxs4("p", {
13574
+ /* @__PURE__ */ jsxs6("p", {
13414
13575
  className: "experts-tagline",
13415
13576
  children: [
13416
13577
  "Get help by booking a call or hiring these freelancers to work on your Remotion project.",
@@ -13428,16 +13589,16 @@ var ExpertsPageContent = ({ Link }) => {
13428
13589
  })
13429
13590
  })
13430
13591
  }),
13431
- /* @__PURE__ */ jsxs4("div", {
13592
+ /* @__PURE__ */ jsxs6("div", {
13432
13593
  style: infoCard,
13433
13594
  children: [
13434
- /* @__PURE__ */ jsxs4("svg", {
13595
+ /* @__PURE__ */ jsxs6("svg", {
13435
13596
  viewBox: "0 0 661 512",
13436
13597
  fill: "none",
13437
13598
  xmlns: "http://www.w3.org/2000/svg",
13438
13599
  style: cardIcon,
13439
13600
  children: [
13440
- /* @__PURE__ */ jsxs4("g", {
13601
+ /* @__PURE__ */ jsxs6("g", {
13441
13602
  clipPath: "url(#clip0_1_2)",
13442
13603
  children: [
13443
13604
  /* @__PURE__ */ jsx43("path", {
@@ -13462,7 +13623,7 @@ var ExpertsPageContent = ({ Link }) => {
13462
13623
  })
13463
13624
  ]
13464
13625
  }),
13465
- /* @__PURE__ */ jsxs4("div", {
13626
+ /* @__PURE__ */ jsxs6("div", {
13466
13627
  style: { flex: 1 },
13467
13628
  children: [
13468
13629
  "Remotion Experts are independent freelancers with proven Remotion expertise and portfolios. However,",