@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.
@@ -36,7 +36,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
36
36
  import * as React23 from "react";
37
37
  import * as React3 from "react";
38
38
  import { Fragment as Fragment2, jsx as jsx43 } from "react/jsx-runtime";
39
- import React52, { useCallback as useCallback26, useRef as useRef210, useState as useState22 } from "react";
39
+ import React52, { useCallback as useCallback27, useRef as useRef210, useState as useState22 } from "react";
40
40
 
41
41
  // ../../node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
42
42
  function r(e) {
@@ -4173,6 +4173,7 @@ import { useContext as useContext8, useMemo as useMemo7 } from "react";
4173
4173
  import { jsx as jsx7 } from "react/jsx-runtime";
4174
4174
  import {
4175
4175
  forwardRef as forwardRef3,
4176
+ useCallback as useCallback6,
4176
4177
  useContext as useContext17,
4177
4178
  useEffect as useEffect3,
4178
4179
  useMemo as useMemo14,
@@ -4211,14 +4212,14 @@ import {
4211
4212
  useRef as useRef9,
4212
4213
  useState as useState6
4213
4214
  } from "react";
4214
- import React15, { useCallback as useCallback6, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
4215
+ import React15, { useCallback as useCallback7, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
4215
4216
  import { useEffect as useEffect4, useMemo as useMemo15, useRef as useRef7 } from "react";
4216
4217
  import { jsx as jsx13 } from "react/jsx-runtime";
4217
4218
  import { jsx as jsx14 } from "react/jsx-runtime";
4218
4219
  import { useContext as useContext18, useLayoutEffect as useLayoutEffect4, useState as useState8 } from "react";
4219
4220
  import {
4220
4221
  createContext as createContext17,
4221
- useCallback as useCallback7,
4222
+ useCallback as useCallback8,
4222
4223
  useImperativeHandle as useImperativeHandle3,
4223
4224
  useLayoutEffect as useLayoutEffect3,
4224
4225
  useMemo as useMemo17,
@@ -4226,7 +4227,7 @@ import {
4226
4227
  useState as useState7
4227
4228
  } from "react";
4228
4229
  import { jsx as jsx15 } from "react/jsx-runtime";
4229
- import { forwardRef as forwardRef7, useCallback as useCallback13, useContext as useContext30 } from "react";
4230
+ import { forwardRef as forwardRef7, useCallback as useCallback14, useContext as useContext30 } from "react";
4230
4231
  import React16, { createContext as createContext18, useMemo as useMemo18 } from "react";
4231
4232
  import { jsx as jsx16 } from "react/jsx-runtime";
4232
4233
  import { useContext as useContext19 } from "react";
@@ -4234,7 +4235,7 @@ import { createContext as createContext19, useEffect as useEffect6, useState as
4234
4235
  import { jsx as jsx17 } from "react/jsx-runtime";
4235
4236
  import { createContext as createContext20, useMemo as useMemo19, useReducer } from "react";
4236
4237
  import { jsx as jsx18 } from "react/jsx-runtime";
4237
- import { useCallback as useCallback12 } from "react";
4238
+ import { useCallback as useCallback13 } from "react";
4238
4239
  import React22, {
4239
4240
  forwardRef as forwardRef5,
4240
4241
  useContext as useContext28,
@@ -4248,7 +4249,7 @@ import { useContext as useContext21, useLayoutEffect as useLayoutEffect5, useRef
4248
4249
  import React19, {
4249
4250
  createContext as createContext21,
4250
4251
  createRef as createRef2,
4251
- useCallback as useCallback8,
4252
+ useCallback as useCallback9,
4252
4253
  useContext as useContext20,
4253
4254
  useEffect as useEffect7,
4254
4255
  useMemo as useMemo21,
@@ -4261,16 +4262,16 @@ import { useRef as useRef13 } from "react";
4261
4262
  import { useContext as useContext23, useEffect as useEffect8, useMemo as useMemo22, useState as useState11 } from "react";
4262
4263
  import { useContext as useContext22 } from "react";
4263
4264
  import {
4264
- useCallback as useCallback11,
4265
+ useCallback as useCallback12,
4265
4266
  useContext as useContext26,
4266
4267
  useEffect as useEffect12,
4267
4268
  useLayoutEffect as useLayoutEffect7,
4268
4269
  useRef as useRef18
4269
4270
  } from "react";
4270
- import { useCallback as useCallback10, useMemo as useMemo25, useRef as useRef16 } from "react";
4271
+ import { useCallback as useCallback11, useMemo as useMemo25, useRef as useRef16 } from "react";
4271
4272
  import { useContext as useContext25, useMemo as useMemo24 } from "react";
4272
4273
  import React20, {
4273
- useCallback as useCallback9,
4274
+ useCallback as useCallback10,
4274
4275
  useContext as useContext24,
4275
4276
  useEffect as useEffect9,
4276
4277
  useLayoutEffect as useLayoutEffect6,
@@ -4298,7 +4299,7 @@ import { jsx as jsx22 } from "react/jsx-runtime";
4298
4299
  import { jsx as jsx23 } from "react/jsx-runtime";
4299
4300
  import {
4300
4301
  forwardRef as forwardRef8,
4301
- useCallback as useCallback14,
4302
+ useCallback as useCallback15,
4302
4303
  useEffect as useEffect16,
4303
4304
  useImperativeHandle as useImperativeHandle6,
4304
4305
  useMemo as useMemo29,
@@ -4309,7 +4310,7 @@ import { jsx as jsx24 } from "react/jsx-runtime";
4309
4310
  import {
4310
4311
  createContext as createContext23,
4311
4312
  forwardRef as forwardRef9,
4312
- useCallback as useCallback15,
4313
+ useCallback as useCallback16,
4313
4314
  useContext as useContext31,
4314
4315
  useLayoutEffect as useLayoutEffect9,
4315
4316
  useMemo as useMemo30,
@@ -4318,7 +4319,7 @@ import {
4318
4319
  import { jsx as jsx25 } from "react/jsx-runtime";
4319
4320
  import {
4320
4321
  forwardRef as forwardRef10,
4321
- useCallback as useCallback16,
4322
+ useCallback as useCallback17,
4322
4323
  useContext as useContext32,
4323
4324
  useEffect as useEffect17,
4324
4325
  useImperativeHandle as useImperativeHandle7,
@@ -4327,16 +4328,16 @@ import {
4327
4328
  useState as useState16
4328
4329
  } from "react";
4329
4330
  import { jsx as jsx26 } from "react/jsx-runtime";
4330
- import { forwardRef as forwardRef11, useCallback as useCallback17, useState as useState17 } from "react";
4331
+ import { forwardRef as forwardRef11, useCallback as useCallback18, useState as useState17 } from "react";
4331
4332
  import { jsx as jsx27 } from "react/jsx-runtime";
4332
- import { useCallback as useCallback18, useContext as useContext33, useLayoutEffect as useLayoutEffect10, useRef as useRef24 } from "react";
4333
+ import { useCallback as useCallback19, useContext as useContext33, useLayoutEffect as useLayoutEffect10, useRef as useRef24 } from "react";
4333
4334
  import { jsx as jsx28 } from "react/jsx-runtime";
4334
- import React29, { forwardRef as forwardRef12, useCallback as useCallback19, useRef as useRef25 } from "react";
4335
+ import React29, { forwardRef as forwardRef12, useCallback as useCallback20, useRef as useRef25 } from "react";
4335
4336
  import { jsx as jsx29 } from "react/jsx-runtime";
4336
4337
  import { createRef as createRef3 } from "react";
4337
4338
  import React30 from "react";
4338
4339
  import {
4339
- useCallback as useCallback20,
4340
+ useCallback as useCallback21,
4340
4341
  useImperativeHandle as useImperativeHandle8,
4341
4342
  useMemo as useMemo32,
4342
4343
  useRef as useRef26,
@@ -4351,9 +4352,9 @@ import { jsx as jsx32 } from "react/jsx-runtime";
4351
4352
  import React33 from "react";
4352
4353
  import React34, { createContext as createContext25 } from "react";
4353
4354
  import React35, { useContext as useContext35 } from "react";
4354
- import { useCallback as useCallback23 } from "react";
4355
+ import { useCallback as useCallback24 } from "react";
4355
4356
  import {
4356
- useCallback as useCallback21,
4357
+ useCallback as useCallback22,
4357
4358
  useContext as useContext36,
4358
4359
  useEffect as useEffect18,
4359
4360
  useLayoutEffect as useLayoutEffect11,
@@ -4363,7 +4364,7 @@ import {
4363
4364
  import { jsx as jsx33 } from "react/jsx-runtime";
4364
4365
  import React37, {
4365
4366
  forwardRef as forwardRef13,
4366
- useCallback as useCallback22,
4367
+ useCallback as useCallback23,
4367
4368
  useContext as useContext37,
4368
4369
  useEffect as useEffect20,
4369
4370
  useImperativeHandle as useImperativeHandle9,
@@ -4384,7 +4385,7 @@ import {
4384
4385
  import React40 from "react";
4385
4386
  import { jsx as jsx37 } from "react/jsx-runtime";
4386
4387
  import React42 from "react";
4387
- import { forwardRef as forwardRef16, useCallback as useCallback24, useContext as useContext39 } from "react";
4388
+ import { forwardRef as forwardRef16, useCallback as useCallback25, useContext as useContext39 } from "react";
4388
4389
  import {
4389
4390
  forwardRef as forwardRef15,
4390
4391
  useContext as useContext38,
@@ -5564,7 +5565,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
5564
5565
  var addSequenceStackTraces = (component) => {
5565
5566
  componentsToAddStacksTo.push(component);
5566
5567
  };
5567
- var VERSION = "4.0.476";
5568
+ var VERSION = "4.0.478";
5568
5569
  var checkMultipleRemotionVersions = () => {
5569
5570
  if (typeof globalThis === "undefined") {
5570
5571
  return;
@@ -6023,10 +6024,17 @@ var fromField = {
6023
6024
  step: 1,
6024
6025
  hiddenFromList: true
6025
6026
  };
6027
+ var freezeField = {
6028
+ type: "number",
6029
+ default: null,
6030
+ step: 1,
6031
+ hiddenFromList: true
6032
+ };
6026
6033
  var sequenceSchema = extendSchemaWithSequenceName({
6027
6034
  hidden: hiddenField,
6028
6035
  showInTimeline: showInTimelineField,
6029
6036
  from: fromField,
6037
+ freeze: freezeField,
6030
6038
  durationInFrames: durationInFramesField,
6031
6039
  layout: {
6032
6040
  type: "enum",
@@ -6041,6 +6049,7 @@ var sequenceSchema = extendSchemaWithSequenceName({
6041
6049
  var sequenceSchemaWithoutFrom = extendSchemaWithSequenceName({
6042
6050
  hidden: hiddenField,
6043
6051
  showInTimeline: showInTimelineField,
6052
+ freeze: freezeField,
6044
6053
  durationInFrames: durationInFramesField,
6045
6054
  layout: sequenceSchema.layout
6046
6055
  });
@@ -8232,6 +8241,7 @@ var mergeValues = ({
8232
8241
  var stackToOverrideMap = {};
8233
8242
  var wrapInSchema = ({
8234
8243
  Component,
8244
+ componentIdentity,
8235
8245
  schema,
8236
8246
  supportsEffects
8237
8247
  }) => {
@@ -8278,7 +8288,8 @@ var wrapInSchema = ({
8278
8288
  schema: schemaWithSequenceName,
8279
8289
  currentRuntimeValueDotNotation,
8280
8290
  overrideId,
8281
- supportsEffects
8291
+ supportsEffects,
8292
+ componentIdentity
8282
8293
  };
8283
8294
  }, [currentRuntimeValueDotNotation, overrideId]);
8284
8295
  const { merged: valuesDotNotation, propsToDelete } = useMemo13(() => {
@@ -8315,6 +8326,7 @@ var wrapInSchema = ({
8315
8326
  var EMPTY_EFFECTS = [];
8316
8327
  var RegularSequenceRefForwardingFunction = ({
8317
8328
  from = 0,
8329
+ freeze,
8318
8330
  durationInFrames = Infinity,
8319
8331
  children,
8320
8332
  name,
@@ -8330,7 +8342,7 @@ var RegularSequenceRefForwardingFunction = ({
8330
8342
  _remotionInternalPremountDisplay: premountDisplay,
8331
8343
  _remotionInternalPostmountDisplay: postmountDisplay,
8332
8344
  _remotionInternalIsMedia: isMedia,
8333
- _remotionInternalRefForOutline: refForOutline,
8345
+ _remotionInternalRefForOutline: passedRefForOutline,
8334
8346
  ...other
8335
8347
  }, ref) => {
8336
8348
  const { layout = "absolute-fill" } = other;
@@ -8358,11 +8370,24 @@ var RegularSequenceRefForwardingFunction = ({
8358
8370
  if (!Number.isFinite(from)) {
8359
8371
  throw new TypeError(`The "from" prop of a sequence must be finite, but got ${from}.`);
8360
8372
  }
8373
+ if (typeof freeze !== "undefined" && freeze !== null) {
8374
+ if (typeof freeze !== "number") {
8375
+ throw new TypeError(`The "freeze" prop of <Sequence /> must be a number, but is of type ${typeof freeze}.`);
8376
+ }
8377
+ if (Number.isNaN(freeze)) {
8378
+ throw new TypeError(`The "freeze" prop of <Sequence /> must be a real number, but it is NaN.`);
8379
+ }
8380
+ if (!Number.isFinite(freeze)) {
8381
+ throw new TypeError(`The "freeze" prop of <Sequence /> must be finite, but it is ${freeze}.`);
8382
+ }
8383
+ }
8361
8384
  const absoluteFrame = useTimelinePosition();
8362
8385
  const videoConfig = useVideoConfig();
8363
8386
  const parentSequenceDuration = parentSequence ? Math.min(parentSequence.durationInFrames - from, durationInFrames) : durationInFrames;
8364
8387
  const actualDurationInFrames = Math.max(0, Math.min(videoConfig.durationInFrames - from, parentSequenceDuration));
8365
8388
  const { registerSequence, unregisterSequence } = useContext17(SequenceManager);
8389
+ const wrapperRefForOutline = useRef6(null);
8390
+ const refForOutline = other.layout === "none" ? passedRefForOutline ?? null : passedRefForOutline ?? wrapperRefForOutline;
8366
8391
  const premounting = useMemo14(() => {
8367
8392
  return parentSequence?.premounting || Boolean(other._remotionInternalIsPremounting);
8368
8393
  }, [other._remotionInternalIsPremounting, parentSequence?.premounting]);
@@ -8414,6 +8439,11 @@ var RegularSequenceRefForwardingFunction = ({
8414
8439
  const inheritedStack = other?.stack ?? null;
8415
8440
  const stackRef = useRef6(null);
8416
8441
  stackRef.current = stack ?? inheritedStack;
8442
+ const registeredFrozenFrame = typeof freeze === "number" ? freeze : null;
8443
+ const parentCumulatedNegativeFrom = parentSequence?.cumulatedNegativeFrom ?? 0;
8444
+ const startMediaFrom = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom - cumulatedNegativeFrom : null;
8445
+ const mediaFrameAtSequenceZero = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom : null;
8446
+ const frozenMediaFrame = isMedia && isMedia.type !== "image" && mediaFrameAtSequenceZero !== null ? registeredFrozenFrame === null ? null : mediaFrameAtSequenceZero + (loopDisplay ? registeredFrozenFrame % loopDisplay.durationInFrames : registeredFrozenFrame) * isMedia.data.playbackRate : null;
8417
8447
  useEffect3(() => {
8418
8448
  if (!env.isStudio) {
8419
8449
  return;
@@ -8439,7 +8469,8 @@ var RegularSequenceRefForwardingFunction = ({
8439
8469
  src: isMedia.src,
8440
8470
  getStack: () => stackRef.current,
8441
8471
  refForOutline: refForOutline ?? null,
8442
- isInsideSeries
8472
+ isInsideSeries,
8473
+ frozenFrame: registeredFrozenFrame
8443
8474
  });
8444
8475
  } else {
8445
8476
  registerSequence({
@@ -8462,10 +8493,12 @@ var RegularSequenceRefForwardingFunction = ({
8462
8493
  showInTimeline,
8463
8494
  src: isMedia.data.src,
8464
8495
  getStack: () => stackRef.current,
8465
- startMediaFrom: isMedia.data.startMediaFrom,
8496
+ startMediaFrom: startMediaFrom ?? isMedia.data.startMediaFrom,
8466
8497
  volume: isMedia.data.volumes,
8467
8498
  refForOutline: refForOutline ?? null,
8468
- isInsideSeries
8499
+ isInsideSeries,
8500
+ frozenFrame: registeredFrozenFrame,
8501
+ frozenMediaFrame
8469
8502
  });
8470
8503
  }
8471
8504
  return () => {
@@ -8490,7 +8523,8 @@ var RegularSequenceRefForwardingFunction = ({
8490
8523
  controls: controls ?? null,
8491
8524
  effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
8492
8525
  refForOutline: refForOutline ?? null,
8493
- isInsideSeries
8526
+ isInsideSeries,
8527
+ frozenFrame: registeredFrozenFrame
8494
8528
  });
8495
8529
  return () => {
8496
8530
  unregisterSequence(id);
@@ -8517,11 +8551,26 @@ var RegularSequenceRefForwardingFunction = ({
8517
8551
  isMedia,
8518
8552
  resolvedDocumentationLink,
8519
8553
  refForOutline,
8520
- isInsideSeries
8554
+ isInsideSeries,
8555
+ registeredFrozenFrame,
8556
+ startMediaFrom,
8557
+ frozenMediaFrame
8521
8558
  ]);
8522
8559
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
8523
8560
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
8561
+ const frozenContent = content === null || typeof freeze === "undefined" || freeze === null ? content : /* @__PURE__ */ jsx12(Freeze, {
8562
+ frame: freeze,
8563
+ children: content
8564
+ });
8524
8565
  const styleIfThere = other.layout === "none" ? undefined : other.style;
8566
+ const sequenceRef = useCallback6((node) => {
8567
+ wrapperRefForOutline.current = node;
8568
+ if (typeof ref === "function") {
8569
+ ref(node);
8570
+ } else if (ref) {
8571
+ ref.current = node;
8572
+ }
8573
+ }, [ref]);
8525
8574
  const defaultStyle = useMemo14(() => {
8526
8575
  return {
8527
8576
  flexDirection: undefined,
@@ -8538,11 +8587,11 @@ var RegularSequenceRefForwardingFunction = ({
8538
8587
  }
8539
8588
  return /* @__PURE__ */ jsx12(SequenceContext.Provider, {
8540
8589
  value: contextValue,
8541
- children: content === null ? null : other.layout === "none" ? content : /* @__PURE__ */ jsx12(AbsoluteFill, {
8542
- ref,
8590
+ children: frozenContent === null ? null : other.layout === "none" ? frozenContent : /* @__PURE__ */ jsx12(AbsoluteFill, {
8591
+ ref: sequenceRef,
8543
8592
  style: defaultStyle,
8544
8593
  className: other.className,
8545
- children: content
8594
+ children: frozenContent
8546
8595
  })
8547
8596
  });
8548
8597
  };
@@ -8622,11 +8671,13 @@ var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
8622
8671
  var SequenceWithoutSchema = SequenceInner;
8623
8672
  var Sequence = wrapInSchema({
8624
8673
  Component: SequenceInner,
8674
+ componentIdentity: "dev.remotion.remotion.Sequence",
8625
8675
  schema: sequenceSchema,
8626
8676
  supportsEffects: false
8627
8677
  });
8628
8678
  var SequenceWithoutFrom = wrapInSchema({
8629
8679
  Component: SequenceInner,
8680
+ componentIdentity: null,
8630
8681
  schema: sequenceSchemaWithoutFrom,
8631
8682
  supportsEffects: false
8632
8683
  });
@@ -8944,7 +8995,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effec
8944
8995
  }
8945
8996
  return document.createElement("canvas");
8946
8997
  }, []);
8947
- const draw = useCallback6((imageData) => {
8998
+ const draw = useCallback7((imageData) => {
8948
8999
  const canvas = canvasRef.current;
8949
9000
  const canvasWidth = width ?? imageData.displayWidth;
8950
9001
  const canvasHeight = height ?? imageData.displayHeight;
@@ -9165,6 +9216,7 @@ var resolveAnimatedImageSource = (src) => {
9165
9216
  var animatedImageSchema = {
9166
9217
  durationInFrames: durationInFramesField,
9167
9218
  from: fromField,
9219
+ freeze: freezeField,
9168
9220
  playbackRate: {
9169
9221
  type: "number",
9170
9222
  min: 0,
@@ -9364,6 +9416,7 @@ var AnimatedImageInner = ({
9364
9416
  };
9365
9417
  var AnimatedImage = wrapInSchema({
9366
9418
  Component: AnimatedImageInner,
9419
+ componentIdentity: "dev.remotion.remotion.AnimatedImage",
9367
9420
  schema: animatedImageSchema,
9368
9421
  supportsEffects: true
9369
9422
  });
@@ -9410,7 +9463,7 @@ var RenderAssetManager = createContext17({
9410
9463
  var RenderAssetManagerProvider = ({ children, collectAssets }) => {
9411
9464
  const [renderAssets, setRenderAssets] = useState7([]);
9412
9465
  const renderAssetsRef = useRef10([]);
9413
- const registerRenderAsset = useCallback7((renderAsset) => {
9466
+ const registerRenderAsset = useCallback8((renderAsset) => {
9414
9467
  validateRenderAsset(renderAsset);
9415
9468
  renderAssetsRef.current = [...renderAssetsRef.current, renderAsset];
9416
9469
  setRenderAssets(renderAssetsRef.current);
@@ -9427,7 +9480,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
9427
9480
  };
9428
9481
  }, []);
9429
9482
  }
9430
- const unregisterRenderAsset = useCallback7((id) => {
9483
+ const unregisterRenderAsset = useCallback8((id) => {
9431
9484
  renderAssetsRef.current = renderAssetsRef.current.filter((a2) => a2.id !== id);
9432
9485
  setRenderAssets(renderAssetsRef.current);
9433
9486
  }, []);
@@ -10232,7 +10285,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
10232
10285
  }, []);
10233
10286
  const prevEndTimes = useRef12({ scheduledEndTime: null, mediaEndTime: null });
10234
10287
  const nodesToResume = useRef12(new Map);
10235
- const unscheduleAudioNode = useCallback8((node) => {
10288
+ const unscheduleAudioNode = useCallback9((node) => {
10236
10289
  nodesToResume.current.delete(node);
10237
10290
  }, []);
10238
10291
  const scheduleAudioNode = useMemo21(() => {
@@ -10286,7 +10339,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
10286
10339
  };
10287
10340
  };
10288
10341
  }, [ctxAndGain, logLevel]);
10289
- const resume = useCallback8(() => {
10342
+ const resume = useCallback9(() => {
10290
10343
  if (!ctxAndGain) {
10291
10344
  return Promise.resolve();
10292
10345
  }
@@ -10313,10 +10366,10 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
10313
10366
  });
10314
10367
  return resumePromise.catch(() => {});
10315
10368
  }, [ctxAndGain, logLevel]);
10316
- const getIsResumingAudioContext = useCallback8(() => {
10369
+ const getIsResumingAudioContext = useCallback9(() => {
10317
10370
  return isResuming.current;
10318
10371
  }, []);
10319
- const suspend = useCallback8(() => {
10372
+ const suspend = useCallback9(() => {
10320
10373
  if (!ctxAndGain) {
10321
10374
  return Promise.resolve();
10322
10375
  }
@@ -10390,7 +10443,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10390
10443
  };
10391
10444
  }, [refs]);
10392
10445
  const takenAudios = useRef12(new Array(numberOfAudioTags).fill(false));
10393
- const rerenderAudios = useCallback8(() => {
10446
+ const rerenderAudios = useCallback9(() => {
10394
10447
  refs.forEach(({ ref, id }) => {
10395
10448
  const data = audios.current?.find((a2) => a2.id === id);
10396
10449
  const { current } = ref;
@@ -10411,7 +10464,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10411
10464
  });
10412
10465
  });
10413
10466
  }, [refs]);
10414
- const registerAudio = useCallback8((options) => {
10467
+ const registerAudio = useCallback9((options) => {
10415
10468
  const { aud, audioId, premounting, postmounting } = options;
10416
10469
  const found = audios.current?.find((a2) => a2.audioId === audioId);
10417
10470
  if (found) {
@@ -10440,7 +10493,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10440
10493
  rerenderAudios();
10441
10494
  return newElem;
10442
10495
  }, [numberOfAudioTags, refs, rerenderAudios]);
10443
- const unregisterAudio = useCallback8((id) => {
10496
+ const unregisterAudio = useCallback9((id) => {
10444
10497
  const cloned = [...takenAudios.current];
10445
10498
  const index = refs.findIndex((r2) => r2.id === id);
10446
10499
  if (index === -1) {
@@ -10451,7 +10504,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10451
10504
  audios.current = audios.current?.filter((a2) => a2.id !== id);
10452
10505
  rerenderAudios();
10453
10506
  }, [refs, rerenderAudios]);
10454
- const updateAudio = useCallback8(({
10507
+ const updateAudio = useCallback9(({
10455
10508
  aud,
10456
10509
  audioId,
10457
10510
  id,
@@ -10485,7 +10538,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10485
10538
  rerenderAudios();
10486
10539
  }
10487
10540
  }, [rerenderAudios]);
10488
- const playAllAudios = useCallback8(() => {
10541
+ const playAllAudios = useCallback9(() => {
10489
10542
  refs.forEach((ref) => {
10490
10543
  const audio = audios.current.find((a2) => a2.el === ref.ref);
10491
10544
  if (audio?.premounting) {
@@ -10996,7 +11049,9 @@ var useMediaInTimeline = ({
10996
11049
  controls: null,
10997
11050
  effects: [],
10998
11051
  refForOutline,
10999
- isInsideSeries: false
11052
+ isInsideSeries: false,
11053
+ frozenFrame: null,
11054
+ frozenMediaFrame: null
11000
11055
  });
11001
11056
  return () => {
11002
11057
  unregisterSequence(id);
@@ -11033,7 +11088,7 @@ var useBufferManager = (logLevel, mountTime) => {
11033
11088
  const env = useRemotionEnvironment();
11034
11089
  const rendering = env.isRendering;
11035
11090
  const buffering = useRef15(false);
11036
- const addBlock = useCallback9((block) => {
11091
+ const addBlock = useCallback10((block) => {
11037
11092
  if (rendering) {
11038
11093
  return {
11039
11094
  unblock: () => {
@@ -11059,7 +11114,7 @@ var useBufferManager = (logLevel, mountTime) => {
11059
11114
  }
11060
11115
  };
11061
11116
  }, [rendering]);
11062
- const listenForBuffering = useCallback9((callback) => {
11117
+ const listenForBuffering = useCallback10((callback) => {
11063
11118
  setOnBufferingCallbacks((c2) => [...c2, callback]);
11064
11119
  return {
11065
11120
  remove: () => {
@@ -11067,7 +11122,7 @@ var useBufferManager = (logLevel, mountTime) => {
11067
11122
  }
11068
11123
  };
11069
11124
  }, []);
11070
- const listenForResume = useCallback9((callback) => {
11125
+ const listenForResume = useCallback10((callback) => {
11071
11126
  setOnResumeCallbacks((c2) => [...c2, callback]);
11072
11127
  return {
11073
11128
  remove: () => {
@@ -11181,7 +11236,7 @@ var useBufferUntilFirstFrame = ({
11181
11236
  }) => {
11182
11237
  const bufferingRef = useRef16(false);
11183
11238
  const { delayPlayback } = useBufferState();
11184
- const bufferUntilFirstFrame = useCallback10((requestedTime) => {
11239
+ const bufferUntilFirstFrame = useCallback11((requestedTime) => {
11185
11240
  if (mediaType !== "video") {
11186
11241
  return;
11187
11242
  }
@@ -11571,7 +11626,7 @@ var useMediaPlayback = ({
11571
11626
  throw new Error("useMediaPlayback must be used inside a <BufferingContext>");
11572
11627
  }
11573
11628
  const isVariableFpsVideoMap = useRef18({});
11574
- const onVariableFpsVideoDetected = useCallback11(() => {
11629
+ const onVariableFpsVideoDetected = useCallback12(() => {
11575
11630
  if (!src) {
11576
11631
  return;
11577
11632
  }
@@ -11962,7 +12017,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
11962
12017
  premounting: Boolean(sequenceContext?.premounting),
11963
12018
  postmounting: Boolean(sequenceContext?.postmounting)
11964
12019
  });
11965
- const getStack = useCallback12(() => {
12020
+ const getStack = useCallback13(() => {
11966
12021
  return _remotionInternalStack ?? null;
11967
12022
  }, [_remotionInternalStack]);
11968
12023
  useMediaInTimeline({
@@ -12208,7 +12263,7 @@ var AudioRefForwardingFunction = (props, ref) => {
12208
12263
  throw new TypeError(`The \`<Html5Audio>\` tag requires a string for \`src\`, but got ${JSON.stringify(props.src)} instead.`);
12209
12264
  }
12210
12265
  const preloadedSrc = usePreload(props.src);
12211
- const onError = useCallback13((e) => {
12266
+ const onError = useCallback14((e) => {
12212
12267
  console.log(e.currentTarget.error);
12213
12268
  const errMessage = `Could not play audio with src ${preloadedSrc}: ${e.currentTarget.error}. See https://remotion.dev/docs/media-playback-error for help.`;
12214
12269
  if (loop) {
@@ -12222,7 +12277,7 @@ var AudioRefForwardingFunction = (props, ref) => {
12222
12277
  console.warn(errMessage);
12223
12278
  }
12224
12279
  }, [loop, onRemotionError, preloadedSrc]);
12225
- const onDuration = useCallback13((src, durationInSeconds) => {
12280
+ const onDuration = useCallback14((src, durationInSeconds) => {
12226
12281
  setDurations({ type: "got-duration", durationInSeconds, src });
12227
12282
  }, [setDurations]);
12228
12283
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props.src)];
@@ -12314,6 +12369,7 @@ var resolveSolidPixelDensity = (pixelDensity) => {
12314
12369
  var solidSchema = {
12315
12370
  durationInFrames: durationInFramesField,
12316
12371
  from: fromField,
12372
+ freeze: freezeField,
12317
12373
  color: {
12318
12374
  type: "color",
12319
12375
  default: "transparent",
@@ -12368,7 +12424,7 @@ var SolidInner = ({
12368
12424
  return canvas;
12369
12425
  }, []);
12370
12426
  const chainState = useEffectChainState();
12371
- const canvasRef = useCallback14((canvas) => {
12427
+ const canvasRef = useCallback15((canvas) => {
12372
12428
  setOutputCanvas(canvas);
12373
12429
  if (typeof reference === "function") {
12374
12430
  reference(canvas);
@@ -12452,6 +12508,7 @@ var SolidOuter = forwardRef8(({
12452
12508
  style,
12453
12509
  name,
12454
12510
  from,
12511
+ freeze,
12455
12512
  hidden,
12456
12513
  showInTimeline,
12457
12514
  pixelDensity,
@@ -12465,6 +12522,7 @@ var SolidOuter = forwardRef8(({
12465
12522
  return /* @__PURE__ */ jsx24(Sequence, {
12466
12523
  layout: "none",
12467
12524
  from,
12525
+ freeze,
12468
12526
  hidden,
12469
12527
  showInTimeline,
12470
12528
  _experimentalControls: controls,
@@ -12489,6 +12547,7 @@ var SolidOuter = forwardRef8(({
12489
12547
  });
12490
12548
  var Solid = wrapInSchema({
12491
12549
  Component: SolidOuter,
12550
+ componentIdentity: "dev.remotion.remotion.Solid",
12492
12551
  schema: solidSchema,
12493
12552
  supportsEffects: true
12494
12553
  });
@@ -12578,7 +12637,7 @@ var HtmlInCanvasContent = forwardRef9(({
12578
12637
  const offscreenRef = useRef22(null);
12579
12638
  const divRef = useRef22(null);
12580
12639
  const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
12581
- const setLayoutCanvasRef = useCallback15((node) => {
12640
+ const setLayoutCanvasRef = useCallback16((node) => {
12582
12641
  canvas2dRef.current = node;
12583
12642
  if (typeof ref === "function") {
12584
12643
  ref(node);
@@ -12600,7 +12659,7 @@ var HtmlInCanvasContent = forwardRef9(({
12600
12659
  const initializedRef = useRef22(false);
12601
12660
  const onInitCleanupRef = useRef22(null);
12602
12661
  const unmountedRef = useRef22(false);
12603
- const onPaintCb = useCallback15(async () => {
12662
+ const onPaintCb = useCallback16(async () => {
12604
12663
  const element = divRef.current;
12605
12664
  if (!element) {
12606
12665
  throw new Error("Canvas or scene element not found");
@@ -12773,7 +12832,7 @@ var HtmlInCanvasInner = forwardRef9(({
12773
12832
  const resolvedDuration = durationInFrames ?? videoDuration;
12774
12833
  const memoizedEffectDefinitions = useMemoizedEffectDefinitions(effects);
12775
12834
  const actualRef = useRef22(null);
12776
- const setCanvasRef = useCallback15((node) => {
12835
+ const setCanvasRef = useCallback16((node) => {
12777
12836
  actualRef.current = node;
12778
12837
  if (typeof ref === "function") {
12779
12838
  ref(node);
@@ -12808,11 +12867,13 @@ HtmlInCanvasInner.displayName = "HtmlInCanvas";
12808
12867
  var htmlInCanvasSchema = {
12809
12868
  durationInFrames: durationInFramesField,
12810
12869
  from: fromField,
12870
+ freeze: freezeField,
12811
12871
  ...sequenceVisualStyleSchema,
12812
12872
  hidden: hiddenField
12813
12873
  };
12814
12874
  var HtmlInCanvasWrapped = wrapInSchema({
12815
12875
  Component: HtmlInCanvasInner,
12876
+ componentIdentity: "dev.remotion.remotion.HtmlInCanvas",
12816
12877
  schema: htmlInCanvasSchema,
12817
12878
  supportsEffects: true
12818
12879
  });
@@ -12830,6 +12891,7 @@ function truncateSrcForLabel(src) {
12830
12891
  var canvasImageSchema = {
12831
12892
  durationInFrames: durationInFramesField,
12832
12893
  from: fromField,
12894
+ freeze: freezeField,
12833
12895
  fit: {
12834
12896
  type: "enum",
12835
12897
  default: "fill",
@@ -12935,7 +12997,7 @@ var CanvasImageContent = forwardRef10(({
12935
12997
  }
12936
12998
  return document.createElement("canvas");
12937
12999
  }, []);
12938
- const canvasRef = useCallback16((canvas) => {
13000
+ const canvasRef = useCallback17((canvas) => {
12939
13001
  setOutputCanvas(canvas);
12940
13002
  if (refForOutline) {
12941
13003
  refForOutline.current = canvas;
@@ -13082,6 +13144,7 @@ var CanvasImageInner = forwardRef10(({
13082
13144
  delayRenderTimeoutInMilliseconds,
13083
13145
  durationInFrames,
13084
13146
  from,
13147
+ freeze,
13085
13148
  hidden,
13086
13149
  name,
13087
13150
  showInTimeline,
@@ -13103,6 +13166,7 @@ var CanvasImageInner = forwardRef10(({
13103
13166
  layout: "none",
13104
13167
  from: from ?? 0,
13105
13168
  durationInFrames: durationInFrames ?? Infinity,
13169
+ freeze,
13106
13170
  hidden,
13107
13171
  showInTimeline: showInTimeline ?? true,
13108
13172
  name: name ?? "<CanvasImage>",
@@ -13135,6 +13199,7 @@ var CanvasImageInner = forwardRef10(({
13135
13199
  });
13136
13200
  var CanvasImage = wrapInSchema({
13137
13201
  Component: CanvasImageInner,
13202
+ componentIdentity: "dev.remotion.remotion.CanvasImage",
13138
13203
  schema: canvasImageSchema,
13139
13204
  supportsEffects: true
13140
13205
  });
@@ -13152,11 +13217,11 @@ var IFrameRefForwarding = ({
13152
13217
  retries: delayRenderRetries ?? undefined,
13153
13218
  timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
13154
13219
  }));
13155
- const didLoad = useCallback17((e) => {
13220
+ const didLoad = useCallback18((e) => {
13156
13221
  continueRender2(handle);
13157
13222
  onLoad?.(e);
13158
13223
  }, [handle, onLoad, continueRender2]);
13159
- const didGetError = useCallback17((e) => {
13224
+ const didGetError = useCallback18((e) => {
13160
13225
  continueRender2(handle);
13161
13226
  if (onError) {
13162
13227
  onError(e);
@@ -13198,7 +13263,7 @@ var ImgContent = ({
13198
13263
  if (!_propsValid) {
13199
13264
  throw new Error("typecheck error");
13200
13265
  }
13201
- const imageCallbackRef = useCallback18((img) => {
13266
+ const imageCallbackRef = useCallback19((img) => {
13202
13267
  imageRef.current = img;
13203
13268
  refForOutline.current = img;
13204
13269
  if (typeof ref === "function") {
@@ -13208,7 +13273,7 @@ var ImgContent = ({
13208
13273
  }
13209
13274
  }, [ref, refForOutline]);
13210
13275
  const actualSrc = usePreload(src);
13211
- const retryIn = useCallback18((timeout) => {
13276
+ const retryIn = useCallback19((timeout) => {
13212
13277
  if (!imageRef.current) {
13213
13278
  return;
13214
13279
  }
@@ -13226,7 +13291,7 @@ var ImgContent = ({
13226
13291
  }, timeout);
13227
13292
  }, []);
13228
13293
  const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
13229
- const didGetError = useCallback18((e) => {
13294
+ const didGetError = useCallback19((e) => {
13230
13295
  if (!errors.current) {
13231
13296
  return;
13232
13297
  }
@@ -13336,6 +13401,7 @@ var NativeImgInner = ({
13336
13401
  src,
13337
13402
  from,
13338
13403
  durationInFrames,
13404
+ freeze,
13339
13405
  _experimentalControls: controls,
13340
13406
  _remotionInternalRefForOutline: refForOutline,
13341
13407
  ...props2
@@ -13347,6 +13413,7 @@ var NativeImgInner = ({
13347
13413
  layout: "none",
13348
13414
  from: from ?? 0,
13349
13415
  durationInFrames: durationInFrames ?? Infinity,
13416
+ freeze,
13350
13417
  _remotionInternalStack: stack,
13351
13418
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/img",
13352
13419
  _remotionInternalIsMedia: { type: "image", src },
@@ -13366,6 +13433,7 @@ var CanvasImageWithPrivateProps = CanvasImage;
13366
13433
  var imgSchema = {
13367
13434
  durationInFrames: durationInFramesField,
13368
13435
  from: fromField,
13436
+ freeze: freezeField,
13369
13437
  ...sequenceVisualStyleSchema,
13370
13438
  hidden: hiddenField
13371
13439
  };
@@ -13421,6 +13489,7 @@ var ImgInner = ({
13421
13489
  src,
13422
13490
  from,
13423
13491
  durationInFrames,
13492
+ freeze,
13424
13493
  _experimentalControls: controls,
13425
13494
  width,
13426
13495
  height,
@@ -13445,6 +13514,7 @@ var ImgInner = ({
13445
13514
  src,
13446
13515
  from,
13447
13516
  durationInFrames,
13517
+ freeze,
13448
13518
  _experimentalControls: controls,
13449
13519
  width,
13450
13520
  height,
@@ -13486,6 +13556,7 @@ var ImgInner = ({
13486
13556
  delayRenderTimeoutInMilliseconds,
13487
13557
  from,
13488
13558
  durationInFrames,
13559
+ freeze,
13489
13560
  hidden,
13490
13561
  name: name ?? "<Img>",
13491
13562
  showInTimeline,
@@ -13498,6 +13569,7 @@ var ImgInner = ({
13498
13569
  };
13499
13570
  var Img = wrapInSchema({
13500
13571
  Component: ImgInner,
13572
+ componentIdentity: "dev.remotion.remotion.Img",
13501
13573
  schema: imgSchema,
13502
13574
  supportsEffects: true
13503
13575
  });
@@ -13505,6 +13577,7 @@ addSequenceStackTraces(Img);
13505
13577
  var interactiveElementSchema = {
13506
13578
  durationInFrames: durationInFramesField,
13507
13579
  from: fromField,
13580
+ freeze: freezeField,
13508
13581
  ...sequenceVisualStyleSchema,
13509
13582
  hidden: hiddenField
13510
13583
  };
@@ -13520,6 +13593,7 @@ var makeInteractiveElement = (tag, displayName) => {
13520
13593
  const {
13521
13594
  durationInFrames,
13522
13595
  from,
13596
+ freeze,
13523
13597
  hidden,
13524
13598
  name,
13525
13599
  showInTimeline,
@@ -13528,7 +13602,7 @@ var makeInteractiveElement = (tag, displayName) => {
13528
13602
  ...props2
13529
13603
  } = propsWithControls;
13530
13604
  const refForOutline = useRef25(null);
13531
- const callbackRef = useCallback19((element) => {
13605
+ const callbackRef = useCallback20((element) => {
13532
13606
  refForOutline.current = element;
13533
13607
  setRef(ref, element);
13534
13608
  }, [ref]);
@@ -13536,6 +13610,7 @@ var makeInteractiveElement = (tag, displayName) => {
13536
13610
  layout: "none",
13537
13611
  from: from ?? 0,
13538
13612
  durationInFrames: durationInFrames ?? Infinity,
13613
+ freeze,
13539
13614
  hidden,
13540
13615
  name: name ?? displayName,
13541
13616
  showInTimeline: showInTimeline ?? true,
@@ -13552,6 +13627,7 @@ var makeInteractiveElement = (tag, displayName) => {
13552
13627
  Inner.displayName = displayName;
13553
13628
  const Wrapped = wrapInSchema({
13554
13629
  Component: Inner,
13630
+ componentIdentity: `dev.remotion.remotion.${displayName.slice(1, -1)}`,
13555
13631
  schema: interactiveElementSchema,
13556
13632
  supportsEffects: false
13557
13633
  });
@@ -13608,14 +13684,14 @@ var CompositionManagerProvider = ({
13608
13684
  const [canvasContent, setCanvasContent] = useState18(initialCanvasContent);
13609
13685
  const [compositions, setCompositions] = useState18(initialCompositions);
13610
13686
  const currentcompositionsRef = useRef26(compositions);
13611
- const updateCompositions = useCallback20((updateComps) => {
13687
+ const updateCompositions = useCallback21((updateComps) => {
13612
13688
  setCompositions((comps) => {
13613
13689
  const updated = updateComps(comps);
13614
13690
  currentcompositionsRef.current = updated;
13615
13691
  return updated;
13616
13692
  });
13617
13693
  }, []);
13618
- const registerComposition = useCallback20((comp) => {
13694
+ const registerComposition = useCallback21((comp) => {
13619
13695
  updateCompositions((comps) => {
13620
13696
  if (comps.find((c2) => c2.id === comp.id)) {
13621
13697
  throw new Error(`Multiple composition with id ${comp.id} are registered.`);
@@ -13623,12 +13699,12 @@ var CompositionManagerProvider = ({
13623
13699
  return [...comps, comp];
13624
13700
  });
13625
13701
  }, [updateCompositions]);
13626
- const unregisterComposition = useCallback20((id) => {
13702
+ const unregisterComposition = useCallback21((id) => {
13627
13703
  setCompositions((comps) => {
13628
13704
  return comps.filter((c2) => c2.id !== id);
13629
13705
  });
13630
13706
  }, []);
13631
- const registerFolder = useCallback20((name, parent, nonce, stack) => {
13707
+ const registerFolder = useCallback21((name, parent, nonce, stack) => {
13632
13708
  setFolders((prevFolders) => {
13633
13709
  return [
13634
13710
  ...prevFolders,
@@ -13641,7 +13717,7 @@ var CompositionManagerProvider = ({
13641
13717
  ];
13642
13718
  });
13643
13719
  }, []);
13644
- const unregisterFolder = useCallback20((name, parent) => {
13720
+ const unregisterFolder = useCallback21((name, parent) => {
13645
13721
  setFolders((prevFolders) => {
13646
13722
  return prevFolders.filter((p) => !(p.name === name && p.parent === parent));
13647
13723
  });
@@ -14280,7 +14356,7 @@ var OffthreadVideoForRendering = ({
14280
14356
  continueRender2,
14281
14357
  delayRender2
14282
14358
  ]);
14283
- const onErr = useCallback21(() => {
14359
+ const onErr = useCallback22(() => {
14284
14360
  if (onError) {
14285
14361
  onError?.(new Error("Failed to load image with src " + imageSrc));
14286
14362
  } else {
@@ -14290,7 +14366,7 @@ var OffthreadVideoForRendering = ({
14290
14366
  const className = useMemo35(() => {
14291
14367
  return [OBJECTFIT_CONTAIN_CLASS_NAME, props2.className].filter(truthy).join(" ");
14292
14368
  }, [props2.className]);
14293
- const onImageFrame = useCallback21((img) => {
14369
+ const onImageFrame = useCallback22((img) => {
14294
14370
  if (onVideoFrame) {
14295
14371
  onVideoFrame(img);
14296
14372
  }
@@ -14423,7 +14499,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
14423
14499
  mediaVolume
14424
14500
  });
14425
14501
  warnAboutTooHighVolume(userPreferredVolume);
14426
- const getStack = useCallback22(() => {
14502
+ const getStack = useCallback23(() => {
14427
14503
  return _remotionInternalStack ?? null;
14428
14504
  }, [_remotionInternalStack]);
14429
14505
  useMediaInTimeline({
@@ -14599,7 +14675,7 @@ var InnerOffthreadVideo = (props2) => {
14599
14675
  if (environment.isClientSideRendering) {
14600
14676
  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");
14601
14677
  }
14602
- const onDuration = useCallback23(() => {
14678
+ const onDuration = useCallback24(() => {
14603
14679
  return;
14604
14680
  }, []);
14605
14681
  if (typeof props2.src !== "string") {
@@ -14978,6 +15054,7 @@ var Internals = {
14978
15054
  getEffectPropStatusesCtx,
14979
15055
  hiddenField,
14980
15056
  durationInFramesField,
15057
+ freezeField,
14981
15058
  fromField
14982
15059
  };
14983
15060
  var flattenChildren = (children) => {
@@ -15063,6 +15140,7 @@ var SeriesInner = (props2) => {
15063
15140
  };
15064
15141
  var Series = Object.assign(wrapInSchema({
15065
15142
  Component: SeriesInner,
15143
+ componentIdentity: "dev.remotion.remotion.Series",
15066
15144
  schema: sequenceSchemaDefaultLayoutNone,
15067
15145
  supportsEffects: false
15068
15146
  }), {
@@ -15527,7 +15605,7 @@ var VideoForwardingFunction = (props2, ref) => {
15527
15605
  throw new TypeError(`The \`<Html5Video>\` tag requires a string for \`src\`, but got ${JSON.stringify(props2.src)} instead.`);
15528
15606
  }
15529
15607
  const preloadedSrc = usePreload(props2.src);
15530
- const onDuration = useCallback24((src, durationInSeconds) => {
15608
+ const onDuration = useCallback25((src, durationInSeconds) => {
15531
15609
  setDurations({ type: "got-duration", durationInSeconds, src });
15532
15610
  }, [setDurations]);
15533
15611
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props2.src)];
@@ -15637,7 +15715,7 @@ addSequenceStackTraces(Composition);
15637
15715
  addSequenceStackTraces(Folder);
15638
15716
 
15639
15717
  // ../shapes/dist/esm/index.mjs
15640
- import React, { useCallback as useCallback25, useMemo as useMemo40, useRef as useRef29 } from "react";
15718
+ import React, { useCallback as useCallback26, useMemo as useMemo40, useRef as useRef29 } from "react";
15641
15719
  import { version } from "react-dom";
15642
15720
  import { jsx as jsx40, jsxs as jsxs3 } from "react/jsx-runtime";
15643
15721
  import { jsx as jsx210 } from "react/jsx-runtime";
@@ -15649,6 +15727,7 @@ import { jsx as jsx72 } from "react/jsx-runtime";
15649
15727
  import { jsx as jsx82 } from "react/jsx-runtime";
15650
15728
  import { jsx as jsx92 } from "react/jsx-runtime";
15651
15729
  import { jsx as jsx102 } from "react/jsx-runtime";
15730
+ import { jsx as jsx112 } from "react/jsx-runtime";
15652
15731
  var unitDir = (from, to) => {
15653
15732
  const dx = to[0] - from[0];
15654
15733
  const dy = to[1] - from[1];
@@ -15807,6 +15886,7 @@ var RenderSvg = ({
15807
15886
  pixelDensity,
15808
15887
  durationInFrames,
15809
15888
  from,
15889
+ freeze,
15810
15890
  hidden,
15811
15891
  name,
15812
15892
  showInTimeline,
@@ -15827,10 +15907,10 @@ var RenderSvg = ({
15827
15907
  };
15828
15908
  }, [pathStyle]);
15829
15909
  const outlineRef = useRef29(null);
15830
- const setSvgRef = useCallback25((node) => {
15910
+ const setSvgRef = useCallback26((node) => {
15831
15911
  outlineRef.current = node;
15832
15912
  }, []);
15833
- const setCanvasRef = useCallback25((canvas) => {
15913
+ const setCanvasRef = useCallback26((canvas) => {
15834
15914
  outlineRef.current = canvas;
15835
15915
  }, []);
15836
15916
  const memoizedEffectDefinitions = Internals.useMemoizedEffectDefinitions(effects);
@@ -15915,6 +15995,7 @@ var RenderSvg = ({
15915
15995
  return /* @__PURE__ */ jsx40(Sequence, {
15916
15996
  layout: "none",
15917
15997
  from,
15998
+ freeze,
15918
15999
  hidden,
15919
16000
  showInTimeline,
15920
16001
  _experimentalControls: controls,
@@ -15980,6 +16061,7 @@ var enumField = ({
15980
16061
  var makeShapeSchema = (shapeFields) => {
15981
16062
  return {
15982
16063
  from: Internals.sequenceSchema.from,
16064
+ freeze: Internals.sequenceSchema.freeze,
15983
16065
  durationInFrames: Internals.sequenceSchema.durationInFrames,
15984
16066
  ...shapeFields,
15985
16067
  fill: colorField({
@@ -16047,10 +16129,435 @@ var ArrowInner = ({
16047
16129
  };
16048
16130
  var Arrow = Internals.wrapInSchema({
16049
16131
  Component: ArrowInner,
16132
+ componentIdentity: "dev.remotion.shapes.Arrow",
16050
16133
  schema: arrowSchema,
16051
16134
  supportsEffects: true
16052
16135
  });
16053
16136
  Internals.addSequenceStackTraces(Arrow);
16137
+ var shortenVector = (vector, radius) => {
16138
+ const [x, y] = vector;
16139
+ const currentLength = Math.sqrt(x * x + y * y);
16140
+ const scalingFactor = (currentLength - radius) / currentLength;
16141
+ return [x * scalingFactor, y * scalingFactor];
16142
+ };
16143
+ var scaleVectorToLength = (vector, length2) => {
16144
+ const [x, y] = vector;
16145
+ const currentLength = Math.sqrt(x * x + y * y);
16146
+ const scalingFactor = length2 / currentLength;
16147
+ return [x * scalingFactor, y * scalingFactor];
16148
+ };
16149
+ var joinPoints = (points, {
16150
+ edgeRoundness,
16151
+ cornerRadius,
16152
+ roundCornerStrategy
16153
+ }) => {
16154
+ return points.map(([x, y], i) => {
16155
+ const prevPointIndex = i === 0 ? points.length - 2 : i - 1;
16156
+ const prevPoint = points[prevPointIndex];
16157
+ const nextPointIndex = i === points.length - 1 ? 1 : i + 1;
16158
+ const nextPoint = points[nextPointIndex];
16159
+ const middleOfLine = [(x + nextPoint[0]) / 2, (y + nextPoint[1]) / 2];
16160
+ const prevPointMiddleOfLine = [
16161
+ (x + prevPoint[0]) / 2,
16162
+ (y + prevPoint[1]) / 2
16163
+ ];
16164
+ const prevVector = [x - prevPoint[0], y - prevPoint[1]];
16165
+ const nextVector = [nextPoint[0] - x, nextPoint[1] - y];
16166
+ if (i === 0) {
16167
+ if (edgeRoundness !== null) {
16168
+ return [
16169
+ {
16170
+ type: "M",
16171
+ x: middleOfLine[0],
16172
+ y: middleOfLine[1]
16173
+ }
16174
+ ];
16175
+ }
16176
+ if (cornerRadius !== 0) {
16177
+ const computeRadius = shortenVector(nextVector, cornerRadius);
16178
+ return [
16179
+ {
16180
+ type: "M",
16181
+ x: computeRadius[0] + x,
16182
+ y: computeRadius[1] + y
16183
+ }
16184
+ ];
16185
+ }
16186
+ return [
16187
+ {
16188
+ type: "M",
16189
+ x,
16190
+ y
16191
+ }
16192
+ ];
16193
+ }
16194
+ if (cornerRadius && edgeRoundness !== null) {
16195
+ throw new Error(`"cornerRadius" and "edgeRoundness" cannot be specified at the same time.`);
16196
+ }
16197
+ if (edgeRoundness === null) {
16198
+ if (cornerRadius === 0) {
16199
+ return [
16200
+ {
16201
+ type: "L",
16202
+ x,
16203
+ y
16204
+ }
16205
+ ];
16206
+ }
16207
+ const prevVectorMinusRadius = shortenVector(prevVector, cornerRadius);
16208
+ const prevVectorLength = scaleVectorToLength(prevVector, cornerRadius);
16209
+ const nextVectorMinusRadius = scaleVectorToLength(nextVector, cornerRadius);
16210
+ const firstDraw = [
16211
+ prevPoint[0] + prevVectorMinusRadius[0],
16212
+ prevPoint[1] + prevVectorMinusRadius[1]
16213
+ ];
16214
+ return [
16215
+ {
16216
+ type: "L",
16217
+ x: firstDraw[0],
16218
+ y: firstDraw[1]
16219
+ },
16220
+ roundCornerStrategy === "arc" ? {
16221
+ type: "a",
16222
+ rx: cornerRadius,
16223
+ ry: cornerRadius,
16224
+ xAxisRotation: 0,
16225
+ dx: prevVectorLength[0] + nextVectorMinusRadius[0],
16226
+ dy: prevVectorLength[1] + nextVectorMinusRadius[1],
16227
+ largeArcFlag: false,
16228
+ sweepFlag: true
16229
+ } : {
16230
+ type: "C",
16231
+ x: firstDraw[0] + prevVectorLength[0] + nextVectorMinusRadius[0],
16232
+ y: firstDraw[1] + prevVectorLength[1] + nextVectorMinusRadius[1],
16233
+ cp1x: x,
16234
+ cp1y: y,
16235
+ cp2x: x,
16236
+ cp2y: y
16237
+ }
16238
+ ];
16239
+ }
16240
+ const controlPoint1 = [
16241
+ prevPointMiddleOfLine[0] + prevVector[0] * edgeRoundness * 0.5,
16242
+ prevPointMiddleOfLine[1] + prevVector[1] * edgeRoundness * 0.5
16243
+ ];
16244
+ const controlPoint2 = [
16245
+ middleOfLine[0] - nextVector[0] * edgeRoundness * 0.5,
16246
+ middleOfLine[1] - nextVector[1] * edgeRoundness * 0.5
16247
+ ];
16248
+ return [
16249
+ {
16250
+ type: "C",
16251
+ cp1x: controlPoint1[0],
16252
+ cp1y: controlPoint1[1],
16253
+ cp2x: controlPoint2[0],
16254
+ cp2y: controlPoint2[1],
16255
+ x: middleOfLine[0],
16256
+ y: middleOfLine[1]
16257
+ }
16258
+ ];
16259
+ }).flat(1);
16260
+ };
16261
+ var ensurePositive = (name, value) => {
16262
+ if (typeof value !== "number" || value <= 0) {
16263
+ throw new Error(`"${name}" must be a positive number, got ${value}`);
16264
+ }
16265
+ };
16266
+ var pointerInterval = ({
16267
+ availableLength,
16268
+ pointerBaseWidth,
16269
+ pointerPosition
16270
+ }) => {
16271
+ const center = availableLength * pointerPosition;
16272
+ const half = pointerBaseWidth / 2;
16273
+ return {
16274
+ center,
16275
+ start: Math.max(0, center - half),
16276
+ end: Math.min(availableLength, center + half)
16277
+ };
16278
+ };
16279
+ var areSamePoint = (a2, b2) => {
16280
+ return a2[0] === b2[0] && a2[1] === b2[1];
16281
+ };
16282
+ var normalizeClosedPoints = (points) => {
16283
+ const deduplicated = points.reduce((acc, entry) => {
16284
+ const previous = acc[acc.length - 1];
16285
+ if (previous && areSamePoint(previous.point, entry.point)) {
16286
+ acc[acc.length - 1] = {
16287
+ point: previous.point,
16288
+ round: previous.round && entry.round
16289
+ };
16290
+ return acc;
16291
+ }
16292
+ return [...acc, entry];
16293
+ }, []);
16294
+ if (deduplicated.length === 0) {
16295
+ return deduplicated;
16296
+ }
16297
+ const first = deduplicated[0];
16298
+ const last = deduplicated[deduplicated.length - 1];
16299
+ if (areSamePoint(first.point, last.point)) {
16300
+ const [firstEntry, ...rest] = deduplicated;
16301
+ const withoutLast = rest.slice(0, -1);
16302
+ const mergedFirst = {
16303
+ point: firstEntry.point,
16304
+ round: firstEntry.round && last.round
16305
+ };
16306
+ return [mergedFirst, ...withoutLast, mergedFirst];
16307
+ }
16308
+ return [...deduplicated, first];
16309
+ };
16310
+ var unitDir2 = (from, to) => {
16311
+ const dx = to[0] - from[0];
16312
+ const dy = to[1] - from[1];
16313
+ const len = Math.sqrt(dx * dx + dy * dy);
16314
+ if (len === 0) {
16315
+ return [0, 0];
16316
+ }
16317
+ return [dx / len, dy / len];
16318
+ };
16319
+ var makeInstructions2 = ({
16320
+ points,
16321
+ edgeRoundness,
16322
+ cornerRadius
16323
+ }) => {
16324
+ const rawPoints = points.map((p) => p.point);
16325
+ if (edgeRoundness !== null || cornerRadius === 0) {
16326
+ return [
16327
+ ...joinPoints(rawPoints, {
16328
+ edgeRoundness,
16329
+ cornerRadius,
16330
+ roundCornerStrategy: "arc"
16331
+ }),
16332
+ {
16333
+ type: "Z"
16334
+ }
16335
+ ];
16336
+ }
16337
+ const uniquePoints = areSamePoint(points[0].point, points[points.length - 1].point) ? points.slice(0, -1) : points;
16338
+ const firstPoint = uniquePoints[0];
16339
+ const startDir = firstPoint.round ? unitDir2(uniquePoints[0].point, uniquePoints[1].point) : null;
16340
+ const startPoint = startDir ? [
16341
+ firstPoint.point[0] + startDir[0] * cornerRadius,
16342
+ firstPoint.point[1] + startDir[1] * cornerRadius
16343
+ ] : firstPoint.point;
16344
+ const instructions = [
16345
+ { type: "M", x: startPoint[0], y: startPoint[1] }
16346
+ ];
16347
+ for (let i = 1;i < uniquePoints.length; i++) {
16348
+ const current = uniquePoints[i];
16349
+ if (!current.round) {
16350
+ instructions.push({
16351
+ type: "L",
16352
+ x: current.point[0],
16353
+ y: current.point[1]
16354
+ });
16355
+ continue;
16356
+ }
16357
+ const previous = uniquePoints[i - 1].point;
16358
+ const next = uniquePoints[(i + 1) % uniquePoints.length].point;
16359
+ const incoming = unitDir2(previous, current.point);
16360
+ const outgoing = unitDir2(current.point, next);
16361
+ const arcStart = [
16362
+ current.point[0] - incoming[0] * cornerRadius,
16363
+ current.point[1] - incoming[1] * cornerRadius
16364
+ ];
16365
+ instructions.push({
16366
+ type: "L",
16367
+ x: arcStart[0],
16368
+ y: arcStart[1]
16369
+ }, {
16370
+ type: "a",
16371
+ rx: cornerRadius,
16372
+ ry: cornerRadius,
16373
+ xAxisRotation: 0,
16374
+ dx: incoming[0] * cornerRadius + outgoing[0] * cornerRadius,
16375
+ dy: incoming[1] * cornerRadius + outgoing[1] * cornerRadius,
16376
+ largeArcFlag: false,
16377
+ sweepFlag: true
16378
+ });
16379
+ }
16380
+ if (firstPoint.round) {
16381
+ const previous = uniquePoints[uniquePoints.length - 1].point;
16382
+ const incoming = unitDir2(previous, firstPoint.point);
16383
+ instructions.push({
16384
+ type: "L",
16385
+ x: firstPoint.point[0] - incoming[0] * cornerRadius,
16386
+ y: firstPoint.point[1] - incoming[1] * cornerRadius
16387
+ }, {
16388
+ type: "a",
16389
+ rx: cornerRadius,
16390
+ ry: cornerRadius,
16391
+ xAxisRotation: 0,
16392
+ dx: incoming[0] * cornerRadius + startDir[0] * cornerRadius,
16393
+ dy: incoming[1] * cornerRadius + startDir[1] * cornerRadius,
16394
+ largeArcFlag: false,
16395
+ sweepFlag: true
16396
+ });
16397
+ }
16398
+ instructions.push({ type: "Z" });
16399
+ return instructions;
16400
+ };
16401
+ var makeCallout = ({
16402
+ width = 500,
16403
+ height = 200,
16404
+ pointerLength = 40,
16405
+ pointerBaseWidth = 60,
16406
+ pointerPosition = 0.5,
16407
+ pointerDirection = "down",
16408
+ edgeRoundness = null,
16409
+ cornerRadius = 0
16410
+ }) => {
16411
+ ensurePositive("width", width);
16412
+ ensurePositive("height", height);
16413
+ ensurePositive("pointerLength", pointerLength);
16414
+ ensurePositive("pointerBaseWidth", pointerBaseWidth);
16415
+ if (typeof pointerPosition !== "number" || pointerPosition < 0 || pointerPosition > 1) {
16416
+ throw new Error(`"pointerPosition" must be a number between 0 and 1, got ${pointerPosition}`);
16417
+ }
16418
+ const horizontalInterval = pointerInterval({
16419
+ availableLength: width,
16420
+ pointerBaseWidth,
16421
+ pointerPosition
16422
+ });
16423
+ const verticalInterval = pointerInterval({
16424
+ availableLength: height,
16425
+ pointerBaseWidth,
16426
+ pointerPosition
16427
+ });
16428
+ const pointsByDirection = {
16429
+ up: [
16430
+ { point: [0, pointerLength], round: true },
16431
+ { point: [horizontalInterval.start, pointerLength], round: false },
16432
+ { point: [horizontalInterval.center, 0], round: false },
16433
+ { point: [horizontalInterval.end, pointerLength], round: false },
16434
+ { point: [width, pointerLength], round: true },
16435
+ { point: [width, height + pointerLength], round: true },
16436
+ { point: [0, height + pointerLength], round: true },
16437
+ { point: [0, pointerLength], round: true }
16438
+ ],
16439
+ down: [
16440
+ { point: [0, 0], round: true },
16441
+ { point: [width, 0], round: true },
16442
+ { point: [width, height], round: true },
16443
+ { point: [horizontalInterval.end, height], round: false },
16444
+ {
16445
+ point: [horizontalInterval.center, height + pointerLength],
16446
+ round: false
16447
+ },
16448
+ { point: [horizontalInterval.start, height], round: false },
16449
+ { point: [0, height], round: true },
16450
+ { point: [0, 0], round: true }
16451
+ ],
16452
+ left: [
16453
+ { point: [pointerLength, 0], round: true },
16454
+ { point: [width + pointerLength, 0], round: true },
16455
+ { point: [width + pointerLength, height], round: true },
16456
+ { point: [pointerLength, height], round: true },
16457
+ { point: [pointerLength, verticalInterval.end], round: false },
16458
+ { point: [0, verticalInterval.center], round: false },
16459
+ { point: [pointerLength, verticalInterval.start], round: false },
16460
+ { point: [pointerLength, 0], round: true }
16461
+ ],
16462
+ right: [
16463
+ { point: [0, 0], round: true },
16464
+ { point: [width, 0], round: true },
16465
+ { point: [width, verticalInterval.start], round: false },
16466
+ { point: [width + pointerLength, verticalInterval.center], round: false },
16467
+ { point: [width, verticalInterval.end], round: false },
16468
+ { point: [width, height], round: true },
16469
+ { point: [0, height], round: true },
16470
+ { point: [0, 0], round: true }
16471
+ ]
16472
+ };
16473
+ const points = normalizeClosedPoints(pointsByDirection[pointerDirection]);
16474
+ const instructions = makeInstructions2({ points, edgeRoundness, cornerRadius });
16475
+ const path = serializeInstructions(instructions);
16476
+ const shapeWidth = pointerDirection === "left" || pointerDirection === "right" ? width + pointerLength : width;
16477
+ const shapeHeight = pointerDirection === "up" || pointerDirection === "down" ? height + pointerLength : height;
16478
+ const bodyX = pointerDirection === "left" ? pointerLength : 0;
16479
+ const bodyY = pointerDirection === "up" ? pointerLength : 0;
16480
+ return {
16481
+ width: shapeWidth,
16482
+ height: shapeHeight,
16483
+ instructions,
16484
+ path,
16485
+ transformOrigin: `${bodyX + width / 2} ${bodyY + height / 2}`
16486
+ };
16487
+ };
16488
+ var calloutSchema = makeShapeSchema({
16489
+ width: numberField({
16490
+ defaultValue: 500,
16491
+ description: "Width",
16492
+ min: 1
16493
+ }),
16494
+ height: numberField({
16495
+ defaultValue: 200,
16496
+ description: "Height",
16497
+ min: 1
16498
+ }),
16499
+ pointerLength: numberField({
16500
+ defaultValue: 40,
16501
+ description: "Pointer Length",
16502
+ min: 1
16503
+ }),
16504
+ pointerBaseWidth: numberField({
16505
+ defaultValue: 60,
16506
+ description: "Pointer Base Width",
16507
+ min: 1
16508
+ }),
16509
+ pointerPosition: numberField({
16510
+ defaultValue: 0.5,
16511
+ description: "Pointer Position",
16512
+ min: 0,
16513
+ max: 1,
16514
+ step: 0.01
16515
+ }),
16516
+ pointerDirection: enumField({
16517
+ defaultValue: "down",
16518
+ description: "Pointer Direction",
16519
+ variants: ["up", "down", "left", "right"]
16520
+ }),
16521
+ cornerRadius: numberField({
16522
+ defaultValue: 0,
16523
+ description: "Corner Radius",
16524
+ min: 0
16525
+ })
16526
+ });
16527
+ var CalloutInner = ({
16528
+ width,
16529
+ height,
16530
+ pointerLength,
16531
+ pointerBaseWidth,
16532
+ pointerPosition,
16533
+ pointerDirection,
16534
+ edgeRoundness,
16535
+ cornerRadius,
16536
+ ...props
16537
+ }) => {
16538
+ return /* @__PURE__ */ jsx310(RenderSvg, {
16539
+ defaultName: "<Callout>",
16540
+ documentationLink: "https://www.remotion.dev/docs/shapes/callout",
16541
+ ...makeCallout({
16542
+ width,
16543
+ height,
16544
+ pointerLength,
16545
+ pointerBaseWidth,
16546
+ pointerPosition,
16547
+ pointerDirection,
16548
+ edgeRoundness,
16549
+ cornerRadius
16550
+ }),
16551
+ ...props
16552
+ });
16553
+ };
16554
+ var Callout = Internals.wrapInSchema({
16555
+ Component: CalloutInner,
16556
+ componentIdentity: "dev.remotion.shapes.Callout",
16557
+ schema: calloutSchema,
16558
+ supportsEffects: true
16559
+ });
16560
+ Internals.addSequenceStackTraces(Callout);
16054
16561
  var makeCircle = ({ radius }) => {
16055
16562
  const instructions = [
16056
16563
  {
@@ -16099,7 +16606,7 @@ var circleSchema = makeShapeSchema({
16099
16606
  })
16100
16607
  });
16101
16608
  var CircleInner = ({ radius, ...props }) => {
16102
- return /* @__PURE__ */ jsx310(RenderSvg, {
16609
+ return /* @__PURE__ */ jsx42(RenderSvg, {
16103
16610
  defaultName: "<Circle>",
16104
16611
  documentationLink: "https://www.remotion.dev/docs/shapes/circle",
16105
16612
  ...makeCircle({ radius }),
@@ -16108,6 +16615,7 @@ var CircleInner = ({ radius, ...props }) => {
16108
16615
  };
16109
16616
  var Circle = Internals.wrapInSchema({
16110
16617
  Component: CircleInner,
16618
+ componentIdentity: "dev.remotion.shapes.Circle",
16111
16619
  schema: circleSchema,
16112
16620
  supportsEffects: true
16113
16621
  });
@@ -16155,7 +16663,7 @@ var ellipseSchema = makeShapeSchema({
16155
16663
  })
16156
16664
  });
16157
16665
  var EllipseInner = ({ rx, ry, ...props }) => {
16158
- return /* @__PURE__ */ jsx42(RenderSvg, {
16666
+ return /* @__PURE__ */ jsx52(RenderSvg, {
16159
16667
  defaultName: "<Ellipse>",
16160
16668
  documentationLink: "https://www.remotion.dev/docs/shapes/ellipse",
16161
16669
  ...makeEllipse({ rx, ry }),
@@ -16164,6 +16672,7 @@ var EllipseInner = ({ rx, ry, ...props }) => {
16164
16672
  };
16165
16673
  var Ellipse = Internals.wrapInSchema({
16166
16674
  Component: EllipseInner,
16675
+ componentIdentity: "dev.remotion.shapes.Ellipse",
16167
16676
  schema: ellipseSchema,
16168
16677
  supportsEffects: true
16169
16678
  });
@@ -16287,7 +16796,7 @@ var HeartInner = ({
16287
16796
  depthAdjustment = 0,
16288
16797
  ...props
16289
16798
  }) => {
16290
- return /* @__PURE__ */ jsx52(RenderSvg, {
16799
+ return /* @__PURE__ */ jsx62(RenderSvg, {
16291
16800
  defaultName: "<Heart>",
16292
16801
  documentationLink: "https://www.remotion.dev/docs/shapes/heart",
16293
16802
  ...makeHeart({
@@ -16301,6 +16810,7 @@ var HeartInner = ({
16301
16810
  };
16302
16811
  var Heart = Internals.wrapInSchema({
16303
16812
  Component: HeartInner,
16813
+ componentIdentity: "dev.remotion.shapes.Heart",
16304
16814
  schema: heartSchema,
16305
16815
  supportsEffects: true
16306
16816
  });
@@ -16445,7 +16955,7 @@ var PieInner = ({
16445
16955
  rotation,
16446
16956
  ...props
16447
16957
  }) => {
16448
- return /* @__PURE__ */ jsx62(RenderSvg, {
16958
+ return /* @__PURE__ */ jsx72(RenderSvg, {
16449
16959
  defaultName: "<Pie>",
16450
16960
  documentationLink: "https://www.remotion.dev/docs/shapes/pie",
16451
16961
  ...makePie({ radius, progress, closePath, counterClockwise, rotation }),
@@ -16454,134 +16964,11 @@ var PieInner = ({
16454
16964
  };
16455
16965
  var Pie = Internals.wrapInSchema({
16456
16966
  Component: PieInner,
16967
+ componentIdentity: "dev.remotion.shapes.Pie",
16457
16968
  schema: pieSchema,
16458
16969
  supportsEffects: true
16459
16970
  });
16460
16971
  Internals.addSequenceStackTraces(Pie);
16461
- var shortenVector = (vector, radius) => {
16462
- const [x, y] = vector;
16463
- const currentLength = Math.sqrt(x * x + y * y);
16464
- const scalingFactor = (currentLength - radius) / currentLength;
16465
- return [x * scalingFactor, y * scalingFactor];
16466
- };
16467
- var scaleVectorToLength = (vector, length2) => {
16468
- const [x, y] = vector;
16469
- const currentLength = Math.sqrt(x * x + y * y);
16470
- const scalingFactor = length2 / currentLength;
16471
- return [x * scalingFactor, y * scalingFactor];
16472
- };
16473
- var joinPoints = (points, {
16474
- edgeRoundness,
16475
- cornerRadius,
16476
- roundCornerStrategy
16477
- }) => {
16478
- return points.map(([x, y], i) => {
16479
- const prevPointIndex = i === 0 ? points.length - 2 : i - 1;
16480
- const prevPoint = points[prevPointIndex];
16481
- const nextPointIndex = i === points.length - 1 ? 1 : i + 1;
16482
- const nextPoint = points[nextPointIndex];
16483
- const middleOfLine = [(x + nextPoint[0]) / 2, (y + nextPoint[1]) / 2];
16484
- const prevPointMiddleOfLine = [
16485
- (x + prevPoint[0]) / 2,
16486
- (y + prevPoint[1]) / 2
16487
- ];
16488
- const prevVector = [x - prevPoint[0], y - prevPoint[1]];
16489
- const nextVector = [nextPoint[0] - x, nextPoint[1] - y];
16490
- if (i === 0) {
16491
- if (edgeRoundness !== null) {
16492
- return [
16493
- {
16494
- type: "M",
16495
- x: middleOfLine[0],
16496
- y: middleOfLine[1]
16497
- }
16498
- ];
16499
- }
16500
- if (cornerRadius !== 0) {
16501
- const computeRadius = shortenVector(nextVector, cornerRadius);
16502
- return [
16503
- {
16504
- type: "M",
16505
- x: computeRadius[0] + x,
16506
- y: computeRadius[1] + y
16507
- }
16508
- ];
16509
- }
16510
- return [
16511
- {
16512
- type: "M",
16513
- x,
16514
- y
16515
- }
16516
- ];
16517
- }
16518
- if (cornerRadius && edgeRoundness !== null) {
16519
- throw new Error(`"cornerRadius" and "edgeRoundness" cannot be specified at the same time.`);
16520
- }
16521
- if (edgeRoundness === null) {
16522
- if (cornerRadius === 0) {
16523
- return [
16524
- {
16525
- type: "L",
16526
- x,
16527
- y
16528
- }
16529
- ];
16530
- }
16531
- const prevVectorMinusRadius = shortenVector(prevVector, cornerRadius);
16532
- const prevVectorLength = scaleVectorToLength(prevVector, cornerRadius);
16533
- const nextVectorMinusRadius = scaleVectorToLength(nextVector, cornerRadius);
16534
- const firstDraw = [
16535
- prevPoint[0] + prevVectorMinusRadius[0],
16536
- prevPoint[1] + prevVectorMinusRadius[1]
16537
- ];
16538
- return [
16539
- {
16540
- type: "L",
16541
- x: firstDraw[0],
16542
- y: firstDraw[1]
16543
- },
16544
- roundCornerStrategy === "arc" ? {
16545
- type: "a",
16546
- rx: cornerRadius,
16547
- ry: cornerRadius,
16548
- xAxisRotation: 0,
16549
- dx: prevVectorLength[0] + nextVectorMinusRadius[0],
16550
- dy: prevVectorLength[1] + nextVectorMinusRadius[1],
16551
- largeArcFlag: false,
16552
- sweepFlag: true
16553
- } : {
16554
- type: "C",
16555
- x: firstDraw[0] + prevVectorLength[0] + nextVectorMinusRadius[0],
16556
- y: firstDraw[1] + prevVectorLength[1] + nextVectorMinusRadius[1],
16557
- cp1x: x,
16558
- cp1y: y,
16559
- cp2x: x,
16560
- cp2y: y
16561
- }
16562
- ];
16563
- }
16564
- const controlPoint1 = [
16565
- prevPointMiddleOfLine[0] + prevVector[0] * edgeRoundness * 0.5,
16566
- prevPointMiddleOfLine[1] + prevVector[1] * edgeRoundness * 0.5
16567
- ];
16568
- const controlPoint2 = [
16569
- middleOfLine[0] - nextVector[0] * edgeRoundness * 0.5,
16570
- middleOfLine[1] - nextVector[1] * edgeRoundness * 0.5
16571
- ];
16572
- return [
16573
- {
16574
- type: "C",
16575
- cp1x: controlPoint1[0],
16576
- cp1y: controlPoint1[1],
16577
- cp2x: controlPoint2[0],
16578
- cp2y: controlPoint2[1],
16579
- x: middleOfLine[0],
16580
- y: middleOfLine[1]
16581
- }
16582
- ];
16583
- }).flat(1);
16584
- };
16585
16972
  function polygon({
16586
16973
  points,
16587
16974
  radius,
@@ -16662,7 +17049,7 @@ var PolygonInner = ({
16662
17049
  edgeRoundness,
16663
17050
  ...props
16664
17051
  }) => {
16665
- return /* @__PURE__ */ jsx72(RenderSvg, {
17052
+ return /* @__PURE__ */ jsx82(RenderSvg, {
16666
17053
  defaultName: "<Polygon>",
16667
17054
  documentationLink: "https://www.remotion.dev/docs/shapes/polygon",
16668
17055
  ...makePolygon({
@@ -16676,6 +17063,7 @@ var PolygonInner = ({
16676
17063
  };
16677
17064
  var Polygon = Internals.wrapInSchema({
16678
17065
  Component: PolygonInner,
17066
+ componentIdentity: "dev.remotion.shapes.Polygon",
16679
17067
  schema: polygonSchema,
16680
17068
  supportsEffects: true
16681
17069
  });
@@ -16732,7 +17120,7 @@ var RectInner = ({
16732
17120
  cornerRadius,
16733
17121
  ...props
16734
17122
  }) => {
16735
- return /* @__PURE__ */ jsx82(RenderSvg, {
17123
+ return /* @__PURE__ */ jsx92(RenderSvg, {
16736
17124
  defaultName: "<Rect>",
16737
17125
  documentationLink: "https://www.remotion.dev/docs/shapes/rect",
16738
17126
  ...makeRect({ height, width, edgeRoundness, cornerRadius }),
@@ -16741,6 +17129,7 @@ var RectInner = ({
16741
17129
  };
16742
17130
  var Rect = Internals.wrapInSchema({
16743
17131
  Component: RectInner,
17132
+ componentIdentity: "dev.remotion.shapes.Rect",
16744
17133
  schema: rectSchema,
16745
17134
  supportsEffects: true
16746
17135
  });
@@ -16835,7 +17224,7 @@ var StarInner = ({
16835
17224
  edgeRoundness,
16836
17225
  ...props
16837
17226
  }) => {
16838
- return /* @__PURE__ */ jsx92(RenderSvg, {
17227
+ return /* @__PURE__ */ jsx102(RenderSvg, {
16839
17228
  defaultName: "<Star>",
16840
17229
  documentationLink: "https://www.remotion.dev/docs/shapes/star",
16841
17230
  ...makeStar({
@@ -16850,6 +17239,7 @@ var StarInner = ({
16850
17239
  };
16851
17240
  var Star = Internals.wrapInSchema({
16852
17241
  Component: StarInner,
17242
+ componentIdentity: "dev.remotion.shapes.Star",
16853
17243
  schema: starSchema,
16854
17244
  supportsEffects: true
16855
17245
  });
@@ -16946,7 +17336,7 @@ var TriangleInner = ({
16946
17336
  cornerRadius,
16947
17337
  ...props
16948
17338
  }) => {
16949
- return /* @__PURE__ */ jsx102(RenderSvg, {
17339
+ return /* @__PURE__ */ jsx112(RenderSvg, {
16950
17340
  defaultName: "<Triangle>",
16951
17341
  documentationLink: "https://www.remotion.dev/docs/shapes/triangle",
16952
17342
  ...makeTriangle({ length: length2, direction, edgeRoundness, cornerRadius }),
@@ -16955,6 +17345,7 @@ var TriangleInner = ({
16955
17345
  };
16956
17346
  var Triangle = Internals.wrapInSchema({
16957
17347
  Component: TriangleInner,
17348
+ componentIdentity: "dev.remotion.shapes.Triangle",
16958
17349
  schema: triangleSchema,
16959
17350
  supportsEffects: true
16960
17351
  });
@@ -18035,7 +18426,7 @@ import { jsx as jsx83, jsxs as jsxs32 } from "react/jsx-runtime";
18035
18426
  import { jsx as jsx93 } from "react/jsx-runtime";
18036
18427
  import React72 from "react";
18037
18428
  import { jsx as jsx103 } from "react/jsx-runtime";
18038
- import { jsx as jsx112 } from "react/jsx-runtime";
18429
+ import { jsx as jsx113 } from "react/jsx-runtime";
18039
18430
  import { jsx as jsx122 } from "react/jsx-runtime";
18040
18431
  import * as React36 from "react";
18041
18432
  import * as ReactDOM4 from "react-dom";
@@ -18595,7 +18986,7 @@ var Button = ({
18595
18986
  const [dimensions, setDimensions] = useState22(null);
18596
18987
  const ref = useRef210(null);
18597
18988
  const { isActive, progress } = useHoverTransforms(ref, Boolean(disabled || loading));
18598
- const onPointerEnter = useCallback26((e) => {
18989
+ const onPointerEnter = useCallback27((e) => {
18599
18990
  if (e.pointerType !== "mouse") {
18600
18991
  return;
18601
18992
  }
@@ -18632,7 +19023,7 @@ var Button = ({
18632
19023
  const isDisabled = disabled || loading;
18633
19024
  const isAnchor = !asChild && "href" in rest && rest.href !== undefined;
18634
19025
  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);
18635
- const preventInteraction = useCallback26((e) => {
19026
+ const preventInteraction = useCallback27((e) => {
18636
19027
  e.preventDefault();
18637
19028
  e.stopPropagation();
18638
19029
  }, []);
@@ -18843,7 +19234,7 @@ var Link = ({
18843
19234
  className,
18844
19235
  ...props
18845
19236
  }) => {
18846
- return /* @__PURE__ */ jsx112("a", {
19237
+ return /* @__PURE__ */ jsx113("a", {
18847
19238
  ...props,
18848
19239
  className: cn(className, "text-brand underline underline-offset-4"),
18849
19240
  children: props.children
@@ -24726,7 +25117,7 @@ var Triangle22 = (props) => {
24726
25117
  };
24727
25118
 
24728
25119
  // src/components/homepage/FreePricing.tsx
24729
- import React53, { useCallback as useCallback37, useMemo as useMemo51 } from "react";
25120
+ import React53, { useCallback as useCallback38, useMemo as useMemo51 } from "react";
24730
25121
 
24731
25122
  // ../../node_modules/.bun/tailwind-merge@2.5.2/node_modules/tailwind-merge/dist/bundle-mjs.mjs
24732
25123
  var CLASS_PART_SEPARATOR2 = "-";
@@ -26373,7 +26764,7 @@ var CompanyPricing = () => {
26373
26764
  const [automatorsSelected, setAutomatorsSelected] = React53.useState(true);
26374
26765
  const [devSeatCount, setDevSeatCount] = React53.useState(3);
26375
26766
  const [cloudRenders, setCloudRenders] = React53.useState(1e4);
26376
- const formatPrice = useCallback37((price) => {
26767
+ const formatPrice = useCallback38((price) => {
26377
26768
  const formatter = new Intl.NumberFormat("en-US", {
26378
26769
  style: "currency",
26379
26770
  currency: "USD",