@remotion/promo-pages 4.0.484 → 4.0.486

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.
@@ -32,6 +32,9 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
32
32
  throw Error('Dynamic require of "' + x + '" is not supported');
33
33
  });
34
34
 
35
+ // src/components/homepage/Pricing.tsx
36
+ import { useMemo as useMemo52 } from "react";
37
+
35
38
  // ../design/dist/esm/index.mjs
36
39
  import * as React23 from "react";
37
40
  import * as React3 from "react";
@@ -1378,7 +1381,7 @@ var getDefaultConfig = () => {
1378
1381
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
1379
1382
 
1380
1383
  // ../design/dist/esm/index.mjs
1381
- import React32, { useEffect as useEffect22, useMemo as useMemo42, useState as useState21 } from "react";
1384
+ import React32, { useEffect as useEffect21, useMemo as useMemo42, useState as useState21 } from "react";
1382
1385
 
1383
1386
  // ../paths/dist/esm/index.mjs
1384
1387
  var cutLInstruction = ({
@@ -3484,6 +3487,94 @@ var getBoundingBox = (d) => {
3484
3487
  const unarced = removeATSHVQInstructions(normalizeInstructions(parsed));
3485
3488
  return getBoundingBoxFromInstructions(unarced);
3486
3489
  };
3490
+ var translateSegments = (segments, x, y) => {
3491
+ return segments.map((segment) => {
3492
+ if (segment.type === "a" || segment.type === "c" || segment.type === "v" || segment.type === "s" || segment.type === "h" || segment.type === "l" || segment.type === "m" || segment.type === "q" || segment.type === "t") {
3493
+ return segment;
3494
+ }
3495
+ if (segment.type === "V") {
3496
+ return {
3497
+ type: "V",
3498
+ y: segment.y + y
3499
+ };
3500
+ }
3501
+ if (segment.type === "H") {
3502
+ return {
3503
+ type: "H",
3504
+ x: segment.x + x
3505
+ };
3506
+ }
3507
+ if (segment.type === "A") {
3508
+ return {
3509
+ type: "A",
3510
+ rx: segment.rx,
3511
+ ry: segment.ry,
3512
+ largeArcFlag: segment.largeArcFlag,
3513
+ sweepFlag: segment.sweepFlag,
3514
+ xAxisRotation: segment.xAxisRotation,
3515
+ x: segment.x + x,
3516
+ y: segment.y + y
3517
+ };
3518
+ }
3519
+ if (segment.type === "Z") {
3520
+ return segment;
3521
+ }
3522
+ if (segment.type === "C") {
3523
+ return {
3524
+ type: "C",
3525
+ cp1x: segment.cp1x + x,
3526
+ cp1y: segment.cp1y + y,
3527
+ cp2x: segment.cp2x + x,
3528
+ cp2y: segment.cp2y + y,
3529
+ x: segment.x + x,
3530
+ y: segment.y + y
3531
+ };
3532
+ }
3533
+ if (segment.type === "Q") {
3534
+ return {
3535
+ type: "Q",
3536
+ cpx: segment.cpx + x,
3537
+ cpy: segment.cpy + y,
3538
+ x: segment.x + x,
3539
+ y: segment.y + y
3540
+ };
3541
+ }
3542
+ if (segment.type === "S") {
3543
+ return {
3544
+ type: "S",
3545
+ cpx: segment.cpx + x,
3546
+ cpy: segment.cpy + y,
3547
+ x: segment.x + x,
3548
+ y: segment.y + y
3549
+ };
3550
+ }
3551
+ if (segment.type === "T") {
3552
+ return {
3553
+ type: "T",
3554
+ x: segment.x + x,
3555
+ y: segment.y + y
3556
+ };
3557
+ }
3558
+ if (segment.type === "L") {
3559
+ return {
3560
+ type: "L",
3561
+ x: segment.x + x,
3562
+ y: segment.y + y
3563
+ };
3564
+ }
3565
+ if (segment.type === "M") {
3566
+ return {
3567
+ type: "M",
3568
+ x: segment.x + x,
3569
+ y: segment.y + y
3570
+ };
3571
+ }
3572
+ throw new Error(`Unknown segment type: ${segment.type}`);
3573
+ });
3574
+ };
3575
+ var translatePath = (path, x, y) => {
3576
+ return serializeInstructions(translateSegments(parsePath(path), x, y));
3577
+ };
3487
3578
  var mod = (x, m) => {
3488
3579
  return (x % m + m) % m;
3489
3580
  };
@@ -4045,94 +4136,6 @@ var getLength = (path) => {
4045
4136
  const constructucted = construct(path);
4046
4137
  return constructucted.totalLength;
4047
4138
  };
4048
- var translateSegments = (segments, x, y) => {
4049
- return segments.map((segment) => {
4050
- if (segment.type === "a" || segment.type === "c" || segment.type === "v" || segment.type === "s" || segment.type === "h" || segment.type === "l" || segment.type === "m" || segment.type === "q" || segment.type === "t") {
4051
- return segment;
4052
- }
4053
- if (segment.type === "V") {
4054
- return {
4055
- type: "V",
4056
- y: segment.y + y
4057
- };
4058
- }
4059
- if (segment.type === "H") {
4060
- return {
4061
- type: "H",
4062
- x: segment.x + x
4063
- };
4064
- }
4065
- if (segment.type === "A") {
4066
- return {
4067
- type: "A",
4068
- rx: segment.rx,
4069
- ry: segment.ry,
4070
- largeArcFlag: segment.largeArcFlag,
4071
- sweepFlag: segment.sweepFlag,
4072
- xAxisRotation: segment.xAxisRotation,
4073
- x: segment.x + x,
4074
- y: segment.y + y
4075
- };
4076
- }
4077
- if (segment.type === "Z") {
4078
- return segment;
4079
- }
4080
- if (segment.type === "C") {
4081
- return {
4082
- type: "C",
4083
- cp1x: segment.cp1x + x,
4084
- cp1y: segment.cp1y + y,
4085
- cp2x: segment.cp2x + x,
4086
- cp2y: segment.cp2y + y,
4087
- x: segment.x + x,
4088
- y: segment.y + y
4089
- };
4090
- }
4091
- if (segment.type === "Q") {
4092
- return {
4093
- type: "Q",
4094
- cpx: segment.cpx + x,
4095
- cpy: segment.cpy + y,
4096
- x: segment.x + x,
4097
- y: segment.y + y
4098
- };
4099
- }
4100
- if (segment.type === "S") {
4101
- return {
4102
- type: "S",
4103
- cpx: segment.cpx + x,
4104
- cpy: segment.cpy + y,
4105
- x: segment.x + x,
4106
- y: segment.y + y
4107
- };
4108
- }
4109
- if (segment.type === "T") {
4110
- return {
4111
- type: "T",
4112
- x: segment.x + x,
4113
- y: segment.y + y
4114
- };
4115
- }
4116
- if (segment.type === "L") {
4117
- return {
4118
- type: "L",
4119
- x: segment.x + x,
4120
- y: segment.y + y
4121
- };
4122
- }
4123
- if (segment.type === "M") {
4124
- return {
4125
- type: "M",
4126
- x: segment.x + x,
4127
- y: segment.y + y
4128
- };
4129
- }
4130
- throw new Error(`Unknown segment type: ${segment.type}`);
4131
- });
4132
- };
4133
- var translatePath = (path, x, y) => {
4134
- return serializeInstructions(translateSegments(parsePath(path), x, y));
4135
- };
4136
4139
  var resetPath = (d) => {
4137
4140
  const box = getBoundingBox(d);
4138
4141
  return translatePath(d, -box.x1, -box.y1);
@@ -4321,8 +4324,8 @@ import {
4321
4324
  forwardRef as forwardRef10,
4322
4325
  useCallback as useCallback17,
4323
4326
  useContext as useContext32,
4324
- useEffect as useEffect17,
4325
4327
  useImperativeHandle as useImperativeHandle7,
4328
+ useLayoutEffect as useLayoutEffect10,
4326
4329
  useMemo as useMemo31,
4327
4330
  useRef as useRef23,
4328
4331
  useState as useState16
@@ -4330,7 +4333,7 @@ import {
4330
4333
  import { jsx as jsx26 } from "react/jsx-runtime";
4331
4334
  import { forwardRef as forwardRef11, useCallback as useCallback18, useState as useState17 } from "react";
4332
4335
  import { jsx as jsx27 } from "react/jsx-runtime";
4333
- import { useCallback as useCallback19, useContext as useContext33, useLayoutEffect as useLayoutEffect10, useRef as useRef24 } from "react";
4336
+ import { useCallback as useCallback19, useContext as useContext33, useLayoutEffect as useLayoutEffect11, useRef as useRef24 } from "react";
4334
4337
  import { jsx as jsx28 } from "react/jsx-runtime";
4335
4338
  import React29, { forwardRef as forwardRef12, useCallback as useCallback20, useRef as useRef25 } from "react";
4336
4339
  import { jsx as jsx29 } from "react/jsx-runtime";
@@ -4356,8 +4359,8 @@ import { useCallback as useCallback24 } from "react";
4356
4359
  import {
4357
4360
  useCallback as useCallback22,
4358
4361
  useContext as useContext36,
4359
- useEffect as useEffect18,
4360
- useLayoutEffect as useLayoutEffect11,
4362
+ useEffect as useEffect17,
4363
+ useLayoutEffect as useLayoutEffect12,
4361
4364
  useMemo as useMemo35,
4362
4365
  useState as useState19
4363
4366
  } from "react";
@@ -4366,13 +4369,13 @@ import React37, {
4366
4369
  forwardRef as forwardRef13,
4367
4370
  useCallback as useCallback23,
4368
4371
  useContext as useContext37,
4369
- useEffect as useEffect20,
4372
+ useEffect as useEffect19,
4370
4373
  useImperativeHandle as useImperativeHandle9,
4371
4374
  useMemo as useMemo36,
4372
4375
  useRef as useRef27,
4373
4376
  useState as useState20
4374
4377
  } from "react";
4375
- import { useEffect as useEffect19 } from "react";
4378
+ import { useEffect as useEffect18 } from "react";
4376
4379
  import { jsx as jsx34 } from "react/jsx-runtime";
4377
4380
  import { jsx as jsx35 } from "react/jsx-runtime";
4378
4381
  import React39, { useMemo as useMemo37 } from "react";
@@ -4389,9 +4392,9 @@ import { forwardRef as forwardRef16, useCallback as useCallback25, useContext as
4389
4392
  import {
4390
4393
  forwardRef as forwardRef15,
4391
4394
  useContext as useContext38,
4392
- useEffect as useEffect21,
4395
+ useEffect as useEffect20,
4393
4396
  useImperativeHandle as useImperativeHandle10,
4394
- useLayoutEffect as useLayoutEffect12,
4397
+ useLayoutEffect as useLayoutEffect13,
4395
4398
  useMemo as useMemo39,
4396
4399
  useRef as useRef28
4397
4400
  } from "react";
@@ -5565,7 +5568,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
5565
5568
  var addSequenceStackTraces = (component) => {
5566
5569
  componentsToAddStacksTo.push(component);
5567
5570
  };
5568
- var VERSION = "4.0.484";
5571
+ var VERSION = "4.0.486";
5569
5572
  var checkMultipleRemotionVersions = () => {
5570
5573
  if (typeof globalThis === "undefined") {
5571
5574
  return;
@@ -5971,6 +5974,12 @@ var textSchema = {
5971
5974
  default: undefined,
5972
5975
  description: "Color"
5973
5976
  },
5977
+ "style.fontFamily": {
5978
+ type: "font-family",
5979
+ default: undefined,
5980
+ description: "Font family",
5981
+ keyframable: false
5982
+ },
5974
5983
  "style.fontSize": {
5975
5984
  type: "number",
5976
5985
  default: undefined,
@@ -6036,6 +6045,14 @@ var textSchema = {
6036
6045
  hiddenFromList: false
6037
6046
  }
6038
6047
  };
6048
+ var textContentSchema = {
6049
+ children: {
6050
+ type: "text-content",
6051
+ default: "",
6052
+ description: "Text",
6053
+ keyframable: false
6054
+ }
6055
+ };
6039
6056
  var premountSchema = {
6040
6057
  premountFor: {
6041
6058
  type: "number",
@@ -8403,10 +8420,21 @@ var getNestedValue = (obj, key) => {
8403
8420
  }
8404
8421
  return current;
8405
8422
  };
8406
- var readValuesFromProps = (props, keys) => {
8423
+ var getRuntimeValueForSchemaKey = ({
8424
+ flatSchema,
8425
+ key,
8426
+ props
8427
+ }) => {
8428
+ const value = getNestedValue(props, key);
8429
+ if (flatSchema[key]?.type === "text-content" && typeof value !== "string") {
8430
+ return;
8431
+ }
8432
+ return value;
8433
+ };
8434
+ var readValuesFromProps = (props, keys, flatSchema) => {
8407
8435
  const out = {};
8408
8436
  for (const key of keys) {
8409
- out[key] = getNestedValue(props, key);
8437
+ out[key] = flatSchema ? getRuntimeValueForSchemaKey({ flatSchema, key, props }) : getNestedValue(props, key);
8410
8438
  }
8411
8439
  return out;
8412
8440
  };
@@ -8414,6 +8442,7 @@ var selectActiveKeys = (schema, values) => {
8414
8442
  return Object.keys(flattenActiveSchema(schema, (key) => values[key]));
8415
8443
  };
8416
8444
  var mergeValues = ({
8445
+ flatSchema,
8417
8446
  props,
8418
8447
  valuesDotNotation,
8419
8448
  schemaKeys,
@@ -8422,6 +8451,9 @@ var mergeValues = ({
8422
8451
  const merged = { ...props };
8423
8452
  for (const key of schemaKeys) {
8424
8453
  const value = valuesDotNotation[key];
8454
+ if (flatSchema[key]?.type === "text-content" && value === undefined) {
8455
+ continue;
8456
+ }
8425
8457
  const parts = key.split(".");
8426
8458
  if (parts.length === 1) {
8427
8459
  merged[key] = value;
@@ -8439,7 +8471,8 @@ var mergeValues = ({
8439
8471
  }
8440
8472
  current[parts[parts.length - 1]] = value;
8441
8473
  }
8442
- deleteNestedKey(merged, propsToDelete);
8474
+ const propsToDeleteWithoutTextContent = new Set([...propsToDelete].filter((key) => !(flatSchema[key]?.type === "text-content" && valuesDotNotation[key] === undefined)));
8475
+ deleteNestedKey(merged, propsToDeleteWithoutTextContent);
8443
8476
  return merged;
8444
8477
  };
8445
8478
  var stackToOverrideMap = {};
@@ -8486,8 +8519,12 @@ var withInteractivitySchema = ({
8486
8519
  return newOverrideId;
8487
8520
  });
8488
8521
  const nodePath = nodePathMapping.overrideIdToNodePathMappings[overrideId] ?? null;
8489
- const runtimeValues = flatKeys.map((k) => getNestedValue(props, k));
8490
- const currentRuntimeValueDotNotation = useMemo13(() => readValuesFromProps(props, flatKeys), runtimeValues);
8522
+ const runtimeValues = flatKeys.map((key) => getRuntimeValueForSchemaKey({
8523
+ flatSchema,
8524
+ key,
8525
+ props
8526
+ }));
8527
+ const currentRuntimeValueDotNotation = useMemo13(() => readValuesFromProps(props, flatKeys, flatSchema), runtimeValues);
8491
8528
  const controls = useMemo13(() => {
8492
8529
  return {
8493
8530
  schema: schemaWithSequenceName,
@@ -8515,6 +8552,7 @@ var withInteractivitySchema = ({
8515
8552
  ]);
8516
8553
  const activeKeys = selectActiveKeys(schemaWithSequenceName, valuesDotNotation);
8517
8554
  const mergedProps = mergeValues({
8555
+ flatSchema,
8518
8556
  props,
8519
8557
  valuesDotNotation,
8520
8558
  schemaKeys: activeKeys,
@@ -11138,7 +11176,7 @@ var getTimelineDuration = ({
11138
11176
  trimAfter
11139
11177
  });
11140
11178
  if (parentSequenceDurationInFrames !== null) {
11141
- const cappedDuration = Math.min(parentSequenceDurationInFrames * playbackRate, mediaDuration);
11179
+ const cappedDuration = Math.min(parentSequenceDurationInFrames, mediaDuration);
11142
11180
  return Number(cappedDuration.toFixed(10));
11143
11181
  }
11144
11182
  return mediaDuration;
@@ -13272,6 +13310,18 @@ var loadImage = ({
13272
13310
  function exponentialBackoff(errorCount) {
13273
13311
  return 1000 * 2 ** (errorCount - 1);
13274
13312
  }
13313
+ var waitForNextFrame = ({
13314
+ onFrame
13315
+ }) => {
13316
+ if (typeof requestAnimationFrame === "undefined") {
13317
+ onFrame();
13318
+ return () => {
13319
+ return;
13320
+ };
13321
+ }
13322
+ const frame = requestAnimationFrame(onFrame);
13323
+ return () => cancelAnimationFrame(frame);
13324
+ };
13275
13325
  var CanvasImageContent = forwardRef10(({
13276
13326
  src,
13277
13327
  width,
@@ -13301,6 +13351,17 @@ var CanvasImageContent = forwardRef10(({
13301
13351
  overrideId: controls?.overrideId ?? null
13302
13352
  });
13303
13353
  const sequenceContext = useContext32(SequenceContext);
13354
+ const pendingLoadDelayRef = useRef23(null);
13355
+ const continuePendingLoadDelay = useCallback17(() => {
13356
+ const pending = pendingLoadDelayRef.current;
13357
+ if (!pending || pending.continued) {
13358
+ return;
13359
+ }
13360
+ pending.continued = true;
13361
+ pending.unblock();
13362
+ continueRender2(pending.handle);
13363
+ pendingLoadDelayRef.current = null;
13364
+ }, [continueRender2]);
13304
13365
  const sourceCanvas = useMemo31(() => {
13305
13366
  if (typeof document === "undefined") {
13306
13367
  return null;
@@ -13318,7 +13379,7 @@ var CanvasImageContent = forwardRef10(({
13318
13379
  ref.current = canvas;
13319
13380
  }
13320
13381
  }, [ref, refForOutline]);
13321
- useEffect17(() => {
13382
+ useLayoutEffect10(() => {
13322
13383
  const isPremounting = Boolean(sequenceContext?.premounting);
13323
13384
  const isPostmounting = Boolean(sequenceContext?.postmounting);
13324
13385
  const handle = delayRender2(`Rendering <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`, {
@@ -13330,17 +13391,13 @@ var CanvasImageContent = forwardRef10(({
13330
13391
  };
13331
13392
  const controller = new AbortController;
13332
13393
  let cancelled = false;
13333
- let continued = false;
13334
13394
  let errorCount = 0;
13335
13395
  let timeoutId = null;
13336
13396
  setLoadedImage(null);
13337
- const continueRenderOnce = () => {
13338
- if (continued) {
13339
- return;
13340
- }
13341
- continued = true;
13342
- unblock();
13343
- continueRender2(handle);
13397
+ pendingLoadDelayRef.current = {
13398
+ handle,
13399
+ unblock,
13400
+ continued: false
13344
13401
  };
13345
13402
  const attemptLoad = () => {
13346
13403
  loadImage({ src: actualSrc, signal: controller.signal }).then((image) => {
@@ -13348,13 +13405,9 @@ var CanvasImageContent = forwardRef10(({
13348
13405
  return;
13349
13406
  }
13350
13407
  setLoadedImage(image);
13351
- }).then(() => {
13352
- if (!cancelled) {
13353
- continueRenderOnce();
13354
- }
13355
13408
  }).catch((err) => {
13356
13409
  if (err.name === "AbortError") {
13357
- continueRenderOnce();
13410
+ continuePendingLoadDelay();
13358
13411
  return;
13359
13412
  }
13360
13413
  errorCount++;
@@ -13368,7 +13421,7 @@ var CanvasImageContent = forwardRef10(({
13368
13421
  }, backoff);
13369
13422
  } else if (onError) {
13370
13423
  onError(err);
13371
- continueRenderOnce();
13424
+ continuePendingLoadDelay();
13372
13425
  } else {
13373
13426
  cancelRender2(err);
13374
13427
  }
@@ -13381,12 +13434,12 @@ var CanvasImageContent = forwardRef10(({
13381
13434
  clearTimeout(timeoutId);
13382
13435
  }
13383
13436
  controller.abort();
13384
- continueRenderOnce();
13437
+ continuePendingLoadDelay();
13385
13438
  };
13386
13439
  }, [
13387
13440
  actualSrc,
13388
13441
  cancelRender2,
13389
- continueRender2,
13442
+ continuePendingLoadDelay,
13390
13443
  delayPlayback,
13391
13444
  delayRender2,
13392
13445
  delayRenderRetries,
@@ -13397,13 +13450,16 @@ var CanvasImageContent = forwardRef10(({
13397
13450
  sequenceContext?.postmounting,
13398
13451
  sequenceContext?.premounting
13399
13452
  ]);
13400
- useEffect17(() => {
13453
+ useLayoutEffect10(() => {
13401
13454
  if (!loadedImage || !outputCanvas || !sourceCanvas) {
13402
13455
  return;
13403
13456
  }
13404
13457
  const handle = delayRender2(`Applying effects to <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`);
13405
13458
  let cancelled = false;
13406
13459
  let continued = false;
13460
+ let cancelWaitForNextFrame = () => {
13461
+ return;
13462
+ };
13407
13463
  const continueRenderOnce = () => {
13408
13464
  if (continued) {
13409
13465
  return;
@@ -13438,7 +13494,15 @@ var CanvasImageContent = forwardRef10(({
13438
13494
  height: canvasHeight
13439
13495
  }).then((completed) => {
13440
13496
  if (completed && !cancelled) {
13441
- continueRenderOnce();
13497
+ cancelWaitForNextFrame = waitForNextFrame({
13498
+ onFrame: () => {
13499
+ if (cancelled) {
13500
+ return;
13501
+ }
13502
+ continueRenderOnce();
13503
+ continuePendingLoadDelay();
13504
+ }
13505
+ });
13442
13506
  }
13443
13507
  }).catch((err) => {
13444
13508
  if (cancelled) {
@@ -13447,12 +13511,14 @@ var CanvasImageContent = forwardRef10(({
13447
13511
  if (onError) {
13448
13512
  onError(err);
13449
13513
  continueRenderOnce();
13514
+ continuePendingLoadDelay();
13450
13515
  } else {
13451
13516
  cancelRender2(err);
13452
13517
  }
13453
13518
  });
13454
13519
  return () => {
13455
13520
  cancelled = true;
13521
+ cancelWaitForNextFrame();
13456
13522
  continueRenderOnce();
13457
13523
  };
13458
13524
  }, [
@@ -13460,6 +13526,7 @@ var CanvasImageContent = forwardRef10(({
13460
13526
  cancelRender2,
13461
13527
  chainState,
13462
13528
  continueRender2,
13529
+ continuePendingLoadDelay,
13463
13530
  delayRender2,
13464
13531
  fit,
13465
13532
  height,
@@ -13669,7 +13736,7 @@ var ImgContent = ({
13669
13736
  if (typeof window !== "undefined") {
13670
13737
  const isPremounting = Boolean(sequenceContext?.premounting);
13671
13738
  const isPostmounting = Boolean(sequenceContext?.postmounting);
13672
- useLayoutEffect10(() => {
13739
+ useLayoutEffect11(() => {
13673
13740
  if (window.process?.env?.NODE_ENV === "test") {
13674
13741
  if (imageRef.current) {
13675
13742
  imageRef.current.src = actualSrc;
@@ -13936,7 +14003,8 @@ addSequenceStackTraces(Img);
13936
14003
  var interactiveElementSchema = {
13937
14004
  ...baseSchema,
13938
14005
  ...transformSchema,
13939
- ...textSchema
14006
+ ...textSchema,
14007
+ ...textContentSchema
13940
14008
  };
13941
14009
  var setRef = (ref, value) => {
13942
14010
  if (typeof ref === "function") {
@@ -14564,7 +14632,7 @@ var OffthreadVideoForRendering = ({
14564
14632
  mediaVolume: 1
14565
14633
  });
14566
14634
  warnAboutTooHighVolume(volume);
14567
- useEffect18(() => {
14635
+ useEffect17(() => {
14568
14636
  if (!src) {
14569
14637
  throw new Error("No src passed");
14570
14638
  }
@@ -14621,7 +14689,7 @@ var OffthreadVideoForRendering = ({
14621
14689
  }, [toneMapped, currentTime, src, transparent]);
14622
14690
  const [imageSrc, setImageSrc] = useState19(null);
14623
14691
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
14624
- useLayoutEffect11(() => {
14692
+ useLayoutEffect12(() => {
14625
14693
  if (!window.remotion_videoEnabled) {
14626
14694
  return;
14627
14695
  }
@@ -14725,7 +14793,7 @@ var useEmitVideoFrame = ({
14725
14793
  ref,
14726
14794
  onVideoFrame
14727
14795
  }) => {
14728
- useEffect19(() => {
14796
+ useEffect18(() => {
14729
14797
  const { current } = ref;
14730
14798
  if (!current) {
14731
14799
  return;
@@ -14900,7 +14968,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
14900
14968
  tag: "video",
14901
14969
  mountTime
14902
14970
  }));
14903
- useEffect20(() => {
14971
+ useEffect19(() => {
14904
14972
  const { current } = videoRef;
14905
14973
  if (!current) {
14906
14974
  return;
@@ -14943,7 +15011,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
14943
15011
  const currentOnDurationCallback = useRef27(onDuration);
14944
15012
  currentOnDurationCallback.current = onDuration;
14945
15013
  useEmitVideoFrame({ ref: videoRef, onVideoFrame });
14946
- useEffect20(() => {
15014
+ useEffect19(() => {
14947
15015
  const { current } = videoRef;
14948
15016
  if (!current) {
14949
15017
  return;
@@ -14960,7 +15028,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
14960
15028
  current.removeEventListener("loadedmetadata", onLoadedMetadata);
14961
15029
  };
14962
15030
  }, [src]);
14963
- useEffect20(() => {
15031
+ useEffect19(() => {
14964
15032
  const { current } = videoRef;
14965
15033
  if (!current) {
14966
15034
  return;
@@ -15741,7 +15809,7 @@ var VideoForRenderingForwardFunction = ({
15741
15809
  mediaVolume: 1
15742
15810
  });
15743
15811
  warnAboutTooHighVolume(volume);
15744
- useEffect21(() => {
15812
+ useEffect20(() => {
15745
15813
  if (!props2.src) {
15746
15814
  throw new Error("No src passed");
15747
15815
  }
@@ -15785,7 +15853,7 @@ var VideoForRenderingForwardFunction = ({
15785
15853
  return videoRef.current;
15786
15854
  }, []);
15787
15855
  useEmitVideoFrame({ ref: videoRef, onVideoFrame });
15788
- useEffect21(() => {
15856
+ useEffect20(() => {
15789
15857
  if (!window.remotion_videoEnabled) {
15790
15858
  return;
15791
15859
  }
@@ -15875,7 +15943,7 @@ var VideoForRenderingForwardFunction = ({
15875
15943
  ]);
15876
15944
  const { src } = props2;
15877
15945
  if (environment.isRendering) {
15878
- useLayoutEffect12(() => {
15946
+ useLayoutEffect13(() => {
15879
15947
  if (window.process?.env?.NODE_ENV === "test") {
15880
15948
  return;
15881
15949
  }
@@ -18979,7 +19047,7 @@ var extrudeAndTransformElement = (options) => {
18979
19047
  // ../design/dist/esm/index.mjs
18980
19048
  import { jsx as jsx212, Fragment as Fragment3 } from "react/jsx-runtime";
18981
19049
  import { jsx as jsx312, jsxs as jsxs5 } from "react/jsx-runtime";
18982
- import { useEffect as useEffect23, useMemo as useMemo210, useRef as useRef31 } from "react";
19050
+ import { useEffect as useEffect22, useMemo as useMemo210, useRef as useRef31 } from "react";
18983
19051
  import { jsx as jsx44 } from "react/jsx-runtime";
18984
19052
  import { jsx as jsx53, jsxs as jsxs22 } from "react/jsx-runtime";
18985
19053
  import React62 from "react";
@@ -19234,7 +19302,7 @@ var useHoverTransforms = (ref, disabled) => {
19234
19302
  isActive: false
19235
19303
  });
19236
19304
  const eventTarget = useMemo42(() => new EventTarget, []);
19237
- useEffect22(() => {
19305
+ useEffect21(() => {
19238
19306
  if (disabled) {
19239
19307
  eventTarget.dispatchEvent(new Event("disabled"));
19240
19308
  } else {
@@ -19381,7 +19449,7 @@ var getAngle = (ref, coordinates) => {
19381
19449
  var lastCoordinates = null;
19382
19450
  var useMousePosition = (ref) => {
19383
19451
  const [angle, setAngle] = useState21(getAngle(ref.current, lastCoordinates));
19384
- useEffect22(() => {
19452
+ useEffect21(() => {
19385
19453
  const element = ref.current;
19386
19454
  if (!element) {
19387
19455
  return;
@@ -19502,7 +19570,7 @@ var Spinner = ({ size, duration }) => {
19502
19570
  };
19503
19571
  }, [size]);
19504
19572
  const pathsRef = useRef31([]);
19505
- useEffect23(() => {
19573
+ useEffect22(() => {
19506
19574
  const animate = () => {
19507
19575
  const now = performance.now();
19508
19576
  for (let index = 0;index < lines; index++) {
@@ -27568,7 +27636,10 @@ var CompanyPricing = () => {
27568
27636
 
27569
27637
  // src/components/homepage/Pricing.tsx
27570
27638
  import { jsx as jsx47, jsxs as jsxs8 } from "react/jsx-runtime";
27571
- var Pricing = () => {
27639
+ var Pricing = ({ faqHref = "/docs/pricing#faq" }) => {
27640
+ const faqLinkTarget = useMemo52(() => {
27641
+ return faqHref.startsWith("http") ? "_blank" : undefined;
27642
+ }, [faqHref]);
27572
27643
  return /* @__PURE__ */ jsxs8("div", {
27573
27644
  style: {
27574
27645
  display: "flex",
@@ -27593,9 +27664,9 @@ var Pricing = () => {
27593
27664
  "See our",
27594
27665
  " ",
27595
27666
  /* @__PURE__ */ jsx47("a", {
27596
- target: "_blank",
27667
+ target: faqLinkTarget,
27597
27668
  className: "bluelink",
27598
- href: "https://remotion.pro/faq",
27669
+ href: faqHref,
27599
27670
  children: "FAQ"
27600
27671
  }),
27601
27672
  " ",