@remotion/promo-pages 4.0.490 → 4.0.491

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
@@ -1153,13 +1153,12 @@ import { jsx as jsx34 } from "react/jsx-runtime";
1153
1153
  import { jsx as jsx35 } from "react/jsx-runtime";
1154
1154
  import React39, { useMemo as useMemo37 } from "react";
1155
1155
  import { jsx as jsx36 } from "react/jsx-runtime";
1156
- import {
1157
- Children,
1156
+ import React41, {
1158
1157
  forwardRef as forwardRef14,
1159
1158
  useMemo as useMemo38
1160
1159
  } from "react";
1161
1160
  import React40 from "react";
1162
- import { jsx as jsx37 } from "react/jsx-runtime";
1161
+ import { jsx as jsx37, jsxs as jsxs3, Fragment } from "react/jsx-runtime";
1163
1162
  import React42 from "react";
1164
1163
  import { forwardRef as forwardRef16, useCallback as useCallback25, useContext as useContext39 } from "react";
1165
1164
  import {
@@ -2335,7 +2334,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2335
2334
  var addSequenceStackTraces = (component) => {
2336
2335
  componentsToAddStacksTo.push(component);
2337
2336
  };
2338
- var VERSION = "4.0.490";
2337
+ var VERSION = "4.0.491";
2339
2338
  var checkMultipleRemotionVersions = () => {
2340
2339
  if (typeof globalThis === "undefined") {
2341
2340
  return;
@@ -2948,7 +2947,7 @@ var SequenceManagerRefContext = React11.createContext({
2948
2947
  current: []
2949
2948
  });
2950
2949
  var makeSequencePropsSubscriptionKey = (key) => {
2951
- return `${key.nodePath.join(".")}.${key.sequenceKeys.join(".")}.${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
2950
+ return `${key.absolutePath}\x00${key.nodePath.join(".")}\x00${key.sequenceKeys.join(".")}\x00${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
2952
2951
  };
2953
2952
  var VisualModePropStatusesContext = React11.createContext({
2954
2953
  propStatuses: {}
@@ -5561,6 +5560,7 @@ var RegularSequenceRefForwardingFunction = ({
5561
5560
  src: isMedia.data.src,
5562
5561
  getStack: () => stackRef.current,
5563
5562
  startMediaFrom: startMediaFrom ?? isMedia.data.startMediaFrom,
5563
+ mediaFrameAtSequenceZero,
5564
5564
  volume: isMedia.data.volumes,
5565
5565
  refForOutline: refForOutline ?? null,
5566
5566
  isInsideSeries,
@@ -5624,6 +5624,7 @@ var RegularSequenceRefForwardingFunction = ({
5624
5624
  isInsideSeries,
5625
5625
  registeredFrozenFrame,
5626
5626
  startMediaFrom,
5627
+ mediaFrameAtSequenceZero,
5627
5628
  frozenMediaFrame
5628
5629
  ]);
5629
5630
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
@@ -7574,7 +7575,9 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7574
7575
  return;
7575
7576
  }
7576
7577
  if (data === undefined) {
7577
- current.src = EMPTY_AUDIO;
7578
+ if (current.src !== EMPTY_AUDIO) {
7579
+ current.src = EMPTY_AUDIO;
7580
+ }
7578
7581
  return;
7579
7582
  }
7580
7583
  if (!data) {
@@ -7643,7 +7646,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7643
7646
  if (prevA.id === id) {
7644
7647
  const isTheSame = compareProps(aud, prevA.props) && prevA.premounting === premounting && prevA.postmounting === postmounting;
7645
7648
  if (isTheSame) {
7646
- return prevA;
7649
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
7647
7650
  }
7648
7651
  changed = true;
7649
7652
  return {
@@ -7655,7 +7658,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7655
7658
  audioMounted
7656
7659
  };
7657
7660
  }
7658
- return prevA;
7661
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
7659
7662
  });
7660
7663
  if (changed) {
7661
7664
  rerenderAudios();
@@ -7694,16 +7697,19 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7694
7697
  unregisterAudio,
7695
7698
  updateAudio
7696
7699
  ]);
7700
+ const sharedAudioTagElements = useMemo21(() => {
7701
+ return refs.map(({ id, ref }) => {
7702
+ return /* @__PURE__ */ jsx19("audio", {
7703
+ ref,
7704
+ preload: "metadata",
7705
+ src: EMPTY_AUDIO
7706
+ }, id);
7707
+ });
7708
+ }, [refs]);
7697
7709
  return /* @__PURE__ */ jsxs22(SharedAudioTagsContext.Provider, {
7698
7710
  value: audioTagsValue,
7699
7711
  children: [
7700
- refs.map(({ id, ref }) => {
7701
- return /* @__PURE__ */ jsx19("audio", {
7702
- ref,
7703
- preload: "metadata",
7704
- src: EMPTY_AUDIO
7705
- }, id);
7706
- }),
7712
+ sharedAudioTagElements,
7707
7713
  children
7708
7714
  ]
7709
7715
  });
@@ -8164,6 +8170,7 @@ var useMediaInTimeline = ({
8164
8170
  showInTimeline: true,
8165
8171
  nonce: nonce.get(),
8166
8172
  startMediaFrom: 0 - startsAt,
8173
+ mediaFrameAtSequenceZero: null,
8167
8174
  doesVolumeChange,
8168
8175
  loopDisplay,
8169
8176
  playbackRate,
@@ -9797,16 +9804,16 @@ var isMissingPaintRecordError = (error2) => {
9797
9804
  return error2 instanceof DOMException && error2.name === "InvalidStateError";
9798
9805
  };
9799
9806
  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,
9807
+ var resizePaintTarget = ({
9808
+ target,
9802
9809
  width,
9803
9810
  height
9804
9811
  }) => {
9805
- if (offscreen.width !== width) {
9806
- offscreen.width = width;
9812
+ if (target.width !== width) {
9813
+ target.width = width;
9807
9814
  }
9808
- if (offscreen.height !== height) {
9809
- offscreen.height = height;
9815
+ if (target.height !== height) {
9816
+ target.height = height;
9810
9817
  }
9811
9818
  };
9812
9819
  var defaultOnPaint = ({
@@ -9822,7 +9829,7 @@ var defaultOnPaint = ({
9822
9829
  const transform = ctx.drawElementImage(elementImage, 0, 0);
9823
9830
  element.style.transform = transform.toString();
9824
9831
  };
9825
- var HtmlInCanvasAncestorContext = createContext23(false);
9832
+ var HtmlInCanvasAncestorContext = createContext23(null);
9826
9833
  var HtmlInCanvasContent = forwardRef9(({
9827
9834
  width,
9828
9835
  height,
@@ -9834,20 +9841,22 @@ var HtmlInCanvasContent = forwardRef9(({
9834
9841
  controls,
9835
9842
  style
9836
9843
  }, ref) => {
9837
- const isInsideAncestorHtmlInCanvas = useContext31(HtmlInCanvasAncestorContext);
9844
+ const ancestor = useContext31(HtmlInCanvasAncestorContext);
9838
9845
  assertHtmlInCanvasDimensions(width, height);
9839
9846
  const resolvedPixelDensity = resolveHtmlInCanvasPixelDensity(pixelDensity);
9840
9847
  const canvasWidth = Math.ceil(width * resolvedPixelDensity);
9841
9848
  const canvasHeight = Math.ceil(height * resolvedPixelDensity);
9842
9849
  const { continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
9843
- const { isRendering } = useRemotionEnvironment();
9850
+ const { isClientSideRendering, isRendering } = useRemotionEnvironment();
9851
+ const canRetryMissingPaintRecord = !isRendering || isClientSideRendering;
9852
+ const usesDirectLayoutCanvas = onPaint === undefined && onInit === undefined;
9844
9853
  if (!isHtmlInCanvasSupported()) {
9845
9854
  cancelRender2(new Error(HTML_IN_CANVAS_UNSUPPORTED_MESSAGE));
9846
9855
  }
9847
9856
  const canvas2dRef = useRef22(null);
9848
- const offscreenRef = useRef22(null);
9857
+ const paintTargetRef = useRef22(null);
9849
9858
  const divRef = useRef22(null);
9850
- const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
9859
+ const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}-${usesDirectLayoutCanvas ? "direct" : "offscreen"}`;
9851
9860
  const setLayoutCanvasRef = useCallback16((node) => {
9852
9861
  canvas2dRef.current = node;
9853
9862
  if (typeof ref === "function") {
@@ -9870,17 +9879,19 @@ var HtmlInCanvasContent = forwardRef9(({
9870
9879
  const initializedRef = useRef22(false);
9871
9880
  const onInitCleanupRef = useRef22(null);
9872
9881
  const unmountedRef = useRef22(false);
9882
+ const ancestorRef = useRef22(ancestor);
9883
+ ancestorRef.current = ancestor;
9873
9884
  const onPaintCb = useCallback16(async () => {
9874
9885
  const element = divRef.current;
9875
9886
  if (!element) {
9876
9887
  throw new Error("Canvas or scene element not found");
9877
9888
  }
9878
- const offscreen = offscreenRef.current;
9879
- if (!offscreen) {
9880
- throw new Error("HtmlInCanvas: offscreen canvas not ready (transferControlToOffscreen failed or canvas is remounting)");
9889
+ const paintTarget = paintTargetRef.current;
9890
+ if (!paintTarget) {
9891
+ throw new Error("HtmlInCanvas: paint target is not ready because the canvas is remounting");
9881
9892
  }
9882
- resizeOffscreenCanvas({
9883
- offscreen,
9893
+ resizePaintTarget({
9894
+ target: paintTarget,
9884
9895
  width: canvasWidth,
9885
9896
  height: canvasHeight
9886
9897
  });
@@ -9891,22 +9902,30 @@ var HtmlInCanvasContent = forwardRef9(({
9891
9902
  }
9892
9903
  const handle = delayRender("onPaint");
9893
9904
  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 {
9905
+ const currentOnInit = onInitRef.current;
9906
+ if (!currentOnInit) {
9907
+ initializedRef.current = true;
9908
+ } else {
9909
+ let initImage;
9910
+ try {
9911
+ initImage = placeholderCanvas.captureElementImage(element);
9912
+ } catch (error2) {
9913
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
9914
+ continueRender2(handle);
9915
+ return;
9916
+ }
9917
+ if (isMissingPaintRecordError(error2)) {
9918
+ throw new Error(missingPaintRecordMessage);
9919
+ }
9901
9920
  throw error2;
9902
9921
  }
9903
- }
9904
- if (initImage) {
9905
9922
  initializedRef.current = true;
9906
- const currentOnInit = onInitRef.current;
9907
- if (currentOnInit) {
9923
+ try {
9924
+ if (paintTarget instanceof HTMLCanvasElement) {
9925
+ throw new Error("HtmlInCanvas: onInit requires an OffscreenCanvas paint target");
9926
+ }
9908
9927
  const cleanup = await currentOnInit({
9909
- canvas: offscreen,
9928
+ canvas: paintTarget,
9910
9929
  element,
9911
9930
  elementImage: initImage,
9912
9931
  pixelDensity: resolvedPixelDensity
@@ -9919,15 +9938,16 @@ var HtmlInCanvasContent = forwardRef9(({
9919
9938
  } else {
9920
9939
  onInitCleanupRef.current = cleanup;
9921
9940
  }
9941
+ } finally {
9942
+ initImage.close();
9922
9943
  }
9923
9944
  }
9924
9945
  }
9925
- const handler = onPaintRef.current ?? defaultOnPaint;
9926
9946
  let elImage;
9927
9947
  try {
9928
9948
  elImage = placeholderCanvas.captureElementImage(element);
9929
9949
  } catch (error2) {
9930
- if (isMissingPaintRecordError(error2) && !isRendering) {
9950
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
9931
9951
  continueRender2(handle);
9932
9952
  return;
9933
9953
  }
@@ -9936,20 +9956,41 @@ var HtmlInCanvasContent = forwardRef9(({
9936
9956
  }
9937
9957
  throw error2;
9938
9958
  }
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
- });
9959
+ try {
9960
+ const currentOnPaint = onPaintRef.current;
9961
+ if (currentOnPaint) {
9962
+ if (paintTarget instanceof HTMLCanvasElement) {
9963
+ throw new Error("HtmlInCanvas: onPaint requires an OffscreenCanvas paint target");
9964
+ }
9965
+ const paintResult = currentOnPaint({
9966
+ canvas: paintTarget,
9967
+ element,
9968
+ elementImage: elImage,
9969
+ pixelDensity: resolvedPixelDensity
9970
+ });
9971
+ if (paintResult) {
9972
+ await paintResult;
9973
+ }
9974
+ } else {
9975
+ defaultOnPaint({
9976
+ canvas: paintTarget,
9977
+ element,
9978
+ elementImage: elImage,
9979
+ pixelDensity: resolvedPixelDensity
9980
+ });
9981
+ }
9982
+ await runEffectChain({
9983
+ state: chainState.get(canvasWidth, canvasHeight),
9984
+ source: paintTarget,
9985
+ effects: effectsRef.current,
9986
+ output: paintTarget,
9987
+ width: canvasWidth,
9988
+ height: canvasHeight
9989
+ });
9990
+ } finally {
9991
+ elImage.close();
9992
+ }
9993
+ ancestorRef.current?.requestParentPaint();
9953
9994
  continueRender2(handle);
9954
9995
  } catch (error2) {
9955
9996
  cancelRender2(error2);
@@ -9961,7 +10002,7 @@ var HtmlInCanvasContent = forwardRef9(({
9961
10002
  continueRender2,
9962
10003
  cancelRender2,
9963
10004
  resolvedPixelDensity,
9964
- isRendering
10005
+ canRetryMissingPaintRecord
9965
10006
  ]);
9966
10007
  useLayoutEffect9(() => {
9967
10008
  const placeholder = canvas2dRef.current;
@@ -9969,10 +10010,10 @@ var HtmlInCanvasContent = forwardRef9(({
9969
10010
  throw new Error("Canvas not found");
9970
10011
  }
9971
10012
  placeholder.layoutSubtree = true;
9972
- const offscreen = placeholder.transferControlToOffscreen();
9973
- offscreenRef.current = offscreen;
9974
- resizeOffscreenCanvas({
9975
- offscreen,
10013
+ const paintTarget = usesDirectLayoutCanvas ? placeholder : placeholder.transferControlToOffscreen();
10014
+ paintTargetRef.current = paintTarget;
10015
+ resizePaintTarget({
10016
+ target: paintTarget,
9976
10017
  width: canvasWidth,
9977
10018
  height: canvasHeight
9978
10019
  });
@@ -9981,13 +10022,19 @@ var HtmlInCanvasContent = forwardRef9(({
9981
10022
  placeholder.addEventListener("paint", onPaintCb);
9982
10023
  return () => {
9983
10024
  placeholder.removeEventListener("paint", onPaintCb);
9984
- offscreenRef.current = null;
10025
+ paintTargetRef.current = null;
9985
10026
  initializedRef.current = false;
9986
10027
  unmountedRef.current = true;
9987
10028
  onInitCleanupRef.current?.();
9988
10029
  onInitCleanupRef.current = null;
9989
10030
  };
9990
- }, [onPaintCb, cancelRender2, canvasWidth, canvasHeight]);
10031
+ }, [
10032
+ onPaintCb,
10033
+ cancelRender2,
10034
+ canvasWidth,
10035
+ canvasHeight,
10036
+ usesDirectLayoutCanvas
10037
+ ]);
9991
10038
  const onPaintChangedRef = useRef22(false);
9992
10039
  useLayoutEffect9(() => {
9993
10040
  if (!onPaintChangedRef.current) {
@@ -10026,11 +10073,15 @@ var HtmlInCanvasContent = forwardRef9(({
10026
10073
  ...style ?? {}
10027
10074
  };
10028
10075
  }, [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
- }
10076
+ const ancestorValue = useMemo30(() => {
10077
+ return {
10078
+ requestParentPaint: () => {
10079
+ canvas2dRef.current?.requestPaint?.();
10080
+ }
10081
+ };
10082
+ }, []);
10032
10083
  return /* @__PURE__ */ jsx25(HtmlInCanvasAncestorContext.Provider, {
10033
- value: true,
10084
+ value: ancestorValue,
10034
10085
  children: /* @__PURE__ */ jsx25("canvas", {
10035
10086
  ref: setLayoutCanvasRef,
10036
10087
  width: canvasWidth,
@@ -12400,66 +12451,130 @@ var flattenChildren = (children) => {
12400
12451
  return flatChildren;
12401
12452
  }, []);
12402
12453
  };
12403
- var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
12454
+ var seriesSequenceSchema = {
12455
+ durationInFrames: Interactive.baseSchema.durationInFrames,
12456
+ name: Interactive.sequenceSchema.name,
12457
+ hidden: Interactive.sequenceSchema.hidden,
12458
+ showInTimeline: Interactive.sequenceSchema.showInTimeline,
12459
+ freeze: Interactive.baseSchema.freeze,
12460
+ layout: Interactive.sequenceSchema.layout
12461
+ };
12462
+ var SeriesSequenceInner = forwardRef14(({
12463
+ offset = 0,
12464
+ className = "",
12465
+ stack = null,
12466
+ _remotionInternalRender = null,
12467
+ ...props2
12468
+ }, ref) => {
12404
12469
  useRequireToBeInsideSeries();
12470
+ if (_remotionInternalRender) {
12471
+ return _remotionInternalRender({ ...props2, offset, className: className || undefined, stack }, ref);
12472
+ }
12405
12473
  return /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
12406
- children
12474
+ children: props2.children
12407
12475
  });
12408
- };
12409
- var SeriesSequence = forwardRef14(SeriesSequenceRefForwardingFunction);
12476
+ });
12477
+ var SeriesSequence = Interactive.withSchema({
12478
+ Component: SeriesSequenceInner,
12479
+ componentName: "<Series.Sequence>",
12480
+ componentIdentity: "dev.remotion.remotion.Series.Sequence",
12481
+ schema: seriesSequenceSchema,
12482
+ supportsEffects: false
12483
+ });
12410
12484
  var SequenceWithoutSchemaWithRef = SequenceWithoutSchema;
12485
+ var validateSeriesSequenceProps = ({
12486
+ durationInFrames,
12487
+ offset: offsetProp,
12488
+ index,
12489
+ childrenLength
12490
+ }) => {
12491
+ const debugInfo = `index = ${index}, duration = ${durationInFrames}`;
12492
+ if (index !== childrenLength - 1 || durationInFrames !== Infinity) {
12493
+ validateDurationInFrames(durationInFrames, {
12494
+ component: `of a <Series.Sequence /> component`,
12495
+ allowFloats: true
12496
+ });
12497
+ }
12498
+ const offset = offsetProp ?? 0;
12499
+ if (Number.isNaN(offset)) {
12500
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`);
12501
+ }
12502
+ if (!Number.isFinite(offset)) {
12503
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
12504
+ }
12505
+ if (offset % 1 !== 0) {
12506
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
12507
+ }
12508
+ return offset;
12509
+ };
12411
12510
  var SeriesInner = (props2) => {
12412
12511
  const childrenValue = useMemo38(() => {
12413
- let startFrame = 0;
12414
12512
  const flattenedChildren = flattenChildren(props2.children);
12415
- return Children.map(flattenedChildren, (child, i) => {
12513
+ const renderChildren = (i, startFrame) => {
12514
+ if (i === flattenedChildren.length) {
12515
+ return null;
12516
+ }
12517
+ const child = flattenedChildren[i];
12416
12518
  const castedChild = child;
12417
12519
  if (typeof castedChild === "string") {
12418
12520
  if (castedChild.trim() === "") {
12419
- return null;
12521
+ return renderChildren(i + 1, startFrame);
12420
12522
  }
12421
12523
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but you passed a string "${castedChild}"`);
12422
12524
  }
12423
12525
  if (castedChild.type !== SeriesSequence) {
12424
12526
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but got ${castedChild} instead`);
12425
12527
  }
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
12528
+ const castedElement = castedChild;
12529
+ validateSeriesSequenceProps({
12530
+ durationInFrames: castedElement.props.durationInFrames,
12531
+ offset: castedElement.props.offset,
12532
+ index: i,
12533
+ childrenLength: flattenedChildren.length
12461
12534
  });
12462
- });
12535
+ return React41.cloneElement(castedElement, {
12536
+ _remotionInternalRender: (resolvedProps, ref) => {
12537
+ const durationInFramesProp = resolvedProps.durationInFrames;
12538
+ const {
12539
+ durationInFrames: _durationInFrames,
12540
+ children: sequenceChildren,
12541
+ offset: offsetProp,
12542
+ controls,
12543
+ stack,
12544
+ from: _from,
12545
+ name,
12546
+ ...passedProps
12547
+ } = resolvedProps;
12548
+ const offset = validateSeriesSequenceProps({
12549
+ durationInFrames: durationInFramesProp,
12550
+ offset: offsetProp,
12551
+ index: i,
12552
+ childrenLength: flattenedChildren.length
12553
+ });
12554
+ const currentStartFrame = startFrame + offset;
12555
+ const nextStartFrame = startFrame + durationInFramesProp + offset;
12556
+ return /* @__PURE__ */ jsxs3(Fragment, {
12557
+ children: [
12558
+ /* @__PURE__ */ jsx37(SequenceWithoutSchemaWithRef, {
12559
+ ref,
12560
+ name: name || "<Series.Sequence>",
12561
+ _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
12562
+ _remotionInternalStack: stack ?? undefined,
12563
+ controls: controls ?? undefined,
12564
+ from: currentStartFrame,
12565
+ durationInFrames: durationInFramesProp,
12566
+ ...passedProps,
12567
+ children: /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
12568
+ children: sequenceChildren
12569
+ })
12570
+ }),
12571
+ renderChildren(i + 1, nextStartFrame)
12572
+ ]
12573
+ });
12574
+ }
12575
+ });
12576
+ };
12577
+ return renderChildren(0, 0);
12463
12578
  }, [props2.children]);
12464
12579
  return /* @__PURE__ */ jsx37(IsInsideSeriesContainer, {
12465
12580
  children: /* @__PURE__ */ jsx37(Sequence, {
@@ -13058,7 +13173,7 @@ addSequenceStackTraces(Composition);
13058
13173
  addSequenceStackTraces(Folder);
13059
13174
 
13060
13175
  // src/components/team/TeamCards.tsx
13061
- import { jsx as jsx40, jsxs as jsxs3 } from "react/jsx-runtime";
13176
+ import { jsx as jsx40, jsxs as jsxs4 } from "react/jsx-runtime";
13062
13177
  var LinkedInLogo = () => {
13063
13178
  return /* @__PURE__ */ jsx40("svg", {
13064
13179
  xmlns: "http://www.w3.org/2000/svg",
@@ -13113,14 +13228,14 @@ var TeamMemberCard = ({
13113
13228
  github,
13114
13229
  email
13115
13230
  }) => {
13116
- return /* @__PURE__ */ jsxs3("div", {
13231
+ return /* @__PURE__ */ jsxs4("div", {
13117
13232
  className: "flex-1 rounded-[15px] flex flex-col md:flex-row gap-2 md:gap-4",
13118
13233
  children: [
13119
13234
  /* @__PURE__ */ jsx40("img", {
13120
13235
  src: image,
13121
13236
  className: "w-[250px] h-[250px] rounded-xl border-effect"
13122
13237
  }),
13123
- /* @__PURE__ */ jsxs3("div", {
13238
+ /* @__PURE__ */ jsxs4("div", {
13124
13239
  className: "flex flex-col border-effect px-4 py-3 bg-pane",
13125
13240
  children: [
13126
13241
  /* @__PURE__ */ jsx40("h2", {
@@ -13138,7 +13253,7 @@ var TeamMemberCard = ({
13138
13253
  /* @__PURE__ */ jsx40("div", {
13139
13254
  className: "flex-1"
13140
13255
  }),
13141
- /* @__PURE__ */ jsxs3("div", {
13256
+ /* @__PURE__ */ jsxs4("div", {
13142
13257
  className: "gap-3 flex flex-row",
13143
13258
  children: [
13144
13259
  /* @__PURE__ */ jsx40("a", {
@@ -13173,7 +13288,7 @@ var TeamMemberCard = ({
13173
13288
  });
13174
13289
  };
13175
13290
  var TeamCardsLayout = () => {
13176
- return /* @__PURE__ */ jsxs3("div", {
13291
+ return /* @__PURE__ */ jsxs4("div", {
13177
13292
  className: "flex flex-col gap-12 md:gap-4",
13178
13293
  children: [
13179
13294
  /* @__PURE__ */ jsx40(TeamMemberCard, {
@@ -13241,7 +13356,7 @@ var PersonalWebsite = () => {
13241
13356
  };
13242
13357
 
13243
13358
  // src/components/experts/ExpertsPage.tsx
13244
- import { jsx as jsx43, jsxs as jsxs4, Fragment } from "react/jsx-runtime";
13359
+ import { jsx as jsx43, jsxs as jsxs6, Fragment as Fragment2 } from "react/jsx-runtime";
13245
13360
  var arrowIcon = {
13246
13361
  height: 16,
13247
13362
  marginLeft: 10
@@ -13272,7 +13387,7 @@ var wrapperStyle = {
13272
13387
  paddingBottom: 100
13273
13388
  };
13274
13389
  var ExpertCard = ({ expert, Link }) => {
13275
- return /* @__PURE__ */ jsxs4("div", {
13390
+ return /* @__PURE__ */ jsxs6("div", {
13276
13391
  className: "flex-1 rounded-[15px] flex flex-col md:flex-row gap-2 md:gap-4",
13277
13392
  children: [
13278
13393
  /* @__PURE__ */ jsx43(Link, {
@@ -13284,7 +13399,7 @@ var ExpertCard = ({ expert, Link }) => {
13284
13399
  className: "w-[250px] h-[250px] rounded-xl border-effect object-cover"
13285
13400
  })
13286
13401
  }),
13287
- /* @__PURE__ */ jsxs4("div", {
13402
+ /* @__PURE__ */ jsxs6("div", {
13288
13403
  className: "flex flex-col border-effect px-4 py-3 bg-pane flex-1",
13289
13404
  children: [
13290
13405
  /* @__PURE__ */ jsx43(Link, {
@@ -13299,10 +13414,10 @@ var ExpertCard = ({ expert, Link }) => {
13299
13414
  className: "mt-2 mb-3 leading-normal font-brand",
13300
13415
  children: expert.description
13301
13416
  }),
13302
- /* @__PURE__ */ jsxs4("div", {
13417
+ /* @__PURE__ */ jsxs6("div", {
13303
13418
  className: "leading-6 mb-4",
13304
13419
  children: [
13305
- /* @__PURE__ */ jsxs4(Link, {
13420
+ /* @__PURE__ */ jsxs6(Link, {
13306
13421
  className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center",
13307
13422
  href: `/experts/${expert.slug}`,
13308
13423
  children: [
@@ -13319,10 +13434,10 @@ var ExpertCard = ({ expert, Link }) => {
13319
13434
  })
13320
13435
  ]
13321
13436
  }),
13322
- expert.videocall ? /* @__PURE__ */ jsxs4(Fragment, {
13437
+ expert.videocall ? /* @__PURE__ */ jsxs6(Fragment2, {
13323
13438
  children: [
13324
13439
  /* @__PURE__ */ jsx43("br", {}),
13325
- /* @__PURE__ */ jsxs4("a", {
13440
+ /* @__PURE__ */ jsxs6("a", {
13326
13441
  className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center",
13327
13442
  target: "_blank",
13328
13443
  href: expert.videocall,
@@ -13347,7 +13462,7 @@ var ExpertCard = ({ expert, Link }) => {
13347
13462
  /* @__PURE__ */ jsx43("div", {
13348
13463
  className: "flex-1"
13349
13464
  }),
13350
- /* @__PURE__ */ jsxs4("div", {
13465
+ /* @__PURE__ */ jsxs6("div", {
13351
13466
  className: "gap-3 flex flex-row flex-wrap",
13352
13467
  children: [
13353
13468
  expert.website ? /* @__PURE__ */ jsx43("a", {
@@ -13403,14 +13518,14 @@ var ExpertsPageContent = ({ Link }) => {
13403
13518
  }, []);
13404
13519
  return /* @__PURE__ */ jsx43("div", {
13405
13520
  className: "relative bg-[var(--background)]",
13406
- children: /* @__PURE__ */ jsxs4("div", {
13521
+ children: /* @__PURE__ */ jsxs6("div", {
13407
13522
  style: wrapperStyle,
13408
13523
  children: [
13409
13524
  /* @__PURE__ */ jsx43("h1", {
13410
13525
  className: "experts-pagetitle",
13411
13526
  children: "Find a Remotion Expert"
13412
13527
  }),
13413
- /* @__PURE__ */ jsxs4("p", {
13528
+ /* @__PURE__ */ jsxs6("p", {
13414
13529
  className: "experts-tagline",
13415
13530
  children: [
13416
13531
  "Get help by booking a call or hiring these freelancers to work on your Remotion project.",
@@ -13428,16 +13543,16 @@ var ExpertsPageContent = ({ Link }) => {
13428
13543
  })
13429
13544
  })
13430
13545
  }),
13431
- /* @__PURE__ */ jsxs4("div", {
13546
+ /* @__PURE__ */ jsxs6("div", {
13432
13547
  style: infoCard,
13433
13548
  children: [
13434
- /* @__PURE__ */ jsxs4("svg", {
13549
+ /* @__PURE__ */ jsxs6("svg", {
13435
13550
  viewBox: "0 0 661 512",
13436
13551
  fill: "none",
13437
13552
  xmlns: "http://www.w3.org/2000/svg",
13438
13553
  style: cardIcon,
13439
13554
  children: [
13440
- /* @__PURE__ */ jsxs4("g", {
13555
+ /* @__PURE__ */ jsxs6("g", {
13441
13556
  clipPath: "url(#clip0_1_2)",
13442
13557
  children: [
13443
13558
  /* @__PURE__ */ jsx43("path", {
@@ -13462,7 +13577,7 @@ var ExpertsPageContent = ({ Link }) => {
13462
13577
  })
13463
13578
  ]
13464
13579
  }),
13465
- /* @__PURE__ */ jsxs4("div", {
13580
+ /* @__PURE__ */ jsxs6("div", {
13466
13581
  style: { flex: 1 },
13467
13582
  children: [
13468
13583
  "Remotion Experts are independent freelancers with proven Remotion expertise and portfolios. However,",