@remotion/promo-pages 4.0.489 → 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.
Files changed (29) hide show
  1. package/dist/Homepage.js +1018 -556
  2. package/dist/components/Homepage.js +5 -17
  3. package/dist/components/homepage/CommunityStatsItems.js +1 -1
  4. package/dist/components/homepage/Demo/Card.d.ts +3 -3
  5. package/dist/components/homepage/Demo/DemoRender.d.ts +1 -1
  6. package/dist/components/homepage/Demo/DisplayedEmoji.js +12 -4
  7. package/dist/components/homepage/Demo/math.d.ts +1 -1
  8. package/dist/components/homepage/GitHubButton.js +1 -1
  9. package/dist/components/homepage/MakeVideosAgentically.d.ts +1 -0
  10. package/dist/components/homepage/MakeVideosAgentically.js +4 -6
  11. package/dist/components/homepage/MakeVideosInteractively.d.ts +2 -0
  12. package/dist/components/homepage/MakeVideosInteractively.js +3 -6
  13. package/dist/components/homepage/MakeVideosLinks.js +1 -1
  14. package/dist/components/homepage/MakeVideosProgrammatically.d.ts +2 -0
  15. package/dist/components/homepage/MakeVideosProgrammatically.js +2 -5
  16. package/dist/components/homepage/Pricing.d.ts +6 -1
  17. package/dist/components/homepage/Pricing.js +12 -2
  18. package/dist/components/homepage/WriteInReact.js +1 -1
  19. package/dist/components/team/TrustSection.js +1 -1
  20. package/dist/design.js +355 -194
  21. package/dist/experts.js +340 -168
  22. package/dist/homepage/Pricing.js +372 -211
  23. package/dist/prompts/PromptsGallery.js +352 -191
  24. package/dist/prompts/PromptsShow.js +358 -197
  25. package/dist/prompts/PromptsSubmit.js +344 -183
  26. package/dist/team.js +329 -168
  27. package/dist/template-modal-content.js +372 -211
  28. package/dist/templates.js +373 -209
  29. package/package.json +13 -13
