@remotion/promo-pages 4.0.472 → 4.0.473

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.
@@ -7134,7 +7134,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
7134
7134
  var addSequenceStackTraces = (component) => {
7135
7135
  componentsToAddStacksTo.push(component);
7136
7136
  };
7137
- var VERSION = "4.0.472";
7137
+ var VERSION = "4.0.473";
7138
7138
  var checkMultipleRemotionVersions = () => {
7139
7139
  if (typeof globalThis === "undefined") {
7140
7140
  return;
@@ -7173,7 +7173,8 @@ __export2(exports_timeline_position_state, {
7173
7173
  useAbsoluteTimelinePosition: () => useAbsoluteTimelinePosition,
7174
7174
  persistCurrentFrame: () => persistCurrentFrame,
7175
7175
  getInitialFrameState: () => getInitialFrameState,
7176
- getFrameForComposition: () => getFrameForComposition
7176
+ getFrameForComposition: () => getFrameForComposition,
7177
+ clampFrameToCompositionRange: () => clampFrameToCompositionRange
7177
7178
  });
7178
7179
  function mulberry32(a) {
7179
7180
  let t = a + 1831565813;
@@ -7310,6 +7311,9 @@ var getFrameForComposition = (composition) => {
7310
7311
  }
7311
7312
  return window.remotion_initialFrame ?? 0;
7312
7313
  };
7314
+ var clampFrameToCompositionRange = (frame, durationInFrames) => {
7315
+ return Math.max(0, Math.min(Math.max(0, durationInFrames - 1), frame));
7316
+ };
7313
7317
  var useTimelinePositionFromContext = (state) => {
7314
7318
  const videoConfig = useVideo();
7315
7319
  const env = useRemotionEnvironment();
@@ -7317,7 +7321,7 @@ var useTimelinePositionFromContext = (state) => {
7317
7321
  return typeof window === "undefined" ? 0 : window.remotion_initialFrame ?? 0;
7318
7322
  }
7319
7323
  const unclamped = state.frame[videoConfig.id] ?? (env.isPlayer ? 0 : getFrameForComposition(videoConfig.id));
7320
- return Math.min(videoConfig.durationInFrames - 1, unclamped);
7324
+ return clampFrameToCompositionRange(unclamped, videoConfig.durationInFrames);
7321
7325
  };
7322
7326
  var useTimelineContext = () => {
7323
7327
  const state = useContext10(TimelineContext);
@@ -7505,7 +7509,6 @@ var sequenceVisualStyleSchema = {
7505
7509
  },
7506
7510
  "style.scale": {
7507
7511
  type: "scale",
7508
- min: 0.05,
7509
7512
  max: 100,
7510
7513
  step: 0.01,
7511
7514
  default: 1,
@@ -7586,6 +7589,11 @@ var sequenceSchema = {
7586
7589
  }
7587
7590
  }
7588
7591
  };
7592
+ var sequenceSchemaWithoutFrom = {
7593
+ hidden: hiddenField,
7594
+ durationInFrames: durationInFramesField,
7595
+ layout: sequenceSchema.layout
7596
+ };
7589
7597
  var sequenceSchemaDefaultLayoutNone = {
7590
7598
  ...sequenceSchema,
7591
7599
  layout: {
@@ -8239,6 +8247,40 @@ var interpolateString = ({
8239
8247
  dimensions
8240
8248
  });
8241
8249
  };
8250
+ var validateTupleOutputRange = (outputRange) => {
8251
+ const dimensions = outputRange[0]?.length;
8252
+ if (dimensions === undefined) {
8253
+ throw new Error("outputRange must have at least 1 element");
8254
+ }
8255
+ if (dimensions === 0) {
8256
+ throw new TypeError("outputRange tuples must contain at least 1 number");
8257
+ }
8258
+ for (const output of outputRange) {
8259
+ if (output.length !== dimensions) {
8260
+ throw new TypeError(`outputRange tuples must all have the same length, but got ${dimensions} and ${output.length}`);
8261
+ }
8262
+ for (const value of output) {
8263
+ if (typeof value !== "number" || !Number.isFinite(value)) {
8264
+ throw new TypeError(`outputRange tuples must contain only finite numbers, but got [${output.join(",")}]`);
8265
+ }
8266
+ }
8267
+ }
8268
+ return dimensions;
8269
+ };
8270
+ var interpolateTuple = ({
8271
+ input,
8272
+ inputRange,
8273
+ outputRange,
8274
+ options
8275
+ }) => {
8276
+ const dimensions = validateTupleOutputRange(outputRange);
8277
+ return new Array(dimensions).fill(true).map((_, axis) => interpolateNumber({
8278
+ input,
8279
+ inputRange,
8280
+ outputRange: outputRange.map((output) => output[axis]),
8281
+ options
8282
+ }));
8283
+ };
8242
8284
  function checkValidInputRange(arr) {
8243
8285
  for (let i = 1;i < arr.length; ++i) {
8244
8286
  if (!(arr[i] > arr[i - 1])) {
@@ -8314,8 +8356,11 @@ function interpolate2(input, inputRange, outputRange, options) {
8314
8356
  }
8315
8357
  return interpolateString({ input, inputRange, outputRange, options });
8316
8358
  }
8359
+ if (outputRange.every((output) => Array.isArray(output))) {
8360
+ return interpolateTuple({ input, inputRange, outputRange, options });
8361
+ }
8317
8362
  if (!outputRange.every((output) => typeof output === "number")) {
8318
- throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
8363
+ throw new TypeError("outputRange must contain only numbers, numeric tuples, or supported scale, translate, and rotate strings");
8319
8364
  }
8320
8365
  checkInfiniteRange("outputRange", outputRange);
8321
8366
  return interpolateNumber({ input, inputRange, outputRange, options });
@@ -8828,8 +8873,9 @@ var interpolateKeyframedStatus = ({
8828
8873
  if (keyframes.length === 0) {
8829
8874
  return null;
8830
8875
  }
8831
- const inputRange = keyframes.map((k) => k.frame);
8832
- const outputs = keyframes.map((k) => k.value);
8876
+ const sortedKeyframes = [...keyframes].sort((a2, b2) => a2.frame - b2.frame);
8877
+ const inputRange = sortedKeyframes.map((k) => k.frame);
8878
+ const outputs = sortedKeyframes.map((k) => k.value);
8833
8879
  if (interpolationFunction === "interpolateColors") {
8834
8880
  if (!outputs.every((v) => typeof v === "string")) {
8835
8881
  return null;
@@ -9679,11 +9725,17 @@ var SequenceRefForwardingFunction = (props, ref) => {
9679
9725
  });
9680
9726
  };
9681
9727
  var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
9728
+ var SequenceWithoutSchema = SequenceInner;
9682
9729
  var Sequence = wrapInSchema({
9683
9730
  Component: SequenceInner,
9684
9731
  schema: sequenceSchema,
9685
9732
  supportsEffects: false
9686
9733
  });
9734
+ var SequenceWithoutFrom = wrapInSchema({
9735
+ Component: SequenceInner,
9736
+ schema: sequenceSchemaWithoutFrom,
9737
+ supportsEffects: false
9738
+ });
9687
9739
  var calculateImageFit = (fit, imageSize, canvasSize) => {
9688
9740
  switch (fit) {
9689
9741
  case "fill": {
@@ -15804,6 +15856,7 @@ var Internals = {
15804
15856
  SequenceStackTracesUpdateContext,
15805
15857
  wrapInSchema,
15806
15858
  sequenceSchema,
15859
+ SequenceWithoutSchema,
15807
15860
  sequenceStyleSchema,
15808
15861
  sequenceVisualStyleSchema,
15809
15862
  sequencePremountSchema,
@@ -15965,6 +16018,7 @@ var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
15965
16018
  });
15966
16019
  };
15967
16020
  var SeriesSequence = forwardRef13(SeriesSequenceRefForwardingFunction);
16021
+ var SequenceWithoutSchemaWithRef = SequenceWithoutSchema;
15968
16022
  var SeriesInner = (props2) => {
15969
16023
  const childrenValue = useMemo38(() => {
15970
16024
  let startFrame = 0;
@@ -16007,13 +16061,13 @@ var SeriesInner = (props2) => {
16007
16061
  }
16008
16062
  const currentStartFrame = startFrame + offset;
16009
16063
  startFrame += durationInFramesProp + offset;
16010
- return /* @__PURE__ */ jsx36(Sequence, {
16064
+ return /* @__PURE__ */ jsx36(SequenceWithoutSchemaWithRef, {
16065
+ ref: castedChild.ref,
16011
16066
  name: name || "<Series.Sequence>",
16012
16067
  _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
16013
16068
  from: currentStartFrame,
16014
16069
  durationInFrames: durationInFramesProp,
16015
16070
  ...passedProps,
16016
- ref: castedChild.ref,
16017
16071
  children: child
16018
16072
  });
16019
16073
  });
@@ -16036,7 +16090,6 @@ var Series = Object.assign(wrapInSchema({
16036
16090
  Sequence: SeriesSequence
16037
16091
  });
16038
16092
  addSequenceStackTraces(Series);
16039
- addSequenceStackTraces(SeriesSequence);
16040
16093
  var validateSpringDuration = (dur) => {
16041
16094
  if (typeof dur === "undefined") {
16042
16095
  return;
@@ -7134,7 +7134,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
7134
7134
  var addSequenceStackTraces = (component) => {
7135
7135
  componentsToAddStacksTo.push(component);
7136
7136
  };
7137
- var VERSION = "4.0.472";
7137
+ var VERSION = "4.0.473";
7138
7138
  var checkMultipleRemotionVersions = () => {
7139
7139
  if (typeof globalThis === "undefined") {
7140
7140
  return;
@@ -7173,7 +7173,8 @@ __export2(exports_timeline_position_state, {
7173
7173
  useAbsoluteTimelinePosition: () => useAbsoluteTimelinePosition,
7174
7174
  persistCurrentFrame: () => persistCurrentFrame,
7175
7175
  getInitialFrameState: () => getInitialFrameState,
7176
- getFrameForComposition: () => getFrameForComposition
7176
+ getFrameForComposition: () => getFrameForComposition,
7177
+ clampFrameToCompositionRange: () => clampFrameToCompositionRange
7177
7178
  });
7178
7179
  function mulberry32(a) {
7179
7180
  let t = a + 1831565813;
@@ -7310,6 +7311,9 @@ var getFrameForComposition = (composition) => {
7310
7311
  }
7311
7312
  return window.remotion_initialFrame ?? 0;
7312
7313
  };
7314
+ var clampFrameToCompositionRange = (frame, durationInFrames) => {
7315
+ return Math.max(0, Math.min(Math.max(0, durationInFrames - 1), frame));
7316
+ };
7313
7317
  var useTimelinePositionFromContext = (state) => {
7314
7318
  const videoConfig = useVideo();
7315
7319
  const env = useRemotionEnvironment();
@@ -7317,7 +7321,7 @@ var useTimelinePositionFromContext = (state) => {
7317
7321
  return typeof window === "undefined" ? 0 : window.remotion_initialFrame ?? 0;
7318
7322
  }
7319
7323
  const unclamped = state.frame[videoConfig.id] ?? (env.isPlayer ? 0 : getFrameForComposition(videoConfig.id));
7320
- return Math.min(videoConfig.durationInFrames - 1, unclamped);
7324
+ return clampFrameToCompositionRange(unclamped, videoConfig.durationInFrames);
7321
7325
  };
7322
7326
  var useTimelineContext = () => {
7323
7327
  const state = useContext10(TimelineContext);
@@ -7505,7 +7509,6 @@ var sequenceVisualStyleSchema = {
7505
7509
  },
7506
7510
  "style.scale": {
7507
7511
  type: "scale",
7508
- min: 0.05,
7509
7512
  max: 100,
7510
7513
  step: 0.01,
7511
7514
  default: 1,
@@ -7586,6 +7589,11 @@ var sequenceSchema = {
7586
7589
  }
7587
7590
  }
7588
7591
  };
7592
+ var sequenceSchemaWithoutFrom = {
7593
+ hidden: hiddenField,
7594
+ durationInFrames: durationInFramesField,
7595
+ layout: sequenceSchema.layout
7596
+ };
7589
7597
  var sequenceSchemaDefaultLayoutNone = {
7590
7598
  ...sequenceSchema,
7591
7599
  layout: {
@@ -8239,6 +8247,40 @@ var interpolateString = ({
8239
8247
  dimensions
8240
8248
  });
8241
8249
  };
8250
+ var validateTupleOutputRange = (outputRange) => {
8251
+ const dimensions = outputRange[0]?.length;
8252
+ if (dimensions === undefined) {
8253
+ throw new Error("outputRange must have at least 1 element");
8254
+ }
8255
+ if (dimensions === 0) {
8256
+ throw new TypeError("outputRange tuples must contain at least 1 number");
8257
+ }
8258
+ for (const output of outputRange) {
8259
+ if (output.length !== dimensions) {
8260
+ throw new TypeError(`outputRange tuples must all have the same length, but got ${dimensions} and ${output.length}`);
8261
+ }
8262
+ for (const value of output) {
8263
+ if (typeof value !== "number" || !Number.isFinite(value)) {
8264
+ throw new TypeError(`outputRange tuples must contain only finite numbers, but got [${output.join(",")}]`);
8265
+ }
8266
+ }
8267
+ }
8268
+ return dimensions;
8269
+ };
8270
+ var interpolateTuple = ({
8271
+ input,
8272
+ inputRange,
8273
+ outputRange,
8274
+ options
8275
+ }) => {
8276
+ const dimensions = validateTupleOutputRange(outputRange);
8277
+ return new Array(dimensions).fill(true).map((_, axis) => interpolateNumber({
8278
+ input,
8279
+ inputRange,
8280
+ outputRange: outputRange.map((output) => output[axis]),
8281
+ options
8282
+ }));
8283
+ };
8242
8284
  function checkValidInputRange(arr) {
8243
8285
  for (let i = 1;i < arr.length; ++i) {
8244
8286
  if (!(arr[i] > arr[i - 1])) {
@@ -8314,8 +8356,11 @@ function interpolate2(input, inputRange, outputRange, options) {
8314
8356
  }
8315
8357
  return interpolateString({ input, inputRange, outputRange, options });
8316
8358
  }
8359
+ if (outputRange.every((output) => Array.isArray(output))) {
8360
+ return interpolateTuple({ input, inputRange, outputRange, options });
8361
+ }
8317
8362
  if (!outputRange.every((output) => typeof output === "number")) {
8318
- throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
8363
+ throw new TypeError("outputRange must contain only numbers, numeric tuples, or supported scale, translate, and rotate strings");
8319
8364
  }
8320
8365
  checkInfiniteRange("outputRange", outputRange);
8321
8366
  return interpolateNumber({ input, inputRange, outputRange, options });
@@ -8828,8 +8873,9 @@ var interpolateKeyframedStatus = ({
8828
8873
  if (keyframes.length === 0) {
8829
8874
  return null;
8830
8875
  }
8831
- const inputRange = keyframes.map((k) => k.frame);
8832
- const outputs = keyframes.map((k) => k.value);
8876
+ const sortedKeyframes = [...keyframes].sort((a2, b2) => a2.frame - b2.frame);
8877
+ const inputRange = sortedKeyframes.map((k) => k.frame);
8878
+ const outputs = sortedKeyframes.map((k) => k.value);
8833
8879
  if (interpolationFunction === "interpolateColors") {
8834
8880
  if (!outputs.every((v) => typeof v === "string")) {
8835
8881
  return null;
@@ -9679,11 +9725,17 @@ var SequenceRefForwardingFunction = (props, ref) => {
9679
9725
  });
9680
9726
  };
9681
9727
  var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
9728
+ var SequenceWithoutSchema = SequenceInner;
9682
9729
  var Sequence = wrapInSchema({
9683
9730
  Component: SequenceInner,
9684
9731
  schema: sequenceSchema,
9685
9732
  supportsEffects: false
9686
9733
  });
9734
+ var SequenceWithoutFrom = wrapInSchema({
9735
+ Component: SequenceInner,
9736
+ schema: sequenceSchemaWithoutFrom,
9737
+ supportsEffects: false
9738
+ });
9687
9739
  var calculateImageFit = (fit, imageSize, canvasSize) => {
9688
9740
  switch (fit) {
9689
9741
  case "fill": {
@@ -15804,6 +15856,7 @@ var Internals = {
15804
15856
  SequenceStackTracesUpdateContext,
15805
15857
  wrapInSchema,
15806
15858
  sequenceSchema,
15859
+ SequenceWithoutSchema,
15807
15860
  sequenceStyleSchema,
15808
15861
  sequenceVisualStyleSchema,
15809
15862
  sequencePremountSchema,
@@ -15965,6 +16018,7 @@ var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
15965
16018
  });
15966
16019
  };
15967
16020
  var SeriesSequence = forwardRef13(SeriesSequenceRefForwardingFunction);
16021
+ var SequenceWithoutSchemaWithRef = SequenceWithoutSchema;
15968
16022
  var SeriesInner = (props2) => {
15969
16023
  const childrenValue = useMemo38(() => {
15970
16024
  let startFrame = 0;
@@ -16007,13 +16061,13 @@ var SeriesInner = (props2) => {
16007
16061
  }
16008
16062
  const currentStartFrame = startFrame + offset;
16009
16063
  startFrame += durationInFramesProp + offset;
16010
- return /* @__PURE__ */ jsx36(Sequence, {
16064
+ return /* @__PURE__ */ jsx36(SequenceWithoutSchemaWithRef, {
16065
+ ref: castedChild.ref,
16011
16066
  name: name || "<Series.Sequence>",
16012
16067
  _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
16013
16068
  from: currentStartFrame,
16014
16069
  durationInFrames: durationInFramesProp,
16015
16070
  ...passedProps,
16016
- ref: castedChild.ref,
16017
16071
  children: child
16018
16072
  });
16019
16073
  });
@@ -16036,7 +16090,6 @@ var Series = Object.assign(wrapInSchema({
16036
16090
  Sequence: SeriesSequence
16037
16091
  });
16038
16092
  addSequenceStackTraces(Series);
16039
- addSequenceStackTraces(SeriesSequence);
16040
16093
  var validateSpringDuration = (dur) => {
16041
16094
  if (typeof dur === "undefined") {
16042
16095
  return;
@@ -24468,7 +24468,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
24468
24468
  var addSequenceStackTraces = (component) => {
24469
24469
  componentsToAddStacksTo.push(component);
24470
24470
  };
24471
- var VERSION = "4.0.472";
24471
+ var VERSION = "4.0.473";
24472
24472
  var checkMultipleRemotionVersions = () => {
24473
24473
  if (typeof globalThis === "undefined") {
24474
24474
  return;
@@ -24507,7 +24507,8 @@ __export2(exports_timeline_position_state, {
24507
24507
  useAbsoluteTimelinePosition: () => useAbsoluteTimelinePosition,
24508
24508
  persistCurrentFrame: () => persistCurrentFrame,
24509
24509
  getInitialFrameState: () => getInitialFrameState,
24510
- getFrameForComposition: () => getFrameForComposition
24510
+ getFrameForComposition: () => getFrameForComposition,
24511
+ clampFrameToCompositionRange: () => clampFrameToCompositionRange
24511
24512
  });
24512
24513
  function mulberry32(a) {
24513
24514
  let t = a + 1831565813;
@@ -24644,6 +24645,9 @@ var getFrameForComposition = (composition) => {
24644
24645
  }
24645
24646
  return window.remotion_initialFrame ?? 0;
24646
24647
  };
24648
+ var clampFrameToCompositionRange = (frame, durationInFrames) => {
24649
+ return Math.max(0, Math.min(Math.max(0, durationInFrames - 1), frame));
24650
+ };
24647
24651
  var useTimelinePositionFromContext = (state) => {
24648
24652
  const videoConfig = useVideo();
24649
24653
  const env = useRemotionEnvironment();
@@ -24651,7 +24655,7 @@ var useTimelinePositionFromContext = (state) => {
24651
24655
  return typeof window === "undefined" ? 0 : window.remotion_initialFrame ?? 0;
24652
24656
  }
24653
24657
  const unclamped = state.frame[videoConfig.id] ?? (env.isPlayer ? 0 : getFrameForComposition(videoConfig.id));
24654
- return Math.min(videoConfig.durationInFrames - 1, unclamped);
24658
+ return clampFrameToCompositionRange(unclamped, videoConfig.durationInFrames);
24655
24659
  };
24656
24660
  var useTimelineContext = () => {
24657
24661
  const state = useContext10(TimelineContext);
@@ -24839,7 +24843,6 @@ var sequenceVisualStyleSchema = {
24839
24843
  },
24840
24844
  "style.scale": {
24841
24845
  type: "scale",
24842
- min: 0.05,
24843
24846
  max: 100,
24844
24847
  step: 0.01,
24845
24848
  default: 1,
@@ -24920,6 +24923,11 @@ var sequenceSchema = {
24920
24923
  }
24921
24924
  }
24922
24925
  };
24926
+ var sequenceSchemaWithoutFrom = {
24927
+ hidden: hiddenField,
24928
+ durationInFrames: durationInFramesField,
24929
+ layout: sequenceSchema.layout
24930
+ };
24923
24931
  var sequenceSchemaDefaultLayoutNone = {
24924
24932
  ...sequenceSchema,
24925
24933
  layout: {
@@ -25573,6 +25581,40 @@ var interpolateString = ({
25573
25581
  dimensions
25574
25582
  });
25575
25583
  };
25584
+ var validateTupleOutputRange = (outputRange) => {
25585
+ const dimensions = outputRange[0]?.length;
25586
+ if (dimensions === undefined) {
25587
+ throw new Error("outputRange must have at least 1 element");
25588
+ }
25589
+ if (dimensions === 0) {
25590
+ throw new TypeError("outputRange tuples must contain at least 1 number");
25591
+ }
25592
+ for (const output of outputRange) {
25593
+ if (output.length !== dimensions) {
25594
+ throw new TypeError(`outputRange tuples must all have the same length, but got ${dimensions} and ${output.length}`);
25595
+ }
25596
+ for (const value of output) {
25597
+ if (typeof value !== "number" || !Number.isFinite(value)) {
25598
+ throw new TypeError(`outputRange tuples must contain only finite numbers, but got [${output.join(",")}]`);
25599
+ }
25600
+ }
25601
+ }
25602
+ return dimensions;
25603
+ };
25604
+ var interpolateTuple = ({
25605
+ input,
25606
+ inputRange,
25607
+ outputRange,
25608
+ options
25609
+ }) => {
25610
+ const dimensions = validateTupleOutputRange(outputRange);
25611
+ return new Array(dimensions).fill(true).map((_, axis) => interpolateNumber({
25612
+ input,
25613
+ inputRange,
25614
+ outputRange: outputRange.map((output) => output[axis]),
25615
+ options
25616
+ }));
25617
+ };
25576
25618
  function checkValidInputRange(arr) {
25577
25619
  for (let i = 1;i < arr.length; ++i) {
25578
25620
  if (!(arr[i] > arr[i - 1])) {
@@ -25648,8 +25690,11 @@ function interpolate2(input, inputRange, outputRange, options) {
25648
25690
  }
25649
25691
  return interpolateString({ input, inputRange, outputRange, options });
25650
25692
  }
25693
+ if (outputRange.every((output) => Array.isArray(output))) {
25694
+ return interpolateTuple({ input, inputRange, outputRange, options });
25695
+ }
25651
25696
  if (!outputRange.every((output) => typeof output === "number")) {
25652
- throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
25697
+ throw new TypeError("outputRange must contain only numbers, numeric tuples, or supported scale, translate, and rotate strings");
25653
25698
  }
25654
25699
  checkInfiniteRange("outputRange", outputRange);
25655
25700
  return interpolateNumber({ input, inputRange, outputRange, options });
@@ -26162,8 +26207,9 @@ var interpolateKeyframedStatus = ({
26162
26207
  if (keyframes.length === 0) {
26163
26208
  return null;
26164
26209
  }
26165
- const inputRange = keyframes.map((k) => k.frame);
26166
- const outputs = keyframes.map((k) => k.value);
26210
+ const sortedKeyframes = [...keyframes].sort((a2, b2) => a2.frame - b2.frame);
26211
+ const inputRange = sortedKeyframes.map((k) => k.frame);
26212
+ const outputs = sortedKeyframes.map((k) => k.value);
26167
26213
  if (interpolationFunction === "interpolateColors") {
26168
26214
  if (!outputs.every((v) => typeof v === "string")) {
26169
26215
  return null;
@@ -27013,11 +27059,17 @@ var SequenceRefForwardingFunction = (props, ref) => {
27013
27059
  });
27014
27060
  };
27015
27061
  var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
27062
+ var SequenceWithoutSchema = SequenceInner;
27016
27063
  var Sequence = wrapInSchema({
27017
27064
  Component: SequenceInner,
27018
27065
  schema: sequenceSchema,
27019
27066
  supportsEffects: false
27020
27067
  });
27068
+ var SequenceWithoutFrom = wrapInSchema({
27069
+ Component: SequenceInner,
27070
+ schema: sequenceSchemaWithoutFrom,
27071
+ supportsEffects: false
27072
+ });
27021
27073
  var calculateImageFit = (fit, imageSize, canvasSize) => {
27022
27074
  switch (fit) {
27023
27075
  case "fill": {
@@ -33138,6 +33190,7 @@ var Internals = {
33138
33190
  SequenceStackTracesUpdateContext,
33139
33191
  wrapInSchema,
33140
33192
  sequenceSchema,
33193
+ SequenceWithoutSchema,
33141
33194
  sequenceStyleSchema,
33142
33195
  sequenceVisualStyleSchema,
33143
33196
  sequencePremountSchema,
@@ -33299,6 +33352,7 @@ var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
33299
33352
  });
33300
33353
  };
33301
33354
  var SeriesSequence = forwardRef13(SeriesSequenceRefForwardingFunction);
33355
+ var SequenceWithoutSchemaWithRef = SequenceWithoutSchema;
33302
33356
  var SeriesInner = (props2) => {
33303
33357
  const childrenValue = useMemo38(() => {
33304
33358
  let startFrame = 0;
@@ -33341,13 +33395,13 @@ var SeriesInner = (props2) => {
33341
33395
  }
33342
33396
  const currentStartFrame = startFrame + offset;
33343
33397
  startFrame += durationInFramesProp + offset;
33344
- return /* @__PURE__ */ jsx36(Sequence, {
33398
+ return /* @__PURE__ */ jsx36(SequenceWithoutSchemaWithRef, {
33399
+ ref: castedChild.ref,
33345
33400
  name: name || "<Series.Sequence>",
33346
33401
  _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
33347
33402
  from: currentStartFrame,
33348
33403
  durationInFrames: durationInFramesProp,
33349
33404
  ...passedProps,
33350
- ref: castedChild.ref,
33351
33405
  children: child
33352
33406
  });
33353
33407
  });
@@ -33370,7 +33424,6 @@ var Series = Object.assign(wrapInSchema({
33370
33424
  Sequence: SeriesSequence
33371
33425
  });
33372
33426
  addSequenceStackTraces(Series);
33373
- addSequenceStackTraces(SeriesSequence);
33374
33427
  var validateSpringDuration = (dur) => {
33375
33428
  if (typeof dur === "undefined") {
33376
33429
  return;