@remotion/promo-pages 4.0.466 → 4.0.467

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
@@ -1,26 +1,15 @@
1
- var __create = Object.create;
2
- var __getProtoOf = Object.getPrototypeOf;
3
1
  var __defProp = Object.defineProperty;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __toESM = (mod, isNodeMode, target) => {
7
- target = mod != null ? __create(__getProtoOf(mod)) : {};
8
- const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
9
- for (let key of __getOwnPropNames(mod))
10
- if (!__hasOwnProp.call(to, key))
11
- __defProp(to, key, {
12
- get: () => mod[key],
13
- enumerable: true
14
- });
15
- return to;
16
- };
2
+ var __returnValue = (v) => v;
3
+ function __exportSetter(name, newValue) {
4
+ this[name] = __returnValue.bind(null, newValue);
5
+ }
17
6
  var __export = (target, all) => {
18
7
  for (var name in all)
19
8
  __defProp(target, name, {
20
9
  get: all[name],
21
10
  enumerable: true,
22
11
  configurable: true,
23
- set: (newValue) => all[name] = () => newValue
12
+ set: __exportSetter.bind(all, name)
24
13
  });
25
14
  };
26
15
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
@@ -911,7 +900,7 @@ var experts = [
911
900
  }
912
901
  ];
913
902
  // src/components/experts/ExpertsPage.tsx
914
- import { useMemo as useMemo39 } from "react";
903
+ import { useMemo as useMemo40 } from "react";
915
904
 
916
905
  // ../core/dist/esm/index.mjs
917
906
  import { createContext } from "react";
@@ -1081,84 +1070,97 @@ import {
1081
1070
  } from "react";
1082
1071
  import { jsx as jsx23 } from "react/jsx-runtime";
1083
1072
  import { jsx as jsx24 } from "react/jsx-runtime";
1084
- import { forwardRef as forwardRef10, useCallback as useCallback16, useState as useState16 } from "react";
1085
- import { jsx as jsx25 } from "react/jsx-runtime";
1086
1073
  import {
1074
+ forwardRef as forwardRef10,
1087
1075
  useCallback as useCallback17,
1076
+ useContext as useContext33,
1077
+ useEffect as useEffect16,
1078
+ useMemo as useMemo31,
1079
+ useState as useState16
1080
+ } from "react";
1081
+ import {
1082
+ useCallback as useCallback16,
1088
1083
  useContext as useContext32,
1089
1084
  useImperativeHandle as useImperativeHandle6,
1090
1085
  useLayoutEffect as useLayoutEffect10,
1091
1086
  useRef as useRef21
1092
1087
  } from "react";
1088
+ import { jsx as jsx25 } from "react/jsx-runtime";
1093
1089
  import { jsx as jsx26 } from "react/jsx-runtime";
1090
+ import { forwardRef as forwardRef11, useCallback as useCallback18, useState as useState17 } from "react";
1091
+ import { jsx as jsx27 } from "react/jsx-runtime";
1094
1092
  import { createRef as createRef3 } from "react";
1095
1093
  import React28 from "react";
1096
1094
  import {
1097
- useCallback as useCallback18,
1095
+ useCallback as useCallback19,
1098
1096
  useImperativeHandle as useImperativeHandle7,
1099
- useMemo as useMemo31,
1097
+ useMemo as useMemo32,
1100
1098
  useRef as useRef22,
1101
- useState as useState17
1099
+ useState as useState18
1102
1100
  } from "react";
1103
- import { jsx as jsx27 } from "react/jsx-runtime";
1104
- import React29 from "react";
1105
- import { useMemo as useMemo33 } from "react";
1106
- import { createContext as createContext23, useContext as useContext33, useMemo as useMemo32 } from "react";
1107
1101
  import { jsx as jsx28 } from "react/jsx-runtime";
1102
+ import React29 from "react";
1103
+ import { useMemo as useMemo34 } from "react";
1104
+ import { createContext as createContext23, useContext as useContext34, useMemo as useMemo33 } from "react";
1108
1105
  import { jsx as jsx29 } from "react/jsx-runtime";
1106
+ import { jsx as jsx30 } from "react/jsx-runtime";
1109
1107
  import React31 from "react";
1110
1108
  import React32, { createContext as createContext24 } from "react";
1111
- import { useCallback as useCallback21 } from "react";
1109
+ import { useCallback as useCallback22 } from "react";
1112
1110
  import {
1113
- useCallback as useCallback19,
1114
- useContext as useContext34,
1115
- useEffect as useEffect16,
1111
+ useCallback as useCallback20,
1112
+ useContext as useContext35,
1113
+ useEffect as useEffect17,
1116
1114
  useLayoutEffect as useLayoutEffect11,
1117
- useMemo as useMemo34,
1118
- useState as useState18
1115
+ useMemo as useMemo35,
1116
+ useState as useState19
1119
1117
  } from "react";
1120
- import { jsx as jsx30 } from "react/jsx-runtime";
1118
+ import { jsx as jsx31 } from "react/jsx-runtime";
1121
1119
  import React34, {
1122
- forwardRef as forwardRef11,
1123
- useContext as useContext35,
1124
- useEffect as useEffect18,
1120
+ forwardRef as forwardRef12,
1121
+ useContext as useContext36,
1122
+ useEffect as useEffect19,
1125
1123
  useImperativeHandle as useImperativeHandle8,
1126
- useMemo as useMemo35,
1124
+ useMemo as useMemo36,
1127
1125
  useRef as useRef23,
1128
- useState as useState19,
1129
- useCallback as useCallback20
1126
+ useState as useState20,
1127
+ useCallback as useCallback21
1130
1128
  } from "react";
1131
- import { useEffect as useEffect17 } from "react";
1132
- import { jsx as jsx31 } from "react/jsx-runtime";
1129
+ import { useEffect as useEffect18 } from "react";
1133
1130
  import { jsx as jsx32 } from "react/jsx-runtime";
1134
- import React36, { useMemo as useMemo36 } from "react";
1135
1131
  import { jsx as jsx33 } from "react/jsx-runtime";
1136
- import { Children, forwardRef as forwardRef12, useMemo as useMemo37 } from "react";
1132
+ import React36, { useMemo as useMemo37 } from "react";
1133
+ import { jsx as jsx34 } from "react/jsx-runtime";
1134
+ import { Children, forwardRef as forwardRef13, useMemo as useMemo38 } from "react";
1137
1135
  import React37 from "react";
1138
1136
  import React38, { createContext as createContext25 } from "react";
1139
- import { jsx as jsx34 } from "react/jsx-runtime";
1140
1137
  import { jsx as jsx35 } from "react/jsx-runtime";
1138
+ import { jsx as jsx36 } from "react/jsx-runtime";
1141
1139
  import React40 from "react";
1142
- import { forwardRef as forwardRef14, useCallback as useCallback22, useContext as useContext37 } from "react";
1140
+ import { forwardRef as forwardRef15, useCallback as useCallback23, useContext as useContext38 } from "react";
1143
1141
  import {
1144
- forwardRef as forwardRef13,
1145
- useContext as useContext36,
1146
- useEffect as useEffect19,
1142
+ forwardRef as forwardRef14,
1143
+ useContext as useContext37,
1144
+ useEffect as useEffect20,
1147
1145
  useImperativeHandle as useImperativeHandle9,
1148
1146
  useLayoutEffect as useLayoutEffect12,
1149
- useMemo as useMemo38,
1147
+ useMemo as useMemo39,
1150
1148
  useRef as useRef24
1151
1149
  } from "react";
1152
- import { jsx as jsx36 } from "react/jsx-runtime";
1153
1150
  import { jsx as jsx37 } from "react/jsx-runtime";
1151
+ import { jsx as jsx38 } from "react/jsx-runtime";
1154
1152
  var __defProp2 = Object.defineProperty;
1153
+ var __returnValue2 = (v) => v;
1154
+ function __exportSetter2(name, newValue) {
1155
+ this[name] = __returnValue2.bind(null, newValue);
1156
+ }
1155
1157
  var __export2 = (target, all) => {
1156
1158
  for (var name in all)
1157
1159
  __defProp2(target, name, {
1158
1160
  get: all[name],
1159
1161
  enumerable: true,
1160
1162
  configurable: true,
1161
- set: (newValue) => all[name] = () => newValue
1163
+ set: __exportSetter2.bind(all, name)
1162
1164
  });
1163
1165
  };
1164
1166
  if (typeof createContext !== "function") {
@@ -2273,7 +2275,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2273
2275
  var addSequenceStackTraces = (component) => {
2274
2276
  componentsToAddStacksTo.push(component);
2275
2277
  };
2276
- var VERSION = "4.0.466";
2278
+ var VERSION = "4.0.467";
2277
2279
  var checkMultipleRemotionVersions = () => {
2278
2280
  if (typeof globalThis === "undefined") {
2279
2281
  return;
@@ -3595,6 +3597,54 @@ var SequenceRefForwardingFunction = (props, ref) => {
3595
3597
  };
3596
3598
  var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
3597
3599
  var Sequence = wrapInSchema(SequenceInner, sequenceSchema);
3600
+ var calculateImageFit = (fit, imageSize, canvasSize) => {
3601
+ switch (fit) {
3602
+ case "fill": {
3603
+ return [
3604
+ 0,
3605
+ 0,
3606
+ imageSize.width,
3607
+ imageSize.height,
3608
+ 0,
3609
+ 0,
3610
+ canvasSize.width,
3611
+ canvasSize.height
3612
+ ];
3613
+ }
3614
+ case "contain": {
3615
+ const ratio = Math.min(canvasSize.width / imageSize.width, canvasSize.height / imageSize.height);
3616
+ const centerX = (canvasSize.width - imageSize.width * ratio) / 2;
3617
+ const centerY = (canvasSize.height - imageSize.height * ratio) / 2;
3618
+ return [
3619
+ 0,
3620
+ 0,
3621
+ imageSize.width,
3622
+ imageSize.height,
3623
+ centerX,
3624
+ centerY,
3625
+ imageSize.width * ratio,
3626
+ imageSize.height * ratio
3627
+ ];
3628
+ }
3629
+ case "cover": {
3630
+ const ratio = Math.max(canvasSize.width / imageSize.width, canvasSize.height / imageSize.height);
3631
+ const centerX = (canvasSize.width - imageSize.width * ratio) / 2;
3632
+ const centerY = (canvasSize.height - imageSize.height * ratio) / 2;
3633
+ return [
3634
+ 0,
3635
+ 0,
3636
+ imageSize.width,
3637
+ imageSize.height,
3638
+ centerX,
3639
+ centerY,
3640
+ imageSize.width * ratio,
3641
+ imageSize.height * ratio
3642
+ ];
3643
+ }
3644
+ default:
3645
+ throw new Error("Unknown fit: " + fit);
3646
+ }
3647
+ };
3598
3648
  var WEBGL_CONTEXT_DOCS_URL = "https://remotion.dev/docs/troubleshooting/webgl2-context";
3599
3649
  var webGlContextErrorMessage = (versionLabel, effectName) => `Failed to acquire ${versionLabel} context for ${effectName}. ` + 'Pass --gl=angle when using the CLI, set chromiumOptions: { gl: "angle" } when using SSR APIs, ' + 'or set "OpenGL render backend" to "angle" in the Advanced section when rendering in the Studio. ' + `See ${WEBGL_CONTEXT_DOCS_URL}`;
3600
3650
  var createWebGLContextError = (effectName) => new Error(webGlContextErrorMessage("WebGL", effectName));
@@ -3847,54 +3897,6 @@ var useEffectChainState = () => {
3847
3897
  }
3848
3898
  }), []);
3849
3899
  };
3850
- var calcArgs = (fit, frameSize, canvasSize) => {
3851
- switch (fit) {
3852
- case "fill": {
3853
- return [
3854
- 0,
3855
- 0,
3856
- frameSize.width,
3857
- frameSize.height,
3858
- 0,
3859
- 0,
3860
- canvasSize.width,
3861
- canvasSize.height
3862
- ];
3863
- }
3864
- case "contain": {
3865
- const ratio = Math.min(canvasSize.width / frameSize.width, canvasSize.height / frameSize.height);
3866
- const centerX = (canvasSize.width - frameSize.width * ratio) / 2;
3867
- const centerY = (canvasSize.height - frameSize.height * ratio) / 2;
3868
- return [
3869
- 0,
3870
- 0,
3871
- frameSize.width,
3872
- frameSize.height,
3873
- centerX,
3874
- centerY,
3875
- frameSize.width * ratio,
3876
- frameSize.height * ratio
3877
- ];
3878
- }
3879
- case "cover": {
3880
- const ratio = Math.max(canvasSize.width / frameSize.width, canvasSize.height / frameSize.height);
3881
- const centerX = (canvasSize.width - frameSize.width * ratio) / 2;
3882
- const centerY = (canvasSize.height - frameSize.height * ratio) / 2;
3883
- return [
3884
- 0,
3885
- 0,
3886
- frameSize.width,
3887
- frameSize.height,
3888
- centerX,
3889
- centerY,
3890
- frameSize.width * ratio,
3891
- frameSize.height * ratio
3892
- ];
3893
- }
3894
- default:
3895
- throw new Error("Unknown fit: " + fit);
3896
- }
3897
- };
3898
3900
  var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effects }, ref) => {
3899
3901
  const canvasRef = useRef8(null);
3900
3902
  const chainState = useEffectChainState();
@@ -3904,7 +3906,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effec
3904
3906
  }