@@ -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 {
@@ -5282,26 +5281,20 @@ var continueRenderInternal = ({
5282
5281
  if (typeof handle !== "number") {
5283
5282
  throw new TypeError("The parameter passed into continueRender() must be the return value of delayRender() which is a number. Got: " + JSON.stringify(handle));
5284
5283
  }
5285
- scope.remotion_delayRenderHandles = scope.remotion_delayRenderHandles.filter((h) => {
5286
- if (h === handle) {
5287
- if (environment.isRendering && scope !== undefined) {
5288
- if (!scope.remotion_delayRenderTimeouts[handle]) {
5289
- return false;
5290
- }
5291
- const { label: label2, startTime, timeout } = scope.remotion_delayRenderTimeouts[handle];
5292
- clearTimeout(timeout);
5293
- const message = [
5294
- label2 ? `"${label2}"` : "A handle",
5295
- DELAY_RENDER_CLEAR_TOKEN,
5296
- `${Date.now() - startTime}ms`
5297
- ].filter(truthy).join(" ");
5298
- Log.verbose({ logLevel, tag: "delayRender()" }, message);
5299
- delete scope.remotion_delayRenderTimeouts[handle];
5300
- }
5301
- return false;
5302
- }
5303
- return true;
5304
- });
5284
+ const handleExists = scope.remotion_delayRenderHandles.includes(handle);
5285
+ const timeoutEntry = scope.remotion_delayRenderTimeouts[handle];
5286
+ if (handleExists && environment.isRendering && timeoutEntry) {
5287
+ const { label: label2, startTime, timeout } = timeoutEntry;
5288
+ clearTimeout(timeout);
5289
+ const message = [
5290
+ label2 ? `"${label2}"` : "A handle",
5291
+ DELAY_RENDER_CLEAR_TOKEN,
5292
+ `${Date.now() - startTime}ms`
5293
+ ].filter(truthy).join(" ");
5294
+ Log.verbose({ logLevel, tag: "delayRender()" }, message);
5295
+ delete scope.remotion_delayRenderTimeouts[handle];
5296
+ }
5297
+ scope.remotion_delayRenderHandles = scope.remotion_delayRenderHandles.filter((h) => h !== handle);
5305
5298
  if (scope.remotion_delayRenderHandles.length === 0) {
5306
5299
  scope.remotion_renderReady = true;
5307
5300
  }
@@ -5574,7 +5567,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
5574
5567
  var addSequenceStackTraces = (component) => {
5575
5568
  componentsToAddStacksTo.push(component);
5576
5569
  };
5577
- var VERSION = "4.0.489";
5570
+ var VERSION = "4.0.491";
5578
5571
  var checkMultipleRemotionVersions = () => {
5579
5572
  if (typeof globalThis === "undefined") {
5580
5573
  return;
@@ -5955,7 +5948,8 @@ var transformSchema = {
5955
5948
  max: 100,
5956
5949
  step: 0.01,
5957
5950
  default: 1,
5958
- description: "Scale"
5951
+ description: "Scale",
5952
+ defaultKeyframeOutput: "perceptual-scale"
5959
5953
  },
5960
5954
  "style.rotate": {
5961
5955
  type: "rotation-css",
@@ -6186,7 +6180,7 @@ var SequenceManagerRefContext = React11.createContext({
6186
6180
  current: []
6187
6181
  });
6188
6182
  var makeSequencePropsSubscriptionKey = (key) => {
6189
- 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(".")}`;
6190
6184
  };
6191
6185
  var VisualModePropStatusesContext = React11.createContext({
6192
6186
  propStatuses: {}
@@ -6759,8 +6753,20 @@ var serializeStringInterpolationValue = ({
6759
6753
  }
6760
6754
  return values.slice(0, dimensions).map((value, index) => `${stringifyNumber(value)}${units[index]}`).join(" ");
6761
6755
  };
6756
+ var toSignedArea = (scale) => {
6757
+ if (scale === 0) {
6758
+ return 0;
6759
+ }
6760
+ return Math.sign(scale) * scale * scale;
6761
+ };
6762
+ var fromSignedArea = (area) => {
6763
+ if (area === 0) {
6764
+ return 0;
6765
+ }
6766
+ return Math.sign(area) * Math.sqrt(Math.abs(area));
6767
+ };
6762
6768
  function interpolateFunction(input, inputRange, outputRange, options) {
6763
- const { extrapolateLeft, extrapolateRight, easing } = options;
6769
+ const { extrapolateLeft, extrapolateRight, easing, output } = options;
6764
6770
  let result = input;
6765
6771
  const [inputMin, inputMax] = inputRange;
6766
6772
  const [outputMin, outputMax] = outputRange;
@@ -6791,7 +6797,13 @@ function interpolateFunction(input, inputRange, outputRange, options) {
6791
6797
  }
6792
6798
  result = (result - inputMin) / (inputMax - inputMin);
6793
6799
  result = easing(result);
6794
- result = result * (outputMax - outputMin) + outputMin;
6800
+ if (output === "perceptual-scale") {
6801
+ const signedAreaMin = toSignedArea(outputMin);
6802
+ const signedAreaMax = toSignedArea(outputMax);
6803
+ result = fromSignedArea(result * (signedAreaMax - signedAreaMin) + signedAreaMin);
6804
+ } else {
6805
+ result = result * (outputMax - outputMin) + outputMin;
6806
+ }
6795
6807
  return result;
6796
6808
  }
6797
6809
  function findRange(input, inputRange) {
@@ -6804,6 +6816,9 @@ function findRange(input, inputRange) {
6804
6816
  return i - 1;
6805
6817
  }
6806
6818
  var defaultEasing = (num) => num;
6819
+ var resolveOutputOption = (output) => {
6820
+ return output ?? "linear";
6821
+ };
6807
6822
  var shouldExtendRightForEasing = (easing) => {
6808
6823
  return easing.remotionShouldExtendRight === true;
6809
6824
  };
@@ -6825,12 +6840,14 @@ var interpolateSegment = ({
6825
6840
  outputRange,
6826
6841
  easing,
6827
6842
  extrapolateLeft,
6828
- extrapolateRight
6843
+ extrapolateRight,
6844
+ output
6829
6845
  }) => {
6830
6846
  return interpolateFunction(input, inputRange, outputRange, {
6831
6847
  easing,
6832
6848
  extrapolateLeft,
6833
- extrapolateRight: input > inputRange[1] && extrapolateRight === "clamp" && shouldExtendRightForEasing(easing) ? "extend" : extrapolateRight
6849
+ extrapolateRight: input > inputRange[1] && extrapolateRight === "clamp" && shouldExtendRightForEasing(easing) ? "extend" : extrapolateRight,
6850
+ output
6834
6851
  });
6835
6852
  };
6836
6853
  var interpolateNumber = ({
@@ -6839,6 +6856,7 @@ var interpolateNumber = ({
6839
6856
  outputRange,
6840
6857
  options
6841
6858
  }) => {
6859
+ const output = resolveOutputOption(options?.output);
6842
6860
  if (inputRange.length === 1) {
6843
6861
  return outputRange[0];
6844
6862
  }
@@ -6863,7 +6881,8 @@ var interpolateNumber = ({
6863
6881
  outputRange: [outputRange[range], outputRange[range + 1]],
6864
6882
  easing,
6865
6883
  extrapolateLeft,
6866
- extrapolateRight
6884
+ extrapolateRight,
6885
+ output
6867
6886
  });
6868
6887
  for (let segmentIndex = 0;segmentIndex < range; segmentIndex++) {
6869
6888
  const previousEasing = resolveEasingForSegment({
@@ -6883,7 +6902,8 @@ var interpolateNumber = ({
6883
6902
  outputRange: [outputRange[segmentIndex], outputRange[segmentIndex + 1]],
6884
6903
  easing: previousEasing,
6885
6904
  extrapolateLeft,
6886
- extrapolateRight: "extend"
6905
+ extrapolateRight: "extend",
6906
+ output
6887
6907
  });
6888
6908
  result += continuedSegmentValue - outputRange[segmentIndex + 1];
6889
6909
  }
@@ -6931,14 +6951,18 @@ var interpolateString = ({
6931
6951
  }
6932
6952
  }
6933
6953
  }
6934
- return serializeStringInterpolationValue({
6935
- kind,
6936
- values: [0, 0, 0].map((_, axis) => interpolateNumber({
6954
+ const values = [0, 0, 0];
6955
+ for (let axis = 0;axis < dimensions; axis++) {
6956
+ values[axis] = interpolateNumber({
6937
6957
  input,
6938
6958
  inputRange,
6939
6959
  outputRange: parsedOutputRange.map((parsed) => parsed.values[axis]),
6940
6960
  options
6941
- })),
6961
+ });
6962
+ }
6963
+ return serializeStringInterpolationValue({
6964
+ kind,
6965
+ values,
6942
6966
  units,
6943
6967
  dimensions
6944
6968
  });
@@ -7022,6 +7046,12 @@ function assertValidInterpolatePosterizeOption(posterize) {
7022
7046
  throw new Error(`posterize must be a positive finite number, but got ${posterize}`);
7023
7047
  }
7024
7048
  }
7049
+ function assertValidInterpolateOutputOption(output) {
7050
+ if (output === undefined || output === "linear" || output === "perceptual-scale") {
7051
+ return;
7052
+ }
7053
+ throw new Error(`output must be "linear" or "perceptual-scale", but got ${String(output)}`);
7054
+ }
7025
7055
  function interpolate(input, inputRange, outputRange, options) {
7026
7056
  if (typeof input === "undefined") {
7027
7057
  throw new Error("input can not be undefined");
@@ -7039,6 +7069,7 @@ function interpolate(input, inputRange, outputRange, options) {
7039
7069
  checkValidInputRange(inputRange);
7040
7070
  assertValidInterpolateEasingOption(options?.easing, inputRange.length);
7041
7071
  assertValidInterpolatePosterizeOption(options?.posterize);
7072
+ assertValidInterpolateOutputOption(options?.output);
7042
7073
  if (typeof input !== "number") {
7043
7074
  throw new TypeError("Cannot interpolate an input which is not a number");
7044
7075
  }
@@ -7983,6 +8014,7 @@ var interpolateKeyframedStatus = ({
7983
8014
  easing: easing.map((e) => easingToFn({ easing: e, forceSpringAllowTail })),
7984
8015
  extrapolateLeft: clamping.left,
7985
8016
  extrapolateRight: clamping.right,
8017
+ output: status.output,
7986
8018
  posterize: status.posterize
7987
8019
  });
7988
8020
  } catch {
@@ -8223,7 +8255,7 @@ var getFlatSchemaWithAllKeys = (schema) => {
8223
8255
  const out = {};
8224
8256
  const addKey = (key, field) => {
8225
8257
  if (key in out) {
8226
- throw new Error(`Duplicate key "${key}" in schema: discriminated union variants must not share keys`);
8258
+ return;
8227
8259
  }
8228
8260
  out[key] = field;
8229
8261
  };
@@ -8761,6 +8793,7 @@ var RegularSequenceRefForwardingFunction = ({
8761
8793
  src: isMedia.data.src,
8762
8794
  getStack: () => stackRef.current,
8763
8795
  startMediaFrom: startMediaFrom ?? isMedia.data.startMediaFrom,
8796
+ mediaFrameAtSequenceZero,
8764
8797
  volume: isMedia.data.volumes,
8765
8798
  refForOutline: refForOutline ?? null,
8766
8799
  isInsideSeries,
@@ -8824,6 +8857,7 @@ var RegularSequenceRefForwardingFunction = ({
8824
8857
  isInsideSeries,
8825
8858
  registeredFrozenFrame,
8826
8859
  startMediaFrom,
8860
+ mediaFrameAtSequenceZero,
8827
8861
  frozenMediaFrame
8828
8862
  ]);
8829
8863
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
@@ -10774,7 +10808,9 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10774
10808
  return;
10775
10809
  }
10776
10810
  if (data === undefined) {
10777
- current.src = EMPTY_AUDIO;
10811
+ if (current.src !== EMPTY_AUDIO) {
10812
+ current.src = EMPTY_AUDIO;
10813
+ }
10778
10814
  return;
10779
10815
  }
10780
10816
  if (!data) {
@@ -10843,7 +10879,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10843
10879
  if (prevA.id === id) {
10844
10880
  const isTheSame = compareProps(aud, prevA.props) && prevA.premounting === premounting && prevA.postmounting === postmounting;
10845
10881
  if (isTheSame) {
10846
- return prevA;
10882
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
10847
10883
  }
10848
10884
  changed = true;
10849
10885
  return {
@@ -10855,7 +10891,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10855
10891
  audioMounted
10856
10892
  };
10857
10893
  }
10858
- return prevA;
10894
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
10859
10895
  });
10860
10896
  if (changed) {
10861
10897
  rerenderAudios();
@@ -10894,16 +10930,19 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10894
10930
  unregisterAudio,
10895
10931
  updateAudio
10896
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]);
10897
10942
  return /* @__PURE__ */ jsxs2(SharedAudioTagsContext.Provider, {
10898
10943
  value: audioTagsValue,
10899
10944
  children: [
10900
- refs.map(({ id, ref }) => {
10901
- return /* @__PURE__ */ jsx19("audio", {
10902
- ref,
10903
- preload: "metadata",
10904
- src: EMPTY_AUDIO
10905
- }, id);
10906
- }),
10945
+ sharedAudioTagElements,
10907
10946
  children
10908
10947
  ]
10909
10948
  });
@@ -11364,6 +11403,7 @@ var useMediaInTimeline = ({
11364
11403
  showInTimeline: true,
11365
11404
  nonce: nonce.get(),
11366
11405
  startMediaFrom: 0 - startsAt,
11406
+ mediaFrameAtSequenceZero: null,
11367
11407
  doesVolumeChange,
11368
11408
  loopDisplay,
11369
11409
  playbackRate,
@@ -12997,16 +13037,16 @@ var isMissingPaintRecordError = (error2) => {
12997
13037
  return error2 instanceof DOMException && error2.name === "InvalidStateError";
12998
13038
  };
12999
13039
  var missingPaintRecordMessage = "HtmlInCanvas: Expected the element to be inside the viewport during rendering, but Chrome had no cached paint record for it.";
13000
- var resizeOffscreenCanvas = ({
13001
- offscreen,
13040
+ var resizePaintTarget = ({
13041
+ target,
13002
13042
  width,
13003
13043
  height
13004
13044
  }) => {
13005
- if (offscreen.width !== width) {
13006
- offscreen.width = width;
13045
+ if (target.width !== width) {
13046
+ target.width = width;
13007
13047
  }
13008
- if (offscreen.height !== height) {
13009
- offscreen.height = height;
13048
+ if (target.height !== height) {
13049
+ target.height = height;
13010
13050
  }
13011
13051
  };
13012
13052
  var defaultOnPaint = ({
@@ -13022,7 +13062,7 @@ var defaultOnPaint = ({
13022
13062
  const transform = ctx.drawElementImage(elementImage, 0, 0);
13023
13063
  element.style.transform = transform.toString();
13024
13064
  };
13025
- var HtmlInCanvasAncestorContext = createContext23(false);
13065
+ var HtmlInCanvasAncestorContext = createContext23(null);
13026
13066
  var HtmlInCanvasContent = forwardRef9(({
13027
13067
  width,
13028
13068
  height,
@@ -13034,20 +13074,22 @@ var HtmlInCanvasContent = forwardRef9(({
13034
13074
  controls,
13035
13075
  style
13036
13076
  }, ref) => {
13037
- const isInsideAncestorHtmlInCanvas = useContext31(HtmlInCanvasAncestorContext);
13077
+ const ancestor = useContext31(HtmlInCanvasAncestorContext);
13038
13078
  assertHtmlInCanvasDimensions(width, height);
13039
13079
  const resolvedPixelDensity = resolveHtmlInCanvasPixelDensity(pixelDensity);
13040
13080
  const canvasWidth = Math.ceil(width * resolvedPixelDensity);
13041
13081
  const canvasHeight = Math.ceil(height * resolvedPixelDensity);
13042
13082
  const { continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
13043
- const { isRendering } = useRemotionEnvironment();
13083
+ const { isClientSideRendering, isRendering } = useRemotionEnvironment();
13084
+ const canRetryMissingPaintRecord = !isRendering || isClientSideRendering;
13085
+ const usesDirectLayoutCanvas = onPaint === undefined && onInit === undefined;
13044
13086
  if (!isHtmlInCanvasSupported()) {
13045
13087
  cancelRender2(new Error(HTML_IN_CANVAS_UNSUPPORTED_MESSAGE));
13046
13088
  }
13047
13089
  const canvas2dRef = useRef22(null);
13048
- const offscreenRef = useRef22(null);
13090
+ const paintTargetRef = useRef22(null);
13049
13091
  const divRef = useRef22(null);
13050
- const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
13092
+ const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}-${usesDirectLayoutCanvas ? "direct" : "offscreen"}`;
13051
13093
  const setLayoutCanvasRef = useCallback16((node) => {
13052
13094
  canvas2dRef.current = node;
13053
13095
  if (typeof ref === "function") {
@@ -13070,17 +13112,19 @@ var HtmlInCanvasContent = forwardRef9(({
13070
13112
  const initializedRef = useRef22(false);
13071
13113
  const onInitCleanupRef = useRef22(null);
13072
13114
  const unmountedRef = useRef22(false);
13115
+ const ancestorRef = useRef22(ancestor);
13116
+ ancestorRef.current = ancestor;
13073
13117
  const onPaintCb = useCallback16(async () => {
13074
13118
  const element = divRef.current;
13075
13119
  if (!element) {
13076
13120
  throw new Error("Canvas or scene element not found");
13077
13121
  }
13078
- const offscreen = offscreenRef.current;
13079
- if (!offscreen) {
13080
- 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");
13081
13125
  }
13082
- resizeOffscreenCanvas({
13083
- offscreen,
13126
+ resizePaintTarget({
13127
+ target: paintTarget,
13084
13128
  width: canvasWidth,
13085
13129
  height: canvasHeight
13086
13130
  });
@@ -13091,22 +13135,30 @@ var HtmlInCanvasContent = forwardRef9(({
13091
13135
  }
13092
13136
  const handle = delayRender("onPaint");
13093
13137
  if (!initializedRef.current) {
13094
- let initImage = null;
13095
- try {
13096
- initImage = placeholderCanvas.captureElementImage(element);
13097
- } catch (error2) {
13098
- if (isMissingPaintRecordError(error2) && !isRendering) {} else if (isMissingPaintRecordError(error2)) {
13099
- throw new Error(missingPaintRecordMessage);
13100
- } 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
+ }
13101
13153
  throw error2;
13102
13154
  }
13103
- }
13104
- if (initImage) {
13105
13155
  initializedRef.current = true;
13106
- const currentOnInit = onInitRef.current;
13107
- if (currentOnInit) {
13156
+ try {
13157
+ if (paintTarget instanceof HTMLCanvasElement) {
13158
+ throw new Error("HtmlInCanvas: onInit requires an OffscreenCanvas paint target");
13159
+ }
13108
13160
  const cleanup = await currentOnInit({
13109
- canvas: offscreen,
13161
+ canvas: paintTarget,
13110
13162
  element,
13111
13163
  elementImage: initImage,
13112
13164
  pixelDensity: resolvedPixelDensity
@@ -13119,15 +13171,16 @@ var HtmlInCanvasContent = forwardRef9(({
13119
13171
  } else {
13120
13172
  onInitCleanupRef.current = cleanup;
13121
13173
  }
13174
+ } finally {
13175
+ initImage.close();
13122
13176
  }
13123
13177
  }
13124
13178
  }
13125
- const handler = onPaintRef.current ?? defaultOnPaint;
13126
13179
  let elImage;
13127
13180
  try {
13128
13181
  elImage = placeholderCanvas.captureElementImage(element);
13129
13182
  } catch (error2) {
13130
- if (isMissingPaintRecordError(error2) && !isRendering) {
13183
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
13131
13184
  continueRender2(handle);
13132
13185
  return;
13133
13186
  }
@@ -13136,20 +13189,41 @@ var HtmlInCanvasContent = forwardRef9(({
13136
13189
  }
13137
13190
  throw error2;
13138
13191
  }
13139
- await handler({
13140
- canvas: offscreen,
13141
- element,
13142
- elementImage: elImage,
13143
- pixelDensity: resolvedPixelDensity
13144
- });
13145
- await runEffectChain({
13146
- state: chainState.get(canvasWidth, canvasHeight),
13147
- source: offscreen,
13148
- effects: effectsRef.current,
13149
- output: offscreen,
13150
- width: canvasWidth,
13151
- height: canvasHeight
13152
- });
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();
13153
13227
  continueRender2(handle);
13154
13228
  } catch (error2) {
13155
13229
  cancelRender2(error2);
@@ -13161,7 +13235,7 @@ var HtmlInCanvasContent = forwardRef9(({
13161
13235
  continueRender2,
13162
13236
  cancelRender2,
13163
13237
  resolvedPixelDensity,
13164
- isRendering
13238
+ canRetryMissingPaintRecord
13165
13239
  ]);
13166
13240
  useLayoutEffect9(() => {
13167
13241
  const placeholder = canvas2dRef.current;
@@ -13169,10 +13243,10 @@ var HtmlInCanvasContent = forwardRef9(({
13169
13243
  throw new Error("Canvas not found");
13170
13244
  }
13171
13245
  placeholder.layoutSubtree = true;
13172
- const offscreen = placeholder.transferControlToOffscreen();
13173
- offscreenRef.current = offscreen;
13174
- resizeOffscreenCanvas({
13175
- offscreen,
13246
+ const paintTarget = usesDirectLayoutCanvas ? placeholder : placeholder.transferControlToOffscreen();
13247
+ paintTargetRef.current = paintTarget;
13248
+ resizePaintTarget({
13249
+ target: paintTarget,
13176
13250
  width: canvasWidth,
13177
13251
  height: canvasHeight
13178
13252
  });
@@ -13181,13 +13255,19 @@ var HtmlInCanvasContent = forwardRef9(({
13181
13255
  placeholder.addEventListener("paint", onPaintCb);
13182
13256
  return () => {
13183
13257
  placeholder.removeEventListener("paint", onPaintCb);
13184
- offscreenRef.current = null;
13258
+ paintTargetRef.current = null;
13185
13259
  initializedRef.current = false;
13186
13260
  unmountedRef.current = true;
13187
13261
  onInitCleanupRef.current?.();
13188
13262
  onInitCleanupRef.current = null;
13189
13263
  };
13190
- }, [onPaintCb, cancelRender2, canvasWidth, canvasHeight]);
13264
+ }, [
13265
+ onPaintCb,
13266
+ cancelRender2,
13267
+ canvasWidth,
13268
+ canvasHeight,
13269
+ usesDirectLayoutCanvas
13270
+ ]);
13191
13271
  const onPaintChangedRef = useRef22(false);
13192
13272
  useLayoutEffect9(() => {
13193
13273
  if (!onPaintChangedRef.current) {
@@ -13226,11 +13306,15 @@ var HtmlInCanvasContent = forwardRef9(({
13226
13306
  ...style ?? {}
13227
13307
  };
13228
13308
  }, [height, style, width]);
13229
- if (isInsideAncestorHtmlInCanvas) {
13230
- 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.");
13231
- }
13309
+ const ancestorValue = useMemo30(() => {
13310
+ return {
13311
+ requestParentPaint: () => {
13312
+ canvas2dRef.current?.requestPaint?.();
13313
+ }
13314
+ };
13315
+ }, []);
13232
13316
  return /* @__PURE__ */ jsx25(HtmlInCanvasAncestorContext.Provider, {
13233
- value: true,
13317
+ value: ancestorValue,
13234
13318
  children: /* @__PURE__ */ jsx25("canvas", {
13235
13319
  ref: setLayoutCanvasRef,
13236
13320
  width: canvasWidth,
@@ -14102,6 +14186,22 @@ var Img = withInteractivitySchema({
14102
14186
  supportsEffects: true
14103
14187
  });
14104
14188
  addSequenceStackTraces(Img);
14189
+ var sourcePathToIdentityPrefix = (packageName) => {
14190
+ if (packageName === "remotion") {
14191
+ return "dev.remotion.remotion";
14192
+ }
14193
+ if (packageName.startsWith("@remotion/")) {
14194
+ const normalizedPackageName = packageName.slice("@remotion/".length).replace(/-([a-z])/g, (_, char) => char.toUpperCase());
14195
+ return `dev.remotion.${normalizedPackageName}`;
14196
+ }
14197
+ throw new Error(`Unsupported Remotion package name: ${packageName}`);
14198
+ };
14199
+ var makeRemotionComponentIdentity = ({
14200
+ packageName,
14201
+ componentName
14202
+ }) => {
14203
+ return `${sourcePathToIdentityPrefix(packageName)}.${componentName}`;
14204
+ };
14105
14205
  var interactiveElementSchema = {
14106
14206
  ...baseSchema,
14107
14207
  ...transformSchema,
@@ -14115,6 +14215,11 @@ var setRef = (ref, value) => {
14115
14215
  ref.current = value;
14116
14216
  }
14117
14217
  };
14218
+ var withSchema = (options) => {
14219
+ const Wrapped = withInteractivitySchema(options);
14220
+ addSequenceStackTraces(Wrapped);
14221
+ return Wrapped;
14222
+ };
14118
14223
  var makeInteractiveElement = (tag, displayName) => {
14119
14224
  const Inner = forwardRef12((propsWithControls, ref) => {
14120
14225
  const {
@@ -14154,15 +14259,17 @@ var makeInteractiveElement = (tag, displayName) => {
14154
14259
  });
14155
14260
  });
14156
14261
  Inner.displayName = displayName;
14157
- const Wrapped = withInteractivitySchema({
14262
+ const Wrapped = withSchema({
14158
14263
  Component: Inner,
14159
14264
  componentName: displayName,
14160
- componentIdentity: `dev.remotion.remotion.${displayName.slice(1, -1)}`,
14265
+ componentIdentity: makeRemotionComponentIdentity({
14266
+ packageName: "remotion",
14267
+ componentName: displayName.slice(1, -1)
14268
+ }),
14161
14269
  schema: interactiveElementSchema,
14162
14270
  supportsEffects: false
14163
14271
  });
14164
14272
  Wrapped.displayName = displayName;
14165
- addSequenceStackTraces(Wrapped);
14166
14273
  return Wrapped;
14167
14274
  };
14168
14275
  var Interactive = {
@@ -14171,7 +14278,8 @@ var Interactive = {
14171
14278
  textSchema,
14172
14279
  premountSchema,
14173
14280
  sequenceSchema,
14174
- withSchema: withInteractivitySchema,
14281
+ withSchema,
14282
+ _internalMakeRemotionComponentIdentity: makeRemotionComponentIdentity,
14175
14283
  A: makeInteractiveElement("a", "<Interactive.A>"),
14176
14284
  Article: makeInteractiveElement("article", "<Interactive.Article>"),
14177
14285
  Aside: makeInteractiveElement("aside", "<Interactive.Aside>"),
@@ -15576,66 +15684,130 @@ var flattenChildren = (children) => {
15576
15684
  return flatChildren;
15577
15685
  }, []);
15578
15686
  };
15579
- 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) => {
15580
15702
  useRequireToBeInsideSeries();
15703
+ if (_remotionInternalRender) {
15704
+ return _remotionInternalRender({ ...props2, offset, className: className || undefined, stack }, ref);
15705
+ }
15581
15706
  return /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
15582
- children
15707
+ children: props2.children
15583
15708
  });
15584
- };
15585
- 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
+ });
15586
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
+ };
15587
15743
  var SeriesInner = (props2) => {
15588
15744
  const childrenValue = useMemo38(() => {
15589
- let startFrame = 0;
15590
15745
  const flattenedChildren = flattenChildren(props2.children);
15591
- 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];
15592
15751
  const castedChild = child;
15593
15752
  if (typeof castedChild === "string") {
15594
15753
  if (castedChild.trim() === "") {
15595
- return null;
15754
+ return renderChildren(i + 1, startFrame);
15596
15755
  }
15597
15756
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but you passed a string "${castedChild}"`);
15598
15757
  }
15599
15758
  if (castedChild.type !== SeriesSequence) {
15600
15759
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but got ${castedChild} instead`);
15601
15760
  }
15602
- const debugInfo = `index = ${i}, duration = ${castedChild.props.durationInFrames}`;
15603
- const durationInFramesProp = castedChild.props.durationInFrames;
15604
- const {
15605
- durationInFrames,
15606
- children: _children,
15607
- from,
15608
- name,
15609
- ...passedProps
15610
- } = castedChild.props;
15611
- if (i !== flattenedChildren.length - 1 || durationInFramesProp !== Infinity) {
15612
- validateDurationInFrames(durationInFramesProp, {
15613
- component: `of a <Series.Sequence /> component`,
15614
- allowFloats: true
15615
- });
15616
- }
15617
- const offset = castedChild.props.offset ?? 0;
15618
- if (Number.isNaN(offset)) {
15619
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`);
15620
- }
15621
- if (!Number.isFinite(offset)) {
15622
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
15623
- }
15624
- if (offset % 1 !== 0) {
15625
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
15626
- }
15627
- const currentStartFrame = startFrame + offset;
15628
- startFrame += durationInFramesProp + offset;
15629
- return /* @__PURE__ */ jsx37(SequenceWithoutSchemaWithRef, {
15630
- ref: castedChild.ref,
15631
- name: name || "<Series.Sequence>",
15632
- _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
15633
- from: currentStartFrame,
15634
- durationInFrames: durationInFramesProp,
15635
- ...passedProps,
15636
- 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
15637
15767
  });
15638
- });
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);
15639
15811
  }, [props2.children]);
15640
15812
  return /* @__PURE__ */ jsx37(IsInsideSeriesContainer, {
15641
15813
  children: /* @__PURE__ */ jsx37(Sequence, {
@@ -16236,7 +16408,7 @@ addSequenceStackTraces(Folder);
16236
16408
  // ../shapes/dist/esm/index.mjs
16237
16409
  import React, { useCallback as useCallback26, useMemo as useMemo40, useRef as useRef29 } from "react";
16238
16410
  import { version } from "react-dom";
16239
- import { jsx as jsx40, jsxs as jsxs3 } from "react/jsx-runtime";
16411
+ import { jsx as jsx40, jsxs as jsxs4 } from "react/jsx-runtime";
16240
16412
  import { jsx as jsx210 } from "react/jsx-runtime";
16241
16413
  import { jsx as jsx310 } from "react/jsx-runtime";
16242
16414
  import { jsx as jsx42 } from "react/jsx-runtime";
@@ -16438,7 +16610,7 @@ var RenderSvg = ({
16438
16610
  const memoizedEffectDefinitions = Internals.useMemoizedEffectDefinitions(effects);
16439
16611
  const videoConfig = Internals.useUnsafeVideoConfig();
16440
16612
  const reactSupportsTransformOrigin = doesReactSupportTransformOriginProperty(version);
16441
- const svg = /* @__PURE__ */ jsxs3("svg", {
16613
+ const svg = /* @__PURE__ */ jsxs4("svg", {
16442
16614
  ref: effects.length === 0 || !videoConfig ? setSvgRef : undefined,
16443
16615
  width,
16444
16616
  height,
@@ -16464,7 +16636,7 @@ var RenderSvg = ({
16464
16636
  }
16465
16637
  const prevX = prevInstruction.x;
16466
16638
  const prevY = prevInstruction.y;
16467
- return /* @__PURE__ */ jsxs3(React.Fragment, {
16639
+ return /* @__PURE__ */ jsxs4(React.Fragment, {
16468
16640
  children: [
16469
16641
  /* @__PURE__ */ jsx40("path", {
16470
16642
  d: `M ${prevX} ${prevY} ${i.cp1x} ${i.cp1y}`,
@@ -16654,7 +16826,6 @@ var Arrow = Interactive.withSchema({
16654
16826
  schema: arrowSchema,
16655
16827
  supportsEffects: true
16656
16828
  });
16657
- Internals.addSequenceStackTraces(Arrow);
16658
16829
  var shortenVector = (vector, radius) => {
16659
16830
  const [x, y] = vector;
16660
16831
  const currentLength = Math.sqrt(x * x + y * y);
@@ -17079,7 +17250,6 @@ var Callout = Interactive.withSchema({
17079
17250
  schema: calloutSchema,
17080
17251
  supportsEffects: true
17081
17252
  });
17082
- Internals.addSequenceStackTraces(Callout);
17083
17253
  var makeCircle = ({ radius }) => {
17084
17254
  const instructions = [
17085
17255
  {
@@ -17142,7 +17312,6 @@ var Circle = Interactive.withSchema({
17142
17312
  schema: circleSchema,
17143
17313
  supportsEffects: true
17144
17314
  });
17145
- Internals.addSequenceStackTraces(Circle);
17146
17315
  var makeEllipse = ({ rx, ry }) => {
17147
17316
  const instructions = [
17148
17317
  {
@@ -17200,7 +17369,6 @@ var Ellipse = Interactive.withSchema({
17200
17369
  schema: ellipseSchema,
17201
17370
  supportsEffects: true
17202
17371
  });
17203
- Internals.addSequenceStackTraces(Ellipse);
17204
17372
  var makeHeart = ({
17205
17373
  height,
17206
17374
  aspectRatio = 1.1,
@@ -17339,7 +17507,6 @@ var Heart = Interactive.withSchema({
17339
17507
  schema: heartSchema,
17340
17508
  supportsEffects: true
17341
17509
  });
17342
- Internals.addSequenceStackTraces(Heart);
17343
17510
  var getCoord = ({
17344
17511
  counterClockwise,
17345
17512
  actualProgress,
@@ -17494,7 +17661,6 @@ var Pie = Interactive.withSchema({
17494
17661
  schema: pieSchema,
17495
17662
  supportsEffects: true
17496
17663
  });
17497
- Internals.addSequenceStackTraces(Pie);
17498
17664
  function polygon({
17499
17665
  points,
17500
17666
  radius,
@@ -17594,7 +17760,6 @@ var Polygon = Interactive.withSchema({
17594
17760
  schema: polygonSchema,
17595
17761
  supportsEffects: true
17596
17762
  });
17597
- Internals.addSequenceStackTraces(Polygon);
17598
17763
  var makeRect = ({
17599
17764
  width,
17600
17765
  height,
@@ -17661,7 +17826,6 @@ var Rect = Interactive.withSchema({
17661
17826
  schema: rectSchema,
17662
17827
  supportsEffects: true
17663
17828
  });
17664
- Internals.addSequenceStackTraces(Rect);
17665
17829
  var KAPPA = 0.5522847498307936;
17666
17830
  var CAP_HANDLE = 4 / 3;
17667
17831
  var curve = ({
@@ -17873,7 +18037,6 @@ var Spark = Interactive.withSchema({
17873
18037
  schema: sparkSchema,
17874
18038
  supportsEffects: true
17875
18039
  });
17876
- Internals.addSequenceStackTraces(Spark);
17877
18040
  var star = ({
17878
18041
  centerX,
17879
18042
  centerY,
@@ -17984,7 +18147,6 @@ var Star = Interactive.withSchema({
17984
18147
  schema: starSchema,
17985
18148
  supportsEffects: true
17986
18149
  });
17987
- Internals.addSequenceStackTraces(Star);
17988
18150
  var makeTriangle = ({
17989
18151
  length: length2,
17990
18152
  direction = "right",
@@ -18091,7 +18253,6 @@ var Triangle = Interactive.withSchema({
18091
18253
  schema: triangleSchema,
18092
18254
  supportsEffects: true
18093
18255
  });
18094
- Internals.addSequenceStackTraces(Triangle);
18095
18256
 
18096
18257
  // ../svg-3d-engine/dist/esm/index.mjs
18097
18258
  function truthy2(value) {
@@ -19157,7 +19318,7 @@ var extrudeAndTransformElement = (options) => {
19157
19318
 
19158
19319
  // ../design/dist/esm/index.mjs
19159
19320
  import { jsx as jsx212, Fragment as Fragment3 } from "react/jsx-runtime";
19160
- import { jsx as jsx312, jsxs as jsxs5 } from "react/jsx-runtime";
19321
+ import { jsx as jsx312, jsxs as jsxs6 } from "react/jsx-runtime";
19161
19322
  import { useEffect as useEffect22, useMemo as useMemo210, useRef as useRef31 } from "react";
19162
19323
  import { jsx as jsx44 } from "react/jsx-runtime";
19163
19324
  import { jsx as jsx53, jsxs as jsxs22 } from "react/jsx-runtime";
@@ -19216,11 +19377,11 @@ import * as React302 from "react";
19216
19377
  import * as React342 from "react";
19217
19378
  import * as React332 from "react";
19218
19379
  import * as React322 from "react";
19219
- 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";
19220
19381
  import { forwardRef as forwardRef142, createElement as createElement7 } from "react";
19221
19382
  import { forwardRef as forwardRef132, createElement as createElement6 } from "react";
19222
19383
  import * as React372 from "react";
19223
- import { jsx as jsx252, jsxs as jsxs52 } from "react/jsx-runtime";
19384
+ import { jsx as jsx252, jsxs as jsxs5 } from "react/jsx-runtime";
19224
19385
  import { jsx as jsx262 } from "react/jsx-runtime";
19225
19386
  import * as React49 from "react";
19226
19387
  import * as React38 from "react";
@@ -19228,12 +19389,12 @@ import { jsx as jsx272 } from "react/jsx-runtime";
19228
19389
  import * as React47 from "react";
19229
19390
  import React402 from "react";
19230
19391
  import * as React392 from "react";
19231
- import { Fragment as Fragment22, jsx as jsx282 } from "react/jsx-runtime";
19392
+ import { Fragment as Fragment222, jsx as jsx282 } from "react/jsx-runtime";
19232
19393
  import { jsx as jsx292 } from "react/jsx-runtime";
19233
19394
  import React210 from "react";
19234
19395
  import { jsx as jsx2102 } from "react/jsx-runtime";
19235
19396
  import * as React422 from "react";
19236
- import * as React41 from "react";
19397
+ import * as React412 from "react";
19237
19398
  import * as React43 from "react";
19238
19399
  import * as ReactDOM5 from "react-dom";
19239
19400
  import { jsx as jsx302 } from "react/jsx-runtime";
@@ -19343,7 +19504,7 @@ function createSlotClone(ownerName) {
19343
19504
  var SLOTTABLE_IDENTIFIER = Symbol("radix.slottable");
19344
19505
  function createSlottable(ownerName) {
19345
19506
  const Slottable2 = ({ children }) => {
19346
- return /* @__PURE__ */ jsx43(Fragment2, { children });
19507
+ return /* @__PURE__ */ jsx43(Fragment22, { children });
19347
19508
  };
19348
19509
  Slottable2.displayName = `${ownerName}.Slottable`;
19349
19510
  Slottable2.__radixId = SLOTTABLE_IDENTIFIER;
@@ -19640,7 +19801,7 @@ var Outer = ({
19640
19801
  description: "rect",
19641
19802
  transformations: centerOriented
19642
19803
  });
19643
- return /* @__PURE__ */ jsxs5("div", {
19804
+ return /* @__PURE__ */ jsxs6("div", {
19644
19805
  className: "relative",
19645
19806
  style: { width, height },
19646
19807
  children: [
@@ -23688,7 +23849,7 @@ var Select = (props) => {
23688
23849
  const isFormControl = trigger ? Boolean(trigger.closest("form")) : true;
23689
23850
  const [nativeOptionsSet, setNativeOptionsSet] = React36.useState(/* @__PURE__ */ new Set);
23690
23851
  const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(";");
23691
- return /* @__PURE__ */ jsx242(Root22, { ...popperScope, children: /* @__PURE__ */ jsxs4(SelectProvider, {
23852
+ return /* @__PURE__ */ jsx242(Root22, { ...popperScope, children: /* @__PURE__ */ jsxs42(SelectProvider, {
23692
23853
  required,
23693
23854
  scope: __scopeSelect,
23694
23855
  trigger,
@@ -23720,7 +23881,7 @@ var Select = (props) => {
23720
23881
  }, []),
23721
23882
  children
23722
23883
  }) }),
23723
- isFormControl ? /* @__PURE__ */ jsxs4(BubbleSelect, {
23884
+ isFormControl ? /* @__PURE__ */ jsxs42(BubbleSelect, {
23724
23885
  "aria-hidden": true,
23725
23886
  required,
23726
23887
  tabIndex: -1,
@@ -24228,7 +24389,7 @@ var SelectViewport = React36.forwardRef((props, forwardedRef) => {
24228
24389
  const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);
24229
24390
  const composedRefs = useComposedRefs2(forwardedRef, contentContext.onViewportChange);
24230
24391
  const prevScrollTopRef = React36.useRef(0);
24231
- return /* @__PURE__ */ jsxs4(Fragment8, { children: [
24392
+ return /* @__PURE__ */ jsxs42(Fragment8, { children: [
24232
24393
  /* @__PURE__ */ jsx242("style", {
24233
24394
  dangerouslySetInnerHTML: {
24234
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}`
@@ -24385,7 +24546,7 @@ var SelectItemText = React36.forwardRef((props, forwardedRef) => {
24385
24546
  onNativeOptionAdd(nativeOption);
24386
24547
  return () => onNativeOptionRemove(nativeOption);
24387
24548
  }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);
24388
- return /* @__PURE__ */ jsxs4(Fragment8, { children: [
24549
+ return /* @__PURE__ */ jsxs42(Fragment8, { children: [
24389
24550
  /* @__PURE__ */ jsx242(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),
24390
24551
  itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM4.createPortal(itemTextProps.children, context.valueNode) : null
24391
24552
  ] });
@@ -24644,7 +24805,7 @@ var ChevronDown = createLucideIcon("ChevronDown", [
24644
24805
  var ChevronUp = createLucideIcon("ChevronUp", [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]]);
24645
24806
  var Select2 = Root222;
24646
24807
  var SelectValue2 = Value;
24647
- var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Trigger, {
24808
+ var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(Trigger, {
24648
24809
  ref,
24649
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),
24650
24811
  ...props,
@@ -24678,7 +24839,7 @@ var SelectScrollDownButton2 = React372.forwardRef(({ className, ...props }, ref)
24678
24839
  }));
24679
24840
  SelectScrollDownButton2.displayName = ScrollDownButton.displayName;
24680
24841
  var SelectContent2 = React372.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx252(Portal2, {
24681
- children: /* @__PURE__ */ jsxs52(Content2, {
24842
+ children: /* @__PURE__ */ jsxs5(Content2, {
24682
24843
  ref,
24683
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),
24684
24845
  position,
@@ -24700,7 +24861,7 @@ var SelectLabel2 = React372.forwardRef(({ className, ...props }, ref) => /* @__P
24700
24861
  ...props
24701
24862
  }));
24702
24863
  SelectLabel2.displayName = Label.displayName;
24703
- var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Item, {
24864
+ var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(Item, {
24704
24865
  ref,
24705
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),
24706
24867
  ...props,
@@ -25242,7 +25403,7 @@ function toSafeIndex(array, index2) {
25242
25403
  function toSafeInteger(number) {
25243
25404
  return number !== number || number === 0 ? 0 : Math.trunc(number);
25244
25405
  }
25245
- var useLayoutEffect222 = globalThis?.document ? React41.useLayoutEffect : () => {};
25406
+ var useLayoutEffect222 = globalThis?.document ? React412.useLayoutEffect : () => {};
25246
25407
  var useReactId2 = React422[" useId ".trim().toString()] || (() => {
25247
25408
  return;
25248
25409
  });
@@ -27178,7 +27339,7 @@ function cn2(...inputs) {
27178
27339
  }
27179
27340
 
27180
27341
  // src/components/homepage/PricingBulletPoint.tsx
27181
- import { jsx as jsx45, jsxs as jsxs6 } from "react/jsx-runtime";
27342
+ import { jsx as jsx45, jsxs as jsxs7 } from "react/jsx-runtime";
27182
27343
  var container3 = {
27183
27344
  display: "flex",
27184
27345
  flexDirection: "row",
@@ -27192,7 +27353,7 @@ var greyCircle = {
27192
27353
  backgroundColor: "var(--footer-border)"
27193
27354
  };
27194
27355
  var PricingBulletPoint = ({ text, checked, children }) => {
27195
- const checkmarkSVG = /* @__PURE__ */ jsxs6("svg", {
27356
+ const checkmarkSVG = /* @__PURE__ */ jsxs7("svg", {
27196
27357
  width: "20",
27197
27358
  height: "20",
27198
27359
  viewBox: "0 0 20 20",
@@ -27214,13 +27375,13 @@ var PricingBulletPoint = ({ text, checked, children }) => {
27214
27375
  })
27215
27376
  ]
27216
27377
  });
27217
- return /* @__PURE__ */ jsxs6("div", {
27378
+ return /* @__PURE__ */ jsxs7("div", {
27218
27379
  style: container3,
27219
27380
  children: [
27220
27381
  checked ? checkmarkSVG : /* @__PURE__ */ jsx45("div", {
27221
27382
  style: greyCircle
27222
27383
  }),
27223
- /* @__PURE__ */ jsxs6("div", {
27384
+ /* @__PURE__ */ jsxs7("div", {
27224
27385
  className: "fontbrand text-lg\t",
27225
27386
  children: [
27226
27387
  text,
@@ -27232,7 +27393,7 @@ var PricingBulletPoint = ({ text, checked, children }) => {
27232
27393
  };
27233
27394
 
27234
27395
  // src/components/homepage/FreePricing.tsx
27235
- 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";
27236
27397
  var Container = ({
27237
27398
  children
27238
27399
  }) => {
@@ -27276,7 +27437,7 @@ var icon = {
27276
27437
  };
27277
27438
  var PricingSlider = ({ value, onChange, min: min2, max: max2, step = 1, "aria-label": ariaLabel }) => {
27278
27439
  const percentage = (value - min2) / (max2 - min2) * 100;
27279
- return /* @__PURE__ */ jsxs7(Fragment9, {
27440
+ return /* @__PURE__ */ jsxs8(Fragment9, {
27280
27441
  children: [
27281
27442
  /* @__PURE__ */ jsx46("style", {
27282
27443
  children: `
@@ -27333,7 +27494,7 @@ var textUnitWrapper = {
27333
27494
  flexDirection: "column"
27334
27495
  };
27335
27496
  var FreePricing = () => {
27336
- return /* @__PURE__ */ jsxs7(Container, {
27497
+ return /* @__PURE__ */ jsxs8(Container, {
27337
27498
  children: [
27338
27499
  /* @__PURE__ */ jsx46(Audience, {
27339
27500
  children: "For individuals and companies of up to 3 people"
@@ -27364,7 +27525,7 @@ var FreePricing = () => {
27364
27525
  ...textUnitWrapper,
27365
27526
  alignItems: "flex-end"
27366
27527
  },
27367
- children: /* @__PURE__ */ jsxs7("a", {
27528
+ children: /* @__PURE__ */ jsxs8("a", {
27368
27529
  target: "_blank",
27369
27530
  href: "https://www.remotion.dev/docs",
27370
27531
  className: "font-brand text-brand flex flex-row items-center gap-1 no-underline",
@@ -27388,7 +27549,7 @@ var FreePricing = () => {
27388
27549
  });
27389
27550
  };
27390
27551
  var EnterpriseLicense = () => {
27391
- return /* @__PURE__ */ jsxs7(Container, {
27552
+ return /* @__PURE__ */ jsxs8(Container, {
27392
27553
  children: [
27393
27554
  /* @__PURE__ */ jsx46(Audience, {
27394
27555
  children: "For advanced needs"
@@ -27421,7 +27582,7 @@ var EnterpriseLicense = () => {
27421
27582
  checked: true
27422
27583
  }),
27423
27584
  /* @__PURE__ */ jsx46(PricingBulletPoint, {
27424
- text: /* @__PURE__ */ jsxs7("span", {
27585
+ text: /* @__PURE__ */ jsxs8("span", {
27425
27586
  children: [
27426
27587
  /* @__PURE__ */ jsx46("a", {
27427
27588
  href: "https://www.remotion.dev/editor-starter",
@@ -27439,7 +27600,7 @@ var EnterpriseLicense = () => {
27439
27600
  }),
27440
27601
  /* @__PURE__ */ jsx46("div", {
27441
27602
  className: "flex flex-row justify-end",
27442
- children: /* @__PURE__ */ jsxs7("div", {
27603
+ children: /* @__PURE__ */ jsxs8("div", {
27443
27604
  style: {
27444
27605
  ...textUnitWrapper,
27445
27606
  alignItems: "flex-end"
@@ -27466,7 +27627,7 @@ var EnterpriseLicense = () => {
27466
27627
  var SEAT_PRICE = 25;
27467
27628
  var RENDER_UNIT_PRICE = 10;
27468
27629
  var SectionCheckbox = ({ checked, onChange, title, subtitle, children }) => {
27469
- return /* @__PURE__ */ jsxs7("div", {
27630
+ return /* @__PURE__ */ jsxs8("div", {
27470
27631
  className: "flex flex-row gap-3 cursor-pointer select-none items-center",
27471
27632
  onClick: () => onChange(!checked),
27472
27633
  children: [
@@ -27475,10 +27636,10 @@ var SectionCheckbox = ({ checked, onChange, title, subtitle, children }) => {
27475
27636
  onToggle: () => onChange(!checked),
27476
27637
  "aria-label": title
27477
27638
  }),
27478
- /* @__PURE__ */ jsxs7("div", {
27639
+ /* @__PURE__ */ jsxs8("div", {
27479
27640
  className: "flex flex-col",
27480
27641
  children: [
27481
- /* @__PURE__ */ jsxs7("div", {
27642
+ /* @__PURE__ */ jsxs8("div", {
27482
27643
  className: "fontbrand font-bold text-lg flex flex-row items-center gap-1",
27483
27644
  children: [
27484
27645
  title,
@@ -27528,7 +27689,7 @@ var CompanyPricing = () => {
27528
27689
  }, [formatPrice, totalPrice]);
27529
27690
  const showMinimumMessage = automatorsSelected && creatorsPrice + automatorsPrice < 100;
27530
27691
  const showEnterpriseMessage = totalPrice >= 500;
27531
- return /* @__PURE__ */ jsxs7(Container, {
27692
+ return /* @__PURE__ */ jsxs8(Container, {
27532
27693
  children: [
27533
27694
  /* @__PURE__ */ jsx46(Audience, {
27534
27695
  children: "For collaborations and companies of 4+ people"
@@ -27571,14 +27732,14 @@ var CompanyPricing = () => {
27571
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"
27572
27733
  },
27573
27734
  inert: !automatorsSelected,
27574
- children: /* @__PURE__ */ jsxs7("div", {
27735
+ children: /* @__PURE__ */ jsxs8("div", {
27575
27736
  className: "overflow-hidden",
27576
27737
  children: [
27577
27738
  /* @__PURE__ */ jsx46("p", {
27578
27739
  className: "text-sm text-muted fontbrand pt-3 pb-1",
27579
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."
27580
27741
  }),
27581
- /* @__PURE__ */ jsxs7("div", {
27742
+ /* @__PURE__ */ jsxs8("div", {
27582
27743
  className: "flex flex-row items-center gap-3 sm:gap-4 w-full pt-3 pb-1",
27583
27744
  children: [
27584
27745
  /* @__PURE__ */ jsx46("div", {
@@ -27592,14 +27753,14 @@ var CompanyPricing = () => {
27592
27753
  "aria-label": "Number of renders"
27593
27754
  })
27594
27755
  }),
27595
- /* @__PURE__ */ jsxs7("div", {
27756
+ /* @__PURE__ */ jsxs8("div", {
27596
27757
  className: "fontbrand shrink-0 whitespace-nowrap w-[135px] sm:w-[150px] text-right tabular-nums",
27597
27758
  children: [
27598
27759
  new Intl.NumberFormat("en-US").format(cloudRenders),
27599
27760
  " Renders"
27600
27761
  ]
27601
27762
  }),
27602
- /* @__PURE__ */ jsxs7("div", {
27763
+ /* @__PURE__ */ jsxs8("div", {
27603
27764
  className: "fontbrand font-bold min-w-[60px] text-right shrink-0 whitespace-nowrap tabular-nums",
27604
27765
  children: [
27605
27766
  "$",
@@ -27628,14 +27789,14 @@ var CompanyPricing = () => {
27628
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"
27629
27790
  },
27630
27791
  inert: !creatorsSelected,
27631
- children: /* @__PURE__ */ jsxs7("div", {
27792
+ children: /* @__PURE__ */ jsxs8("div", {
27632
27793
  className: "overflow-hidden",
27633
27794
  children: [
27634
27795
  /* @__PURE__ */ jsx46("p", {
27635
27796
  className: "text-sm text-muted fontbrand pt-3 pb-1",
27636
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."
27637
27798
  }),
27638
- /* @__PURE__ */ jsxs7("div", {
27799
+ /* @__PURE__ */ jsxs8("div", {
27639
27800
  className: "flex flex-row items-center gap-3 sm:gap-4 w-full pt-3 pb-1",
27640
27801
  children: [
27641
27802
  /* @__PURE__ */ jsx46("div", {
@@ -27648,7 +27809,7 @@ var CompanyPricing = () => {
27648
27809
  "aria-label": "Number of seats"
27649
27810
  })
27650
27811
  }),
27651
- /* @__PURE__ */ jsxs7("div", {
27812
+ /* @__PURE__ */ jsxs8("div", {
27652
27813
  className: "fontbrand shrink-0 whitespace-nowrap w-[135px] sm:w-[150px] text-center tabular-nums",
27653
27814
  children: [
27654
27815
  devSeatCount,
@@ -27656,7 +27817,7 @@ var CompanyPricing = () => {
27656
27817
  devSeatCount === 1 ? "Seat" : "Seats"
27657
27818
  ]
27658
27819
  }),
27659
- /* @__PURE__ */ jsxs7("div", {
27820
+ /* @__PURE__ */ jsxs8("div", {
27660
27821
  className: "fontbrand font-bold min-w-[60px] text-right shrink-0 whitespace-nowrap tabular-nums",
27661
27822
  children: [
27662
27823
  "$",
@@ -27673,14 +27834,14 @@ var CompanyPricing = () => {
27673
27834
  /* @__PURE__ */ jsx46("div", {
27674
27835
  style: { height: 14 }
27675
27836
  }),
27676
- /* @__PURE__ */ jsxs7("div", {
27837
+ /* @__PURE__ */ jsxs8("div", {
27677
27838
  className: "flex flex-row items-baseline justify-end gap-2",
27678
27839
  children: [
27679
27840
  /* @__PURE__ */ jsx46("div", {
27680
27841
  className: "fontbrand text-muted text-sm",
27681
27842
  children: "Total"
27682
27843
  }),
27683
- /* @__PURE__ */ jsxs7(PriceTag, {
27844
+ /* @__PURE__ */ jsxs8(PriceTag, {
27684
27845
  children: [
27685
27846
  totalPriceString,
27686
27847
  "/month"
@@ -27688,7 +27849,7 @@ var CompanyPricing = () => {
27688
27849
  })
27689
27850
  ]
27690
27851
  }),
27691
- /* @__PURE__ */ jsxs7("div", {
27852
+ /* @__PURE__ */ jsxs8("div", {
27692
27853
  className: "flex flex-col items-end",
27693
27854
  children: [
27694
27855
  /* @__PURE__ */ jsx46(BottomInfo, {
@@ -27696,7 +27857,7 @@ var CompanyPricing = () => {
27696
27857
  className: "opacity-0 data-[visible=true]:opacity-100 transition-opacity mt-1",
27697
27858
  children: "The minimum is $100 per month for Remotion for Automators"
27698
27859
  }),
27699
- /* @__PURE__ */ jsxs7(BottomInfo, {
27860
+ /* @__PURE__ */ jsxs8(BottomInfo, {
27700
27861
  "data-visible": showEnterpriseMessage,
27701
27862
  className: "opacity-0 data-[visible=true]:opacity-100 transition-opacity mt-1",
27702
27863
  children: [
@@ -27722,7 +27883,7 @@ var CompanyPricing = () => {
27722
27883
  ...textUnitWrapper,
27723
27884
  alignItems: "flex-end"
27724
27885
  },
27725
- children: /* @__PURE__ */ jsxs7("a", {
27886
+ children: /* @__PURE__ */ jsxs8("a", {
27726
27887
  href: "https://remotion.pro/dashboard",
27727
27888
  className: "font-brand text-brand flex flex-row items-center gap-1 no-underline",
27728
27889
  children: [
@@ -27746,12 +27907,12 @@ var CompanyPricing = () => {
27746
27907
  };
27747
27908
 
27748
27909
  // src/components/homepage/Pricing.tsx
27749
- import { jsx as jsx47, jsxs as jsxs8 } from "react/jsx-runtime";
27910
+ import { jsx as jsx47, jsxs as jsxs9 } from "react/jsx-runtime";
27750
27911
  var Pricing = ({
27751
27912
  faqHref = "/docs/license/faq",
27752
27913
  faqLabel = "License FAQ",
27753
27914
  licenseHref = "https://github.com/remotion-dev/remotion/blob/main/LICENSE.md",
27754
- termsHref = "https://www.remotion.pro/terms"
27915
+ termsHref = "/docs/license/terms"
27755
27916
  }) => {
27756
27917
  const faqLinkTarget = useMemo52(() => {
27757
27918
  return faqHref.startsWith("http") ? "_blank" : undefined;
@@ -27762,7 +27923,7 @@ var Pricing = ({
27762
27923
  const termsLinkTarget = useMemo52(() => {
27763
27924
  return termsHref.startsWith("http") ? "_blank" : undefined;
27764
27925
  }, [termsHref]);
27765
- return /* @__PURE__ */ jsxs8("div", {
27926
+ return /* @__PURE__ */ jsxs9("div", {
27766
27927
  style: {
27767
27928
  display: "flex",
27768
27929
  flexDirection: "column",
@@ -27778,7 +27939,7 @@ var Pricing = ({
27778
27939
  justifyContent: "center",
27779
27940
  display: "flex"
27780
27941
  },
27781
- children: /* @__PURE__ */ jsxs8("div", {
27942
+ children: /* @__PURE__ */ jsxs9("div", {
27782
27943
  style: {
27783
27944
  fontFamily: "GTPlanar"
27784
27945
  },