@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.
package/dist/experts.js CHANGED
@@ -2335,7 +2335,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2335
2335
  var addSequenceStackTraces = (component) => {
2336
2336
  componentsToAddStacksTo.push(component);
2337
2337
  };
2338
- var VERSION = "4.0.477";
2338
+ var VERSION = "4.0.479";
2339
2339
  var checkMultipleRemotionVersions = () => {
2340
2340
  if (typeof globalThis === "undefined") {
2341
2341
  return;
@@ -2698,10 +2698,7 @@ var Freeze = ({
2698
2698
  })
2699
2699
  });
2700
2700
  };
2701
- var PremountContext = createContext14({
2702
- premountFramesRemaining: 0
2703
- });
2704
- var sequenceVisualStyleSchema = {
2701
+ var transformSchema = {
2705
2702
  "style.transformOrigin": {
2706
2703
  type: "transform-origin",
2707
2704
  step: 1,
@@ -2737,7 +2734,8 @@ var sequenceVisualStyleSchema = {
2737
2734
  hiddenFromList: false
2738
2735
  }
2739
2736
  };
2740
- var sequencePremountSchema = {
2737
+ var sequenceVisualStyleSchema = transformSchema;
2738
+ var premountSchema = {
2741
2739
  premountFor: {
2742
2740
  type: "number",
2743
2741
  default: 0,
@@ -2760,9 +2758,10 @@ var sequencePremountSchema = {
2760
2758
  type: "hidden"
2761
2759
  }
2762
2760
  };
2761
+ var sequencePremountSchema = premountSchema;
2763
2762
  var sequenceStyleSchema = {
2764
- ...sequenceVisualStyleSchema,
2765
- ...sequencePremountSchema
2763
+ ...transformSchema,
2764
+ ...premountSchema
2766
2765
  };
2767
2766
  var hiddenField = {
2768
2767
  type: "boolean",
@@ -2800,12 +2799,16 @@ var freezeField = {
2800
2799
  step: 1,
2801
2800
  hiddenFromList: true
2802
2801
  };
2803
- var sequenceSchema = extendSchemaWithSequenceName({
2804
- hidden: hiddenField,
2805
- showInTimeline: showInTimelineField,
2802
+ var baseSchema = {
2803
+ durationInFrames: durationInFramesField,
2806
2804
  from: fromField,
2807
2805
  freeze: freezeField,
2808
- durationInFrames: durationInFramesField,
2806
+ hidden: hiddenField,
2807
+ name: sequenceNameField,
2808
+ showInTimeline: showInTimelineField
2809
+ };
2810
+ var sequenceSchema = {
2811
+ ...baseSchema,
2809
2812
  layout: {
2810
2813
  type: "enum",
2811
2814
  default: "absolute-fill",
@@ -2815,14 +2818,18 @@ var sequenceSchema = extendSchemaWithSequenceName({
2815
2818
  none: {}
2816
2819
  }
2817
2820
  }
2818
- });
2819
- var sequenceSchemaWithoutFrom = extendSchemaWithSequenceName({
2820
- hidden: hiddenField,
2821
- showInTimeline: showInTimelineField,
2822
- freeze: freezeField,
2821
+ };
2822
+ var baseSchemaWithoutFrom = {
2823
2823
  durationInFrames: durationInFramesField,
2824
+ freeze: freezeField,
2825
+ hidden: hiddenField,
2826
+ name: sequenceNameField,
2827
+ showInTimeline: showInTimelineField
2828
+ };
2829
+ var sequenceSchemaWithoutFrom = {
2830
+ ...baseSchemaWithoutFrom,
2824
2831
  layout: sequenceSchema.layout
2825
- });
2832
+ };
2826
2833
  var sequenceSchemaDefaultLayoutNone = {
2827
2834
  ...sequenceSchema,
2828
2835
  layout: {
@@ -2830,6 +2837,9 @@ var sequenceSchemaDefaultLayoutNone = {
2830
2837
  default: "none"
2831
2838
  }
2832
2839
  };
2840
+ var PremountContext = createContext14({
2841
+ premountFramesRemaining: 0
2842
+ });
2833
2843
  var SequenceManager = React11.createContext({
2834
2844
  registerSequence: () => {
2835
2845
  throw new Error("SequenceManagerContext not initialized");
@@ -4514,10 +4524,21 @@ var interpolateColors = (input, inputRange, outputRange, options) => {
4514
4524
  return interpolateColorsRGB(input, inputRange, processedOutputRange, options);
4515
4525
  };
4516
4526
  var easingToFn = (e) => {
4517
- if (e === "linear") {
4518
- return Easing.linear;
4527
+ switch (e.type) {
4528
+ case "linear":
4529
+ return Easing.linear;
4530
+ case "spring":
4531
+ return Easing.spring({
4532
+ damping: e.damping,
4533
+ mass: e.mass,
4534
+ overshootClamping: e.overshootClamping,
4535
+ stiffness: e.stiffness
4536
+ });
4537
+ case "bezier":
4538
+ return bezier(e.x1, e.y1, e.x2, e.y2);
4539
+ default:
4540
+ throw new TypeError(`Unsupported easing: ${JSON.stringify(e)}`);
4519
4541
  }
4520
- return bezier(e[0], e[1], e[2], e[3]);
4521
4542
  };
4522
4543
  var interpolateKeyframedStatus = ({
4523
4544
  frame,
@@ -4839,6 +4860,9 @@ var findPropsToDelete = ({
4839
4860
  }
4840
4861
  return [...otherKeys];
4841
4862
  };
4863
+ var DEFAULT_LINEAR_EASING = {
4864
+ type: "linear"
4865
+ };
4842
4866
  var makeStaticDragOverride = (value) => {
4843
4867
  return { type: "static", value };
4844
4868
  };
@@ -4851,7 +4875,7 @@ var makeKeyframedDragOverride = ({
4851
4875
  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);
4852
4876
  const easing = [...status.easing];
4853
4877
  while (easing.length < keyframes.length - 1) {
4854
- easing.push("linear");
4878
+ easing.push(DEFAULT_LINEAR_EASING);
4855
4879
  }
4856
4880
  if (easing.length > keyframes.length - 1) {
4857
4881
  easing.length = keyframes.length - 1;
@@ -5009,7 +5033,7 @@ var mergeValues = ({
5009
5033
  return merged;
5010
5034
  };
5011
5035
  var stackToOverrideMap = {};
5012
- var wrapInSchema = ({
5036
+ var withInteractivitySchema = ({
5013
5037
  Component,
5014
5038
  componentIdentity,
5015
5039
  schema,
@@ -5023,7 +5047,7 @@ var wrapInSchema = ({
5023
5047
  if (!env.isStudio || env.isReadOnlyStudio || env.isRendering) {
5024
5048
  return React13.createElement(Component, {
5025
5049
  ...props,
5026
- _experimentalControls: null,
5050
+ controls: null,
5027
5051
  ref
5028
5052
  });
5029
5053
  }
@@ -5031,7 +5055,7 @@ var wrapInSchema = ({
5031
5055
  const { getDragOverrides } = useContext16(VisualModeDragOverridesContext);
5032
5056
  const nodePathMapping = useContext16(OverrideIdsToNodePathsGettersContext);
5033
5057
  const frame = useCurrentFrame();
5034
- if (props._experimentalControls) {
5058
+ if (props.controls) {
5035
5059
  return React13.createElement(Component, {
5036
5060
  ...props,
5037
5061
  ref
@@ -5086,11 +5110,11 @@ var wrapInSchema = ({
5086
5110
  });
5087
5111
  return React13.createElement(Component, {
5088
5112
  ...mergedProps,
5089
- _experimentalControls: controls,
5113
+ controls,
5090
5114
  ref
5091
5115
  });
5092
5116
  });
5093
- Wrapped.displayName = `wrapInSchema(${Component.displayName || Component.name || "Component"})`;
5117
+ Wrapped.displayName = `withInteractivitySchema(${Component.displayName || Component.name || "Component"})`;
5094
5118
  return Wrapped;
5095
5119
  };
5096
5120
  var EMPTY_EFFECTS = [];
@@ -5104,7 +5128,7 @@ var RegularSequenceRefForwardingFunction = ({
5104
5128
  width,
5105
5129
  showInTimeline = true,
5106
5130
  hidden = false,
5107
- _experimentalControls: controls,
5131
+ controls,
5108
5132
  _remotionInternalEffects,
5109
5133
  _remotionInternalLoopDisplay: loopDisplay,
5110
5134
  _remotionInternalStack: stack,
@@ -5112,7 +5136,7 @@ var RegularSequenceRefForwardingFunction = ({
5112
5136
  _remotionInternalPremountDisplay: premountDisplay,
5113
5137
  _remotionInternalPostmountDisplay: postmountDisplay,
5114
5138
  _remotionInternalIsMedia: isMedia,
5115
- _remotionInternalRefForOutline: passedRefForOutline,
5139
+ outlineRef: passedRefForOutline,
5116
5140
  ...other
5117
5141
  }, ref) => {
5118
5142
  const { layout = "absolute-fill" } = other;
@@ -5209,6 +5233,11 @@ var RegularSequenceRefForwardingFunction = ({
5209
5233
  const inheritedStack = other?.stack ?? null;
5210
5234
  const stackRef = useRef6(null);
5211
5235
  stackRef.current = stack ?? inheritedStack;
5236
+ const registeredFrozenFrame = typeof freeze === "number" ? freeze : null;
5237
+ const parentCumulatedNegativeFrom = parentSequence?.cumulatedNegativeFrom ?? 0;
5238
+ const startMediaFrom = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom - cumulatedNegativeFrom : null;
5239
+ const mediaFrameAtSequenceZero = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom : null;
5240
+ const frozenMediaFrame = isMedia && isMedia.type !== "image" && mediaFrameAtSequenceZero !== null ? registeredFrozenFrame === null ? null : mediaFrameAtSequenceZero + (loopDisplay ? registeredFrozenFrame % loopDisplay.durationInFrames : registeredFrozenFrame) * isMedia.data.playbackRate : null;
5212
5241
  useEffect3(() => {
5213
5242
  if (!env.isStudio) {
5214
5243
  return;
@@ -5234,7 +5263,8 @@ var RegularSequenceRefForwardingFunction = ({
5234
5263
  src: isMedia.src,
5235
5264
  getStack: () => stackRef.current,
5236
5265
  refForOutline: refForOutline ?? null,
5237
- isInsideSeries
5266
+ isInsideSeries,
5267
+ frozenFrame: registeredFrozenFrame
5238
5268
  });
5239
5269
  } else {
5240
5270
  registerSequence({
@@ -5257,10 +5287,12 @@ var RegularSequenceRefForwardingFunction = ({
5257
5287
  showInTimeline,
5258
5288
  src: isMedia.data.src,
5259
5289
  getStack: () => stackRef.current,
5260
- startMediaFrom: isMedia.data.startMediaFrom,
5290
+ startMediaFrom: startMediaFrom ?? isMedia.data.startMediaFrom,
5261
5291
  volume: isMedia.data.volumes,
5262
5292
  refForOutline: refForOutline ?? null,
5263
- isInsideSeries
5293
+ isInsideSeries,
5294
+ frozenFrame: registeredFrozenFrame,
5295
+ frozenMediaFrame
5264
5296
  });
5265
5297
  }
5266
5298
  return () => {
@@ -5285,7 +5317,8 @@ var RegularSequenceRefForwardingFunction = ({
5285
5317
  controls: controls ?? null,
5286
5318
  effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
5287
5319
  refForOutline: refForOutline ?? null,
5288
- isInsideSeries
5320
+ isInsideSeries,
5321
+ frozenFrame: registeredFrozenFrame
5289
5322
  });
5290
5323
  return () => {
5291
5324
  unregisterSequence(id);
@@ -5312,7 +5345,10 @@ var RegularSequenceRefForwardingFunction = ({
5312
5345
  isMedia,
5313
5346
  resolvedDocumentationLink,
5314
5347
  refForOutline,
5315
- isInsideSeries
5348
+ isInsideSeries,
5349
+ registeredFrozenFrame,
5350
+ startMediaFrom,
5351
+ frozenMediaFrame
5316
5352
  ]);
5317
5353
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
5318
5354
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
@@ -5427,13 +5463,13 @@ var SequenceRefForwardingFunction = (props, ref) => {
5427
5463
  };
5428
5464
  var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
5429
5465
  var SequenceWithoutSchema = SequenceInner;
5430
- var Sequence = wrapInSchema({
5466
+ var Sequence = withInteractivitySchema({
5431
5467
  Component: SequenceInner,
5432
5468
  componentIdentity: "dev.remotion.remotion.Sequence",
5433
5469
  schema: sequenceSchema,
5434
5470
  supportsEffects: false
5435
5471
  });
5436
- var SequenceWithoutFrom = wrapInSchema({
5472
+ var SequenceWithoutFrom = withInteractivitySchema({
5437
5473
  Component: SequenceInner,
5438
5474
  componentIdentity: null,
5439
5475
  schema: sequenceSchemaWithoutFrom,
@@ -5972,9 +6008,7 @@ var resolveAnimatedImageSource = (src) => {
5972
6008
  return new URL(src, window.origin).href;
5973
6009
  };
5974
6010
  var animatedImageSchema = {
5975
- durationInFrames: durationInFramesField,
5976
- from: fromField,
5977
- freeze: freezeField,
6011
+ ...baseSchema,
5978
6012
  playbackRate: {
5979
6013
  type: "number",
5980
6014
  min: 0,
@@ -5985,8 +6019,7 @@ var animatedImageSchema = {
5985
6019
  hiddenFromList: false,
5986
6020
  keyframable: false
5987
6021
  },
5988
- ...sequenceVisualStyleSchema,
5989
- hidden: hiddenField
6022
+ ...transformSchema
5990
6023
  };
5991
6024
  var AnimatedImageContent = forwardRef4(({
5992
6025
  src,
@@ -6131,7 +6164,7 @@ var AnimatedImageInner = ({
6131
6164
  durationInFrames,
6132
6165
  requestInit,
6133
6166
  effects = [],
6134
- _experimentalControls: controls,
6167
+ controls,
6135
6168
  ref,
6136
6169
  ...sequenceProps
6137
6170
  }) => {
@@ -6160,10 +6193,10 @@ var AnimatedImageInner = ({
6160
6193
  durationInFrames: resolvedDuration,
6161
6194
  name: "<AnimatedImage>",
6162
6195
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/animatedimage",
6163
- _experimentalControls: controls,
6196
+ controls,
6164
6197
  _remotionInternalEffects: memoizedEffectDefinitions,
6165
6198
  ...sequenceProps,
6166
- _remotionInternalRefForOutline: actualRef,
6199
+ outlineRef: actualRef,
6167
6200
  children: /* @__PURE__ */ jsx14(AnimatedImageContent, {
6168
6201
  ...animatedImageProps,
6169
6202
  ref: actualRef,
@@ -6172,7 +6205,7 @@ var AnimatedImageInner = ({
6172
6205
  })
6173
6206
  });
6174
6207
  };
6175
- var AnimatedImage = wrapInSchema({
6208
+ var AnimatedImage = withInteractivitySchema({
6176
6209
  Component: AnimatedImageInner,
6177
6210
  componentIdentity: "dev.remotion.remotion.AnimatedImage",
6178
6211
  schema: animatedImageSchema,
@@ -6180,6 +6213,36 @@ var AnimatedImage = wrapInSchema({
6180
6213
  });
6181
6214
  AnimatedImage.displayName = "AnimatedImage";
6182
6215
  addSequenceStackTraces(AnimatedImage);
6216
+ var disabledEffectField = {
6217
+ type: "boolean",
6218
+ default: false,
6219
+ description: "Disabled"
6220
+ };
6221
+ var createEffect = (definition) => {
6222
+ const { calculateKey: userCalculateKey, validateParams } = definition;
6223
+ const widened = {
6224
+ ...definition,
6225
+ documentationLink: definition.documentationLink ?? null,
6226
+ calculateKey: (params) => {
6227
+ const disabled = params.disabled ?? false;
6228
+ return `${userCalculateKey(params)}-disabled-${disabled}`;
6229
+ },
6230
+ schema: {
6231
+ disabled: disabledEffectField,
6232
+ ...definition.schema
6233
+ }
6234
+ };
6235
+ const factory = (params = {}) => {
6236
+ validateParams(params);
6237
+ return {
6238
+ definition: widened,
6239
+ params,
6240
+ effectKey: widened.calculateKey(params),
6241
+ memoized: false
6242
+ };
6243
+ };
6244
+ return factory;
6245
+ };
6183
6246
  var validateArtifactFilename = (filename) => {
6184
6247
  if (typeof filename !== "string") {
6185
6248
  throw new TypeError(`The "filename" must be a string, but you passed a value of type ${typeof filename}`);
@@ -7807,7 +7870,9 @@ var useMediaInTimeline = ({
7807
7870
  controls: null,
7808
7871
  effects: [],
7809
7872
  refForOutline,
7810
- isInsideSeries: false
7873
+ isInsideSeries: false,
7874
+ frozenFrame: null,
7875
+ frozenMediaFrame: null
7811
7876
  });
7812
7877
  return () => {
7813
7878
  unregisterSequence(id);
@@ -9123,9 +9188,7 @@ var resolveSolidPixelDensity = (pixelDensity) => {
9123
9188
  return pixelDensity;
9124
9189
  };
9125
9190
  var solidSchema = {
9126
- durationInFrames: durationInFramesField,
9127
- from: fromField,
9128
- freeze: freezeField,
9191
+ ...baseSchema,
9129
9192
  color: {
9130
9193
  type: "color",
9131
9194
  default: "transparent",
@@ -9147,8 +9210,7 @@ var solidSchema = {
9147
9210
  description: "Height",
9148
9211
  hiddenFromList: false
9149
9212
  },
9150
- ...sequenceVisualStyleSchema,
9151
- hidden: hiddenField
9213
+ ...transformSchema
9152
9214
  };
9153
9215
  var SolidInner = ({
9154
9216
  color,
@@ -9255,7 +9317,7 @@ var SolidInner = ({
9255
9317
  };
9256
9318
  var SolidOuter = forwardRef8(({
9257
9319
  effects = [],
9258
- _experimentalControls: controls,
9320
+ controls,
9259
9321
  color,
9260
9322
  height,
9261
9323
  width,
@@ -9281,11 +9343,11 @@ var SolidOuter = forwardRef8(({
9281
9343
  freeze,
9282
9344
  hidden,
9283
9345
  showInTimeline,
9284
- _experimentalControls: controls,
9346
+ controls,
9285
9347
  _remotionInternalEffects: memoizedEffectDefinitions,
9286
9348
  durationInFrames,
9287
9349
  name: name ?? "<Solid>",
9288
- _remotionInternalRefForOutline: actualRef,
9350
+ outlineRef: actualRef,
9289
9351
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/solid",
9290
9352
  ...props2,
9291
9353
  children: /* @__PURE__ */ jsx24(SolidInner, {
@@ -9301,7 +9363,7 @@ var SolidOuter = forwardRef8(({
9301
9363
  })
9302
9364
  });
9303
9365
  });
9304
- var Solid = wrapInSchema({
9366
+ var Solid = withInteractivitySchema({
9305
9367
  Component: SolidOuter,
9306
9368
  componentIdentity: "dev.remotion.remotion.Solid",
9307
9369
  schema: solidSchema,
@@ -9578,7 +9640,7 @@ var HtmlInCanvasInner = forwardRef9(({
9578
9640
  onPaint,
9579
9641
  onInit,
9580
9642
  pixelDensity,
9581
- _experimentalControls: controls,
9643
+ controls,
9582
9644
  style,
9583
9645
  durationInFrames,
9584
9646
  name,
@@ -9600,9 +9662,9 @@ var HtmlInCanvasInner = forwardRef9(({
9600
9662
  durationInFrames: resolvedDuration,
9601
9663
  name: name ?? "<HtmlInCanvas>",
9602
9664
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/remotion/html-in-canvas",
9603
- _experimentalControls: controls,
9665
+ controls,
9604
9666
  _remotionInternalEffects: memoizedEffectDefinitions,
9605
- _remotionInternalRefForOutline: actualRef,
9667
+ outlineRef: actualRef,
9606
9668
  layout: "none",
9607
9669
  ...sequenceProps,
9608
9670
  children: /* @__PURE__ */ jsx25(HtmlInCanvasContent, {
@@ -9621,13 +9683,10 @@ var HtmlInCanvasInner = forwardRef9(({
9621
9683
  });
9622
9684
  HtmlInCanvasInner.displayName = "HtmlInCanvas";
9623
9685
  var htmlInCanvasSchema = {
9624
- durationInFrames: durationInFramesField,
9625
- from: fromField,
9626
- freeze: freezeField,
9627
- ...sequenceVisualStyleSchema,
9628
- hidden: hiddenField
9686
+ ...baseSchema,
9687
+ ...transformSchema
9629
9688
  };
9630
- var HtmlInCanvasWrapped = wrapInSchema({
9689
+ var HtmlInCanvasWrapped = withInteractivitySchema({
9631
9690
  Component: HtmlInCanvasInner,
9632
9691
  componentIdentity: "dev.remotion.remotion.HtmlInCanvas",
9633
9692
  schema: htmlInCanvasSchema,
@@ -9645,9 +9704,7 @@ function truncateSrcForLabel(src) {
9645
9704
  return src;
9646
9705
  }
9647
9706
  var canvasImageSchema = {
9648
- durationInFrames: durationInFramesField,
9649
- from: fromField,
9650
- freeze: freezeField,
9707
+ ...baseSchema,
9651
9708
  fit: {
9652
9709
  type: "enum",
9653
9710
  default: "fill",
@@ -9658,8 +9715,7 @@ var canvasImageSchema = {
9658
9715
  cover: {}
9659
9716
  }
9660
9717
  },
9661
- ...sequenceVisualStyleSchema,
9662
- hidden: hiddenField
9718
+ ...transformSchema
9663
9719
  };
9664
9720
  var makeAbortError = () => {
9665
9721
  if (typeof DOMException !== "undefined") {
@@ -9740,6 +9796,7 @@ var CanvasImageContent = forwardRef10(({
9740
9796
  const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
9741
9797
  const { delayPlayback } = useBufferState();
9742
9798
  const [outputCanvas, setOutputCanvas] = useState16(null);
9799
+ const [loadedImage, setLoadedImage] = useState16(null);
9743
9800
  const actualSrc = usePreload(src);
9744
9801
  const chainState = useEffectChainState();
9745
9802
  const memoizedEffects = useMemoizedEffects({
@@ -9765,9 +9822,6 @@ var CanvasImageContent = forwardRef10(({
9765
9822
  }
9766
9823
  }, [ref, refForOutline]);
9767
9824
  useEffect17(() => {
9768
- if (!outputCanvas || !sourceCanvas) {
9769
- return;
9770
- }
9771
9825
  const isPremounting = Boolean(sequenceContext?.premounting);
9772
9826
  const isPostmounting = Boolean(sequenceContext?.postmounting);
9773
9827
  const handle = delayRender2(`Rendering <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`, {
@@ -9782,6 +9836,7 @@ var CanvasImageContent = forwardRef10(({
9782
9836
  let continued = false;
9783
9837
  let errorCount = 0;
9784
9838
  let timeoutId = null;
9839
+ setLoadedImage(null);
9785
9840
  const continueRenderOnce = () => {
9786
9841
  if (continued) {
9787
9842
  return;
@@ -9795,30 +9850,9 @@ var CanvasImageContent = forwardRef10(({
9795
9850
  if (cancelled) {
9796
9851
  return;
9797
9852
  }
9798
- const canvasWidth = width ?? image.width;
9799
- const canvasHeight = height ?? image.height;
9800
- const sourceContext = sourceCanvas.getContext("2d", {
9801
- colorSpace: "srgb"
9802
- });
9803
- if (!sourceContext) {
9804
- throw new Error("Could not get 2D context for <CanvasImage> source canvas");
9805
- }
9806
- sourceCanvas.width = canvasWidth;
9807
- sourceCanvas.height = canvasHeight;
9808
- outputCanvas.width = canvasWidth;
9809
- outputCanvas.height = canvasHeight;
9810
- sourceContext.clearRect(0, 0, canvasWidth, canvasHeight);
9811
- sourceContext.drawImage(image.element, ...calculateImageFit(fit, { width: image.width, height: image.height }, { width: canvasWidth, height: canvasHeight }));
9812
- return runEffectChain({
9813
- state: chainState.get(canvasWidth, canvasHeight),
9814
- source: sourceCanvas,
9815
- effects: memoizedEffects,
9816
- output: outputCanvas,
9817
- width: canvasWidth,
9818
- height: canvasHeight
9819
- });
9820
- }).then((completed) => {
9821
- if (completed && !cancelled) {
9853
+ setLoadedImage(image);
9854
+ }).then(() => {
9855
+ if (!cancelled) {
9822
9856
  continueRenderOnce();
9823
9857
  }
9824
9858
  }).catch((err) => {
@@ -9855,21 +9889,87 @@ var CanvasImageContent = forwardRef10(({
9855
9889
  }, [
9856
9890
  actualSrc,
9857
9891
  cancelRender2,
9858
- chainState,
9859
9892
  continueRender2,
9860
9893
  delayPlayback,
9861
9894
  delayRender2,
9862
9895
  delayRenderRetries,
9863
9896
  delayRenderTimeoutInMilliseconds,
9897
+ maxRetries,
9898
+ onError,
9899
+ pauseWhenLoading,
9900
+ sequenceContext?.postmounting,
9901
+ sequenceContext?.premounting
9902
+ ]);
9903
+ useEffect17(() => {
9904
+ if (!loadedImage || !outputCanvas || !sourceCanvas) {
9905
+ return;
9906
+ }
9907
+ const handle = delayRender2(`Applying effects to <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`);
9908
+ let cancelled = false;
9909
+ let continued = false;
9910
+ const continueRenderOnce = () => {
9911
+ if (continued) {
9912
+ return;
9913
+ }
9914
+ continued = true;
9915
+ continueRender2(handle);
9916
+ };
9917
+ const canvasWidth = width ?? loadedImage.width;
9918
+ const canvasHeight = height ?? loadedImage.height;
9919
+ const sourceContext = sourceCanvas.getContext("2d", {
9920
+ colorSpace: "srgb"
9921
+ });
9922
+ if (!sourceContext) {
9923
+ cancelRender2(new Error("Could not get 2D context for <CanvasImage> source canvas"));
9924
+ continueRenderOnce();
9925
+ return () => {
9926
+ continueRenderOnce();
9927
+ };
9928
+ }
9929
+ sourceCanvas.width = canvasWidth;
9930
+ sourceCanvas.height = canvasHeight;
9931
+ outputCanvas.width = canvasWidth;
9932
+ outputCanvas.height = canvasHeight;
9933
+ sourceContext.clearRect(0, 0, canvasWidth, canvasHeight);
9934
+ sourceContext.drawImage(loadedImage.element, ...calculateImageFit(fit, { width: loadedImage.width, height: loadedImage.height }, { width: canvasWidth, height: canvasHeight }));
9935
+ runEffectChain({
9936
+ state: chainState.get(canvasWidth, canvasHeight),
9937
+ source: sourceCanvas,
9938
+ effects: memoizedEffects,
9939
+ output: outputCanvas,
9940
+ width: canvasWidth,
9941
+ height: canvasHeight
9942
+ }).then((completed) => {
9943
+ if (completed && !cancelled) {
9944
+ continueRenderOnce();
9945
+ }
9946
+ }).catch((err) => {
9947
+ if (cancelled) {
9948
+ return;
9949
+ }
9950
+ if (onError) {
9951
+ onError(err);
9952
+ continueRenderOnce();
9953
+ } else {
9954
+ cancelRender2(err);
9955
+ }
9956
+ });
9957
+ return () => {
9958
+ cancelled = true;
9959
+ continueRenderOnce();
9960
+ };
9961
+ }, [
9962
+ actualSrc,
9963
+ cancelRender2,
9964
+ chainState,
9965
+ continueRender2,
9966
+ delayRender2,
9864
9967
  fit,
9865
9968
  height,
9866
- maxRetries,
9969
+ loadedImage,
9867
9970
  memoizedEffects,
9868
9971
  onError,
9869
9972
  outputCanvas,
9870
- pauseWhenLoading,
9871
- sequenceContext?.postmounting,
9872
- sequenceContext?.premounting,
9873
9973
  sourceCanvas,
9874
9974
  width
9875
9975
  ]);
@@ -9905,9 +10005,9 @@ var CanvasImageInner = forwardRef10(({
9905
10005
  name,
9906
10006
  showInTimeline,
9907
10007
  stack,
9908
- _experimentalControls: controls,
10008
+ controls,
9909
10009
  _remotionInternalDocumentationLink,
9910
- _remotionInternalRefForOutline,
10010
+ outlineRef,
9911
10011
  ...canvasProps
9912
10012
  }, ref) => {
9913
10013
  if (!src) {
@@ -9927,11 +10027,11 @@ var CanvasImageInner = forwardRef10(({
9927
10027
  showInTimeline: showInTimeline ?? true,
9928
10028
  name: name ?? "<CanvasImage>",
9929
10029
  _remotionInternalDocumentationLink: _remotionInternalDocumentationLink ?? "https://www.remotion.dev/docs/canvasimage",
9930
- _experimentalControls: controls,
10030
+ controls,
9931
10031
  _remotionInternalEffects: memoizedEffectDefinitions,
9932
10032
  _remotionInternalIsMedia: { type: "image", src },
9933
10033
  _remotionInternalStack: stack,
9934
- _remotionInternalRefForOutline: _remotionInternalRefForOutline ?? actualRef,
10034
+ outlineRef: outlineRef ?? actualRef,
9935
10035
  children: /* @__PURE__ */ jsx26(CanvasImageContent, {
9936
10036
  ref: actualRef,
9937
10037
  src,
@@ -9948,12 +10048,12 @@ var CanvasImageInner = forwardRef10(({
9948
10048
  maxRetries,
9949
10049
  delayRenderRetries,
9950
10050
  delayRenderTimeoutInMilliseconds,
9951
- refForOutline: _remotionInternalRefForOutline ?? null,
10051
+ refForOutline: outlineRef ?? null,
9952
10052
  ...canvasProps
9953
10053
  })
9954
10054
  });
9955
10055
  });
9956
- var CanvasImage = wrapInSchema({
10056
+ var CanvasImage = withInteractivitySchema({
9957
10057
  Component: CanvasImageInner,
9958
10058
  componentIdentity: "dev.remotion.remotion.CanvasImage",
9959
10059
  schema: canvasImageSchema,
@@ -10158,8 +10258,8 @@ var NativeImgInner = ({
10158
10258
  from,
10159
10259
  durationInFrames,
10160
10260
  freeze,
10161
- _experimentalControls: controls,
10162
- _remotionInternalRefForOutline: refForOutline,
10261
+ controls,
10262
+ outlineRef: refForOutline,
10163
10263
  ...props2
10164
10264
  }) => {
10165
10265
  if (!src) {
@@ -10174,10 +10274,10 @@ var NativeImgInner = ({
10174
10274
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/img",
10175
10275
  _remotionInternalIsMedia: { type: "image", src },
10176
10276
  name: name ?? "<Img>",
10177
- _experimentalControls: controls,
10277
+ controls,
10178
10278
  showInTimeline: showInTimeline ?? true,
10179
10279
  hidden,
10180
- _remotionInternalRefForOutline: refForOutline,
10280
+ outlineRef: refForOutline,
10181
10281
  children: /* @__PURE__ */ jsx28(ImgContent, {
10182
10282
  src,
10183
10283
  refForOutline,
@@ -10187,11 +10287,8 @@ var NativeImgInner = ({
10187
10287
  };
10188
10288
  var CanvasImageWithPrivateProps = CanvasImage;
10189
10289
  var imgSchema = {
10190
- durationInFrames: durationInFramesField,
10191
- from: fromField,
10192
- freeze: freezeField,
10193
- ...sequenceVisualStyleSchema,
10194
- hidden: hiddenField
10290
+ ...baseSchema,
10291
+ ...transformSchema
10195
10292
  };
10196
10293
  var imgCanvasFallbackIncompatibleProps = new Set([
10197
10294
  "alt",
@@ -10246,7 +10343,7 @@ var ImgInner = ({
10246
10343
  from,
10247
10344
  durationInFrames,
10248
10345
  freeze,
10249
- _experimentalControls: controls,
10346
+ controls,
10250
10347
  width,
10251
10348
  height,
10252
10349
  className,
@@ -10271,7 +10368,7 @@ var ImgInner = ({
10271
10368
  from,
10272
10369
  durationInFrames,
10273
10370
  freeze,
10274
- _experimentalControls: controls,
10371
+ controls,
10275
10372
  width,
10276
10373
  height,
10277
10374
  className,
@@ -10281,7 +10378,7 @@ var ImgInner = ({
10281
10378
  maxRetries,
10282
10379
  delayRenderRetries,
10283
10380
  delayRenderTimeoutInMilliseconds,
10284
- _remotionInternalRefForOutline: refForOutline
10381
+ outlineRef: refForOutline
10285
10382
  });
10286
10383
  }
10287
10384
  if (!src) {
@@ -10318,12 +10415,12 @@ var ImgInner = ({
10318
10415
  showInTimeline,
10319
10416
  stack,
10320
10417
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/img",
10321
- _experimentalControls: controls,
10322
- _remotionInternalRefForOutline: refForOutline,
10418
+ controls,
10419
+ outlineRef: refForOutline,
10323
10420
  ...canvasProps
10324
10421
  });
10325
10422
  };
10326
- var Img = wrapInSchema({
10423
+ var Img = withInteractivitySchema({
10327
10424
  Component: ImgInner,
10328
10425
  componentIdentity: "dev.remotion.remotion.Img",
10329
10426
  schema: imgSchema,
@@ -10331,11 +10428,8 @@ var Img = wrapInSchema({
10331
10428
  });
10332
10429
  addSequenceStackTraces(Img);
10333
10430
  var interactiveElementSchema = {
10334
- durationInFrames: durationInFramesField,
10335
- from: fromField,
10336
- freeze: freezeField,
10337
- ...sequenceVisualStyleSchema,
10338
- hidden: hiddenField
10431
+ ...baseSchema,
10432
+ ...transformSchema
10339
10433
  };
10340
10434
  var setRef = (ref, value) => {
10341
10435
  if (typeof ref === "function") {
@@ -10354,7 +10448,7 @@ var makeInteractiveElement = (tag, displayName) => {
10354
10448
  name,
10355
10449
  showInTimeline,
10356
10450
  stack,
10357
- _experimentalControls,
10451
+ controls,
10358
10452
  ...props2
10359
10453
  } = propsWithControls;
10360
10454
  const refForOutline = useRef25(null);
@@ -10370,10 +10464,10 @@ var makeInteractiveElement = (tag, displayName) => {
10370
10464
  hidden,
10371
10465
  name: name ?? displayName,
10372
10466
  showInTimeline: showInTimeline ?? true,
10373
- _experimentalControls,
10467
+ controls,
10374
10468
  _remotionInternalStack: stack,
10375
10469
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/interactive",
10376
- _remotionInternalRefForOutline: refForOutline,
10470
+ outlineRef: refForOutline,
10377
10471
  children: React29.createElement(tag, {
10378
10472
  ...props2,
10379
10473
  ref: callbackRef
@@ -10381,7 +10475,7 @@ var makeInteractiveElement = (tag, displayName) => {
10381
10475
  });
10382
10476
  });
10383
10477
  Inner.displayName = displayName;
10384
- const Wrapped = wrapInSchema({
10478
+ const Wrapped = withInteractivitySchema({
10385
10479
  Component: Inner,
10386
10480
  componentIdentity: `dev.remotion.remotion.${displayName.slice(1, -1)}`,
10387
10481
  schema: interactiveElementSchema,
@@ -10392,6 +10486,11 @@ var makeInteractiveElement = (tag, displayName) => {
10392
10486
  return Wrapped;
10393
10487
  };
10394
10488
  var Interactive = {
10489
+ baseSchema,
10490
+ transformSchema,
10491
+ premountSchema,
10492
+ sequenceSchema,
10493
+ withSchema: withInteractivitySchema,
10395
10494
  A: makeInteractiveElement("a", "<Interactive.A>"),
10396
10495
  Article: makeInteractiveElement("article", "<Interactive.Article>"),
10397
10496
  Aside: makeInteractiveElement("aside", "<Interactive.Aside>"),
@@ -10573,36 +10672,6 @@ var makeDefaultPreviewCSS = (scope, backgroundColor) => {
10573
10672
  }
10574
10673
  `;
10575
10674
  };
10576
- var disabledEffectField = {
10577
- type: "boolean",
10578
- default: false,
10579
- description: "Disabled"
10580
- };
10581
- var createEffect = (definition) => {
10582
- const { calculateKey: userCalculateKey, validateParams } = definition;
10583
- const widened = {
10584
- ...definition,
10585
- documentationLink: definition.documentationLink ?? null,
10586
- calculateKey: (params) => {
10587
- const disabled = params.disabled ?? false;
10588
- return `${userCalculateKey(params)}-disabled-${disabled}`;
10589
- },
10590
- schema: {
10591
- disabled: disabledEffectField,
10592
- ...definition.schema
10593
- }
10594
- };
10595
- const factory = (params = {}) => {
10596
- validateParams(params);
10597
- return {
10598
- definition: widened,
10599
- params,
10600
- effectKey: widened.calculateKey(params),
10601
- memoized: false
10602
- };
10603
- };
10604
- return factory;
10605
- };
10606
10675
  var REMOTION_STUDIO_CONTAINER_ELEMENT = "__remotion-studio-container";
10607
10676
  var getPreviewDomElement = () => {
10608
10677
  return document.getElementById(REMOTION_STUDIO_CONTAINER_ELEMENT);
@@ -11689,12 +11758,14 @@ var Internals = {
11689
11758
  SequenceManager,
11690
11759
  SequenceManagerRefContext,
11691
11760
  SequenceStackTracesUpdateContext,
11692
- wrapInSchema,
11761
+ baseSchema,
11693
11762
  sequenceSchema,
11694
11763
  SequenceWithoutSchema,
11695
11764
  sequenceStyleSchema,
11696
11765
  sequenceVisualStyleSchema,
11697
11766
  sequencePremountSchema,
11767
+ transformSchema,
11768
+ premountSchema,
11698
11769
  flattenActiveSchema,
11699
11770
  getFlatSchemaWithAllKeys,
11700
11771
  RemotionRootContexts,
@@ -11894,7 +11965,7 @@ var SeriesInner = (props2) => {
11894
11965
  })
11895
11966
  });
11896
11967
  };
11897
- var Series = Object.assign(wrapInSchema({
11968
+ var Series = Object.assign(withInteractivitySchema({
11898
11969
  Component: SeriesInner,
11899
11970
  componentIdentity: "dev.remotion.remotion.Series",
11900
11971
  schema: sequenceSchemaDefaultLayoutNone,