3905
3907
  return document.createElement("canvas");
3906
3908
  }, []);
3907
- const draw = useCallback6(async (imageData) => {
3909
+ const draw = useCallback6((imageData) => {
3908
3910
  const canvas = canvasRef.current;
3909
3911
  const canvasWidth = width ?? imageData.displayWidth;
3910
3912
  const canvasHeight = height ?? imageData.displayHeight;
@@ -3920,7 +3922,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effec
3920
3922
  if (!sourceCtx) {
3921
3923
  throw new Error("Could not get 2d context for source canvas");
3922
3924
  }
3923
- sourceCtx.drawImage(imageData, ...calcArgs(fit, {
3925
+ sourceCtx.drawImage(imageData, ...calculateImageFit(fit, {
3924
3926
  height: imageData.displayHeight,
3925
3927
  width: imageData.displayWidth
3926
3928
  }, {
@@ -5428,9 +5430,43 @@ var useSingletonAudioContext = ({
5428
5430
  gainNode.connect(audioContext.destination);
5429
5431
  Log.trace({ logLevel, tag: "audio" }, "Creating new audio context");
5430
5432
  audioContext.suspend();
5433
+ let transitionTarget = null;
5434
+ const getState = () => {
5435
+ const nativeState = audioContext.state;
5436
+ if (transitionTarget === "running" && nativeState !== "running") {
5437
+ return "suspended-to-running";
5438
+ }
5439
+ if (transitionTarget === "suspended" && nativeState !== "suspended") {
5440
+ return "running-to-suspended";
5441
+ }
5442
+ return nativeState;
5443
+ };
5444
+ const resume = () => {
5445
+ transitionTarget = "running";
5446
+ const promise = audioContext.resume();
5447
+ promise.finally(() => {
5448
+ if (transitionTarget === "running") {
5449
+ transitionTarget = null;
5450
+ }
5451
+ });
5452
+ return promise;
5453
+ };
5454
+ const suspend = () => {
5455
+ transitionTarget = "suspended";
5456
+ const promise = audioContext.suspend();
5457
+ promise.finally(() => {
5458
+ if (transitionTarget === "suspended") {
5459
+ transitionTarget = null;
5460
+ }
5461
+ });
5462
+ return promise;
5463
+ };
5431
5464
  return {
5432
5465
  audioContext,
5433
- gainNode
5466
+ gainNode,
5467
+ getState,
5468
+ resume,
5469
+ suspend
5434
5470
  };
5435
5471
  }, [logLevel, latencyHint, env.isRendering, audioEnabled]);
5436
5472
  return context;
@@ -5483,6 +5519,15 @@ var didPropChange = (key, newProp, prevProp) => {
5483
5519
  };
5484
5520
  var SharedAudioContext = createContext21(null);
5485
5521
  var SharedAudioTagsContext = createContext21(null);
5522
+ var shouldSaveForLater = (state) => {
5523
+ if (state === "suspended" || state === "running-to-suspended" || state === "interrupted") {
5524
+ return true;
5525
+ }
5526
+ if (state === "running" || state === "suspended-to-running") {
5527
+ return false;
5528
+ }
5529
+ throw new Error(`Unexpected audio context state: ${state}`);
5530
+ };
5486
5531
  var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled }) => {
5487
5532
  const logLevel = useLogLevel();
5488
5533
  const ctxAndGain = useSingletonAudioContext({
@@ -5518,7 +5563,6 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
5518
5563
  return ({
5519
5564
  node,
5520
5565
  mediaTimestamp,
5521
- currentTime,
5522
5566
  scheduledTime,
5523
5567
  duration,
5524
5568
  offset,
@@ -5527,7 +5571,14 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
5527
5571
  if (!ctxAndGain) {
5528
5572
  throw new Error("Audio context not found");
5529
5573
  }
5530
- const saveForLater = ctxAndGain.audioContext.state === "suspended" && !isResuming.current;
5574
+ const currentState = ctxAndGain.getState();
5575
+ if (currentState === "closed") {
5576
+ return {
5577
+ type: "not-started",
5578
+ reason: "audio context is closed"
5579
+ };
5580
+ }
5581
+ const saveForLater = shouldSaveForLater(currentState);
5531
5582
  if (duration > 0) {
5532
5583
  if (saveForLater) {
5533
5584
  nodesToResume.current.set(node, {
@@ -5547,7 +5598,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
5547
5598
  const prev = prevEndTimes.current;
5548
5599
  const scheduledMismatch = prev.scheduledEndTime !== null && Math.abs(scheduledTime - prev.scheduledEndTime) > 0.001;
5549
5600
  const mediaMismatch = prev.mediaEndTime !== null && Math.abs(mediaTime - prev.mediaEndTime) > 0.001;
5550
- Log.verbose({ logLevel, tag: "audio-scheduling" }, "scheduled %c%s%c %s %c%s%c %s %c%s%c %s %s %s %s %s", scheduledMismatch ? "color: red; font-weight: bold" : "", scheduledTime.toFixed(4), "", scheduledEndTime.toFixed(4), mediaMismatch ? "color: red; font-weight: bold" : "", mediaTime.toFixed(4), "", mediaEndTime.toFixed(4), duration < 0 ? "color: red; font-weight: bold" : timeDiff < 0 ? "color: red; font-weight: bold" : "color: blue; font-weight: bold", duration < 0 ? "missed " + Math.abs(offset).toFixed(2) + "s" : Math.abs(timeDiff).toFixed(2) + (timeDiff < 0 ? " delay" : " ahead"), "", "current=" + currentTime.toFixed(4), "actualcurrent=" + ctxAndGain.audioContext.currentTime.toFixed(4), "offset=" + offset.toFixed(4), "latency=" + latency.toFixed(4), "state=" + ctxAndGain.audioContext.state, originalUnloopedMediaTimestamp !== mediaTime ? "original_ts=" + originalUnloopedMediaTimestamp.toFixed(4) : "", "action=" + (saveForLater ? "schedule" : "start"), "");
5601
+ Log.verbose({ logLevel, tag: "audio-scheduling" }, "scheduled %c%s%c %s %c%s%c %s %c%s%c %s %s %s %s %s", scheduledMismatch ? "color: red; font-weight: bold" : "", scheduledTime.toFixed(4), "", scheduledEndTime.toFixed(4), mediaMismatch ? "color: red; font-weight: bold" : "", mediaTime.toFixed(4), "", mediaEndTime.toFixed(4), duration < 0 ? "color: red; font-weight: bold" : timeDiff < 0 ? "color: red; font-weight: bold" : "color: blue; font-weight: bold", duration < 0 ? "missed " + Math.abs(offset).toFixed(2) + "s" : Math.abs(timeDiff).toFixed(2) + (timeDiff < 0 ? " delay" : " ahead"), "", "current=" + ctxAndGain.audioContext.currentTime.toFixed(4), "offset=" + offset.toFixed(4), "latency=" + latency.toFixed(4), "state=" + ctxAndGain.audioContext.state, originalUnloopedMediaTimestamp !== mediaTime ? "original_ts=" + originalUnloopedMediaTimestamp.toFixed(4) : "", "action=" + (saveForLater ? "schedule" : "start"), "");
5551
5602
  prev.scheduledEndTime = scheduledEndTime;
5552
5603
  prev.mediaEndTime = mediaEndTime;
5553
5604
  return duration > 0 ? {
@@ -5574,7 +5625,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
5574
5625
  node.start(r.scheduledTime, r.offset, r.duration);
5575
5626
  });
5576
5627
  nodesToResume.current.clear();
5577
- const resumePromise = ctxAndGain.audioContext.resume();
5628
+ const resumePromise = ctxAndGain.resume();
5578
5629
  isResuming.current = new Promise((resolve) => {
5579
5630
  waitUntilActuallyResumed(ctxAndGain.audioContext, logLevel).then(resolve);
5580
5631
  resumePromise.catch((err) => {
@@ -5591,17 +5642,18 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
5591
5642
  }, []);
5592
5643
  const suspend = useCallback10(() => {
5593
5644
  if (!ctxAndGain) {
5594
- return;
5645
+ return Promise.resolve();
5595
5646
  }
5596
5647
  if (!audioContextIsPlayingEventually.current) {
5597
- return;
5648
+ return Promise.resolve();
5598
5649
  }
5599
5650
  audioContextIsPlayingEventually.current = false;
5600
- ctxAndGain.audioContext.suspend();
5651
+ return ctxAndGain.suspend();
5601
5652
  }, [ctxAndGain]);
5602
5653
  const audioContextValue = useMemo23(() => {
5603
5654
  return {
5604
5655
  audioContext: ctxAndGain?.audioContext ?? null,
5656
+ getAudioContextState: () => ctxAndGain?.getState() ?? null,
5605
5657
  gainNode: ctxAndGain?.gainNode ?? null,
5606
5658
  audioSyncAnchor,
5607
5659
  audioSyncAnchorEmitter,
@@ -6093,7 +6145,8 @@ var getTimelineDuration = ({
6093
6145
  trimAfter
6094
6146
  });
6095
6147
  if (parentSequenceDurationInFrames !== null) {
6096
- return Math.floor(Math.min(parentSequenceDurationInFrames * playbackRate, mediaDuration));
6148
+ const cappedDuration = Math.min(parentSequenceDurationInFrames * playbackRate, mediaDuration);
6149
+ return Number(cappedDuration.toFixed(10));
6097
6150
  }
6098
6151
  return mediaDuration;
6099
6152
  };
@@ -7696,41 +7749,6 @@ var AudioRefForwardingFunction = (props, ref) => {
7696
7749
  var Html5Audio = forwardRef9(AudioRefForwardingFunction);
7697
7750
  addSequenceStackTraces(Html5Audio);
7698
7751
  var Audio = Html5Audio;
7699
- var kSplineTableSize = 11;
7700
- var kSampleStepSize = 1 / (kSplineTableSize - 1);
7701
- var IFrameRefForwarding = ({
7702
- onLoad,
7703
- onError,
7704
- delayRenderRetries,
7705
- delayRenderTimeoutInMilliseconds,
7706
- ...props2
7707
- }, ref) => {
7708
- const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
7709
- const [handle] = useState16(() => delayRender2(`Loading <IFrame> with source ${props2.src}`, {
7710
- retries: delayRenderRetries ?? undefined,
7711
- timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
7712
- }));
7713
- const didLoad = useCallback16((e) => {
7714
- continueRender2(handle);
7715
- onLoad?.(e);
7716
- }, [handle, onLoad, continueRender2]);
7717
- const didGetError = useCallback16((e) => {
7718
- continueRender2(handle);
7719
- if (onError) {
7720
- onError(e);
7721
- } else {
7722
- console.error("Error loading iframe:", e, "Handle the event using the onError() prop to make this message disappear.");
7723
- }
7724
- }, [handle, onError, continueRender2]);
7725
- return /* @__PURE__ */ jsx25("iframe", {
7726
- referrerPolicy: "strict-origin-when-cross-origin",
7727
- ...props2,
7728
- ref,
7729
- onError: didGetError,
7730
- onLoad: didLoad
7731
- });
7732
- };
7733
- var IFrame = forwardRef10(IFrameRefForwarding);
7734
7752
  function exponentialBackoff(errorCount) {
7735
7753
  return 1000 * 2 ** (errorCount - 1);
7736
7754
  }
@@ -7749,6 +7767,7 @@ var ImgContent = ({
7749
7767
  delayRenderTimeoutInMilliseconds,
7750
7768
  onImageFrame,
7751
7769
  crossOrigin,
7770
+ decoding,
7752
7771
  ref,
7753
7772
  ...props2
7754
7773
  }) => {
@@ -7764,7 +7783,7 @@ var ImgContent = ({
7764
7783
  return imageRef.current;
7765
7784
  }, []);
7766
7785
  const actualSrc = usePreload(src);
7767
- const retryIn = useCallback17((timeout) => {
7786
+ const retryIn = useCallback16((timeout) => {
7768
7787
  if (!imageRef.current) {
7769
7788
  return;
7770
7789
  }
@@ -7782,7 +7801,7 @@ var ImgContent = ({
7782
7801
  }, timeout);
7783
7802
  }, []);
7784
7803
  const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
7785
- const didGetError = useCallback17((e) => {
7804
+ const didGetError = useCallback16((e) => {
7786
7805
  if (!errors.current) {
7787
7806
  return;
7788
7807
  }
@@ -7870,18 +7889,18 @@ var ImgContent = ({
7870
7889
  delayRender2
7871
7890
  ]);
7872
7891
  }
7873
- const { isClientSideRendering } = useRemotionEnvironment();
7892
+ const { isClientSideRendering, isRendering } = useRemotionEnvironment();
7874
7893
  const crossOriginValue = getCrossOriginValue({
7875
7894
  crossOrigin,
7876
7895
  requestsVideoFrame: false,
7877
7896
  isClientSideRendering
7878
7897
  });
7879
- return /* @__PURE__ */ jsx26("img", {
7898
+ return /* @__PURE__ */ jsx25("img", {
7880
7899
  ...props2,
7881
7900
  ref: imageRef,
7882
7901
  crossOrigin: crossOriginValue,
7883
7902
  onError: didGetError,
7884
- decoding: "sync"
7903
+ decoding: isRendering ? "sync" : decoding
7885
7904
  });
7886
7905
  };
7887
7906
  var ImgInner = ({
@@ -7898,7 +7917,7 @@ var ImgInner = ({
7898
7917
  if (!src) {
7899
7918
  throw new Error('No "src" prop was passed to <Img>.');
7900
7919
  }
7901
- return /* @__PURE__ */ jsx26(Sequence, {
7920
+ return /* @__PURE__ */ jsx25(Sequence, {
7902
7921
  layout: "none",
7903
7922
  from: from ?? 0,
7904
7923
  durationInFrames: durationInFrames ?? Infinity,
@@ -7909,7 +7928,7 @@ var ImgInner = ({
7909
7928
  _experimentalControls: controls,
7910
7929
  showInTimeline: showInTimeline ?? true,
7911
7930
  hidden,
7912
- children: /* @__PURE__ */ jsx26(ImgContent, {
7931
+ children: /* @__PURE__ */ jsx25(ImgContent, {
7913
7932
  src,
7914
7933
  ...props2
7915
7934
  })
@@ -7921,6 +7940,331 @@ var imgSchema = {
7921
7940
  };
7922
7941
  var Img = wrapInSchema(ImgInner, imgSchema);
7923
7942
  addSequenceStackTraces(Img);
7943
+ var canvasImageSchema = {
7944
+ fit: {
7945
+ type: "enum",
7946
+ default: "fill",
7947
+ description: "Fit",
7948
+ variants: {
7949
+ fill: {},
7950
+ contain: {},
7951
+ cover: {}
7952
+ }
7953
+ },
7954
+ ...sequenceVisualStyleSchema,
7955
+ hidden: hiddenField
7956
+ };
7957
+ var makeAbortError = () => {
7958
+ if (typeof DOMException !== "undefined") {
7959
+ return new DOMException("Image loading was aborted", "AbortError");
7960
+ }
7961
+ const error2 = new Error("Image loading was aborted");
7962
+ error2.name = "AbortError";
7963
+ return error2;
7964
+ };
7965
+ var loadImage = ({
7966
+ src,
7967
+ signal
7968
+ }) => {
7969
+ return new Promise((resolve, reject) => {
7970
+ const image = new Image;
7971
+ let settled = false;
7972
+ function cleanup() {
7973
+ image.onload = null;
7974
+ image.onerror = null;
7975
+ }
7976
+ function settle(callback) {
7977
+ if (settled) {
7978
+ return;
7979
+ }
7980
+ settled = true;
7981
+ cleanup();
7982
+ callback();
7983
+ }
7984
+ function onAbort() {
7985
+ settle(() => reject(makeAbortError()));
7986
+ }
7987
+ image.onload = () => {
7988
+ Promise.resolve(image.decode?.()).catch(() => {
7989
+ return;
7990
+ }).then(() => {
7991
+ const imageWidth = image.naturalWidth || image.width;
7992
+ const imageHeight = image.naturalHeight || image.height;
7993
+ if (imageWidth <= 0 || imageHeight <= 0) {
7994
+ settle(() => reject(new Error(`Could not determine dimensions for <CanvasImage> with src="${truncateSrcForLabel(src)}"`)));
7995
+ return;
7996
+ }
7997
+ settle(() => resolve({ element: image, width: imageWidth, height: imageHeight }));
7998
+ });
7999
+ };
8000
+ image.onerror = () => {
8001
+ settle(() => reject(new Error(`Could not load <CanvasImage> with src="${truncateSrcForLabel(src)}"`)));
8002
+ };
8003
+ signal.addEventListener("abort", onAbort, { once: true });
8004
+ if (signal.aborted) {
8005
+ onAbort();
8006
+ return;
8007
+ }
8008
+ image.crossOrigin = "anonymous";
8009
+ image.src = src;
8010
+ });
8011
+ };
8012
+ function exponentialBackoff2(errorCount) {
8013
+ return 1000 * 2 ** (errorCount - 1);
8014
+ }
8015
+ var CanvasImageContent = forwardRef10(({
8016
+ src,
8017
+ width,
8018
+ height,
8019
+ fit = "fill",
8020
+ effects,
8021
+ controls,
8022
+ onError,
8023
+ className,
8024
+ style,
8025
+ id,
8026
+ pauseWhenLoading,
8027
+ maxRetries = 2,
8028
+ delayRenderRetries,
8029
+ delayRenderTimeoutInMilliseconds
8030
+ }, ref) => {
8031
+ const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
8032
+ const { delayPlayback } = useBufferState();
8033
+ const [outputCanvas, setOutputCanvas] = useState16(null);
8034
+ const actualSrc = usePreload(src);
8035
+ const chainState = useEffectChainState();
8036
+ const memoizedEffects = useMemoizedEffects({
8037
+ effects,
8038
+ overrideId: controls?.overrideId ?? null
8039
+ });
8040
+ const sequenceContext = useContext33(SequenceContext);
8041
+ const sourceCanvas = useMemo31(() => {
8042
+ if (typeof document === "undefined") {
8043
+ return null;
8044
+ }
8045
+ return document.createElement("canvas");
8046
+ }, []);
8047
+ const canvasRef = useCallback17((canvas) => {
8048
+ setOutputCanvas(canvas);
8049
+ if (typeof ref === "function") {
8050
+ ref(canvas);
8051
+ } else if (ref) {
8052
+ ref.current = canvas;
8053
+ }
8054
+ }, [ref]);
8055
+ useEffect16(() => {
8056
+ if (!outputCanvas || !sourceCanvas) {
8057
+ return;
8058
+ }
8059
+ const isPremounting = Boolean(sequenceContext?.premounting);
8060
+ const isPostmounting = Boolean(sequenceContext?.postmounting);
8061
+ const handle = delayRender2(`Rendering <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`, {
8062
+ retries: delayRenderRetries ?? undefined,
8063
+ timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
8064
+ });
8065
+ const unblock = pauseWhenLoading && !isPremounting && !isPostmounting ? delayPlayback().unblock : () => {
8066
+ return;
8067
+ };
8068
+ const controller = new AbortController;
8069
+ let cancelled = false;
8070
+ let continued = false;
8071
+ let errorCount = 0;
8072
+ let timeoutId = null;
8073
+ const continueRenderOnce = () => {
8074
+ if (continued) {
8075
+ return;
8076
+ }
8077
+ continued = true;
8078
+ unblock();
8079
+ continueRender2(handle);
8080
+ };
8081
+ const attemptLoad = () => {
8082
+ loadImage({ src: actualSrc, signal: controller.signal }).then((image) => {
8083
+ if (cancelled) {
8084
+ return;
8085
+ }
8086
+ const canvasWidth = width ?? image.width;
8087
+ const canvasHeight = height ?? image.height;
8088
+ const sourceContext = sourceCanvas.getContext("2d", {
8089
+ colorSpace: "srgb"
8090
+ });
8091
+ if (!sourceContext) {
8092
+ throw new Error("Could not get 2D context for <CanvasImage> source canvas");
8093
+ }
8094
+ sourceCanvas.width = canvasWidth;
8095
+ sourceCanvas.height = canvasHeight;
8096
+ outputCanvas.width = canvasWidth;
8097
+ outputCanvas.height = canvasHeight;
8098
+ sourceContext.clearRect(0, 0, canvasWidth, canvasHeight);
8099
+ sourceContext.drawImage(image.element, ...calculateImageFit(fit, { width: image.width, height: image.height }, { width: canvasWidth, height: canvasHeight }));
8100
+ return runEffectChain({
8101
+ state: chainState.get(canvasWidth, canvasHeight),
8102
+ source: sourceCanvas,
8103
+ effects: memoizedEffects,
8104
+ output: outputCanvas,
8105
+ width: canvasWidth,
8106
+ height: canvasHeight
8107
+ });
8108
+ }).then((completed) => {
8109
+ if (completed && !cancelled) {
8110
+ continueRenderOnce();
8111
+ }
8112
+ }).catch((err) => {
8113
+ if (err.name === "AbortError") {
8114
+ continueRenderOnce();
8115
+ return;
8116
+ }
8117
+ errorCount++;
8118
+ if (errorCount <= maxRetries) {
8119
+ const backoff = exponentialBackoff2(errorCount);
8120
+ console.warn(`Could not load <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}", retrying in ${backoff}ms`);
8121
+ timeoutId = setTimeout(() => {
8122
+ if (!cancelled) {
8123
+ attemptLoad();
8124
+ }
8125
+ }, backoff);
8126
+ } else if (onError) {
8127
+ onError(err);
8128
+ continueRenderOnce();
8129
+ } else {
8130
+ cancelRender2(err);
8131
+ }
8132
+ });
8133
+ };
8134
+ attemptLoad();
8135
+ return () => {
8136
+ cancelled = true;
8137
+ if (timeoutId !== null) {
8138
+ clearTimeout(timeoutId);
8139
+ }
8140
+ controller.abort();
8141
+ continueRenderOnce();
8142
+ };
8143
+ }, [
8144
+ actualSrc,
8145
+ cancelRender2,
8146
+ chainState,
8147
+ continueRender2,
8148
+ delayPlayback,
8149
+ delayRender2,
8150
+ delayRenderRetries,
8151
+ delayRenderTimeoutInMilliseconds,
8152
+ fit,
8153
+ height,
8154
+ maxRetries,
8155
+ memoizedEffects,
8156
+ onError,
8157
+ outputCanvas,
8158
+ pauseWhenLoading,
8159
+ sequenceContext?.postmounting,
8160
+ sequenceContext?.premounting,
8161
+ sourceCanvas,
8162
+ width
8163
+ ]);
8164
+ return /* @__PURE__ */ jsx26("canvas", {
8165
+ ref: canvasRef,
8166
+ width,
8167
+ height,
8168
+ className,
8169
+ style,
8170
+ id
8171
+ });
8172
+ });
8173
+ CanvasImageContent.displayName = "CanvasImageContent";
8174
+ var CanvasImageInner = forwardRef10(({
8175
+ src,
8176
+ width,
8177
+ height,
8178
+ fit,
8179
+ effects = [],
8180
+ className,
8181
+ style,
8182
+ id,
8183
+ onError,
8184
+ pauseWhenLoading,
8185
+ maxRetries,
8186
+ delayRenderRetries,
8187
+ delayRenderTimeoutInMilliseconds,
8188
+ durationInFrames,
8189
+ from,
8190
+ hidden,
8191
+ name,
8192
+ showInTimeline,
8193
+ stack,
8194
+ _experimentalControls: controls
8195
+ }, ref) => {
8196
+ if (!src) {
8197
+ throw new Error('No "src" prop was passed to <CanvasImage>.');
8198
+ }
8199
+ const memoizedEffectDefinitions = useMemoizedEffectDefinitions(effects);
8200
+ return /* @__PURE__ */ jsx26(Sequence, {
8201
+ layout: "none",
8202
+ from: from ?? 0,
8203
+ durationInFrames: durationInFrames ?? Infinity,
8204
+ hidden,
8205
+ showInTimeline: showInTimeline ?? true,
8206
+ name: name ?? "<CanvasImage>",
8207
+ _experimentalControls: controls,
8208
+ _remotionInternalEffects: memoizedEffectDefinitions,
8209
+ _remotionInternalIsMedia: { type: "image", src },
8210
+ _remotionInternalStack: stack,
8211
+ children: /* @__PURE__ */ jsx26(CanvasImageContent, {
8212
+ ref,
8213
+ src,
8214
+ width,
8215
+ height,
8216
+ fit,
8217
+ effects,
8218
+ controls,
8219
+ className,
8220
+ style,
8221
+ id,
8222
+ onError,
8223
+ pauseWhenLoading,
8224
+ maxRetries,
8225
+ delayRenderRetries,
8226
+ delayRenderTimeoutInMilliseconds
8227
+ })
8228
+ });
8229
+ });
8230
+ var CanvasImage = wrapInSchema(CanvasImageInner, canvasImageSchema);
8231
+ CanvasImage.displayName = "CanvasImage";
8232
+ addSequenceStackTraces(CanvasImage);
8233
+ var kSplineTableSize = 11;
8234
+ var kSampleStepSize = 1 / (kSplineTableSize - 1);
8235
+ var IFrameRefForwarding = ({
8236
+ onLoad,
8237
+ onError,
8238
+ delayRenderRetries,
8239
+ delayRenderTimeoutInMilliseconds,
8240
+ ...props2
8241
+ }, ref) => {
8242
+ const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
8243
+ const [handle] = useState17(() => delayRender2(`Loading <IFrame> with source ${props2.src}`, {
8244
+ retries: delayRenderRetries ?? undefined,
8245
+ timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
8246
+ }));
8247
+ const didLoad = useCallback18((e) => {
8248
+ continueRender2(handle);
8249
+ onLoad?.(e);
8250
+ }, [handle, onLoad, continueRender2]);
8251
+ const didGetError = useCallback18((e) => {
8252
+ continueRender2(handle);
8253
+ if (onError) {
8254
+ onError(e);
8255
+ } else {
8256
+ console.error("Error loading iframe:", e, "Handle the event using the onError() prop to make this message disappear.");
8257
+ }
8258
+ }, [handle, onError, continueRender2]);
8259
+ return /* @__PURE__ */ jsx27("iframe", {
8260
+ referrerPolicy: "strict-origin-when-cross-origin",
8261
+ ...props2,
8262
+ ref,
8263
+ onError: didGetError,
8264
+ onLoad: didLoad
8265
+ });
8266
+ };
8267
+ var IFrame = forwardRef11(IFrameRefForwarding);
7924
8268
  var compositionsRef = React28.createRef();
7925
8269
  var CompositionManagerProvider = ({
7926
8270
  children,
@@ -7929,18 +8273,18 @@ var CompositionManagerProvider = ({
7929
8273
  initialCompositions,
7930
8274
  initialCanvasContent
7931
8275
  }) => {
7932
- const [folders, setFolders] = useState17([]);
7933
- const [canvasContent, setCanvasContent] = useState17(initialCanvasContent);
7934
- const [compositions, setCompositions] = useState17(initialCompositions);
8276
+ const [folders, setFolders] = useState18([]);
8277
+ const [canvasContent, setCanvasContent] = useState18(initialCanvasContent);
8278
+ const [compositions, setCompositions] = useState18(initialCompositions);
7935
8279
  const currentcompositionsRef = useRef22(compositions);
7936
- const updateCompositions = useCallback18((updateComps) => {
8280
+ const updateCompositions = useCallback19((updateComps) => {
7937
8281
  setCompositions((comps) => {
7938
8282
  const updated = updateComps(comps);
7939
8283
  currentcompositionsRef.current = updated;
7940
8284
  return updated;
7941
8285
  });
7942
8286
  }, []);
7943
- const registerComposition = useCallback18((comp) => {
8287
+ const registerComposition = useCallback19((comp) => {
7944
8288
  updateCompositions((comps) => {
7945
8289
  if (comps.find((c2) => c2.id === comp.id)) {
7946
8290
  throw new Error(`Multiple composition with id ${comp.id} are registered.`);
@@ -7948,12 +8292,12 @@ var CompositionManagerProvider = ({
7948
8292
  return [...comps, comp];
7949
8293
  });
7950
8294
  }, [updateCompositions]);
7951
- const unregisterComposition = useCallback18((id) => {
8295
+ const unregisterComposition = useCallback19((id) => {
7952
8296
  setCompositions((comps) => {
7953
8297
  return comps.filter((c2) => c2.id !== id);
7954
8298
  });
7955
8299
  }, []);
7956
- const registerFolder = useCallback18((name, parent, nonce) => {
8300
+ const registerFolder = useCallback19((name, parent, nonce) => {
7957
8301
  setFolders((prevFolders) => {
7958
8302
  return [
7959
8303
  ...prevFolders,
@@ -7965,7 +8309,7 @@ var CompositionManagerProvider = ({
7965
8309
  ];
7966
8310
  });
7967
8311
  }, []);
7968
- const unregisterFolder = useCallback18((name, parent) => {
8312
+ const unregisterFolder = useCallback19((name, parent) => {
7969
8313
  setFolders((prevFolders) => {
7970
8314
  return prevFolders.filter((p) => !(p.name === name && p.parent === parent));
7971
8315
  });
@@ -7975,7 +8319,7 @@ var CompositionManagerProvider = ({
7975
8319
  getCompositions: () => currentcompositionsRef.current
7976
8320
  };
7977
8321
  }, []);
7978
- const compositionManagerSetters = useMemo31(() => {
8322
+ const compositionManagerSetters = useMemo32(() => {
7979
8323
  return {
7980
8324
  registerComposition,
7981
8325
  unregisterComposition,
@@ -7991,7 +8335,7 @@ var CompositionManagerProvider = ({
7991
8335
  unregisterFolder,
7992
8336
  onlyRenderComposition
7993
8337
  ]);
7994
- const compositionManagerContextValue = useMemo31(() => {
8338
+ const compositionManagerContextValue = useMemo32(() => {
7995
8339
  return {
7996
8340
  compositions,
7997
8341
  folders,
@@ -7999,9 +8343,9 @@ var CompositionManagerProvider = ({
7999
8343
  canvasContent
8000
8344
  };
8001
8345
  }, [compositions, folders, currentCompositionMetadata, canvasContent]);
8002
- return /* @__PURE__ */ jsx27(CompositionManager.Provider, {
8346
+ return /* @__PURE__ */ jsx28(CompositionManager.Provider, {
8003
8347
  value: compositionManagerContextValue,
8004
- children: /* @__PURE__ */ jsx27(CompositionSetters.Provider, {
8348
+ children: /* @__PURE__ */ jsx28(CompositionSetters.Provider, {
8005
8349
  value: compositionManagerSetters,
8006
8350
  children
8007
8351
  })
@@ -8119,7 +8463,7 @@ var waitForRoot = (fn) => {
8119
8463
  };
8120
8464
  var MediaEnabledContext = createContext23(null);
8121
8465
  var useVideoEnabled = () => {
8122
- const context = useContext33(MediaEnabledContext);
8466
+ const context = useContext34(MediaEnabledContext);
8123
8467
  if (!context) {
8124
8468
  return window.remotion_videoEnabled;
8125
8469
  }
@@ -8129,7 +8473,7 @@ var useVideoEnabled = () => {
8129
8473
  return context.videoEnabled;
8130
8474
  };
8131
8475
  var useAudioEnabled = () => {
8132
- const context = useContext33(MediaEnabledContext);
8476
+ const context = useContext34(MediaEnabledContext);
8133
8477
  if (!context) {
8134
8478
  return window.remotion_audioEnabled;
8135
8479
  }
@@ -8143,8 +8487,8 @@ var MediaEnabledProvider = ({
8143
8487
  videoEnabled,
8144
8488
  audioEnabled
8145
8489
  }) => {
8146
- const value = useMemo32(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
8147
- return /* @__PURE__ */ jsx28(MediaEnabledContext.Provider, {
8490
+ const value = useMemo33(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
8491
+ return /* @__PURE__ */ jsx29(MediaEnabledContext.Provider, {
8148
8492
  value,
8149
8493
  children
8150
8494
  });
@@ -8158,33 +8502,33 @@ var RemotionRootContexts = ({
8158
8502
  audioEnabled,
8159
8503
  frameState
8160
8504
  }) => {
8161
- const nonceContext = useMemo33(() => {
8505
+ const nonceContext = useMemo34(() => {
8162
8506
  let counter = 0;
8163
8507
  return {
8164
8508
  getNonce: () => counter++
8165
8509
  };
8166
8510
  }, []);
8167
- const logging = useMemo33(() => {
8511
+ const logging = useMemo34(() => {
8168
8512
  return { logLevel, mountTime: Date.now() };
8169
8513
  }, [logLevel]);
8170
- return /* @__PURE__ */ jsx29(LogLevelContext.Provider, {
8514
+ return /* @__PURE__ */ jsx30(LogLevelContext.Provider, {
8171
8515
  value: logging,
8172
- children: /* @__PURE__ */ jsx29(NonceContext.Provider, {
8516
+ children: /* @__PURE__ */ jsx30(NonceContext.Provider, {
8173
8517
  value: nonceContext,
8174
- children: /* @__PURE__ */ jsx29(TimelineContextProvider, {
8518
+ children: /* @__PURE__ */ jsx30(TimelineContextProvider, {
8175
8519
  frameState,
8176
- children: /* @__PURE__ */ jsx29(MediaEnabledProvider, {
8520
+ children: /* @__PURE__ */ jsx30(MediaEnabledProvider, {
8177
8521
  videoEnabled,
8178
8522
  audioEnabled,
8179
- children: /* @__PURE__ */ jsx29(EditorPropsProvider, {
8180
- children: /* @__PURE__ */ jsx29(PrefetchProvider, {
8181
- children: /* @__PURE__ */ jsx29(SequenceManagerProvider, {
8182
- children: /* @__PURE__ */ jsx29(DurationsContextProvider, {
8183
- children: /* @__PURE__ */ jsx29(BufferingProvider, {
8184
- children: /* @__PURE__ */ jsx29(SharedAudioContextProvider, {
8523
+ children: /* @__PURE__ */ jsx30(EditorPropsProvider, {
8524
+ children: /* @__PURE__ */ jsx30(PrefetchProvider, {
8525
+ children: /* @__PURE__ */ jsx30(SequenceManagerProvider, {
8526
+ children: /* @__PURE__ */ jsx30(DurationsContextProvider, {
8527
+ children: /* @__PURE__ */ jsx30(BufferingProvider, {
8528
+ children: /* @__PURE__ */ jsx30(SharedAudioContextProvider, {
8185
8529
  audioLatencyHint,
8186
8530
  audioEnabled,
8187
- children: /* @__PURE__ */ jsx29(SharedAudioTagsContextProvider, {
8531
+ children: /* @__PURE__ */ jsx30(SharedAudioTagsContextProvider, {
8188
8532
  numberOfAudioTags,
8189
8533
  children
8190
8534
  })
@@ -8452,13 +8796,13 @@ var OffthreadVideoForRendering = ({
8452
8796
  const frame = useCurrentFrame();
8453
8797
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior);
8454
8798
  const videoConfig = useUnsafeVideoConfig();
8455
- const sequenceContext = useContext34(SequenceContext);
8799
+ const sequenceContext = useContext35(SequenceContext);
8456
8800
  const mediaStartsAt = useMediaStartsAt();
8457
- const { registerRenderAsset, unregisterRenderAsset } = useContext34(RenderAssetManager);
8801
+ const { registerRenderAsset, unregisterRenderAsset } = useContext35(RenderAssetManager);
8458
8802
  if (!src) {
8459
8803
  throw new TypeError("No `src` was passed to <OffthreadVideo>.");
8460
8804
  }
8461
- const id = useMemo34(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
8805
+ const id = useMemo35(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
8462
8806
  src,
8463
8807
  sequenceContext?.cumulatedFrom,
8464
8808
  sequenceContext?.relativeFrom,
@@ -8473,7 +8817,7 @@ var OffthreadVideoForRendering = ({
8473
8817
  mediaVolume: 1
8474
8818
  });
8475
8819
  warnAboutTooHighVolume(volume);
8476
- useEffect16(() => {
8820
+ useEffect17(() => {
8477
8821
  if (!src) {
8478
8822
  throw new Error("No src passed");
8479
8823
  }
@@ -8513,14 +8857,14 @@ var OffthreadVideoForRendering = ({
8513
8857
  sequenceContext?.relativeFrom,
8514
8858
  audioStreamIndex
8515
8859
  ]);
8516
- const currentTime = useMemo34(() => {
8860
+ const currentTime = useMemo35(() => {
8517
8861
  return getExpectedMediaFrameUncorrected({
8518
8862
  frame,
8519
8863
  playbackRate: playbackRate || 1,
8520
8864
  startFrom: -mediaStartsAt
8521
8865
  }) / videoConfig.fps;
8522
8866
  }, [frame, mediaStartsAt, playbackRate, videoConfig.fps]);
8523
- const actualSrc = useMemo34(() => {
8867
+ const actualSrc = useMemo35(() => {
8524
8868
  return getOffthreadVideoSource({
8525
8869
  src,
8526
8870
  currentTime,
@@ -8528,7 +8872,7 @@ var OffthreadVideoForRendering = ({
8528
8872
  toneMapped
8529
8873
  });
8530
8874
  }, [toneMapped, currentTime, src, transparent]);
8531
- const [imageSrc, setImageSrc] = useState18(null);
8875
+ const [imageSrc, setImageSrc] = useState19(null);
8532
8876
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
8533
8877
  useLayoutEffect11(() => {
8534
8878
  if (!window.remotion_videoEnabled) {
@@ -8601,17 +8945,17 @@ var OffthreadVideoForRendering = ({
8601
8945
  continueRender2,
8602
8946
  delayRender2
8603
8947
  ]);
8604
- const onErr = useCallback19(() => {
8948
+ const onErr = useCallback20(() => {
8605
8949
  if (onError) {
8606
8950
  onError?.(new Error("Failed to load image with src " + imageSrc));
8607
8951
  } else {
8608
8952
  cancelRender("Failed to load image with src " + imageSrc);
8609
8953
  }
8610
8954
  }, [imageSrc, onError]);
8611
- const className = useMemo34(() => {
8955
+ const className = useMemo35(() => {
8612
8956
  return [OBJECTFIT_CONTAIN_CLASS_NAME, props2.className].filter(truthy).join(" ");
8613
8957
  }, [props2.className]);
8614
- const onImageFrame = useCallback19((img) => {
8958
+ const onImageFrame = useCallback20((img) => {
8615
8959
  if (onVideoFrame) {
8616
8960
  onVideoFrame(img);
8617
8961
  }
@@ -8620,7 +8964,7 @@ var OffthreadVideoForRendering = ({
8620
8964
  return null;
8621
8965
  }
8622
8966
  continueRender2(imageSrc.handle);
8623
- return /* @__PURE__ */ jsx30(Img, {
8967
+ return /* @__PURE__ */ jsx31(Img, {
8624
8968
  src: imageSrc.src,
8625
8969
  delayRenderRetries,
8626
8970
  delayRenderTimeoutInMilliseconds,
@@ -8634,7 +8978,7 @@ var useEmitVideoFrame = ({
8634
8978
  ref,
8635
8979
  onVideoFrame
8636
8980
  }) => {
8637
- useEffect17(() => {
8981
+ useEffect18(() => {
8638
8982
  const { current } = ref;
8639
8983
  if (!current) {
8640
8984
  return;
@@ -8666,12 +9010,12 @@ class MediaPlaybackError extends Error {
8666
9010
  }
8667
9011
  }
8668
9012
  var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8669
- const context = useContext35(SharedAudioContext);
9013
+ const context = useContext36(SharedAudioContext);
8670
9014
  if (!context) {
8671
9015
  throw new Error("SharedAudioContext not found");
8672
9016
  }
8673
9017
  const videoRef = useRef23(null);
8674
- const sharedSource = useMemo35(() => {
9018
+ const sharedSource = useMemo36(() => {
8675
9019
  if (!context.audioContext) {
8676
9020
  return null;
8677
9021
  }
@@ -8723,10 +9067,10 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8723
9067
  }
8724
9068
  const volumePropFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
8725
9069
  const { fps, durationInFrames } = useVideoConfig();
8726
- const parentSequence = useContext35(SequenceContext);
9070
+ const parentSequence = useContext36(SequenceContext);
8727
9071
  const logLevel = useLogLevel();
8728
9072
  const mountTime = useMountTime();
8729
- const [timelineId] = useState19(() => String(Math.random()));
9073
+ const [timelineId] = useState20(() => String(Math.random()));
8730
9074
  if (typeof acceptableTimeShift !== "undefined") {
8731
9075
  throw new Error("acceptableTimeShift has been removed. Use acceptableTimeShiftInSeconds instead.");
8732
9076
  }
@@ -8738,7 +9082,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8738
9082
  mediaVolume
8739
9083
  });
8740
9084
  warnAboutTooHighVolume(userPreferredVolume);
8741
- const getStack = useCallback20(() => {
9085
+ const getStack = useCallback21(() => {
8742
9086
  return _remotionInternalStack ?? null;
8743
9087
  }, [_remotionInternalStack]);
8744
9088
  useMediaInTimeline({
@@ -8796,13 +9140,13 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8796
9140
  useImperativeHandle8(ref, () => {
8797
9141
  return videoRef.current;
8798
9142
  }, []);
8799
- useState19(() => playbackLogging({
9143
+ useState20(() => playbackLogging({
8800
9144
  logLevel,
8801
9145
  message: `Mounting video with source = ${actualSrc}, v=${VERSION}, user agent=${typeof navigator === "undefined" ? "server" : navigator.userAgent}`,
8802
9146
  tag: "video",
8803
9147
  mountTime
8804
9148
  }));
8805
- useEffect18(() => {
9149
+ useEffect19(() => {
8806
9150
  const { current } = videoRef;
8807
9151
  if (!current) {
8808
9152
  return;
@@ -8845,7 +9189,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8845
9189
  const currentOnDurationCallback = useRef23(onDuration);
8846
9190
  currentOnDurationCallback.current = onDuration;
8847
9191
  useEmitVideoFrame({ ref: videoRef, onVideoFrame });
8848
- useEffect18(() => {
9192
+ useEffect19(() => {
8849
9193
  const { current } = videoRef;
8850
9194
  if (!current) {
8851
9195
  return;
@@ -8862,7 +9206,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8862
9206
  current.removeEventListener("loadedmetadata", onLoadedMetadata);
8863
9207
  };
8864
9208
  }, [src]);
8865
- useEffect18(() => {
9209
+ useEffect19(() => {
8866
9210
  const { current } = videoRef;
8867
9211
  if (!current) {
8868
9212
  return;
@@ -8873,7 +9217,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8873
9217
  current.preload = "auto";
8874
9218
  }
8875
9219
  }, []);
8876
- const actualStyle = useMemo35(() => {
9220
+ const actualStyle = useMemo36(() => {
8877
9221
  return {
8878
9222
  ...style
8879
9223
  };
@@ -8883,7 +9227,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8883
9227
  requestsVideoFrame: Boolean(onVideoFrame),
8884
9228
  isClientSideRendering: false
8885
9229
  });
8886
- return /* @__PURE__ */ jsx31("video", {
9230
+ return /* @__PURE__ */ jsx32("video", {
8887
9231
  ref: videoRef,
8888
9232
  muted: muted || mediaMuted || userPreferredVolume <= 0,
8889
9233
  playsInline: true,
@@ -8895,7 +9239,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8895
9239
  ...nativeProps
8896
9240
  });
8897
9241
  };
8898
- var VideoForPreview = forwardRef11(VideoForDevelopmentRefForwardingFunction);
9242
+ var VideoForPreview = forwardRef12(VideoForDevelopmentRefForwardingFunction);
8899
9243
  var InnerOffthreadVideo = (props2) => {
8900
9244
  const {
8901
9245
  startFrom,
@@ -8912,7 +9256,7 @@ var InnerOffthreadVideo = (props2) => {
8912
9256
  if (environment.isClientSideRendering) {
8913
9257
  throw new Error("<OffthreadVideo> is not supported in @remotion/web-renderer. Use <Video> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");
8914
9258
  }
8915
- const onDuration = useCallback21(() => {
9259
+ const onDuration = useCallback22(() => {
8916
9260
  return;
8917
9261
  }, []);
8918
9262
  if (typeof props2.src !== "string") {
@@ -8926,13 +9270,13 @@ var InnerOffthreadVideo = (props2) => {
8926
9270
  trimAfter
8927
9271
  });
8928
9272
  if (typeof trimBeforeValue !== "undefined" || typeof trimAfterValue !== "undefined") {
8929
- return /* @__PURE__ */ jsx32(Sequence, {
9273
+ return /* @__PURE__ */ jsx33(Sequence, {
8930
9274
  layout: "none",
8931
9275
  from: 0 - (trimBeforeValue ?? 0),
8932
9276
  showInTimeline: false,
8933
9277
  durationInFrames: trimAfterValue,
8934
9278
  name,
8935
- children: /* @__PURE__ */ jsx32(InnerOffthreadVideo, {
9279
+ children: /* @__PURE__ */ jsx33(InnerOffthreadVideo, {
8936
9280
  pauseWhenBuffering: pauseWhenBuffering ?? false,
8937
9281
  ...otherProps,
8938
9282
  trimAfter: undefined,
@@ -8947,7 +9291,7 @@ var InnerOffthreadVideo = (props2) => {
8947
9291
  }
8948
9292
  validateMediaProps(props2, "Video");
8949
9293
  if (environment.isRendering) {
8950
- return /* @__PURE__ */ jsx32(OffthreadVideoForRendering, {
9294
+ return /* @__PURE__ */ jsx33(OffthreadVideoForRendering, {
8951
9295
  pauseWhenBuffering: pauseWhenBuffering ?? false,
8952
9296
  ...otherProps,
8953
9297
  trimAfter: undefined,
@@ -8969,7 +9313,7 @@ var InnerOffthreadVideo = (props2) => {
8969
9313
  delayRenderTimeoutInMilliseconds,
8970
9314
  ...propsForPreview
8971
9315
  } = otherProps;
8972
- return /* @__PURE__ */ jsx32(VideoForPreview, {
9316
+ return /* @__PURE__ */ jsx33(VideoForPreview, {
8973
9317
  _remotionInternalStack: stack ?? null,
8974
9318
  onDuration,
8975
9319
  onlyWarnForMediaSeekingError: true,
@@ -9019,7 +9363,7 @@ var OffthreadVideo = ({
9019
9363
  if (imageFormat) {
9020
9364
  throw new TypeError(`The \`<OffthreadVideo>\` tag does no longer accept \`imageFormat\`. Use the \`transparent\` prop if you want to render a transparent video.`);
9021
9365
  }
9022
- return /* @__PURE__ */ jsx32(InnerOffthreadVideo, {
9366
+ return /* @__PURE__ */ jsx33(InnerOffthreadVideo, {
9023
9367
  acceptableTimeShiftInSeconds,
9024
9368
  allowAmplificationDuringRender: allowAmplificationDuringRender ?? true,
9025
9369
  audioStreamIndex: audioStreamIndex ?? 0,
@@ -9068,7 +9412,7 @@ function useRemotionContexts() {
9068
9412
  const sequenceManagerContext = React36.useContext(SequenceManager);
9069
9413
  const bufferManagerContext = React36.useContext(BufferingContextReact);
9070
9414
  const logLevelContext = React36.useContext(LogLevelContext);
9071
- return useMemo36(() => ({
9415
+ return useMemo37(() => ({
9072
9416
  compositionManagerCtx,
9073
9417
  timelineContext,
9074
9418
  setTimelineContext,
@@ -9098,29 +9442,29 @@ function useRemotionContexts() {
9098
9442
  }
9099
9443
  var RemotionContextProvider = (props2) => {
9100
9444
  const { children, contexts } = props2;
9101
- return /* @__PURE__ */ jsx33(LogLevelContext.Provider, {
9445
+ return /* @__PURE__ */ jsx34(LogLevelContext.Provider, {
9102
9446
  value: contexts.logLevelContext,
9103
- children: /* @__PURE__ */ jsx33(CanUseRemotionHooks.Provider, {
9447
+ children: /* @__PURE__ */ jsx34(CanUseRemotionHooks.Provider, {
9104
9448
  value: contexts.canUseRemotionHooksContext,
9105
- children: /* @__PURE__ */ jsx33(NonceContext.Provider, {
9449
+ children: /* @__PURE__ */ jsx34(NonceContext.Provider, {
9106
9450
  value: contexts.nonceContext,
9107
- children: /* @__PURE__ */ jsx33(PreloadContext.Provider, {
9451
+ children: /* @__PURE__ */ jsx34(PreloadContext.Provider, {
9108
9452
  value: contexts.preloadContext,
9109
- children: /* @__PURE__ */ jsx33(CompositionManager.Provider, {
9453
+ children: /* @__PURE__ */ jsx34(CompositionManager.Provider, {
9110
9454
  value: contexts.compositionManagerCtx,
9111
- children: /* @__PURE__ */ jsx33(SequenceManager.Provider, {
9455
+ children: /* @__PURE__ */ jsx34(SequenceManager.Provider, {
9112
9456
  value: contexts.sequenceManagerContext,
9113
- children: /* @__PURE__ */ jsx33(RenderAssetManager.Provider, {
9457
+ children: /* @__PURE__ */ jsx34(RenderAssetManager.Provider, {
9114
9458
  value: contexts.renderAssetManagerContext,
9115
- children: /* @__PURE__ */ jsx33(ResolveCompositionContext.Provider, {
9459
+ children: /* @__PURE__ */ jsx34(ResolveCompositionContext.Provider, {
9116
9460
  value: contexts.resolveCompositionContext,
9117
- children: /* @__PURE__ */ jsx33(TimelineContext.Provider, {
9461
+ children: /* @__PURE__ */ jsx34(TimelineContext.Provider, {
9118
9462
  value: contexts.timelineContext,
9119
- children: /* @__PURE__ */ jsx33(SetTimelineContext.Provider, {
9463
+ children: /* @__PURE__ */ jsx34(SetTimelineContext.Provider, {
9120
9464
  value: contexts.setTimelineContext,
9121
- children: /* @__PURE__ */ jsx33(SequenceContext.Provider, {
9465
+ children: /* @__PURE__ */ jsx34(SequenceContext.Provider, {
9122
9466
  value: contexts.sequenceContext,
9123
- children: /* @__PURE__ */ jsx33(BufferingContextReact.Provider, {
9467
+ children: /* @__PURE__ */ jsx34(BufferingContextReact.Provider, {
9124
9468
  value: contexts.bufferManagerContext,
9125
9469
  children
9126
9470
  })
@@ -9145,6 +9489,7 @@ var Internals = {
9145
9489
  useAbsoluteTimelinePosition,
9146
9490
  evaluateVolume,
9147
9491
  getAbsoluteSrc,
9492
+ getAssetDisplayName,
9148
9493
  Timeline: exports_timeline_position_state,
9149
9494
  validateMediaTrimProps,
9150
9495
  validateMediaProps,
@@ -9305,13 +9650,13 @@ var flattenChildren = (children) => {
9305
9650
  };
9306
9651
  var IsInsideSeriesContext = createContext25(false);
9307
9652
  var IsInsideSeriesContainer = ({ children }) => {
9308
- return /* @__PURE__ */ jsx34(IsInsideSeriesContext.Provider, {
9653
+ return /* @__PURE__ */ jsx35(IsInsideSeriesContext.Provider, {
9309
9654
  value: true,
9310
9655
  children
9311
9656
  });
9312
9657
  };
9313
9658
  var IsNotInsideSeriesProvider = ({ children }) => {
9314
- return /* @__PURE__ */ jsx34(IsInsideSeriesContext.Provider, {
9659
+ return /* @__PURE__ */ jsx35(IsInsideSeriesContext.Provider, {
9315
9660
  value: false,
9316
9661
  children
9317
9662
  });
@@ -9324,13 +9669,13 @@ var useRequireToBeInsideSeries = () => {
9324
9669
  };
9325
9670
  var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
9326
9671
  useRequireToBeInsideSeries();
9327
- return /* @__PURE__ */ jsx35(IsNotInsideSeriesProvider, {
9672
+ return /* @__PURE__ */ jsx36(IsNotInsideSeriesProvider, {
9328
9673
  children
9329
9674
  });
9330
9675
  };
9331
- var SeriesSequence = forwardRef12(SeriesSequenceRefForwardingFunction);
9676
+ var SeriesSequence = forwardRef13(SeriesSequenceRefForwardingFunction);
9332
9677
  var SeriesInner = (props2) => {
9333
- const childrenValue = useMemo37(() => {
9678
+ const childrenValue = useMemo38(() => {
9334
9679
  let startFrame = 0;
9335
9680
  const flattenedChildren = flattenChildren(props2.children);
9336
9681
  return Children.map(flattenedChildren, (child, i) => {
@@ -9371,7 +9716,7 @@ var SeriesInner = (props2) => {
9371
9716
  }
9372
9717
  const currentStartFrame = startFrame + offset;
9373
9718
  startFrame += durationInFramesProp + offset;
9374
- return /* @__PURE__ */ jsx35(Sequence, {
9719
+ return /* @__PURE__ */ jsx36(Sequence, {
9375
9720
  name: name || "<Series.Sequence>",
9376
9721
  _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
9377
9722
  from: currentStartFrame,
@@ -9382,8 +9727,8 @@ var SeriesInner = (props2) => {
9382
9727
  });
9383
9728
  });
9384
9729
  }, [props2.children]);
9385
- return /* @__PURE__ */ jsx35(IsInsideSeriesContainer, {
9386
- children: /* @__PURE__ */ jsx35(Sequence, {
9730
+ return /* @__PURE__ */ jsx36(IsInsideSeriesContainer, {
9731
+ children: /* @__PURE__ */ jsx36(Sequence, {
9387
9732
  layout: "none",
9388
9733
  name: "<Series>",
9389
9734
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/series",
@@ -9863,14 +10208,14 @@ var VideoForRenderingForwardFunction = ({
9863
10208
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
9864
10209
  const videoConfig = useUnsafeVideoConfig();
9865
10210
  const videoRef = useRef24(null);
9866
- const sequenceContext = useContext36(SequenceContext);
10211
+ const sequenceContext = useContext37(SequenceContext);
9867
10212
  const mediaStartsAt = useMediaStartsAt();
9868
10213
  const environment = useRemotionEnvironment();
9869
10214
  const logLevel = useLogLevel();
9870
10215
  const mountTime = useMountTime();
9871
10216
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
9872
- const { registerRenderAsset, unregisterRenderAsset } = useContext36(RenderAssetManager);
9873
- const id = useMemo38(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
10217
+ const { registerRenderAsset, unregisterRenderAsset } = useContext37(RenderAssetManager);
10218
+ const id = useMemo39(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
9874
10219
  props2.src,
9875
10220
  sequenceContext?.cumulatedFrom,
9876
10221
  sequenceContext?.relativeFrom,
@@ -9885,7 +10230,7 @@ var VideoForRenderingForwardFunction = ({
9885
10230
  mediaVolume: 1
9886
10231
  });
9887
10232
  warnAboutTooHighVolume(volume);
9888
- useEffect19(() => {
10233
+ useEffect20(() => {
9889
10234
  if (!props2.src) {
9890
10235
  throw new Error("No src passed");
9891
10236
  }
@@ -9928,7 +10273,7 @@ var VideoForRenderingForwardFunction = ({
9928
10273
  useImperativeHandle9(ref, () => {
9929
10274
  return videoRef.current;
9930
10275
  }, []);
9931
- useEffect19(() => {
10276
+ useEffect20(() => {
9932
10277
  if (!window.remotion_videoEnabled) {
9933
10278
  return;
9934
10279
  }
@@ -10052,13 +10397,13 @@ var VideoForRenderingForwardFunction = ({
10052
10397
  delayRender2
10053
10398
  ]);
10054
10399
  }
10055
- return /* @__PURE__ */ jsx36("video", {
10400
+ return /* @__PURE__ */ jsx37("video", {
10056
10401
  ref: videoRef,
10057
10402
  disableRemotePlayback: true,
10058
10403
  ...props2
10059
10404
  });
10060
10405
  };
10061
- var VideoForRendering = forwardRef13(VideoForRenderingForwardFunction);
10406
+ var VideoForRendering = forwardRef14(VideoForRenderingForwardFunction);
10062
10407
  var VideoForwardingFunction = (props2, ref) => {
10063
10408
  const {
10064
10409
  startFrom,
@@ -10079,7 +10424,7 @@ var VideoForwardingFunction = (props2, ref) => {
10079
10424
  if (environment.isClientSideRendering) {
10080
10425
  throw new Error("<Html5Video> is not supported in @remotion/web-renderer. Use <Video> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");
10081
10426
  }
10082
- const { durations, setDurations } = useContext37(DurationsContext);
10427
+ const { durations, setDurations } = useContext38(DurationsContext);
10083
10428
  if (typeof ref === "string") {
10084
10429
  throw new Error("string refs are not supported");
10085
10430
  }
@@ -10087,10 +10432,10 @@ var VideoForwardingFunction = (props2, ref) => {
10087
10432
  throw new TypeError(`The \`<Html5Video>\` tag requires a string for \`src\`, but got ${JSON.stringify(props2.src)} instead.`);
10088
10433
  }
10089
10434
  const preloadedSrc = usePreload(props2.src);
10090
- const onDuration = useCallback22((src, durationInSeconds) => {
10435
+ const onDuration = useCallback23((src, durationInSeconds) => {
10091
10436
  setDurations({ type: "got-duration", durationInSeconds, src });
10092
10437
  }, [setDurations]);
10093
- const onVideoFrame = useCallback22(() => {}, []);
10438
+ const onVideoFrame = useCallback23(() => {}, []);
10094
10439
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props2.src)];
10095
10440
  validateMediaTrimProps({ startFrom, endAt, trimBefore, trimAfter });
10096
10441
  const { trimBeforeValue, trimAfterValue } = resolveTrimProps({
@@ -10101,7 +10446,7 @@ var VideoForwardingFunction = (props2, ref) => {
10101
10446
  });
10102
10447
  if (loop && durationFetched !== undefined) {
10103
10448
  if (!Number.isFinite(durationFetched)) {
10104
- return /* @__PURE__ */ jsx37(Html5Video, {
10449
+ return /* @__PURE__ */ jsx38(Html5Video, {
10105
10450
  ...propsOtherThanLoop,
10106
10451
  ref,
10107
10452
  stack,
@@ -10109,7 +10454,7 @@ var VideoForwardingFunction = (props2, ref) => {
10109
10454
  });
10110
10455
  }
10111
10456
  const mediaDuration = durationFetched * fps;
10112
- return /* @__PURE__ */ jsx37(Loop, {
10457
+ return /* @__PURE__ */ jsx38(Loop, {
10113
10458
  durationInFrames: calculateMediaDuration({
10114
10459
  trimAfter: trimAfterValue,
10115
10460
  mediaDurationInFrames: mediaDuration,
@@ -10119,7 +10464,7 @@ var VideoForwardingFunction = (props2, ref) => {
10119
10464
  layout: "none",
10120
10465
  name,
10121
10466
  showInTimeline: false,
10122
- children: /* @__PURE__ */ jsx37(Html5Video, {
10467
+ children: /* @__PURE__ */ jsx38(Html5Video, {
10123
10468
  ...propsOtherThanLoop,
10124
10469
  ref,
10125
10470
  stack,
@@ -10128,13 +10473,13 @@ var VideoForwardingFunction = (props2, ref) => {
10128
10473
  });
10129
10474
  }
10130
10475
  if (typeof trimBeforeValue !== "undefined" || typeof trimAfterValue !== "undefined") {
10131
- return /* @__PURE__ */ jsx37(Sequence, {
10476
+ return /* @__PURE__ */ jsx38(Sequence, {
10132
10477
  layout: "none",
10133
10478
  from: 0 - (trimBeforeValue ?? 0),
10134
10479
  showInTimeline: false,
10135
10480
  durationInFrames: trimAfterValue === undefined ? undefined : trimAfterValue / (props2.playbackRate ?? 1),
10136
10481
  name,
10137
- children: /* @__PURE__ */ jsx37(Html5Video, {
10482
+ children: /* @__PURE__ */ jsx38(Html5Video, {
10138
10483
  pauseWhenBuffering: pauseWhenBuffering ?? false,
10139
10484
  ...otherProps,
10140
10485
  ref,
@@ -10148,14 +10493,14 @@ var VideoForwardingFunction = (props2, ref) => {
10148
10493
  volume: props2.volume
10149
10494
  }, "Html5Video");
10150
10495
  if (environment.isRendering) {
10151
- return /* @__PURE__ */ jsx37(VideoForRendering, {
10496
+ return /* @__PURE__ */ jsx38(VideoForRendering, {
10152
10497
  onDuration,
10153
10498
  onVideoFrame: onVideoFrame ?? null,
10154
10499
  ...otherProps,
10155
10500
  ref
10156
10501
  });
10157
10502
  }
10158
- return /* @__PURE__ */ jsx37(VideoForPreview, {
10503
+ return /* @__PURE__ */ jsx38(VideoForPreview, {
10159
10504
  onlyWarnForMediaSeekingError: false,
10160
10505
  ...otherProps,
10161
10506
  ref,
@@ -10168,7 +10513,7 @@ var VideoForwardingFunction = (props2, ref) => {
10168
10513
  onAutoPlayError: onAutoPlayError ?? undefined
10169
10514
  });
10170
10515
  };
10171
- var Html5Video = forwardRef14(VideoForwardingFunction);
10516
+ var Html5Video = forwardRef15(VideoForwardingFunction);
10172
10517
  addSequenceStackTraces(Html5Video);
10173
10518
  checkMultipleRemotionVersions();
10174
10519
  var proxyObj = {};
@@ -10196,46 +10541,46 @@ addSequenceStackTraces(Sequence);
10196
10541
  addSequenceStackTraces(Composition);
10197
10542
 
10198
10543
  // src/components/team/TeamCards.tsx
10199
- import { jsx as jsx38, jsxs as jsxs3 } from "react/jsx-runtime";
10544
+ import { jsx as jsx39, jsxs as jsxs3 } from "react/jsx-runtime";
10200
10545
  var LinkedInLogo = () => {
10201
- return /* @__PURE__ */ jsx38("svg", {
10546
+ return /* @__PURE__ */ jsx39("svg", {
10202
10547
  xmlns: "http://www.w3.org/2000/svg",
10203
10548
  viewBox: "0 0 1000 1000",
10204
10549
  className: "w-[30px]",
10205
- children: /* @__PURE__ */ jsx38("path", {
10550
+ children: /* @__PURE__ */ jsx39("path", {
10206
10551
  fill: "currentcolor",
10207
10552
  d: "M195.877 0C88.16 0 0 88.158 0 195.877V803.718C0 911.435 88.158 999.563 195.877 999.563H803.718C911.436 999.563 999.563 911.436 999.563 803.718V195.877C999.563 88.16 911.436 0 803.718 0H195.877ZM245.143 164.948C296.791 164.948 328.604 198.854 329.586 243.423C329.586 287.008 296.789 321.867 244.144 321.867H243.175C192.51 321.867 159.763 287.01 159.763 243.423C159.763 198.855 193.501 164.948 245.142 164.948H245.143ZM690.223 373.258C789.552 373.258 864.013 438.18 864.013 577.694V838.143H713.06V595.156C713.06 534.096 691.213 492.438 636.584 492.438C594.88 492.438 570.022 520.516 559.108 547.64C555.121 557.344 554.141 570.897 554.141 584.472V838.143H403.188C403.188 838.143 405.169 426.53 403.188 383.91H554.172V448.234C574.232 417.284 610.114 373.257 690.223 373.257V373.258ZM168.667 383.943H319.62V838.145H168.667V383.943V383.943Z"
10208
10553
  })
10209
10554
  });
10210
10555
  };
10211
10556
  var TwitterLogo = () => {
10212
- return /* @__PURE__ */ jsx38("svg", {
10557
+ return /* @__PURE__ */ jsx39("svg", {
10213
10558
  xmlns: "http://www.w3.org/2000/svg",
10214
10559
  viewBox: "0 0 530 570",
10215
10560
  className: "w-[32px]",
10216
- children: /* @__PURE__ */ jsx38("path", {
10561
+ children: /* @__PURE__ */ jsx39("path", {
10217
10562
  fill: "currentcolor",
10218
10563
  d: "M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"
10219
10564
  })
10220
10565
  });
10221
10566
  };
10222
10567
  var GitHubLogo = () => {
10223
- return /* @__PURE__ */ jsx38("svg", {
10568
+ return /* @__PURE__ */ jsx39("svg", {
10224
10569
  xmlns: "http://www.w3.org/2000/svg",
10225
10570
  viewBox: "0 0 1084 1084",
10226
10571
  className: "w-[30px]",
10227
- children: /* @__PURE__ */ jsx38("path", {
10572
+ children: /* @__PURE__ */ jsx39("path", {
10228
10573
  fill: "currentcolor",
10229
10574
  d: "M542 0C242.545 0 0 242.545 0 542C0 781.835 155.147 984.408 370.592 1056.22C397.692 1060.97 407.855 1044.71 407.855 1030.48C407.855 1017.61 407.178 974.923 407.178 929.53C271 954.598 235.77 896.332 224.93 865.845C218.832 850.262 192.41 802.16 169.375 789.287C150.405 779.125 123.305 754.057 168.698 753.38C211.38 752.702 241.868 792.675 252.03 808.935C300.81 890.912 378.723 867.878 409.888 853.65C414.63 818.42 428.857 794.707 444.44 781.157C323.845 767.607 197.83 720.86 197.83 513.545C197.83 454.602 218.833 405.822 253.385 367.882C247.965 354.332 228.995 298.777 258.805 224.252C258.805 224.252 304.198 210.025 407.855 279.808C451.215 267.613 497.285 261.515 543.355 261.515C589.425 261.515 635.495 267.613 678.855 279.808C782.513 209.348 827.905 224.252 827.905 224.252C857.715 298.777 838.745 354.332 833.325 367.882C867.878 405.822 888.88 453.925 888.88 513.545C888.88 721.537 762.188 767.607 641.593 781.157C661.24 798.095 678.178 830.615 678.178 881.428C678.178 953.92 677.5 1012.19 677.5 1030.48C677.5 1044.71 687.663 1061.64 714.763 1056.22C822.365 1019.91 915.868 950.759 982.106 858.512C1048.34 766.264 1083.98 655.565 1084 542C1084 242.545 841.455 0 542 0Z"
10230
10575
  })
10231
10576
  });
10232
10577
  };
10233
10578
  var EmailLogo = () => {
10234
- return /* @__PURE__ */ jsx38("svg", {
10579
+ return /* @__PURE__ */ jsx39("svg", {
10235
10580
  xmlns: "http://www.w3.org/2000/svg",
10236
10581
  viewBox: "0 0 1299 1299",
10237
10582
  className: "w-[30px]",
10238
- children: /* @__PURE__ */ jsx38("path", {
10583
+ children: /* @__PURE__ */ jsx39("path", {
10239
10584
  fill: "currentcolor",
10240
10585
  d: "M1177.22 202.969H121.781C99.3278 202.969 81.1875 221.109 81.1875 243.562V1055.44C81.1875 1077.89 99.3278 1096.03 121.781 1096.03H1177.22C1199.67 1096.03 1217.81 1077.89 1217.81 1055.44V243.562C1217.81 221.109 1199.67 202.969 1177.22 202.969ZM1126.48 343.525V1004.7H172.523V343.525L137.511 316.251L187.366 252.189L241.66 294.432H1057.47L1111.76 252.189L1161.62 316.251L1126.48 343.525V343.525ZM1057.47 294.305L649.5 611.443L241.533 294.305L187.239 252.062L137.384 316.124L172.397 343.398L605.735 680.326C618.197 690.008 633.529 695.263 649.31 695.263C665.091 695.263 680.422 690.008 692.885 680.326L1126.48 343.525L1161.49 316.251L1111.63 252.189L1057.47 294.305Z"
10241
10586
  })
@@ -10254,54 +10599,54 @@ var TeamMemberCard = ({
10254
10599
  return /* @__PURE__ */ jsxs3("div", {
10255
10600
  className: "flex-1 rounded-[15px] flex flex-col md:flex-row gap-2 md:gap-4",
10256
10601
  children: [
10257
- /* @__PURE__ */ jsx38("img", {
10602
+ /* @__PURE__ */ jsx39("img", {
10258
10603
  src: image,
10259
10604
  className: "w-[250px] h-[250px] rounded-xl border-effect"
10260
10605
  }),
10261
10606
  /* @__PURE__ */ jsxs3("div", {
10262
10607
  className: "flex flex-col border-effect px-4 py-3 bg-pane",
10263
10608
  children: [
10264
- /* @__PURE__ */ jsx38("h2", {
10609
+ /* @__PURE__ */ jsx39("h2", {
10265
10610
  className: "ext-[1.6em] mb-1 mt-3 text-[var(--ifm-color-primary)] font-brand",
10266
10611
  children: name
10267
10612
  }),
10268
- /* @__PURE__ */ jsx38("strong", {
10613
+ /* @__PURE__ */ jsx39("strong", {
10269
10614
  className: "font-brand",
10270
10615
  children: title
10271
10616
  }),
10272
- /* @__PURE__ */ jsx38("div", {
10617
+ /* @__PURE__ */ jsx39("div", {
10273
10618
  className: "mt-5 mb-5 leading-normal font-brand",
10274
10619
  children: description
10275
10620
  }),
10276
- /* @__PURE__ */ jsx38("div", {
10621
+ /* @__PURE__ */ jsx39("div", {
10277
10622
  className: "flex-1"
10278
10623
  }),
10279
10624
  /* @__PURE__ */ jsxs3("div", {
10280
10625
  className: "gap-3 flex flex-row",
10281
10626
  children: [
10282
- /* @__PURE__ */ jsx38("a", {
10627
+ /* @__PURE__ */ jsx39("a", {
10283
10628
  className: "no-underline text-inherit",
10284
10629
  target: "_blank",
10285
10630
  href: twitter,
10286
- children: /* @__PURE__ */ jsx38(TwitterLogo, {})
10631
+ children: /* @__PURE__ */ jsx39(TwitterLogo, {})
10287
10632
  }),
10288
- /* @__PURE__ */ jsx38("a", {
10633
+ /* @__PURE__ */ jsx39("a", {
10289
10634
  className: "no-underline text-inherit",
10290
10635
  target: "_blank",
10291
10636
  href: linkedin,
10292
- children: /* @__PURE__ */ jsx38(LinkedInLogo, {})
10637
+ children: /* @__PURE__ */ jsx39(LinkedInLogo, {})
10293
10638
  }),
10294
- /* @__PURE__ */ jsx38("a", {
10639
+ /* @__PURE__ */ jsx39("a", {
10295
10640
  className: "no-underline text-inherit",
10296
10641
  target: "_blank",
10297
10642
  href: github,
10298
- children: /* @__PURE__ */ jsx38(GitHubLogo, {})
10643
+ children: /* @__PURE__ */ jsx39(GitHubLogo, {})
10299
10644
  }),
10300
- /* @__PURE__ */ jsx38("a", {
10645
+ /* @__PURE__ */ jsx39("a", {
10301
10646
  className: "no-underline text-inherit",
10302
10647
  target: "_blank",
10303
10648
  href: `mailto:${email}`,
10304
- children: /* @__PURE__ */ jsx38(EmailLogo, {})
10649
+ children: /* @__PURE__ */ jsx39(EmailLogo, {})
10305
10650
  })
10306
10651
  ]
10307
10652
  })
@@ -10314,7 +10659,7 @@ var TeamCardsLayout = () => {
10314
10659
  return /* @__PURE__ */ jsxs3("div", {
10315
10660
  className: "flex flex-col gap-12 md:gap-4",
10316
10661
  children: [
10317
- /* @__PURE__ */ jsx38(TeamMemberCard, {
10662
+ /* @__PURE__ */ jsx39(TeamMemberCard, {
10318
10663
  name: "Jonny Burger",
10319
10664
  title: "Chief Hacker",
10320
10665
  description: "Making cool software for myself and others and getting to know all kinds of different people - that's what makes Remotion my dream job!",
@@ -10324,7 +10669,7 @@ var TeamCardsLayout = () => {
10324
10669
  github: "https://github.com/JonnyBurger",
10325
10670
  email: "jonny@remotion.dev"
10326
10671
  }),
10327
- /* @__PURE__ */ jsx38(TeamMemberCard, {
10672
+ /* @__PURE__ */ jsx39(TeamMemberCard, {
10328
10673
  name: "Mehmet Ademi",
10329
10674
  title: "Business Manager",
10330
10675
  description: "Transitioning from traditional business, Remotion allowed me to merge my passion for technology and business in a distinctive way.",
@@ -10334,7 +10679,7 @@ var TeamCardsLayout = () => {
10334
10679
  github: "https://github.com/MehmetAdemi",
10335
10680
  email: "mehmet@remotion.dev"
10336
10681
  }),
10337
- /* @__PURE__ */ jsx38(TeamMemberCard, {
10682
+ /* @__PURE__ */ jsx39(TeamMemberCard, {
10338
10683
  name: "Igor Samokhovets",
10339
10684
  title: "Product Engineer",
10340
10685
  description: "With a background in music industry and a passion for coding, I've been building tools to help musicians create. Remotion is the perfect place to blend my tech skills and creativity.",
@@ -10349,29 +10694,29 @@ var TeamCardsLayout = () => {
10349
10694
  };
10350
10695
 
10351
10696
  // src/components/experts/experts-icons.tsx
10352
- import { jsx as jsx40 } from "react/jsx-runtime";
10697
+ import { jsx as jsx41 } from "react/jsx-runtime";
10353
10698
  var DiscordLogo = () => {
10354
- return /* @__PURE__ */ jsx40("svg", {
10699
+ return /* @__PURE__ */ jsx41("svg", {
10355
10700
  xmlns: "http://www.w3.org/2000/svg",
10356
10701
  viewBox: "0 0 24 24",
10357
10702
  style: {
10358
10703
  width: 30,
10359
10704
  marginRight: 10
10360
10705
  },
10361
- children: /* @__PURE__ */ jsx40("path", {
10706
+ children: /* @__PURE__ */ jsx41("path", {
10362
10707
  fill: "white",
10363
10708
  d: "M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"
10364
10709
  })
10365
10710
  });
10366
10711
  };
10367
10712
  var PersonalWebsite = () => {
10368
- return /* @__PURE__ */ jsx40("svg", {
10713
+ return /* @__PURE__ */ jsx41("svg", {
10369
10714
  xmlns: "http://www.w3.org/2000/svg",
10370
10715
  viewBox: "0 0 576 576",
10371
10716
  style: {
10372
10717
  width: 30
10373
10718
  },
10374
- children: /* @__PURE__ */ jsx40("path", {
10719
+ children: /* @__PURE__ */ jsx41("path", {
10375
10720
  fill: "currentcolor",
10376
10721
  d: "M317.9 422.7C296.4 465.6 272.7 480 256 480c-7.9 0-17.3-3.2-27.3-11l-6.9 18.6c-2.9 7.8-7.7 14.7-13.9 19.9c15.6 3 31.6 4.5 48.1 4.5c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256c0 16.4 1.5 32.5 4.5 48.1c5.3-6.2 12.1-11 19.9-13.9l9.6-3.5c-1.4-10-2.1-20.2-2.1-30.6c0-22.2 3.2-43.7 9.3-64H132c-2.5 19.2-3.9 39.3-4 60l32.2-11.9c.5-16.7 1.9-32.8 4.1-48.1H347.7c2.8 20.2 4.3 41.7 4.3 64s-1.5 43.8-4.3 64H283.6l-11.8 32H342c-5.9 27-14.2 50.9-24.1 70.7zM194.1 89.3C215.6 46.4 239.3 32 256 32s40.4 14.4 61.9 57.3c9.9 19.8 18.2 43.7 24.1 70.7H170c5.9-27 14.2-50.9 24.1-70.7zM384 256c0-22.1-1.4-43.5-4-64h90.8c6 20.3 9.3 41.8 9.3 64s-3.2 43.7-9.3 64H380c2.6-20.5 4-41.9 4-64zm-9.3-96c-9.6-47.6-26.2-88-47.2-116.3c57.8 19.5 105 61.8 130.9 116.3H374.7zM53.6 160c25.9-54.5 73.1-96.9 130.9-116.3c-21 28.3-37.5 68.8-47.2 116.3H53.6zM374.7 352h83.8c-25.9 54.5-73.1 96.9-130.9 116.3c21-28.3 37.6-68.8 47.2-116.3zM271 261.5c2.2-5.9 .7-12.4-3.7-16.8s-11-5.9-16.8-3.7l-215 79.2c-6.2 2.3-10.3 8.1-10.5 14.7s3.8 12.6 9.9 15.1l74 30.5L4.7 484.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L131.5 403.1l30.5 74c2.5 6.1 8.5 10 15.1 9.9s12.4-4.3 14.7-10.5l79.2-215zM143.3 360L85.1 336 229 283 176 426.9l-24-58.2c-1.6-3.9-4.8-7.1-8.7-8.7z"
10377
10722
  })
@@ -10379,7 +10724,7 @@ var PersonalWebsite = () => {
10379
10724
  };
10380
10725
 
10381
10726
  // src/components/experts/ExpertsPage.tsx
10382
- import { jsx as jsx41, jsxs as jsxs4, Fragment } from "react/jsx-runtime";
10727
+ import { jsx as jsx42, jsxs as jsxs4, Fragment } from "react/jsx-runtime";
10383
10728
  var arrowIcon = {
10384
10729
  height: 16,
10385
10730
  marginLeft: 10
@@ -10413,10 +10758,10 @@ var ExpertCard = ({ expert, Link }) => {
10413
10758
  return /* @__PURE__ */ jsxs4("div", {
10414
10759
  className: "flex-1 rounded-[15px] flex flex-col md:flex-row gap-2 md:gap-4",
10415
10760
  children: [
10416
- /* @__PURE__ */ jsx41(Link, {
10761
+ /* @__PURE__ */ jsx42(Link, {
10417
10762
  href: `/experts/${expert.slug}`,
10418
10763
  className: "no-underline text-inherit",
10419
- children: /* @__PURE__ */ jsx41("img", {
10764
+ children: /* @__PURE__ */ jsx42("img", {
10420
10765
  src: expert.image,
10421
10766
  alt: `Profile picture of ${expert.name}`,
10422
10767
  className: "w-[250px] h-[250px] rounded-xl border-effect object-cover"
@@ -10425,15 +10770,15 @@ var ExpertCard = ({ expert, Link }) => {
10425
10770
  /* @__PURE__ */ jsxs4("div", {
10426
10771
  className: "flex flex-col border-effect px-4 py-3 bg-pane flex-1",
10427
10772
  children: [
10428
- /* @__PURE__ */ jsx41(Link, {
10773
+ /* @__PURE__ */ jsx42(Link, {
10429
10774
  href: `/experts/${expert.slug}`,
10430
10775
  className: "no-underline text-inherit",
10431
- children: /* @__PURE__ */ jsx41("h2", {
10776
+ children: /* @__PURE__ */ jsx42("h2", {
10432
10777
  className: "text-[1.6em] mb-1 mt-3 text-[var(--ifm-color-primary)] font-brand",
10433
10778
  children: expert.name
10434
10779
  })
10435
10780
  }),
10436
- /* @__PURE__ */ jsx41("div", {
10781
+ /* @__PURE__ */ jsx42("div", {
10437
10782
  className: "mt-2 mb-3 leading-normal font-brand",
10438
10783
  children: expert.description
10439
10784
  }),
@@ -10446,11 +10791,11 @@ var ExpertCard = ({ expert, Link }) => {
10446
10791
  children: [
10447
10792
  "View profile",
10448
10793
  " ",
10449
- /* @__PURE__ */ jsx41("svg", {
10794
+ /* @__PURE__ */ jsx42("svg", {
10450
10795
  style: arrowIcon,
10451
10796
  xmlns: "http://www.w3.org/2000/svg",
10452
10797
  viewBox: "0 0 448 512",
10453
- children: /* @__PURE__ */ jsx41("path", {
10798
+ children: /* @__PURE__ */ jsx42("path", {
10454
10799
  fill: "currentColor",
10455
10800
  d: "M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
10456
10801
  })
@@ -10459,7 +10804,7 @@ var ExpertCard = ({ expert, Link }) => {
10459
10804
  }),
10460
10805
  expert.videocall ? /* @__PURE__ */ jsxs4(Fragment, {
10461
10806
  children: [
10462
- /* @__PURE__ */ jsx41("br", {}),
10807
+ /* @__PURE__ */ jsx42("br", {}),
10463
10808
  /* @__PURE__ */ jsxs4("a", {
10464
10809
  className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center",
10465
10810
  target: "_blank",
@@ -10467,11 +10812,11 @@ var ExpertCard = ({ expert, Link }) => {
10467
10812
  children: [
10468
10813
  "Book a call",
10469
10814
  " ",
10470
- /* @__PURE__ */ jsx41("svg", {
10815
+ /* @__PURE__ */ jsx42("svg", {
10471
10816
  style: arrowIcon,
10472
10817
  xmlns: "http://www.w3.org/2000/svg",
10473
10818
  viewBox: "0 0 448 512",
10474
- children: /* @__PURE__ */ jsx41("path", {
10819
+ children: /* @__PURE__ */ jsx42("path", {
10475
10820
  fill: "currentColor",
10476
10821
  d: "M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
10477
10822
  })
@@ -10482,48 +10827,48 @@ var ExpertCard = ({ expert, Link }) => {
10482
10827
  }) : null
10483
10828
  ]
10484
10829
  }),
10485
- /* @__PURE__ */ jsx41("div", {
10830
+ /* @__PURE__ */ jsx42("div", {
10486
10831
  className: "flex-1"
10487
10832
  }),
10488
10833
  /* @__PURE__ */ jsxs4("div", {
10489
10834
  className: "gap-3 flex flex-row flex-wrap",
10490
10835
  children: [
10491
- expert.website ? /* @__PURE__ */ jsx41("a", {
10836
+ expert.website ? /* @__PURE__ */ jsx42("a", {
10492
10837
  className: "no-underline text-inherit",
10493
10838
  target: "_blank",
10494
10839
  href: expert.website,
10495
- children: /* @__PURE__ */ jsx41(PersonalWebsite, {})
10840
+ children: /* @__PURE__ */ jsx42(PersonalWebsite, {})
10496
10841
  }) : null,
10497
- expert.x ? /* @__PURE__ */ jsx41("a", {
10842
+ expert.x ? /* @__PURE__ */ jsx42("a", {
10498
10843
  className: "no-underline text-inherit",
10499
10844
  target: "_blank",
10500
10845
  href: `https://x.com/${expert.x}`,
10501
- children: /* @__PURE__ */ jsx41(TwitterLogo, {})
10846
+ children: /* @__PURE__ */ jsx42(TwitterLogo, {})
10502
10847
  }) : null,
10503
- expert.github ? /* @__PURE__ */ jsx41("a", {
10848
+ expert.github ? /* @__PURE__ */ jsx42("a", {
10504
10849
  className: "no-underline text-inherit",
10505
10850
  target: "_blank",
10506
10851
  href: `https://github.com/${expert.github}`,
10507
- children: /* @__PURE__ */ jsx41(GitHubLogo, {})
10852
+ children: /* @__PURE__ */ jsx42(GitHubLogo, {})
10508
10853
  }) : null,
10509
- expert.linkedin ? /* @__PURE__ */ jsx41("a", {
10854
+ expert.linkedin ? /* @__PURE__ */ jsx42("a", {
10510
10855
  className: "no-underline text-inherit",
10511
10856
  target: "_blank",
10512
10857
  href: `https://www.linkedin.com/${expert.linkedin}`,
10513
- children: /* @__PURE__ */ jsx41(LinkedInLogo, {})
10858
+ children: /* @__PURE__ */ jsx42(LinkedInLogo, {})
10514
10859
  }) : null,
10515
- expert.email ? /* @__PURE__ */ jsx41("a", {
10860
+ expert.email ? /* @__PURE__ */ jsx42("a", {
10516
10861
  className: "no-underline text-inherit",
10517
10862
  target: "_blank",
10518
10863
  href: `mailto:${expert.email}`,
10519
- children: /* @__PURE__ */ jsx41(EmailLogo, {})
10864
+ children: /* @__PURE__ */ jsx42(EmailLogo, {})
10520
10865
  }) : null,
10521
- expert.discord ? /* @__PURE__ */ jsx41("a", {
10866
+ expert.discord ? /* @__PURE__ */ jsx42("a", {
10522
10867
  className: "no-underline text-inherit",
10523
10868
  target: "_blank",
10524
10869
  href: `https://discord.com/users/${expert.discord.userId}`,
10525
10870
  title: `@${expert.discord.username} on Discord`,
10526
- children: /* @__PURE__ */ jsx41(DiscordLogo, {})
10871
+ children: /* @__PURE__ */ jsx42(DiscordLogo, {})
10527
10872
  }) : null
10528
10873
  ]
10529
10874
  })
@@ -10533,18 +10878,18 @@ var ExpertCard = ({ expert, Link }) => {
10533
10878
  });
10534
10879
  };
10535
10880
  var ExpertsPageContent = ({ Link }) => {
10536
- const expertsInRandomOrder = useMemo39(() => {
10881
+ const expertsInRandomOrder = useMemo40(() => {
10537
10882
  if (typeof window === "undefined") {
10538
10883
  return [];
10539
10884
  }
10540
10885
  return experts.sort((a, b) => random(a.name + todayHash) - random(b.name + todayHash));
10541
10886
  }, []);
10542
- return /* @__PURE__ */ jsx41("div", {
10887
+ return /* @__PURE__ */ jsx42("div", {
10543
10888
  className: "relative bg-[var(--background)]",
10544
10889
  children: /* @__PURE__ */ jsxs4("div", {
10545
10890
  style: wrapperStyle,
10546
10891
  children: [
10547
- /* @__PURE__ */ jsx41("h1", {
10892
+ /* @__PURE__ */ jsx42("h1", {
10548
10893
  className: "experts-pagetitle",
10549
10894
  children: "Find a Remotion Expert"
10550
10895
  }),
@@ -10552,16 +10897,16 @@ var ExpertsPageContent = ({ Link }) => {
10552
10897
  className: "experts-tagline",
10553
10898
  children: [
10554
10899
  "Get help by booking a call or hiring these freelancers to work on your Remotion project.",
10555
- /* @__PURE__ */ jsx41("br", {}),
10900
+ /* @__PURE__ */ jsx42("br", {}),
10556
10901
  "They appear in random order.",
10557
10902
  " "
10558
10903
  ]
10559
10904
  }),
10560
- /* @__PURE__ */ jsx41("p", {
10905
+ /* @__PURE__ */ jsx42("p", {
10561
10906
  className: "experts-tagline",
10562
- children: /* @__PURE__ */ jsx41("a", {
10907
+ children: /* @__PURE__ */ jsx42("a", {
10563
10908
  href: "mailto:hi@remotion.dev?subject=Remotion+Experts+directory",
10564
- children: /* @__PURE__ */ jsx41("strong", {
10909
+ children: /* @__PURE__ */ jsx42("strong", {
10565
10910
  children: "Are you available for hire? Let us know!"
10566
10911
  })
10567
10912
  })
@@ -10578,20 +10923,20 @@ var ExpertsPageContent = ({ Link }) => {
10578
10923
  /* @__PURE__ */ jsxs4("g", {
10579
10924
  clipPath: "url(#clip0_1_2)",
10580
10925
  children: [
10581
- /* @__PURE__ */ jsx41("path", {
10926
+ /* @__PURE__ */ jsx42("path", {
10582
10927
  d: "M511.5 213C532.991 213 551.678 225.088 561.08 242.842C580.293 236.943 602.018 241.615 617.201 256.799C632.385 271.982 637.057 293.765 631.158 312.92C648.912 322.322 661 341.009 661 362.5C661 383.991 648.912 402.678 631.158 412.08C637.057 431.293 632.385 453.018 617.201 468.201C602.018 483.385 580.235 488.057 561.08 482.158C551.678 499.912 532.991 512 511.5 512C490.009 512 471.322 499.912 461.92 482.158C442.707 488.057 420.982 483.385 405.799 468.201C390.615 453.018 385.943 431.235 391.842 412.08C374.088 402.678 362 383.991 362 362.5C362 341.009 374.088 322.322 391.842 312.92C385.943 293.707 390.615 271.982 405.799 256.799C420.982 241.615 442.765 236.943 461.92 242.842C471.322 225.088 490.009 213 511.5 213ZM568.146 344.396L578.074 334.469L558.219 314.672L548.291 324.599L492.812 380.078L470.037 357.303L460.109 347.375L440.312 367.172L450.24 377.1L482.943 409.803L492.871 419.73L502.799 409.803L568.146 344.396Z",
10583
10928
  fill: "currentcolor"
10584
10929
  }),
10585
- /* @__PURE__ */ jsx41("path", {
10930
+ /* @__PURE__ */ jsx42("path", {
10586
10931
  d: "M184 48H328C332.4 48 336 51.6 336 56V96H176V56C176 51.6 179.6 48 184 48ZM128 56V96H64C28.7 96 0 124.7 0 160V256H192H352H360.2C392.5 216.9 441.3 192 496 192C501.4 192 506.7 192.2 512 192.7V160C512 124.7 483.3 96 448 96H384V56C384 25.1 358.9 0 328 0H184C153.1 0 128 25.1 128 56ZM320 352H224C206.3 352 192 337.7 192 320V288H0V416C0 451.3 28.7 480 64 480H360.2C335.1 449.6 320 410.5 320 368C320 362.6 320.2 357.3 320.7 352H320Z",
10587
10932
  fill: "currentcolor"
10588
10933
  })
10589
10934
  ]
10590
10935
  }),
10591
- /* @__PURE__ */ jsx41("defs", {
10592
- children: /* @__PURE__ */ jsx41("clipPath", {
10936
+ /* @__PURE__ */ jsx42("defs", {
10937
+ children: /* @__PURE__ */ jsx42("clipPath", {
10593
10938
  id: "clip0_1_2",
10594
- children: /* @__PURE__ */ jsx41("rect", {
10939
+ children: /* @__PURE__ */ jsx42("rect", {
10595
10940
  width: "661",
10596
10941
  height: "512",
10597
10942
  fill: "white"
@@ -10605,22 +10950,22 @@ var ExpertsPageContent = ({ Link }) => {
10605
10950
  children: [
10606
10951
  "Remotion Experts are independent freelancers with proven Remotion expertise and portfolios. However,",
10607
10952
  " ",
10608
- /* @__PURE__ */ jsx41("strong", {
10953
+ /* @__PURE__ */ jsx42("strong", {
10609
10954
  children: " perform due diligence "
10610
10955
  }),
10611
10956
  " before hiring. ",
10612
- /* @__PURE__ */ jsx41("br", {}),
10957
+ /* @__PURE__ */ jsx42("br", {}),
10613
10958
  " ",
10614
10959
  "Remotion does not arbitrate disputes between experts and clients."
10615
10960
  ]
10616
10961
  })
10617
10962
  ]
10618
10963
  }),
10619
- /* @__PURE__ */ jsx41("br", {}),
10620
- /* @__PURE__ */ jsx41("div", {
10964
+ /* @__PURE__ */ jsx42("br", {}),
10965
+ /* @__PURE__ */ jsx42("div", {
10621
10966
  className: "flex flex-col gap-12 md:gap-4",
10622
10967
  children: expertsInRandomOrder.map((e) => {
10623
- return /* @__PURE__ */ jsx41(ExpertCard, {
10968
+ return /* @__PURE__ */ jsx42(ExpertCard, {
10624
10969
  expert: e,
10625
10970
  Link
10626
10971
  }, e.name);