@remotion/promo-pages 4.0.477 → 4.0.479

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.
@@ -22899,7 +22899,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
22899
22899
  var addSequenceStackTraces = (component) => {
22900
22900
  componentsToAddStacksTo.push(component);
22901
22901
  };
22902
- var VERSION = "4.0.477";
22902
+ var VERSION = "4.0.479";
22903
22903
  var checkMultipleRemotionVersions = () => {
22904
22904
  if (typeof globalThis === "undefined") {
22905
22905
  return;
@@ -23262,10 +23262,7 @@ var Freeze = ({
23262
23262
  })
23263
23263
  });
23264
23264
  };
23265
- var PremountContext = createContext14({
23266
- premountFramesRemaining: 0
23267
- });
23268
- var sequenceVisualStyleSchema = {
23265
+ var transformSchema = {
23269
23266
  "style.transformOrigin": {
23270
23267
  type: "transform-origin",
23271
23268
  step: 1,
@@ -23301,7 +23298,8 @@ var sequenceVisualStyleSchema = {
23301
23298
  hiddenFromList: false
23302
23299
  }
23303
23300
  };
23304
- var sequencePremountSchema = {
23301
+ var sequenceVisualStyleSchema = transformSchema;
23302
+ var premountSchema = {
23305
23303
  premountFor: {
23306
23304
  type: "number",
23307
23305
  default: 0,
@@ -23324,9 +23322,10 @@ var sequencePremountSchema = {
23324
23322
  type: "hidden"
23325
23323
  }
23326
23324
  };
23325
+ var sequencePremountSchema = premountSchema;
23327
23326
  var sequenceStyleSchema = {
23328
- ...sequenceVisualStyleSchema,
23329
- ...sequencePremountSchema
23327
+ ...transformSchema,
23328
+ ...premountSchema
23330
23329
  };
23331
23330
  var hiddenField = {
23332
23331
  type: "boolean",
@@ -23364,12 +23363,16 @@ var freezeField = {
23364
23363
  step: 1,
23365
23364
  hiddenFromList: true
23366
23365
  };
23367
- var sequenceSchema = extendSchemaWithSequenceName({
23368
- hidden: hiddenField,
23369
- showInTimeline: showInTimelineField,
23366
+ var baseSchema = {
23367
+ durationInFrames: durationInFramesField,
23370
23368
  from: fromField,
23371
23369
  freeze: freezeField,
23372
- durationInFrames: durationInFramesField,
23370
+ hidden: hiddenField,
23371
+ name: sequenceNameField,
23372
+ showInTimeline: showInTimelineField
23373
+ };
23374
+ var sequenceSchema = {
23375
+ ...baseSchema,
23373
23376
  layout: {
23374
23377
  type: "enum",
23375
23378
  default: "absolute-fill",
@@ -23379,14 +23382,18 @@ var sequenceSchema = extendSchemaWithSequenceName({
23379
23382
  none: {}
23380
23383
  }
23381
23384
  }
23382
- });
23383
- var sequenceSchemaWithoutFrom = extendSchemaWithSequenceName({
23384
- hidden: hiddenField,
23385
- showInTimeline: showInTimelineField,
23386
- freeze: freezeField,
23385
+ };
23386
+ var baseSchemaWithoutFrom = {
23387
23387
  durationInFrames: durationInFramesField,
23388
+ freeze: freezeField,
23389
+ hidden: hiddenField,
23390
+ name: sequenceNameField,
23391
+ showInTimeline: showInTimelineField
23392
+ };
23393
+ var sequenceSchemaWithoutFrom = {
23394
+ ...baseSchemaWithoutFrom,
23388
23395
  layout: sequenceSchema.layout
23389
- });
23396
+ };
23390
23397
  var sequenceSchemaDefaultLayoutNone = {
23391
23398
  ...sequenceSchema,
23392
23399
  layout: {
@@ -23394,6 +23401,9 @@ var sequenceSchemaDefaultLayoutNone = {
23394
23401
  default: "none"
23395
23402
  }
23396
23403
  };
23404
+ var PremountContext = createContext14({
23405
+ premountFramesRemaining: 0
23406
+ });
23397
23407
  var SequenceManager = React11.createContext({
23398
23408
  registerSequence: () => {
23399
23409
  throw new Error("SequenceManagerContext not initialized");
@@ -25078,10 +25088,21 @@ var interpolateColors = (input, inputRange, outputRange, options) => {
25078
25088
  return interpolateColorsRGB(input, inputRange, processedOutputRange, options);
25079
25089
  };
25080
25090
  var easingToFn = (e) => {
25081
- if (e === "linear") {
25082
- return Easing.linear;
25091
+ switch (e.type) {
25092
+ case "linear":
25093
+ return Easing.linear;
25094
+ case "spring":
25095
+ return Easing.spring({
25096
+ damping: e.damping,
25097
+ mass: e.mass,
25098
+ overshootClamping: e.overshootClamping,
25099
+ stiffness: e.stiffness
25100
+ });
25101
+ case "bezier":
25102
+ return bezier(e.x1, e.y1, e.x2, e.y2);
25103
+ default:
25104
+ throw new TypeError(`Unsupported easing: ${JSON.stringify(e)}`);
25083
25105
  }
25084
- return bezier(e[0], e[1], e[2], e[3]);
25085
25106
  };
25086
25107
  var interpolateKeyframedStatus = ({
25087
25108
  frame,
@@ -25403,6 +25424,9 @@ var findPropsToDelete = ({
25403
25424
  }
25404
25425
  return [...otherKeys];
25405
25426
  };
25427
+ var DEFAULT_LINEAR_EASING = {
25428
+ type: "linear"
25429
+ };
25406
25430
  var makeStaticDragOverride = (value) => {
25407
25431
  return { type: "static", value };
25408
25432
  };
@@ -25415,7 +25439,7 @@ var makeKeyframedDragOverride = ({
25415
25439
  const keyframes = existingIndex === -1 ? [...status.keyframes, { frame, value }].sort((first, second) => first.frame - second.frame) : status.keyframes.map((keyframe, index) => index === existingIndex ? { frame, value } : keyframe);
25416
25440
  const easing = [...status.easing];
25417
25441
  while (easing.length < keyframes.length - 1) {
25418
- easing.push("linear");
25442
+ easing.push(DEFAULT_LINEAR_EASING);
25419
25443
  }
25420
25444
  if (easing.length > keyframes.length - 1) {
25421
25445
  easing.length = keyframes.length - 1;
@@ -25573,7 +25597,7 @@ var mergeValues = ({
25573
25597
  return merged;
25574
25598
  };
25575
25599
  var stackToOverrideMap = {};
25576
- var wrapInSchema = ({
25600
+ var withInteractivitySchema = ({
25577
25601
  Component,
25578
25602
  componentIdentity,
25579
25603
  schema,
@@ -25587,7 +25611,7 @@ var wrapInSchema = ({
25587
25611
  if (!env.isStudio || env.isReadOnlyStudio || env.isRendering) {
25588
25612
  return React13.createElement(Component, {
25589
25613
  ...props,
25590
- _experimentalControls: null,
25614
+ controls: null,
25591
25615
  ref
25592
25616
  });
25593
25617
  }
@@ -25595,7 +25619,7 @@ var wrapInSchema = ({
25595
25619
  const { getDragOverrides } = useContext16(VisualModeDragOverridesContext);
25596
25620
  const nodePathMapping = useContext16(OverrideIdsToNodePathsGettersContext);
25597
25621
  const frame = useCurrentFrame();
25598
- if (props._experimentalControls) {
25622
+ if (props.controls) {
25599
25623
  return React13.createElement(Component, {
25600
25624
  ...props,
25601
25625
  ref
@@ -25650,11 +25674,11 @@ var wrapInSchema = ({
25650
25674
  });
25651
25675
  return React13.createElement(Component, {
25652
25676
  ...mergedProps,
25653
- _experimentalControls: controls,
25677
+ controls,
25654
25678
  ref
25655
25679
  });
25656
25680
  });
25657
- Wrapped.displayName = `wrapInSchema(${Component.displayName || Component.name || "Component"})`;
25681
+ Wrapped.displayName = `withInteractivitySchema(${Component.displayName || Component.name || "Component"})`;
25658
25682
  return Wrapped;
25659
25683
  };
25660
25684
  var EMPTY_EFFECTS = [];
@@ -25668,7 +25692,7 @@ var RegularSequenceRefForwardingFunction = ({
25668
25692
  width,
25669
25693
  showInTimeline = true,
25670
25694
  hidden = false,
25671
- _experimentalControls: controls,
25695
+ controls,
25672
25696
  _remotionInternalEffects,
25673
25697
  _remotionInternalLoopDisplay: loopDisplay,
25674
25698
  _remotionInternalStack: stack,
@@ -25676,7 +25700,7 @@ var RegularSequenceRefForwardingFunction = ({
25676
25700
  _remotionInternalPremountDisplay: premountDisplay,
25677
25701
  _remotionInternalPostmountDisplay: postmountDisplay,
25678
25702
  _remotionInternalIsMedia: isMedia,
25679
- _remotionInternalRefForOutline: passedRefForOutline,
25703
+ outlineRef: passedRefForOutline,
25680
25704
  ...other
25681
25705
  }, ref) => {
25682
25706
  const { layout = "absolute-fill" } = other;
@@ -25773,6 +25797,11 @@ var RegularSequenceRefForwardingFunction = ({
25773
25797
  const inheritedStack = other?.stack ?? null;
25774
25798
  const stackRef = useRef6(null);
25775
25799
  stackRef.current = stack ?? inheritedStack;
25800
+ const registeredFrozenFrame = typeof freeze === "number" ? freeze : null;
25801
+ const parentCumulatedNegativeFrom = parentSequence?.cumulatedNegativeFrom ?? 0;
25802
+ const startMediaFrom = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom - cumulatedNegativeFrom : null;
25803
+ const mediaFrameAtSequenceZero = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom : null;
25804
+ const frozenMediaFrame = isMedia && isMedia.type !== "image" && mediaFrameAtSequenceZero !== null ? registeredFrozenFrame === null ? null : mediaFrameAtSequenceZero + (loopDisplay ? registeredFrozenFrame % loopDisplay.durationInFrames : registeredFrozenFrame) * isMedia.data.playbackRate : null;
25776
25805
  useEffect3(() => {
25777
25806
  if (!env.isStudio) {
25778
25807
  return;
@@ -25798,7 +25827,8 @@ var RegularSequenceRefForwardingFunction = ({
25798
25827
  src: isMedia.src,
25799
25828
  getStack: () => stackRef.current,
25800
25829
  refForOutline: refForOutline ?? null,
25801
- isInsideSeries
25830
+ isInsideSeries,
25831
+ frozenFrame: registeredFrozenFrame
25802
25832
  });
25803
25833
  } else {
25804
25834
  registerSequence({
@@ -25821,10 +25851,12 @@ var RegularSequenceRefForwardingFunction = ({
25821
25851
  showInTimeline,
25822
25852
  src: isMedia.data.src,
25823
25853
  getStack: () => stackRef.current,
25824
- startMediaFrom: isMedia.data.startMediaFrom,
25854
+ startMediaFrom: startMediaFrom ?? isMedia.data.startMediaFrom,
25825
25855
  volume: isMedia.data.volumes,
25826
25856
  refForOutline: refForOutline ?? null,
25827
- isInsideSeries
25857
+ isInsideSeries,
25858
+ frozenFrame: registeredFrozenFrame,
25859
+ frozenMediaFrame
25828
25860
  });
25829
25861
  }
25830
25862
  return () => {
@@ -25849,7 +25881,8 @@ var RegularSequenceRefForwardingFunction = ({
25849
25881
  controls: controls ?? null,
25850
25882
  effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
25851
25883
  refForOutline: refForOutline ?? null,
25852
- isInsideSeries
25884
+ isInsideSeries,
25885
+ frozenFrame: registeredFrozenFrame
25853
25886
  });
25854
25887
  return () => {
25855
25888
  unregisterSequence(id);
@@ -25876,7 +25909,10 @@ var RegularSequenceRefForwardingFunction = ({
25876
25909
  isMedia,
25877
25910
  resolvedDocumentationLink,
25878
25911
  refForOutline,
25879
- isInsideSeries
25912
+ isInsideSeries,
25913
+ registeredFrozenFrame,
25914
+ startMediaFrom,
25915
+ frozenMediaFrame
25880
25916
  ]);
25881
25917
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
25882
25918
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
@@ -25991,13 +26027,13 @@ var SequenceRefForwardingFunction = (props, ref) => {
25991
26027
  };
25992
26028
  var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
25993
26029
  var SequenceWithoutSchema = SequenceInner;
25994
- var Sequence = wrapInSchema({
26030
+ var Sequence = withInteractivitySchema({
25995
26031
  Component: SequenceInner,
25996
26032
  componentIdentity: "dev.remotion.remotion.Sequence",
25997
26033
  schema: sequenceSchema,
25998
26034
  supportsEffects: false
25999
26035
  });
26000
- var SequenceWithoutFrom = wrapInSchema({
26036
+ var SequenceWithoutFrom = withInteractivitySchema({
26001
26037
  Component: SequenceInner,
26002
26038
  componentIdentity: null,
26003
26039
  schema: sequenceSchemaWithoutFrom,
@@ -26536,9 +26572,7 @@ var resolveAnimatedImageSource = (src) => {
26536
26572
  return new URL(src, window.origin).href;
26537
26573
  };
26538
26574
  var animatedImageSchema = {
26539
- durationInFrames: durationInFramesField,
26540
- from: fromField,
26541
- freeze: freezeField,
26575
+ ...baseSchema,
26542
26576
  playbackRate: {
26543
26577
  type: "number",
26544
26578
  min: 0,
@@ -26549,8 +26583,7 @@ var animatedImageSchema = {
26549
26583
  hiddenFromList: false,
26550
26584
  keyframable: false
26551
26585
  },
26552
- ...sequenceVisualStyleSchema,
26553
- hidden: hiddenField
26586
+ ...transformSchema
26554
26587
  };
26555
26588
  var AnimatedImageContent = forwardRef4(({
26556
26589
  src,
@@ -26695,7 +26728,7 @@ var AnimatedImageInner = ({
26695
26728
  durationInFrames,
26696
26729
  requestInit,
26697
26730
  effects = [],
26698
- _experimentalControls: controls,
26731
+ controls,
26699
26732
  ref,
26700
26733
  ...sequenceProps
26701
26734
  }) => {
@@ -26724,10 +26757,10 @@ var AnimatedImageInner = ({
26724
26757
  durationInFrames: resolvedDuration,
26725
26758
  name: "<AnimatedImage>",
26726
26759
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/animatedimage",
26727
- _experimentalControls: controls,
26760
+ controls,
26728
26761
  _remotionInternalEffects: memoizedEffectDefinitions,
26729
26762
  ...sequenceProps,
26730
- _remotionInternalRefForOutline: actualRef,
26763
+ outlineRef: actualRef,
26731
26764
  children: /* @__PURE__ */ jsx14(AnimatedImageContent, {
26732
26765
  ...animatedImageProps,
26733
26766
  ref: actualRef,
@@ -26736,7 +26769,7 @@ var AnimatedImageInner = ({
26736
26769
  })
26737
26770
  });
26738
26771
  };
26739
- var AnimatedImage = wrapInSchema({
26772
+ var AnimatedImage = withInteractivitySchema({
26740
26773
  Component: AnimatedImageInner,
26741
26774
  componentIdentity: "dev.remotion.remotion.AnimatedImage",
26742
26775
  schema: animatedImageSchema,
@@ -26744,6 +26777,36 @@ var AnimatedImage = wrapInSchema({
26744
26777
  });
26745
26778
  AnimatedImage.displayName = "AnimatedImage";
26746
26779
  addSequenceStackTraces(AnimatedImage);
26780
+ var disabledEffectField = {
26781
+ type: "boolean",
26782
+ default: false,
26783
+ description: "Disabled"
26784
+ };
26785
+ var createEffect = (definition) => {
26786
+ const { calculateKey: userCalculateKey, validateParams } = definition;
26787
+ const widened = {
26788
+ ...definition,
26789
+ documentationLink: definition.documentationLink ?? null,
26790
+ calculateKey: (params) => {
26791
+ const disabled = params.disabled ?? false;
26792
+ return `${userCalculateKey(params)}-disabled-${disabled}`;
26793
+ },
26794
+ schema: {
26795
+ disabled: disabledEffectField,
26796
+ ...definition.schema
26797
+ }
26798
+ };
26799
+ const factory = (params = {}) => {
26800
+ validateParams(params);
26801
+ return {
26802
+ definition: widened,
26803
+ params,
26804
+ effectKey: widened.calculateKey(params),
26805
+ memoized: false
26806
+ };
26807
+ };
26808
+ return factory;
26809
+ };
26747
26810
  var validateArtifactFilename = (filename) => {
26748
26811
  if (typeof filename !== "string") {
26749
26812
  throw new TypeError(`The "filename" must be a string, but you passed a value of type ${typeof filename}`);
@@ -28371,7 +28434,9 @@ var useMediaInTimeline = ({
28371
28434
  controls: null,
28372
28435
  effects: [],
28373
28436
  refForOutline,
28374
- isInsideSeries: false
28437
+ isInsideSeries: false,
28438
+ frozenFrame: null,
28439
+ frozenMediaFrame: null
28375
28440
  });
28376
28441
  return () => {
28377
28442
  unregisterSequence(id);
@@ -29687,9 +29752,7 @@ var resolveSolidPixelDensity = (pixelDensity) => {
29687
29752
  return pixelDensity;
29688
29753
  };
29689
29754
  var solidSchema = {
29690
- durationInFrames: durationInFramesField,
29691
- from: fromField,
29692
- freeze: freezeField,
29755
+ ...baseSchema,
29693
29756
  color: {
29694
29757
  type: "color",
29695
29758
  default: "transparent",
@@ -29711,8 +29774,7 @@ var solidSchema = {
29711
29774
  description: "Height",
29712
29775
  hiddenFromList: false
29713
29776
  },
29714
- ...sequenceVisualStyleSchema,
29715
- hidden: hiddenField
29777
+ ...transformSchema
29716
29778
  };
29717
29779
  var SolidInner = ({
29718
29780
  color,
@@ -29819,7 +29881,7 @@ var SolidInner = ({
29819
29881
  };
29820
29882
  var SolidOuter = forwardRef8(({
29821
29883
  effects = [],
29822
- _experimentalControls: controls,
29884
+ controls,
29823
29885
  color,
29824
29886
  height,
29825
29887
  width,
@@ -29845,11 +29907,11 @@ var SolidOuter = forwardRef8(({
29845
29907
  freeze,
29846
29908
  hidden,
29847
29909
  showInTimeline,
29848
- _experimentalControls: controls,
29910
+ controls,
29849
29911
  _remotionInternalEffects: memoizedEffectDefinitions,
29850
29912
  durationInFrames,
29851
29913
  name: name ?? "<Solid>",
29852
- _remotionInternalRefForOutline: actualRef,
29914
+ outlineRef: actualRef,
29853
29915
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/solid",
29854
29916
  ...props2,
29855
29917
  children: /* @__PURE__ */ jsx24(SolidInner, {
@@ -29865,7 +29927,7 @@ var SolidOuter = forwardRef8(({
29865
29927
  })
29866
29928
  });
29867
29929
  });
29868
- var Solid = wrapInSchema({
29930
+ var Solid = withInteractivitySchema({
29869
29931
  Component: SolidOuter,
29870
29932
  componentIdentity: "dev.remotion.remotion.Solid",
29871
29933
  schema: solidSchema,
@@ -30142,7 +30204,7 @@ var HtmlInCanvasInner = forwardRef9(({
30142
30204
  onPaint,
30143
30205
  onInit,
30144
30206
  pixelDensity,
30145
- _experimentalControls: controls,
30207
+ controls,
30146
30208
  style,
30147
30209
  durationInFrames,
30148
30210
  name,
@@ -30164,9 +30226,9 @@ var HtmlInCanvasInner = forwardRef9(({
30164
30226
  durationInFrames: resolvedDuration,
30165
30227
  name: name ?? "<HtmlInCanvas>",
30166
30228
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/remotion/html-in-canvas",
30167
- _experimentalControls: controls,
30229
+ controls,
30168
30230
  _remotionInternalEffects: memoizedEffectDefinitions,
30169
- _remotionInternalRefForOutline: actualRef,
30231
+ outlineRef: actualRef,
30170
30232
  layout: "none",
30171
30233
  ...sequenceProps,
30172
30234
  children: /* @__PURE__ */ jsx25(HtmlInCanvasContent, {
@@ -30185,13 +30247,10 @@ var HtmlInCanvasInner = forwardRef9(({
30185
30247
  });
30186
30248
  HtmlInCanvasInner.displayName = "HtmlInCanvas";
30187
30249
  var htmlInCanvasSchema = {
30188
- durationInFrames: durationInFramesField,
30189
- from: fromField,
30190
- freeze: freezeField,
30191
- ...sequenceVisualStyleSchema,
30192
- hidden: hiddenField
30250
+ ...baseSchema,
30251
+ ...transformSchema
30193
30252
  };
30194
- var HtmlInCanvasWrapped = wrapInSchema({
30253
+ var HtmlInCanvasWrapped = withInteractivitySchema({
30195
30254
  Component: HtmlInCanvasInner,
30196
30255
  componentIdentity: "dev.remotion.remotion.HtmlInCanvas",
30197
30256
  schema: htmlInCanvasSchema,
@@ -30209,9 +30268,7 @@ function truncateSrcForLabel(src) {
30209
30268
  return src;
30210
30269
  }
30211
30270
  var canvasImageSchema = {
30212
- durationInFrames: durationInFramesField,
30213
- from: fromField,
30214
- freeze: freezeField,
30271
+ ...baseSchema,
30215
30272
  fit: {
30216
30273
  type: "enum",
30217
30274
  default: "fill",
@@ -30222,8 +30279,7 @@ var canvasImageSchema = {
30222
30279
  cover: {}
30223
30280
  }
30224
30281
  },
30225
- ...sequenceVisualStyleSchema,
30226
- hidden: hiddenField
30282
+ ...transformSchema
30227
30283
  };
30228
30284
  var makeAbortError = () => {
30229
30285
  if (typeof DOMException !== "undefined") {
@@ -30304,6 +30360,7 @@ var CanvasImageContent = forwardRef10(({
30304
30360
  const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
30305
30361
  const { delayPlayback } = useBufferState();
30306
30362
  const [outputCanvas, setOutputCanvas] = useState16(null);
30363
+ const [loadedImage, setLoadedImage] = useState16(null);
30307
30364
  const actualSrc = usePreload(src);
30308
30365
  const chainState = useEffectChainState();
30309
30366
  const memoizedEffects = useMemoizedEffects({
@@ -30329,9 +30386,6 @@ var CanvasImageContent = forwardRef10(({
30329
30386
  }
30330
30387
  }, [ref, refForOutline]);
30331
30388
  useEffect17(() => {
30332
- if (!outputCanvas || !sourceCanvas) {
30333
- return;
30334
- }
30335
30389
  const isPremounting = Boolean(sequenceContext?.premounting);
30336
30390
  const isPostmounting = Boolean(sequenceContext?.postmounting);
30337
30391
  const handle = delayRender2(`Rendering <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`, {
@@ -30346,6 +30400,7 @@ var CanvasImageContent = forwardRef10(({
30346
30400
  let continued = false;
30347
30401
  let errorCount = 0;
30348
30402
  let timeoutId = null;
30403
+ setLoadedImage(null);
30349
30404
  const continueRenderOnce = () => {
30350
30405
  if (continued) {
30351
30406
  return;
@@ -30359,30 +30414,9 @@ var CanvasImageContent = forwardRef10(({
30359
30414
  if (cancelled) {
30360
30415
  return;
30361
30416
  }
30362
- const canvasWidth = width ?? image.width;
30363
- const canvasHeight = height ?? image.height;
30364
- const sourceContext = sourceCanvas.getContext("2d", {
30365
- colorSpace: "srgb"
30366
- });
30367
- if (!sourceContext) {
30368
- throw new Error("Could not get 2D context for <CanvasImage> source canvas");
30369
- }
30370
- sourceCanvas.width = canvasWidth;
30371
- sourceCanvas.height = canvasHeight;
30372
- outputCanvas.width = canvasWidth;
30373
- outputCanvas.height = canvasHeight;
30374
- sourceContext.clearRect(0, 0, canvasWidth, canvasHeight);
30375
- sourceContext.drawImage(image.element, ...calculateImageFit(fit, { width: image.width, height: image.height }, { width: canvasWidth, height: canvasHeight }));
30376
- return runEffectChain({
30377
- state: chainState.get(canvasWidth, canvasHeight),
30378
- source: sourceCanvas,
30379
- effects: memoizedEffects,
30380
- output: outputCanvas,
30381
- width: canvasWidth,
30382
- height: canvasHeight
30383
- });
30384
- }).then((completed) => {
30385
- if (completed && !cancelled) {
30417
+ setLoadedImage(image);
30418
+ }).then(() => {
30419
+ if (!cancelled) {
30386
30420
  continueRenderOnce();
30387
30421
  }
30388
30422
  }).catch((err) => {
@@ -30419,21 +30453,87 @@ var CanvasImageContent = forwardRef10(({
30419
30453
  }, [
30420
30454
  actualSrc,
30421
30455
  cancelRender2,
30422
- chainState,
30423
30456
  continueRender2,
30424
30457
  delayPlayback,
30425
30458
  delayRender2,
30426
30459
  delayRenderRetries,
30427
30460
  delayRenderTimeoutInMilliseconds,
30461
+ maxRetries,
30462
+ onError,
30463
+ pauseWhenLoading,
30464
+ sequenceContext?.postmounting,
30465
+ sequenceContext?.premounting
30466
+ ]);
30467
+ useEffect17(() => {
30468
+ if (!loadedImage || !outputCanvas || !sourceCanvas) {
30469
+ return;
30470
+ }
30471
+ const handle = delayRender2(`Applying effects to <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`);
30472
+ let cancelled = false;
30473
+ let continued = false;
30474
+ const continueRenderOnce = () => {
30475
+ if (continued) {
30476
+ return;
30477
+ }
30478
+ continued = true;
30479
+ continueRender2(handle);
30480
+ };
30481
+ const canvasWidth = width ?? loadedImage.width;
30482
+ const canvasHeight = height ?? loadedImage.height;
30483
+ const sourceContext = sourceCanvas.getContext("2d", {
30484
+ colorSpace: "srgb"
30485
+ });
30486
+ if (!sourceContext) {
30487
+ cancelRender2(new Error("Could not get 2D context for <CanvasImage> source canvas"));
30488
+ continueRenderOnce();
30489
+ return () => {
30490
+ continueRenderOnce();
30491
+ };
30492
+ }
30493
+ sourceCanvas.width = canvasWidth;
30494
+ sourceCanvas.height = canvasHeight;
30495
+ outputCanvas.width = canvasWidth;
30496
+ outputCanvas.height = canvasHeight;
30497
+ sourceContext.clearRect(0, 0, canvasWidth, canvasHeight);
30498
+ sourceContext.drawImage(loadedImage.element, ...calculateImageFit(fit, { width: loadedImage.width, height: loadedImage.height }, { width: canvasWidth, height: canvasHeight }));
30499
+ runEffectChain({
30500
+ state: chainState.get(canvasWidth, canvasHeight),
30501
+ source: sourceCanvas,
30502
+ effects: memoizedEffects,
30503
+ output: outputCanvas,
30504
+ width: canvasWidth,
30505
+ height: canvasHeight
30506
+ }).then((completed) => {
30507
+ if (completed && !cancelled) {
30508
+ continueRenderOnce();
30509
+ }
30510
+ }).catch((err) => {
30511
+ if (cancelled) {
30512
+ return;
30513
+ }
30514
+ if (onError) {
30515
+ onError(err);
30516
+ continueRenderOnce();
30517
+ } else {
30518
+ cancelRender2(err);
30519
+ }
30520
+ });
30521
+ return () => {
30522
+ cancelled = true;
30523
+ continueRenderOnce();
30524
+ };
30525
+ }, [
30526
+ actualSrc,
30527
+ cancelRender2,
30528
+ chainState,
30529
+ continueRender2,
30530
+ delayRender2,
30428
30531
  fit,
30429
30532
  height,
30430
- maxRetries,
30533
+ loadedImage,
30431
30534
  memoizedEffects,
30432
30535
  onError,
30433
30536
  outputCanvas,
30434
- pauseWhenLoading,
30435
- sequenceContext?.postmounting,
30436
- sequenceContext?.premounting,
30437
30537
  sourceCanvas,
30438
30538
  width
30439
30539
  ]);
@@ -30469,9 +30569,9 @@ var CanvasImageInner = forwardRef10(({
30469
30569
  name,
30470
30570
  showInTimeline,
30471
30571
  stack,
30472
- _experimentalControls: controls,
30572
+ controls,
30473
30573
  _remotionInternalDocumentationLink,
30474
- _remotionInternalRefForOutline,
30574
+ outlineRef,
30475
30575
  ...canvasProps
30476
30576
  }, ref) => {
30477
30577
  if (!src) {
@@ -30491,11 +30591,11 @@ var CanvasImageInner = forwardRef10(({
30491
30591
  showInTimeline: showInTimeline ?? true,
30492
30592
  name: name ?? "<CanvasImage>",
30493
30593
  _remotionInternalDocumentationLink: _remotionInternalDocumentationLink ?? "https://www.remotion.dev/docs/canvasimage",
30494
- _experimentalControls: controls,
30594
+ controls,
30495
30595
  _remotionInternalEffects: memoizedEffectDefinitions,
30496
30596
  _remotionInternalIsMedia: { type: "image", src },
30497
30597
  _remotionInternalStack: stack,
30498
- _remotionInternalRefForOutline: _remotionInternalRefForOutline ?? actualRef,
30598
+ outlineRef: outlineRef ?? actualRef,
30499
30599
  children: /* @__PURE__ */ jsx26(CanvasImageContent, {
30500
30600
  ref: actualRef,
30501
30601
  src,
@@ -30512,12 +30612,12 @@ var CanvasImageInner = forwardRef10(({
30512
30612
  maxRetries,
30513
30613
  delayRenderRetries,
30514
30614
  delayRenderTimeoutInMilliseconds,
30515
- refForOutline: _remotionInternalRefForOutline ?? null,
30615
+ refForOutline: outlineRef ?? null,
30516
30616
  ...canvasProps
30517
30617
  })
30518
30618
  });
30519
30619
  });
30520
- var CanvasImage = wrapInSchema({
30620
+ var CanvasImage = withInteractivitySchema({
30521
30621
  Component: CanvasImageInner,
30522
30622
  componentIdentity: "dev.remotion.remotion.CanvasImage",
30523
30623
  schema: canvasImageSchema,
@@ -30722,8 +30822,8 @@ var NativeImgInner = ({
30722
30822
  from,
30723
30823
  durationInFrames,
30724
30824
  freeze,
30725
- _experimentalControls: controls,
30726
- _remotionInternalRefForOutline: refForOutline,
30825
+ controls,
30826
+ outlineRef: refForOutline,
30727
30827
  ...props2
30728
30828
  }) => {
30729
30829
  if (!src) {
@@ -30738,10 +30838,10 @@ var NativeImgInner = ({
30738
30838
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/img",
30739
30839
  _remotionInternalIsMedia: { type: "image", src },
30740
30840
  name: name ?? "<Img>",
30741
- _experimentalControls: controls,
30841
+ controls,
30742
30842
  showInTimeline: showInTimeline ?? true,
30743
30843
  hidden,
30744
- _remotionInternalRefForOutline: refForOutline,
30844
+ outlineRef: refForOutline,
30745
30845
  children: /* @__PURE__ */ jsx28(ImgContent, {
30746
30846
  src,
30747
30847
  refForOutline,
@@ -30751,11 +30851,8 @@ var NativeImgInner = ({
30751
30851
  };
30752
30852
  var CanvasImageWithPrivateProps = CanvasImage;
30753
30853
  var imgSchema = {
30754
- durationInFrames: durationInFramesField,
30755
- from: fromField,
30756
- freeze: freezeField,
30757
- ...sequenceVisualStyleSchema,
30758
- hidden: hiddenField
30854
+ ...baseSchema,
30855
+ ...transformSchema
30759
30856
  };
30760
30857
  var imgCanvasFallbackIncompatibleProps = new Set([
30761
30858
  "alt",
@@ -30810,7 +30907,7 @@ var ImgInner = ({
30810
30907
  from,
30811
30908
  durationInFrames,
30812
30909
  freeze,
30813
- _experimentalControls: controls,
30910
+ controls,
30814
30911
  width,
30815
30912
  height,
30816
30913
  className,
@@ -30835,7 +30932,7 @@ var ImgInner = ({
30835
30932
  from,
30836
30933
  durationInFrames,
30837
30934
  freeze,
30838
- _experimentalControls: controls,
30935
+ controls,
30839
30936
  width,
30840
30937
  height,
30841
30938
  className,
@@ -30845,7 +30942,7 @@ var ImgInner = ({
30845
30942
  maxRetries,
30846
30943
  delayRenderRetries,
30847
30944
  delayRenderTimeoutInMilliseconds,
30848
- _remotionInternalRefForOutline: refForOutline
30945
+ outlineRef: refForOutline
30849
30946
  });
30850
30947
  }
30851
30948
  if (!src) {
@@ -30882,12 +30979,12 @@ var ImgInner = ({
30882
30979
  showInTimeline,
30883
30980
  stack,
30884
30981
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/img",
30885
- _experimentalControls: controls,
30886
- _remotionInternalRefForOutline: refForOutline,
30982
+ controls,
30983
+ outlineRef: refForOutline,
30887
30984
  ...canvasProps
30888
30985
  });
30889
30986
  };
30890
- var Img = wrapInSchema({
30987
+ var Img = withInteractivitySchema({
30891
30988
  Component: ImgInner,
30892
30989
  componentIdentity: "dev.remotion.remotion.Img",
30893
30990
  schema: imgSchema,
@@ -30895,11 +30992,8 @@ var Img = wrapInSchema({
30895
30992
  });
30896
30993
  addSequenceStackTraces(Img);
30897
30994
  var interactiveElementSchema = {
30898
- durationInFrames: durationInFramesField,
30899
- from: fromField,
30900
- freeze: freezeField,
30901
- ...sequenceVisualStyleSchema,
30902
- hidden: hiddenField
30995
+ ...baseSchema,
30996
+ ...transformSchema
30903
30997
  };
30904
30998
  var setRef = (ref, value) => {
30905
30999
  if (typeof ref === "function") {
@@ -30918,7 +31012,7 @@ var makeInteractiveElement = (tag, displayName) => {
30918
31012
  name,
30919
31013
  showInTimeline,
30920
31014
  stack,
30921
- _experimentalControls,
31015
+ controls,
30922
31016
  ...props2
30923
31017
  } = propsWithControls;
30924
31018
  const refForOutline = useRef25(null);
@@ -30934,10 +31028,10 @@ var makeInteractiveElement = (tag, displayName) => {
30934
31028
  hidden,
30935
31029
  name: name ?? displayName,
30936
31030
  showInTimeline: showInTimeline ?? true,
30937
- _experimentalControls,
31031
+ controls,
30938
31032
  _remotionInternalStack: stack,
30939
31033
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/interactive",
30940
- _remotionInternalRefForOutline: refForOutline,
31034
+ outlineRef: refForOutline,
30941
31035
  children: React29.createElement(tag, {
30942
31036
  ...props2,
30943
31037
  ref: callbackRef
@@ -30945,7 +31039,7 @@ var makeInteractiveElement = (tag, displayName) => {
30945
31039
  });
30946
31040
  });
30947
31041
  Inner.displayName = displayName;
30948
- const Wrapped = wrapInSchema({
31042
+ const Wrapped = withInteractivitySchema({
30949
31043
  Component: Inner,
30950
31044
  componentIdentity: `dev.remotion.remotion.${displayName.slice(1, -1)}`,
30951
31045
  schema: interactiveElementSchema,
@@ -30956,6 +31050,11 @@ var makeInteractiveElement = (tag, displayName) => {
30956
31050
  return Wrapped;
30957
31051
  };
30958
31052
  var Interactive = {
31053
+ baseSchema,
31054
+ transformSchema,
31055
+ premountSchema,
31056
+ sequenceSchema,
31057
+ withSchema: withInteractivitySchema,
30959
31058
  A: makeInteractiveElement("a", "<Interactive.A>"),
30960
31059
  Article: makeInteractiveElement("article", "<Interactive.Article>"),
30961
31060
  Aside: makeInteractiveElement("aside", "<Interactive.Aside>"),
@@ -31137,36 +31236,6 @@ var makeDefaultPreviewCSS = (scope, backgroundColor) => {
31137
31236
  }
31138
31237
  `;
31139
31238
  };
31140
- var disabledEffectField = {
31141
- type: "boolean",
31142
- default: false,
31143
- description: "Disabled"
31144
- };
31145
- var createEffect = (definition) => {
31146
- const { calculateKey: userCalculateKey, validateParams } = definition;
31147
- const widened = {
31148
- ...definition,
31149
- documentationLink: definition.documentationLink ?? null,
31150
- calculateKey: (params) => {
31151
- const disabled = params.disabled ?? false;
31152
- return `${userCalculateKey(params)}-disabled-${disabled}`;
31153
- },
31154
- schema: {
31155
- disabled: disabledEffectField,
31156
- ...definition.schema
31157
- }
31158
- };
31159
- const factory = (params = {}) => {
31160
- validateParams(params);
31161
- return {
31162
- definition: widened,
31163
- params,
31164
- effectKey: widened.calculateKey(params),
31165
- memoized: false
31166
- };
31167
- };
31168
- return factory;
31169
- };
31170
31239
  var REMOTION_STUDIO_CONTAINER_ELEMENT = "__remotion-studio-container";
31171
31240
  var getPreviewDomElement = () => {
31172
31241
  return document.getElementById(REMOTION_STUDIO_CONTAINER_ELEMENT);
@@ -32253,12 +32322,14 @@ var Internals = {
32253
32322
  SequenceManager,
32254
32323
  SequenceManagerRefContext,
32255
32324
  SequenceStackTracesUpdateContext,
32256
- wrapInSchema,
32325
+ baseSchema,
32257
32326
  sequenceSchema,
32258
32327
  SequenceWithoutSchema,
32259
32328
  sequenceStyleSchema,
32260
32329
  sequenceVisualStyleSchema,
32261
32330
  sequencePremountSchema,
32331
+ transformSchema,
32332
+ premountSchema,
32262
32333
  flattenActiveSchema,
32263
32334
  getFlatSchemaWithAllKeys,
32264
32335
  RemotionRootContexts,
@@ -32458,7 +32529,7 @@ var SeriesInner = (props2) => {
32458
32529
  })
32459
32530
  });
32460
32531
  };
32461
- var Series = Object.assign(wrapInSchema({
32532
+ var Series = Object.assign(withInteractivitySchema({
32462
32533
  Component: SeriesInner,
32463
32534
  componentIdentity: "dev.remotion.remotion.Series",
32464
32535
  schema: sequenceSchemaDefaultLayoutNone,
@@ -33048,6 +33119,7 @@ import { jsx as jsx82 } from "react/jsx-runtime";
33048
33119
  import { jsx as jsx92 } from "react/jsx-runtime";
33049
33120
  import { jsx as jsx102 } from "react/jsx-runtime";
33050
33121
  import { jsx as jsx112 } from "react/jsx-runtime";
33122
+ import { jsx as jsx122 } from "react/jsx-runtime";
33051
33123
  var unitDir = (from, to) => {
33052
33124
  const dx = to[0] - from[0];
33053
33125
  const dy = to[1] - from[1];
@@ -33191,6 +33263,7 @@ var doesReactSupportTransformOriginProperty = (version2) => {
33191
33263
  const [major] = version2.split(".").map(Number);
33192
33264
  return major > 18;
33193
33265
  };
33266
+ var HtmlInCanvasWithPrivateProps = HtmlInCanvas;
33194
33267
  var RenderSvg = ({
33195
33268
  defaultName,
33196
33269
  documentationLink,
@@ -33210,7 +33283,7 @@ var RenderSvg = ({
33210
33283
  hidden,
33211
33284
  name,
33212
33285
  showInTimeline,
33213
- _experimentalControls: controls,
33286
+ controls,
33214
33287
  stack,
33215
33288
  ...props
33216
33289
  }) => {
@@ -33297,7 +33370,7 @@ var RenderSvg = ({
33297
33370
  }) : null
33298
33371
  ]
33299
33372
  });
33300
- const content = effects.length === 0 ? svg : /* @__PURE__ */ jsx40(HtmlInCanvas, {
33373
+ const content = effects.length === 0 ? svg : /* @__PURE__ */ jsx40(HtmlInCanvasWithPrivateProps, {
33301
33374
  ref: setCanvasRef,
33302
33375
  width: Math.ceil(width),
33303
33376
  height: Math.ceil(height),
@@ -33305,7 +33378,7 @@ var RenderSvg = ({
33305
33378
  pixelDensity,
33306
33379
  showInTimeline: false,
33307
33380
  style: actualStyle,
33308
- _experimentalControls: controls,
33381
+ controls,
33309
33382
  children: svg
33310
33383
  });
33311
33384
  const stackProps = stack === undefined ? null : { stack };
@@ -33318,11 +33391,11 @@ var RenderSvg = ({
33318
33391
  freeze,
33319
33392
  hidden,
33320
33393
  showInTimeline,
33321
- _experimentalControls: controls,
33394
+ controls,
33322
33395
  _remotionInternalEffects: memoizedEffectDefinitions,
33323
33396
  durationInFrames,
33324
33397
  name: name ?? defaultName,
33325
- _remotionInternalRefForOutline: outlineRef,
33398
+ outlineRef,
33326
33399
  _remotionInternalDocumentationLink: name === undefined ? documentationLink : undefined,
33327
33400
  ...stackProps,
33328
33401
  children: content
@@ -33380,16 +33453,13 @@ var enumField = ({
33380
33453
  };
33381
33454
  var makeShapeSchema = (shapeFields) => {
33382
33455
  return {
33383
- from: Internals.sequenceSchema.from,
33384
- freeze: Internals.sequenceSchema.freeze,
33385
- durationInFrames: Internals.sequenceSchema.durationInFrames,
33456
+ ...Internals.baseSchema,
33386
33457
  ...shapeFields,
33387
33458
  fill: colorField({
33388
33459
  defaultValue: "#0b84ff",
33389
33460
  description: "Fill"
33390
33461
  }),
33391
- ...Internals.sequenceVisualStyleSchema,
33392
- hidden: Internals.sequenceSchema.hidden
33462
+ ...Internals.transformSchema
33393
33463
  };
33394
33464
  };
33395
33465
  var arrowSchema = makeShapeSchema({
@@ -33447,7 +33517,7 @@ var ArrowInner = ({
33447
33517
  ...props
33448
33518
  });
33449
33519
  };
33450
- var Arrow = Internals.wrapInSchema({
33520
+ var Arrow = Interactive.withSchema({
33451
33521
  Component: ArrowInner,
33452
33522
  componentIdentity: "dev.remotion.shapes.Arrow",
33453
33523
  schema: arrowSchema,
@@ -33871,7 +33941,7 @@ var CalloutInner = ({
33871
33941
  ...props
33872
33942
  });
33873
33943
  };
33874
- var Callout = Internals.wrapInSchema({
33944
+ var Callout = Interactive.withSchema({
33875
33945
  Component: CalloutInner,
33876
33946
  componentIdentity: "dev.remotion.shapes.Callout",
33877
33947
  schema: calloutSchema,
@@ -33933,7 +34003,7 @@ var CircleInner = ({ radius, ...props }) => {
33933
34003
  ...props
33934
34004
  });
33935
34005
  };
33936
- var Circle = Internals.wrapInSchema({
34006
+ var Circle = Interactive.withSchema({
33937
34007
  Component: CircleInner,
33938
34008
  componentIdentity: "dev.remotion.shapes.Circle",
33939
34009
  schema: circleSchema,
@@ -33990,7 +34060,7 @@ var EllipseInner = ({ rx, ry, ...props }) => {
33990
34060
  ...props
33991
34061
  });
33992
34062
  };
33993
- var Ellipse = Internals.wrapInSchema({
34063
+ var Ellipse = Interactive.withSchema({
33994
34064
  Component: EllipseInner,
33995
34065
  componentIdentity: "dev.remotion.shapes.Ellipse",
33996
34066
  schema: ellipseSchema,
@@ -34128,7 +34198,7 @@ var HeartInner = ({
34128
34198
  ...props
34129
34199
  });
34130
34200
  };
34131
- var Heart = Internals.wrapInSchema({
34201
+ var Heart = Interactive.withSchema({
34132
34202
  Component: HeartInner,
34133
34203
  componentIdentity: "dev.remotion.shapes.Heart",
34134
34204
  schema: heartSchema,
@@ -34282,7 +34352,7 @@ var PieInner = ({
34282
34352
  ...props
34283
34353
  });
34284
34354
  };
34285
- var Pie = Internals.wrapInSchema({
34355
+ var Pie = Interactive.withSchema({
34286
34356
  Component: PieInner,
34287
34357
  componentIdentity: "dev.remotion.shapes.Pie",
34288
34358
  schema: pieSchema,
@@ -34381,7 +34451,7 @@ var PolygonInner = ({
34381
34451
  ...props
34382
34452
  });
34383
34453
  };
34384
- var Polygon = Internals.wrapInSchema({
34454
+ var Polygon = Interactive.withSchema({
34385
34455
  Component: PolygonInner,
34386
34456
  componentIdentity: "dev.remotion.shapes.Polygon",
34387
34457
  schema: polygonSchema,
@@ -34447,13 +34517,224 @@ var RectInner = ({
34447
34517
  ...props
34448
34518
  });
34449
34519
  };
34450
- var Rect = Internals.wrapInSchema({
34520
+ var Rect = Interactive.withSchema({
34451
34521
  Component: RectInner,
34452
34522
  componentIdentity: "dev.remotion.shapes.Rect",
34453
34523
  schema: rectSchema,
34454
34524
  supportsEffects: true
34455
34525
  });
34456
34526
  Internals.addSequenceStackTraces(Rect);
34527
+ var KAPPA = 0.5522847498307936;
34528
+ var CAP_HANDLE = 4 / 3;
34529
+ var curve = ({
34530
+ to,
34531
+ cp1,
34532
+ cp2
34533
+ }) => {
34534
+ return {
34535
+ type: "C",
34536
+ cp1x: cp1[0],
34537
+ cp1y: cp1[1],
34538
+ cp2x: cp2[0],
34539
+ cp2y: cp2[1],
34540
+ x: to[0],
34541
+ y: to[1]
34542
+ };
34543
+ };
34544
+ var cap = ({
34545
+ from,
34546
+ to,
34547
+ radius,
34548
+ direction
34549
+ }) => {
34550
+ if (direction === "top") {
34551
+ return curve({
34552
+ to,
34553
+ cp1: [from[0], from[1] - radius * CAP_HANDLE],
34554
+ cp2: [to[0], to[1] - radius * CAP_HANDLE]
34555
+ });
34556
+ }
34557
+ if (direction === "right") {
34558
+ return curve({
34559
+ to,
34560
+ cp1: [from[0] + radius * CAP_HANDLE, from[1]],
34561
+ cp2: [to[0] + radius * CAP_HANDLE, to[1]]
34562
+ });
34563
+ }
34564
+ if (direction === "bottom") {
34565
+ return curve({
34566
+ to,
34567
+ cp1: [from[0], from[1] + radius * CAP_HANDLE],
34568
+ cp2: [to[0], to[1] + radius * CAP_HANDLE]
34569
+ });
34570
+ }
34571
+ return curve({
34572
+ to,
34573
+ cp1: [from[0] - radius * CAP_HANDLE, from[1]],
34574
+ cp2: [to[0] - radius * CAP_HANDLE, to[1]]
34575
+ });
34576
+ };
34577
+ var edge = ({
34578
+ from,
34579
+ to,
34580
+ edgeRoundness,
34581
+ direction
34582
+ }) => {
34583
+ const dx = to[0] - from[0];
34584
+ const dy = to[1] - from[1];
34585
+ const handleX = Math.abs(dx) * KAPPA * edgeRoundness;
34586
+ const handleY = Math.abs(dy) * KAPPA * edgeRoundness;
34587
+ if (direction === "top-right") {
34588
+ return curve({
34589
+ to,
34590
+ cp1: [from[0], from[1] + handleY],
34591
+ cp2: [to[0] - handleX, to[1]]
34592
+ });
34593
+ }
34594
+ if (direction === "right-bottom") {
34595
+ return curve({
34596
+ to,
34597
+ cp1: [from[0] - handleX, from[1]],
34598
+ cp2: [to[0], to[1] - handleY]
34599
+ });
34600
+ }
34601
+ if (direction === "bottom-left") {
34602
+ return curve({
34603
+ to,
34604
+ cp1: [from[0], from[1] - handleY],
34605
+ cp2: [to[0] + handleX, to[1]]
34606
+ });
34607
+ }
34608
+ return curve({
34609
+ to,
34610
+ cp1: [from[0] + handleX, from[1]],
34611
+ cp2: [to[0], to[1] + handleY]
34612
+ });
34613
+ };
34614
+ var clampCornerRadius = ({
34615
+ cornerRadius,
34616
+ width,
34617
+ height
34618
+ }) => {
34619
+ return Math.min(Math.max(cornerRadius, 0), width / 2, height / 2);
34620
+ };
34621
+ var makeSpark = ({
34622
+ width,
34623
+ height,
34624
+ edgeRoundness = 1,
34625
+ cornerRadius = 0
34626
+ }) => {
34627
+ const centerX = width / 2;
34628
+ const centerY = height / 2;
34629
+ const radius = clampCornerRadius({ cornerRadius, width, height });
34630
+ const top = [centerX, 0];
34631
+ const right = [width, centerY];
34632
+ const bottom = [centerX, height];
34633
+ const left = [0, centerY];
34634
+ const topRight = radius === 0 ? top : [centerX + radius, radius];
34635
+ const rightTop = radius === 0 ? right : [width - radius, centerY - radius];
34636
+ const rightBottom = radius === 0 ? right : [width - radius, centerY + radius];
34637
+ const bottomRight = radius === 0 ? bottom : [centerX + radius, height - radius];
34638
+ const bottomLeft = radius === 0 ? bottom : [centerX - radius, height - radius];
34639
+ const leftBottom = radius === 0 ? left : [radius, centerY + radius];
34640
+ const leftTop = radius === 0 ? left : [radius, centerY - radius];
34641
+ const topLeft = radius === 0 ? top : [centerX - radius, radius];
34642
+ const instructions = [
34643
+ {
34644
+ type: "M",
34645
+ x: topRight[0],
34646
+ y: topRight[1]
34647
+ },
34648
+ edge({
34649
+ from: topRight,
34650
+ to: rightTop,
34651
+ edgeRoundness,
34652
+ direction: "top-right"
34653
+ })
34654
+ ];
34655
+ if (radius > 0) {
34656
+ instructions.push(cap({ from: rightTop, to: rightBottom, radius, direction: "right" }));
34657
+ }
34658
+ instructions.push(edge({
34659
+ from: rightBottom,
34660
+ to: bottomRight,
34661
+ edgeRoundness,
34662
+ direction: "right-bottom"
34663
+ }));
34664
+ if (radius > 0) {
34665
+ instructions.push(cap({ from: bottomRight, to: bottomLeft, radius, direction: "bottom" }));
34666
+ }
34667
+ instructions.push(edge({
34668
+ from: bottomLeft,
34669
+ to: leftBottom,
34670
+ edgeRoundness,
34671
+ direction: "bottom-left"
34672
+ }));
34673
+ if (radius > 0) {
34674
+ instructions.push(cap({ from: leftBottom, to: leftTop, radius, direction: "left" }));
34675
+ }
34676
+ instructions.push(edge({
34677
+ from: leftTop,
34678
+ to: topLeft,
34679
+ edgeRoundness,
34680
+ direction: "left-top"
34681
+ }));
34682
+ if (radius > 0) {
34683
+ instructions.push(cap({ from: topLeft, to: topRight, radius, direction: "top" }));
34684
+ }
34685
+ instructions.push({ type: "Z" });
34686
+ return {
34687
+ path: serializeInstructions(instructions),
34688
+ width,
34689
+ height,
34690
+ transformOrigin: `${centerX} ${centerY}`,
34691
+ instructions
34692
+ };
34693
+ };
34694
+ var sparkSchema = makeShapeSchema({
34695
+ width: numberField({
34696
+ defaultValue: 100,
34697
+ description: "Width",
34698
+ min: 0
34699
+ }),
34700
+ height: numberField({
34701
+ defaultValue: 140,
34702
+ description: "Height",
34703
+ min: 0
34704
+ }),
34705
+ edgeRoundness: numberField({
34706
+ defaultValue: 1,
34707
+ description: "Edge Roundness",
34708
+ min: 0,
34709
+ step: 0.01
34710
+ }),
34711
+ cornerRadius: numberField({
34712
+ defaultValue: 0,
34713
+ description: "Corner Radius",
34714
+ min: 0
34715
+ })
34716
+ });
34717
+ var SparkInner = ({
34718
+ width,
34719
+ height,
34720
+ edgeRoundness,
34721
+ cornerRadius,
34722
+ ...props
34723
+ }) => {
34724
+ return /* @__PURE__ */ jsx102(RenderSvg, {
34725
+ defaultName: "<Spark>",
34726
+ documentationLink: "https://www.remotion.dev/docs/shapes/spark",
34727
+ ...makeSpark({ width, height, edgeRoundness, cornerRadius }),
34728
+ ...props
34729
+ });
34730
+ };
34731
+ var Spark = Interactive.withSchema({
34732
+ Component: SparkInner,
34733
+ componentIdentity: "dev.remotion.shapes.Spark",
34734
+ schema: sparkSchema,
34735
+ supportsEffects: true
34736
+ });
34737
+ Internals.addSequenceStackTraces(Spark);
34457
34738
  var star = ({
34458
34739
  centerX,
34459
34740
  centerY,
@@ -34544,7 +34825,7 @@ var StarInner = ({
34544
34825
  edgeRoundness,
34545
34826
  ...props
34546
34827
  }) => {
34547
- return /* @__PURE__ */ jsx102(RenderSvg, {
34828
+ return /* @__PURE__ */ jsx112(RenderSvg, {
34548
34829
  defaultName: "<Star>",
34549
34830
  documentationLink: "https://www.remotion.dev/docs/shapes/star",
34550
34831
  ...makeStar({
@@ -34557,7 +34838,7 @@ var StarInner = ({
34557
34838
  ...props
34558
34839
  });
34559
34840
  };
34560
- var Star = Internals.wrapInSchema({
34841
+ var Star = Interactive.withSchema({
34561
34842
  Component: StarInner,
34562
34843
  componentIdentity: "dev.remotion.shapes.Star",
34563
34844
  schema: starSchema,
@@ -34656,14 +34937,14 @@ var TriangleInner = ({
34656
34937
  cornerRadius,
34657
34938
  ...props
34658
34939
  }) => {
34659
- return /* @__PURE__ */ jsx112(RenderSvg, {
34940
+ return /* @__PURE__ */ jsx122(RenderSvg, {
34660
34941
  defaultName: "<Triangle>",
34661
34942
  documentationLink: "https://www.remotion.dev/docs/shapes/triangle",
34662
34943
  ...makeTriangle({ length: length2, direction, edgeRoundness, cornerRadius }),
34663
34944
  ...props
34664
34945
  });
34665
34946
  };
34666
- var Triangle = Internals.wrapInSchema({
34947
+ var Triangle = Interactive.withSchema({
34667
34948
  Component: TriangleInner,
34668
34949
  componentIdentity: "dev.remotion.shapes.Triangle",
34669
34950
  schema: triangleSchema,
@@ -35129,18 +35410,18 @@ function arcToCircle2({
35129
35410
  result.push(approximate_unit_arc2(theta1, delta_theta));
35130
35411
  theta1 += delta_theta;
35131
35412
  }
35132
- return result.map((curve) => {
35133
- for (let i = 0;i < curve.length; i += 2) {
35134
- let x = curve[i + 0];
35135
- let y = curve[i + 1];
35413
+ return result.map((curve2) => {
35414
+ for (let i = 0;i < curve2.length; i += 2) {
35415
+ let x = curve2[i + 0];
35416
+ let y = curve2[i + 1];
35136
35417
  x *= rx;
35137
35418
  y *= ry;
35138
35419
  const xp = cos_phi * x - sin_phi * y;
35139
35420
  const yp = sin_phi * x + cos_phi * y;
35140
- curve[i + 0] = xp + cc[0];
35141
- curve[i + 1] = yp + cc[1];
35421
+ curve2[i + 0] = xp + cc[0];
35422
+ curve2[i + 1] = yp + cc[1];
35142
35423
  }
35143
- return curve;
35424
+ return curve2;
35144
35425
  });
35145
35426
  }
35146
35427
  var removeATSHVQInstructions2 = (segments) => {
@@ -35747,7 +36028,7 @@ import { jsx as jsx93 } from "react/jsx-runtime";
35747
36028
  import React72 from "react";
35748
36029
  import { jsx as jsx103 } from "react/jsx-runtime";
35749
36030
  import { jsx as jsx113 } from "react/jsx-runtime";
35750
- import { jsx as jsx122 } from "react/jsx-runtime";
36031
+ import { jsx as jsx123 } from "react/jsx-runtime";
35751
36032
  import * as React36 from "react";
35752
36033
  import * as ReactDOM4 from "react-dom";
35753
36034
  import React112 from "react";
@@ -36561,11 +36842,11 @@ var Link = ({
36561
36842
  });
36562
36843
  };
36563
36844
  var PlanePaperIcon = (props) => {
36564
- return /* @__PURE__ */ jsx122("svg", {
36845
+ return /* @__PURE__ */ jsx123("svg", {
36565
36846
  xmlns: "http://www.w3.org/2000/svg",
36566
36847
  ...props,
36567
36848
  viewBox: "0 0 576 512",
36568
- children: /* @__PURE__ */ jsx122("path", {
36849
+ children: /* @__PURE__ */ jsx123("path", {
36569
36850
  fill: "currentcolor",
36570
36851
  d: "M169.9 280L94.9 448.6 461.2 280 169.9 280zm291.3-48L94.9 63.4 169.9 232 461.2 232zM34.8 465.6L128 256 34.8 46.4C33 42.2 32 37.6 32 33 32 14.8 46.7 0 64.8 0 69.5 0 74.2 1 78.5 3L554.2 222c13.3 6.1 21.8 19.4 21.8 34s-8.5 27.9-21.8 34L78.5 509c-4.3 2-9 3-13.7 3-18.1 0-32.8-14.8-32.8-33 0-4.6 1-9.2 2.8-13.4z"
36571
36852
  })