@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/Homepage.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,",
@@ -17609,7 +17724,7 @@ var PathInternals = {
17609
17724
  // ../shapes/dist/esm/index.mjs
17610
17725
  import React3, { useCallback as useCallback26, useMemo as useMemo42, useRef as useRef29 } from "react";
17611
17726
  import { version } from "react-dom";
17612
- import { jsx as jsx44, jsxs as jsxs5 } from "react/jsx-runtime";
17727
+ import { jsx as jsx44, jsxs as jsxs7 } from "react/jsx-runtime";
17613
17728
  import { jsx as jsx210 } from "react/jsx-runtime";
17614
17729
  import { jsx as jsx310 } from "react/jsx-runtime";
17615
17730
  import { jsx as jsx45 } from "react/jsx-runtime";
@@ -17811,7 +17926,7 @@ var RenderSvg = ({
17811
17926
  const memoizedEffectDefinitions = Internals.useMemoizedEffectDefinitions(effects);
17812
17927
  const videoConfig = Internals.useUnsafeVideoConfig();
17813
17928
  const reactSupportsTransformOrigin = doesReactSupportTransformOriginProperty(version);
17814
- const svg = /* @__PURE__ */ jsxs5("svg", {
17929
+ const svg = /* @__PURE__ */ jsxs7("svg", {
17815
17930
  ref: effects.length === 0 || !videoConfig ? setSvgRef : undefined,
17816
17931
  width,
17817
17932
  height,
@@ -17837,7 +17952,7 @@ var RenderSvg = ({
17837
17952
  }
17838
17953
  const prevX = prevInstruction.x;
17839
17954
  const prevY = prevInstruction.y;
17840
- return /* @__PURE__ */ jsxs5(React3.Fragment, {
17955
+ return /* @__PURE__ */ jsxs7(React3.Fragment, {
17841
17956
  children: [
17842
17957
  /* @__PURE__ */ jsx44("path", {
17843
17958
  d: `M ${prevX} ${prevY} ${i.cp1x} ${i.cp1y}`,
@@ -20518,8 +20633,8 @@ var extrudeAndTransformElement = (options) => {
20518
20633
  };
20519
20634
 
20520
20635
  // ../design/dist/esm/index.mjs
20521
- import { jsx as jsx212, Fragment as Fragment3 } from "react/jsx-runtime";
20522
- import { jsx as jsx312, jsxs as jsxs6 } from "react/jsx-runtime";
20636
+ import { jsx as jsx212, Fragment as Fragment32 } from "react/jsx-runtime";
20637
+ import { jsx as jsx312, jsxs as jsxs8 } from "react/jsx-runtime";
20523
20638
  import { useEffect as useEffect22, useMemo as useMemo210, useRef as useRef31 } from "react";
20524
20639
  import { jsx as jsx47 } from "react/jsx-runtime";
20525
20640
  import { jsx as jsx53, jsxs as jsxs23 } from "react/jsx-runtime";
@@ -20582,7 +20697,7 @@ import { Fragment as Fragment8, jsx as jsx242, jsxs as jsxs42 } from "react/jsx-
20582
20697
  import { forwardRef as forwardRef142, createElement as createElement7 } from "react";
20583
20698
  import { forwardRef as forwardRef132, createElement as createElement6 } from "react";
20584
20699
  import * as React372 from "react";
20585
- import { jsx as jsx252, jsxs as jsxs52 } from "react/jsx-runtime";
20700
+ import { jsx as jsx252, jsxs as jsxs5 } from "react/jsx-runtime";
20586
20701
  import { jsx as jsx262 } from "react/jsx-runtime";
20587
20702
  import * as React49 from "react";
20588
20703
  import * as React38 from "react";
@@ -20595,7 +20710,7 @@ import { jsx as jsx292 } from "react/jsx-runtime";
20595
20710
  import React210 from "react";
20596
20711
  import { jsx as jsx2102 } from "react/jsx-runtime";
20597
20712
  import * as React422 from "react";
20598
- import * as React41 from "react";
20713
+ import * as React412 from "react";
20599
20714
  import * as React43 from "react";
20600
20715
  import * as ReactDOM5 from "react-dom";
20601
20716
  import { jsx as jsx302 } from "react/jsx-runtime";
@@ -20943,7 +21058,7 @@ var useMousePosition = (ref) => {
20943
21058
  return angle;
20944
21059
  };
20945
21060
  var Faces = ({ elements, ...svgProps }) => {
20946
- return /* @__PURE__ */ jsx212(Fragment3, {
21061
+ return /* @__PURE__ */ jsx212(Fragment32, {
20947
21062
  children: elements.map(({ points, color, crispEdges }, idx) => {
20948
21063
  return /* @__PURE__ */ jsx212("path", {
20949
21064
  d: threeDIntoSvgPath(points),
@@ -21002,7 +21117,7 @@ var Outer = ({
21002
21117
  description: "rect",
21003
21118
  transformations: centerOriented
21004
21119
  });
21005
- return /* @__PURE__ */ jsxs6("div", {
21120
+ return /* @__PURE__ */ jsxs8("div", {
21006
21121
  className: "relative",
21007
21122
  style: { width, height },
21008
21123
  children: [
@@ -26006,7 +26121,7 @@ var ChevronDown = createLucideIcon("ChevronDown", [
26006
26121
  var ChevronUp = createLucideIcon("ChevronUp", [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]]);
26007
26122
  var Select2 = Root222;
26008
26123
  var SelectValue2 = Value;
26009
- var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Trigger, {
26124
+ var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(Trigger, {
26010
26125
  ref,
26011
26126
  className: cn("flex h-10 w-full items-center justify-between rounded-md border-black border-2 border-b-4 bg-card-bg px-3 py-5 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 font-brand", className),
26012
26127
  ...props,
@@ -26040,7 +26155,7 @@ var SelectScrollDownButton2 = React372.forwardRef(({ className, ...props }, ref)
26040
26155
  }));
26041
26156
  SelectScrollDownButton2.displayName = ScrollDownButton.displayName;
26042
26157
  var SelectContent2 = React372.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx252(Portal2, {
26043
- children: /* @__PURE__ */ jsxs52(Content2, {
26158
+ children: /* @__PURE__ */ jsxs5(Content2, {
26044
26159
  ref,
26045
26160
  className: cn(" border-2 border-black relative z-50 max-h-96 min-w-32 overflow-hidden rounded-md font-brand bg-card-bg text-text shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className),
26046
26161
  position,
@@ -26062,7 +26177,7 @@ var SelectLabel2 = React372.forwardRef(({ className, ...props }, ref) => /* @__P
26062
26177
  ...props
26063
26178
  }));
26064
26179
  SelectLabel2.displayName = Label.displayName;
26065
- var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Item, {
26180
+ var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(Item, {
26066
26181
  ref,
26067
26182
  className: cn("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden focus:bg-slate-200 dark:focus:bg-white/10 data-disabled:pointer-events-none data-disabled:opacity-50 font-brand", className),
26068
26183
  ...props,
@@ -26604,7 +26719,7 @@ function toSafeIndex(array, index2) {
26604
26719
  function toSafeInteger(number) {
26605
26720
  return number !== number || number === 0 ? 0 : Math.trunc(number);
26606
26721
  }
26607
- var useLayoutEffect222 = globalThis?.document ? React41.useLayoutEffect : () => {};
26722
+ var useLayoutEffect222 = globalThis?.document ? React412.useLayoutEffect : () => {};
26608
26723
  var useReactId2 = React422[" useId ".trim().toString()] || (() => {
26609
26724
  return;
26610
26725
  });
@@ -28540,7 +28655,7 @@ function cn2(...inputs) {
28540
28655
  }
28541
28656
 
28542
28657
  // src/components/homepage/PricingBulletPoint.tsx
28543
- import { jsx as jsx48, jsxs as jsxs7 } from "react/jsx-runtime";
28658
+ import { jsx as jsx48, jsxs as jsxs9 } from "react/jsx-runtime";
28544
28659
  var container3 = {
28545
28660
  display: "flex",
28546
28661
  flexDirection: "row",
@@ -28554,7 +28669,7 @@ var greyCircle = {
28554
28669
  backgroundColor: "var(--footer-border)"
28555
28670
  };
28556
28671
  var PricingBulletPoint = ({ text, checked, children }) => {
28557
- const checkmarkSVG = /* @__PURE__ */ jsxs7("svg", {
28672
+ const checkmarkSVG = /* @__PURE__ */ jsxs9("svg", {
28558
28673
  width: "20",
28559
28674
  height: "20",
28560
28675
  viewBox: "0 0 20 20",
@@ -28576,13 +28691,13 @@ var PricingBulletPoint = ({ text, checked, children }) => {
28576
28691
  })
28577
28692
  ]
28578
28693
  });
28579
- return /* @__PURE__ */ jsxs7("div", {
28694
+ return /* @__PURE__ */ jsxs9("div", {
28580
28695
  style: container3,
28581
28696
  children: [
28582
28697
  checked ? checkmarkSVG : /* @__PURE__ */ jsx48("div", {
28583
28698
  style: greyCircle
28584
28699
  }),
28585
- /* @__PURE__ */ jsxs7("div", {
28700
+ /* @__PURE__ */ jsxs9("div", {
28586
28701
  className: "fontbrand text-lg\t",
28587
28702
  children: [
28588
28703
  text,
@@ -28594,7 +28709,7 @@ var PricingBulletPoint = ({ text, checked, children }) => {
28594
28709
  };
28595
28710
 
28596
28711
  // src/components/homepage/FreePricing.tsx
28597
- import { jsx as jsx49, jsxs as jsxs8, Fragment as Fragment9 } from "react/jsx-runtime";
28712
+ import { jsx as jsx49, jsxs as jsxs10, Fragment as Fragment11 } from "react/jsx-runtime";
28598
28713
  var Container = ({
28599
28714
  children
28600
28715
  }) => {
@@ -28638,7 +28753,7 @@ var icon = {
28638
28753
  };
28639
28754
  var PricingSlider = ({ value, onChange, min: min2, max: max2, step = 1, "aria-label": ariaLabel }) => {
28640
28755
  const percentage = (value - min2) / (max2 - min2) * 100;
28641
- return /* @__PURE__ */ jsxs8(Fragment9, {
28756
+ return /* @__PURE__ */ jsxs10(Fragment11, {
28642
28757
  children: [
28643
28758
  /* @__PURE__ */ jsx49("style", {
28644
28759
  children: `
@@ -28695,7 +28810,7 @@ var textUnitWrapper = {
28695
28810
  flexDirection: "column"
28696
28811
  };
28697
28812
  var FreePricing = () => {
28698
- return /* @__PURE__ */ jsxs8(Container, {
28813
+ return /* @__PURE__ */ jsxs10(Container, {
28699
28814
  children: [
28700
28815
  /* @__PURE__ */ jsx49(Audience, {
28701
28816
  children: "For individuals and companies of up to 3 people"
@@ -28726,7 +28841,7 @@ var FreePricing = () => {
28726
28841
  ...textUnitWrapper,
28727
28842
  alignItems: "flex-end"
28728
28843
  },
28729
- children: /* @__PURE__ */ jsxs8("a", {
28844
+ children: /* @__PURE__ */ jsxs10("a", {
28730
28845
  target: "_blank",
28731
28846
  href: "https://www.remotion.dev/docs",
28732
28847
  className: "font-brand text-brand flex flex-row items-center gap-1 no-underline",
@@ -28750,7 +28865,7 @@ var FreePricing = () => {
28750
28865
  });
28751
28866
  };
28752
28867
  var EnterpriseLicense = () => {
28753
- return /* @__PURE__ */ jsxs8(Container, {
28868
+ return /* @__PURE__ */ jsxs10(Container, {
28754
28869
  children: [
28755
28870
  /* @__PURE__ */ jsx49(Audience, {
28756
28871
  children: "For advanced needs"
@@ -28783,7 +28898,7 @@ var EnterpriseLicense = () => {
28783
28898
  checked: true
28784
28899
  }),
28785
28900
  /* @__PURE__ */ jsx49(PricingBulletPoint, {
28786
- text: /* @__PURE__ */ jsxs8("span", {
28901
+ text: /* @__PURE__ */ jsxs10("span", {
28787
28902
  children: [
28788
28903
  /* @__PURE__ */ jsx49("a", {
28789
28904
  href: "https://www.remotion.dev/editor-starter",
@@ -28801,7 +28916,7 @@ var EnterpriseLicense = () => {
28801
28916
  }),
28802
28917
  /* @__PURE__ */ jsx49("div", {
28803
28918
  className: "flex flex-row justify-end",
28804
- children: /* @__PURE__ */ jsxs8("div", {
28919
+ children: /* @__PURE__ */ jsxs10("div", {
28805
28920
  style: {
28806
28921
  ...textUnitWrapper,
28807
28922
  alignItems: "flex-end"
@@ -28828,7 +28943,7 @@ var EnterpriseLicense = () => {
28828
28943
  var SEAT_PRICE = 25;
28829
28944
  var RENDER_UNIT_PRICE = 10;
28830
28945
  var SectionCheckbox = ({ checked, onChange, title, subtitle, children }) => {
28831
- return /* @__PURE__ */ jsxs8("div", {
28946
+ return /* @__PURE__ */ jsxs10("div", {
28832
28947
  className: "flex flex-row gap-3 cursor-pointer select-none items-center",
28833
28948
  onClick: () => onChange(!checked),
28834
28949
  children: [
@@ -28837,10 +28952,10 @@ var SectionCheckbox = ({ checked, onChange, title, subtitle, children }) => {
28837
28952
  onToggle: () => onChange(!checked),
28838
28953
  "aria-label": title
28839
28954
  }),
28840
- /* @__PURE__ */ jsxs8("div", {
28955
+ /* @__PURE__ */ jsxs10("div", {
28841
28956
  className: "flex flex-col",
28842
28957
  children: [
28843
- /* @__PURE__ */ jsxs8("div", {
28958
+ /* @__PURE__ */ jsxs10("div", {
28844
28959
  className: "fontbrand font-bold text-lg flex flex-row items-center gap-1",
28845
28960
  children: [
28846
28961
  title,
@@ -28890,7 +29005,7 @@ var CompanyPricing = () => {
28890
29005
  }, [formatPrice, totalPrice]);
28891
29006
  const showMinimumMessage = automatorsSelected && creatorsPrice + automatorsPrice < 100;
28892
29007
  const showEnterpriseMessage = totalPrice >= 500;
28893
- return /* @__PURE__ */ jsxs8(Container, {
29008
+ return /* @__PURE__ */ jsxs10(Container, {
28894
29009
  children: [
28895
29010
  /* @__PURE__ */ jsx49(Audience, {
28896
29011
  children: "For collaborations and companies of 4+ people"
@@ -28933,14 +29048,14 @@ var CompanyPricing = () => {
28933
29048
  transition: automatorsSelected ? "grid-template-rows 150ms ease-out, opacity 150ms ease-out 75ms" : "opacity 150ms ease-out, grid-template-rows 150ms ease-out 75ms"
28934
29049
  },
28935
29050
  inert: !automatorsSelected,
28936
- children: /* @__PURE__ */ jsxs8("div", {
29051
+ children: /* @__PURE__ */ jsxs10("div", {
28937
29052
  className: "overflow-hidden",
28938
29053
  children: [
28939
29054
  /* @__PURE__ */ jsx49("p", {
28940
29055
  className: "text-sm text-muted fontbrand pt-3 pb-1",
28941
29056
  children: "Intended for companies launching applications and systems; such as video editors, prompt-to-video apps, embedding the Remotion Player, or any other automated video creation. A $100/mo Minimum Spend applies. Developers working on automation projects do not require a Seat."
28942
29057
  }),
28943
- /* @__PURE__ */ jsxs8("div", {
29058
+ /* @__PURE__ */ jsxs10("div", {
28944
29059
  className: "flex flex-row items-center gap-3 sm:gap-4 w-full pt-3 pb-1",
28945
29060
  children: [
28946
29061
  /* @__PURE__ */ jsx49("div", {
@@ -28954,14 +29069,14 @@ var CompanyPricing = () => {
28954
29069
  "aria-label": "Number of renders"
28955
29070
  })
28956
29071
  }),
28957
- /* @__PURE__ */ jsxs8("div", {
29072
+ /* @__PURE__ */ jsxs10("div", {
28958
29073
  className: "fontbrand shrink-0 whitespace-nowrap w-[135px] sm:w-[150px] text-right tabular-nums",
28959
29074
  children: [
28960
29075
  new Intl.NumberFormat("en-US").format(cloudRenders),
28961
29076
  " Renders"
28962
29077
  ]
28963
29078
  }),
28964
- /* @__PURE__ */ jsxs8("div", {
29079
+ /* @__PURE__ */ jsxs10("div", {
28965
29080
  className: "fontbrand font-bold min-w-[60px] text-right shrink-0 whitespace-nowrap tabular-nums",
28966
29081
  children: [
28967
29082
  "$",
@@ -28990,14 +29105,14 @@ var CompanyPricing = () => {
28990
29105
  transition: creatorsSelected ? "grid-template-rows 150ms ease-out, opacity 150ms ease-out 75ms" : "opacity 150ms ease-out, grid-template-rows 150ms ease-out 75ms"
28991
29106
  },
28992
29107
  inert: !creatorsSelected,
28993
- children: /* @__PURE__ */ jsxs8("div", {
29108
+ children: /* @__PURE__ */ jsxs10("div", {
28994
29109
  className: "overflow-hidden",
28995
29110
  children: [
28996
29111
  /* @__PURE__ */ jsx49("p", {
28997
29112
  className: "text-sm text-muted fontbrand pt-3 pb-1",
28998
29113
  children: "Intended for low volume video creations through coding and prompting, and building motion design systems in a local environment. Get 1 Seat per user."
28999
29114
  }),
29000
- /* @__PURE__ */ jsxs8("div", {
29115
+ /* @__PURE__ */ jsxs10("div", {
29001
29116
  className: "flex flex-row items-center gap-3 sm:gap-4 w-full pt-3 pb-1",
29002
29117
  children: [
29003
29118
  /* @__PURE__ */ jsx49("div", {
@@ -29010,7 +29125,7 @@ var CompanyPricing = () => {
29010
29125
  "aria-label": "Number of seats"
29011
29126
  })
29012
29127
  }),
29013
- /* @__PURE__ */ jsxs8("div", {
29128
+ /* @__PURE__ */ jsxs10("div", {
29014
29129
  className: "fontbrand shrink-0 whitespace-nowrap w-[135px] sm:w-[150px] text-center tabular-nums",
29015
29130
  children: [
29016
29131
  devSeatCount,
@@ -29018,7 +29133,7 @@ var CompanyPricing = () => {
29018
29133
  devSeatCount === 1 ? "Seat" : "Seats"
29019
29134
  ]
29020
29135
  }),
29021
- /* @__PURE__ */ jsxs8("div", {
29136
+ /* @__PURE__ */ jsxs10("div", {
29022
29137
  className: "fontbrand font-bold min-w-[60px] text-right shrink-0 whitespace-nowrap tabular-nums",
29023
29138
  children: [
29024
29139
  "$",
@@ -29035,14 +29150,14 @@ var CompanyPricing = () => {
29035
29150
  /* @__PURE__ */ jsx49("div", {
29036
29151
  style: { height: 14 }
29037
29152
  }),
29038
- /* @__PURE__ */ jsxs8("div", {
29153
+ /* @__PURE__ */ jsxs10("div", {
29039
29154
  className: "flex flex-row items-baseline justify-end gap-2",
29040
29155
  children: [
29041
29156
  /* @__PURE__ */ jsx49("div", {
29042
29157
  className: "fontbrand text-muted text-sm",
29043
29158
  children: "Total"
29044
29159
  }),
29045
- /* @__PURE__ */ jsxs8(PriceTag, {
29160
+ /* @__PURE__ */ jsxs10(PriceTag, {
29046
29161
  children: [
29047
29162
  totalPriceString,
29048
29163
  "/month"
@@ -29050,7 +29165,7 @@ var CompanyPricing = () => {
29050
29165
  })
29051
29166
  ]
29052
29167
  }),
29053
- /* @__PURE__ */ jsxs8("div", {
29168
+ /* @__PURE__ */ jsxs10("div", {
29054
29169
  className: "flex flex-col items-end",
29055
29170
  children: [
29056
29171
  /* @__PURE__ */ jsx49(BottomInfo, {
@@ -29058,7 +29173,7 @@ var CompanyPricing = () => {
29058
29173
  className: "opacity-0 data-[visible=true]:opacity-100 transition-opacity mt-1",
29059
29174
  children: "The minimum is $100 per month for Remotion for Automators"
29060
29175
  }),
29061
- /* @__PURE__ */ jsxs8(BottomInfo, {
29176
+ /* @__PURE__ */ jsxs10(BottomInfo, {
29062
29177
  "data-visible": showEnterpriseMessage,
29063
29178
  className: "opacity-0 data-[visible=true]:opacity-100 transition-opacity mt-1",
29064
29179
  children: [
@@ -29084,7 +29199,7 @@ var CompanyPricing = () => {
29084
29199
  ...textUnitWrapper,
29085
29200
  alignItems: "flex-end"
29086
29201
  },
29087
- children: /* @__PURE__ */ jsxs8("a", {
29202
+ children: /* @__PURE__ */ jsxs10("a", {
29088
29203
  href: "https://remotion.pro/dashboard",
29089
29204
  className: "font-brand text-brand flex flex-row items-center gap-1 no-underline",
29090
29205
  children: [
@@ -29108,12 +29223,12 @@ var CompanyPricing = () => {
29108
29223
  };
29109
29224
 
29110
29225
  // src/components/homepage/Pricing.tsx
29111
- import { jsx as jsx50, jsxs as jsxs9 } from "react/jsx-runtime";
29226
+ import { jsx as jsx50, jsxs as jsxs11 } from "react/jsx-runtime";
29112
29227
  var Pricing = ({
29113
29228
  faqHref = "/docs/license/faq",
29114
29229
  faqLabel = "License FAQ",
29115
29230
  licenseHref = "https://github.com/remotion-dev/remotion/blob/main/LICENSE.md",
29116
- termsHref = "https://www.remotion.pro/terms"
29231
+ termsHref = "/docs/license/terms"
29117
29232
  }) => {
29118
29233
  const faqLinkTarget = useMemo53(() => {
29119
29234
  return faqHref.startsWith("http") ? "_blank" : undefined;
@@ -29124,7 +29239,7 @@ var Pricing = ({
29124
29239
  const termsLinkTarget = useMemo53(() => {
29125
29240
  return termsHref.startsWith("http") ? "_blank" : undefined;
29126
29241
  }, [termsHref]);
29127
- return /* @__PURE__ */ jsxs9("div", {
29242
+ return /* @__PURE__ */ jsxs11("div", {
29128
29243
  style: {
29129
29244
  display: "flex",
29130
29245
  flexDirection: "column",
@@ -29140,7 +29255,7 @@ var Pricing = ({
29140
29255
  justifyContent: "center",
29141
29256
  display: "flex"
29142
29257
  },
29143
- children: /* @__PURE__ */ jsxs9("div", {
29258
+ children: /* @__PURE__ */ jsxs11("div", {
29144
29259
  style: {
29145
29260
  fontFamily: "GTPlanar"
29146
29261
  },
@@ -29191,7 +29306,7 @@ var SectionTitle = ({
29191
29306
  };
29192
29307
 
29193
29308
  // src/components/homepage/AutomationsSection.tsx
29194
- import { jsx as jsx54, jsxs as jsxs10, Fragment as Fragment11 } from "react/jsx-runtime";
29309
+ import { jsx as jsx54, jsxs as jsxs12, Fragment as Fragment12 } from "react/jsx-runtime";
29195
29310
  var appPipeline = [
29196
29311
  {
29197
29312
  step: "01",
@@ -29212,7 +29327,7 @@ var appPipeline = [
29212
29327
  {
29213
29328
  step: "03",
29214
29329
  title: "Preview and render",
29215
- description: /* @__PURE__ */ jsxs10(Fragment11, {
29330
+ description: /* @__PURE__ */ jsxs12(Fragment12, {
29216
29331
  children: [
29217
29332
  "Use the",
29218
29333
  " ",
@@ -29263,7 +29378,7 @@ var Arrow3 = () => /* @__PURE__ */ jsx54("svg", {
29263
29378
  })
29264
29379
  });
29265
29380
  var InlineLink = ({ href, children }) => {
29266
- return /* @__PURE__ */ jsxs10("a", {
29381
+ return /* @__PURE__ */ jsxs12("a", {
29267
29382
  href,
29268
29383
  className: "mt-3 inline-flex flex-row items-center font-brand text-base font-semibold text-text no-underline sm:text-sm",
29269
29384
  children: [
@@ -29277,10 +29392,10 @@ var StudioIllustration = () => {
29277
29392
  return /* @__PURE__ */ jsx54("div", {
29278
29393
  className: illustrationFrame,
29279
29394
  "aria-hidden": "true",
29280
- children: /* @__PURE__ */ jsxs10("div", {
29395
+ children: /* @__PURE__ */ jsxs12("div", {
29281
29396
  className: "relative w-full max-w-[220px] rounded-md bg-pane px-4 py-6 fontbrand",
29282
29397
  children: [
29283
- /* @__PURE__ */ jsxs10("div", {
29398
+ /* @__PURE__ */ jsxs12("div", {
29284
29399
  className: "absolute bottom-5 left-1/2 top-3 flex -translate-x-1/2 flex-col items-center",
29285
29400
  children: [
29286
29401
  /* @__PURE__ */ jsx54("div", {
@@ -29291,10 +29406,10 @@ var StudioIllustration = () => {
29291
29406
  })
29292
29407
  ]
29293
29408
  }),
29294
- /* @__PURE__ */ jsxs10("div", {
29409
+ /* @__PURE__ */ jsxs12("div", {
29295
29410
  className: "space-y-4",
29296
29411
  children: [
29297
- /* @__PURE__ */ jsxs10("div", {
29412
+ /* @__PURE__ */ jsxs12("div", {
29298
29413
  className: "grid grid-cols-[28px_1fr] items-center gap-3",
29299
29414
  children: [
29300
29415
  /* @__PURE__ */ jsx54("div", {
@@ -29305,7 +29420,7 @@ var StudioIllustration = () => {
29305
29420
  })
29306
29421
  ]
29307
29422
  }),
29308
- /* @__PURE__ */ jsxs10("div", {
29423
+ /* @__PURE__ */ jsxs12("div", {
29309
29424
  className: "grid grid-cols-[28px_1fr] items-center gap-3",
29310
29425
  children: [
29311
29426
  /* @__PURE__ */ jsx54("div", {
@@ -29316,7 +29431,7 @@ var StudioIllustration = () => {
29316
29431
  })
29317
29432
  ]
29318
29433
  }),
29319
- /* @__PURE__ */ jsxs10("div", {
29434
+ /* @__PURE__ */ jsxs12("div", {
29320
29435
  className: "grid grid-cols-[28px_1fr] items-center gap-3",
29321
29436
  children: [
29322
29437
  /* @__PURE__ */ jsx54("div", {
@@ -29337,7 +29452,7 @@ var PropsIllustration = () => {
29337
29452
  return /* @__PURE__ */ jsx54("div", {
29338
29453
  className: illustrationFrame,
29339
29454
  "aria-hidden": "true",
29340
- children: /* @__PURE__ */ jsxs10("div", {
29455
+ children: /* @__PURE__ */ jsxs12("div", {
29341
29456
  className: "flex h-[124px] w-full max-w-[240px] flex-col justify-center whitespace-nowrap rounded-md bg-pane p-4 text-left font-mono text-base leading-6 text-text sm:text-sm sm:leading-5",
29342
29457
  children: [
29343
29458
  /* @__PURE__ */ jsx54("div", {
@@ -29368,12 +29483,12 @@ var PreviewIllustration = () => {
29368
29483
  return /* @__PURE__ */ jsx54("div", {
29369
29484
  className: illustrationFrame,
29370
29485
  "aria-hidden": "true",
29371
- children: /* @__PURE__ */ jsxs10("div", {
29486
+ children: /* @__PURE__ */ jsxs12("div", {
29372
29487
  className: "w-full max-w-[240px] rounded-md border border-solid border-muted bg-card-bg p-2 fontbrand",
29373
29488
  children: [
29374
29489
  /* @__PURE__ */ jsx54("div", {
29375
29490
  className: "relative flex h-[92px] items-center justify-center rounded-sm border border-solid border-muted bg-pane text-brand",
29376
- children: /* @__PURE__ */ jsxs10("svg", {
29491
+ children: /* @__PURE__ */ jsxs12("svg", {
29377
29492
  className: "h-14 w-14 text-brand",
29378
29493
  viewBox: "-11.5 -10.23174 23 20.46348",
29379
29494
  fill: "none",
@@ -29413,7 +29528,7 @@ var PreviewIllustration = () => {
29413
29528
  ]
29414
29529
  })
29415
29530
  }),
29416
- /* @__PURE__ */ jsxs10("div", {
29531
+ /* @__PURE__ */ jsxs12("div", {
29417
29532
  className: "mt-2 flex items-center gap-2",
29418
29533
  children: [
29419
29534
  /* @__PURE__ */ jsx54("div", {
@@ -29462,7 +29577,7 @@ var PipelineIllustration = ({ kind }) => {
29462
29577
  return /* @__PURE__ */ jsx54(RenderIllustration, {});
29463
29578
  };
29464
29579
  var AutomationsSection = () => {
29465
- return /* @__PURE__ */ jsxs10("div", {
29580
+ return /* @__PURE__ */ jsxs12("div", {
29466
29581
  children: [
29467
29582
  /* @__PURE__ */ jsx54(SectionTitle, {
29468
29583
  children: "Create video apps and automations"
@@ -29475,13 +29590,13 @@ var AutomationsSection = () => {
29475
29590
  className: "py-4",
29476
29591
  children: /* @__PURE__ */ jsx54("dl", {
29477
29592
  className: "grid grid-cols-1 justify-items-stretch gap-5 lg:grid-cols-3 lg:justify-items-center lg:gap-0",
29478
- children: appPipeline.map((item) => /* @__PURE__ */ jsxs10("div", {
29593
+ children: appPipeline.map((item) => /* @__PURE__ */ jsxs12("div", {
29479
29594
  className: "flex w-full flex-col rounded-lg border border-solid border-text/10 bg-card-bg px-4 py-5 text-left sm:px-5 lg:max-w-[300px] lg:rounded-none lg:border-y-0 lg:border-r-0 lg:border-l lg:bg-transparent lg:px-6 lg:py-0 lg:first:border-l-0",
29480
29595
  children: [
29481
29596
  /* @__PURE__ */ jsx54(PipelineIllustration, {
29482
29597
  kind: item.illustration
29483
29598
  }),
29484
- /* @__PURE__ */ jsxs10("div", {
29599
+ /* @__PURE__ */ jsxs12("div", {
29485
29600
  className: "mb-2 flex items-center gap-2.5",
29486
29601
  children: [
29487
29602
  /* @__PURE__ */ jsx54("div", {
@@ -29506,7 +29621,7 @@ var AutomationsSection = () => {
29506
29621
  }, item.step))
29507
29622
  })
29508
29623
  }),
29509
- /* @__PURE__ */ jsxs10("div", {
29624
+ /* @__PURE__ */ jsxs12("div", {
29510
29625
  className: "mt-8 flex flex-wrap justify-center gap-x-5 gap-y-2 fontbrand text-base text-muted sm:text-sm",
29511
29626
  children: [
29512
29627
  /* @__PURE__ */ jsx54("span", {
@@ -29527,7 +29642,7 @@ var AutomationsSection_default = AutomationsSection;
29527
29642
 
29528
29643
  // src/components/homepage/BackgroundAnimation.tsx
29529
29644
  import { useEffect as useEffect40 } from "react";
29530
- import { jsx as jsx56, jsxs as jsxs11 } from "react/jsx-runtime";
29645
+ import { jsx as jsx56, jsxs as jsxs13 } from "react/jsx-runtime";
29531
29646
  "use client";
29532
29647
  var rx = 0.2;
29533
29648
  var ry = 0.45;
@@ -29559,7 +29674,7 @@ var BackgroundAnimation = () => {
29559
29674
  }, [css]);
29560
29675
  return /* @__PURE__ */ jsx56("div", {
29561
29676
  className: " w-full h-full min-w-0 m-auto lg:relative lg:min-w-[700px] lg:max-w-[1200px] lg:ml-auto lg:left-auto pointer-events-none",
29562
- children: /* @__PURE__ */ jsxs11("svg", {
29677
+ children: /* @__PURE__ */ jsxs13("svg", {
29563
29678
  className: "translate-y-[-30%] lg:translate-y-[-50%]",
29564
29679
  viewBox: "0 0 1 1",
29565
29680
  style: {
@@ -29614,7 +29729,7 @@ var BackgroundAnimation = () => {
29614
29729
  };
29615
29730
 
29616
29731
  // src/components/homepage/CommunityStatsItems.tsx
29617
- import { jsx as jsx57, jsxs as jsxs12 } from "react/jsx-runtime";
29732
+ import { jsx as jsx57, jsxs as jsxs14 } from "react/jsx-runtime";
29618
29733
  var StatItemContent = ({
29619
29734
  content,
29620
29735
  width,
@@ -29647,10 +29762,10 @@ var Pill = ({ children, className }) => {
29647
29762
  });
29648
29763
  };
29649
29764
  var InstallsPerMonth = () => {
29650
- return /* @__PURE__ */ jsxs12(Pill, {
29765
+ return /* @__PURE__ */ jsxs14(Pill, {
29651
29766
  className: "w-[30%] flex-col",
29652
29767
  children: [
29653
- /* @__PURE__ */ jsxs12("div", {
29768
+ /* @__PURE__ */ jsxs14("div", {
29654
29769
  style: {
29655
29770
  display: "flex",
29656
29771
  alignItems: "center",
@@ -29658,7 +29773,7 @@ var InstallsPerMonth = () => {
29658
29773
  },
29659
29774
  children: [
29660
29775
  /* @__PURE__ */ jsx57(StatItemContent, {
29661
- content: "4M+",
29776
+ content: "5M+",
29662
29777
  width: "100px",
29663
29778
  fontSize: "2.5rem",
29664
29779
  fontWeight: "bold"
@@ -29689,10 +29804,10 @@ var InstallsPerMonth = () => {
29689
29804
  });
29690
29805
  };
29691
29806
  var PagesOfDocs = () => {
29692
- return /* @__PURE__ */ jsxs12(Pill, {
29807
+ return /* @__PURE__ */ jsxs14(Pill, {
29693
29808
  className: "flex-col",
29694
29809
  children: [
29695
- /* @__PURE__ */ jsxs12("div", {
29810
+ /* @__PURE__ */ jsxs14("div", {
29696
29811
  style: { display: "flex", alignItems: "center", gap: 8 },
29697
29812
  children: [
29698
29813
  /* @__PURE__ */ jsx57(StatItemContent, {
@@ -29726,7 +29841,7 @@ var PagesOfDocs = () => {
29726
29841
  ]
29727
29842
  });
29728
29843
  };
29729
- var TemplatesAndExamples = () => /* @__PURE__ */ jsxs12(Pill, {
29844
+ var TemplatesAndExamples = () => /* @__PURE__ */ jsxs14(Pill, {
29730
29845
  className: "w-[30%] flex items-center flex-row",
29731
29846
  children: [
29732
29847
  /* @__PURE__ */ jsx57(StatItemContent, {
@@ -29744,10 +29859,10 @@ var TemplatesAndExamples = () => /* @__PURE__ */ jsxs12(Pill, {
29744
29859
  ]
29745
29860
  });
29746
29861
  var GitHubStars = () => {
29747
- return /* @__PURE__ */ jsxs12(Pill, {
29862
+ return /* @__PURE__ */ jsxs14(Pill, {
29748
29863
  className: "w-[30%] flex-col",
29749
29864
  children: [
29750
- /* @__PURE__ */ jsxs12("div", {
29865
+ /* @__PURE__ */ jsxs14("div", {
29751
29866
  style: { display: "flex", alignItems: "center" },
29752
29867
  children: [
29753
29868
  /* @__PURE__ */ jsx57(StatItemContent, {
@@ -29784,7 +29899,7 @@ var GitHubStars = () => {
29784
29899
  var DiscordMembers = () => {
29785
29900
  return /* @__PURE__ */ jsx57(Pill, {
29786
29901
  className: "w-[30%]",
29787
- children: /* @__PURE__ */ jsxs12("div", {
29902
+ children: /* @__PURE__ */ jsxs14("div", {
29788
29903
  style: {
29789
29904
  width: "80%",
29790
29905
  display: "flex",
@@ -29792,7 +29907,7 @@ var DiscordMembers = () => {
29792
29907
  justifyContent: "center"
29793
29908
  },
29794
29909
  children: [
29795
- /* @__PURE__ */ jsxs12("div", {
29910
+ /* @__PURE__ */ jsxs14("div", {
29796
29911
  style: {
29797
29912
  display: "flex",
29798
29913
  flexDirection: "column",
@@ -29841,7 +29956,7 @@ var DiscordMembers = () => {
29841
29956
  var Contributors = () => {
29842
29957
  return /* @__PURE__ */ jsx57(Pill, {
29843
29958
  className: "w-[30%]",
29844
- children: /* @__PURE__ */ jsxs12("div", {
29959
+ children: /* @__PURE__ */ jsxs14("div", {
29845
29960
  style: { display: "flex", justifyContent: "center" },
29846
29961
  children: [
29847
29962
  /* @__PURE__ */ jsx57("div", {
@@ -29861,7 +29976,7 @@ var Contributors = () => {
29861
29976
  width: "65px"
29862
29977
  })
29863
29978
  }),
29864
- /* @__PURE__ */ jsxs12("div", {
29979
+ /* @__PURE__ */ jsxs14("div", {
29865
29980
  style: {
29866
29981
  display: "flex",
29867
29982
  flexDirection: "column",
@@ -29889,14 +30004,14 @@ var Contributors = () => {
29889
30004
  };
29890
30005
 
29891
30006
  // src/components/homepage/CommunityStats.tsx
29892
- import { jsx as jsx58, jsxs as jsxs13 } from "react/jsx-runtime";
30007
+ import { jsx as jsx58, jsxs as jsxs15 } from "react/jsx-runtime";
29893
30008
  var SectionLink = ({ href, children }) => /* @__PURE__ */ jsx58("a", {
29894
30009
  target: "_blank",
29895
30010
  href,
29896
30011
  className: "no-underline text-inherit contents",
29897
30012
  children
29898
30013
  });
29899
- var CommunityStats = () => /* @__PURE__ */ jsxs13("div", {
30014
+ var CommunityStats = () => /* @__PURE__ */ jsxs15("div", {
29900
30015
  className: "m-auto max-w-[700px] text-center",
29901
30016
  children: [
29902
30017
  /* @__PURE__ */ jsx58(SectionTitle, {
@@ -29906,7 +30021,7 @@ var CommunityStats = () => /* @__PURE__ */ jsxs13("div", {
29906
30021
  className: "fontbrand text-center mb-10 -mt-4",
29907
30022
  children: "Join a thriving community of developers."
29908
30023
  }),
29909
- /* @__PURE__ */ jsxs13("div", {
30024
+ /* @__PURE__ */ jsxs15("div", {
29910
30025
  className: "flex flex-wrap justify-between gap-4 w-full items-center",
29911
30026
  children: [
29912
30027
  /* @__PURE__ */ jsx58(SectionLink, {
@@ -29941,8 +30056,8 @@ var CommunityStats_default = CommunityStats;
29941
30056
 
29942
30057
  // ../player/dist/esm/index.mjs
29943
30058
  import { createContext as createContext32 } from "react";
29944
- import { jsx as jsx59, jsxs as jsxs14 } from "react/jsx-runtime";
29945
- import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment12 } from "react/jsx-runtime";
30059
+ import { jsx as jsx59, jsxs as jsxs16 } from "react/jsx-runtime";
30060
+ import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment13 } from "react/jsx-runtime";
29946
30061
  import React57 from "react";
29947
30062
  import { useContext as useContext210, useEffect as useEffect41, useState as useState40 } from "react";
29948
30063
  import { useContext as useContext46, useLayoutEffect as useLayoutEffect18 } from "react";
@@ -29986,7 +30101,7 @@ import { jsx as jsx74, jsxs as jsxs33 } from "react/jsx-runtime";
29986
30101
  import { jsx as jsx84, jsxs as jsxs43 } from "react/jsx-runtime";
29987
30102
  import { useCallback as useCallback52, useEffect as useEffect92, useMemo as useMemo55, useState as useState82 } from "react";
29988
30103
  import { useEffect as useEffect83, useRef as useRef62, useState as useState72 } from "react";
29989
- import { jsx as jsx94, jsxs as jsxs53 } from "react/jsx-runtime";
30104
+ import { jsx as jsx94, jsxs as jsxs52 } from "react/jsx-runtime";
29990
30105
  import { useCallback as useCallback62, useEffect as useEffect102, useMemo as useMemo62, useRef as useRef72, useState as useState92 } from "react";
29991
30106
  import { jsx as jsx104, jsxs as jsxs62 } from "react/jsx-runtime";
29992
30107
  import { useMemo as useMemo72 } from "react";
@@ -29995,7 +30110,7 @@ import { useMemo as useMemo82 } from "react";
29995
30110
  import { jsx as jsx114, jsxs as jsxs82, Fragment as Fragment23 } from "react/jsx-runtime";
29996
30111
  import { useCallback as useCallback92, useMemo as useMemo112 } from "react";
29997
30112
  import { useCallback as useCallback82, useMemo as useMemo102, useRef as useRef92 } from "react";
29998
- import { jsx as jsx124, jsxs as jsxs92, Fragment as Fragment32 } from "react/jsx-runtime";
30113
+ import { jsx as jsx124, jsxs as jsxs92, Fragment as Fragment33 } from "react/jsx-runtime";
29999
30114
  import { useCallback as useCallback112, useMemo as useMemo132, useRef as useRef112, useState as useState122 } from "react";
30000
30115
  import { jsx as jsx133 } from "react/jsx-runtime";
30001
30116
 
@@ -31542,7 +31657,7 @@ var PlayIcon = () => {
31542
31657
  });
31543
31658
  };
31544
31659
  var PauseIcon = () => {
31545
- return /* @__PURE__ */ jsxs14("svg", {
31660
+ return /* @__PURE__ */ jsxs16("svg", {
31546
31661
  viewBox: "0 0 100 100",
31547
31662
  width: ICON_SIZE2,
31548
31663
  height: ICON_SIZE2,
@@ -31576,7 +31691,7 @@ var FullscreenIcon = ({
31576
31691
  const out = isFullscreen ? 0 : strokeWidth2 / 2;
31577
31692
  const middleInset = isFullscreen ? strokeWidth2 * 1.6 : strokeWidth2 / 2;
31578
31693
  const inset = isFullscreen ? strokeWidth2 * 1.6 : strokeWidth2 * 2;
31579
- return /* @__PURE__ */ jsxs14("svg", {
31694
+ return /* @__PURE__ */ jsxs16("svg", {
31580
31695
  viewBox: `0 0 ${viewSize} ${viewSize}`,
31581
31696
  height: fullscreenIconSize,
31582
31697
  width: fullscreenIconSize,
@@ -31664,7 +31779,7 @@ var studioStyle = {
31664
31779
  };
31665
31780
  var BufferingIndicator = ({ type }) => {
31666
31781
  const style = type === "player" ? playerStyle : studioStyle;
31667
- return /* @__PURE__ */ jsxs24(Fragment12, {
31782
+ return /* @__PURE__ */ jsxs24(Fragment13, {
31668
31783
  children: [
31669
31784
  /* @__PURE__ */ jsx214("style", {
31670
31785
  type: "text/css",
@@ -33149,7 +33264,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
33149
33264
  backgroundColor: hovered || isFocused ? "#eee" : "transparent"
33150
33265
  };
33151
33266
  }, [hovered, isFocused]);
33152
- return /* @__PURE__ */ jsxs53("div", {
33267
+ return /* @__PURE__ */ jsxs52("div", {
33153
33268
  onPointerEnter: onMouseEnter,
33154
33269
  onPointerLeave: onMouseLeave,
33155
33270
  tabIndex: 0,
@@ -33276,13 +33391,13 @@ var PlaybackrateControl = ({ playbackRates, canvasSize }) => {
33276
33391
  }, [setIsComponentVisible]);
33277
33392
  return /* @__PURE__ */ jsx94("div", {
33278
33393
  ref,
33279
- children: /* @__PURE__ */ jsxs53("button", {
33394
+ children: /* @__PURE__ */ jsxs52("button", {
33280
33395
  type: "button",
33281
33396
  "aria-label": "Change playback rate",
33282
33397
  style: button,
33283
33398
  onClick,
33284
33399
  children: [
33285
- /* @__PURE__ */ jsxs53("div", {
33400
+ /* @__PURE__ */ jsxs52("div", {
33286
33401
  style: label2,
33287
33402
  children: [
33288
33403
  playbackRate,
@@ -34265,7 +34380,7 @@ var PlayerUI = ({
34265
34380
  showPosterWhenBufferingAndPaused && showBufferIndicator && !player.isPlaying()
34266
34381
  ].some(Boolean);
34267
34382
  const { left, top, width, height, ...outerWithoutScale } = outer;
34268
- const content = /* @__PURE__ */ jsxs92(Fragment32, {
34383
+ const content = /* @__PURE__ */ jsxs92(Fragment33, {
34269
34384
  children: [
34270
34385
  /* @__PURE__ */ jsxs92("div", {
34271
34386
  style: outer,
@@ -36984,6 +37099,7 @@ var makeStableFramePool = () => {
36984
37099
  if (!context) {
36985
37100
  throw new Error("Could not create canvas context");
36986
37101
  }
37102
+ context.clearRect(0, 0, stableCanvas.width, stableCanvas.height);
36987
37103
  context.drawImage(canvas, 0, 0);
36988
37104
  let released = false;
36989
37105
  const stableFrame = {
@@ -37670,6 +37786,9 @@ class MediaPlayer {
37670
37786
  }
37671
37787
  const canDecode = await videoTrack.canDecode();
37672
37788
  if (!canDecode) {
37789
+ if (videoTrack.codec === "prores") {
37790
+ return { type: "cannot-decode-prores" };
37791
+ }
37673
37792
  return { type: "cannot-decode" };
37674
37793
  }
37675
37794
  if (this.isDisposalError()) {
@@ -38379,6 +38498,9 @@ var AudioForPreviewAssertedShowing = ({
38379
38498
  handleError(new Error(`No video or audio tracks found for ${preloadedSrc}.`), `No video or audio tracks found for ${preloadedSrc}, falling back to <Html5Audio>`);
38380
38499
  return;
38381
38500
  }
38501
+ if (result.type === "cannot-decode-prores") {
38502
+ throw new Error(`Encountered ProRes media for ${preloadedSrc}. But this should never happen, since you used the <Audio> tag. Please report this as a bug.`);
38503
+ }
38382
38504
  if (result.type === "success") {
38383
38505
  setMediaPlayerReady(true);
38384
38506
  setMediaDurationInSeconds(result.durationInSeconds);
@@ -39686,6 +39808,9 @@ var getSinks = async (src, logLevel, credentials, requestInit) => {
39686
39808
  }
39687
39809
  const canDecode = await videoTrack.canDecode();
39688
39810
  if (!canDecode) {
39811
+ if (videoTrack.codec === "prores") {
39812
+ return "cannot-decode-prores";
39813
+ }
39689
39814
  return "cannot-decode";
39690
39815
  }
39691
39816
  const sampleSink = new VideoSampleSink(videoTrack);
@@ -39937,6 +40062,12 @@ var extractFrameInternal = async ({
39937
40062
  if (video === "cannot-decode") {
39938
40063
  return { type: "cannot-decode", durationInSeconds: mediaDurationInSeconds };
39939
40064
  }
40065
+ if (video === "cannot-decode-prores") {
40066
+ return {
40067
+ type: "cannot-decode-prores",
40068
+ durationInSeconds: mediaDurationInSeconds
40069
+ };
40070
+ }
39940
40071
  if (video === "unknown-container-format") {
39941
40072
  return { type: "unknown-container-format" };
39942
40073
  }
@@ -40088,6 +40219,12 @@ var extractFrameAndAudio = async ({
40088
40219
  durationInSeconds: video.durationInSeconds
40089
40220
  };
40090
40221
  }
40222
+ if (video?.type === "cannot-decode-prores") {
40223
+ return {
40224
+ type: "cannot-decode-prores",
40225
+ durationInSeconds: video.durationInSeconds
40226
+ };
40227
+ }
40091
40228
  if (video?.type === "unknown-container-format") {
40092
40229
  return { type: "unknown-container-format" };
40093
40230
  }
@@ -40173,6 +40310,15 @@ var addBroadcastChannelListener = () => {
40173
40310
  window.remotion_broadcastChannel.postMessage(cannotDecodeResponse);
40174
40311
  return;
40175
40312
  }
40313
+ if (result.type === "cannot-decode-prores") {
40314
+ const cannotDecodeProresResponse = {
40315
+ type: "response-cannot-decode-prores",
40316
+ id: data.id,
40317
+ durationInSeconds: result.durationInSeconds
40318
+ };
40319
+ window.remotion_broadcastChannel.postMessage(cannotDecodeProresResponse);
40320
+ return;
40321
+ }
40176
40322
  if (result.type === "cannot-decode-alpha") {
40177
40323
  const cannotDecodeAlphaResponse = {
40178
40324
  type: "response-cannot-decode-alpha",
@@ -40317,6 +40463,14 @@ var extractFrameViaBroadcastChannel = async ({
40317
40463
  window.remotion_broadcastChannel.removeEventListener("message", onMessage);
40318
40464
  return;
40319
40465
  }
40466
+ if (data.type === "response-cannot-decode-prores") {
40467
+ resolve({
40468
+ type: "cannot-decode-prores",
40469
+ durationInSeconds: data.durationInSeconds
40470
+ });
40471
+ window.remotion_broadcastChannel.removeEventListener("message", onMessage);
40472
+ return;
40473
+ }
40320
40474
  if (data.type === "response-network-error") {
40321
40475
  resolve({ type: "network-error" });
40322
40476
  window.remotion_broadcastChannel.removeEventListener("message", onMessage);
@@ -40487,6 +40641,9 @@ var AudioForRendering2 = ({
40487
40641
  if (result.type === "cannot-decode-alpha") {
40488
40642
  throw new Error(`Cannot decode alpha component for ${src}, and 'disallowFallbackToHtml5Audio' was set. But this should never happen, since you used the <Audio> tag. Please report this as a bug.`);
40489
40643
  }
40644
+ if (result.type === "cannot-decode-prores") {
40645
+ throw new Error(`Encountered ProRes media for ${src}. But this should never happen, since you used the <Audio> tag. Please report this as a bug.`);
40646
+ }
40490
40647
  if (result.type === "network-error") {
40491
40648
  handleError(new Error(`Network error fetching ${src}.`), new Error(`Cannot render audio "${src}": Network error while fetching the audio (possibly CORS).`), `Network error fetching ${src}, falling back to <Html5Audio>`);
40492
40649
  return;
@@ -40693,6 +40850,17 @@ var Audio2 = Interactive.withSchema({
40693
40850
  schema: audioSchema,
40694
40851
  supportsEffects: false
40695
40852
  });
40853
+ var PRORES_DOCS_URL = "https://www.remotion.dev/docs/videos/prores";
40854
+ var proresDecoderNotEnabledMessage = (src) => {
40855
+ return `Cannot decode "${src}": it is encoded with Apple ProRes, which WebCodecs does not support natively. ` + `ProRes decoding is not enabled by default. Register the ProRes decoder by calling ` + `registerProresDecoder() from "@mediabunny/prores" in your entry point, before registerRoot(). ` + `See ${PRORES_DOCS_URL}. ` + `(This is required to decode a ProRes source for both preview and rendering — it is unrelated to exporting a video as ProRes.)`;
40856
+ };
40857
+
40858
+ class ProResDecoderNotEnabledError extends Error {
40859
+ constructor(src) {
40860
+ super(proresDecoderNotEnabledMessage(src));
40861
+ this.name = "ProResDecoderNotEnabledError";
40862
+ }
40863
+ }
40696
40864
  var cache2 = new Map;
40697
40865
  var cacheVideoFrame = (src, sourceCanvas) => {
40698
40866
  const { width, height } = sourceCanvas;
@@ -40941,6 +41109,9 @@ var VideoForPreviewAssertedShowing = ({
40941
41109
  handleError(new Error(`Cannot decode ${preloadedSrc}.`), `Cannot decode ${preloadedSrc}, falling back to <OffthreadVideo>`);
40942
41110
  return;
40943
41111
  }
41112
+ if (result.type === "cannot-decode-prores") {
41113
+ throw new ProResDecoderNotEnabledError(preloadedSrc);
41114
+ }
40944
41115
  if (result.type === "no-tracks") {
40945
41116
  handleError(new Error(`No video or audio tracks found for ${preloadedSrc}.`), `No video or audio tracks found for ${preloadedSrc}, falling back to <OffthreadVideo>`);
40946
41117
  return;
@@ -40951,6 +41122,10 @@ var VideoForPreviewAssertedShowing = ({
40951
41122
  hasDrawnRealFrameRef.current = true;
40952
41123
  }
40953
41124
  }).catch((error2) => {
41125
+ if (error2 instanceof ProResDecoderNotEnabledError) {
41126
+ onErrorRef.current?.(error2);
41127
+ throw error2;
41128
+ }
40954
41129
  const [action, errorToUse] = callOnErrorAndResolve({
40955
41130
  onError: onErrorRef.current,
40956
41131
  error: error2,
@@ -41248,6 +41423,12 @@ var VideoForRendering2 = ({
41248
41423
  handleError(new Error(`Cannot decode ${src}.`), new Error(`Cannot render video "${src}": The video could not be decoded by the browser.`), `Cannot decode ${src}, falling back to <OffthreadVideo>`, result.durationInSeconds);
41249
41424
  return;
41250
41425
  }
41426
+ if (result.type === "cannot-decode-prores") {
41427
+ const proresError = new ProResDecoderNotEnabledError(src);
41428
+ onError?.(proresError);
41429
+ cancelRender3(proresError);
41430
+ return;
41431
+ }
41251
41432
  if (result.type === "cannot-decode-alpha") {
41252
41433
  handleError(new Error(`Cannot decode alpha component for ${src}.`), new Error(`Cannot render video "${src}": The alpha channel could not be decoded by the browser.`), `Cannot decode alpha component for ${src}, falling back to <OffthreadVideo>`, result.durationInSeconds);
41253
41434
  return;
@@ -41771,7 +41952,7 @@ var getIndexFromPosition = (clientX, clientY) => {
41771
41952
 
41772
41953
  // src/components/homepage/Demo/Switcher.tsx
41773
41954
  import { useCallback as useCallback41 } from "react";
41774
- import { jsx as jsx66, jsxs as jsxs15 } from "react/jsx-runtime";
41955
+ import { jsx as jsx66, jsxs as jsxs17 } from "react/jsx-runtime";
41775
41956
  var Switcher = ({ type, theme, onTap }) => {
41776
41957
  const onPointerDown = useCallback41((e) => {
41777
41958
  e.stopPropagation();
@@ -41796,7 +41977,7 @@ var Switcher = ({ type, theme, onTap }) => {
41796
41977
  alignItems: "center",
41797
41978
  display: "flex"
41798
41979
  },
41799
- children: /* @__PURE__ */ jsxs15("svg", {
41980
+ children: /* @__PURE__ */ jsxs17("svg", {
41800
41981
  style: { height: switcherSize / 2 },
41801
41982
  viewBox: "0 0 320 512",
41802
41983
  children: [
@@ -41814,7 +41995,7 @@ var Switcher = ({ type, theme, onTap }) => {
41814
41995
  };
41815
41996
 
41816
41997
  // src/components/homepage/Demo/Card.tsx
41817
- import { jsx as jsx68, jsxs as jsxs16, Fragment as Fragment13 } from "react/jsx-runtime";
41998
+ import { jsx as jsx68, jsxs as jsxs18, Fragment as Fragment14 } from "react/jsx-runtime";
41818
41999
  var arePositionsEqual = (a2, b2) => {
41819
42000
  return a2.every((pos, i) => {
41820
42001
  return pos.x === b2[i].x && pos.y === b2[i].y;
@@ -41991,7 +42172,7 @@ var Card2 = ({
41991
42172
  borderRadius: 13,
41992
42173
  cursor: "grab"
41993
42174
  },
41994
- children: /* @__PURE__ */ jsxs16(AbsoluteFill, {
42175
+ children: /* @__PURE__ */ jsxs18(AbsoluteFill, {
41995
42176
  style: {
41996
42177
  backgroundColor: color,
41997
42178
  borderRadius: 12
@@ -41999,7 +42180,7 @@ var Card2 = ({
41999
42180
  className: "transition-opacity duration-200",
42000
42181
  children: [
42001
42182
  content,
42002
- withSwitcher ? /* @__PURE__ */ jsxs16(Fragment13, {
42183
+ withSwitcher ? /* @__PURE__ */ jsxs18(Fragment14, {
42003
42184
  children: [
42004
42185
  /* @__PURE__ */ jsx68(Switcher, {
42005
42186
  onTap: onClickLeft,
@@ -42019,7 +42200,7 @@ var Card2 = ({
42019
42200
  };
42020
42201
 
42021
42202
  // src/components/homepage/Demo/CurrentCountry.tsx
42022
- import { jsx as jsx69, jsxs as jsxs17 } from "react/jsx-runtime";
42203
+ import { jsx as jsx69, jsxs as jsxs19 } from "react/jsx-runtime";
42023
42204
  var CurrentCountry = ({ theme, countryPaths, countryLabel }) => {
42024
42205
  const { fps } = useVideoConfig();
42025
42206
  const frame = useCurrentFrame();
@@ -42034,7 +42215,7 @@ var CurrentCountry = ({ theme, countryPaths, countryLabel }) => {
42034
42215
  frame,
42035
42216
  delay: 10
42036
42217
  });
42037
- return /* @__PURE__ */ jsxs17(AbsoluteFill, {
42218
+ return /* @__PURE__ */ jsxs19(AbsoluteFill, {
42038
42219
  style: { overflow: "hidden" },
42039
42220
  children: [
42040
42221
  /* @__PURE__ */ jsx69(AbsoluteFill, {
@@ -42052,7 +42233,7 @@ var CurrentCountry = ({ theme, countryPaths, countryLabel }) => {
42052
42233
  })
42053
42234
  })
42054
42235
  }),
42055
- /* @__PURE__ */ jsxs17(AbsoluteFill, {
42236
+ /* @__PURE__ */ jsxs19(AbsoluteFill, {
42056
42237
  style: {
42057
42238
  alignItems: "center",
42058
42239
  justifyContent: "center"
@@ -42341,7 +42522,7 @@ var DisplayedEmoji = ({ emoji }) => {
42341
42522
  };
42342
42523
 
42343
42524
  // src/components/homepage/Demo/EmojiCard.tsx
42344
- import { jsx as jsx75, jsxs as jsxs18, Fragment as Fragment14 } from "react/jsx-runtime";
42525
+ import { jsx as jsx75, jsxs as jsxs20, Fragment as Fragment15 } from "react/jsx-runtime";
42345
42526
  var applyTransforms = ({ ref1, ref2, ref3, transforms }) => {
42346
42527
  ref1.style.transform = `translateX(${transforms[0]}%)`;
42347
42528
  ref2.style.transform = `translateX(${transforms[1]}%)`;
@@ -42437,7 +42618,7 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
42437
42618
  });
42438
42619
  }, []);
42439
42620
  const env = useRemotionEnvironment();
42440
- return /* @__PURE__ */ jsxs18(AbsoluteFill, {
42621
+ return /* @__PURE__ */ jsxs20(AbsoluteFill, {
42441
42622
  style: {
42442
42623
  justifyContent: "center",
42443
42624
  alignItems: "center",
@@ -42469,7 +42650,7 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
42469
42650
  children: /* @__PURE__ */ jsx75(DisplayedEmoji, {
42470
42651
  emoji: emojiIndex
42471
42652
  })
42472
- }) : /* @__PURE__ */ jsxs18(Fragment14, {
42653
+ }) : /* @__PURE__ */ jsxs20(Fragment15, {
42473
42654
  children: [
42474
42655
  /* @__PURE__ */ jsx75("div", {
42475
42656
  ref: ref1,
@@ -42517,7 +42698,7 @@ var Minus = ({ leftOffset, minusSignOpacity }) => {
42517
42698
  };
42518
42699
 
42519
42700
  // src/components/homepage/Demo/DigitWheel.tsx
42520
- import { jsx as jsx78, jsxs as jsxs19 } from "react/jsx-runtime";
42701
+ import { jsx as jsx78, jsxs as jsxs21 } from "react/jsx-runtime";
42521
42702
  var DURATION = 25;
42522
42703
  var items = 10;
42523
42704
  var NUM_WIDTH = 36;
@@ -42561,7 +42742,7 @@ var Wheel = ({ delay: delay2, digits, renderDigit, isLeadingDigit, isNegative })
42561
42742
  const rotation = progresses.map((p, i) => {
42562
42743
  return p * offsets[i];
42563
42744
  }).reduce((a2, b2) => a2 + b2, 0) + rotations[0];
42564
- return /* @__PURE__ */ jsxs19("div", {
42745
+ return /* @__PURE__ */ jsxs21("div", {
42565
42746
  style: {
42566
42747
  position: "relative",
42567
42748
  width: NUM_WIDTH,
@@ -42622,14 +42803,14 @@ var Wheel = ({ delay: delay2, digits, renderDigit, isLeadingDigit, isNegative })
42622
42803
  };
42623
42804
 
42624
42805
  // src/components/homepage/Demo/TemperatureNumber.tsx
42625
- import { jsx as jsx79, jsxs as jsxs20 } from "react/jsx-runtime";
42806
+ import { jsx as jsx79, jsxs as jsxs25 } from "react/jsx-runtime";
42626
42807
  var TemperatureNumber = ({ theme, temperatureInCelsius }) => {
42627
42808
  const temperatureInFahrenheit = temperatureInCelsius * 9 / 5 + 32;
42628
42809
  const celsiusDegree = Math.abs(temperatureInCelsius);
42629
42810
  const fahrenheitDegree = Math.abs(temperatureInFahrenheit);
42630
42811
  const paddedCelsiusDegree = String(celsiusDegree).padStart(fahrenheitDegree.toFixed(0).length, "0").split("");
42631
42812
  const paddedFahrenheitDegree = fahrenheitDegree.toFixed(0).padStart(paddedCelsiusDegree.length, "0").split("");
42632
- return /* @__PURE__ */ jsxs20("div", {
42813
+ return /* @__PURE__ */ jsxs25("div", {
42633
42814
  style: {
42634
42815
  lineHeight: 1.1,
42635
42816
  fontFamily: "GTPlanar",
@@ -42677,13 +42858,13 @@ var TemperatureNumber = ({ theme, temperatureInCelsius }) => {
42677
42858
  };
42678
42859
 
42679
42860
  // src/components/homepage/Demo/Temperature.tsx
42680
- import { jsx as jsx80, jsxs as jsxs21 } from "react/jsx-runtime";
42861
+ import { jsx as jsx80, jsxs as jsxs27 } from "react/jsx-runtime";
42681
42862
  var Temperature = ({ theme, city, temperatureInCelsius }) => {
42682
42863
  if (temperatureInCelsius === null) {
42683
42864
  return null;
42684
42865
  }
42685
42866
  return /* @__PURE__ */ jsx80(AbsoluteFill, {
42686
- children: /* @__PURE__ */ jsxs21(AbsoluteFill, {
42867
+ children: /* @__PURE__ */ jsxs27(AbsoluteFill, {
42687
42868
  style: {
42688
42869
  alignItems: "center",
42689
42870
  justifyContent: "center",
@@ -42691,7 +42872,7 @@ var Temperature = ({ theme, city, temperatureInCelsius }) => {
42691
42872
  paddingRight: 20
42692
42873
  },
42693
42874
  children: [
42694
- /* @__PURE__ */ jsxs21("div", {
42875
+ /* @__PURE__ */ jsxs27("div", {
42695
42876
  style: {
42696
42877
  color: "#0b84f3",
42697
42878
  fontFamily: "GTPlanar",
@@ -42716,7 +42897,7 @@ var Temperature = ({ theme, city, temperatureInCelsius }) => {
42716
42897
 
42717
42898
  // src/components/homepage/Demo/TrendingRepos.tsx
42718
42899
  import { useMemo as useMemo60 } from "react";
42719
- import { jsx as jsx81, jsxs as jsxs25 } from "react/jsx-runtime";
42900
+ import { jsx as jsx81, jsxs as jsxs28 } from "react/jsx-runtime";
42720
42901
  var TrendingRepoItem = ({ repo, theme, number }) => {
42721
42902
  const frame = useCurrentFrame();
42722
42903
  const { fps } = useVideoConfig();
@@ -42738,7 +42919,7 @@ var TrendingRepoItem = ({ repo, theme, number }) => {
42738
42919
  opacity: progress
42739
42920
  };
42740
42921
  }, [progress, theme]);
42741
- return /* @__PURE__ */ jsxs25("div", {
42922
+ return /* @__PURE__ */ jsxs28("div", {
42742
42923
  style: item,
42743
42924
  children: [
42744
42925
  number,
@@ -42769,7 +42950,7 @@ var TrendingRepos = ({ theme, trending }) => {
42769
42950
  paddingLeft: 20,
42770
42951
  paddingRight: 20
42771
42952
  },
42772
- children: /* @__PURE__ */ jsxs25("div", {
42953
+ children: /* @__PURE__ */ jsxs28("div", {
42773
42954
  children: [
42774
42955
  /* @__PURE__ */ jsx81("div", {
42775
42956
  style: {
@@ -42902,7 +43083,7 @@ var Cards = ({
42902
43083
  };
42903
43084
 
42904
43085
  // src/components/homepage/Demo/Comp.tsx
42905
- import { jsx as jsx87, jsxs as jsxs27 } from "react/jsx-runtime";
43086
+ import { jsx as jsx87, jsxs as jsxs29 } from "react/jsx-runtime";
42906
43087
  var getDataAndProps = async () => {
42907
43088
  const location = await fetch("https://utils.remotion.dev/location").then((res) => res.json());
42908
43089
  const trending = await fetch(`https://bugs.remotion.dev/trending?lat=${location.latitude}&lng=${location.longitude}&country=${location.country}`).then((res) => res.json()).then((data) => {
@@ -42963,7 +43144,7 @@ var HomepageVideoComp = ({
42963
43144
  c2.free();
42964
43145
  };
42965
43146
  }, []);
42966
- return /* @__PURE__ */ jsxs27(AbsoluteFill, {
43147
+ return /* @__PURE__ */ jsxs29(AbsoluteFill, {
42967
43148
  style: {
42968
43149
  backgroundColor: theme === "dark" ? "#222" : "#fafafa"
42969
43150
  },
@@ -43029,7 +43210,7 @@ import {
43029
43210
  import { BufferTarget, StreamTarget } from "mediabunny";
43030
43211
 
43031
43212
  // ../core/dist/esm/version.mjs
43032
- var VERSION2 = "4.0.490";
43213
+ var VERSION2 = "4.0.491";
43033
43214
 
43034
43215
  // ../web-renderer/dist/esm/index.mjs
43035
43216
  import { AudioSample, VideoSample } from "mediabunny";
@@ -43585,6 +43766,8 @@ var createAudioSampleSource = ({
43585
43766
  });
43586
43767
  return { audioSampleSource, [Symbol.dispose]: () => audioSampleSource.close() };
43587
43768
  };
43769
+ var nestedHtmlInCanvasSupport = null;
43770
+ var forceDisableHtmlInCanvasForTesting = false;
43588
43771
  var supportsNativeHtmlInCanvas = () => {
43589
43772
  if (typeof document === "undefined") {
43590
43773
  return false;
@@ -43592,6 +43775,121 @@ var supportsNativeHtmlInCanvas = () => {
43592
43775
  const ctx = document.createElement("canvas").getContext("2d");
43593
43776
  return typeof ctx?.drawElementImage === "function";
43594
43777
  };
43778
+ var runNestedHtmlInCanvasProbe = () => {
43779
+ if (!supportsNativeHtmlInCanvas() || !document.body) {
43780
+ return Promise.resolve(false);
43781
+ }
43782
+ const outer = document.createElement("canvas");
43783
+ const inner2 = document.createElement("canvas");
43784
+ const outerTarget = document.createElement("div");
43785
+ const innerTarget = document.createElement("div");
43786
+ const outerCtx = outer.getContext("2d");
43787
+ const innerCtx = inner2.getContext("2d");
43788
+ if (!outerCtx || !innerCtx || typeof outer.requestPaint !== "function" || typeof inner2.requestPaint !== "function") {
43789
+ return Promise.resolve(false);
43790
+ }
43791
+ outer.layoutSubtree = true;
43792
+ inner2.layoutSubtree = true;
43793
+ outer.width = 4;
43794
+ outer.height = 4;
43795
+ inner2.width = 4;
43796
+ inner2.height = 4;
43797
+ Object.assign(outer.style, {
43798
+ display: "block",
43799
+ height: "4px",
43800
+ left: "0",
43801
+ pointerEvents: "none",
43802
+ position: "fixed",
43803
+ top: "0",
43804
+ visibility: "visible",
43805
+ width: "4px",
43806
+ zIndex: "2147483647"
43807
+ });
43808
+ Object.assign(inner2.style, {
43809
+ display: "block",
43810
+ height: "4px",
43811
+ width: "4px"
43812
+ });
43813
+ Object.assign(outerTarget.style, {
43814
+ display: "block",
43815
+ height: "4px",
43816
+ width: "4px"
43817
+ });
43818
+ Object.assign(innerTarget.style, {
43819
+ backgroundColor: "rgb(255, 0, 0)",
43820
+ display: "block",
43821
+ height: "4px",
43822
+ width: "4px"
43823
+ });
43824
+ inner2.appendChild(innerTarget);
43825
+ outerTarget.appendChild(inner2);
43826
+ outer.appendChild(outerTarget);
43827
+ document.body.appendChild(outer);
43828
+ return new Promise((resolve) => {
43829
+ let innerPainted = false;
43830
+ let settled = false;
43831
+ let timeout = null;
43832
+ const settle = (supported) => {
43833
+ if (settled) {
43834
+ return;
43835
+ }
43836
+ settled = true;
43837
+ if (timeout !== null) {
43838
+ window.clearTimeout(timeout);
43839
+ }
43840
+ outer.remove();
43841
+ resolve(supported);
43842
+ };
43843
+ timeout = window.setTimeout(() => settle(false), 1000);
43844
+ inner2.addEventListener("paint", () => {
43845
+ try {
43846
+ innerCtx.reset();
43847
+ const transform = innerCtx.drawElementImage(innerTarget, 0, 0, 4, 4);
43848
+ innerTarget.style.transform = transform.toString();
43849
+ innerPainted = true;
43850
+ requestAnimationFrame(() => outer.requestPaint());
43851
+ } catch {
43852
+ settle(false);
43853
+ }
43854
+ });
43855
+ outer.addEventListener("paint", () => {
43856
+ if (!innerPainted) {
43857
+ return;
43858
+ }
43859
+ try {
43860
+ outerCtx.reset();
43861
+ if (typeof outer.captureElementImage !== "function") {
43862
+ settle(false);
43863
+ return;
43864
+ }
43865
+ const elementImage = outer.captureElementImage(outerTarget);
43866
+ const transform = outerCtx.drawElementImage(elementImage, 0, 0, 4, 4);
43867
+ elementImage.close();
43868
+ outerTarget.style.transform = transform.toString();
43869
+ const pixel = outerCtx.getImageData(2, 2, 1, 1).data;
43870
+ settle(pixel[0] > 200 && pixel[1] < 20 && pixel[2] < 20 && pixel[3] > 200);
43871
+ } catch {
43872
+ settle(false);
43873
+ }
43874
+ });
43875
+ inner2.requestPaint();
43876
+ });
43877
+ };
43878
+ var supportsNestedHtmlInCanvas = () => {
43879
+ if (forceDisableHtmlInCanvasForTesting) {
43880
+ return Promise.resolve(false);
43881
+ }
43882
+ if (!nestedHtmlInCanvasSupport) {
43883
+ nestedHtmlInCanvasSupport = runNestedHtmlInCanvasProbe();
43884
+ }
43885
+ return nestedHtmlInCanvasSupport;
43886
+ };
43887
+ var countLayoutSubtreeCanvases = (element) => {
43888
+ return Array.from(element.querySelectorAll("canvas")).filter((canvas) => canvas.layoutSubtree === true).length;
43889
+ };
43890
+ var containsLayoutSubtreeCanvas = (element) => {
43891
+ return countLayoutSubtreeCanvases(element) > 0;
43892
+ };
43595
43893
  var setupHtmlInCanvas = ({
43596
43894
  wrapper,
43597
43895
  div,
@@ -43633,14 +43931,36 @@ var drawWithHtmlInCanvas = async ({
43633
43931
  htmlInCanvasContext,
43634
43932
  element,
43635
43933
  scaledWidth,
43636
- scaledHeight
43934
+ scaledHeight,
43935
+ waitForRenderReady,
43936
+ useElementImage
43637
43937
  }) => {
43638
43938
  const { ctx, layoutCanvas } = htmlInCanvasContext;
43939
+ if (layoutCanvas.width !== scaledWidth || layoutCanvas.height !== scaledHeight) {
43940
+ layoutCanvas.width = scaledWidth;
43941
+ layoutCanvas.height = scaledHeight;
43942
+ }
43639
43943
  await waitForPaint(layoutCanvas);
43640
- layoutCanvas.width = scaledWidth;
43641
- layoutCanvas.height = scaledHeight;
43944
+ const nestedPaintCycles = useElementImage ? countLayoutSubtreeCanvases(element) * 2 + 1 : 0;
43945
+ for (let i = 0;i < nestedPaintCycles; i++) {
43946
+ await new Promise((resolve) => requestAnimationFrame(() => resolve()));
43947
+ await waitForRenderReady();
43948
+ await waitForPaint(layoutCanvas);
43949
+ }
43642
43950
  ctx.reset();
43643
- ctx.drawElementImage(element, 0, 0, scaledWidth, scaledHeight);
43951
+ if (useElementImage) {
43952
+ if (typeof layoutCanvas.captureElementImage !== "function") {
43953
+ throw new Error("canvas.captureElementImage() is unavailable");
43954
+ }
43955
+ const elementImage = layoutCanvas.captureElementImage(element);
43956
+ try {
43957
+ ctx.drawElementImage(elementImage, 0, 0, scaledWidth, scaledHeight);
43958
+ } finally {
43959
+ elementImage.close();
43960
+ }
43961
+ } else {
43962
+ ctx.drawElementImage(element, 0, 0, scaledWidth, scaledHeight);
43963
+ }
43644
43964
  const offscreen = new OffscreenCanvas(scaledWidth, scaledHeight);
43645
43965
  const offCtx = offscreen.getContext("2d");
43646
43966
  if (!offCtx) {
@@ -43772,7 +44092,7 @@ function createScaffold({
43772
44092
  videoEnabled,
43773
44093
  defaultCodec,
43774
44094
  defaultOutName,
43775
- allowHtmlInCanvas,
44095
+ useHtmlInCanvas,
43776
44096
  pixelDensity
43777
44097
  }) {
43778
44098
  if (!ReactDOM6.createRoot) {
@@ -43799,7 +44119,7 @@ function createScaffold({
43799
44119
  const cleanupCSS = Internals.CSSUtils.injectCSS(Internals.CSSUtils.makeDefaultPreviewCSS(`.${scaffoldClassName}`, "white"));
43800
44120
  wrapper.appendChild(div);
43801
44121
  document.body.appendChild(wrapper);
43802
- const htmlInCanvasContext = allowHtmlInCanvas ? setupHtmlInCanvas({ wrapper, div, width: width2, height: height2 }) : null;
44122
+ const htmlInCanvasContext = useHtmlInCanvas ? setupHtmlInCanvas({ wrapper, div, width: width2, height: height2 }) : null;
43803
44123
  const errorHolder = { error: null };
43804
44124
  const root = ReactDOM6.createRoot(div, {
43805
44125
  onUncaughtError: (err, errorInfo) => {
@@ -44801,6 +45121,15 @@ var filterRequiresPrecompositing = (filter) => {
44801
45121
  }
44802
45122
  return null;
44803
45123
  };
45124
+ var snapshotTransformStyle = (computedStyle) => {
45125
+ return {
45126
+ display: computedStyle.display,
45127
+ rotate: computedStyle.rotate,
45128
+ scale: computedStyle.scale,
45129
+ transform: computedStyle.transform,
45130
+ transformOrigin: computedStyle.transformOrigin
45131
+ };
45132
+ };
44804
45133
  var isReplacedElement = (element) => {
44805
45134
  return element instanceof HTMLImageElement || element instanceof HTMLVideoElement || element instanceof HTMLCanvasElement || element instanceof HTMLIFrameElement || element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement || element instanceof HTMLObjectElement || element instanceof HTMLEmbedElement;
44806
45135
  };
@@ -44851,7 +45180,8 @@ var getGlobalTransformOrigin = ({ transform }) => {
44851
45180
  };
44852
45181
  var calculateTransforms = ({
44853
45182
  element,
44854
- rootElement
45183
+ rootElement,
45184
+ transformStyleCache
44855
45185
  }) => {
44856
45186
  let parent = element;
44857
45187
  const transforms = [];
@@ -44861,10 +45191,19 @@ var calculateTransforms = ({
44861
45191
  let maskImageInfo = null;
44862
45192
  let filterForPrecompositing = null;
44863
45193
  while (parent) {
45194
+ const cachedTransformStyle = transformStyleCache.get(parent);
45195
+ const shouldReadComputedStyle = parent === element || cachedTransformStyle === undefined;
44864
45196
  const originalTransition = parent.style.transition;
44865
45197
  parent.style.transition = "none";
44866
- const computedStyle = getComputedStyle(parent);
45198
+ const computedStyle = shouldReadComputedStyle ? getComputedStyle(parent) : null;
45199
+ const transformStyle = computedStyle === null ? cachedTransformStyle : snapshotTransformStyle(computedStyle);
45200
+ if (computedStyle !== null) {
45201
+ transformStyleCache.set(parent, transformStyle);
45202
+ }
44867
45203
  if (parent === element) {
45204
+ if (computedStyle === null) {
45205
+ throw new Error("Element computed style not found");
45206
+ }
44868
45207
  elementComputedStyle = computedStyle;
44869
45208
  opacity2 = parseFloat(computedStyle.opacity);
44870
45209
  const maskImageValue = getMaskImageValue(computedStyle);
@@ -44887,9 +45226,9 @@ var calculateTransforms = ({
44887
45226
  }
44888
45227
  });
44889
45228
  }
44890
- const hasApplicableTransformCssValue = canApplyCssTransforms({ computedStyle, element: parent }) && hasAnyTransformCssValue(computedStyle);
45229
+ const hasApplicableTransformCssValue = canApplyCssTransforms({ computedStyle: transformStyle, element: parent }) && hasAnyTransformCssValue(transformStyle);
44891
45230
  if (hasApplicableTransformCssValue || parent === element) {
44892
- const toParse = hasApplicableTransformCssValue && hasTransformCssValue(computedStyle) ? computedStyle.transform : undefined;
45231
+ const toParse = hasApplicableTransformCssValue && hasTransformCssValue(transformStyle) ? transformStyle.transform : undefined;
44893
45232
  const matrix = new DOMMatrix(toParse);
44894
45233
  const resetTransforms = makeTransformResetter(parent);
44895
45234
  const { scale, rotate: rotate2 } = parent.style;
@@ -44904,7 +45243,7 @@ var calculateTransforms = ({
44904
45243
  const cleanup = resetTransforms(hasApplicableTransformCssValue);
44905
45244
  transforms.push({
44906
45245
  element: parent,
44907
- transformOrigin: computedStyle.transformOrigin,
45246
+ transformOrigin: transformStyle.transformOrigin,
44908
45247
  boundingClientRect: null,
44909
45248
  matrices: additionalMatrices
44910
45249
  });
@@ -45496,7 +45835,8 @@ var drawBackground = async ({
45496
45835
  internalState,
45497
45836
  scale,
45498
45837
  onlyBackgroundClipText: true,
45499
- waitForPageResponsiveness: null
45838
+ waitForPageResponsiveness: null,
45839
+ waitForRenderReady: () => Promise.resolve()
45500
45840
  });
45501
45841
  onlyBackgroundClipText.setTransform(new DOMMatrix().scale(scale, scale));
45502
45842
  element.style.backgroundClip = originalBackgroundClip;
@@ -46650,13 +46990,15 @@ var processNode = async ({
46650
46990
  internalState,
46651
46991
  rootElement,
46652
46992
  scale,
46653
- waitForPageResponsiveness
46993
+ waitForPageResponsiveness,
46994
+ transformStyleCache
46654
46995
  }) => {
46655
46996
  let __stack = [];
46656
46997
  try {
46657
46998
  const transforms = __using2(__stack, calculateTransforms({
46658
46999
  element,
46659
- rootElement
47000
+ rootElement,
47001
+ transformStyleCache
46660
47002
  }), 0);
46661
47003
  const { opacity: opacity2, computedStyle, totalMatrix, dimensions, precompositing } = transforms;
46662
47004
  if (opacity2 === 0) {
@@ -46715,7 +47057,8 @@ var processNode = async ({
46715
47057
  internalState,
46716
47058
  scale,
46717
47059
  onlyBackgroundClipText: false,
46718
- waitForPageResponsiveness
47060
+ waitForPageResponsiveness,
47061
+ waitForRenderReady: () => Promise.resolve()
46719
47062
  });
46720
47063
  if (waitForPageResponsiveness !== null) {
46721
47064
  await waitForPageResponsiveness();
@@ -46816,29 +47159,25 @@ var applyTextTransform = (text, transform) => {
46816
47159
  }
46817
47160
  return text;
46818
47161
  };
47162
+ var wordSegmenter = new Intl.Segmenter("en", { granularity: "word" });
46819
47163
  var findWords = (span) => {
46820
47164
  const originalText = span.textContent;
46821
- const segmenter = new Intl.Segmenter("en", { granularity: "word" });
46822
- const segments = segmenter.segment(span.textContent);
46823
- const words = Array.from(segments).map((s) => s.segment);
47165
+ const segments = Array.from(wordSegmenter.segment(originalText));
46824
47166
  const tokens = [];
46825
- for (let i = 0;i < words.length; i++) {
46826
- const wordsBefore = words.slice(0, i);
46827
- const wordsAfter = words.slice(i + 1);
46828
- const word = words[i];
46829
- const wordsBeforeText = wordsBefore.join("");
46830
- const wordsAfterText = wordsAfter.join("");
47167
+ for (const { index: index2, segment } of segments) {
47168
+ const wordsBeforeText = originalText.slice(0, index2);
47169
+ const wordsAfterText = originalText.slice(index2 + segment.length);
46831
47170
  const beforeNode = document.createTextNode(wordsBeforeText);
46832
47171
  const afterNode = document.createTextNode(wordsAfterText);
46833
47172
  const interstitialNode = document.createElement("span");
46834
- interstitialNode.textContent = word;
47173
+ interstitialNode.textContent = segment;
46835
47174
  span.textContent = "";
46836
47175
  span.appendChild(beforeNode);
46837
47176
  span.appendChild(interstitialNode);
46838
47177
  span.appendChild(afterNode);
46839
47178
  const rect = interstitialNode.getBoundingClientRect();
46840
47179
  span.textContent = originalText;
46841
- tokens.push({ text: word, rect });
47180
+ tokens.push({ text: segment, rect });
46842
47181
  }
46843
47182
  return tokens;
46844
47183
  };
@@ -47127,10 +47466,10 @@ var drawText = ({
47127
47466
  const ctm = contextToDraw.getTransform();
47128
47467
  const blurScale = Math.hypot(ctm.a, ctm.b);
47129
47468
  const { strokeFirst } = parsePaintOrder(paintOrder);
47469
+ const measurements = contextToDraw.measureText(originalText);
47470
+ const { fontBoundingBoxDescent, fontBoundingBoxAscent } = measurements;
47471
+ const fontHeight = fontBoundingBoxAscent + fontBoundingBoxDescent;
47130
47472
  for (const token of tokens) {
47131
- const measurements = contextToDraw.measureText(originalText);
47132
- const { fontBoundingBoxDescent, fontBoundingBoxAscent } = measurements;
47133
- const fontHeight = fontBoundingBoxAscent + fontBoundingBoxDescent;
47134
47473
  const leading = token.rect.height - fontHeight;
47135
47474
  const halfLeading = leading / 2;
47136
47475
  const x = (isRTL2 ? token.rect.right : token.rect.left) - parentRect.x;
@@ -47185,7 +47524,8 @@ var handleTextNode = async ({
47185
47524
  rootElement,
47186
47525
  onlyBackgroundClipText,
47187
47526
  scale,
47188
- waitForPageResponsiveness
47527
+ waitForPageResponsiveness,
47528
+ transformStyleCache
47189
47529
  }) => {
47190
47530
  const span = document.createElement("span");
47191
47531
  const parent = node.parentNode;
@@ -47203,7 +47543,8 @@ var handleTextNode = async ({
47203
47543
  internalState,
47204
47544
  rootElement,
47205
47545
  scale,
47206
- waitForPageResponsiveness
47546
+ waitForPageResponsiveness,
47547
+ transformStyleCache
47207
47548
  });
47208
47549
  parent.insertBefore(node, span);
47209
47550
  parent.removeChild(span);
@@ -47218,7 +47559,8 @@ var walkOverNode = ({
47218
47559
  rootElement,
47219
47560
  onlyBackgroundClipText,
47220
47561
  scale,
47221
- waitForPageResponsiveness
47562
+ waitForPageResponsiveness,
47563
+ transformStyleCache
47222
47564
  }) => {
47223
47565
  if (node instanceof HTMLElement || node instanceof SVGElement) {
47224
47566
  return processNode({
@@ -47230,7 +47572,8 @@ var walkOverNode = ({
47230
47572
  internalState,
47231
47573
  rootElement,
47232
47574
  scale,
47233
- waitForPageResponsiveness
47575
+ waitForPageResponsiveness,
47576
+ transformStyleCache
47234
47577
  });
47235
47578
  }
47236
47579
  if (node instanceof Text) {
@@ -47243,7 +47586,8 @@ var walkOverNode = ({
47243
47586
  rootElement,
47244
47587
  onlyBackgroundClipText,
47245
47588
  scale,
47246
- waitForPageResponsiveness
47589
+ waitForPageResponsiveness,
47590
+ transformStyleCache
47247
47591
  });
47248
47592
  }
47249
47593
  throw new Error("Unknown node type");
@@ -47274,6 +47618,7 @@ var compose = async ({
47274
47618
  let __stack = [];
47275
47619
  try {
47276
47620
  const treeWalker = document.createTreeWalker(element, onlyBackgroundClipText ? NodeFilter.SHOW_TEXT : NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, getFilterFunction);
47621
+ const transformStyleCache = new WeakMap;
47277
47622
  if (onlyBackgroundClipText) {
47278
47623
  treeWalker.nextNode();
47279
47624
  if (!treeWalker.currentNode) {
@@ -47293,7 +47638,8 @@ var compose = async ({
47293
47638
  rootElement: element,
47294
47639
  onlyBackgroundClipText,
47295
47640
  scale,
47296
- waitForPageResponsiveness
47641
+ waitForPageResponsiveness,
47642
+ transformStyleCache
47297
47643
  });
47298
47644
  if (val.type === "skip-children") {
47299
47645
  if (!skipToNextNonDescendant(treeWalker)) {
@@ -47326,17 +47672,21 @@ var createLayer = async ({
47326
47672
  cutout,
47327
47673
  htmlInCanvasContext,
47328
47674
  onHtmlInCanvasLayerOutcome,
47329
- waitForPageResponsiveness
47675
+ waitForPageResponsiveness,
47676
+ waitForRenderReady
47330
47677
  }) => {
47331
47678
  const scaledWidth = Math.ceil(cutout.width * scale);
47332
47679
  const scaledHeight = Math.ceil(cutout.height * scale);
47333
47680
  if (!onlyBackgroundClipText && element instanceof HTMLElement && htmlInCanvasContext && onHtmlInCanvasLayerOutcome) {
47681
+ const hasNestedHtmlInCanvas = containsLayoutSubtreeCanvas(element);
47334
47682
  try {
47335
47683
  const offCtx = await drawWithHtmlInCanvas({
47336
47684
  htmlInCanvasContext,
47337
47685
  element,
47338
47686
  scaledWidth,
47339
- scaledHeight
47687
+ scaledHeight,
47688
+ waitForRenderReady,
47689
+ useElementImage: hasNestedHtmlInCanvas
47340
47690
  });
47341
47691
  onHtmlInCanvasLayerOutcome({ native: true });
47342
47692
  return offCtx;
@@ -47583,7 +47933,6 @@ var internalRenderMediaOnWeb = async ({
47583
47933
  muted,
47584
47934
  scale,
47585
47935
  isProduction,
47586
- allowHtmlInCanvas,
47587
47936
  sampleRate
47588
47937
  }) => {
47589
47938
  let __stack2 = [];
@@ -47597,7 +47946,7 @@ var internalRenderMediaOnWeb = async ({
47597
47946
  }
47598
47947
  htmlInCanvasLayerOutcomeReported = true;
47599
47948
  if (outcome.native) {
47600
- Internals.Log.warn({ logLevel, tag: "@remotion/web-renderer" }, "Using Chromium experimental HTML-in-canvas (drawElementImage) for video frames. See https://github.com/WICG/html-in-canvas");
47949
+ Internals.Log.warn({ logLevel, tag: "@remotion/web-renderer" }, "Using Chromium experimental HTML-in-canvas (drawElementImage) for video frames. See https://remotion.dev/docs/client-side-rendering/html-in-canvas");
47601
47950
  } else if (outcome.shouldWarn) {
47602
47951
  Internals.Log.warn({ logLevel, tag: "@remotion/web-renderer" }, `Not using HTML-in-canvas: ${outcome.reason}`);
47603
47952
  }
@@ -47651,6 +48000,7 @@ var internalRenderMediaOnWeb = async ({
47651
48000
  if (signal?.aborted) {
47652
48001
  return Promise.reject(new Error("renderMediaOnWeb() was cancelled"));
47653
48002
  }
48003
+ const useHtmlInCanvas = await supportsNestedHtmlInCanvas();
47654
48004
  const scaffold = __using2(__stack2, createScaffold({
47655
48005
  width: resolved.width,
47656
48006
  height: resolved.height,
@@ -47668,7 +48018,7 @@ var internalRenderMediaOnWeb = async ({
47668
48018
  initialFrame: 0,
47669
48019
  defaultCodec: resolved.defaultCodec,
47670
48020
  defaultOutName: resolved.defaultOutName,
47671
- allowHtmlInCanvas,
48021
+ useHtmlInCanvas,
47672
48022
  pixelDensity: scale
47673
48023
  }), 0);
47674
48024
  const {
@@ -47679,27 +48029,6 @@ var internalRenderMediaOnWeb = async ({
47679
48029
  errorHolder,
47680
48030
  htmlInCanvasContext
47681
48031
  } = scaffold;
47682
- if (allowHtmlInCanvas && !htmlInCanvasContext) {
47683
- if (!supportsNativeHtmlInCanvas()) {
47684
- onHtmlInCanvasLayerOutcome({
47685
- native: false,
47686
- reason: "This browser does not expose CanvasRenderingContext2D.prototype.drawElementImage. In Chromium, enable chrome://flags/#canvas-draw-element and use a version that ships the API.",
47687
- shouldWarn: false
47688
- });
47689
- } else {
47690
- onHtmlInCanvasLayerOutcome({
47691
- native: false,
47692
- reason: "drawElementImage is available but canvas.requestPaint() is missing. Use a Chromium version that ships requestPaint.",
47693
- shouldWarn: true
47694
- });
47695
- }
47696
- } else if (!allowHtmlInCanvas) {
47697
- onHtmlInCanvasLayerOutcome({
47698
- native: false,
47699
- reason: "allowHtmlInCanvas is false; using the built-in DOM composer.",
47700
- shouldWarn: false
47701
- });
47702
- }
47703
48032
  const internalState = __using2(__stack2, makeInternalState(), 0);
47704
48033
  const pageResponsivenessController = createPageResponsivenessController({
47705
48034
  intervalInMilliseconds: pageResponsivenessIntervalInMilliseconds,
@@ -47718,6 +48047,17 @@ var internalRenderMediaOnWeb = async ({
47718
48047
  fps: resolved.fps,
47719
48048
  logLevel
47720
48049
  }), 0);
48050
+ const waitForRenderReady = async () => {
48051
+ await waitForReady({
48052
+ timeoutInMilliseconds: delayRenderTimeoutInMilliseconds,
48053
+ scope: delayRenderScope,
48054
+ signal,
48055
+ apiName: "renderMediaOnWeb",
48056
+ internalState,
48057
+ keepalive
48058
+ });
48059
+ checkForError(errorHolder);
48060
+ };
47721
48061
  const artifactsHandler = handleArtifacts();
47722
48062
  const webFsTarget = outputTarget === "web-fs" ? await createWebFsTarget() : null;
47723
48063
  const target = webFsTarget ? new StreamTarget(webFsTarget.stream) : new BufferTarget;
@@ -47736,15 +48076,7 @@ var internalRenderMediaOnWeb = async ({
47736
48076
  if (signal?.aborted) {
47737
48077
  throw new Error("renderMediaOnWeb() was cancelled");
47738
48078
  }
47739
- await waitForReady({
47740
- timeoutInMilliseconds: delayRenderTimeoutInMilliseconds,
47741
- scope: delayRenderScope,
47742
- signal,
47743
- apiName: "renderMediaOnWeb",
47744
- internalState,
47745
- keepalive
47746
- });
47747
- checkForError(errorHolder);
48079
+ await waitForRenderReady();
47748
48080
  if (signal?.aborted) {
47749
48081
  throw new Error("renderMediaOnWeb() was cancelled");
47750
48082
  }
@@ -47802,15 +48134,7 @@ var internalRenderMediaOnWeb = async ({
47802
48134
  throw new Error("renderMediaOnWeb() was cancelled");
47803
48135
  }
47804
48136
  timeUpdater.current?.update(frame);
47805
- await waitForReady({
47806
- timeoutInMilliseconds: delayRenderTimeoutInMilliseconds,
47807
- scope: delayRenderScope,
47808
- signal,
47809
- apiName: "renderMediaOnWeb",
47810
- keepalive,
47811
- internalState
47812
- });
47813
- checkForError(errorHolder);
48137
+ await waitForRenderReady();
47814
48138
  if (signal?.aborted) {
47815
48139
  throw new Error("renderMediaOnWeb() was cancelled");
47816
48140
  }
@@ -47828,7 +48152,8 @@ var internalRenderMediaOnWeb = async ({
47828
48152
  cutout: new DOMRect(0, 0, resolved.width, resolved.height),
47829
48153
  htmlInCanvasContext,
47830
48154
  onHtmlInCanvasLayerOutcome: htmlInCanvasContext ? onHtmlInCanvasLayerOutcome : undefined,
47831
- waitForPageResponsiveness
48155
+ waitForPageResponsiveness,
48156
+ waitForRenderReady
47832
48157
  });
47833
48158
  internalState.addCreateFrameTime(performance.now() - createFrameStart);
47834
48159
  layerCanvas = layer.canvas;
@@ -47997,7 +48322,6 @@ var renderMediaOnWeb = (options2) => {
47997
48322
  muted: options2.muted ?? false,
47998
48323
  scale: options2.scale ?? 1,
47999
48324
  isProduction: options2.isProduction ?? true,
48000
- allowHtmlInCanvas: options2.allowHtmlInCanvas ?? false,
48001
48325
  sampleRate: options2.sampleRate ?? 48000
48002
48326
  }));
48003
48327
  return onlyOneRenderAtATimeQueue.ref;
@@ -48036,7 +48360,7 @@ var DemoErrorIcon = () => {
48036
48360
  };
48037
48361
 
48038
48362
  // src/components/homepage/Demo/DoneCheckmark.tsx
48039
- import { jsx as jsx91, jsxs as jsxs28 } from "react/jsx-runtime";
48363
+ import { jsx as jsx91, jsxs as jsxs30 } from "react/jsx-runtime";
48040
48364
  var DoneCheckmark = () => {
48041
48365
  return /* @__PURE__ */ jsx91("div", {
48042
48366
  style: {
@@ -48049,7 +48373,7 @@ var DoneCheckmark = () => {
48049
48373
  justifyContent: "center",
48050
48374
  animation: "jump 0.2s ease-out"
48051
48375
  },
48052
- children: /* @__PURE__ */ jsxs28("svg", {
48376
+ children: /* @__PURE__ */ jsxs30("svg", {
48053
48377
  viewBox: "0 0 20 20",
48054
48378
  fill: "none",
48055
48379
  xmlns: "http://www.w3.org/2000/svg",
@@ -48078,7 +48402,7 @@ var DoneCheckmark = () => {
48078
48402
  };
48079
48403
 
48080
48404
  // src/components/homepage/Demo/Progress.tsx
48081
- import { jsx as jsx95, jsxs as jsxs29 } from "react/jsx-runtime";
48405
+ import { jsx as jsx95, jsxs as jsxs31 } from "react/jsx-runtime";
48082
48406
  var Progress = ({ progress }) => {
48083
48407
  const inner2 = makeCircle({
48084
48408
  radius: 10
@@ -48088,7 +48412,7 @@ var Progress = ({ progress }) => {
48088
48412
  closePath: false,
48089
48413
  radius: 10
48090
48414
  });
48091
- return /* @__PURE__ */ jsxs29("svg", {
48415
+ return /* @__PURE__ */ jsxs31("svg", {
48092
48416
  viewBox: `0 0 ${inner2.width} ${inner2.height}`,
48093
48417
  style: { overflow: "visible", height: 22 },
48094
48418
  children: [
@@ -48111,7 +48435,7 @@ var Progress = ({ progress }) => {
48111
48435
 
48112
48436
  // src/components/homepage/Demo/Spinner.tsx
48113
48437
  import { useMemo as useMemo64 } from "react";
48114
- import { jsx as jsx97, jsxs as jsxs30, Fragment as Fragment15 } from "react/jsx-runtime";
48438
+ import { jsx as jsx97, jsxs as jsxs34, Fragment as Fragment16 } from "react/jsx-runtime";
48115
48439
  var viewBox2 = 100;
48116
48440
  var lines2 = 8;
48117
48441
  var className2 = "__remotion_spinner_line";
@@ -48124,7 +48448,7 @@ var Spinner2 = ({ size: size4, duration }) => {
48124
48448
  height: size4
48125
48449
  };
48126
48450
  }, [size4]);
48127
- return /* @__PURE__ */ jsxs30(Fragment15, {
48451
+ return /* @__PURE__ */ jsxs34(Fragment16, {
48128
48452
  children: [
48129
48453
  /* @__PURE__ */ jsx97("style", {
48130
48454
  type: "text/css",
@@ -48280,7 +48604,7 @@ var RenderButton = ({ renderData, onError, playerRef }) => {
48280
48604
  };
48281
48605
 
48282
48606
  // src/components/homepage/Demo/DownloadNudge.tsx
48283
- import { jsx as jsx99, jsxs as jsxs31 } from "react/jsx-runtime";
48607
+ import { jsx as jsx99, jsxs as jsxs36 } from "react/jsx-runtime";
48284
48608
  var origWidth = 77;
48285
48609
  var scale = 0.4;
48286
48610
  var Icon3 = () => {
@@ -48310,7 +48634,7 @@ var DownloadNudge = () => {
48310
48634
  paddingRight: 24,
48311
48635
  paddingTop: 18
48312
48636
  },
48313
- children: /* @__PURE__ */ jsxs31("div", {
48637
+ children: /* @__PURE__ */ jsxs36("div", {
48314
48638
  children: [
48315
48639
  /* @__PURE__ */ jsx99(Icon3, {}),
48316
48640
  /* @__PURE__ */ jsx99("div", {
@@ -48330,7 +48654,7 @@ var DownloadNudge = () => {
48330
48654
  };
48331
48655
 
48332
48656
  // src/components/homepage/Demo/DragAndDropNudge.tsx
48333
- import { jsx as jsx100, jsxs as jsxs34 } from "react/jsx-runtime";
48657
+ import { jsx as jsx100, jsxs as jsxs37 } from "react/jsx-runtime";
48334
48658
  var origWidth2 = 37;
48335
48659
  var scale2 = 0.4;
48336
48660
  var Icon5 = () => {
@@ -48360,7 +48684,7 @@ var DragAndDropNudge = () => {
48360
48684
  marginTop: 18
48361
48685
  },
48362
48686
  className: "ml-4 lg:-ml-5",
48363
- children: /* @__PURE__ */ jsxs34("div", {
48687
+ children: /* @__PURE__ */ jsxs37("div", {
48364
48688
  children: [
48365
48689
  /* @__PURE__ */ jsx100("div", {
48366
48690
  style: {
@@ -48425,7 +48749,7 @@ var useElementSize2 = (ref) => {
48425
48749
  };
48426
48750
 
48427
48751
  // src/components/homepage/Demo/PlayerSeekBar.tsx
48428
- import { jsx as jsx101, jsxs as jsxs36 } from "react/jsx-runtime";
48752
+ import { jsx as jsx101, jsxs as jsxs38 } from "react/jsx-runtime";
48429
48753
  var getFrameFromX2 = (clientX, durationInFrames, width2) => {
48430
48754
  const pos = clientX;
48431
48755
  const frame = Math.round(interpolate(pos, [0, width2], [0, durationInFrames - 1], {
@@ -48634,12 +48958,12 @@ var PlayerSeekBar2 = ({
48634
48958
  position: "absolute"
48635
48959
  };
48636
48960
  }, [durationInFrames, inFrame, outFrame]);
48637
- return /* @__PURE__ */ jsxs36("div", {
48961
+ return /* @__PURE__ */ jsxs38("div", {
48638
48962
  ref: containerRef,
48639
48963
  onPointerDown,
48640
48964
  style: containerStyle3,
48641
48965
  children: [
48642
- /* @__PURE__ */ jsxs36("div", {
48966
+ /* @__PURE__ */ jsxs38("div", {
48643
48967
  style: barBackground2,
48644
48968
  children: [
48645
48969
  /* @__PURE__ */ jsx101("div", {
@@ -48866,7 +49190,7 @@ var TimeDisplay = ({ fps, playerRef }) => {
48866
49190
  };
48867
49191
 
48868
49192
  // src/components/homepage/Demo/PlayerControls.tsx
48869
- import { jsx as jsx110, jsxs as jsxs37 } from "react/jsx-runtime";
49193
+ import { jsx as jsx110, jsxs as jsxs39 } from "react/jsx-runtime";
48870
49194
  var Separator2 = () => {
48871
49195
  return /* @__PURE__ */ jsx110("div", {
48872
49196
  style: {
@@ -48876,7 +49200,7 @@ var Separator2 = () => {
48876
49200
  });
48877
49201
  };
48878
49202
  var PlayerControls = ({ playerRef, durationInFrames, fps, children }) => {
48879
- return /* @__PURE__ */ jsxs37("div", {
49203
+ return /* @__PURE__ */ jsxs39("div", {
48880
49204
  className: "flex flex-row items-center bg-pane",
48881
49205
  children: [
48882
49206
  /* @__PURE__ */ jsx110(PlayPauseButton, {
@@ -48920,7 +49244,7 @@ var PlayerControls = ({ playerRef, durationInFrames, fps, children }) => {
48920
49244
 
48921
49245
  // src/components/homepage/Demo/ThemeNudge.tsx
48922
49246
  import React77 from "react";
48923
- import { jsx as jsx111, jsxs as jsxs38 } from "react/jsx-runtime";
49247
+ import { jsx as jsx111, jsxs as jsxs40 } from "react/jsx-runtime";
48924
49248
  var origWidth3 = 37;
48925
49249
  var scale3 = 0.4;
48926
49250
  var Icon6 = () => {
@@ -48956,9 +49280,9 @@ var ThemeNudge = () => {
48956
49280
  position: "absolute"
48957
49281
  },
48958
49282
  className: "lg:top-3 lg:-right-6 right-0 top-0",
48959
- children: /* @__PURE__ */ jsxs38("div", {
49283
+ children: /* @__PURE__ */ jsxs40("div", {
48960
49284
  children: [
48961
- /* @__PURE__ */ jsxs38("div", {
49285
+ /* @__PURE__ */ jsxs40("div", {
48962
49286
  style: {
48963
49287
  fontFamily: FONTS.GTPLANAR,
48964
49288
  fontSize: 15,
@@ -48969,7 +49293,7 @@ var ThemeNudge = () => {
48969
49293
  marginTop: 5
48970
49294
  },
48971
49295
  children: [
48972
- /* @__PURE__ */ jsxs38("a", {
49296
+ /* @__PURE__ */ jsxs40("a", {
48973
49297
  href: "#",
48974
49298
  onClick: toggleTheme,
48975
49299
  className: "bluelink",
@@ -48991,7 +49315,7 @@ var ThemeNudge = () => {
48991
49315
  };
48992
49316
 
48993
49317
  // src/components/homepage/Demo/index.tsx
48994
- import { jsx as jsx115, jsxs as jsxs39 } from "react/jsx-runtime";
49318
+ import { jsx as jsx115, jsxs as jsxs41 } from "react/jsx-runtime";
48995
49319
  var style3 = {
48996
49320
  width: "100%",
48997
49321
  aspectRatio: "640 / 360",
@@ -49059,7 +49383,7 @@ var Demo = () => {
49059
49383
  const onError = useCallback55(() => {
49060
49384
  setError(true);
49061
49385
  }, []);
49062
- return /* @__PURE__ */ jsxs39("div", {
49386
+ return /* @__PURE__ */ jsxs41("div", {
49063
49387
  id: "demo",
49064
49388
  children: [
49065
49389
  /* @__PURE__ */ jsx115("br", {}),
@@ -49067,17 +49391,17 @@ var Demo = () => {
49067
49391
  /* @__PURE__ */ jsx115(SectionTitle, {
49068
49392
  children: "Interactive demo"
49069
49393
  }),
49070
- /* @__PURE__ */ jsxs39("div", {
49394
+ /* @__PURE__ */ jsxs41("div", {
49071
49395
  className: "max-w-[760px] mx-auto",
49072
49396
  children: [
49073
- /* @__PURE__ */ jsxs39("div", {
49397
+ /* @__PURE__ */ jsxs41("div", {
49074
49398
  className: "h-[105px] relative",
49075
49399
  children: [
49076
49400
  /* @__PURE__ */ jsx115(DragAndDropNudge, {}),
49077
49401
  /* @__PURE__ */ jsx115(ThemeNudge, {})
49078
49402
  ]
49079
49403
  }),
49080
- /* @__PURE__ */ jsxs39("div", {
49404
+ /* @__PURE__ */ jsxs41("div", {
49081
49405
  style: playerWrapper,
49082
49406
  children: [
49083
49407
  /* @__PURE__ */ jsx115(Player, {
@@ -49166,7 +49490,7 @@ var BlueButton = (props) => {
49166
49490
  };
49167
49491
 
49168
49492
  // src/components/homepage/EvaluateRemotion.tsx
49169
- import { jsx as jsx118, jsxs as jsxs40 } from "react/jsx-runtime";
49493
+ import { jsx as jsx118, jsxs as jsxs44 } from "react/jsx-runtime";
49170
49494
  var EvaluateRemotionSection = () => {
49171
49495
  const [dailyAvatars, setDailyAvatars] = useState57([]);
49172
49496
  useEffect58(() => {
@@ -49179,10 +49503,10 @@ var EvaluateRemotionSection = () => {
49179
49503
  }
49180
49504
  setDailyAvatars(selectedAvatars);
49181
49505
  }, []);
49182
- return /* @__PURE__ */ jsxs40("div", {
49506
+ return /* @__PURE__ */ jsxs44("div", {
49183
49507
  className: "flex flex-col lg:flex-row gap-2",
49184
49508
  children: [
49185
- /* @__PURE__ */ jsxs40("div", {
49509
+ /* @__PURE__ */ jsxs44("div", {
49186
49510
  className: "card flex-1 flex flex-col",
49187
49511
  children: [
49188
49512
  /* @__PURE__ */ jsx118("div", {
@@ -49196,7 +49520,7 @@ var EvaluateRemotionSection = () => {
49196
49520
  /* @__PURE__ */ jsx118("div", {
49197
49521
  className: "flex-1"
49198
49522
  }),
49199
- /* @__PURE__ */ jsxs40("div", {
49523
+ /* @__PURE__ */ jsxs44("div", {
49200
49524
  className: "flex flex-row flex-wrap gap-2",
49201
49525
  children: [
49202
49526
  /* @__PURE__ */ jsx118("a", {
@@ -49223,7 +49547,7 @@ var EvaluateRemotionSection = () => {
49223
49547
  })
49224
49548
  ]
49225
49549
  }),
49226
- /* @__PURE__ */ jsxs40("div", {
49550
+ /* @__PURE__ */ jsxs44("div", {
49227
49551
  className: "card flex-1 flex flex-col",
49228
49552
  children: [
49229
49553
  /* @__PURE__ */ jsx118("div", {
@@ -49237,7 +49561,7 @@ var EvaluateRemotionSection = () => {
49237
49561
  /* @__PURE__ */ jsx118("div", {
49238
49562
  className: "flex-1"
49239
49563
  }),
49240
- /* @__PURE__ */ jsxs40("div", {
49564
+ /* @__PURE__ */ jsxs44("div", {
49241
49565
  className: "flex flex-row justify-between",
49242
49566
  children: [
49243
49567
  /* @__PURE__ */ jsx118("a", {
@@ -49270,13 +49594,13 @@ import { useEffect as useEffect59, useRef as useRef60 } from "react";
49270
49594
 
49271
49595
  // src/components/homepage/MakeVideosLinks.tsx
49272
49596
  import React80 from "react";
49273
- import { jsx as jsx119, jsxs as jsxs41, Fragment as Fragment16 } from "react/jsx-runtime";
49597
+ import { jsx as jsx119, jsxs as jsxs46, Fragment as Fragment17 } from "react/jsx-runtime";
49274
49598
  var icon3 = {
49275
49599
  height: 16,
49276
49600
  marginLeft: 10
49277
49601
  };
49278
49602
  var MakeVideosLinkItem = ({ href, label: label3 }) => {
49279
- return /* @__PURE__ */ jsxs41("a", {
49603
+ return /* @__PURE__ */ jsxs46("a", {
49280
49604
  className: "no-underline text-[var(--subtitle)] font-brand font-medium text-sm inline-flex flex-row items-center",
49281
49605
  href,
49282
49606
  children: [
@@ -49297,7 +49621,7 @@ var MakeVideosLinks = ({ links }) => {
49297
49621
  if (links.length === 0) {
49298
49622
  return null;
49299
49623
  }
49300
- return /* @__PURE__ */ jsxs41(Fragment16, {
49624
+ return /* @__PURE__ */ jsxs46(Fragment17, {
49301
49625
  children: [
49302
49626
  /* @__PURE__ */ jsx119("div", {
49303
49627
  className: "h-4"
@@ -49305,7 +49629,7 @@ var MakeVideosLinks = ({ links }) => {
49305
49629
  /* @__PURE__ */ jsx119("div", {
49306
49630
  className: "leading-6",
49307
49631
  children: links.map((link) => {
49308
- return /* @__PURE__ */ jsxs41(React80.Fragment, {
49632
+ return /* @__PURE__ */ jsxs46(React80.Fragment, {
49309
49633
  children: [
49310
49634
  /* @__PURE__ */ jsx119(MakeVideosLinkItem, {
49311
49635
  ...link
@@ -49320,9 +49644,9 @@ var MakeVideosLinks = ({ links }) => {
49320
49644
  };
49321
49645
 
49322
49646
  // src/components/homepage/MakeVideosAgentically.tsx
49323
- import { jsx as jsx120, jsxs as jsxs44, Fragment as Fragment17 } from "react/jsx-runtime";
49647
+ import { jsx as jsx120, jsxs as jsxs47, Fragment as Fragment18 } from "react/jsx-runtime";
49324
49648
  var MakeVideosAgentically = ({
49325
- title = /* @__PURE__ */ jsxs44(Fragment17, {
49649
+ title = /* @__PURE__ */ jsxs47(Fragment18, {
49326
49650
  children: [
49327
49651
  /* @__PURE__ */ jsx120("span", {
49328
49652
  className: "text-[var(--subtitle)]",
@@ -49361,13 +49685,13 @@ var MakeVideosAgentically = ({
49361
49685
  observer.observe(current);
49362
49686
  return () => observer.unobserve(current);
49363
49687
  }, []);
49364
- return /* @__PURE__ */ jsxs44("div", {
49688
+ return /* @__PURE__ */ jsxs47("div", {
49365
49689
  ref,
49366
49690
  className: "flex min-w-0 basis-0 flex-col flex-1",
49367
49691
  children: [
49368
49692
  /* @__PURE__ */ jsx120("div", {
49369
49693
  className: "flex aspect-square w-full items-start",
49370
- children: showVideo ? /* @__PURE__ */ jsxs44("video", {
49694
+ children: showVideo ? /* @__PURE__ */ jsxs47("video", {
49371
49695
  ref: videoRef,
49372
49696
  muted: true,
49373
49697
  autoPlay: true,
@@ -49394,7 +49718,7 @@ var MakeVideosAgentically = ({
49394
49718
  ]
49395
49719
  }) : null
49396
49720
  }),
49397
- /* @__PURE__ */ jsxs44("div", {
49721
+ /* @__PURE__ */ jsxs47("div", {
49398
49722
  className: "font-brand",
49399
49723
  children: [
49400
49724
  /* @__PURE__ */ jsx120("h2", {
@@ -49416,9 +49740,9 @@ var MakeVideosAgentically = ({
49416
49740
 
49417
49741
  // src/components/homepage/MakeVideosInteractively.tsx
49418
49742
  import { useRef as useRef61 } from "react";
49419
- import { jsx as jsx121, jsxs as jsxs46, Fragment as Fragment18 } from "react/jsx-runtime";
49743
+ import { jsx as jsx121, jsxs as jsxs48, Fragment as Fragment19 } from "react/jsx-runtime";
49420
49744
  var MakeVideosInteractively = ({
49421
- title = /* @__PURE__ */ jsxs46(Fragment18, {
49745
+ title = /* @__PURE__ */ jsxs48(Fragment19, {
49422
49746
  children: [
49423
49747
  /* @__PURE__ */ jsx121("span", {
49424
49748
  className: "text-[var(--subtitle)]",
@@ -49436,13 +49760,13 @@ var MakeVideosInteractively = ({
49436
49760
  fallbackVideoSrc = "/img/editing-safari.mp4"
49437
49761
  }) => {
49438
49762
  const ref = useRef61(null);
49439
- return /* @__PURE__ */ jsxs46("div", {
49763
+ return /* @__PURE__ */ jsxs48("div", {
49440
49764
  ref,
49441
49765
  className: "flex min-w-0 basis-0 flex-col justify-start items-start lg:mt-0 flex-1",
49442
49766
  children: [
49443
49767
  /* @__PURE__ */ jsx121("div", {
49444
49768
  className: "flex aspect-square w-full items-start",
49445
- children: showVideo ? /* @__PURE__ */ jsxs46("video", {
49769
+ children: showVideo ? /* @__PURE__ */ jsxs48("video", {
49446
49770
  autoPlay: true,
49447
49771
  muted: true,
49448
49772
  playsInline: true,
@@ -49468,7 +49792,7 @@ var MakeVideosInteractively = ({
49468
49792
  ]
49469
49793
  }) : null
49470
49794
  }),
49471
- /* @__PURE__ */ jsxs46("div", {
49795
+ /* @__PURE__ */ jsxs48("div", {
49472
49796
  className: "font-brand",
49473
49797
  children: [
49474
49798
  /* @__PURE__ */ jsx121("h2", {
@@ -49489,9 +49813,9 @@ var MakeVideosInteractively = ({
49489
49813
  };
49490
49814
 
49491
49815
  // src/components/homepage/MakeVideosProgrammatically.tsx
49492
- import { jsx as jsx125, jsxs as jsxs47, Fragment as Fragment19 } from "react/jsx-runtime";
49816
+ import { jsx as jsx125, jsxs as jsxs49, Fragment as Fragment20 } from "react/jsx-runtime";
49493
49817
  var MakeVideosProgrammatically = ({
49494
- title = /* @__PURE__ */ jsxs47(Fragment19, {
49818
+ title = /* @__PURE__ */ jsxs49(Fragment20, {
49495
49819
  children: [
49496
49820
  /* @__PURE__ */ jsx125("span", {
49497
49821
  className: "text-[var(--subtitle)]",
@@ -49508,12 +49832,12 @@ var MakeVideosProgrammatically = ({
49508
49832
  videoSrc = "/img/what-is-remotion.webm",
49509
49833
  fallbackVideoSrc = "/img/what-is-remotion.mp4"
49510
49834
  }) => {
49511
- return /* @__PURE__ */ jsxs47("div", {
49835
+ return /* @__PURE__ */ jsxs49("div", {
49512
49836
  className: "flex min-w-0 basis-0 flex-col flex-1",
49513
49837
  children: [
49514
49838
  /* @__PURE__ */ jsx125("div", {
49515
49839
  className: "flex aspect-square w-full items-start",
49516
- children: showVideo ? /* @__PURE__ */ jsxs47("video", {
49840
+ children: showVideo ? /* @__PURE__ */ jsxs49("video", {
49517
49841
  muted: true,
49518
49842
  autoPlay: true,
49519
49843
  playsInline: true,
@@ -49532,7 +49856,7 @@ var MakeVideosProgrammatically = ({
49532
49856
  ]
49533
49857
  }) : null
49534
49858
  }),
49535
- /* @__PURE__ */ jsxs47("div", {
49859
+ /* @__PURE__ */ jsxs49("div", {
49536
49860
  className: "font-brand",
49537
49861
  children: [
49538
49862
  /* @__PURE__ */ jsx125("h2", {
@@ -49554,7 +49878,7 @@ var MakeVideosProgrammatically = ({
49554
49878
 
49555
49879
  // src/components/homepage/NewsletterButton.tsx
49556
49880
  import { useCallback as useCallback56, useState as useState58 } from "react";
49557
- import { jsx as jsx127, jsxs as jsxs48 } from "react/jsx-runtime";
49881
+ import { jsx as jsx127, jsxs as jsxs50 } from "react/jsx-runtime";
49558
49882
  var NewsletterButton = () => {
49559
49883
  const [email, setEmail] = useState58("");
49560
49884
  const [submitting, setSubmitting] = useState58(false);
@@ -49586,26 +49910,26 @@ var NewsletterButton = () => {
49586
49910
  className: "flex flex-col",
49587
49911
  children: /* @__PURE__ */ jsx127("div", {
49588
49912
  className: "w-full",
49589
- children: /* @__PURE__ */ jsxs48("div", {
49913
+ children: /* @__PURE__ */ jsxs50("div", {
49590
49914
  className: "flex flex-col flex-1",
49591
49915
  children: [
49592
49916
  /* @__PURE__ */ jsx127(SectionTitle, {
49593
49917
  children: "Newsletter"
49594
49918
  }),
49595
- /* @__PURE__ */ jsxs48("form", {
49919
+ /* @__PURE__ */ jsxs50("form", {
49596
49920
  onSubmit: handleSubmit,
49597
49921
  style: {
49598
49922
  width: "100%"
49599
49923
  },
49600
49924
  children: [
49601
- /* @__PURE__ */ jsxs48("div", {
49925
+ /* @__PURE__ */ jsxs50("div", {
49602
49926
  className: "fontbrand text-center mb-10 -mt-4",
49603
49927
  children: [
49604
49928
  "Read about new features and noteworthy updates we have made on Remotion once in a while.",
49605
49929
  " "
49606
49930
  ]
49607
49931
  }),
49608
- /* @__PURE__ */ jsxs48("div", {
49932
+ /* @__PURE__ */ jsxs50("div", {
49609
49933
  className: "flex flex-col md:flex-row gap-2 justify-center",
49610
49934
  children: [
49611
49935
  /* @__PURE__ */ jsx127(Input, {
@@ -49641,7 +49965,7 @@ var NewsletterButton = () => {
49641
49965
  };
49642
49966
 
49643
49967
  // src/components/homepage/TrustedByBanner.tsx
49644
- import { jsx as jsx128, jsxs as jsxs49, Fragment as Fragment20 } from "react/jsx-runtime";
49968
+ import { jsx as jsx128, jsxs as jsxs51, Fragment as Fragment21 } from "react/jsx-runtime";
49645
49969
  var TrustedByBanner = () => {
49646
49970
  const logos = [
49647
49971
  {
@@ -49661,7 +49985,7 @@ var TrustedByBanner = () => {
49661
49985
  {
49662
49986
  id: "logo2",
49663
49987
  url: "https://www.musixmatch.com/",
49664
- light: /* @__PURE__ */ jsxs49("svg", {
49988
+ light: /* @__PURE__ */ jsxs51("svg", {
49665
49989
  height: "40",
49666
49990
  viewBox: "0 0 229 48",
49667
49991
  fill: "none",
@@ -49721,7 +50045,7 @@ var TrustedByBanner = () => {
49721
50045
  {
49722
50046
  id: "logo3",
49723
50047
  url: "https://www.wistia.com/",
49724
- light: /* @__PURE__ */ jsxs49("svg", {
50048
+ light: /* @__PURE__ */ jsxs51("svg", {
49725
50049
  height: "30",
49726
50050
  viewBox: "0 0 165 36",
49727
50051
  fill: "none",
@@ -49754,7 +50078,7 @@ var TrustedByBanner = () => {
49754
50078
  })
49755
50079
  }
49756
50080
  ];
49757
- return /* @__PURE__ */ jsxs49(Fragment20, {
50081
+ return /* @__PURE__ */ jsxs51(Fragment21, {
49758
50082
  children: [
49759
50083
  /* @__PURE__ */ jsx128("h3", {
49760
50084
  className: "text-center mt-20 mb-10",
@@ -49920,7 +50244,7 @@ var MuxVideoForward = ({ muxId, ...props }, ref) => {
49920
50244
  var MuxVideo = forwardRef41(MuxVideoForward);
49921
50245
 
49922
50246
  // src/components/homepage/VideoAppsShowcase.tsx
49923
- import { jsx as jsx131, jsxs as jsxs50 } from "react/jsx-runtime";
50247
+ import { jsx as jsx131, jsxs as jsxs53 } from "react/jsx-runtime";
49924
50248
  var tabs = [
49925
50249
  "Music visualization",
49926
50250
  "Captions",
@@ -50027,7 +50351,7 @@ var BuiltWithRemotionShowcase = () => {
50027
50351
  setIsMuted(newMutedState);
50028
50352
  }
50029
50353
  };
50030
- return /* @__PURE__ */ jsxs50("div", {
50354
+ return /* @__PURE__ */ jsxs53("div", {
50031
50355
  ref: containerRef,
50032
50356
  children: [
50033
50357
  /* @__PURE__ */ jsx131(SectionTitle, {
@@ -50046,10 +50370,10 @@ var BuiltWithRemotionShowcase = () => {
50046
50370
  /* @__PURE__ */ jsx131("div", {
50047
50371
  className: "card flex p-0 overflow-hidden",
50048
50372
  "data-nosnippet": true,
50049
- children: /* @__PURE__ */ jsxs50("div", {
50373
+ children: /* @__PURE__ */ jsxs53("div", {
50050
50374
  className: "flex-1 grid grid-cols-1 lg:grid-cols-2",
50051
50375
  children: [
50052
- /* @__PURE__ */ jsxs50("div", {
50376
+ /* @__PURE__ */ jsxs53("div", {
50053
50377
  className: "w-full aspect-video lg:aspect-square relative overflow-hidden bg-[#eee] cursor-pointer",
50054
50378
  onClick: handlePlayPause,
50055
50379
  children: [
@@ -50113,7 +50437,7 @@ var BuiltWithRemotionShowcase = () => {
50113
50437
  })
50114
50438
  ]
50115
50439
  }),
50116
- /* @__PURE__ */ jsxs50("div", {
50440
+ /* @__PURE__ */ jsxs53("div", {
50117
50441
  className: "p-6 lg:p-10 flex min-w-0 flex-col justify-center",
50118
50442
  children: [
50119
50443
  /* @__PURE__ */ jsx131("div", {
@@ -50131,7 +50455,7 @@ var BuiltWithRemotionShowcase = () => {
50131
50455
  /* @__PURE__ */ jsx131("div", {
50132
50456
  className: "h-5"
50133
50457
  }),
50134
- /* @__PURE__ */ jsxs50("a", {
50458
+ /* @__PURE__ */ jsxs53("a", {
50135
50459
  className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center",
50136
50460
  href: videoApps[activeTab].link,
50137
50461
  children: [
@@ -50150,7 +50474,7 @@ var BuiltWithRemotionShowcase = () => {
50150
50474
  justifyContent: "center",
50151
50475
  display: "flex"
50152
50476
  },
50153
- children: /* @__PURE__ */ jsxs50("div", {
50477
+ children: /* @__PURE__ */ jsxs53("div", {
50154
50478
  style: {
50155
50479
  fontFamily: "GTPlanar"
50156
50480
  },
@@ -50174,7 +50498,7 @@ var BuiltWithRemotionShowcase = () => {
50174
50498
  import { useState as useState61 } from "react";
50175
50499
 
50176
50500
  // src/components/homepage/GitHubButton.tsx
50177
- import { jsx as jsx134, jsxs as jsxs51 } from "react/jsx-runtime";
50501
+ import { jsx as jsx134, jsxs as jsxs55 } from "react/jsx-runtime";
50178
50502
  var GithubIcon = () => {
50179
50503
  return /* @__PURE__ */ jsx134("svg", {
50180
50504
  viewBox: "0 0 496 512",
@@ -50186,7 +50510,7 @@ var GithubIcon = () => {
50186
50510
  });
50187
50511
  };
50188
50512
  var GithubButton = () => {
50189
- return /* @__PURE__ */ jsxs51("div", {
50513
+ return /* @__PURE__ */ jsxs55("div", {
50190
50514
  className: "flex flex-row items-center text-base",
50191
50515
  children: [
50192
50516
  /* @__PURE__ */ jsx134(GithubIcon, {}),
@@ -50204,15 +50528,15 @@ var GithubButton = () => {
50204
50528
  };
50205
50529
 
50206
50530
  // src/components/homepage/GetStartedStrip.tsx
50207
- import { jsx as jsx136, jsxs as jsxs54 } from "react/jsx-runtime";
50531
+ import { jsx as jsx136, jsxs as jsxs56 } from "react/jsx-runtime";
50208
50532
  var GetStarted = () => {
50209
50533
  const [clicked, setClicked] = useState61(null);
50210
- return /* @__PURE__ */ jsxs54("div", {
50534
+ return /* @__PURE__ */ jsxs56("div", {
50211
50535
  className: "flex flex-col lg:flex-row items-center justify-center text-center w-full",
50212
50536
  children: [
50213
50537
  /* @__PURE__ */ jsx136("div", {
50214
50538
  className: "w-full lg:w-auto",
50215
- children: /* @__PURE__ */ jsxs54("div", {
50539
+ children: /* @__PURE__ */ jsxs56("div", {
50216
50540
  className: "flex flex-row w-full relative",
50217
50541
  children: [
50218
50542
  clicked ? /* @__PURE__ */ jsx136("div", {
@@ -50275,9 +50599,9 @@ var GetStarted = () => {
50275
50599
  };
50276
50600
 
50277
50601
  // src/components/homepage/WriteInReact.tsx
50278
- import { jsx as jsx137, jsxs as jsxs56 } from "react/jsx-runtime";
50602
+ import { jsx as jsx137, jsxs as jsxs57 } from "react/jsx-runtime";
50279
50603
  var WriteInReact = () => {
50280
- return /* @__PURE__ */ jsxs56("div", {
50604
+ return /* @__PURE__ */ jsxs57("div", {
50281
50605
  children: [
50282
50606
  /* @__PURE__ */ jsx137("h1", {
50283
50607
  className: "text-4xl sm:text-5xl lg:text-[5em] text-center fontbrand font-black leading-none text-balance",
@@ -50286,7 +50610,7 @@ var WriteInReact = () => {
50286
50610
  },
50287
50611
  children: "Make videos programmatically."
50288
50612
  }),
50289
- /* @__PURE__ */ jsxs56("p", {
50613
+ /* @__PURE__ */ jsxs57("p", {
50290
50614
  style: {
50291
50615
  textShadow: "0 5px 30px var(--background)"
50292
50616
  },
@@ -50308,7 +50632,7 @@ var WriteInReact = () => {
50308
50632
  };
50309
50633
 
50310
50634
  // src/components/Homepage.tsx
50311
- import { jsx as jsx138, jsxs as jsxs57 } from "react/jsx-runtime";
50635
+ import { jsx as jsx138, jsxs as jsxs58 } from "react/jsx-runtime";
50312
50636
  "use client";
50313
50637
  var makeVideosRowClassName = "mt-4 md:mt-6 flex flex-col lg:flex-row gap-10";
50314
50638
  var NewLanding = ({ colorMode, setColorMode }) => {
@@ -50317,7 +50641,7 @@ var NewLanding = ({ colorMode, setColorMode }) => {
50317
50641
  setColorMode,
50318
50642
  children: /* @__PURE__ */ jsx138("div", {
50319
50643
  className: "w-full relative",
50320
- children: /* @__PURE__ */ jsxs57("div", {
50644
+ children: /* @__PURE__ */ jsxs58("div", {
50321
50645
  style: { overflow: "hidden" },
50322
50646
  children: [
50323
50647
  /* @__PURE__ */ jsx138("div", {
@@ -50327,12 +50651,12 @@ var NewLanding = ({ colorMode, setColorMode }) => {
50327
50651
  /* @__PURE__ */ jsx138("br", {}),
50328
50652
  /* @__PURE__ */ jsx138("br", {}),
50329
50653
  /* @__PURE__ */ jsx138("br", {}),
50330
- /* @__PURE__ */ jsxs57("div", {
50654
+ /* @__PURE__ */ jsxs58("div", {
50331
50655
  className: "max-w-[500px] lg:max-w-[1000px] m-auto pl-5 pr-5 overflow-x-clip md:overflow-x-visible relative",
50332
50656
  children: [
50333
50657
  /* @__PURE__ */ jsx138(WriteInReact, {}),
50334
50658
  /* @__PURE__ */ jsx138("br", {}),
50335
- /* @__PURE__ */ jsxs57("div", {
50659
+ /* @__PURE__ */ jsxs58("div", {
50336
50660
  className: makeVideosRowClassName,
50337
50661
  children: [
50338
50662
  /* @__PURE__ */ jsx138(MakeVideosAgentically, {