@remotion/promo-pages 4.0.540 → 4.0.541

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/Homepage.js CHANGED
@@ -254,7 +254,7 @@ var videoSources = {
254
254
  "remotion.media": "media-default-2026-10-28-98858a945958.mp4"
255
255
  };
256
256
  var imageSources = {
257
- SDK: "https://remotion.media/explore-remotion/sdk-code-centered-2026-10-28-3f656f8f25f7.png"
257
+ SDK: "https://remotion.media/explore-remotion/sdk-code-dark-plus-2026-11-04-785159157fed.png"
258
258
  };
259
259
  var ExploreSection = () => {
260
260
  const [hoveredTitle, setHoveredTitle] = useState2(null);
@@ -4055,8 +4055,9 @@ var cutPath = (d, length) => {
4055
4055
  if (summedUpLength + instructionAndInfo.length > length) {
4056
4056
  const remainingLength = length - summedUpLength;
4057
4057
  const progress = remainingLength / instructionAndInfo.length;
4058
+ const { instruction } = instructionAndInfo;
4058
4059
  const cut = cutInstruction({
4059
- instruction: instructionAndInfo.instruction,
4060
+ instruction: instruction.type === "Z" ? { type: "L", x: segment.startPoint.x, y: segment.startPoint.y } : instruction,
4060
4061
  lastPoint: instructionAndInfo.startPoint,
4061
4062
  progress
4062
4063
  });
@@ -4789,7 +4790,7 @@ var setComponentIdentityResolver = (resolver) => {
4789
4790
  var resolveComponentIdentity = (component) => {
4790
4791
  return componentIdentityResolver?.(component) ?? component;
4791
4792
  };
4792
- var getSingleChildComponent = (children) => {
4793
+ var getSingleChildElement = (children) => {
4793
4794
  const mountedChildren = React4.Children.toArray(children);
4794
4795
  if (mountedChildren.length !== 1) {
4795
4796
  return null;
@@ -4799,12 +4800,19 @@ var getSingleChildComponent = (children) => {
4799
4800
  return null;
4800
4801
  }
4801
4802
  if (child.type === IsNotInsideSeriesProvider) {
4802
- return getSingleChildComponent(child.props.children);
4803
+ return getSingleChildElement(child.props.children);
4803
4804
  }
4804
4805
  if (typeof child.type !== "function" && typeof child.type !== "object") {
4805
4806
  return null;
4806
4807
  }
4807
- return resolveComponentIdentity(child.type);
4808
+ return child;
4809
+ };
4810
+ var getSingleChildComponent = (children) => {
4811
+ const child = getSingleChildElement(children);
4812
+ return child === null ? null : resolveComponentIdentity(child.type);
4813
+ };
4814
+ var getSingleChildProps = (children) => {
4815
+ return getSingleChildElement(children)?.props ?? null;
4808
4816
  };
4809
4817
  var CompositionRegistryFallbackContext = createContext5(null);
4810
4818
  var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect3 : useLayoutEffect;
@@ -6212,9 +6220,11 @@ var makeOriginalSourceStack = ({
6212
6220
  fileName,
6213
6221
  lineNumber,
6214
6222
  columnNumber
6215
- }) => {
6216
- return `Error
6223
+ }, compiledSourceHash = null) => {
6224
+ const location = `Error
6217
6225
  at remotionOriginalSource (${ORIGINAL_SOURCE_STACK_PREFIX}${encodeURIComponent(fileName)}:${lineNumber}:${columnNumber})`;
6226
+ return compiledSourceHash === null ? location : `${location}
6227
+ at remotionCompiledSource (remotion-source-sha256:${compiledSourceHash})`;
6218
6228
  };
6219
6229
  var parseOriginalSourceStack = (stack) => {
6220
6230
  if (!stack) {
@@ -6244,7 +6254,7 @@ var setStackForControls = (controls, stack) => {
6244
6254
  var getStackForControls = (controls) => {
6245
6255
  return stacksByControls.get(controls) ?? null;
6246
6256
  };
6247
- var VERSION = "4.0.540";
6257
+ var VERSION = "4.0.541";
6248
6258
  var checkMultipleRemotionVersions = () => {
6249
6259
  if (typeof globalThis === "undefined") {
6250
6260
  return;
@@ -10000,7 +10010,7 @@ function hslToRgb(h, s, l) {
10000
10010
  return Math.round(r * 255) << 24 | Math.round(g * 255) << 16 | Math.round(b * 255) << 8;
10001
10011
  }
10002
10012
  function parse255(str) {
10003
- const int = Number.parseInt(str, 10);
10013
+ const int = Math.round(Number.parseFloat(str));
10004
10014
  if (int < 0) {
10005
10015
  return 0;
10006
10016
  }
@@ -11752,6 +11762,7 @@ var setSequenceWrapperRef = (ref, wrapperRef, node) => {
11752
11762
  ref.current = node;
11753
11763
  }
11754
11764
  };
11765
+ var getSingleChildPropsFromRef = (childrenRef) => getSingleChildProps(childrenRef.current);
11755
11766
  var RegularSequenceContentRefForwardingFunction = ({
11756
11767
  timing,
11757
11768
  from = 0,
@@ -11772,6 +11783,7 @@ var RegularSequenceContentRefForwardingFunction = ({
11772
11783
  _remotionInternalLoopDisplay: loopDisplay,
11773
11784
  _remotionInternalStack: stack,
11774
11785
  _remotionInternalSingleChildComponent: childComponentOverride,
11786
+ _remotionInternalSingleChildren: authoredChildrenOverride,
11775
11787
  _remotionInternalDocumentationLink: documentationLink,
11776
11788
  _remotionInternalPremountDisplay: premountDisplay,
11777
11789
  _remotionInternalPostmountDisplay: postmountDisplay,
@@ -11822,6 +11834,7 @@ var RegularSequenceContentRefForwardingFunction = ({
11822
11834
  loopPeriod,
11823
11835
  loopIteration,
11824
11836
  contentVisible,
11837
+ inheritedFrozenFrame,
11825
11838
  currentFrameRef
11826
11839
  } = timing;
11827
11840
  if (typeof contentDurationInFrames !== "number") {
@@ -11946,7 +11959,13 @@ var RegularSequenceContentRefForwardingFunction = ({
11946
11959
  }, [name]);
11947
11960
  const resolvedDocumentationLink = documentationLink ?? "https://www.remotion.dev/docs/sequence";
11948
11961
  const isInsideSeries = useContext28(IsInsideSeriesContext);
11949
- const singleChildComponent = useMemo22(() => childComponentOverride === undefined ? getSingleChildComponent(children) : childComponentOverride, [children, childComponentOverride]);
11962
+ const authoredChildren = authoredChildrenOverride === undefined ? children : authoredChildrenOverride;
11963
+ const singleChildComponent = useMemo22(() => childComponentOverride === undefined ? getSingleChildComponent(authoredChildren) : childComponentOverride, [authoredChildren, childComponentOverride]);
11964
+ const childrenRef = useRef8(authoredChildren);
11965
+ useLayoutEffect9(() => {
11966
+ childrenRef.current = authoredChildren;
11967
+ }, [authoredChildren]);
11968
+ const getRegisteredSingleChildProps = useMemo22(() => childComponentOverride === undefined ? getSingleChildPropsFromRef.bind(null, childrenRef) : null, [childComponentOverride]);
11950
11969
  const registrationStack = controls ? getStackForControls(controls) ?? stack ?? null : stack ?? null;
11951
11970
  const getStack = useMemo22(() => getSequenceStack.bind(null, registrationStack), [registrationStack]);
11952
11971
  const registeredFrozenFrame = typeof freeze === "number" ? freeze : null;
@@ -11955,7 +11974,8 @@ var RegularSequenceContentRefForwardingFunction = ({
11955
11974
  const parentCumulatedNegativeFrom = parentSequence?.cumulatedNegativeFrom ?? 0;
11956
11975
  const startMediaFrom = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom - cumulatedNegativeFrom : null;
11957
11976
  const mediaFrameAtSequenceZero = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom : null;
11958
- const frozenMediaFrame = isMedia && isMedia.type !== "image" && mediaFrameAtSequenceZero !== null ? registeredFrozenFrame === null ? null : mediaFrameAtSequenceZero + (resolvedLoopDisplay ? registeredFrozenFrame % resolvedLoopDisplay.durationInFrames : registeredFrozenFrame) * isMedia.data.playbackRate : null;
11977
+ const mediaFreezeFrame = registeredFrozenFrame ?? (contentVisible && !parentDormant && !premounting && !postmounting ? inheritedFrozenFrame : null);
11978
+ const frozenMediaFrame = isMedia && isMedia.type !== "image" && mediaFrameAtSequenceZero !== null && mediaFreezeFrame !== null ? mediaFrameAtSequenceZero + (resolvedLoopDisplay ? mediaFreezeFrame % resolvedLoopDisplay.durationInFrames : mediaFreezeFrame) * isMedia.data.playbackRate : null;
11959
11979
  const controlsSchema = controls?.schema;
11960
11980
  const controlsRuntimeValues = controls?.runtimeValues;
11961
11981
  const controlsOverrideId = controls?.overrideId;
@@ -11963,8 +11983,7 @@ var RegularSequenceContentRefForwardingFunction = ({
11963
11983
  const controlsComponentIdentity = controls?.componentIdentity;
11964
11984
  const controlsComponentName = controls?.componentName;
11965
11985
  const controlsVideoConfigValues = controls?.videoConfigValues;
11966
- const isInsideNonPremountFreeze = useIsInsideNonPremountFreeze();
11967
- const canInferDuration = (controlsComponentIdentity === "dev.remotion.remotion.Series" || controlsComponentIdentity === "dev.remotion.transitions.TransitionSeries") && !loop && registeredFrozenFrame === null && !isInsideNonPremountFreeze && !hidden;
11986
+ const canInferDuration = (controlsComponentIdentity === "dev.remotion.remotion.Series" || controlsComponentIdentity === "dev.remotion.transitions.TransitionSeries") && !loop && registeredFrozenFrame === null && inheritedFrozenFrame === null && !hidden;
11968
11987
  const autoDuration = canInferDuration && durationInFrames === undefined;
11969
11988
  const isSeriesChild = controlsComponentIdentity === "dev.remotion.remotion.Series.Sequence" || controlsComponentIdentity === "dev.remotion.transitions.TransitionSeries.Sequence" || controlsComponentIdentity === "dev.remotion.transitions.TransitionSeries.Transition" || controlsComponentIdentity === "dev.remotion.transitions.TransitionSeries.Overlay";
11970
11989
  const effectRuntimeValues = useMemo22(() => _remotionInternalEffects?.runtimeValues ?? null, [_remotionInternalEffects]);
@@ -12026,7 +12045,8 @@ var RegularSequenceContentRefForwardingFunction = ({
12026
12045
  refForOutline: refForOutline ?? null,
12027
12046
  isInsideSeries,
12028
12047
  frozenFrame: registeredFrozenFrame,
12029
- singleChildComponent: singleChildComponent ?? null
12048
+ singleChildComponent: singleChildComponent ?? null,
12049
+ getSingleChildProps: getRegisteredSingleChildProps
12030
12050
  };
12031
12051
  }
12032
12052
  return {
@@ -12059,7 +12079,8 @@ var RegularSequenceContentRefForwardingFunction = ({
12059
12079
  isInsideSeries,
12060
12080
  frozenFrame: registeredFrozenFrame,
12061
12081
  frozenMediaFrame,
12062
- singleChildComponent: singleChildComponent ?? null
12082
+ singleChildComponent: singleChildComponent ?? null,
12083
+ getSingleChildProps: getRegisteredSingleChildProps
12063
12084
  };
12064
12085
  }
12065
12086
  return {
@@ -12089,7 +12110,8 @@ var RegularSequenceContentRefForwardingFunction = ({
12089
12110
  refForOutline: refForOutline ?? null,
12090
12111
  isInsideSeries,
12091
12112
  frozenFrame: registeredFrozenFrame,
12092
- singleChildComponent: singleChildComponent ?? null
12113
+ singleChildComponent: singleChildComponent ?? null,
12114
+ getSingleChildProps: getRegisteredSingleChildProps
12093
12115
  };
12094
12116
  }, [
12095
12117
  id,
@@ -12123,7 +12145,8 @@ var RegularSequenceContentRefForwardingFunction = ({
12123
12145
  startMediaFrom,
12124
12146
  mediaFrameAtSequenceZero,
12125
12147
  frozenMediaFrame,
12126
- singleChildComponent
12148
+ singleChildComponent,
12149
+ getRegisteredSingleChildProps
12127
12150
  ]);
12128
12151
  const getSequenceForRegistration = useMemo22(() => getSequenceRegistration.bind(null, sequenceForRegistration), [sequenceForRegistration]);
12129
12152
  const registration = useSequenceRegistration({
@@ -12287,6 +12310,7 @@ var RegularSequenceRefForwardingFunction = (props, ref) => {
12287
12310
  const loopOffset = loopPeriod === null ? 0 : loopIteration * loopPeriod;
12288
12311
  const currentSequenceStart = cumulatedFrom + (from + loopOffset - trimBefore / playbackRate) / parentPlaybackRate;
12289
12312
  const currentFrame = typeof freeze === "number" ? freeze : (absoluteFrame - currentSequenceStart) * (parentPlaybackRate * playbackRate);
12313
+ const inheritedFrozenFrame = useIsInsideNonPremountFreeze() ? currentFrame : null;
12290
12314
  const currentFrameRef = useRef8(currentFrame);
12291
12315
  const timing = useMemo22(() => ({
12292
12316
  contentDurationInFrames,
@@ -12295,6 +12319,7 @@ var RegularSequenceRefForwardingFunction = (props, ref) => {
12295
12319
  loopPeriod,
12296
12320
  loopIteration,
12297
12321
  contentVisible,
12322
+ inheritedFrozenFrame,
12298
12323
  currentFrameRef
12299
12324
  }), [
12300
12325
  contentDurationInFrames,
@@ -12302,7 +12327,8 @@ var RegularSequenceRefForwardingFunction = (props, ref) => {
12302
12327
  actualDurationInFrames,
12303
12328
  loopPeriod,
12304
12329
  loopIteration,
12305
- contentVisible
12330
+ contentVisible,
12331
+ inheritedFrozenFrame
12306
12332
  ]);
12307
12333
  return /* @__PURE__ */ jsxs22(React27.Fragment, {
12308
12334
  children: [
@@ -12582,6 +12608,16 @@ var AbsoluteFill = withInteractivitySchema({
12582
12608
  supportsEffects: false
12583
12609
  });
12584
12610
  addSequenceStackTraces(AbsoluteFill);
12611
+ var getCanvasPropsFromSequenceProps = (props) => {
12612
+ const canvasProps = {};
12613
+ const mutableCanvasProps = canvasProps;
12614
+ for (const key in props) {
12615
+ if (Object.prototype.hasOwnProperty.call(props, key) && (key.startsWith("data-") || key.startsWith("aria-"))) {
12616
+ mutableCanvasProps[key] = props[key];
12617
+ }
12618
+ }
12619
+ return canvasProps;
12620
+ };
12585
12621
  var useCropStyle = ({
12586
12622
  cropLeft,
12587
12623
  cropRight,
@@ -13869,16 +13905,6 @@ var animatedImageSchema = {
13869
13905
  ...borderSchema2,
13870
13906
  ...borderRadiusSchema2
13871
13907
  };
13872
- var getCanvasPropsFromSequenceProps = (props) => {
13873
- const canvasProps = {};
13874
- const mutableCanvasProps = canvasProps;
13875
- for (const key in props) {
13876
- if (Object.prototype.hasOwnProperty.call(props, key) && (key.startsWith("data-") || key.startsWith("aria-"))) {
13877
- mutableCanvasProps[key] = props[key];
13878
- }
13879
- }
13880
- return canvasProps;
13881
- };
13882
13908
  var AnimatedImageContent = forwardRef4(({
13883
13909
  src,
13884
13910
  width,
@@ -14364,6 +14390,16 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
14364
14390
  });
14365
14391
  };
14366
14392
  var ArtifactThumbnail = Symbol("Thumbnail");
14393
+ var encodeBinaryArtifact = (bytes) => {
14394
+ if ("toBase64" in bytes && typeof bytes.toBase64 === "function") {
14395
+ return bytes.toBase64();
14396
+ }
14397
+ let binary = "";
14398
+ for (let offset = 0;offset < bytes.length; offset += 32768) {
14399
+ binary += String.fromCharCode(...bytes.subarray(offset, offset + 32768));
14400
+ }
14401
+ return btoa(binary);
14402
+ };
14367
14403
  var Artifact = ({ filename, content, downloadBehavior }) => {
14368
14404
  const { registerRenderAsset, unregisterRenderAsset } = useContext30(RenderAssetManager);
14369
14405
  const env = useRemotionEnvironment();
@@ -14379,7 +14415,7 @@ var Artifact = ({ filename, content, downloadBehavior }) => {
14379
14415
  registerRenderAsset({
14380
14416
  type: "artifact",
14381
14417
  id,
14382
- content: btoa(new TextDecoder("utf8").decode(content)),
14418
+ content: encodeBinaryArtifact(content),
14383
14419
  filename,
14384
14420
  frame,
14385
14421
  contentType: "binary",
@@ -16160,9 +16196,7 @@ var getMediaSyncAction = (input) => {
16160
16196
  ended,
16161
16197
  desiredUnclampedTime,
16162
16198
  mediaTagTime,
16163
- mediaTagLastUpdate,
16164
16199
  rvcTime,
16165
- rvcLastUpdate,
16166
16200
  isVariableFpsVideo,
16167
16201
  acceptableTimeShift,
16168
16202
  lastSeekDueToShift,
@@ -16174,13 +16208,11 @@ var getMediaSyncAction = (input) => {
16174
16208
  onlyWarnForMediaSeekingError,
16175
16209
  isPremounting,
16176
16210
  isPostmounting,
16177
- pauseWhenBuffering
16211
+ pauseWhenBuffering,
16212
+ mediaType
16178
16213
  } = input;
16179
16214
  const shouldBeTime = !Number.isNaN(duration) && Number.isFinite(duration) ? Math.min(duration, desiredUnclampedTime) : desiredUnclampedTime;
16180
- const timeShiftMediaTag = Math.abs(shouldBeTime - mediaTagTime);
16181
- const timeShiftRvcTag = rvcTime ? Math.abs(shouldBeTime - rvcTime) : null;
16182
- const mostRecentTimeshift = rvcLastUpdate && rvcTime > mediaTagLastUpdate ? timeShiftRvcTag : timeShiftMediaTag;
16183
- const timeShift = timeShiftRvcTag && !isVariableFpsVideo ? mostRecentTimeshift : timeShiftMediaTag;
16215
+ const timeShift = Math.abs(shouldBeTime - mediaTagTime);
16184
16216
  if (timeShift > acceptableTimeShift && lastSeekDueToShift !== shouldBeTime) {
16185
16217
  return {
16186
16218
  type: "seek-due-to-shift",
@@ -16193,18 +16225,23 @@ var getMediaSyncAction = (input) => {
16193
16225
  }
16194
16226
  const seekThreshold = playing ? 0.15 : 0.01;
16195
16227
  const makesSenseToSeek = Math.abs(currentTime - shouldBeTime) > seekThreshold;
16228
+ const audioLead = currentTime - shouldBeTime;
16229
+ const holdAudioUntilTimelineCatchesUp = mediaType === "audio" && playing && playbackRate > 0 && makesSenseToSeek && audioLead > 0 && audioLead <= acceptableTimeShift;
16196
16230
  const isSomethingElseBuffering = playerBuffering && !mediaTagBufferingOrStalled;
16197
16231
  if (!playing || isSomethingElseBuffering) {
16198
16232
  return {
16199
16233
  type: "seek-if-not-playing",
16200
16234
  shouldBeTime,
16201
- why: makesSenseToSeek ? `not playing or something else is buffering. time offset is over seek threshold (${seekThreshold})` : null
16235
+ why: makesSenseToSeek && !holdAudioUntilTimelineCatchesUp ? `not playing or something else is buffering. time offset is over seek threshold (${seekThreshold})` : null
16202
16236
  };
16203
16237
  }
16204
16238
  if (!playing || playerBuffering) {
16205
16239
  return { type: "none" };
16206
16240
  }
16207
16241
  const pausedCondition = paused && !ended;
16242
+ if (pausedCondition && holdAudioUntilTimelineCatchesUp) {
16243
+ return { type: "none" };
16244
+ }
16208
16245
  const firstFrameCondition = absoluteFrame === 0;
16209
16246
  if (pausedCondition || firstFrameCondition) {
16210
16247
  const reason = pausedCondition ? "media tag is paused" : "absolute frame is 0";
@@ -16218,19 +16255,15 @@ var getMediaSyncAction = (input) => {
16218
16255
  }
16219
16256
  return { type: "none" };
16220
16257
  };
16221
- var useCurrentTimeOfMediaTagWithUpdateTimeStamp = (mediaRef) => {
16222
- const lastUpdate = React35.useRef({
16223
- time: mediaRef.current?.currentTime ?? 0,
16224
- lastUpdate: performance.now()
16258
+ var useCurrentTimeOfMediaTag = (mediaRef) => {
16259
+ const currentTime = React35.useRef({
16260
+ time: mediaRef.current?.currentTime ?? 0
16225
16261
  });
16226
16262
  const nowCurrentTime = mediaRef.current?.currentTime ?? null;
16227
16263
  if (nowCurrentTime !== null) {
16228
- if (lastUpdate.current.time !== nowCurrentTime) {
16229
- lastUpdate.current.time = nowCurrentTime;
16230
- lastUpdate.current.lastUpdate = performance.now();
16231
- }
16264
+ currentTime.current.time = nowCurrentTime;
16232
16265
  }
16233
- return lastUpdate;
16266
+ return currentTime;
16234
16267
  };
16235
16268
  var seek = ({
16236
16269
  mediaRef,
@@ -16397,8 +16430,7 @@ var useRequestVideoCallbackTime = ({
16397
16430
  const { current } = mediaRef;
16398
16431
  if (current) {
16399
16432
  currentTime.current = {
16400
- time: current.currentTime,
16401
- lastUpdate: performance.now()
16433
+ time: current.currentTime
16402
16434
  };
16403
16435
  } else {
16404
16436
  currentTime.current = null;
@@ -16428,8 +16460,7 @@ var useRequestVideoCallbackTime = ({
16428
16460
  }
16429
16461
  }
16430
16462
  currentTime.current = {
16431
- time: info.mediaTime,
16432
- lastUpdate: performance.now()
16463
+ time: info.mediaTime
16433
16464
  };
16434
16465
  request();
16435
16466
  });
@@ -16560,7 +16591,7 @@ var useMediaPlayback = ({
16560
16591
  lastSeek,
16561
16592
  onVariableFpsVideoDetected
16562
16593
  });
16563
- const mediaTagCurrentTime = useCurrentTimeOfMediaTagWithUpdateTimeStamp(mediaRef);
16594
+ const mediaTagCurrentTime = useCurrentTimeOfMediaTag(mediaRef);
16564
16595
  const desiredUnclampedTime = getMediaTime({
16565
16596
  frame,
16566
16597
  playbackRate: localPlaybackRate,
@@ -16641,9 +16672,7 @@ var useMediaPlayback = ({
16641
16672
  ended: current.ended,
16642
16673
  desiredUnclampedTime,
16643
16674
  mediaTagTime: mediaTagCurrentTime.current.time,
16644
- mediaTagLastUpdate: mediaTagCurrentTime.current.lastUpdate,
16645
16675
  rvcTime: rvcCurrentTime.current?.time ?? null,
16646
- rvcLastUpdate: rvcCurrentTime.current?.lastUpdate ?? null,
16647
16676
  isVariableFpsVideo: Boolean(isVariableFpsVideoMap.current[src]),
16648
16677
  acceptableTimeShift: acceptableTimeShiftButLessThanDuration,
16649
16678
  lastSeekDueToShift: lastSeekDueToShift.current,
@@ -16655,7 +16684,8 @@ var useMediaPlayback = ({
16655
16684
  onlyWarnForMediaSeekingError,
16656
16685
  isPremounting,
16657
16686
  isPostmounting,
16658
- pauseWhenBuffering
16687
+ pauseWhenBuffering,
16688
+ mediaType
16659
16689
  });
16660
16690
  if (action.type === "none") {
16661
16691
  return;
@@ -17499,7 +17529,8 @@ var SolidInner = ({
17499
17529
  pixelDensity,
17500
17530
  overrideId,
17501
17531
  videoConfigValues,
17502
- reference
17532
+ reference,
17533
+ canvasProps
17503
17534
  }) => {
17504
17535
  const { delayRender, continueRender, cancelRender } = useDelayRender();
17505
17536
  const resolvedPixelDensity = resolveSolidPixelDensity(pixelDensity);
@@ -17587,6 +17618,7 @@ var SolidInner = ({
17587
17618
  };
17588
17619
  }, [height, style, width]);
17589
17620
  return /* @__PURE__ */ jsx31("canvas", {
17621
+ ...canvasProps,
17590
17622
  ref: canvasRef,
17591
17623
  width: canvasWidth,
17592
17624
  height: canvasHeight,
@@ -17683,6 +17715,7 @@ var SolidOuter = forwardRef8(({
17683
17715
  _remotionInternalIsPostmounting: postmountingActive,
17684
17716
  children: /* @__PURE__ */ jsx31(SequenceContent, {
17685
17717
  children: /* @__PURE__ */ jsx31(SolidInner, {
17718
+ canvasProps: getCanvasPropsFromSequenceProps(props),
17686
17719
  reference: actualRef,
17687
17720
  videoConfigValues: controls?.videoConfigValues ?? null,
17688
17721
  overrideId: controls?.overrideId ?? null,
@@ -20093,7 +20126,7 @@ var createElementSourceProxy = (api, sourceArgumentIndex, getSourceFileName) =>
20093
20126
  fileName: getSourceFileName(source.fileName),
20094
20127
  lineNumber: source.lineNumber,
20095
20128
  columnNumber: source.columnNumber - 1
20096
- });
20129
+ }, typeof source.__remotionCompiledSourceHash === "string" ? source.__remotionCompiledSourceHash : null);
20097
20130
  } else {
20098
20131
  const { stackTraceLimit } = Error;
20099
20132
  const canLimitStack = typeof stackTraceLimit === "number" && stackTraceLimit > 2 && Object.getOwnPropertyDescriptor(Error, "stackTraceLimit")?.writable;
@@ -36212,6 +36245,8 @@ var FreePricing = ({ termsHref, faqHref }) => {
36212
36245
  children: [
36213
36246
  /* @__PURE__ */ jsx74("a", {
36214
36247
  href: termsHref,
36248
+ target: termsHref.startsWith("http") ? "_blank" : undefined,
36249
+ rel: "noopener noreferrer",
36215
36250
  className: "underline underline-offset-4 text-inherit font-brand",
36216
36251
  children: "Terms"
36217
36252
  }),
@@ -36665,7 +36700,7 @@ var Pricing = ({
36665
36700
  faqHref = "/docs/license/faq",
36666
36701
  faqLabel = "License FAQ",
36667
36702
  licenseHref = "https://github.com/remotion-dev/remotion/blob/main/LICENSE.md",
36668
- termsHref = "/docs/terms",
36703
+ termsHref = "https://www.remotion.dev/docs/terms",
36669
36704
  purchaseHref = "https://remotion.pro/dashboard"
36670
36705
  }) => {
36671
36706
  const faqLinkTarget = useMemo66(() => {