@remotion/promo-pages 4.0.476 → 4.0.478

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/team.js CHANGED
@@ -217,7 +217,7 @@ var TitleTeamCards = () => {
217
217
  import * as React23 from "react";
218
218
  import * as React3 from "react";
219
219
  import { Fragment as Fragment2, jsx as jsx44 } from "react/jsx-runtime";
220
- import React52, { useCallback as useCallback26, useRef as useRef210, useState as useState22 } from "react";
220
+ import React52, { useCallback as useCallback27, useRef as useRef210, useState as useState22 } from "react";
221
221
 
222
222
  // ../../node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
223
223
  function r(e) {
@@ -4354,6 +4354,7 @@ import { useContext as useContext8, useMemo as useMemo7 } from "react";
4354
4354
  import { jsx as jsx7 } from "react/jsx-runtime";
4355
4355
  import {
4356
4356
  forwardRef as forwardRef3,
4357
+ useCallback as useCallback6,
4357
4358
  useContext as useContext17,
4358
4359
  useEffect as useEffect3,
4359
4360
  useMemo as useMemo14,
@@ -4392,14 +4393,14 @@ import {
4392
4393
  useRef as useRef9,
4393
4394
  useState as useState6
4394
4395
  } from "react";
4395
- import React15, { useCallback as useCallback6, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
4396
+ import React15, { useCallback as useCallback7, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
4396
4397
  import { useEffect as useEffect4, useMemo as useMemo15, useRef as useRef7 } from "react";
4397
4398
  import { jsx as jsx13 } from "react/jsx-runtime";
4398
4399
  import { jsx as jsx14 } from "react/jsx-runtime";
4399
4400
  import { useContext as useContext18, useLayoutEffect as useLayoutEffect4, useState as useState8 } from "react";
4400
4401
  import {
4401
4402
  createContext as createContext17,
4402
- useCallback as useCallback7,
4403
+ useCallback as useCallback8,
4403
4404
  useImperativeHandle as useImperativeHandle3,
4404
4405
  useLayoutEffect as useLayoutEffect3,
4405
4406
  useMemo as useMemo17,
@@ -4407,7 +4408,7 @@ import {
4407
4408
  useState as useState7
4408
4409
  } from "react";
4409
4410
  import { jsx as jsx15 } from "react/jsx-runtime";
4410
- import { forwardRef as forwardRef7, useCallback as useCallback13, useContext as useContext30 } from "react";
4411
+ import { forwardRef as forwardRef7, useCallback as useCallback14, useContext as useContext30 } from "react";
4411
4412
  import React16, { createContext as createContext18, useMemo as useMemo18 } from "react";
4412
4413
  import { jsx as jsx16 } from "react/jsx-runtime";
4413
4414
  import { useContext as useContext19 } from "react";
@@ -4415,7 +4416,7 @@ import { createContext as createContext19, useEffect as useEffect6, useState as
4415
4416
  import { jsx as jsx17 } from "react/jsx-runtime";
4416
4417
  import { createContext as createContext20, useMemo as useMemo19, useReducer } from "react";
4417
4418
  import { jsx as jsx18 } from "react/jsx-runtime";
4418
- import { useCallback as useCallback12 } from "react";
4419
+ import { useCallback as useCallback13 } from "react";
4419
4420
  import React22, {
4420
4421
  forwardRef as forwardRef5,
4421
4422
  useContext as useContext28,
@@ -4429,7 +4430,7 @@ import { useContext as useContext21, useLayoutEffect as useLayoutEffect5, useRef
4429
4430
  import React19, {
4430
4431
  createContext as createContext21,
4431
4432
  createRef as createRef2,
4432
- useCallback as useCallback8,
4433
+ useCallback as useCallback9,
4433
4434
  useContext as useContext20,
4434
4435
  useEffect as useEffect7,
4435
4436
  useMemo as useMemo21,
@@ -4442,16 +4443,16 @@ import { useRef as useRef13 } from "react";
4442
4443
  import { useContext as useContext23, useEffect as useEffect8, useMemo as useMemo22, useState as useState11 } from "react";
4443
4444
  import { useContext as useContext22 } from "react";
4444
4445
  import {
4445
- useCallback as useCallback11,
4446
+ useCallback as useCallback12,
4446
4447
  useContext as useContext26,
4447
4448
  useEffect as useEffect12,
4448
4449
  useLayoutEffect as useLayoutEffect7,
4449
4450
  useRef as useRef18
4450
4451
  } from "react";
4451
- import { useCallback as useCallback10, useMemo as useMemo25, useRef as useRef16 } from "react";
4452
+ import { useCallback as useCallback11, useMemo as useMemo25, useRef as useRef16 } from "react";
4452
4453
  import { useContext as useContext25, useMemo as useMemo24 } from "react";
4453
4454
  import React20, {
4454
- useCallback as useCallback9,
4455
+ useCallback as useCallback10,
4455
4456
  useContext as useContext24,
4456
4457
  useEffect as useEffect9,
4457
4458
  useLayoutEffect as useLayoutEffect6,
@@ -4479,7 +4480,7 @@ import { jsx as jsx222 } from "react/jsx-runtime";
4479
4480
  import { jsx as jsx23 } from "react/jsx-runtime";
4480
4481
  import {
4481
4482
  forwardRef as forwardRef8,
4482
- useCallback as useCallback14,
4483
+ useCallback as useCallback15,
4483
4484
  useEffect as useEffect16,
4484
4485
  useImperativeHandle as useImperativeHandle6,
4485
4486
  useMemo as useMemo29,
@@ -4490,7 +4491,7 @@ import { jsx as jsx24 } from "react/jsx-runtime";
4490
4491
  import {
4491
4492
  createContext as createContext23,
4492
4493
  forwardRef as forwardRef9,
4493
- useCallback as useCallback15,
4494
+ useCallback as useCallback16,
4494
4495
  useContext as useContext31,
4495
4496
  useLayoutEffect as useLayoutEffect9,
4496
4497
  useMemo as useMemo30,
@@ -4499,7 +4500,7 @@ import {
4499
4500
  import { jsx as jsx25 } from "react/jsx-runtime";
4500
4501
  import {
4501
4502
  forwardRef as forwardRef10,
4502
- useCallback as useCallback16,
4503
+ useCallback as useCallback17,
4503
4504
  useContext as useContext32,
4504
4505
  useEffect as useEffect17,
4505
4506
  useImperativeHandle as useImperativeHandle7,
@@ -4508,16 +4509,16 @@ import {
4508
4509
  useState as useState16
4509
4510
  } from "react";
4510
4511
  import { jsx as jsx26 } from "react/jsx-runtime";
4511
- import { forwardRef as forwardRef11, useCallback as useCallback17, useState as useState17 } from "react";
4512
+ import { forwardRef as forwardRef11, useCallback as useCallback18, useState as useState17 } from "react";
4512
4513
  import { jsx as jsx27 } from "react/jsx-runtime";
4513
- import { useCallback as useCallback18, useContext as useContext33, useLayoutEffect as useLayoutEffect10, useRef as useRef24 } from "react";
4514
+ import { useCallback as useCallback19, useContext as useContext33, useLayoutEffect as useLayoutEffect10, useRef as useRef24 } from "react";
4514
4515
  import { jsx as jsx28 } from "react/jsx-runtime";
4515
- import React29, { forwardRef as forwardRef12, useCallback as useCallback19, useRef as useRef25 } from "react";
4516
+ import React29, { forwardRef as forwardRef12, useCallback as useCallback20, useRef as useRef25 } from "react";
4516
4517
  import { jsx as jsx29 } from "react/jsx-runtime";
4517
4518
  import { createRef as createRef3 } from "react";
4518
4519
  import React30 from "react";
4519
4520
  import {
4520
- useCallback as useCallback20,
4521
+ useCallback as useCallback21,
4521
4522
  useImperativeHandle as useImperativeHandle8,
4522
4523
  useMemo as useMemo32,
4523
4524
  useRef as useRef26,
@@ -4532,9 +4533,9 @@ import { jsx as jsx322 } from "react/jsx-runtime";
4532
4533
  import React33 from "react";
4533
4534
  import React34, { createContext as createContext25 } from "react";
4534
4535
  import React35, { useContext as useContext35 } from "react";
4535
- import { useCallback as useCallback23 } from "react";
4536
+ import { useCallback as useCallback24 } from "react";
4536
4537
  import {
4537
- useCallback as useCallback21,
4538
+ useCallback as useCallback22,
4538
4539
  useContext as useContext36,
4539
4540
  useEffect as useEffect18,
4540
4541
  useLayoutEffect as useLayoutEffect11,
@@ -4544,7 +4545,7 @@ import {
4544
4545
  import { jsx as jsx33 } from "react/jsx-runtime";
4545
4546
  import React37, {
4546
4547
  forwardRef as forwardRef13,
4547
- useCallback as useCallback22,
4548
+ useCallback as useCallback23,
4548
4549
  useContext as useContext37,
4549
4550
  useEffect as useEffect20,
4550
4551
  useImperativeHandle as useImperativeHandle9,
@@ -4565,7 +4566,7 @@ import {
4565
4566
  import React40 from "react";
4566
4567
  import { jsx as jsx37 } from "react/jsx-runtime";
4567
4568
  import React42 from "react";
4568
- import { forwardRef as forwardRef16, useCallback as useCallback24, useContext as useContext39 } from "react";
4569
+ import { forwardRef as forwardRef16, useCallback as useCallback25, useContext as useContext39 } from "react";
4569
4570
  import {
4570
4571
  forwardRef as forwardRef15,
4571
4572
  useContext as useContext38,
@@ -5745,7 +5746,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
5745
5746
  var addSequenceStackTraces = (component) => {
5746
5747
  componentsToAddStacksTo.push(component);
5747
5748
  };
5748
- var VERSION = "4.0.476";
5749
+ var VERSION = "4.0.478";
5749
5750
  var checkMultipleRemotionVersions = () => {
5750
5751
  if (typeof globalThis === "undefined") {
5751
5752
  return;
@@ -6204,10 +6205,17 @@ var fromField = {
6204
6205
  step: 1,
6205
6206
  hiddenFromList: true
6206
6207
  };
6208
+ var freezeField = {
6209
+ type: "number",
6210
+ default: null,
6211
+ step: 1,
6212
+ hiddenFromList: true
6213
+ };
6207
6214
  var sequenceSchema = extendSchemaWithSequenceName({
6208
6215
  hidden: hiddenField,
6209
6216
  showInTimeline: showInTimelineField,
6210
6217
  from: fromField,
6218
+ freeze: freezeField,
6211
6219
  durationInFrames: durationInFramesField,
6212
6220
  layout: {
6213
6221
  type: "enum",
@@ -6222,6 +6230,7 @@ var sequenceSchema = extendSchemaWithSequenceName({
6222
6230
  var sequenceSchemaWithoutFrom = extendSchemaWithSequenceName({
6223
6231
  hidden: hiddenField,
6224
6232
  showInTimeline: showInTimelineField,
6233
+ freeze: freezeField,
6225
6234
  durationInFrames: durationInFramesField,
6226
6235
  layout: sequenceSchema.layout
6227
6236
  });
@@ -8413,6 +8422,7 @@ var mergeValues = ({
8413
8422
  var stackToOverrideMap = {};
8414
8423
  var wrapInSchema = ({
8415
8424
  Component,
8425
+ componentIdentity,
8416
8426
  schema,
8417
8427
  supportsEffects
8418
8428
  }) => {
@@ -8459,7 +8469,8 @@ var wrapInSchema = ({
8459
8469
  schema: schemaWithSequenceName,
8460
8470
  currentRuntimeValueDotNotation,
8461
8471
  overrideId,
8462
- supportsEffects
8472
+ supportsEffects,
8473
+ componentIdentity
8463
8474
  };
8464
8475
  }, [currentRuntimeValueDotNotation, overrideId]);
8465
8476
  const { merged: valuesDotNotation, propsToDelete } = useMemo13(() => {
@@ -8496,6 +8507,7 @@ var wrapInSchema = ({
8496
8507
  var EMPTY_EFFECTS = [];
8497
8508
  var RegularSequenceRefForwardingFunction = ({
8498
8509
  from = 0,
8510
+ freeze,
8499
8511
  durationInFrames = Infinity,
8500
8512
  children,
8501
8513
  name,
@@ -8511,7 +8523,7 @@ var RegularSequenceRefForwardingFunction = ({
8511
8523
  _remotionInternalPremountDisplay: premountDisplay,
8512
8524
  _remotionInternalPostmountDisplay: postmountDisplay,
8513
8525
  _remotionInternalIsMedia: isMedia,
8514
- _remotionInternalRefForOutline: refForOutline,
8526
+ _remotionInternalRefForOutline: passedRefForOutline,
8515
8527
  ...other
8516
8528
  }, ref) => {
8517
8529
  const { layout = "absolute-fill" } = other;
@@ -8539,11 +8551,24 @@ var RegularSequenceRefForwardingFunction = ({
8539
8551
  if (!Number.isFinite(from)) {
8540
8552
  throw new TypeError(`The "from" prop of a sequence must be finite, but got ${from}.`);
8541
8553
  }
8554
+ if (typeof freeze !== "undefined" && freeze !== null) {
8555
+ if (typeof freeze !== "number") {
8556
+ throw new TypeError(`The "freeze" prop of <Sequence /> must be a number, but is of type ${typeof freeze}.`);
8557
+ }
8558
+ if (Number.isNaN(freeze)) {
8559
+ throw new TypeError(`The "freeze" prop of <Sequence /> must be a real number, but it is NaN.`);
8560
+ }
8561
+ if (!Number.isFinite(freeze)) {
8562
+ throw new TypeError(`The "freeze" prop of <Sequence /> must be finite, but it is ${freeze}.`);
8563
+ }
8564
+ }
8542
8565
  const absoluteFrame = useTimelinePosition();
8543
8566
  const videoConfig = useVideoConfig();
8544
8567
  const parentSequenceDuration = parentSequence ? Math.min(parentSequence.durationInFrames - from, durationInFrames) : durationInFrames;
8545
8568
  const actualDurationInFrames = Math.max(0, Math.min(videoConfig.durationInFrames - from, parentSequenceDuration));
8546
8569
  const { registerSequence, unregisterSequence } = useContext17(SequenceManager);
8570
+ const wrapperRefForOutline = useRef6(null);
8571
+ const refForOutline = other.layout === "none" ? passedRefForOutline ?? null : passedRefForOutline ?? wrapperRefForOutline;
8547
8572
  const premounting = useMemo14(() => {
8548
8573
  return parentSequence?.premounting || Boolean(other._remotionInternalIsPremounting);
8549
8574
  }, [other._remotionInternalIsPremounting, parentSequence?.premounting]);
@@ -8595,6 +8620,11 @@ var RegularSequenceRefForwardingFunction = ({
8595
8620
  const inheritedStack = other?.stack ?? null;
8596
8621
  const stackRef = useRef6(null);
8597
8622
  stackRef.current = stack ?? inheritedStack;
8623
+ const registeredFrozenFrame = typeof freeze === "number" ? freeze : null;
8624
+ const parentCumulatedNegativeFrom = parentSequence?.cumulatedNegativeFrom ?? 0;
8625
+ const startMediaFrom = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom - cumulatedNegativeFrom : null;
8626
+ const mediaFrameAtSequenceZero = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom : null;
8627
+ const frozenMediaFrame = isMedia && isMedia.type !== "image" && mediaFrameAtSequenceZero !== null ? registeredFrozenFrame === null ? null : mediaFrameAtSequenceZero + (loopDisplay ? registeredFrozenFrame % loopDisplay.durationInFrames : registeredFrozenFrame) * isMedia.data.playbackRate : null;
8598
8628
  useEffect3(() => {
8599
8629
  if (!env.isStudio) {
8600
8630
  return;
@@ -8620,7 +8650,8 @@ var RegularSequenceRefForwardingFunction = ({
8620
8650
  src: isMedia.src,
8621
8651
  getStack: () => stackRef.current,
8622
8652
  refForOutline: refForOutline ?? null,
8623
- isInsideSeries
8653
+ isInsideSeries,
8654
+ frozenFrame: registeredFrozenFrame
8624
8655
  });
8625
8656
  } else {
8626
8657
  registerSequence({
@@ -8643,10 +8674,12 @@ var RegularSequenceRefForwardingFunction = ({
8643
8674
  showInTimeline,
8644
8675
  src: isMedia.data.src,
8645
8676
  getStack: () => stackRef.current,
8646
- startMediaFrom: isMedia.data.startMediaFrom,
8677
+ startMediaFrom: startMediaFrom ?? isMedia.data.startMediaFrom,
8647
8678
  volume: isMedia.data.volumes,
8648
8679
  refForOutline: refForOutline ?? null,
8649
- isInsideSeries
8680
+ isInsideSeries,
8681
+ frozenFrame: registeredFrozenFrame,
8682
+ frozenMediaFrame
8650
8683
  });
8651
8684
  }
8652
8685
  return () => {
@@ -8671,7 +8704,8 @@ var RegularSequenceRefForwardingFunction = ({
8671
8704
  controls: controls ?? null,
8672
8705
  effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
8673
8706
  refForOutline: refForOutline ?? null,
8674
- isInsideSeries
8707
+ isInsideSeries,
8708
+ frozenFrame: registeredFrozenFrame
8675
8709
  });
8676
8710
  return () => {
8677
8711
  unregisterSequence(id);
@@ -8698,11 +8732,26 @@ var RegularSequenceRefForwardingFunction = ({
8698
8732
  isMedia,
8699
8733
  resolvedDocumentationLink,
8700
8734
  refForOutline,
8701
- isInsideSeries
8735
+ isInsideSeries,
8736
+ registeredFrozenFrame,
8737
+ startMediaFrom,
8738
+ frozenMediaFrame
8702
8739
  ]);
8703
8740
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
8704
8741
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
8742
+ const frozenContent = content === null || typeof freeze === "undefined" || freeze === null ? content : /* @__PURE__ */ jsx12(Freeze, {
8743
+ frame: freeze,
8744
+ children: content
8745
+ });
8705
8746
  const styleIfThere = other.layout === "none" ? undefined : other.style;
8747
+ const sequenceRef = useCallback6((node) => {
8748
+ wrapperRefForOutline.current = node;
8749
+ if (typeof ref === "function") {
8750
+ ref(node);
8751
+ } else if (ref) {
8752
+ ref.current = node;
8753
+ }
8754
+ }, [ref]);
8706
8755
  const defaultStyle = useMemo14(() => {
8707
8756
  return {
8708
8757
  flexDirection: undefined,
@@ -8719,11 +8768,11 @@ var RegularSequenceRefForwardingFunction = ({
8719
8768
  }
8720
8769
  return /* @__PURE__ */ jsx12(SequenceContext.Provider, {
8721
8770
  value: contextValue,
8722
- children: content === null ? null : other.layout === "none" ? content : /* @__PURE__ */ jsx12(AbsoluteFill, {
8723
- ref,
8771
+ children: frozenContent === null ? null : other.layout === "none" ? frozenContent : /* @__PURE__ */ jsx12(AbsoluteFill, {
8772
+ ref: sequenceRef,
8724
8773
  style: defaultStyle,
8725
8774
  className: other.className,
8726
- children: content
8775
+ children: frozenContent
8727
8776
  })
8728
8777
  });
8729
8778
  };
@@ -8803,11 +8852,13 @@ var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
8803
8852
  var SequenceWithoutSchema = SequenceInner;
8804
8853
  var Sequence = wrapInSchema({
8805
8854
  Component: SequenceInner,
8855
+ componentIdentity: "dev.remotion.remotion.Sequence",
8806
8856
  schema: sequenceSchema,
8807
8857
  supportsEffects: false
8808
8858
  });
8809
8859
  var SequenceWithoutFrom = wrapInSchema({
8810
8860
  Component: SequenceInner,
8861
+ componentIdentity: null,
8811
8862
  schema: sequenceSchemaWithoutFrom,
8812
8863
  supportsEffects: false
8813
8864
  });
@@ -9125,7 +9176,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effec
9125
9176
  }
9126
9177
  return document.createElement("canvas");
9127
9178
  }, []);
9128
- const draw = useCallback6((imageData) => {
9179
+ const draw = useCallback7((imageData) => {
9129
9180
  const canvas = canvasRef.current;
9130
9181
  const canvasWidth = width ?? imageData.displayWidth;
9131
9182
  const canvasHeight = height ?? imageData.displayHeight;
@@ -9346,6 +9397,7 @@ var resolveAnimatedImageSource = (src) => {
9346
9397
  var animatedImageSchema = {
9347
9398
  durationInFrames: durationInFramesField,
9348
9399
  from: fromField,
9400
+ freeze: freezeField,
9349
9401
  playbackRate: {
9350
9402
  type: "number",
9351
9403
  min: 0,
@@ -9545,6 +9597,7 @@ var AnimatedImageInner = ({
9545
9597
  };
9546
9598
  var AnimatedImage = wrapInSchema({
9547
9599
  Component: AnimatedImageInner,
9600
+ componentIdentity: "dev.remotion.remotion.AnimatedImage",
9548
9601
  schema: animatedImageSchema,
9549
9602
  supportsEffects: true
9550
9603
  });
@@ -9591,7 +9644,7 @@ var RenderAssetManager = createContext17({
9591
9644
  var RenderAssetManagerProvider = ({ children, collectAssets }) => {
9592
9645
  const [renderAssets, setRenderAssets] = useState7([]);
9593
9646
  const renderAssetsRef = useRef10([]);
9594
- const registerRenderAsset = useCallback7((renderAsset) => {
9647
+ const registerRenderAsset = useCallback8((renderAsset) => {
9595
9648
  validateRenderAsset(renderAsset);
9596
9649
  renderAssetsRef.current = [...renderAssetsRef.current, renderAsset];
9597
9650
  setRenderAssets(renderAssetsRef.current);
@@ -9608,7 +9661,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
9608
9661
  };
9609
9662
  }, []);
9610
9663
  }
9611
- const unregisterRenderAsset = useCallback7((id) => {
9664
+ const unregisterRenderAsset = useCallback8((id) => {
9612
9665
  renderAssetsRef.current = renderAssetsRef.current.filter((a2) => a2.id !== id);
9613
9666
  setRenderAssets(renderAssetsRef.current);
9614
9667
  }, []);
@@ -10413,7 +10466,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
10413
10466
  }, []);
10414
10467
  const prevEndTimes = useRef12({ scheduledEndTime: null, mediaEndTime: null });
10415
10468
  const nodesToResume = useRef12(new Map);
10416
- const unscheduleAudioNode = useCallback8((node) => {
10469
+ const unscheduleAudioNode = useCallback9((node) => {
10417
10470
  nodesToResume.current.delete(node);
10418
10471
  }, []);
10419
10472
  const scheduleAudioNode = useMemo21(() => {
@@ -10467,7 +10520,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
10467
10520
  };
10468
10521
  };
10469
10522
  }, [ctxAndGain, logLevel]);
10470
- const resume = useCallback8(() => {
10523
+ const resume = useCallback9(() => {
10471
10524
  if (!ctxAndGain) {
10472
10525
  return Promise.resolve();
10473
10526
  }
@@ -10494,10 +10547,10 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
10494
10547
  });
10495
10548
  return resumePromise.catch(() => {});
10496
10549
  }, [ctxAndGain, logLevel]);
10497
- const getIsResumingAudioContext = useCallback8(() => {
10550
+ const getIsResumingAudioContext = useCallback9(() => {
10498
10551
  return isResuming.current;
10499
10552
  }, []);
10500
- const suspend = useCallback8(() => {
10553
+ const suspend = useCallback9(() => {
10501
10554
  if (!ctxAndGain) {
10502
10555
  return Promise.resolve();
10503
10556
  }
@@ -10571,7 +10624,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10571
10624
  };
10572
10625
  }, [refs]);
10573
10626
  const takenAudios = useRef12(new Array(numberOfAudioTags).fill(false));
10574
- const rerenderAudios = useCallback8(() => {
10627
+ const rerenderAudios = useCallback9(() => {
10575
10628
  refs.forEach(({ ref, id }) => {
10576
10629
  const data = audios.current?.find((a2) => a2.id === id);
10577
10630
  const { current } = ref;
@@ -10592,7 +10645,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10592
10645
  });
10593
10646
  });
10594
10647
  }, [refs]);
10595
- const registerAudio = useCallback8((options) => {
10648
+ const registerAudio = useCallback9((options) => {
10596
10649
  const { aud, audioId, premounting, postmounting } = options;
10597
10650
  const found = audios.current?.find((a2) => a2.audioId === audioId);
10598
10651
  if (found) {
@@ -10621,7 +10674,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10621
10674
  rerenderAudios();
10622
10675
  return newElem;
10623
10676
  }, [numberOfAudioTags, refs, rerenderAudios]);
10624
- const unregisterAudio = useCallback8((id) => {
10677
+ const unregisterAudio = useCallback9((id) => {
10625
10678
  const cloned = [...takenAudios.current];
10626
10679
  const index = refs.findIndex((r2) => r2.id === id);
10627
10680
  if (index === -1) {
@@ -10632,7 +10685,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10632
10685
  audios.current = audios.current?.filter((a2) => a2.id !== id);
10633
10686
  rerenderAudios();
10634
10687
  }, [refs, rerenderAudios]);
10635
- const updateAudio = useCallback8(({
10688
+ const updateAudio = useCallback9(({
10636
10689
  aud,
10637
10690
  audioId,
10638
10691
  id,
@@ -10666,7 +10719,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10666
10719
  rerenderAudios();
10667
10720
  }
10668
10721
  }, [rerenderAudios]);
10669
- const playAllAudios = useCallback8(() => {
10722
+ const playAllAudios = useCallback9(() => {
10670
10723
  refs.forEach((ref) => {
10671
10724
  const audio = audios.current.find((a2) => a2.el === ref.ref);
10672
10725
  if (audio?.premounting) {
@@ -11177,7 +11230,9 @@ var useMediaInTimeline = ({
11177
11230
  controls: null,
11178
11231
  effects: [],
11179
11232
  refForOutline,
11180
- isInsideSeries: false
11233
+ isInsideSeries: false,
11234
+ frozenFrame: null,
11235
+ frozenMediaFrame: null
11181
11236
  });
11182
11237
  return () => {
11183
11238
  unregisterSequence(id);
@@ -11214,7 +11269,7 @@ var useBufferManager = (logLevel, mountTime) => {
11214
11269
  const env = useRemotionEnvironment();
11215
11270
  const rendering = env.isRendering;
11216
11271
  const buffering = useRef15(false);
11217
- const addBlock = useCallback9((block) => {
11272
+ const addBlock = useCallback10((block) => {
11218
11273
  if (rendering) {
11219
11274
  return {
11220
11275
  unblock: () => {
@@ -11240,7 +11295,7 @@ var useBufferManager = (logLevel, mountTime) => {
11240
11295
  }
11241
11296
  };
11242
11297
  }, [rendering]);
11243
- const listenForBuffering = useCallback9((callback) => {
11298
+ const listenForBuffering = useCallback10((callback) => {
11244
11299
  setOnBufferingCallbacks((c2) => [...c2, callback]);
11245
11300
  return {
11246
11301
  remove: () => {
@@ -11248,7 +11303,7 @@ var useBufferManager = (logLevel, mountTime) => {
11248
11303
  }
11249
11304
  };
11250
11305
  }, []);
11251
- const listenForResume = useCallback9((callback) => {
11306
+ const listenForResume = useCallback10((callback) => {
11252
11307
  setOnResumeCallbacks((c2) => [...c2, callback]);
11253
11308
  return {
11254
11309
  remove: () => {
@@ -11362,7 +11417,7 @@ var useBufferUntilFirstFrame = ({
11362
11417
  }) => {
11363
11418
  const bufferingRef = useRef16(false);
11364
11419
  const { delayPlayback } = useBufferState();
11365
- const bufferUntilFirstFrame = useCallback10((requestedTime) => {
11420
+ const bufferUntilFirstFrame = useCallback11((requestedTime) => {
11366
11421
  if (mediaType !== "video") {
11367
11422
  return;
11368
11423
  }
@@ -11752,7 +11807,7 @@ var useMediaPlayback = ({
11752
11807
  throw new Error("useMediaPlayback must be used inside a <BufferingContext>");
11753
11808
  }
11754
11809
  const isVariableFpsVideoMap = useRef18({});
11755
- const onVariableFpsVideoDetected = useCallback11(() => {
11810
+ const onVariableFpsVideoDetected = useCallback12(() => {
11756
11811
  if (!src) {
11757
11812
  return;
11758
11813
  }
@@ -12143,7 +12198,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
12143
12198
  premounting: Boolean(sequenceContext?.premounting),
12144
12199
  postmounting: Boolean(sequenceContext?.postmounting)
12145
12200
  });
12146
- const getStack = useCallback12(() => {
12201
+ const getStack = useCallback13(() => {
12147
12202
  return _remotionInternalStack ?? null;
12148
12203
  }, [_remotionInternalStack]);
12149
12204
  useMediaInTimeline({
@@ -12389,7 +12444,7 @@ var AudioRefForwardingFunction = (props, ref) => {
12389
12444
  throw new TypeError(`The \`<Html5Audio>\` tag requires a string for \`src\`, but got ${JSON.stringify(props.src)} instead.`);
12390
12445
  }
12391
12446
  const preloadedSrc = usePreload(props.src);
12392
- const onError = useCallback13((e) => {
12447
+ const onError = useCallback14((e) => {
12393
12448
  console.log(e.currentTarget.error);
12394
12449
  const errMessage = `Could not play audio with src ${preloadedSrc}: ${e.currentTarget.error}. See https://remotion.dev/docs/media-playback-error for help.`;
12395
12450
  if (loop) {
@@ -12403,7 +12458,7 @@ var AudioRefForwardingFunction = (props, ref) => {
12403
12458
  console.warn(errMessage);
12404
12459
  }
12405
12460
  }, [loop, onRemotionError, preloadedSrc]);
12406
- const onDuration = useCallback13((src, durationInSeconds) => {
12461
+ const onDuration = useCallback14((src, durationInSeconds) => {
12407
12462
  setDurations({ type: "got-duration", durationInSeconds, src });
12408
12463
  }, [setDurations]);
12409
12464
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props.src)];
@@ -12495,6 +12550,7 @@ var resolveSolidPixelDensity = (pixelDensity) => {
12495
12550
  var solidSchema = {
12496
12551
  durationInFrames: durationInFramesField,
12497
12552
  from: fromField,
12553
+ freeze: freezeField,
12498
12554
  color: {
12499
12555
  type: "color",
12500
12556
  default: "transparent",
@@ -12549,7 +12605,7 @@ var SolidInner = ({
12549
12605
  return canvas;
12550
12606
  }, []);
12551
12607
  const chainState = useEffectChainState();
12552
- const canvasRef = useCallback14((canvas) => {
12608
+ const canvasRef = useCallback15((canvas) => {
12553
12609
  setOutputCanvas(canvas);
12554
12610
  if (typeof reference === "function") {
12555
12611
  reference(canvas);
@@ -12633,6 +12689,7 @@ var SolidOuter = forwardRef8(({
12633
12689
  style,
12634
12690
  name,
12635
12691
  from,
12692
+ freeze,
12636
12693
  hidden,
12637
12694
  showInTimeline,
12638
12695
  pixelDensity,
@@ -12646,6 +12703,7 @@ var SolidOuter = forwardRef8(({
12646
12703
  return /* @__PURE__ */ jsx24(Sequence, {
12647
12704
  layout: "none",
12648
12705
  from,
12706
+ freeze,
12649
12707
  hidden,
12650
12708
  showInTimeline,
12651
12709
  _experimentalControls: controls,
@@ -12670,6 +12728,7 @@ var SolidOuter = forwardRef8(({
12670
12728
  });
12671
12729
  var Solid = wrapInSchema({
12672
12730
  Component: SolidOuter,
12731
+ componentIdentity: "dev.remotion.remotion.Solid",
12673
12732
  schema: solidSchema,
12674
12733
  supportsEffects: true
12675
12734
  });
@@ -12759,7 +12818,7 @@ var HtmlInCanvasContent = forwardRef9(({
12759
12818
  const offscreenRef = useRef22(null);
12760
12819
  const divRef = useRef22(null);
12761
12820
  const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
12762
- const setLayoutCanvasRef = useCallback15((node) => {
12821
+ const setLayoutCanvasRef = useCallback16((node) => {
12763
12822
  canvas2dRef.current = node;
12764
12823
  if (typeof ref === "function") {
12765
12824
  ref(node);
@@ -12781,7 +12840,7 @@ var HtmlInCanvasContent = forwardRef9(({
12781
12840
  const initializedRef = useRef22(false);
12782
12841
  const onInitCleanupRef = useRef22(null);
12783
12842
  const unmountedRef = useRef22(false);
12784
- const onPaintCb = useCallback15(async () => {
12843
+ const onPaintCb = useCallback16(async () => {
12785
12844
  const element = divRef.current;
12786
12845
  if (!element) {
12787
12846
  throw new Error("Canvas or scene element not found");
@@ -12954,7 +13013,7 @@ var HtmlInCanvasInner = forwardRef9(({
12954
13013
  const resolvedDuration = durationInFrames ?? videoDuration;
12955
13014
  const memoizedEffectDefinitions = useMemoizedEffectDefinitions(effects);
12956
13015
  const actualRef = useRef22(null);
12957
- const setCanvasRef = useCallback15((node) => {
13016
+ const setCanvasRef = useCallback16((node) => {
12958
13017
  actualRef.current = node;
12959
13018
  if (typeof ref === "function") {
12960
13019
  ref(node);
@@ -12989,11 +13048,13 @@ HtmlInCanvasInner.displayName = "HtmlInCanvas";
12989
13048
  var htmlInCanvasSchema = {
12990
13049
  durationInFrames: durationInFramesField,
12991
13050
  from: fromField,
13051
+ freeze: freezeField,
12992
13052
  ...sequenceVisualStyleSchema,
12993
13053
  hidden: hiddenField
12994
13054
  };
12995
13055
  var HtmlInCanvasWrapped = wrapInSchema({
12996
13056
  Component: HtmlInCanvasInner,
13057
+ componentIdentity: "dev.remotion.remotion.HtmlInCanvas",
12997
13058
  schema: htmlInCanvasSchema,
12998
13059
  supportsEffects: true
12999
13060
  });
@@ -13011,6 +13072,7 @@ function truncateSrcForLabel(src) {
13011
13072
  var canvasImageSchema = {
13012
13073
  durationInFrames: durationInFramesField,
13013
13074
  from: fromField,
13075
+ freeze: freezeField,
13014
13076
  fit: {
13015
13077
  type: "enum",
13016
13078
  default: "fill",
@@ -13116,7 +13178,7 @@ var CanvasImageContent = forwardRef10(({
13116
13178
  }
13117
13179
  return document.createElement("canvas");
13118
13180
  }, []);
13119
- const canvasRef = useCallback16((canvas) => {
13181
+ const canvasRef = useCallback17((canvas) => {
13120
13182
  setOutputCanvas(canvas);
13121
13183
  if (refForOutline) {
13122
13184
  refForOutline.current = canvas;
@@ -13263,6 +13325,7 @@ var CanvasImageInner = forwardRef10(({
13263
13325
  delayRenderTimeoutInMilliseconds,
13264
13326
  durationInFrames,
13265
13327
  from,
13328
+ freeze,
13266
13329
  hidden,
13267
13330
  name,
13268
13331
  showInTimeline,
@@ -13284,6 +13347,7 @@ var CanvasImageInner = forwardRef10(({
13284
13347
  layout: "none",
13285
13348
  from: from ?? 0,
13286
13349
  durationInFrames: durationInFrames ?? Infinity,
13350
+ freeze,
13287
13351
  hidden,
13288
13352
  showInTimeline: showInTimeline ?? true,
13289
13353
  name: name ?? "<CanvasImage>",
@@ -13316,6 +13380,7 @@ var CanvasImageInner = forwardRef10(({
13316
13380
  });
13317
13381
  var CanvasImage = wrapInSchema({
13318
13382
  Component: CanvasImageInner,
13383
+ componentIdentity: "dev.remotion.remotion.CanvasImage",
13319
13384
  schema: canvasImageSchema,
13320
13385
  supportsEffects: true
13321
13386
  });
@@ -13333,11 +13398,11 @@ var IFrameRefForwarding = ({
13333
13398
  retries: delayRenderRetries ?? undefined,
13334
13399
  timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
13335
13400
  }));
13336
- const didLoad = useCallback17((e) => {
13401
+ const didLoad = useCallback18((e) => {
13337
13402
  continueRender2(handle);
13338
13403
  onLoad?.(e);
13339
13404
  }, [handle, onLoad, continueRender2]);
13340
- const didGetError = useCallback17((e) => {
13405
+ const didGetError = useCallback18((e) => {
13341
13406
  continueRender2(handle);
13342
13407
  if (onError) {
13343
13408
  onError(e);
@@ -13379,7 +13444,7 @@ var ImgContent = ({
13379
13444
  if (!_propsValid) {
13380
13445
  throw new Error("typecheck error");
13381
13446
  }
13382
- const imageCallbackRef = useCallback18((img) => {
13447
+ const imageCallbackRef = useCallback19((img) => {
13383
13448
  imageRef.current = img;
13384
13449
  refForOutline.current = img;
13385
13450
  if (typeof ref === "function") {
@@ -13389,7 +13454,7 @@ var ImgContent = ({
13389
13454
  }
13390
13455
  }, [ref, refForOutline]);
13391
13456
  const actualSrc = usePreload(src);
13392
- const retryIn = useCallback18((timeout) => {
13457
+ const retryIn = useCallback19((timeout) => {
13393
13458
  if (!imageRef.current) {
13394
13459
  return;
13395
13460
  }
@@ -13407,7 +13472,7 @@ var ImgContent = ({
13407
13472
  }, timeout);
13408
13473
  }, []);
13409
13474
  const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
13410
- const didGetError = useCallback18((e) => {
13475
+ const didGetError = useCallback19((e) => {
13411
13476
  if (!errors.current) {
13412
13477
  return;
13413
13478
  }
@@ -13517,6 +13582,7 @@ var NativeImgInner = ({
13517
13582
  src,
13518
13583
  from,
13519
13584
  durationInFrames,
13585
+ freeze,
13520
13586
  _experimentalControls: controls,
13521
13587
  _remotionInternalRefForOutline: refForOutline,
13522
13588
  ...props2
@@ -13528,6 +13594,7 @@ var NativeImgInner = ({
13528
13594
  layout: "none",
13529
13595
  from: from ?? 0,
13530
13596
  durationInFrames: durationInFrames ?? Infinity,
13597
+ freeze,
13531
13598
  _remotionInternalStack: stack,
13532
13599
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/img",
13533
13600
  _remotionInternalIsMedia: { type: "image", src },
@@ -13547,6 +13614,7 @@ var CanvasImageWithPrivateProps = CanvasImage;
13547
13614
  var imgSchema = {
13548
13615
  durationInFrames: durationInFramesField,
13549
13616
  from: fromField,
13617
+ freeze: freezeField,
13550
13618
  ...sequenceVisualStyleSchema,
13551
13619
  hidden: hiddenField
13552
13620
  };
@@ -13602,6 +13670,7 @@ var ImgInner = ({
13602
13670
  src,
13603
13671
  from,
13604
13672
  durationInFrames,
13673
+ freeze,
13605
13674
  _experimentalControls: controls,
13606
13675
  width,
13607
13676
  height,
@@ -13626,6 +13695,7 @@ var ImgInner = ({
13626
13695
  src,
13627
13696
  from,
13628
13697
  durationInFrames,
13698
+ freeze,
13629
13699
  _experimentalControls: controls,
13630
13700
  width,
13631
13701
  height,
@@ -13667,6 +13737,7 @@ var ImgInner = ({
13667
13737
  delayRenderTimeoutInMilliseconds,
13668
13738
  from,
13669
13739
  durationInFrames,
13740
+ freeze,
13670
13741
  hidden,
13671
13742
  name: name ?? "<Img>",
13672
13743
  showInTimeline,
@@ -13679,6 +13750,7 @@ var ImgInner = ({
13679
13750
  };
13680
13751
  var Img = wrapInSchema({
13681
13752
  Component: ImgInner,
13753
+ componentIdentity: "dev.remotion.remotion.Img",
13682
13754
  schema: imgSchema,
13683
13755
  supportsEffects: true
13684
13756
  });
@@ -13686,6 +13758,7 @@ addSequenceStackTraces(Img);
13686
13758
  var interactiveElementSchema = {
13687
13759
  durationInFrames: durationInFramesField,
13688
13760
  from: fromField,
13761
+ freeze: freezeField,
13689
13762
  ...sequenceVisualStyleSchema,
13690
13763
  hidden: hiddenField
13691
13764
  };
@@ -13701,6 +13774,7 @@ var makeInteractiveElement = (tag, displayName) => {
13701
13774
  const {
13702
13775
  durationInFrames,
13703
13776
  from,
13777
+ freeze,
13704
13778
  hidden,
13705
13779
  name,
13706
13780
  showInTimeline,
@@ -13709,7 +13783,7 @@ var makeInteractiveElement = (tag, displayName) => {
13709
13783
  ...props2
13710
13784
  } = propsWithControls;
13711
13785
  const refForOutline = useRef25(null);
13712
- const callbackRef = useCallback19((element) => {
13786
+ const callbackRef = useCallback20((element) => {
13713
13787
  refForOutline.current = element;
13714
13788
  setRef(ref, element);
13715
13789
  }, [ref]);
@@ -13717,6 +13791,7 @@ var makeInteractiveElement = (tag, displayName) => {
13717
13791
  layout: "none",
13718
13792
  from: from ?? 0,
13719
13793
  durationInFrames: durationInFrames ?? Infinity,
13794
+ freeze,
13720
13795
  hidden,
13721
13796
  name: name ?? displayName,
13722
13797
  showInTimeline: showInTimeline ?? true,
@@ -13733,6 +13808,7 @@ var makeInteractiveElement = (tag, displayName) => {
13733
13808
  Inner.displayName = displayName;
13734
13809
  const Wrapped = wrapInSchema({
13735
13810
  Component: Inner,
13811
+ componentIdentity: `dev.remotion.remotion.${displayName.slice(1, -1)}`,
13736
13812
  schema: interactiveElementSchema,
13737
13813
  supportsEffects: false
13738
13814
  });
@@ -13789,14 +13865,14 @@ var CompositionManagerProvider = ({
13789
13865
  const [canvasContent, setCanvasContent] = useState18(initialCanvasContent);
13790
13866
  const [compositions, setCompositions] = useState18(initialCompositions);
13791
13867
  const currentcompositionsRef = useRef26(compositions);
13792
- const updateCompositions = useCallback20((updateComps) => {
13868
+ const updateCompositions = useCallback21((updateComps) => {
13793
13869
  setCompositions((comps) => {
13794
13870
  const updated = updateComps(comps);
13795
13871
  currentcompositionsRef.current = updated;
13796
13872
  return updated;
13797
13873
  });
13798
13874
  }, []);
13799
- const registerComposition = useCallback20((comp) => {
13875
+ const registerComposition = useCallback21((comp) => {
13800
13876
  updateCompositions((comps) => {
13801
13877
  if (comps.find((c2) => c2.id === comp.id)) {
13802
13878
  throw new Error(`Multiple composition with id ${comp.id} are registered.`);
@@ -13804,12 +13880,12 @@ var CompositionManagerProvider = ({
13804
13880
  return [...comps, comp];
13805
13881
  });
13806
13882
  }, [updateCompositions]);
13807
- const unregisterComposition = useCallback20((id) => {
13883
+ const unregisterComposition = useCallback21((id) => {
13808
13884
  setCompositions((comps) => {
13809
13885
  return comps.filter((c2) => c2.id !== id);
13810
13886
  });
13811
13887
  }, []);
13812
- const registerFolder = useCallback20((name, parent, nonce, stack) => {
13888
+ const registerFolder = useCallback21((name, parent, nonce, stack) => {
13813
13889
  setFolders((prevFolders) => {
13814
13890
  return [
13815
13891
  ...prevFolders,
@@ -13822,7 +13898,7 @@ var CompositionManagerProvider = ({
13822
13898
  ];
13823
13899
  });
13824
13900
  }, []);
13825
- const unregisterFolder = useCallback20((name, parent) => {
13901
+ const unregisterFolder = useCallback21((name, parent) => {
13826
13902
  setFolders((prevFolders) => {
13827
13903
  return prevFolders.filter((p) => !(p.name === name && p.parent === parent));
13828
13904
  });
@@ -14461,7 +14537,7 @@ var OffthreadVideoForRendering = ({
14461
14537
  continueRender2,
14462
14538
  delayRender2
14463
14539
  ]);
14464
- const onErr = useCallback21(() => {
14540
+ const onErr = useCallback22(() => {
14465
14541
  if (onError) {
14466
14542
  onError?.(new Error("Failed to load image with src " + imageSrc));
14467
14543
  } else {
@@ -14471,7 +14547,7 @@ var OffthreadVideoForRendering = ({
14471
14547
  const className = useMemo35(() => {
14472
14548
  return [OBJECTFIT_CONTAIN_CLASS_NAME, props2.className].filter(truthy).join(" ");
14473
14549
  }, [props2.className]);
14474
- const onImageFrame = useCallback21((img) => {
14550
+ const onImageFrame = useCallback22((img) => {
14475
14551
  if (onVideoFrame) {
14476
14552
  onVideoFrame(img);
14477
14553
  }
@@ -14604,7 +14680,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
14604
14680
  mediaVolume
14605
14681
  });
14606
14682
  warnAboutTooHighVolume(userPreferredVolume);
14607
- const getStack = useCallback22(() => {
14683
+ const getStack = useCallback23(() => {
14608
14684
  return _remotionInternalStack ?? null;
14609
14685
  }, [_remotionInternalStack]);
14610
14686
  useMediaInTimeline({
@@ -14780,7 +14856,7 @@ var InnerOffthreadVideo = (props2) => {
14780
14856
  if (environment.isClientSideRendering) {
14781
14857
  throw new Error("<OffthreadVideo> is not supported in @remotion/web-renderer. Use <Video> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");
14782
14858
  }
14783
- const onDuration = useCallback23(() => {
14859
+ const onDuration = useCallback24(() => {
14784
14860
  return;
14785
14861
  }, []);
14786
14862
  if (typeof props2.src !== "string") {
@@ -15159,6 +15235,7 @@ var Internals = {
15159
15235
  getEffectPropStatusesCtx,
15160
15236
  hiddenField,
15161
15237
  durationInFramesField,
15238
+ freezeField,
15162
15239
  fromField
15163
15240
  };
15164
15241
  var flattenChildren = (children) => {
@@ -15244,6 +15321,7 @@ var SeriesInner = (props2) => {
15244
15321
  };
15245
15322
  var Series = Object.assign(wrapInSchema({
15246
15323
  Component: SeriesInner,
15324
+ componentIdentity: "dev.remotion.remotion.Series",
15247
15325
  schema: sequenceSchemaDefaultLayoutNone,
15248
15326
  supportsEffects: false
15249
15327
  }), {
@@ -15708,7 +15786,7 @@ var VideoForwardingFunction = (props2, ref) => {
15708
15786
  throw new TypeError(`The \`<Html5Video>\` tag requires a string for \`src\`, but got ${JSON.stringify(props2.src)} instead.`);
15709
15787
  }
15710
15788
  const preloadedSrc = usePreload(props2.src);
15711
- const onDuration = useCallback24((src, durationInSeconds) => {
15789
+ const onDuration = useCallback25((src, durationInSeconds) => {
15712
15790
  setDurations({ type: "got-duration", durationInSeconds, src });
15713
15791
  }, [setDurations]);
15714
15792
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props2.src)];
@@ -15818,7 +15896,7 @@ addSequenceStackTraces(Composition);
15818
15896
  addSequenceStackTraces(Folder);
15819
15897
 
15820
15898
  // ../shapes/dist/esm/index.mjs
15821
- import React, { useCallback as useCallback25, useMemo as useMemo40, useRef as useRef29 } from "react";
15899
+ import React, { useCallback as useCallback26, useMemo as useMemo40, useRef as useRef29 } from "react";
15822
15900
  import { version } from "react-dom";
15823
15901
  import { jsx as jsx40, jsxs as jsxs4 } from "react/jsx-runtime";
15824
15902
  import { jsx as jsx210 } from "react/jsx-runtime";
@@ -15830,6 +15908,7 @@ import { jsx as jsx72 } from "react/jsx-runtime";
15830
15908
  import { jsx as jsx82 } from "react/jsx-runtime";
15831
15909
  import { jsx as jsx92 } from "react/jsx-runtime";
15832
15910
  import { jsx as jsx102 } from "react/jsx-runtime";
15911
+ import { jsx as jsx112 } from "react/jsx-runtime";
15833
15912
  var unitDir = (from, to) => {
15834
15913
  const dx = to[0] - from[0];
15835
15914
  const dy = to[1] - from[1];
@@ -15988,6 +16067,7 @@ var RenderSvg = ({
15988
16067
  pixelDensity,
15989
16068
  durationInFrames,
15990
16069
  from,
16070
+ freeze,
15991
16071
  hidden,
15992
16072
  name,
15993
16073
  showInTimeline,
@@ -16008,10 +16088,10 @@ var RenderSvg = ({
16008
16088
  };
16009
16089
  }, [pathStyle]);
16010
16090
  const outlineRef = useRef29(null);
16011
- const setSvgRef = useCallback25((node) => {
16091
+ const setSvgRef = useCallback26((node) => {
16012
16092
  outlineRef.current = node;
16013
16093
  }, []);
16014
- const setCanvasRef = useCallback25((canvas) => {
16094
+ const setCanvasRef = useCallback26((canvas) => {
16015
16095
  outlineRef.current = canvas;
16016
16096
  }, []);
16017
16097
  const memoizedEffectDefinitions = Internals.useMemoizedEffectDefinitions(effects);
@@ -16096,6 +16176,7 @@ var RenderSvg = ({
16096
16176
  return /* @__PURE__ */ jsx40(Sequence, {
16097
16177
  layout: "none",
16098
16178
  from,
16179
+ freeze,
16099
16180
  hidden,
16100
16181
  showInTimeline,
16101
16182
  _experimentalControls: controls,
@@ -16161,6 +16242,7 @@ var enumField = ({
16161
16242
  var makeShapeSchema = (shapeFields) => {
16162
16243
  return {
16163
16244
  from: Internals.sequenceSchema.from,
16245
+ freeze: Internals.sequenceSchema.freeze,
16164
16246
  durationInFrames: Internals.sequenceSchema.durationInFrames,
16165
16247
  ...shapeFields,
16166
16248
  fill: colorField({
@@ -16228,10 +16310,435 @@ var ArrowInner = ({
16228
16310
  };
16229
16311
  var Arrow = Internals.wrapInSchema({
16230
16312
  Component: ArrowInner,
16313
+ componentIdentity: "dev.remotion.shapes.Arrow",
16231
16314
  schema: arrowSchema,
16232
16315
  supportsEffects: true
16233
16316
  });
16234
16317
  Internals.addSequenceStackTraces(Arrow);
16318
+ var shortenVector = (vector, radius) => {
16319
+ const [x, y] = vector;
16320
+ const currentLength = Math.sqrt(x * x + y * y);
16321
+ const scalingFactor = (currentLength - radius) / currentLength;
16322
+ return [x * scalingFactor, y * scalingFactor];
16323
+ };
16324
+ var scaleVectorToLength = (vector, length2) => {
16325
+ const [x, y] = vector;
16326
+ const currentLength = Math.sqrt(x * x + y * y);
16327
+ const scalingFactor = length2 / currentLength;
16328
+ return [x * scalingFactor, y * scalingFactor];
16329
+ };
16330
+ var joinPoints = (points, {
16331
+ edgeRoundness,
16332
+ cornerRadius,
16333
+ roundCornerStrategy
16334
+ }) => {
16335
+ return points.map(([x, y], i) => {
16336
+ const prevPointIndex = i === 0 ? points.length - 2 : i - 1;
16337
+ const prevPoint = points[prevPointIndex];
16338
+ const nextPointIndex = i === points.length - 1 ? 1 : i + 1;
16339
+ const nextPoint = points[nextPointIndex];
16340
+ const middleOfLine = [(x + nextPoint[0]) / 2, (y + nextPoint[1]) / 2];
16341
+ const prevPointMiddleOfLine = [
16342
+ (x + prevPoint[0]) / 2,
16343
+ (y + prevPoint[1]) / 2
16344
+ ];
16345
+ const prevVector = [x - prevPoint[0], y - prevPoint[1]];
16346
+ const nextVector = [nextPoint[0] - x, nextPoint[1] - y];
16347
+ if (i === 0) {
16348
+ if (edgeRoundness !== null) {
16349
+ return [
16350
+ {
16351
+ type: "M",
16352
+ x: middleOfLine[0],
16353
+ y: middleOfLine[1]
16354
+ }
16355
+ ];
16356
+ }
16357
+ if (cornerRadius !== 0) {
16358
+ const computeRadius = shortenVector(nextVector, cornerRadius);
16359
+ return [
16360
+ {
16361
+ type: "M",
16362
+ x: computeRadius[0] + x,
16363
+ y: computeRadius[1] + y
16364
+ }
16365
+ ];
16366
+ }
16367
+ return [
16368
+ {
16369
+ type: "M",
16370
+ x,
16371
+ y
16372
+ }
16373
+ ];
16374
+ }
16375
+ if (cornerRadius && edgeRoundness !== null) {
16376
+ throw new Error(`"cornerRadius" and "edgeRoundness" cannot be specified at the same time.`);
16377
+ }
16378
+ if (edgeRoundness === null) {
16379
+ if (cornerRadius === 0) {
16380
+ return [
16381
+ {
16382
+ type: "L",
16383
+ x,
16384
+ y
16385
+ }
16386
+ ];
16387
+ }
16388
+ const prevVectorMinusRadius = shortenVector(prevVector, cornerRadius);
16389
+ const prevVectorLength = scaleVectorToLength(prevVector, cornerRadius);
16390
+ const nextVectorMinusRadius = scaleVectorToLength(nextVector, cornerRadius);
16391
+ const firstDraw = [
16392
+ prevPoint[0] + prevVectorMinusRadius[0],
16393
+ prevPoint[1] + prevVectorMinusRadius[1]
16394
+ ];
16395
+ return [
16396
+ {
16397
+ type: "L",
16398
+ x: firstDraw[0],
16399
+ y: firstDraw[1]
16400
+ },
16401
+ roundCornerStrategy === "arc" ? {
16402
+ type: "a",
16403
+ rx: cornerRadius,
16404
+ ry: cornerRadius,
16405
+ xAxisRotation: 0,
16406
+ dx: prevVectorLength[0] + nextVectorMinusRadius[0],
16407
+ dy: prevVectorLength[1] + nextVectorMinusRadius[1],
16408
+ largeArcFlag: false,
16409
+ sweepFlag: true
16410
+ } : {
16411
+ type: "C",
16412
+ x: firstDraw[0] + prevVectorLength[0] + nextVectorMinusRadius[0],
16413
+ y: firstDraw[1] + prevVectorLength[1] + nextVectorMinusRadius[1],
16414
+ cp1x: x,
16415
+ cp1y: y,
16416
+ cp2x: x,
16417
+ cp2y: y
16418
+ }
16419
+ ];
16420
+ }
16421
+ const controlPoint1 = [
16422
+ prevPointMiddleOfLine[0] + prevVector[0] * edgeRoundness * 0.5,
16423
+ prevPointMiddleOfLine[1] + prevVector[1] * edgeRoundness * 0.5
16424
+ ];
16425
+ const controlPoint2 = [
16426
+ middleOfLine[0] - nextVector[0] * edgeRoundness * 0.5,
16427
+ middleOfLine[1] - nextVector[1] * edgeRoundness * 0.5
16428
+ ];
16429
+ return [
16430
+ {
16431
+ type: "C",
16432
+ cp1x: controlPoint1[0],
16433
+ cp1y: controlPoint1[1],
16434
+ cp2x: controlPoint2[0],
16435
+ cp2y: controlPoint2[1],
16436
+ x: middleOfLine[0],
16437
+ y: middleOfLine[1]
16438
+ }
16439
+ ];
16440
+ }).flat(1);
16441
+ };
16442
+ var ensurePositive = (name, value) => {
16443
+ if (typeof value !== "number" || value <= 0) {
16444
+ throw new Error(`"${name}" must be a positive number, got ${value}`);
16445
+ }
16446
+ };
16447
+ var pointerInterval = ({
16448
+ availableLength,
16449
+ pointerBaseWidth,
16450
+ pointerPosition
16451
+ }) => {
16452
+ const center = availableLength * pointerPosition;
16453
+ const half = pointerBaseWidth / 2;
16454
+ return {
16455
+ center,
16456
+ start: Math.max(0, center - half),
16457
+ end: Math.min(availableLength, center + half)
16458
+ };
16459
+ };
16460
+ var areSamePoint = (a2, b2) => {
16461
+ return a2[0] === b2[0] && a2[1] === b2[1];
16462
+ };
16463
+ var normalizeClosedPoints = (points) => {
16464
+ const deduplicated = points.reduce((acc, entry) => {
16465
+ const previous = acc[acc.length - 1];
16466
+ if (previous && areSamePoint(previous.point, entry.point)) {
16467
+ acc[acc.length - 1] = {
16468
+ point: previous.point,
16469
+ round: previous.round && entry.round
16470
+ };
16471
+ return acc;
16472
+ }
16473
+ return [...acc, entry];
16474
+ }, []);
16475
+ if (deduplicated.length === 0) {
16476
+ return deduplicated;
16477
+ }
16478
+ const first = deduplicated[0];
16479
+ const last = deduplicated[deduplicated.length - 1];
16480
+ if (areSamePoint(first.point, last.point)) {
16481
+ const [firstEntry, ...rest] = deduplicated;
16482
+ const withoutLast = rest.slice(0, -1);
16483
+ const mergedFirst = {
16484
+ point: firstEntry.point,
16485
+ round: firstEntry.round && last.round
16486
+ };
16487
+ return [mergedFirst, ...withoutLast, mergedFirst];
16488
+ }
16489
+ return [...deduplicated, first];
16490
+ };
16491
+ var unitDir2 = (from, to) => {
16492
+ const dx = to[0] - from[0];
16493
+ const dy = to[1] - from[1];
16494
+ const len = Math.sqrt(dx * dx + dy * dy);
16495
+ if (len === 0) {
16496
+ return [0, 0];
16497
+ }
16498
+ return [dx / len, dy / len];
16499
+ };
16500
+ var makeInstructions2 = ({
16501
+ points,
16502
+ edgeRoundness,
16503
+ cornerRadius
16504
+ }) => {
16505
+ const rawPoints = points.map((p) => p.point);
16506
+ if (edgeRoundness !== null || cornerRadius === 0) {
16507
+ return [
16508
+ ...joinPoints(rawPoints, {
16509
+ edgeRoundness,
16510
+ cornerRadius,
16511
+ roundCornerStrategy: "arc"
16512
+ }),
16513
+ {
16514
+ type: "Z"
16515
+ }
16516
+ ];
16517
+ }
16518
+ const uniquePoints = areSamePoint(points[0].point, points[points.length - 1].point) ? points.slice(0, -1) : points;
16519
+ const firstPoint = uniquePoints[0];
16520
+ const startDir = firstPoint.round ? unitDir2(uniquePoints[0].point, uniquePoints[1].point) : null;
16521
+ const startPoint = startDir ? [
16522
+ firstPoint.point[0] + startDir[0] * cornerRadius,
16523
+ firstPoint.point[1] + startDir[1] * cornerRadius
16524
+ ] : firstPoint.point;
16525
+ const instructions = [
16526
+ { type: "M", x: startPoint[0], y: startPoint[1] }
16527
+ ];
16528
+ for (let i = 1;i < uniquePoints.length; i++) {
16529
+ const current = uniquePoints[i];
16530
+ if (!current.round) {
16531
+ instructions.push({
16532
+ type: "L",
16533
+ x: current.point[0],
16534
+ y: current.point[1]
16535
+ });
16536
+ continue;
16537
+ }
16538
+ const previous = uniquePoints[i - 1].point;
16539
+ const next = uniquePoints[(i + 1) % uniquePoints.length].point;
16540
+ const incoming = unitDir2(previous, current.point);
16541
+ const outgoing = unitDir2(current.point, next);
16542
+ const arcStart = [
16543
+ current.point[0] - incoming[0] * cornerRadius,
16544
+ current.point[1] - incoming[1] * cornerRadius
16545
+ ];
16546
+ instructions.push({
16547
+ type: "L",
16548
+ x: arcStart[0],
16549
+ y: arcStart[1]
16550
+ }, {
16551
+ type: "a",
16552
+ rx: cornerRadius,
16553
+ ry: cornerRadius,
16554
+ xAxisRotation: 0,
16555
+ dx: incoming[0] * cornerRadius + outgoing[0] * cornerRadius,
16556
+ dy: incoming[1] * cornerRadius + outgoing[1] * cornerRadius,
16557
+ largeArcFlag: false,
16558
+ sweepFlag: true
16559
+ });
16560
+ }
16561
+ if (firstPoint.round) {
16562
+ const previous = uniquePoints[uniquePoints.length - 1].point;
16563
+ const incoming = unitDir2(previous, firstPoint.point);
16564
+ instructions.push({
16565
+ type: "L",
16566
+ x: firstPoint.point[0] - incoming[0] * cornerRadius,
16567
+ y: firstPoint.point[1] - incoming[1] * cornerRadius
16568
+ }, {
16569
+ type: "a",
16570
+ rx: cornerRadius,
16571
+ ry: cornerRadius,
16572
+ xAxisRotation: 0,
16573
+ dx: incoming[0] * cornerRadius + startDir[0] * cornerRadius,
16574
+ dy: incoming[1] * cornerRadius + startDir[1] * cornerRadius,
16575
+ largeArcFlag: false,
16576
+ sweepFlag: true
16577
+ });
16578
+ }
16579
+ instructions.push({ type: "Z" });
16580
+ return instructions;
16581
+ };
16582
+ var makeCallout = ({
16583
+ width = 500,
16584
+ height = 200,
16585
+ pointerLength = 40,
16586
+ pointerBaseWidth = 60,
16587
+ pointerPosition = 0.5,
16588
+ pointerDirection = "down",
16589
+ edgeRoundness = null,
16590
+ cornerRadius = 0
16591
+ }) => {
16592
+ ensurePositive("width", width);
16593
+ ensurePositive("height", height);
16594
+ ensurePositive("pointerLength", pointerLength);
16595
+ ensurePositive("pointerBaseWidth", pointerBaseWidth);
16596
+ if (typeof pointerPosition !== "number" || pointerPosition < 0 || pointerPosition > 1) {
16597
+ throw new Error(`"pointerPosition" must be a number between 0 and 1, got ${pointerPosition}`);
16598
+ }
16599
+ const horizontalInterval = pointerInterval({
16600
+ availableLength: width,
16601
+ pointerBaseWidth,
16602
+ pointerPosition
16603
+ });
16604
+ const verticalInterval = pointerInterval({
16605
+ availableLength: height,
16606
+ pointerBaseWidth,
16607
+ pointerPosition
16608
+ });
16609
+ const pointsByDirection = {
16610
+ up: [
16611
+ { point: [0, pointerLength], round: true },
16612
+ { point: [horizontalInterval.start, pointerLength], round: false },
16613
+ { point: [horizontalInterval.center, 0], round: false },
16614
+ { point: [horizontalInterval.end, pointerLength], round: false },
16615
+ { point: [width, pointerLength], round: true },
16616
+ { point: [width, height + pointerLength], round: true },
16617
+ { point: [0, height + pointerLength], round: true },
16618
+ { point: [0, pointerLength], round: true }
16619
+ ],
16620
+ down: [
16621
+ { point: [0, 0], round: true },
16622
+ { point: [width, 0], round: true },
16623
+ { point: [width, height], round: true },
16624
+ { point: [horizontalInterval.end, height], round: false },
16625
+ {
16626
+ point: [horizontalInterval.center, height + pointerLength],
16627
+ round: false
16628
+ },
16629
+ { point: [horizontalInterval.start, height], round: false },
16630
+ { point: [0, height], round: true },
16631
+ { point: [0, 0], round: true }
16632
+ ],
16633
+ left: [
16634
+ { point: [pointerLength, 0], round: true },
16635
+ { point: [width + pointerLength, 0], round: true },
16636
+ { point: [width + pointerLength, height], round: true },
16637
+ { point: [pointerLength, height], round: true },
16638
+ { point: [pointerLength, verticalInterval.end], round: false },
16639
+ { point: [0, verticalInterval.center], round: false },
16640
+ { point: [pointerLength, verticalInterval.start], round: false },
16641
+ { point: [pointerLength, 0], round: true }
16642
+ ],
16643
+ right: [
16644
+ { point: [0, 0], round: true },
16645
+ { point: [width, 0], round: true },
16646
+ { point: [width, verticalInterval.start], round: false },
16647
+ { point: [width + pointerLength, verticalInterval.center], round: false },
16648
+ { point: [width, verticalInterval.end], round: false },
16649
+ { point: [width, height], round: true },
16650
+ { point: [0, height], round: true },
16651
+ { point: [0, 0], round: true }
16652
+ ]
16653
+ };
16654
+ const points = normalizeClosedPoints(pointsByDirection[pointerDirection]);
16655
+ const instructions = makeInstructions2({ points, edgeRoundness, cornerRadius });
16656
+ const path = serializeInstructions(instructions);
16657
+ const shapeWidth = pointerDirection === "left" || pointerDirection === "right" ? width + pointerLength : width;
16658
+ const shapeHeight = pointerDirection === "up" || pointerDirection === "down" ? height + pointerLength : height;
16659
+ const bodyX = pointerDirection === "left" ? pointerLength : 0;
16660
+ const bodyY = pointerDirection === "up" ? pointerLength : 0;
16661
+ return {
16662
+ width: shapeWidth,
16663
+ height: shapeHeight,
16664
+ instructions,
16665
+ path,
16666
+ transformOrigin: `${bodyX + width / 2} ${bodyY + height / 2}`
16667
+ };
16668
+ };
16669
+ var calloutSchema = makeShapeSchema({
16670
+ width: numberField({
16671
+ defaultValue: 500,
16672
+ description: "Width",
16673
+ min: 1
16674
+ }),
16675
+ height: numberField({
16676
+ defaultValue: 200,
16677
+ description: "Height",
16678
+ min: 1
16679
+ }),
16680
+ pointerLength: numberField({
16681
+ defaultValue: 40,
16682
+ description: "Pointer Length",
16683
+ min: 1
16684
+ }),
16685
+ pointerBaseWidth: numberField({
16686
+ defaultValue: 60,
16687
+ description: "Pointer Base Width",
16688
+ min: 1
16689
+ }),
16690
+ pointerPosition: numberField({
16691
+ defaultValue: 0.5,
16692
+ description: "Pointer Position",
16693
+ min: 0,
16694
+ max: 1,
16695
+ step: 0.01
16696
+ }),
16697
+ pointerDirection: enumField({
16698
+ defaultValue: "down",
16699
+ description: "Pointer Direction",
16700
+ variants: ["up", "down", "left", "right"]
16701
+ }),
16702
+ cornerRadius: numberField({
16703
+ defaultValue: 0,
16704
+ description: "Corner Radius",
16705
+ min: 0
16706
+ })
16707
+ });
16708
+ var CalloutInner = ({
16709
+ width,
16710
+ height,
16711
+ pointerLength,
16712
+ pointerBaseWidth,
16713
+ pointerPosition,
16714
+ pointerDirection,
16715
+ edgeRoundness,
16716
+ cornerRadius,
16717
+ ...props
16718
+ }) => {
16719
+ return /* @__PURE__ */ jsx310(RenderSvg, {
16720
+ defaultName: "<Callout>",
16721
+ documentationLink: "https://www.remotion.dev/docs/shapes/callout",
16722
+ ...makeCallout({
16723
+ width,
16724
+ height,
16725
+ pointerLength,
16726
+ pointerBaseWidth,
16727
+ pointerPosition,
16728
+ pointerDirection,
16729
+ edgeRoundness,
16730
+ cornerRadius
16731
+ }),
16732
+ ...props
16733
+ });
16734
+ };
16735
+ var Callout = Internals.wrapInSchema({
16736
+ Component: CalloutInner,
16737
+ componentIdentity: "dev.remotion.shapes.Callout",
16738
+ schema: calloutSchema,
16739
+ supportsEffects: true
16740
+ });
16741
+ Internals.addSequenceStackTraces(Callout);
16235
16742
  var makeCircle = ({ radius }) => {
16236
16743
  const instructions = [
16237
16744
  {
@@ -16280,7 +16787,7 @@ var circleSchema = makeShapeSchema({
16280
16787
  })
16281
16788
  });
16282
16789
  var CircleInner = ({ radius, ...props }) => {
16283
- return /* @__PURE__ */ jsx310(RenderSvg, {
16790
+ return /* @__PURE__ */ jsx43(RenderSvg, {
16284
16791
  defaultName: "<Circle>",
16285
16792
  documentationLink: "https://www.remotion.dev/docs/shapes/circle",
16286
16793
  ...makeCircle({ radius }),
@@ -16289,6 +16796,7 @@ var CircleInner = ({ radius, ...props }) => {
16289
16796
  };
16290
16797
  var Circle = Internals.wrapInSchema({
16291
16798
  Component: CircleInner,
16799
+ componentIdentity: "dev.remotion.shapes.Circle",
16292
16800
  schema: circleSchema,
16293
16801
  supportsEffects: true
16294
16802
  });
@@ -16336,7 +16844,7 @@ var ellipseSchema = makeShapeSchema({
16336
16844
  })
16337
16845
  });
16338
16846
  var EllipseInner = ({ rx, ry, ...props }) => {
16339
- return /* @__PURE__ */ jsx43(RenderSvg, {
16847
+ return /* @__PURE__ */ jsx52(RenderSvg, {
16340
16848
  defaultName: "<Ellipse>",
16341
16849
  documentationLink: "https://www.remotion.dev/docs/shapes/ellipse",
16342
16850
  ...makeEllipse({ rx, ry }),
@@ -16345,6 +16853,7 @@ var EllipseInner = ({ rx, ry, ...props }) => {
16345
16853
  };
16346
16854
  var Ellipse = Internals.wrapInSchema({
16347
16855
  Component: EllipseInner,
16856
+ componentIdentity: "dev.remotion.shapes.Ellipse",
16348
16857
  schema: ellipseSchema,
16349
16858
  supportsEffects: true
16350
16859
  });
@@ -16468,7 +16977,7 @@ var HeartInner = ({
16468
16977
  depthAdjustment = 0,
16469
16978
  ...props
16470
16979
  }) => {
16471
- return /* @__PURE__ */ jsx52(RenderSvg, {
16980
+ return /* @__PURE__ */ jsx62(RenderSvg, {
16472
16981
  defaultName: "<Heart>",
16473
16982
  documentationLink: "https://www.remotion.dev/docs/shapes/heart",
16474
16983
  ...makeHeart({
@@ -16482,6 +16991,7 @@ var HeartInner = ({
16482
16991
  };
16483
16992
  var Heart = Internals.wrapInSchema({
16484
16993
  Component: HeartInner,
16994
+ componentIdentity: "dev.remotion.shapes.Heart",
16485
16995
  schema: heartSchema,
16486
16996
  supportsEffects: true
16487
16997
  });
@@ -16626,7 +17136,7 @@ var PieInner = ({
16626
17136
  rotation,
16627
17137
  ...props
16628
17138
  }) => {
16629
- return /* @__PURE__ */ jsx62(RenderSvg, {
17139
+ return /* @__PURE__ */ jsx72(RenderSvg, {
16630
17140
  defaultName: "<Pie>",
16631
17141
  documentationLink: "https://www.remotion.dev/docs/shapes/pie",
16632
17142
  ...makePie({ radius, progress, closePath, counterClockwise, rotation }),
@@ -16635,134 +17145,11 @@ var PieInner = ({
16635
17145
  };
16636
17146
  var Pie = Internals.wrapInSchema({
16637
17147
  Component: PieInner,
17148
+ componentIdentity: "dev.remotion.shapes.Pie",
16638
17149
  schema: pieSchema,
16639
17150
  supportsEffects: true
16640
17151
  });
16641
17152
  Internals.addSequenceStackTraces(Pie);
16642
- var shortenVector = (vector, radius) => {
16643
- const [x, y] = vector;
16644
- const currentLength = Math.sqrt(x * x + y * y);
16645
- const scalingFactor = (currentLength - radius) / currentLength;
16646
- return [x * scalingFactor, y * scalingFactor];
16647
- };
16648
- var scaleVectorToLength = (vector, length2) => {
16649
- const [x, y] = vector;
16650
- const currentLength = Math.sqrt(x * x + y * y);
16651
- const scalingFactor = length2 / currentLength;
16652
- return [x * scalingFactor, y * scalingFactor];
16653
- };
16654
- var joinPoints = (points, {
16655
- edgeRoundness,
16656
- cornerRadius,
16657
- roundCornerStrategy
16658
- }) => {
16659
- return points.map(([x, y], i) => {
16660
- const prevPointIndex = i === 0 ? points.length - 2 : i - 1;
16661
- const prevPoint = points[prevPointIndex];
16662
- const nextPointIndex = i === points.length - 1 ? 1 : i + 1;
16663
- const nextPoint = points[nextPointIndex];
16664
- const middleOfLine = [(x + nextPoint[0]) / 2, (y + nextPoint[1]) / 2];
16665
- const prevPointMiddleOfLine = [
16666
- (x + prevPoint[0]) / 2,
16667
- (y + prevPoint[1]) / 2
16668
- ];
16669
- const prevVector = [x - prevPoint[0], y - prevPoint[1]];
16670
- const nextVector = [nextPoint[0] - x, nextPoint[1] - y];
16671
- if (i === 0) {
16672
- if (edgeRoundness !== null) {
16673
- return [
16674
- {
16675
- type: "M",
16676
- x: middleOfLine[0],
16677
- y: middleOfLine[1]
16678
- }
16679
- ];
16680
- }
16681
- if (cornerRadius !== 0) {
16682
- const computeRadius = shortenVector(nextVector, cornerRadius);
16683
- return [
16684
- {
16685
- type: "M",
16686
- x: computeRadius[0] + x,
16687
- y: computeRadius[1] + y
16688
- }
16689
- ];
16690
- }
16691
- return [
16692
- {
16693
- type: "M",
16694
- x,
16695
- y
16696
- }
16697
- ];
16698
- }
16699
- if (cornerRadius && edgeRoundness !== null) {
16700
- throw new Error(`"cornerRadius" and "edgeRoundness" cannot be specified at the same time.`);
16701
- }
16702
- if (edgeRoundness === null) {
16703
- if (cornerRadius === 0) {
16704
- return [
16705
- {
16706
- type: "L",
16707
- x,
16708
- y
16709
- }
16710
- ];
16711
- }
16712
- const prevVectorMinusRadius = shortenVector(prevVector, cornerRadius);
16713
- const prevVectorLength = scaleVectorToLength(prevVector, cornerRadius);
16714
- const nextVectorMinusRadius = scaleVectorToLength(nextVector, cornerRadius);
16715
- const firstDraw = [
16716
- prevPoint[0] + prevVectorMinusRadius[0],
16717
- prevPoint[1] + prevVectorMinusRadius[1]
16718
- ];
16719
- return [
16720
- {
16721
- type: "L",
16722
- x: firstDraw[0],
16723
- y: firstDraw[1]
16724
- },
16725
- roundCornerStrategy === "arc" ? {
16726
- type: "a",
16727
- rx: cornerRadius,
16728
- ry: cornerRadius,
16729
- xAxisRotation: 0,
16730
- dx: prevVectorLength[0] + nextVectorMinusRadius[0],
16731
- dy: prevVectorLength[1] + nextVectorMinusRadius[1],
16732
- largeArcFlag: false,
16733
- sweepFlag: true
16734
- } : {
16735
- type: "C",
16736
- x: firstDraw[0] + prevVectorLength[0] + nextVectorMinusRadius[0],
16737
- y: firstDraw[1] + prevVectorLength[1] + nextVectorMinusRadius[1],
16738
- cp1x: x,
16739
- cp1y: y,
16740
- cp2x: x,
16741
- cp2y: y
16742
- }
16743
- ];
16744
- }
16745
- const controlPoint1 = [
16746
- prevPointMiddleOfLine[0] + prevVector[0] * edgeRoundness * 0.5,
16747
- prevPointMiddleOfLine[1] + prevVector[1] * edgeRoundness * 0.5
16748
- ];
16749
- const controlPoint2 = [
16750
- middleOfLine[0] - nextVector[0] * edgeRoundness * 0.5,
16751
- middleOfLine[1] - nextVector[1] * edgeRoundness * 0.5
16752
- ];
16753
- return [
16754
- {
16755
- type: "C",
16756
- cp1x: controlPoint1[0],
16757
- cp1y: controlPoint1[1],
16758
- cp2x: controlPoint2[0],
16759
- cp2y: controlPoint2[1],
16760
- x: middleOfLine[0],
16761
- y: middleOfLine[1]
16762
- }
16763
- ];
16764
- }).flat(1);
16765
- };
16766
17153
  function polygon({
16767
17154
  points,
16768
17155
  radius,
@@ -16843,7 +17230,7 @@ var PolygonInner = ({
16843
17230
  edgeRoundness,
16844
17231
  ...props
16845
17232
  }) => {
16846
- return /* @__PURE__ */ jsx72(RenderSvg, {
17233
+ return /* @__PURE__ */ jsx82(RenderSvg, {
16847
17234
  defaultName: "<Polygon>",
16848
17235
  documentationLink: "https://www.remotion.dev/docs/shapes/polygon",
16849
17236
  ...makePolygon({
@@ -16857,6 +17244,7 @@ var PolygonInner = ({
16857
17244
  };
16858
17245
  var Polygon = Internals.wrapInSchema({
16859
17246
  Component: PolygonInner,
17247
+ componentIdentity: "dev.remotion.shapes.Polygon",
16860
17248
  schema: polygonSchema,
16861
17249
  supportsEffects: true
16862
17250
  });
@@ -16913,7 +17301,7 @@ var RectInner = ({
16913
17301
  cornerRadius,
16914
17302
  ...props
16915
17303
  }) => {
16916
- return /* @__PURE__ */ jsx82(RenderSvg, {
17304
+ return /* @__PURE__ */ jsx92(RenderSvg, {
16917
17305
  defaultName: "<Rect>",
16918
17306
  documentationLink: "https://www.remotion.dev/docs/shapes/rect",
16919
17307
  ...makeRect({ height, width, edgeRoundness, cornerRadius }),
@@ -16922,6 +17310,7 @@ var RectInner = ({
16922
17310
  };
16923
17311
  var Rect = Internals.wrapInSchema({
16924
17312
  Component: RectInner,
17313
+ componentIdentity: "dev.remotion.shapes.Rect",
16925
17314
  schema: rectSchema,
16926
17315
  supportsEffects: true
16927
17316
  });
@@ -17016,7 +17405,7 @@ var StarInner = ({
17016
17405
  edgeRoundness,
17017
17406
  ...props
17018
17407
  }) => {
17019
- return /* @__PURE__ */ jsx92(RenderSvg, {
17408
+ return /* @__PURE__ */ jsx102(RenderSvg, {
17020
17409
  defaultName: "<Star>",
17021
17410
  documentationLink: "https://www.remotion.dev/docs/shapes/star",
17022
17411
  ...makeStar({
@@ -17031,6 +17420,7 @@ var StarInner = ({
17031
17420
  };
17032
17421
  var Star = Internals.wrapInSchema({
17033
17422
  Component: StarInner,
17423
+ componentIdentity: "dev.remotion.shapes.Star",
17034
17424
  schema: starSchema,
17035
17425
  supportsEffects: true
17036
17426
  });
@@ -17127,7 +17517,7 @@ var TriangleInner = ({
17127
17517
  cornerRadius,
17128
17518
  ...props
17129
17519
  }) => {
17130
- return /* @__PURE__ */ jsx102(RenderSvg, {
17520
+ return /* @__PURE__ */ jsx112(RenderSvg, {
17131
17521
  defaultName: "<Triangle>",
17132
17522
  documentationLink: "https://www.remotion.dev/docs/shapes/triangle",
17133
17523
  ...makeTriangle({ length: length2, direction, edgeRoundness, cornerRadius }),
@@ -17136,6 +17526,7 @@ var TriangleInner = ({
17136
17526
  };
17137
17527
  var Triangle = Internals.wrapInSchema({
17138
17528
  Component: TriangleInner,
17529
+ componentIdentity: "dev.remotion.shapes.Triangle",
17139
17530
  schema: triangleSchema,
17140
17531
  supportsEffects: true
17141
17532
  });
@@ -18216,7 +18607,7 @@ import { jsx as jsx83, jsxs as jsxs32 } from "react/jsx-runtime";
18216
18607
  import { jsx as jsx93 } from "react/jsx-runtime";
18217
18608
  import React72 from "react";
18218
18609
  import { jsx as jsx103 } from "react/jsx-runtime";
18219
- import { jsx as jsx112 } from "react/jsx-runtime";
18610
+ import { jsx as jsx113 } from "react/jsx-runtime";
18220
18611
  import { jsx as jsx122 } from "react/jsx-runtime";
18221
18612
  import * as React36 from "react";
18222
18613
  import * as ReactDOM4 from "react-dom";
@@ -18776,7 +19167,7 @@ var Button = ({
18776
19167
  const [dimensions, setDimensions] = useState22(null);
18777
19168
  const ref = useRef210(null);
18778
19169
  const { isActive, progress } = useHoverTransforms(ref, Boolean(disabled || loading));
18779
- const onPointerEnter = useCallback26((e) => {
19170
+ const onPointerEnter = useCallback27((e) => {
18780
19171
  if (e.pointerType !== "mouse") {
18781
19172
  return;
18782
19173
  }
@@ -18813,7 +19204,7 @@ var Button = ({
18813
19204
  const isDisabled = disabled || loading;
18814
19205
  const isAnchor = !asChild && "href" in rest && rest.href !== undefined;
18815
19206
  const sharedClasses = cn("text-text", "inline-flex", "justify-center", "bg-button-bg", "items-center", "font-brand", "border-solid", "text-[1em]", "rounded-lg", "border-black", "border-2", "border-b-4", "cursor-pointer", "px-4", "h-12", "flex-row", "items-center", "relative", "overflow-hidden", isDisabled && "cursor-default opacity-50", className);
18816
- const preventInteraction = useCallback26((e) => {
19207
+ const preventInteraction = useCallback27((e) => {
18817
19208
  e.preventDefault();
18818
19209
  e.stopPropagation();
18819
19210
  }, []);
@@ -19024,7 +19415,7 @@ var Link = ({
19024
19415
  className,
19025
19416
  ...props
19026
19417
  }) => {
19027
- return /* @__PURE__ */ jsx112("a", {
19418
+ return /* @__PURE__ */ jsx113("a", {
19028
19419
  ...props,
19029
19420
  className: cn(className, "text-brand underline underline-offset-4"),
19030
19421
  children: props.children
@@ -25104,7 +25495,7 @@ var TrustSection = () => {
25104
25495
  }),
25105
25496
  /* @__PURE__ */ jsx46("div", {
25106
25497
  className: "font-brand",
25107
- children: "Us founders own the company. And we just want one thing: Make programmatic video glorious."
25498
+ children: "We, the founders, own the company. And we just want one thing: Make programmatic video glorious."
25108
25499
  })
25109
25500
  ]
25110
25501
  })
@@ -25170,11 +25561,11 @@ var TrustSection = () => {
25170
25561
  }),
25171
25562
  /* @__PURE__ */ jsx46("div", {
25172
25563
  className: "font-brand font-bold text-2xl mb-2",
25173
- children: "200+ customers"
25564
+ children: "300+ customers"
25174
25565
  }),
25175
25566
  /* @__PURE__ */ jsx46("div", {
25176
25567
  className: "font-brand",
25177
- children: "More than 200 companies trust Remotion, from small businesses to FAANG."
25568
+ children: "More than 300 companies trust Remotion, from small businesses to FAANG."
25178
25569
  })
25179
25570
  ]
25180
25571
  })
@@ -25212,7 +25603,7 @@ var TrustSection = () => {
25212
25603
  }),
25213
25604
  /* @__PURE__ */ jsx46("div", {
25214
25605
  className: "font-brand font-bold text-2xl mb-2",
25215
- children: "1M+ videos/month"
25606
+ children: "2M+ videos/month"
25216
25607
  }),
25217
25608
  /* @__PURE__ */ jsx46("div", {
25218
25609
  className: "font-brand",
@@ -25229,7 +25620,7 @@ var TrustSection = () => {
25229
25620
  }),
25230
25621
  /* @__PURE__ */ jsx46("div", {
25231
25622
  className: "font-brand font-bold text-2xl mb-2",
25232
- children: "40,000+ GitHub stars"
25623
+ children: "50,000+ GitHub stars"
25233
25624
  }),
25234
25625
  /* @__PURE__ */ jsx46("div", {
25235
25626
  className: "font-brand",