@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.
@@ -38,7 +38,7 @@ import { useMemo as useMemo52 } from "react";
38
38
  // ../design/dist/esm/index.mjs
39
39
  import * as React23 from "react";
40
40
  import * as React3 from "react";
41
- import { Fragment as Fragment2, jsx as jsx43 } from "react/jsx-runtime";
41
+ import { Fragment as Fragment22, jsx as jsx43 } from "react/jsx-runtime";
42
42
  import React52, { useCallback as useCallback27, useRef as useRef210, useState as useState22 } from "react";
43
43
 
44
44
  // ../../node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
@@ -4386,13 +4386,12 @@ import { jsx as jsx34 } from "react/jsx-runtime";
4386
4386
  import { jsx as jsx35 } from "react/jsx-runtime";
4387
4387
  import React39, { useMemo as useMemo37 } from "react";
4388
4388
  import { jsx as jsx36 } from "react/jsx-runtime";
4389
- import {
4390
- Children,
4389
+ import React41, {
4391
4390
  forwardRef as forwardRef14,
4392
4391
  useMemo as useMemo38
4393
4392
  } from "react";
4394
4393
  import React40 from "react";
4395
- import { jsx as jsx37 } from "react/jsx-runtime";
4394
+ import { jsx as jsx37, jsxs as jsxs3, Fragment } from "react/jsx-runtime";
4396
4395
  import React42 from "react";
4397
4396
  import { forwardRef as forwardRef16, useCallback as useCallback25, useContext as useContext39 } from "react";
4398
4397
  import {
@@ -5568,7 +5567,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
5568
5567
  var addSequenceStackTraces = (component) => {
5569
5568
  componentsToAddStacksTo.push(component);
5570
5569
  };
5571
- var VERSION = "4.0.490";
5570
+ var VERSION = "4.0.491";
5572
5571
  var checkMultipleRemotionVersions = () => {
5573
5572
  if (typeof globalThis === "undefined") {
5574
5573
  return;
@@ -6181,7 +6180,7 @@ var SequenceManagerRefContext = React11.createContext({
6181
6180
  current: []
6182
6181
  });
6183
6182
  var makeSequencePropsSubscriptionKey = (key) => {
6184
- return `${key.nodePath.join(".")}.${key.sequenceKeys.join(".")}.${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
6183
+ return `${key.absolutePath}\x00${key.nodePath.join(".")}\x00${key.sequenceKeys.join(".")}\x00${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
6185
6184
  };
6186
6185
  var VisualModePropStatusesContext = React11.createContext({
6187
6186
  propStatuses: {}
@@ -8794,6 +8793,7 @@ var RegularSequenceRefForwardingFunction = ({
8794
8793
  src: isMedia.data.src,
8795
8794
  getStack: () => stackRef.current,
8796
8795
  startMediaFrom: startMediaFrom ?? isMedia.data.startMediaFrom,
8796
+ mediaFrameAtSequenceZero,
8797
8797
  volume: isMedia.data.volumes,
8798
8798
  refForOutline: refForOutline ?? null,
8799
8799
  isInsideSeries,
@@ -8857,6 +8857,7 @@ var RegularSequenceRefForwardingFunction = ({
8857
8857
  isInsideSeries,
8858
8858
  registeredFrozenFrame,
8859
8859
  startMediaFrom,
8860
+ mediaFrameAtSequenceZero,
8860
8861
  frozenMediaFrame
8861
8862
  ]);
8862
8863
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
@@ -10807,7 +10808,9 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10807
10808
  return;
10808
10809
  }
10809
10810
  if (data === undefined) {
10810
- current.src = EMPTY_AUDIO;
10811
+ if (current.src !== EMPTY_AUDIO) {
10812
+ current.src = EMPTY_AUDIO;
10813
+ }
10811
10814
  return;
10812
10815
  }
10813
10816
  if (!data) {
@@ -10876,7 +10879,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10876
10879
  if (prevA.id === id) {
10877
10880
  const isTheSame = compareProps(aud, prevA.props) && prevA.premounting === premounting && prevA.postmounting === postmounting;
10878
10881
  if (isTheSame) {
10879
- return prevA;
10882
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
10880
10883
  }
10881
10884
  changed = true;
10882
10885
  return {
@@ -10888,7 +10891,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10888
10891
  audioMounted
10889
10892
  };
10890
10893
  }
10891
- return prevA;
10894
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
10892
10895
  });
10893
10896
  if (changed) {
10894
10897
  rerenderAudios();
@@ -10927,16 +10930,19 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10927
10930
  unregisterAudio,
10928
10931
  updateAudio
10929
10932
  ]);
10933
+ const sharedAudioTagElements = useMemo21(() => {
10934
+ return refs.map(({ id, ref }) => {
10935
+ return /* @__PURE__ */ jsx19("audio", {
10936
+ ref,
10937
+ preload: "metadata",
10938
+ src: EMPTY_AUDIO
10939
+ }, id);
10940
+ });
10941
+ }, [refs]);
10930
10942
  return /* @__PURE__ */ jsxs2(SharedAudioTagsContext.Provider, {
10931
10943
  value: audioTagsValue,
10932
10944
  children: [
10933
- refs.map(({ id, ref }) => {
10934
- return /* @__PURE__ */ jsx19("audio", {
10935
- ref,
10936
- preload: "metadata",
10937
- src: EMPTY_AUDIO
10938
- }, id);
10939
- }),
10945
+ sharedAudioTagElements,
10940
10946
  children
10941
10947
  ]
10942
10948
  });
@@ -11397,6 +11403,7 @@ var useMediaInTimeline = ({
11397
11403
  showInTimeline: true,
11398
11404
  nonce: nonce.get(),
11399
11405
  startMediaFrom: 0 - startsAt,
11406
+ mediaFrameAtSequenceZero: null,
11400
11407
  doesVolumeChange,
11401
11408
  loopDisplay,
11402
11409
  playbackRate,
@@ -13030,16 +13037,16 @@ var isMissingPaintRecordError = (error2) => {
13030
13037
  return error2 instanceof DOMException && error2.name === "InvalidStateError";
13031
13038
  };
13032
13039
  var missingPaintRecordMessage = "HtmlInCanvas: Expected the element to be inside the viewport during rendering, but Chrome had no cached paint record for it.";
13033
- var resizeOffscreenCanvas = ({
13034
- offscreen,
13040
+ var resizePaintTarget = ({
13041
+ target,
13035
13042
  width,
13036
13043
  height
13037
13044
  }) => {
13038
- if (offscreen.width !== width) {
13039
- offscreen.width = width;
13045
+ if (target.width !== width) {
13046
+ target.width = width;
13040
13047
  }
13041
- if (offscreen.height !== height) {
13042
- offscreen.height = height;
13048
+ if (target.height !== height) {
13049
+ target.height = height;
13043
13050
  }
13044
13051
  };
13045
13052
  var defaultOnPaint = ({
@@ -13055,7 +13062,7 @@ var defaultOnPaint = ({
13055
13062
  const transform = ctx.drawElementImage(elementImage, 0, 0);
13056
13063
  element.style.transform = transform.toString();
13057
13064
  };
13058
- var HtmlInCanvasAncestorContext = createContext23(false);
13065
+ var HtmlInCanvasAncestorContext = createContext23(null);
13059
13066
  var HtmlInCanvasContent = forwardRef9(({
13060
13067
  width,
13061
13068
  height,
@@ -13067,20 +13074,22 @@ var HtmlInCanvasContent = forwardRef9(({
13067
13074
  controls,
13068
13075
  style
13069
13076
  }, ref) => {
13070
- const isInsideAncestorHtmlInCanvas = useContext31(HtmlInCanvasAncestorContext);
13077
+ const ancestor = useContext31(HtmlInCanvasAncestorContext);
13071
13078
  assertHtmlInCanvasDimensions(width, height);
13072
13079
  const resolvedPixelDensity = resolveHtmlInCanvasPixelDensity(pixelDensity);
13073
13080
  const canvasWidth = Math.ceil(width * resolvedPixelDensity);
13074
13081
  const canvasHeight = Math.ceil(height * resolvedPixelDensity);
13075
13082
  const { continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
13076
- const { isRendering } = useRemotionEnvironment();
13083
+ const { isClientSideRendering, isRendering } = useRemotionEnvironment();
13084
+ const canRetryMissingPaintRecord = !isRendering || isClientSideRendering;
13085
+ const usesDirectLayoutCanvas = onPaint === undefined && onInit === undefined;
13077
13086
  if (!isHtmlInCanvasSupported()) {
13078
13087
  cancelRender2(new Error(HTML_IN_CANVAS_UNSUPPORTED_MESSAGE));
13079
13088
  }
13080
13089
  const canvas2dRef = useRef22(null);
13081
- const offscreenRef = useRef22(null);
13090
+ const paintTargetRef = useRef22(null);
13082
13091
  const divRef = useRef22(null);
13083
- const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
13092
+ const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}-${usesDirectLayoutCanvas ? "direct" : "offscreen"}`;
13084
13093
  const setLayoutCanvasRef = useCallback16((node) => {
13085
13094
  canvas2dRef.current = node;
13086
13095
  if (typeof ref === "function") {
@@ -13103,17 +13112,19 @@ var HtmlInCanvasContent = forwardRef9(({
13103
13112
  const initializedRef = useRef22(false);
13104
13113
  const onInitCleanupRef = useRef22(null);
13105
13114
  const unmountedRef = useRef22(false);
13115
+ const ancestorRef = useRef22(ancestor);
13116
+ ancestorRef.current = ancestor;
13106
13117
  const onPaintCb = useCallback16(async () => {
13107
13118
  const element = divRef.current;
13108
13119
  if (!element) {
13109
13120
  throw new Error("Canvas or scene element not found");
13110
13121
  }
13111
- const offscreen = offscreenRef.current;
13112
- if (!offscreen) {
13113
- throw new Error("HtmlInCanvas: offscreen canvas not ready (transferControlToOffscreen failed or canvas is remounting)");
13122
+ const paintTarget = paintTargetRef.current;
13123
+ if (!paintTarget) {
13124
+ throw new Error("HtmlInCanvas: paint target is not ready because the canvas is remounting");
13114
13125
  }
13115
- resizeOffscreenCanvas({
13116
- offscreen,
13126
+ resizePaintTarget({
13127
+ target: paintTarget,
13117
13128
  width: canvasWidth,
13118
13129
  height: canvasHeight
13119
13130
  });
@@ -13124,22 +13135,30 @@ var HtmlInCanvasContent = forwardRef9(({
13124
13135
  }
13125
13136
  const handle = delayRender("onPaint");
13126
13137
  if (!initializedRef.current) {
13127
- let initImage = null;
13128
- try {
13129
- initImage = placeholderCanvas.captureElementImage(element);
13130
- } catch (error2) {
13131
- if (isMissingPaintRecordError(error2) && !isRendering) {} else if (isMissingPaintRecordError(error2)) {
13132
- throw new Error(missingPaintRecordMessage);
13133
- } else {
13138
+ const currentOnInit = onInitRef.current;
13139
+ if (!currentOnInit) {
13140
+ initializedRef.current = true;
13141
+ } else {
13142
+ let initImage;
13143
+ try {
13144
+ initImage = placeholderCanvas.captureElementImage(element);
13145
+ } catch (error2) {
13146
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
13147
+ continueRender2(handle);
13148
+ return;
13149
+ }
13150
+ if (isMissingPaintRecordError(error2)) {
13151
+ throw new Error(missingPaintRecordMessage);
13152
+ }
13134
13153
  throw error2;
13135
13154
  }
13136
- }
13137
- if (initImage) {
13138
13155
  initializedRef.current = true;
13139
- const currentOnInit = onInitRef.current;
13140
- if (currentOnInit) {
13156
+ try {
13157
+ if (paintTarget instanceof HTMLCanvasElement) {
13158
+ throw new Error("HtmlInCanvas: onInit requires an OffscreenCanvas paint target");
13159
+ }
13141
13160
  const cleanup = await currentOnInit({
13142
- canvas: offscreen,
13161
+ canvas: paintTarget,
13143
13162
  element,
13144
13163
  elementImage: initImage,
13145
13164
  pixelDensity: resolvedPixelDensity
@@ -13152,15 +13171,16 @@ var HtmlInCanvasContent = forwardRef9(({
13152
13171
  } else {
13153
13172
  onInitCleanupRef.current = cleanup;
13154
13173
  }
13174
+ } finally {
13175
+ initImage.close();
13155
13176
  }
13156
13177
  }
13157
13178
  }
13158
- const handler = onPaintRef.current ?? defaultOnPaint;
13159
13179
  let elImage;
13160
13180
  try {
13161
13181
  elImage = placeholderCanvas.captureElementImage(element);
13162
13182
  } catch (error2) {
13163
- if (isMissingPaintRecordError(error2) && !isRendering) {
13183
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
13164
13184
  continueRender2(handle);
13165
13185
  return;
13166
13186
  }
@@ -13169,20 +13189,41 @@ var HtmlInCanvasContent = forwardRef9(({
13169
13189
  }
13170
13190
  throw error2;
13171
13191
  }
13172
- await handler({
13173
- canvas: offscreen,
13174
- element,
13175
- elementImage: elImage,
13176
- pixelDensity: resolvedPixelDensity
13177
- });
13178
- await runEffectChain({
13179
- state: chainState.get(canvasWidth, canvasHeight),
13180
- source: offscreen,
13181
- effects: effectsRef.current,
13182
- output: offscreen,
13183
- width: canvasWidth,
13184
- height: canvasHeight
13185
- });
13192
+ try {
13193
+ const currentOnPaint = onPaintRef.current;
13194
+ if (currentOnPaint) {
13195
+ if (paintTarget instanceof HTMLCanvasElement) {
13196
+ throw new Error("HtmlInCanvas: onPaint requires an OffscreenCanvas paint target");
13197
+ }
13198
+ const paintResult = currentOnPaint({
13199
+ canvas: paintTarget,
13200
+ element,
13201
+ elementImage: elImage,
13202
+ pixelDensity: resolvedPixelDensity
13203
+ });
13204
+ if (paintResult) {
13205
+ await paintResult;
13206
+ }
13207
+ } else {
13208
+ defaultOnPaint({
13209
+ canvas: paintTarget,
13210
+ element,
13211
+ elementImage: elImage,
13212
+ pixelDensity: resolvedPixelDensity
13213
+ });
13214
+ }
13215
+ await runEffectChain({
13216
+ state: chainState.get(canvasWidth, canvasHeight),
13217
+ source: paintTarget,
13218
+ effects: effectsRef.current,
13219
+ output: paintTarget,
13220
+ width: canvasWidth,
13221
+ height: canvasHeight
13222
+ });
13223
+ } finally {
13224
+ elImage.close();
13225
+ }
13226
+ ancestorRef.current?.requestParentPaint();
13186
13227
  continueRender2(handle);
13187
13228
  } catch (error2) {
13188
13229
  cancelRender2(error2);
@@ -13194,7 +13235,7 @@ var HtmlInCanvasContent = forwardRef9(({
13194
13235
  continueRender2,
13195
13236
  cancelRender2,
13196
13237
  resolvedPixelDensity,
13197
- isRendering
13238
+ canRetryMissingPaintRecord
13198
13239
  ]);
13199
13240
  useLayoutEffect9(() => {
13200
13241
  const placeholder = canvas2dRef.current;
@@ -13202,10 +13243,10 @@ var HtmlInCanvasContent = forwardRef9(({
13202
13243
  throw new Error("Canvas not found");
13203
13244
  }
13204
13245
  placeholder.layoutSubtree = true;
13205
- const offscreen = placeholder.transferControlToOffscreen();
13206
- offscreenRef.current = offscreen;
13207
- resizeOffscreenCanvas({
13208
- offscreen,
13246
+ const paintTarget = usesDirectLayoutCanvas ? placeholder : placeholder.transferControlToOffscreen();
13247
+ paintTargetRef.current = paintTarget;
13248
+ resizePaintTarget({
13249
+ target: paintTarget,
13209
13250
  width: canvasWidth,
13210
13251
  height: canvasHeight
13211
13252
  });
@@ -13214,13 +13255,19 @@ var HtmlInCanvasContent = forwardRef9(({
13214
13255
  placeholder.addEventListener("paint", onPaintCb);
13215
13256
  return () => {
13216
13257
  placeholder.removeEventListener("paint", onPaintCb);
13217
- offscreenRef.current = null;
13258
+ paintTargetRef.current = null;
13218
13259
  initializedRef.current = false;
13219
13260
  unmountedRef.current = true;
13220
13261
  onInitCleanupRef.current?.();
13221
13262
  onInitCleanupRef.current = null;
13222
13263
  };
13223
- }, [onPaintCb, cancelRender2, canvasWidth, canvasHeight]);
13264
+ }, [
13265
+ onPaintCb,
13266
+ cancelRender2,
13267
+ canvasWidth,
13268
+ canvasHeight,
13269
+ usesDirectLayoutCanvas
13270
+ ]);
13224
13271
  const onPaintChangedRef = useRef22(false);
13225
13272
  useLayoutEffect9(() => {
13226
13273
  if (!onPaintChangedRef.current) {
@@ -13259,11 +13306,15 @@ var HtmlInCanvasContent = forwardRef9(({
13259
13306
  ...style ?? {}
13260
13307
  };
13261
13308
  }, [height, style, width]);
13262
- if (isInsideAncestorHtmlInCanvas) {
13263
- 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.");
13264
- }
13309
+ const ancestorValue = useMemo30(() => {
13310
+ return {
13311
+ requestParentPaint: () => {
13312
+ canvas2dRef.current?.requestPaint?.();
13313
+ }
13314
+ };
13315
+ }, []);
13265
13316
  return /* @__PURE__ */ jsx25(HtmlInCanvasAncestorContext.Provider, {
13266
- value: true,
13317
+ value: ancestorValue,
13267
13318
  children: /* @__PURE__ */ jsx25("canvas", {
13268
13319
  ref: setLayoutCanvasRef,
13269
13320
  width: canvasWidth,
@@ -15633,66 +15684,130 @@ var flattenChildren = (children) => {
15633
15684
  return flatChildren;
15634
15685
  }, []);
15635
15686
  };
15636
- var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
15687
+ var seriesSequenceSchema = {
15688
+ durationInFrames: Interactive.baseSchema.durationInFrames,
15689
+ name: Interactive.sequenceSchema.name,
15690
+ hidden: Interactive.sequenceSchema.hidden,
15691
+ showInTimeline: Interactive.sequenceSchema.showInTimeline,
15692
+ freeze: Interactive.baseSchema.freeze,
15693
+ layout: Interactive.sequenceSchema.layout
15694
+ };
15695
+ var SeriesSequenceInner = forwardRef14(({
15696
+ offset = 0,
15697
+ className = "",
15698
+ stack = null,
15699
+ _remotionInternalRender = null,
15700
+ ...props2
15701
+ }, ref) => {
15637
15702
  useRequireToBeInsideSeries();
15703
+ if (_remotionInternalRender) {
15704
+ return _remotionInternalRender({ ...props2, offset, className: className || undefined, stack }, ref);
15705
+ }
15638
15706
  return /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
15639
- children
15707
+ children: props2.children
15640
15708
  });
15641
- };
15642
- var SeriesSequence = forwardRef14(SeriesSequenceRefForwardingFunction);
15709
+ });
15710
+ var SeriesSequence = Interactive.withSchema({
15711
+ Component: SeriesSequenceInner,
15712
+ componentName: "<Series.Sequence>",
15713
+ componentIdentity: "dev.remotion.remotion.Series.Sequence",
15714
+ schema: seriesSequenceSchema,
15715
+ supportsEffects: false
15716
+ });
15643
15717
  var SequenceWithoutSchemaWithRef = SequenceWithoutSchema;
15718
+ var validateSeriesSequenceProps = ({
15719
+ durationInFrames,
15720
+ offset: offsetProp,
15721
+ index,
15722
+ childrenLength
15723
+ }) => {
15724
+ const debugInfo = `index = ${index}, duration = ${durationInFrames}`;
15725
+ if (index !== childrenLength - 1 || durationInFrames !== Infinity) {
15726
+ validateDurationInFrames(durationInFrames, {
15727
+ component: `of a <Series.Sequence /> component`,
15728
+ allowFloats: true
15729
+ });
15730
+ }
15731
+ const offset = offsetProp ?? 0;
15732
+ if (Number.isNaN(offset)) {
15733
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`);
15734
+ }
15735
+ if (!Number.isFinite(offset)) {
15736
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
15737
+ }
15738
+ if (offset % 1 !== 0) {
15739
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
15740
+ }
15741
+ return offset;
15742
+ };
15644
15743
  var SeriesInner = (props2) => {
15645
15744
  const childrenValue = useMemo38(() => {
15646
- let startFrame = 0;
15647
15745
  const flattenedChildren = flattenChildren(props2.children);
15648
- return Children.map(flattenedChildren, (child, i) => {
15746
+ const renderChildren = (i, startFrame) => {
15747
+ if (i === flattenedChildren.length) {
15748
+ return null;
15749
+ }
15750
+ const child = flattenedChildren[i];
15649
15751
  const castedChild = child;
15650
15752
  if (typeof castedChild === "string") {
15651
15753
  if (castedChild.trim() === "") {
15652
- return null;
15754
+ return renderChildren(i + 1, startFrame);
15653
15755
  }
15654
15756
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but you passed a string "${castedChild}"`);
15655
15757
  }
15656
15758
  if (castedChild.type !== SeriesSequence) {
15657
15759
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but got ${castedChild} instead`);
15658
15760
  }
15659
- const debugInfo = `index = ${i}, duration = ${castedChild.props.durationInFrames}`;
15660
- const durationInFramesProp = castedChild.props.durationInFrames;
15661
- const {
15662
- durationInFrames,
15663
- children: _children,
15664
- from,
15665
- name,
15666
- ...passedProps
15667
- } = castedChild.props;
15668
- if (i !== flattenedChildren.length - 1 || durationInFramesProp !== Infinity) {
15669
- validateDurationInFrames(durationInFramesProp, {
15670
- component: `of a <Series.Sequence /> component`,
15671
- allowFloats: true
15672
- });
15673
- }
15674
- const offset = castedChild.props.offset ?? 0;
15675
- if (Number.isNaN(offset)) {
15676
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`);
15677
- }
15678
- if (!Number.isFinite(offset)) {
15679
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
15680
- }
15681
- if (offset % 1 !== 0) {
15682
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
15683
- }
15684
- const currentStartFrame = startFrame + offset;
15685
- startFrame += durationInFramesProp + offset;
15686
- return /* @__PURE__ */ jsx37(SequenceWithoutSchemaWithRef, {
15687
- ref: castedChild.ref,
15688
- name: name || "<Series.Sequence>",
15689
- _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
15690
- from: currentStartFrame,
15691
- durationInFrames: durationInFramesProp,
15692
- ...passedProps,
15693
- children: child
15761
+ const castedElement = castedChild;
15762
+ validateSeriesSequenceProps({
15763
+ durationInFrames: castedElement.props.durationInFrames,
15764
+ offset: castedElement.props.offset,
15765
+ index: i,
15766
+ childrenLength: flattenedChildren.length
15694
15767
  });
15695
- });
15768
+ return React41.cloneElement(castedElement, {
15769
+ _remotionInternalRender: (resolvedProps, ref) => {
15770
+ const durationInFramesProp = resolvedProps.durationInFrames;
15771
+ const {
15772
+ durationInFrames: _durationInFrames,
15773
+ children: sequenceChildren,
15774
+ offset: offsetProp,
15775
+ controls,
15776
+ stack,
15777
+ from: _from,
15778
+ name,
15779
+ ...passedProps
15780
+ } = resolvedProps;
15781
+ const offset = validateSeriesSequenceProps({
15782
+ durationInFrames: durationInFramesProp,
15783
+ offset: offsetProp,
15784
+ index: i,
15785
+ childrenLength: flattenedChildren.length
15786
+ });
15787
+ const currentStartFrame = startFrame + offset;
15788
+ const nextStartFrame = startFrame + durationInFramesProp + offset;
15789
+ return /* @__PURE__ */ jsxs3(Fragment, {
15790
+ children: [
15791
+ /* @__PURE__ */ jsx37(SequenceWithoutSchemaWithRef, {
15792
+ ref,
15793
+ name: name || "<Series.Sequence>",
15794
+ _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
15795
+ _remotionInternalStack: stack ?? undefined,
15796
+ controls: controls ?? undefined,
15797
+ from: currentStartFrame,
15798
+ durationInFrames: durationInFramesProp,
15799
+ ...passedProps,
15800
+ children: /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
15801
+ children: sequenceChildren
15802
+ })
15803
+ }),
15804
+ renderChildren(i + 1, nextStartFrame)
15805
+ ]
15806
+ });
15807
+ }
15808
+ });
15809
+ };
15810
+ return renderChildren(0, 0);
15696
15811
  }, [props2.children]);
15697
15812
  return /* @__PURE__ */ jsx37(IsInsideSeriesContainer, {
15698
15813
  children: /* @__PURE__ */ jsx37(Sequence, {
@@ -16293,7 +16408,7 @@ addSequenceStackTraces(Folder);
16293
16408
  // ../shapes/dist/esm/index.mjs
16294
16409
  import React, { useCallback as useCallback26, useMemo as useMemo40, useRef as useRef29 } from "react";
16295
16410
  import { version } from "react-dom";
16296
- import { jsx as jsx40, jsxs as jsxs3 } from "react/jsx-runtime";
16411
+ import { jsx as jsx40, jsxs as jsxs4 } from "react/jsx-runtime";
16297
16412
  import { jsx as jsx210 } from "react/jsx-runtime";
16298
16413
  import { jsx as jsx310 } from "react/jsx-runtime";
16299
16414
  import { jsx as jsx42 } from "react/jsx-runtime";
@@ -16495,7 +16610,7 @@ var RenderSvg = ({
16495
16610
  const memoizedEffectDefinitions = Internals.useMemoizedEffectDefinitions(effects);
16496
16611
  const videoConfig = Internals.useUnsafeVideoConfig();
16497
16612
  const reactSupportsTransformOrigin = doesReactSupportTransformOriginProperty(version);
16498
- const svg = /* @__PURE__ */ jsxs3("svg", {
16613
+ const svg = /* @__PURE__ */ jsxs4("svg", {
16499
16614
  ref: effects.length === 0 || !videoConfig ? setSvgRef : undefined,
16500
16615
  width,
16501
16616
  height,
@@ -16521,7 +16636,7 @@ var RenderSvg = ({
16521
16636
  }
16522
16637
  const prevX = prevInstruction.x;
16523
16638
  const prevY = prevInstruction.y;
16524
- return /* @__PURE__ */ jsxs3(React.Fragment, {
16639
+ return /* @__PURE__ */ jsxs4(React.Fragment, {
16525
16640
  children: [
16526
16641
  /* @__PURE__ */ jsx40("path", {
16527
16642
  d: `M ${prevX} ${prevY} ${i.cp1x} ${i.cp1y}`,
@@ -19203,7 +19318,7 @@ var extrudeAndTransformElement = (options) => {
19203
19318
 
19204
19319
  // ../design/dist/esm/index.mjs
19205
19320
  import { jsx as jsx212, Fragment as Fragment3 } from "react/jsx-runtime";
19206
- import { jsx as jsx312, jsxs as jsxs5 } from "react/jsx-runtime";
19321
+ import { jsx as jsx312, jsxs as jsxs6 } from "react/jsx-runtime";
19207
19322
  import { useEffect as useEffect22, useMemo as useMemo210, useRef as useRef31 } from "react";
19208
19323
  import { jsx as jsx44 } from "react/jsx-runtime";
19209
19324
  import { jsx as jsx53, jsxs as jsxs22 } from "react/jsx-runtime";
@@ -19262,11 +19377,11 @@ import * as React302 from "react";
19262
19377
  import * as React342 from "react";
19263
19378
  import * as React332 from "react";
19264
19379
  import * as React322 from "react";
19265
- import { Fragment as Fragment8, jsx as jsx242, jsxs as jsxs4 } from "react/jsx-runtime";
19380
+ import { Fragment as Fragment8, jsx as jsx242, jsxs as jsxs42 } from "react/jsx-runtime";
19266
19381
  import { forwardRef as forwardRef142, createElement as createElement7 } from "react";
19267
19382
  import { forwardRef as forwardRef132, createElement as createElement6 } from "react";
19268
19383
  import * as React372 from "react";
19269
- import { jsx as jsx252, jsxs as jsxs52 } from "react/jsx-runtime";
19384
+ import { jsx as jsx252, jsxs as jsxs5 } from "react/jsx-runtime";
19270
19385
  import { jsx as jsx262 } from "react/jsx-runtime";
19271
19386
  import * as React49 from "react";
19272
19387
  import * as React38 from "react";
@@ -19274,12 +19389,12 @@ import { jsx as jsx272 } from "react/jsx-runtime";
19274
19389
  import * as React47 from "react";
19275
19390
  import React402 from "react";
19276
19391
  import * as React392 from "react";
19277
- import { Fragment as Fragment22, jsx as jsx282 } from "react/jsx-runtime";
19392
+ import { Fragment as Fragment222, jsx as jsx282 } from "react/jsx-runtime";
19278
19393
  import { jsx as jsx292 } from "react/jsx-runtime";
19279
19394
  import React210 from "react";
19280
19395
  import { jsx as jsx2102 } from "react/jsx-runtime";
19281
19396
  import * as React422 from "react";
19282
- import * as React41 from "react";
19397
+ import * as React412 from "react";
19283
19398
  import * as React43 from "react";
19284
19399
  import * as ReactDOM5 from "react-dom";
19285
19400
  import { jsx as jsx302 } from "react/jsx-runtime";
@@ -19389,7 +19504,7 @@ function createSlotClone(ownerName) {
19389
19504
  var SLOTTABLE_IDENTIFIER = Symbol("radix.slottable");
19390
19505
  function createSlottable(ownerName) {
19391
19506
  const Slottable2 = ({ children }) => {
19392
- return /* @__PURE__ */ jsx43(Fragment2, { children });
19507
+ return /* @__PURE__ */ jsx43(Fragment22, { children });
19393
19508
  };
19394
19509
  Slottable2.displayName = `${ownerName}.Slottable`;
19395
19510
  Slottable2.__radixId = SLOTTABLE_IDENTIFIER;
@@ -19686,7 +19801,7 @@ var Outer = ({
19686
19801
  description: "rect",
19687
19802
  transformations: centerOriented
19688
19803
  });
19689
- return /* @__PURE__ */ jsxs5("div", {
19804
+ return /* @__PURE__ */ jsxs6("div", {
19690
19805
  className: "relative",
19691
19806
  style: { width, height },
19692
19807
  children: [
@@ -23734,7 +23849,7 @@ var Select = (props) => {
23734
23849
  const isFormControl = trigger ? Boolean(trigger.closest("form")) : true;
23735
23850
  const [nativeOptionsSet, setNativeOptionsSet] = React36.useState(/* @__PURE__ */ new Set);
23736
23851
  const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(";");
23737
- return /* @__PURE__ */ jsx242(Root22, { ...popperScope, children: /* @__PURE__ */ jsxs4(SelectProvider, {
23852
+ return /* @__PURE__ */ jsx242(Root22, { ...popperScope, children: /* @__PURE__ */ jsxs42(SelectProvider, {
23738
23853
  required,
23739
23854
  scope: __scopeSelect,
23740
23855
  trigger,
@@ -23766,7 +23881,7 @@ var Select = (props) => {
23766
23881
  }, []),
23767
23882
  children
23768
23883
  }) }),
23769
- isFormControl ? /* @__PURE__ */ jsxs4(BubbleSelect, {
23884
+ isFormControl ? /* @__PURE__ */ jsxs42(BubbleSelect, {
23770
23885
  "aria-hidden": true,
23771
23886
  required,
23772
23887
  tabIndex: -1,
@@ -24274,7 +24389,7 @@ var SelectViewport = React36.forwardRef((props, forwardedRef) => {
24274
24389
  const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);
24275
24390
  const composedRefs = useComposedRefs2(forwardedRef, contentContext.onViewportChange);
24276
24391
  const prevScrollTopRef = React36.useRef(0);
24277
- return /* @__PURE__ */ jsxs4(Fragment8, { children: [
24392
+ return /* @__PURE__ */ jsxs42(Fragment8, { children: [
24278
24393
  /* @__PURE__ */ jsx242("style", {
24279
24394
  dangerouslySetInnerHTML: {
24280
24395
  __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`
@@ -24431,7 +24546,7 @@ var SelectItemText = React36.forwardRef((props, forwardedRef) => {
24431
24546
  onNativeOptionAdd(nativeOption);
24432
24547
  return () => onNativeOptionRemove(nativeOption);
24433
24548
  }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);
24434
- return /* @__PURE__ */ jsxs4(Fragment8, { children: [
24549
+ return /* @__PURE__ */ jsxs42(Fragment8, { children: [
24435
24550
  /* @__PURE__ */ jsx242(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),
24436
24551
  itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM4.createPortal(itemTextProps.children, context.valueNode) : null
24437
24552
  ] });
@@ -24690,7 +24805,7 @@ var ChevronDown = createLucideIcon("ChevronDown", [
24690
24805
  var ChevronUp = createLucideIcon("ChevronUp", [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]]);
24691
24806
  var Select2 = Root222;
24692
24807
  var SelectValue2 = Value;
24693
- var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Trigger, {
24808
+ var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(Trigger, {
24694
24809
  ref,
24695
24810
  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),
24696
24811
  ...props,
@@ -24724,7 +24839,7 @@ var SelectScrollDownButton2 = React372.forwardRef(({ className, ...props }, ref)
24724
24839
  }));
24725
24840
  SelectScrollDownButton2.displayName = ScrollDownButton.displayName;
24726
24841
  var SelectContent2 = React372.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx252(Portal2, {
24727
- children: /* @__PURE__ */ jsxs52(Content2, {
24842
+ children: /* @__PURE__ */ jsxs5(Content2, {
24728
24843
  ref,
24729
24844
  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),
24730
24845
  position,
@@ -24746,7 +24861,7 @@ var SelectLabel2 = React372.forwardRef(({ className, ...props }, ref) => /* @__P
24746
24861
  ...props
24747
24862
  }));
24748
24863
  SelectLabel2.displayName = Label.displayName;
24749
- var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Item, {
24864
+ var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(Item, {
24750
24865
  ref,
24751
24866
  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),
24752
24867
  ...props,
@@ -25288,7 +25403,7 @@ function toSafeIndex(array, index2) {
25288
25403
  function toSafeInteger(number) {
25289
25404
  return number !== number || number === 0 ? 0 : Math.trunc(number);
25290
25405
  }
25291
- var useLayoutEffect222 = globalThis?.document ? React41.useLayoutEffect : () => {};
25406
+ var useLayoutEffect222 = globalThis?.document ? React412.useLayoutEffect : () => {};
25292
25407
  var useReactId2 = React422[" useId ".trim().toString()] || (() => {
25293
25408
  return;
25294
25409
  });
@@ -27224,7 +27339,7 @@ function cn2(...inputs) {
27224
27339
  }
27225
27340
 
27226
27341
  // src/components/homepage/PricingBulletPoint.tsx
27227
- import { jsx as jsx45, jsxs as jsxs6 } from "react/jsx-runtime";
27342
+ import { jsx as jsx45, jsxs as jsxs7 } from "react/jsx-runtime";
27228
27343
  var container3 = {
27229
27344
  display: "flex",
27230
27345
  flexDirection: "row",
@@ -27238,7 +27353,7 @@ var greyCircle = {
27238
27353
  backgroundColor: "var(--footer-border)"
27239
27354
  };
27240
27355
  var PricingBulletPoint = ({ text, checked, children }) => {
27241
- const checkmarkSVG = /* @__PURE__ */ jsxs6("svg", {
27356
+ const checkmarkSVG = /* @__PURE__ */ jsxs7("svg", {
27242
27357
  width: "20",
27243
27358
  height: "20",
27244
27359
  viewBox: "0 0 20 20",
@@ -27260,13 +27375,13 @@ var PricingBulletPoint = ({ text, checked, children }) => {
27260
27375
  })
27261
27376
  ]
27262
27377
  });
27263
- return /* @__PURE__ */ jsxs6("div", {
27378
+ return /* @__PURE__ */ jsxs7("div", {
27264
27379
  style: container3,
27265
27380
  children: [
27266
27381
  checked ? checkmarkSVG : /* @__PURE__ */ jsx45("div", {
27267
27382
  style: greyCircle
27268
27383
  }),
27269
- /* @__PURE__ */ jsxs6("div", {
27384
+ /* @__PURE__ */ jsxs7("div", {
27270
27385
  className: "fontbrand text-lg\t",
27271
27386
  children: [
27272
27387
  text,
@@ -27278,7 +27393,7 @@ var PricingBulletPoint = ({ text, checked, children }) => {
27278
27393
  };
27279
27394
 
27280
27395
  // src/components/homepage/FreePricing.tsx
27281
- import { jsx as jsx46, jsxs as jsxs7, Fragment as Fragment9 } from "react/jsx-runtime";
27396
+ import { jsx as jsx46, jsxs as jsxs8, Fragment as Fragment9 } from "react/jsx-runtime";
27282
27397
  var Container = ({
27283
27398
  children
27284
27399
  }) => {
@@ -27322,7 +27437,7 @@ var icon = {
27322
27437
  };
27323
27438
  var PricingSlider = ({ value, onChange, min: min2, max: max2, step = 1, "aria-label": ariaLabel }) => {
27324
27439
  const percentage = (value - min2) / (max2 - min2) * 100;
27325
- return /* @__PURE__ */ jsxs7(Fragment9, {
27440
+ return /* @__PURE__ */ jsxs8(Fragment9, {
27326
27441
  children: [
27327
27442
  /* @__PURE__ */ jsx46("style", {
27328
27443
  children: `
@@ -27379,7 +27494,7 @@ var textUnitWrapper = {
27379
27494
  flexDirection: "column"
27380
27495
  };
27381
27496
  var FreePricing = () => {
27382
- return /* @__PURE__ */ jsxs7(Container, {
27497
+ return /* @__PURE__ */ jsxs8(Container, {
27383
27498
  children: [
27384
27499
  /* @__PURE__ */ jsx46(Audience, {
27385
27500
  children: "For individuals and companies of up to 3 people"
@@ -27410,7 +27525,7 @@ var FreePricing = () => {
27410
27525
  ...textUnitWrapper,
27411
27526
  alignItems: "flex-end"
27412
27527
  },
27413
- children: /* @__PURE__ */ jsxs7("a", {
27528
+ children: /* @__PURE__ */ jsxs8("a", {
27414
27529
  target: "_blank",
27415
27530
  href: "https://www.remotion.dev/docs",
27416
27531
  className: "font-brand text-brand flex flex-row items-center gap-1 no-underline",
@@ -27434,7 +27549,7 @@ var FreePricing = () => {
27434
27549
  });
27435
27550
  };
27436
27551
  var EnterpriseLicense = () => {
27437
- return /* @__PURE__ */ jsxs7(Container, {
27552
+ return /* @__PURE__ */ jsxs8(Container, {
27438
27553
  children: [
27439
27554
  /* @__PURE__ */ jsx46(Audience, {
27440
27555
  children: "For advanced needs"
@@ -27467,7 +27582,7 @@ var EnterpriseLicense = () => {
27467
27582
  checked: true
27468
27583
  }),
27469
27584
  /* @__PURE__ */ jsx46(PricingBulletPoint, {
27470
- text: /* @__PURE__ */ jsxs7("span", {
27585
+ text: /* @__PURE__ */ jsxs8("span", {
27471
27586
  children: [
27472
27587
  /* @__PURE__ */ jsx46("a", {
27473
27588
  href: "https://www.remotion.dev/editor-starter",
@@ -27485,7 +27600,7 @@ var EnterpriseLicense = () => {
27485
27600
  }),
27486
27601
  /* @__PURE__ */ jsx46("div", {
27487
27602
  className: "flex flex-row justify-end",
27488
- children: /* @__PURE__ */ jsxs7("div", {
27603
+ children: /* @__PURE__ */ jsxs8("div", {
27489
27604
  style: {
27490
27605
  ...textUnitWrapper,
27491
27606
  alignItems: "flex-end"
@@ -27512,7 +27627,7 @@ var EnterpriseLicense = () => {
27512
27627
  var SEAT_PRICE = 25;
27513
27628
  var RENDER_UNIT_PRICE = 10;
27514
27629
  var SectionCheckbox = ({ checked, onChange, title, subtitle, children }) => {
27515
- return /* @__PURE__ */ jsxs7("div", {
27630
+ return /* @__PURE__ */ jsxs8("div", {
27516
27631
  className: "flex flex-row gap-3 cursor-pointer select-none items-center",
27517
27632
  onClick: () => onChange(!checked),
27518
27633
  children: [
@@ -27521,10 +27636,10 @@ var SectionCheckbox = ({ checked, onChange, title, subtitle, children }) => {
27521
27636
  onToggle: () => onChange(!checked),
27522
27637
  "aria-label": title
27523
27638
  }),
27524
- /* @__PURE__ */ jsxs7("div", {
27639
+ /* @__PURE__ */ jsxs8("div", {
27525
27640
  className: "flex flex-col",
27526
27641
  children: [
27527
- /* @__PURE__ */ jsxs7("div", {
27642
+ /* @__PURE__ */ jsxs8("div", {
27528
27643
  className: "fontbrand font-bold text-lg flex flex-row items-center gap-1",
27529
27644
  children: [
27530
27645
  title,
@@ -27574,7 +27689,7 @@ var CompanyPricing = () => {
27574
27689
  }, [formatPrice, totalPrice]);
27575
27690
  const showMinimumMessage = automatorsSelected && creatorsPrice + automatorsPrice < 100;
27576
27691
  const showEnterpriseMessage = totalPrice >= 500;
27577
- return /* @__PURE__ */ jsxs7(Container, {
27692
+ return /* @__PURE__ */ jsxs8(Container, {
27578
27693
  children: [
27579
27694
  /* @__PURE__ */ jsx46(Audience, {
27580
27695
  children: "For collaborations and companies of 4+ people"
@@ -27617,14 +27732,14 @@ var CompanyPricing = () => {
27617
27732
  transition: automatorsSelected ? "grid-template-rows 150ms ease-out, opacity 150ms ease-out 75ms" : "opacity 150ms ease-out, grid-template-rows 150ms ease-out 75ms"
27618
27733
  },
27619
27734
  inert: !automatorsSelected,
27620
- children: /* @__PURE__ */ jsxs7("div", {
27735
+ children: /* @__PURE__ */ jsxs8("div", {
27621
27736
  className: "overflow-hidden",
27622
27737
  children: [
27623
27738
  /* @__PURE__ */ jsx46("p", {
27624
27739
  className: "text-sm text-muted fontbrand pt-3 pb-1",
27625
27740
  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."
27626
27741
  }),
27627
- /* @__PURE__ */ jsxs7("div", {
27742
+ /* @__PURE__ */ jsxs8("div", {
27628
27743
  className: "flex flex-row items-center gap-3 sm:gap-4 w-full pt-3 pb-1",
27629
27744
  children: [
27630
27745
  /* @__PURE__ */ jsx46("div", {
@@ -27638,14 +27753,14 @@ var CompanyPricing = () => {
27638
27753
  "aria-label": "Number of renders"
27639
27754
  })
27640
27755
  }),
27641
- /* @__PURE__ */ jsxs7("div", {
27756
+ /* @__PURE__ */ jsxs8("div", {
27642
27757
  className: "fontbrand shrink-0 whitespace-nowrap w-[135px] sm:w-[150px] text-right tabular-nums",
27643
27758
  children: [
27644
27759
  new Intl.NumberFormat("en-US").format(cloudRenders),
27645
27760
  " Renders"
27646
27761
  ]
27647
27762
  }),
27648
- /* @__PURE__ */ jsxs7("div", {
27763
+ /* @__PURE__ */ jsxs8("div", {
27649
27764
  className: "fontbrand font-bold min-w-[60px] text-right shrink-0 whitespace-nowrap tabular-nums",
27650
27765
  children: [
27651
27766
  "$",
@@ -27674,14 +27789,14 @@ var CompanyPricing = () => {
27674
27789
  transition: creatorsSelected ? "grid-template-rows 150ms ease-out, opacity 150ms ease-out 75ms" : "opacity 150ms ease-out, grid-template-rows 150ms ease-out 75ms"
27675
27790
  },
27676
27791
  inert: !creatorsSelected,
27677
- children: /* @__PURE__ */ jsxs7("div", {
27792
+ children: /* @__PURE__ */ jsxs8("div", {
27678
27793
  className: "overflow-hidden",
27679
27794
  children: [
27680
27795
  /* @__PURE__ */ jsx46("p", {
27681
27796
  className: "text-sm text-muted fontbrand pt-3 pb-1",
27682
27797
  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."
27683
27798
  }),
27684
- /* @__PURE__ */ jsxs7("div", {
27799
+ /* @__PURE__ */ jsxs8("div", {
27685
27800
  className: "flex flex-row items-center gap-3 sm:gap-4 w-full pt-3 pb-1",
27686
27801
  children: [
27687
27802
  /* @__PURE__ */ jsx46("div", {
@@ -27694,7 +27809,7 @@ var CompanyPricing = () => {
27694
27809
  "aria-label": "Number of seats"
27695
27810
  })
27696
27811
  }),
27697
- /* @__PURE__ */ jsxs7("div", {
27812
+ /* @__PURE__ */ jsxs8("div", {
27698
27813
  className: "fontbrand shrink-0 whitespace-nowrap w-[135px] sm:w-[150px] text-center tabular-nums",
27699
27814
  children: [
27700
27815
  devSeatCount,
@@ -27702,7 +27817,7 @@ var CompanyPricing = () => {
27702
27817
  devSeatCount === 1 ? "Seat" : "Seats"
27703
27818
  ]
27704
27819
  }),
27705
- /* @__PURE__ */ jsxs7("div", {
27820
+ /* @__PURE__ */ jsxs8("div", {
27706
27821
  className: "fontbrand font-bold min-w-[60px] text-right shrink-0 whitespace-nowrap tabular-nums",
27707
27822
  children: [
27708
27823
  "$",
@@ -27719,14 +27834,14 @@ var CompanyPricing = () => {
27719
27834
  /* @__PURE__ */ jsx46("div", {
27720
27835
  style: { height: 14 }
27721
27836
  }),
27722
- /* @__PURE__ */ jsxs7("div", {
27837
+ /* @__PURE__ */ jsxs8("div", {
27723
27838
  className: "flex flex-row items-baseline justify-end gap-2",
27724
27839
  children: [
27725
27840
  /* @__PURE__ */ jsx46("div", {
27726
27841
  className: "fontbrand text-muted text-sm",
27727
27842
  children: "Total"
27728
27843
  }),
27729
- /* @__PURE__ */ jsxs7(PriceTag, {
27844
+ /* @__PURE__ */ jsxs8(PriceTag, {
27730
27845
  children: [
27731
27846
  totalPriceString,
27732
27847
  "/month"
@@ -27734,7 +27849,7 @@ var CompanyPricing = () => {
27734
27849
  })
27735
27850
  ]
27736
27851
  }),
27737
- /* @__PURE__ */ jsxs7("div", {
27852
+ /* @__PURE__ */ jsxs8("div", {
27738
27853
  className: "flex flex-col items-end",
27739
27854
  children: [
27740
27855
  /* @__PURE__ */ jsx46(BottomInfo, {
@@ -27742,7 +27857,7 @@ var CompanyPricing = () => {
27742
27857
  className: "opacity-0 data-[visible=true]:opacity-100 transition-opacity mt-1",
27743
27858
  children: "The minimum is $100 per month for Remotion for Automators"
27744
27859
  }),
27745
- /* @__PURE__ */ jsxs7(BottomInfo, {
27860
+ /* @__PURE__ */ jsxs8(BottomInfo, {
27746
27861
  "data-visible": showEnterpriseMessage,
27747
27862
  className: "opacity-0 data-[visible=true]:opacity-100 transition-opacity mt-1",
27748
27863
  children: [
@@ -27768,7 +27883,7 @@ var CompanyPricing = () => {
27768
27883
  ...textUnitWrapper,
27769
27884
  alignItems: "flex-end"
27770
27885
  },
27771
- children: /* @__PURE__ */ jsxs7("a", {
27886
+ children: /* @__PURE__ */ jsxs8("a", {
27772
27887
  href: "https://remotion.pro/dashboard",
27773
27888
  className: "font-brand text-brand flex flex-row items-center gap-1 no-underline",
27774
27889
  children: [
@@ -27792,12 +27907,12 @@ var CompanyPricing = () => {
27792
27907
  };
27793
27908
 
27794
27909
  // src/components/homepage/Pricing.tsx
27795
- import { jsx as jsx47, jsxs as jsxs8 } from "react/jsx-runtime";
27910
+ import { jsx as jsx47, jsxs as jsxs9 } from "react/jsx-runtime";
27796
27911
  var Pricing = ({
27797
27912
  faqHref = "/docs/license/faq",
27798
27913
  faqLabel = "License FAQ",
27799
27914
  licenseHref = "https://github.com/remotion-dev/remotion/blob/main/LICENSE.md",
27800
- termsHref = "https://www.remotion.pro/terms"
27915
+ termsHref = "/docs/license/terms"
27801
27916
  }) => {
27802
27917
  const faqLinkTarget = useMemo52(() => {
27803
27918
  return faqHref.startsWith("http") ? "_blank" : undefined;
@@ -27808,7 +27923,7 @@ var Pricing = ({
27808
27923
  const termsLinkTarget = useMemo52(() => {
27809
27924
  return termsHref.startsWith("http") ? "_blank" : undefined;
27810
27925
  }, [termsHref]);
27811
- return /* @__PURE__ */ jsxs8("div", {
27926
+ return /* @__PURE__ */ jsxs9("div", {
27812
27927
  style: {
27813
27928
  display: "flex",
27814
27929
  flexDirection: "column",
@@ -27824,7 +27939,7 @@ var Pricing = ({
27824
27939
  justifyContent: "center",
27825
27940
  display: "flex"
27826
27941
  },
27827
- children: /* @__PURE__ */ jsxs8("div", {
27942
+ children: /* @__PURE__ */ jsxs9("div", {
27828
27943
  style: {
27829
27944
  fontFamily: "GTPlanar"
27830
27945
  },