@remotion/promo-pages 4.0.505 → 4.0.506

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
@@ -972,7 +972,13 @@ import React13, { createContext as createContext14 } from "react";
972
972
  import { jsx as jsx11 } from "react/jsx-runtime";
973
973
  import { useContext as useContext15, useMemo as useMemo13 } from "react";
974
974
  import { createContext as createContext15 } from "react";
975
- import React14, { forwardRef as forwardRef2, useContext as useContext17, useMemo as useMemo14, useState as useState4 } from "react";
975
+ import React14, {
976
+ forwardRef as forwardRef2,
977
+ useContext as useContext17,
978
+ useLayoutEffect as useLayoutEffect2,
979
+ useMemo as useMemo14,
980
+ useState as useState4
981
+ } from "react";
976
982
  import { useContext as useContext16, useRef as useRef5 } from "react";
977
983
  import { createContext as createContext16 } from "react";
978
984
  import { jsx as jsx12 } from "react/jsx-runtime";
@@ -982,7 +988,7 @@ import {
982
988
  forwardRef as forwardRef4,
983
989
  useEffect as useEffect5,
984
990
  useImperativeHandle as useImperativeHandle2,
985
- useLayoutEffect as useLayoutEffect2,
991
+ useLayoutEffect as useLayoutEffect3,
986
992
  useRef as useRef10,
987
993
  useState as useState6
988
994
  } from "react";
@@ -991,12 +997,12 @@ import React17, { useCallback as useCallback8, useImperativeHandle, useMemo as u
991
997
  import { useEffect as useEffect4, useMemo as useMemo17, useRef as useRef8 } from "react";
992
998
  import { jsx as jsx14 } from "react/jsx-runtime";
993
999
  import { jsx as jsx15 } from "react/jsx-runtime";
994
- import { useContext as useContext19, useLayoutEffect as useLayoutEffect4, useState as useState8 } from "react";
1000
+ import { useContext as useContext19, useLayoutEffect as useLayoutEffect5, useState as useState8 } from "react";
995
1001
  import {
996
1002
  createContext as createContext17,
997
1003
  useCallback as useCallback9,
998
1004
  useImperativeHandle as useImperativeHandle3,
999
- useLayoutEffect as useLayoutEffect3,
1005
+ useLayoutEffect as useLayoutEffect4,
1000
1006
  useMemo as useMemo19,
1001
1007
  useRef as useRef11,
1002
1008
  useState as useState7
@@ -1020,7 +1026,7 @@ import React24, {
1020
1026
  useRef as useRef20,
1021
1027
  useState as useState14
1022
1028
  } from "react";
1023
- import { useContext as useContext22, useLayoutEffect as useLayoutEffect5, useRef as useRef15 } from "react";
1029
+ import { useContext as useContext22, useLayoutEffect as useLayoutEffect6, useRef as useRef15 } from "react";
1024
1030
  import React21, {
1025
1031
  createContext as createContext21,
1026
1032
  createRef as createRef2,
@@ -1040,7 +1046,7 @@ import {
1040
1046
  useCallback as useCallback13,
1041
1047
  useContext as useContext27,
1042
1048
  useEffect as useEffect12,
1043
- useLayoutEffect as useLayoutEffect7,
1049
+ useLayoutEffect as useLayoutEffect8,
1044
1050
  useRef as useRef19
1045
1051
  } from "react";
1046
1052
  import { useCallback as useCallback12, useMemo as useMemo27, useRef as useRef17 } from "react";
@@ -1049,7 +1055,7 @@ import React22, {
1049
1055
  useCallback as useCallback11,
1050
1056
  useContext as useContext25,
1051
1057
  useEffect as useEffect9,
1052
- useLayoutEffect as useLayoutEffect6,
1058
+ useLayoutEffect as useLayoutEffect7,
1053
1059
  useMemo as useMemo25,
1054
1060
  useRef as useRef16,
1055
1061
  useState as useState12
@@ -1066,7 +1072,7 @@ import {
1066
1072
  useContext as useContext30,
1067
1073
  useEffect as useEffect15,
1068
1074
  useImperativeHandle as useImperativeHandle5,
1069
- useLayoutEffect as useLayoutEffect8,
1075
+ useLayoutEffect as useLayoutEffect9,
1070
1076
  useMemo as useMemo30,
1071
1077
  useRef as useRef21
1072
1078
  } from "react";
@@ -1087,7 +1093,7 @@ import {
1087
1093
  forwardRef as forwardRef9,
1088
1094
  useCallback as useCallback17,
1089
1095
  useContext as useContext32,
1090
- useLayoutEffect as useLayoutEffect9,
1096
+ useLayoutEffect as useLayoutEffect10,
1091
1097
  useMemo as useMemo32,
1092
1098
  useRef as useRef23
1093
1099
  } from "react";
@@ -1097,7 +1103,7 @@ import {
1097
1103
  useCallback as useCallback18,
1098
1104
  useContext as useContext33,
1099
1105
  useImperativeHandle as useImperativeHandle7,
1100
- useLayoutEffect as useLayoutEffect10,
1106
+ useLayoutEffect as useLayoutEffect11,
1101
1107
  useMemo as useMemo33,
1102
1108
  useRef as useRef24,
1103
1109
  useState as useState16
@@ -1108,7 +1114,7 @@ import { jsx as jsx28 } from "react/jsx-runtime";
1108
1114
  import {
1109
1115
  useCallback as useCallback20,
1110
1116
  useContext as useContext34,
1111
- useLayoutEffect as useLayoutEffect11,
1117
+ useLayoutEffect as useLayoutEffect12,
1112
1118
  useRef as useRef25,
1113
1119
  useState as useState18
1114
1120
  } from "react";
@@ -1138,7 +1144,7 @@ import {
1138
1144
  useCallback as useCallback23,
1139
1145
  useContext as useContext37,
1140
1146
  useEffect as useEffect17,
1141
- useLayoutEffect as useLayoutEffect12,
1147
+ useLayoutEffect as useLayoutEffect13,
1142
1148
  useMemo as useMemo37,
1143
1149
  useState as useState20
1144
1150
  } from "react";
@@ -1171,7 +1177,7 @@ import {
1171
1177
  useContext as useContext39,
1172
1178
  useEffect as useEffect20,
1173
1179
  useImperativeHandle as useImperativeHandle10,
1174
- useLayoutEffect as useLayoutEffect13,
1180
+ useLayoutEffect as useLayoutEffect14,
1175
1181
  useMemo as useMemo41,
1176
1182
  useRef as useRef29
1177
1183
  } from "react";
@@ -2364,7 +2370,7 @@ var getSingleChildComponent = (children) => {
2364
2370
  }
2365
2371
  return child.type;
2366
2372
  };
2367
- var VERSION = "4.0.505";
2373
+ var VERSION = "4.0.506";
2368
2374
  var checkMultipleRemotionVersions = () => {
2369
2375
  if (typeof globalThis === "undefined") {
2370
2376
  return;
@@ -2415,6 +2421,7 @@ var SetTimelineContext = createContext13({
2415
2421
  }
2416
2422
  });
2417
2423
  var TimelineContext = createContext13(null);
2424
+ var TimelineImperativeContext = createContext13(null);
2418
2425
  var PlaybackRateContext = createContext13(null);
2419
2426
  var AbsoluteTimeContext = createContext13(null);
2420
2427
  var TimelineContextProvider = ({ children, frameState }) => {
@@ -2424,6 +2431,8 @@ var TimelineContextProvider = ({ children, frameState }) => {
2424
2431
  const audioAndVideoTags = useRef3([]);
2425
2432
  const [_frame, setFrame] = useState2(() => getInitialFrameState());
2426
2433
  const frame = frameState ?? _frame;
2434
+ const frameRef = useRef3(frame);
2435
+ frameRef.current = frame;
2427
2436
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
2428
2437
  if (typeof window !== "undefined") {
2429
2438
  useLayoutEffect(() => {
@@ -2459,6 +2468,13 @@ var TimelineContextProvider = ({ children, frameState }) => {
2459
2468
  audioAndVideoTags
2460
2469
  };
2461
2470
  }, [frame, playing]);
2471
+ const timelineImperativeContextValue = useMemo8(() => {
2472
+ return {
2473
+ frameRef,
2474
+ imperativePlaying,
2475
+ audioAndVideoTags
2476
+ };
2477
+ }, []);
2462
2478
  const playbackRateContextValue = useMemo8(() => {
2463
2479
  return {
2464
2480
  playbackRate,
@@ -2475,11 +2491,14 @@ var TimelineContextProvider = ({ children, frameState }) => {
2475
2491
  value: timelineContextValue,
2476
2492
  children: /* @__PURE__ */ jsx8(PlaybackRateContext.Provider, {
2477
2493
  value: playbackRateContextValue,
2478
- children: /* @__PURE__ */ jsx8(TimelineContext.Provider, {
2479
- value: timelineContextValue,
2480
- children: /* @__PURE__ */ jsx8(SetTimelineContext.Provider, {
2481
- value: setTimelineContextValue,
2482
- children
2494
+ children: /* @__PURE__ */ jsx8(TimelineImperativeContext.Provider, {
2495
+ value: timelineImperativeContextValue,
2496
+ children: /* @__PURE__ */ jsx8(TimelineContext.Provider, {
2497
+ value: timelineContextValue,
2498
+ children: /* @__PURE__ */ jsx8(SetTimelineContext.Provider, {
2499
+ value: setTimelineContextValue,
2500
+ children
2501
+ })
2483
2502
  })
2484
2503
  })
2485
2504
  })
@@ -5304,6 +5323,31 @@ var getFlatSchemaWithAllKeys = (schema) => {
5304
5323
  }
5305
5324
  return out;
5306
5325
  };
5326
+ var createRuntimeValueStore = (initialSnapshot) => {
5327
+ let snapshot = initialSnapshot;
5328
+ const listeners = new Set;
5329
+ const store = {
5330
+ getSnapshot: () => snapshot,
5331
+ subscribe: (listener) => {
5332
+ listeners.add(listener);
5333
+ return () => {
5334
+ listeners.delete(listener);
5335
+ };
5336
+ }
5337
+ };
5338
+ return {
5339
+ store,
5340
+ setSnapshot: (newSnapshot) => {
5341
+ if (snapshot === newSnapshot) {
5342
+ return;
5343
+ }
5344
+ snapshot = newSnapshot;
5345
+ for (const listener of listeners) {
5346
+ listener();
5347
+ }
5348
+ }
5349
+ };
5350
+ };
5307
5351
  var findPropsToDelete = ({
5308
5352
  schema,
5309
5353
  key,
@@ -5605,16 +5649,21 @@ var withInteractivitySchema = ({
5605
5649
  props: cleanProps
5606
5650
  }));
5607
5651
  const currentRuntimeValueDotNotation = useMemo14(() => readValuesFromProps(cleanProps, flatKeys, flatSchema), runtimeValues);
5652
+ const [runtimeValueStore] = useState4(() => createRuntimeValueStore(currentRuntimeValueDotNotation));
5653
+ useLayoutEffect2(() => {
5654
+ runtimeValueStore.setSnapshot(currentRuntimeValueDotNotation);
5655
+ }, [currentRuntimeValueDotNotation, runtimeValueStore]);
5608
5656
  const controls = useMemo14(() => {
5609
5657
  return {
5610
5658
  schema: schemaWithSequenceName,
5611
5659
  currentRuntimeValueDotNotation,
5660
+ runtimeValues: runtimeValueStore.store,
5612
5661
  overrideId,
5613
5662
  supportsEffects,
5614
5663
  componentIdentity,
5615
5664
  componentName
5616
5665
  };
5617
- }, [currentRuntimeValueDotNotation, overrideId]);
5666
+ }, [currentRuntimeValueDotNotation, overrideId, runtimeValueStore.store]);
5618
5667
  setStackForControls(controls, internalStack);
5619
5668
  const { merged: valuesDotNotation, propsToDelete } = useMemo14(() => {
5620
5669
  return computeEffectiveSchemaValuesDotNotation({
@@ -5799,6 +5848,32 @@ var RegularSequenceRefForwardingFunction = ({
5799
5848
  const startMediaFrom = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom - cumulatedNegativeFrom : null;
5800
5849
  const mediaFrameAtSequenceZero = isMedia && isMedia.type !== "image" ? isMedia.data.startMediaFrom + parentCumulatedNegativeFrom : null;
5801
5850
  const frozenMediaFrame = isMedia && isMedia.type !== "image" && mediaFrameAtSequenceZero !== null ? registeredFrozenFrame === null ? null : mediaFrameAtSequenceZero + (loopDisplay ? registeredFrozenFrame % loopDisplay.durationInFrames : registeredFrozenFrame) * isMedia.data.playbackRate : null;
5851
+ const controlsSchema = controls?.schema;
5852
+ const controlsRuntimeValues = controls?.runtimeValues;
5853
+ const controlsOverrideId = controls?.overrideId;
5854
+ const controlsSupportsEffects = controls?.supportsEffects;
5855
+ const controlsComponentIdentity = controls?.componentIdentity;
5856
+ const controlsComponentName = controls?.componentName;
5857
+ const registrationControls = useMemo15(() => {
5858
+ if (controlsSchema === undefined || controlsRuntimeValues === undefined || controlsOverrideId === undefined || controlsSupportsEffects === undefined || controlsComponentIdentity === undefined || controlsComponentName === undefined) {
5859
+ return null;
5860
+ }
5861
+ return {
5862
+ schema: controlsSchema,
5863
+ runtimeValues: controlsRuntimeValues,
5864
+ overrideId: controlsOverrideId,
5865
+ supportsEffects: controlsSupportsEffects,
5866
+ componentIdentity: controlsComponentIdentity,
5867
+ componentName: controlsComponentName
5868
+ };
5869
+ }, [
5870
+ controlsComponentIdentity,
5871
+ controlsComponentName,
5872
+ controlsOverrideId,
5873
+ controlsRuntimeValues,
5874
+ controlsSchema,
5875
+ controlsSupportsEffects
5876
+ ]);
5802
5877
  useEffect3(() => {
5803
5878
  if (!env.isStudio) {
5804
5879
  return;
@@ -5807,7 +5882,7 @@ var RegularSequenceRefForwardingFunction = ({
5807
5882
  if (isMedia.type === "image") {
5808
5883
  registerSequence({
5809
5884
  type: "image",
5810
- controls: controls ?? null,
5885
+ controls: registrationControls,
5811
5886
  effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
5812
5887
  displayName: timelineClipName,
5813
5888
  documentationLink: resolvedDocumentationLink,
@@ -5831,7 +5906,7 @@ var RegularSequenceRefForwardingFunction = ({
5831
5906
  } else {
5832
5907
  registerSequence({
5833
5908
  type: isMedia.type,
5834
- controls: controls ?? null,
5909
+ controls: registrationControls,
5835
5910
  effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
5836
5911
  displayName: timelineClipName,
5837
5912
  documentationLink: resolvedDocumentationLink,
@@ -5878,7 +5953,7 @@ var RegularSequenceRefForwardingFunction = ({
5878
5953
  getStack: () => stackRef.current,
5879
5954
  premountDisplay: premountDisplay ?? null,
5880
5955
  postmountDisplay: postmountDisplay ?? null,
5881
- controls: controls ?? null,
5956
+ controls: registrationControls,
5882
5957
  effects: _remotionInternalEffects ?? EMPTY_EFFECTS,
5883
5958
  refForOutline: refForOutline ?? null,
5884
5959
  isInsideSeries,
@@ -5906,7 +5981,7 @@ var RegularSequenceRefForwardingFunction = ({
5906
5981
  premountDisplay,
5907
5982
  postmountDisplay,
5908
5983
  env.isStudio,
5909
- controls,
5984
+ registrationControls,
5910
5985
  _remotionInternalEffects,
5911
5986
  isMedia,
5912
5987
  resolvedDocumentationLink,
@@ -6832,7 +6907,7 @@ var AnimatedImageContent = forwardRef4(({
6832
6907
  imageDecoder?.close();
6833
6908
  };
6834
6909
  }, [imageDecoder]);
6835
- useLayoutEffect2(() => {
6910
+ useLayoutEffect3(() => {
6836
6911
  if (!imageDecoder) {
6837
6912
  return;
6838
6913
  }
@@ -7089,7 +7164,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
7089
7164
  renderAssetsRef.current = renderAssetsRef.current.filter((a2) => a2.id !== id);
7090
7165
  setRenderAssets(renderAssetsRef.current);
7091
7166
  }, []);
7092
- useLayoutEffect3(() => {
7167
+ useLayoutEffect4(() => {
7093
7168
  if (typeof window !== "undefined") {
7094
7169
  window.remotion_collectAssets = () => {
7095
7170
  const assets = renderAssetsRef.current;
@@ -7119,7 +7194,7 @@ var Artifact = ({ filename, content, downloadBehavior }) => {
7119
7194
  const [id] = useState8(() => {
7120
7195
  return String(Math.random());
7121
7196
  });
7122
- useLayoutEffect4(() => {
7197
+ useLayoutEffect5(() => {
7123
7198
  if (!env.isRendering) {
7124
7199
  return;
7125
7200
  }
@@ -8437,7 +8512,7 @@ var useVolume = ({
8437
8512
  }
8438
8513
  const { audioContext, gainNode: masterGainNode } = sharedAudioContext;
8439
8514
  if (typeof window !== "undefined") {
8440
- useLayoutEffect5(() => {
8515
+ useLayoutEffect6(() => {
8441
8516
  if (!audioContext) {
8442
8517
  return;
8443
8518
  }
@@ -8803,7 +8878,7 @@ var useBufferManager = (logLevel, mountTime) => {
8803
8878
  }
8804
8879
  }, [blocks]);
8805
8880
  if (typeof window !== "undefined") {
8806
- useLayoutEffect6(() => {
8881
+ useLayoutEffect7(() => {
8807
8882
  if (rendering) {
8808
8883
  return;
8809
8884
  }
@@ -9437,7 +9512,7 @@ var useMediaPlayback = ({
9437
9512
  isPostmounting
9438
9513
  ]);
9439
9514
  const env = useRemotionEnvironment();
9440
- useLayoutEffect7(() => {
9515
+ useLayoutEffect8(() => {
9441
9516
  const playbackRateToSet = Math.max(0, playbackRate);
9442
9517
  if (mediaRef.current && mediaRef.current.playbackRate !== playbackRateToSet) {
9443
9518
  mediaRef.current.playbackRate = playbackRateToSet;
@@ -9915,7 +9990,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
9915
9990
  ]);
9916
9991
  const { src } = props;
9917
9992
  const needsToRenderAudioTag = ref || _remotionInternalNeedsDurationCalculation;
9918
- useLayoutEffect8(() => {
9993
+ useLayoutEffect9(() => {
9919
9994
  if (window.process?.env?.NODE_ENV === "test") {
9920
9995
  return;
9921
9996
  }
@@ -10562,7 +10637,7 @@ var HtmlInCanvasContent = forwardRef9(({
10562
10637
  resolvedPixelDensity,
10563
10638
  canRetryMissingPaintRecord
10564
10639
  ]);
10565
- useLayoutEffect9(() => {
10640
+ useLayoutEffect10(() => {
10566
10641
  const placeholder = canvas2dRef.current;
10567
10642
  if (!placeholder) {
10568
10643
  throw new Error("Canvas not found");
@@ -10594,7 +10669,7 @@ var HtmlInCanvasContent = forwardRef9(({
10594
10669
  usesDirectLayoutCanvas
10595
10670
  ]);
10596
10671
  const onPaintChangedRef = useRef23(false);
10597
- useLayoutEffect9(() => {
10672
+ useLayoutEffect10(() => {
10598
10673
  if (!onPaintChangedRef.current) {
10599
10674
  onPaintChangedRef.current = true;
10600
10675
  return;
@@ -10605,7 +10680,7 @@ var HtmlInCanvasContent = forwardRef9(({
10605
10680
  }
10606
10681
  canvas.requestPaint?.();
10607
10682
  }, [onPaint, memoizedEffects]);
10608
- useLayoutEffect9(() => {
10683
+ useLayoutEffect10(() => {
10609
10684
  const canvas = canvas2dRef.current;
10610
10685
  if (!canvas) {
10611
10686
  return;
@@ -10903,7 +10978,7 @@ var CanvasImageContent = forwardRef10(({
10903
10978
  ref.current = canvas;
10904
10979
  }
10905
10980
  }, [ref, refForOutline]);
10906
- useLayoutEffect10(() => {
10981
+ useLayoutEffect11(() => {
10907
10982
  if (!pauseWhenLoading || !isLoadPending || isPremounting || isPostmounting) {
10908
10983
  return;
10909
10984
  }
@@ -10915,7 +10990,7 @@ var CanvasImageContent = forwardRef10(({
10915
10990
  isPremounting,
10916
10991
  pauseWhenLoading
10917
10992
  ]);
10918
- useLayoutEffect10(() => {
10993
+ useLayoutEffect11(() => {
10919
10994
  const handle = delayRender2(`Rendering <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`, {
10920
10995
  retries: delayRenderRetries ?? undefined,
10921
10996
  timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
@@ -10977,7 +11052,7 @@ var CanvasImageContent = forwardRef10(({
10977
11052
  maxRetries,
10978
11053
  onError
10979
11054
  ]);
10980
- useLayoutEffect10(() => {
11055
+ useLayoutEffect11(() => {
10981
11056
  if (!loadedImage || !outputCanvas || !sourceCanvas) {
10982
11057
  return;
10983
11058
  }
@@ -11305,7 +11380,7 @@ var ImgContent = ({
11305
11380
  } catch {}
11306
11381
  }, [cancelRender2, maxRetries, onError, retryIn]);
11307
11382
  if (typeof window !== "undefined") {
11308
- useLayoutEffect11(() => {
11383
+ useLayoutEffect12(() => {
11309
11384
  if (!pauseWhenLoading || !isLoading || isPremounting || isPostmounting) {
11310
11385
  return;
11311
11386
  }
@@ -11317,7 +11392,7 @@ var ImgContent = ({
11317
11392
  isPremounting,
11318
11393
  pauseWhenLoading
11319
11394
  ]);
11320
- useLayoutEffect11(() => {
11395
+ useLayoutEffect12(() => {
11321
11396
  if (window.process?.env?.NODE_ENV === "test") {
11322
11397
  if (imageRef.current) {
11323
11398
  imageRef.current.src = actualSrc;
@@ -11668,7 +11743,8 @@ var makeRemotionComponentIdentity = ({
11668
11743
  };
11669
11744
  var interactiveElementSchema = {
11670
11745
  ...baseSchema,
11671
- ...transformSchema
11746
+ ...transformSchema,
11747
+ ...cropSchema
11672
11748
  };
11673
11749
  var interactiveBackgroundElementSchema = {
11674
11750
  ...interactiveElementSchema,
@@ -11725,8 +11801,21 @@ var makeInteractiveElement = (tag, displayName, schema) => {
11725
11801
  name,
11726
11802
  showInTimeline,
11727
11803
  controls,
11804
+ cropLeft,
11805
+ cropRight,
11806
+ cropTop,
11807
+ cropBottom,
11808
+ style,
11728
11809
  ...props2
11729
11810
  } = propsWithControls;
11811
+ const croppedStyle = useCropStyle({
11812
+ cropLeft,
11813
+ cropRight,
11814
+ cropTop,
11815
+ cropBottom,
11816
+ style: style ?? null,
11817
+ componentName: displayName
11818
+ });
11730
11819
  const refForOutline = useRef26(null);
11731
11820
  const callbackRef = useCallback21((element) => {
11732
11821
  refForOutline.current = element;
@@ -11746,6 +11835,7 @@ var makeInteractiveElement = (tag, displayName, schema) => {
11746
11835
  outlineRef: refForOutline,
11747
11836
  children: React31.createElement(tag, {
11748
11837
  ...props2,
11838
+ style: croppedStyle ?? undefined,
11749
11839
  ref: callbackRef
11750
11840
  })
11751
11841
  });
@@ -12447,7 +12537,7 @@ var OffthreadVideoForRendering = ({
12447
12537
  }, [toneMapped, currentTime, src, transparent]);
12448
12538
  const [imageSrc, setImageSrc] = useState20(null);
12449
12539
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
12450
- useLayoutEffect12(() => {
12540
+ useLayoutEffect13(() => {
12451
12541
  if (!window.remotion_videoEnabled) {
12452
12542
  return;
12453
12543
  }
@@ -12982,6 +13072,7 @@ var WATCH_REMOTION_STATIC_FILES = "remotion_staticFilesChanged";
12982
13072
  function useRemotionContexts() {
12983
13073
  const compositionManagerCtx = React41.useContext(CompositionManager);
12984
13074
  const timelineContext = React41.useContext(TimelineContext);
13075
+ const timelineImperativeContext = React41.useContext(TimelineImperativeContext);
12985
13076
  const setTimelineContext = React41.useContext(SetTimelineContext);
12986
13077
  const sequenceContext = React41.useContext(SequenceContext);
12987
13078
  const nonceContext = React41.useContext(NonceContext);
@@ -12997,6 +13088,7 @@ function useRemotionContexts() {
12997
13088
  return useMemo39(() => ({
12998
13089
  compositionManagerCtx,
12999
13090
  timelineContext,
13091
+ timelineImperativeContext,
13000
13092
  setTimelineContext,
13001
13093
  sequenceContext,
13002
13094
  nonceContext,
@@ -13015,6 +13107,7 @@ function useRemotionContexts() {
13015
13107
  sequenceContext,
13016
13108
  setTimelineContext,
13017
13109
  timelineContext,
13110
+ timelineImperativeContext,
13018
13111
  canUseRemotionHooksContext,
13019
13112
  preloadContext,
13020
13113
  resolveCompositionContext,
@@ -13048,15 +13141,18 @@ var RemotionContextProvider = (props2) => {
13048
13141
  value: contexts.renderAssetManagerContext,
13049
13142
  children: /* @__PURE__ */ jsx37(ResolveCompositionContext.Provider, {
13050
13143
  value: contexts.resolveCompositionContext,
13051
- children: /* @__PURE__ */ jsx37(TimelineContext.Provider, {
13052
- value: contexts.timelineContext,
13053
- children: /* @__PURE__ */ jsx37(SetTimelineContext.Provider, {
13054
- value: contexts.setTimelineContext,
13055
- children: /* @__PURE__ */ jsx37(SequenceContext.Provider, {
13056
- value: contexts.sequenceContext,
13057
- children: /* @__PURE__ */ jsx37(BufferingContextReact.Provider, {
13058
- value: contexts.bufferManagerContext,
13059
- children
13144
+ children: /* @__PURE__ */ jsx37(TimelineImperativeContext.Provider, {
13145
+ value: contexts.timelineImperativeContext,
13146
+ children: /* @__PURE__ */ jsx37(TimelineContext.Provider, {
13147
+ value: contexts.timelineContext,
13148
+ children: /* @__PURE__ */ jsx37(SetTimelineContext.Provider, {
13149
+ value: contexts.setTimelineContext,
13150
+ children: /* @__PURE__ */ jsx37(SequenceContext.Provider, {
13151
+ value: contexts.sequenceContext,
13152
+ children: /* @__PURE__ */ jsx37(BufferingContextReact.Provider, {
13153
+ value: contexts.bufferManagerContext,
13154
+ children
13155
+ })
13060
13156
  })
13061
13157
  })
13062
13158
  })
@@ -13200,6 +13296,7 @@ var Internals = {
13200
13296
  TimelinePosition: exports_timeline_position_state,
13201
13297
  DelayRenderContextType,
13202
13298
  TimelineContext,
13299
+ TimelineImperativeContext,
13203
13300
  PlaybackRateContext,
13204
13301
  AbsoluteTimeContext,
13205
13302
  RenderAssetManagerProvider,
@@ -13784,7 +13881,7 @@ var VideoForRenderingForwardFunction = ({
13784
13881
  ]);
13785
13882
  const { src } = props2;
13786
13883
  if (environment.isRendering) {
13787
- useLayoutEffect13(() => {
13884
+ useLayoutEffect14(() => {
13788
13885
  if (window.process?.env?.NODE_ENV === "test") {
13789
13886
  return;
13790
13887
  }
@@ -30513,59 +30610,61 @@ import { jsx as jsx59, jsxs as jsxs15 } from "react/jsx-runtime";
30513
30610
  import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment12 } from "react/jsx-runtime";
30514
30611
  import React57 from "react";
30515
30612
  import { useContext as useContext210, useEffect as useEffect41, useState as useState40 } from "react";
30516
- import { useContext as useContext47, useLayoutEffect as useLayoutEffect18 } from "react";
30613
+ import React211, { useMemo as useMemo56, useRef as useRef48 } from "react";
30517
30614
  import { jsx as jsx314 } from "react/jsx-runtime";
30615
+ import { useContext as useContext47, useLayoutEffect as useLayoutEffect19 } from "react";
30616
+ import { jsx as jsx49 } from "react/jsx-runtime";
30518
30617
  import { useEffect as useEffect210, useState as useState24 } from "react";
30519
30618
  import { useLayoutEffect as useLayoutEffect23 } from "react";
30520
- import { useContext as useContext42, useEffect as useEffect52, useRef as useRef48 } from "react";
30521
- import { useEffect as useEffect310, useRef as useRef212 } from "react";
30522
- import { useCallback as useCallback40, useContext as useContext310, useMemo as useMemo56, useRef as useRef49, useState as useState310 } from "react";
30523
- import { useEffect as useEffect42, useRef as useRef310 } from "react";
30524
- import { useCallback as useCallback210, useEffect as useEffect62, useMemo as useMemo212, useState as useState42 } from "react";
30619
+ import { useContext as useContext42, useEffect as useEffect52, useRef as useRef52 } from "react";
30620
+ import { useEffect as useEffect310, useRef as useRef310 } from "react";
30621
+ import { useCallback as useCallback40, useContext as useContext310, useMemo as useMemo212, useRef as useRef212 } from "react";
30622
+ import { useEffect as useEffect42, useRef as useRef49 } from "react";
30623
+ import { useCallback as useCallback210, useEffect as useEffect62, useMemo as useMemo310, useState as useState310 } from "react";
30525
30624
  import {
30526
30625
  forwardRef as forwardRef210,
30527
30626
  useEffect as useEffect132,
30528
30627
  useImperativeHandle as useImperativeHandle22,
30529
30628
  useLayoutEffect as useLayoutEffect33,
30530
- useMemo as useMemo142,
30531
- useRef as useRef122,
30532
- useState as useState132
30629
+ useMemo as useMemo152,
30630
+ useRef as useRef132,
30631
+ useState as useState122
30533
30632
  } from "react";
30534
- import React102, {
30633
+ import React112, {
30535
30634
  Suspense as Suspense2,
30536
30635
  forwardRef as forwardRef36,
30537
30636
  useCallback as useCallback102,
30538
30637
  useContext as useContext52,
30539
30638
  useEffect as useEffect122,
30540
30639
  useImperativeHandle as useImperativeHandle11,
30541
- useMemo as useMemo122,
30542
- useRef as useRef102,
30543
- useState as useState113
30640
+ useMemo as useMemo132,
30641
+ useRef as useRef112,
30642
+ useState as useState102
30544
30643
  } from "react";
30545
- import React310 from "react";
30546
- import { jsx as jsx49 } from "react/jsx-runtime";
30547
- import React410, { useEffect as useEffect72 } from "react";
30644
+ import React410 from "react";
30548
30645
  import { jsx as jsx55 } from "react/jsx-runtime";
30549
- import { useCallback as useCallback72, useEffect as useEffect112, useMemo as useMemo92, useRef as useRef82, useState as useState102 } from "react";
30646
+ import React54, { useEffect as useEffect72 } from "react";
30550
30647
  import { jsx as jsx64 } from "react/jsx-runtime";
30551
- import { useCallback as useCallback42, useMemo as useMemo43, useRef as useRef52, useState as useState62 } from "react";
30552
- import React54, { useCallback as useCallback310, useMemo as useMemo310, useState as useState52 } from "react";
30553
- import { jsx as jsx74, jsxs as jsxs33 } from "react/jsx-runtime";
30554
- import { jsx as jsx84, jsxs as jsxs43 } from "react/jsx-runtime";
30555
- import { useCallback as useCallback52, useEffect as useEffect92, useMemo as useMemo57, useState as useState82 } from "react";
30556
- import { useEffect as useEffect83, useRef as useRef62, useState as useState72 } from "react";
30557
- import { jsx as jsx94, jsxs as jsxs52 } from "react/jsx-runtime";
30558
- import { useCallback as useCallback62, useEffect as useEffect102, useMemo as useMemo62, useRef as useRef72, useState as useState92 } from "react";
30559
- import { jsx as jsx104, jsxs as jsxs62 } from "react/jsx-runtime";
30560
- import { useMemo as useMemo72 } from "react";
30561
- import { jsxs as jsxs72 } from "react/jsx-runtime";
30648
+ import { useCallback as useCallback72, useEffect as useEffect112, useMemo as useMemo102, useRef as useRef92, useState as useState92 } from "react";
30649
+ import { jsx as jsx74 } from "react/jsx-runtime";
30650
+ import { useCallback as useCallback42, useMemo as useMemo57, useRef as useRef62, useState as useState52 } from "react";
30651
+ import React63, { useCallback as useCallback310, useMemo as useMemo43, useState as useState42 } from "react";
30652
+ import { jsx as jsx84, jsxs as jsxs33 } from "react/jsx-runtime";
30653
+ import { jsx as jsx94, jsxs as jsxs43 } from "react/jsx-runtime";
30654
+ import { useCallback as useCallback52, useEffect as useEffect92, useMemo as useMemo62, useState as useState72 } from "react";
30655
+ import { useEffect as useEffect83, useRef as useRef72, useState as useState62 } from "react";
30656
+ import { jsx as jsx104, jsxs as jsxs52 } from "react/jsx-runtime";
30657
+ import { useCallback as useCallback62, useEffect as useEffect102, useMemo as useMemo72, useRef as useRef82, useState as useState82 } from "react";
30658
+ import { jsx as jsx114, jsxs as jsxs62 } from "react/jsx-runtime";
30562
30659
  import { useMemo as useMemo82 } from "react";
30563
- import { jsx as jsx114, jsxs as jsxs82, Fragment as Fragment23 } from "react/jsx-runtime";
30564
- import { useCallback as useCallback92, useMemo as useMemo112 } from "react";
30565
- import { useCallback as useCallback82, useMemo as useMemo102, useRef as useRef92 } from "react";
30566
- import { jsx as jsx124, jsxs as jsxs92, Fragment as Fragment33 } from "react/jsx-runtime";
30567
- import { useCallback as useCallback112, useMemo as useMemo132, useRef as useRef112, useState as useState122 } from "react";
30568
- import { jsx as jsx133 } from "react/jsx-runtime";
30660
+ import { jsxs as jsxs72 } from "react/jsx-runtime";
30661
+ import { useMemo as useMemo92 } from "react";
30662
+ import { jsx as jsx124, jsxs as jsxs82, Fragment as Fragment23 } from "react/jsx-runtime";
30663
+ import { useCallback as useCallback92, useMemo as useMemo122 } from "react";
30664
+ import { useCallback as useCallback82, useMemo as useMemo112, useRef as useRef102 } from "react";
30665
+ import { jsx as jsx133, jsxs as jsxs92, Fragment as Fragment33 } from "react/jsx-runtime";
30666
+ import { useCallback as useCallback112, useMemo as useMemo142, useRef as useRef122, useState as useState113 } from "react";
30667
+ import { jsx as jsx143 } from "react/jsx-runtime";
30569
30668
 
30570
30669
  // ../core/dist/esm/no-react.mjs
30571
30670
  var normalizeNumber2 = (value) => {
@@ -32208,26 +32307,26 @@ var NoReactInternals = {
32208
32307
  };
32209
32308
 
32210
32309
  // ../player/dist/esm/index.mjs
32211
- import { jsx as jsx143 } from "react/jsx-runtime";
32310
+ import { jsx as jsx153 } from "react/jsx-runtime";
32212
32311
  import {
32213
32312
  forwardRef as forwardRef42,
32214
32313
  useImperativeHandle as useImperativeHandle42,
32215
32314
  useLayoutEffect as useLayoutEffect42,
32216
- useMemo as useMemo172,
32217
- useRef as useRef142,
32218
- useState as useState142
32315
+ useMemo as useMemo182,
32316
+ useRef as useRef152,
32317
+ useState as useState132
32219
32318
  } from "react";
32220
- import React133, {
32319
+ import React143, {
32221
32320
  forwardRef as forwardRef37,
32222
32321
  Suspense as Suspense22,
32223
32322
  useCallback as useCallback122,
32224
32323
  useImperativeHandle as useImperativeHandle32,
32225
- useMemo as useMemo162,
32226
- useRef as useRef132
32324
+ useMemo as useMemo172,
32325
+ useRef as useRef142
32227
32326
  } from "react";
32228
- import { useContext as useContext62, useMemo as useMemo152 } from "react";
32229
- import { jsx as jsx153 } from "react/jsx-runtime";
32327
+ import { useContext as useContext62, useMemo as useMemo162 } from "react";
32230
32328
  import { jsx as jsx163 } from "react/jsx-runtime";
32329
+ import { jsx as jsx173 } from "react/jsx-runtime";
32231
32330
  "use client";
32232
32331
  if (typeof createContext32 !== "function") {
32233
32332
  const err = [
@@ -32675,12 +32774,53 @@ class ThumbnailEmitter {
32675
32774
  this.dispatchEvent("resume", event);
32676
32775
  };
32677
32776
  }
32777
+ var PlayerTimelineImperativeContext = React211.createContext(null);
32778
+ var getCoreTimelineImperativeContext = () => {
32779
+ return Internals.TimelineImperativeContext;
32780
+ };
32781
+ var getTimelineImperativeContext = () => {
32782
+ return getCoreTimelineImperativeContext() ?? PlayerTimelineImperativeContext;
32783
+ };
32784
+ var CoreTimelineImperativeContextProvider = ({ children, value }) => {
32785
+ const TimelineImperativeContext2 = getCoreTimelineImperativeContext();
32786
+ if (!TimelineImperativeContext2) {
32787
+ return children;
32788
+ }
32789
+ return /* @__PURE__ */ jsx314(TimelineImperativeContext2.Provider, {
32790
+ value,
32791
+ children
32792
+ });
32793
+ };
32794
+ var LegacyTimelineImperativeContextProvider = ({ children }) => {
32795
+ const timelineContext = Internals.Timeline.useTimelineContext();
32796
+ const frameRef = useRef48(timelineContext.frame);
32797
+ frameRef.current = timelineContext.frame;
32798
+ const value = useMemo56(() => {
32799
+ return {
32800
+ frameRef,
32801
+ imperativePlaying: timelineContext.imperativePlaying,
32802
+ audioAndVideoTags: timelineContext.audioAndVideoTags
32803
+ };
32804
+ }, [timelineContext.audioAndVideoTags, timelineContext.imperativePlaying]);
32805
+ return /* @__PURE__ */ jsx314(PlayerTimelineImperativeContext.Provider, {
32806
+ value,
32807
+ children
32808
+ });
32809
+ };
32810
+ var TimelineImperativeCompatibilityProvider = ({ children }) => {
32811
+ if (getCoreTimelineImperativeContext()) {
32812
+ return children;
32813
+ }
32814
+ return /* @__PURE__ */ jsx314(LegacyTimelineImperativeContextProvider, {
32815
+ children
32816
+ });
32817
+ };
32678
32818
  var useBufferStateEmitter = (emitter) => {
32679
32819
  const bufferManager = useContext47(Internals.BufferingContextReact);
32680
32820
  if (!bufferManager) {
32681
32821
  throw new Error("BufferingContextReact not found");
32682
32822
  }
32683
- useLayoutEffect18(() => {
32823
+ useLayoutEffect19(() => {
32684
32824
  const clear1 = bufferManager.listenForBuffering(() => {
32685
32825
  bufferManager.buffering.current = true;
32686
32826
  emitter.dispatchWaiting({});
@@ -32707,9 +32847,11 @@ var PlayerEmitterProvider = ({ children, currentPlaybackRate }) => {
32707
32847
  }
32708
32848
  }, [emitter, currentPlaybackRate]);
32709
32849
  useBufferStateEmitter(emitter);
32710
- return /* @__PURE__ */ jsx314(PlayerEventEmitterContext.Provider, {
32711
- value: emitter,
32712
- children
32850
+ return /* @__PURE__ */ jsx49(TimelineImperativeCompatibilityProvider, {
32851
+ children: /* @__PURE__ */ jsx49(PlayerEventEmitterContext.Provider, {
32852
+ value: emitter,
32853
+ children
32854
+ })
32713
32855
  });
32714
32856
  };
32715
32857
  var useHoverState = (ref, hideControlsWhenPointerDoesntMove) => {
@@ -32752,24 +32894,22 @@ var useHoverState = (ref, hideControlsWhenPointerDoesntMove) => {
32752
32894
  }, [hideControlsWhenPointerDoesntMove, ref]);
32753
32895
  return hovered;
32754
32896
  };
32755
- var usePlayer = () => {
32756
- const [playing, setPlaying, imperativePlaying] = Internals.Timeline.usePlayingState();
32757
- const [hasPlayed, setHasPlayed] = useState310(false);
32758
- const frame = Internals.Timeline.useTimelinePosition();
32759
- const playStart = useRef49(frame);
32897
+ var usePlayerMethods = () => {
32760
32898
  const setFrame = Internals.Timeline.useTimelineSetFrame();
32761
32899
  const setTimelinePosition = Internals.Timeline.useTimelineSetFrame();
32900
+ const { setPlaying } = useContext310(Internals.SetTimelineContext);
32901
+ const timelineImperativeContext = useContext310(getTimelineImperativeContext());
32762
32902
  const audioContext = useContext310(Internals.SharedAudioContext);
32763
32903
  const audioTagsContext = useContext310(Internals.SharedAudioTagsContext);
32764
- const { audioAndVideoTags } = Internals.useTimelineContext();
32765
- const frameRef = useRef49(frame);
32766
- frameRef.current = frame;
32904
+ const environment = useRemotionEnvironment();
32767
32905
  const video = Internals.useVideo();
32768
32906
  const config = Internals.useUnsafeVideoConfig();
32769
32907
  const emitter = useContext310(PlayerEventEmitterContext);
32770
- const lastFrame = (config?.durationInFrames ?? 1) - 1;
32771
- const isLastFrame = frame === lastFrame;
32772
- const isFirstFrame = frame === 0;
32908
+ const playStart = useRef212(0);
32909
+ const fallbackFrame = useRef212(null);
32910
+ if (!timelineImperativeContext) {
32911
+ throw new Error("Timeline imperative context is not available. This hook must be used inside a <Player> or the Remotion Studio.");
32912
+ }
32773
32913
  if (!emitter) {
32774
32914
  throw new TypeError("Expected Player event emitter context");
32775
32915
  }
@@ -32777,163 +32917,179 @@ var usePlayer = () => {
32777
32917
  if (!bufferingContext) {
32778
32918
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
32779
32919
  }
32780
- const { buffering } = bufferingContext;
32920
+ const getCurrentFrame = useCallback40(() => {
32921
+ if (!video) {
32922
+ return fallbackFrame.current ?? (typeof window === "undefined" ? 0 : window.remotion_initialFrame ?? 0);
32923
+ }
32924
+ const unclamped = timelineImperativeContext.frameRef.current[video.id] ?? (environment.isPlayer ? 0 : Internals.Timeline.getFrameForComposition(video.id));
32925
+ return Internals.Timeline.clampFrameToCompositionRange(unclamped, video.durationInFrames);
32926
+ }, [environment.isPlayer, timelineImperativeContext, video]);
32781
32927
  const seek2 = useCallback40((newFrame) => {
32782
32928
  const frameToSeekTo = config ? Internals.TimelinePosition.clampFrameToCompositionRange(newFrame, config.durationInFrames) : Math.max(0, newFrame);
32929
+ fallbackFrame.current = frameToSeekTo;
32783
32930
  if (video?.id) {
32784
- setTimelinePosition((c2) => c2[video.id] === frameToSeekTo ? c2 : { ...c2, [video.id]: frameToSeekTo });
32931
+ if (timelineImperativeContext.frameRef.current[video.id] !== frameToSeekTo) {
32932
+ timelineImperativeContext.frameRef.current = {
32933
+ ...timelineImperativeContext.frameRef.current,
32934
+ [video.id]: frameToSeekTo
32935
+ };
32936
+ }
32937
+ setTimelinePosition((currentFrames) => currentFrames[video.id] === frameToSeekTo ? currentFrames : { ...currentFrames, [video.id]: frameToSeekTo });
32785
32938
  }
32786
- frameRef.current = frameToSeekTo;
32787
32939
  emitter.dispatchSeek(frameToSeekTo);
32788
- }, [config, emitter, setTimelinePosition, video?.id]);
32940
+ }, [
32941
+ config,
32942
+ emitter,
32943
+ setTimelinePosition,
32944
+ timelineImperativeContext,
32945
+ video?.id
32946
+ ]);
32789
32947
  const play = useCallback40((e) => {
32790
- if (imperativePlaying.current) {
32948
+ if (timelineImperativeContext.imperativePlaying.current) {
32791
32949
  return;
32792
32950
  }
32793
- setHasPlayed(true);
32794
- if (isLastFrame) {
32951
+ const lastFrameForPlayback = (config?.durationInFrames ?? 1) - 1;
32952
+ if (getCurrentFrame() === lastFrameForPlayback) {
32795
32953
  seek2(0);
32796
32954
  }
32797
32955
  audioContext?.resume();
32798
32956
  if (audioTagsContext && audioTagsContext.numberOfAudioTags > 0 && e) {
32799
32957
  audioTagsContext.playAllAudios();
32800
32958
  }
32801
- audioAndVideoTags.current.forEach((a2) => a2.play("player play() was called and playing audio from a click"));
32802
- imperativePlaying.current = true;
32959
+ timelineImperativeContext.audioAndVideoTags.current.forEach((tag) => tag.play("player play() was called and playing audio from a click"));
32960
+ timelineImperativeContext.imperativePlaying.current = true;
32803
32961
  setPlaying(true);
32804
- playStart.current = frameRef.current;
32962
+ playStart.current = getCurrentFrame();
32805
32963
  emitter.dispatchPlay();
32806
32964
  }, [
32807
- imperativePlaying,
32808
- isLastFrame,
32809
32965
  audioContext,
32810
32966
  audioTagsContext,
32811
- setPlaying,
32967
+ config?.durationInFrames,
32812
32968
  emitter,
32969
+ getCurrentFrame,
32813
32970
  seek2,
32814
- audioAndVideoTags
32971
+ setPlaying,
32972
+ timelineImperativeContext
32815
32973
  ]);
32816
32974
  const pause = useCallback40(() => {
32817
- if (imperativePlaying.current) {
32818
- imperativePlaying.current = false;
32975
+ if (timelineImperativeContext.imperativePlaying.current) {
32976
+ timelineImperativeContext.imperativePlaying.current = false;
32819
32977
  setPlaying(false);
32820
32978
  emitter.dispatchPause();
32821
32979
  audioContext?.suspend();
32822
32980
  }
32823
- }, [emitter, imperativePlaying, setPlaying, audioContext]);
32981
+ }, [audioContext, emitter, setPlaying, timelineImperativeContext]);
32824
32982
  const pauseAndReturnToPlayStart = useCallback40(() => {
32825
- if (imperativePlaying.current) {
32826
- imperativePlaying.current = false;
32827
- frameRef.current = playStart.current;
32983
+ if (timelineImperativeContext.imperativePlaying.current) {
32984
+ timelineImperativeContext.imperativePlaying.current = false;
32985
+ fallbackFrame.current = playStart.current;
32828
32986
  if (config) {
32829
- setTimelinePosition((c2) => ({
32830
- ...c2,
32987
+ timelineImperativeContext.frameRef.current = {
32988
+ ...timelineImperativeContext.frameRef.current,
32989
+ [config.id]: playStart.current
32990
+ };
32991
+ setTimelinePosition((currentFrames) => ({
32992
+ ...currentFrames,
32831
32993
  [config.id]: playStart.current
32832
32994
  }));
32833
32995
  setPlaying(false);
32834
32996
  emitter.dispatchPause();
32835
32997
  }
32836
32998
  }
32837
- }, [config, emitter, imperativePlaying, setPlaying, setTimelinePosition]);
32999
+ }, [
33000
+ config,
33001
+ emitter,
33002
+ setPlaying,
33003
+ setTimelinePosition,
33004
+ timelineImperativeContext
33005
+ ]);
32838
33006
  const videoId = video?.id;
33007
+ const lastFrame = (config?.durationInFrames ?? 1) - 1;
32839
33008
  const frameBack = useCallback40((frames) => {
32840
33009
  if (!videoId) {
32841
33010
  return null;
32842
33011
  }
32843
- if (imperativePlaying.current) {
33012
+ if (timelineImperativeContext.imperativePlaying.current) {
32844
33013
  return;
32845
33014
  }
32846
- setFrame((c2) => {
32847
- const prevFrame = c2[videoId] ?? window.remotion_initialFrame ?? 0;
32848
- const newFrame = Math.max(0, prevFrame - frames);
32849
- if (prevFrame === newFrame) {
32850
- return c2;
32851
- }
32852
- return {
32853
- ...c2,
32854
- [videoId]: newFrame
32855
- };
32856
- });
32857
- }, [imperativePlaying, setFrame, videoId]);
33015
+ const previousFrame = timelineImperativeContext.frameRef.current[videoId] ?? window.remotion_initialFrame ?? 0;
33016
+ const newFrame = Math.max(0, previousFrame - frames);
33017
+ if (previousFrame === newFrame) {
33018
+ return;
33019
+ }
33020
+ timelineImperativeContext.frameRef.current = {
33021
+ ...timelineImperativeContext.frameRef.current,
33022
+ [videoId]: newFrame
33023
+ };
33024
+ setFrame((currentFrames) => currentFrames[videoId] === newFrame ? currentFrames : { ...currentFrames, [videoId]: newFrame });
33025
+ }, [setFrame, timelineImperativeContext, videoId]);
32858
33026
  const frameForward = useCallback40((frames) => {
32859
33027
  if (!videoId) {
32860
33028
  return null;
32861
33029
  }
32862
- if (imperativePlaying.current) {
33030
+ if (timelineImperativeContext.imperativePlaying.current) {
32863
33031
  return;
32864
33032
  }
32865
- setFrame((c2) => {
32866
- const prevFrame = c2[videoId] ?? window.remotion_initialFrame ?? 0;
32867
- const newFrame = Math.min(lastFrame, prevFrame + frames);
32868
- if (prevFrame === newFrame) {
32869
- return c2;
32870
- }
32871
- return {
32872
- ...c2,
32873
- [videoId]: newFrame
32874
- };
32875
- });
32876
- }, [videoId, imperativePlaying, lastFrame, setFrame]);
33033
+ const previousFrame = timelineImperativeContext.frameRef.current[videoId] ?? window.remotion_initialFrame ?? 0;
33034
+ const newFrame = Math.min(lastFrame, previousFrame + frames);
33035
+ if (previousFrame === newFrame) {
33036
+ return;
33037
+ }
33038
+ timelineImperativeContext.frameRef.current = {
33039
+ ...timelineImperativeContext.frameRef.current,
33040
+ [videoId]: newFrame
33041
+ };
33042
+ setFrame((currentFrames) => currentFrames[videoId] === newFrame ? currentFrames : { ...currentFrames, [videoId]: newFrame });
33043
+ }, [lastFrame, setFrame, timelineImperativeContext, videoId]);
32877
33044
  const toggle = useCallback40((e) => {
32878
- if (imperativePlaying.current) {
33045
+ if (timelineImperativeContext.imperativePlaying.current) {
32879
33046
  pause();
32880
33047
  } else {
32881
33048
  play(e);
32882
33049
  }
32883
- }, [imperativePlaying, pause, play]);
33050
+ }, [pause, play, timelineImperativeContext]);
32884
33051
  const isPlaying = useCallback40(() => {
32885
- return imperativePlaying.current;
32886
- }, [imperativePlaying]);
32887
- const getCurrentFrame = useCallback40(() => {
32888
- return frameRef.current;
32889
- }, [frameRef]);
33052
+ return timelineImperativeContext.imperativePlaying.current;
33053
+ }, [timelineImperativeContext]);
32890
33054
  const isBuffering = useCallback40(() => {
32891
- return buffering.current;
32892
- }, [buffering]);
32893
- const returnValue = useMemo56(() => {
33055
+ return bufferingContext.buffering.current;
33056
+ }, [bufferingContext.buffering]);
33057
+ return useMemo212(() => {
32894
33058
  return {
32895
33059
  frameBack,
32896
33060
  frameForward,
32897
- isLastFrame,
32898
33061
  emitter,
32899
- playing,
32900
33062
  play,
32901
33063
  pause,
32902
33064
  seek: seek2,
32903
- isFirstFrame,
32904
33065
  getCurrentFrame,
32905
33066
  isPlaying,
32906
33067
  isBuffering,
32907
33068
  pauseAndReturnToPlayStart,
32908
- hasPlayed,
32909
33069
  toggle
32910
33070
  };
32911
33071
  }, [
32912
33072
  emitter,
32913
33073
  frameBack,
32914
33074
  frameForward,
32915
- hasPlayed,
32916
- isFirstFrame,
32917
- isLastFrame,
32918
33075
  getCurrentFrame,
33076
+ isBuffering,
33077
+ isPlaying,
32919
33078
  pause,
32920
33079
  pauseAndReturnToPlayStart,
32921
33080
  play,
32922
- playing,
32923
33081
  seek2,
32924
- toggle,
32925
- isPlaying,
32926
- isBuffering
33082
+ toggle
32927
33083
  ]);
32928
- return returnValue;
32929
33084
  };
32930
33085
  var useBrowserMediaSession = ({
32931
33086
  browserMediaControlsBehavior,
32932
33087
  videoConfig,
32933
33088
  playbackRate
32934
33089
  }) => {
32935
- const { playing, pause, play, emitter, getCurrentFrame, seek: seek2 } = usePlayer();
32936
- const hasEverPlayed = useRef212(false);
33090
+ const [playing] = Internals.Timeline.usePlayingState();
33091
+ const { pause, play, emitter, getCurrentFrame, seek: seek2 } = usePlayerMethods();
33092
+ const hasEverPlayed = useRef310(false);
32937
33093
  useEffect310(() => {
32938
33094
  if (playing) {
32939
33095
  hasEverPlayed.current = true;
@@ -33075,7 +33231,7 @@ var getIsBackgrounded = () => {
33075
33231
  return document.visibilityState === "hidden";
33076
33232
  };
33077
33233
  var useIsBackgrounded = () => {
33078
- const isBackgrounded = useRef310(getIsBackgrounded());
33234
+ const isBackgrounded = useRef49(getIsBackgrounded());
33079
33235
  useEffect42(() => {
33080
33236
  const onVisibilityChange = () => {
33081
33237
  isBackgrounded.current = getIsBackgrounded();
@@ -33132,12 +33288,13 @@ var usePlayback = ({
33132
33288
  }) => {
33133
33289
  const config = Internals.useUnsafeVideoConfig();
33134
33290
  const frame = Internals.Timeline.useTimelinePosition();
33135
- const { playing, pause, emitter, isPlaying } = usePlayer();
33291
+ const [playing] = Internals.Timeline.usePlayingState();
33292
+ const { pause, emitter, isPlaying } = usePlayerMethods();
33136
33293
  const setFrame = Internals.Timeline.useTimelineSetFrame();
33137
33294
  const sharedAudioContext = useContext42(Internals.SharedAudioContext);
33138
33295
  const logLevel = Internals.useLogLevel();
33139
33296
  const isBackgroundedRef = useIsBackgrounded();
33140
- const lastTimeUpdateTimestamp = useRef48(0);
33297
+ const lastTimeUpdateTimestamp = useRef52(0);
33141
33298
  const context = useContext42(Internals.BufferingContextReact);
33142
33299
  if (!context) {
33143
33300
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
@@ -33362,7 +33519,7 @@ var getElement = (source) => {
33362
33519
  return source;
33363
33520
  };
33364
33521
  var useElementSize = (source, options2) => {
33365
- const [size4, setSize] = useState42(() => {
33522
+ const [size4, setSize] = useState310(() => {
33366
33523
  const element = getElement(source);
33367
33524
  if (!element) {
33368
33525
  return null;
@@ -33382,7 +33539,7 @@ var useElementSize = (source, options2) => {
33382
33539
  }
33383
33540
  };
33384
33541
  });
33385
- const observer = useMemo212(() => {
33542
+ const observer = useMemo310(() => {
33386
33543
  if (typeof ResizeObserver === "undefined") {
33387
33544
  return null;
33388
33545
  }
@@ -33474,7 +33631,7 @@ var useElementSize = (source, options2) => {
33474
33631
  elementSizeHooks = elementSizeHooks.filter((e) => e !== updateSize);
33475
33632
  };
33476
33633
  }, [updateSize]);
33477
- return useMemo212(() => {
33634
+ return useMemo310(() => {
33478
33635
  if (!size4) {
33479
33636
  return null;
33480
33637
  }
@@ -33493,7 +33650,7 @@ var errorStyle = {
33493
33650
  width: "100%"
33494
33651
  };
33495
33652
 
33496
- class ErrorBoundary extends React310.Component {
33653
+ class ErrorBoundary extends React410.Component {
33497
33654
  state = { hasError: null };
33498
33655
  static getDerivedStateFromError(error2) {
33499
33656
  return { hasError: error2 };
@@ -33503,7 +33660,7 @@ class ErrorBoundary extends React310.Component {
33503
33660
  }
33504
33661
  render() {
33505
33662
  if (this.state.hasError) {
33506
- return /* @__PURE__ */ jsx49("div", {
33663
+ return /* @__PURE__ */ jsx55("div", {
33507
33664
  style: errorStyle,
33508
33665
  children: this.props.errorFallback({
33509
33666
  error: this.state.hasError
@@ -33546,7 +33703,7 @@ var DOMAIN_BLACKLIST = [
33546
33703
  ];
33547
33704
  var ran = false;
33548
33705
  var RenderWarningIfBlacklist = () => {
33549
- const [unlicensed, setUnlicensed] = React410.useState(false);
33706
+ const [unlicensed, setUnlicensed] = React54.useState(false);
33550
33707
  useEffect72(() => {
33551
33708
  if (ran) {
33552
33709
  return;
@@ -33588,10 +33745,10 @@ var RenderWarningIfBlacklist = () => {
33588
33745
  if (!unlicensed) {
33589
33746
  return null;
33590
33747
  }
33591
- return /* @__PURE__ */ jsx55("div", {
33748
+ return /* @__PURE__ */ jsx64("div", {
33592
33749
  style,
33593
33750
  className: "warning-banner",
33594
- children: /* @__PURE__ */ jsx55("a", {
33751
+ children: /* @__PURE__ */ jsx64("a", {
33595
33752
  style: { color: "white" },
33596
33753
  href: "https://github.com/remotion-dev/remotion/pull/4589",
33597
33754
  children: "Remotion Unlicensed – Contact hi@remotion.dev"
@@ -33600,14 +33757,14 @@ var RenderWarningIfBlacklist = () => {
33600
33757
  };
33601
33758
  var DefaultPlayPauseButton = ({ playing, buffering }) => {
33602
33759
  if (playing && buffering) {
33603
- return /* @__PURE__ */ jsx64(BufferingIndicator, {
33760
+ return /* @__PURE__ */ jsx74(BufferingIndicator, {
33604
33761
  type: "player"
33605
33762
  });
33606
33763
  }
33607
33764
  if (playing) {
33608
- return /* @__PURE__ */ jsx64(PauseIcon, {});
33765
+ return /* @__PURE__ */ jsx74(PauseIcon, {});
33609
33766
  }
33610
- return /* @__PURE__ */ jsx64(PlayIcon, {});
33767
+ return /* @__PURE__ */ jsx74(PlayIcon, {});
33611
33768
  };
33612
33769
  var KNOB_SIZE = 12;
33613
33770
  var BAR_HEIGHT = 5;
@@ -33618,7 +33775,7 @@ var DefaultVolumeSlider = ({
33618
33775
  inputRef,
33619
33776
  setVolume
33620
33777
  }) => {
33621
- const sliderContainer = useMemo310(() => {
33778
+ const sliderContainer = useMemo43(() => {
33622
33779
  const paddingLeft = 5;
33623
33780
  const common = {
33624
33781
  paddingLeft,
@@ -33638,12 +33795,12 @@ var DefaultVolumeSlider = ({
33638
33795
  ...common
33639
33796
  };
33640
33797
  }, [isVertical]);
33641
- const randomId = typeof React54.useId === "undefined" ? "volume-slider" : React54.useId();
33642
- const [randomClass] = useState52(() => `__remotion-volume-slider-${random(randomId)}`.replace(".", ""));
33798
+ const randomId = typeof React63.useId === "undefined" ? "volume-slider" : React63.useId();
33799
+ const [randomClass] = useState42(() => `__remotion-volume-slider-${random(randomId)}`.replace(".", ""));
33643
33800
  const onVolumeChange = useCallback310((e) => {
33644
33801
  setVolume(parseFloat(e.target.value));
33645
33802
  }, [setVolume]);
33646
- const inputStyle = useMemo310(() => {
33803
+ const inputStyle = useMemo43(() => {
33647
33804
  const commonStyle = {
33648
33805
  WebkitAppearance: "none",
33649
33806
  backgroundColor: "rgba(255, 255, 255, 0.5)",
@@ -33686,12 +33843,12 @@ var DefaultVolumeSlider = ({
33686
33843
  return /* @__PURE__ */ jsxs33("div", {
33687
33844
  style: sliderContainer,
33688
33845
  children: [
33689
- /* @__PURE__ */ jsx74("style", {
33846
+ /* @__PURE__ */ jsx84("style", {
33690
33847
  dangerouslySetInnerHTML: {
33691
33848
  __html: sliderStyle
33692
33849
  }
33693
33850
  }),
33694
- /* @__PURE__ */ jsx74("input", {
33851
+ /* @__PURE__ */ jsx84("input", {
33695
33852
  ref: inputRef,
33696
33853
  "aria-label": "Change volume",
33697
33854
  className: randomClass,
@@ -33708,7 +33865,7 @@ var DefaultVolumeSlider = ({
33708
33865
  });
33709
33866
  };
33710
33867
  var renderDefaultVolumeSlider = (props) => {
33711
- return /* @__PURE__ */ jsx74(DefaultVolumeSlider, {
33868
+ return /* @__PURE__ */ jsx84(DefaultVolumeSlider, {
33712
33869
  ...props
33713
33870
  });
33714
33871
  };
@@ -33716,9 +33873,9 @@ var VOLUME_SLIDER_WIDTH = 100;
33716
33873
  var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, renderVolumeSlider }) => {
33717
33874
  const [playerMuted, setPlayerMuted] = Internals.usePlayerMutedState();
33718
33875
  const [mediaVolume, setMediaVolume] = Internals.useMediaVolumeState();
33719
- const [focused, setFocused] = useState62(false);
33720
- const parentDivRef = useRef52(null);
33721
- const inputRef = useRef52(null);
33876
+ const [focused, setFocused] = useState52(false);
33877
+ const parentDivRef = useRef62(null);
33878
+ const inputRef = useRef62(null);
33722
33879
  const hover = useHoverState(parentDivRef, false);
33723
33880
  const onBlur = useCallback42(() => {
33724
33881
  setTimeout(() => {
@@ -33736,7 +33893,7 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
33736
33893
  }
33737
33894
  setPlayerMuted((mute) => !mute);
33738
33895
  }, [isVolume0, setPlayerMuted, setMediaVolume]);
33739
- const parentDivStyle = useMemo43(() => {
33896
+ const parentDivStyle = useMemo57(() => {
33740
33897
  return {
33741
33898
  display: "inline-flex",
33742
33899
  background: "none",
@@ -33747,7 +33904,7 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
33747
33904
  ...displayVerticalVolumeSlider && { position: "relative" }
33748
33905
  };
33749
33906
  }, [displayVerticalVolumeSlider]);
33750
- const volumeContainer = useMemo43(() => {
33907
+ const volumeContainer = useMemo57(() => {
33751
33908
  return {
33752
33909
  display: "inline",
33753
33910
  width: ICON_SIZE2,
@@ -33761,7 +33918,7 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
33761
33918
  }, []);
33762
33919
  const renderDefaultMuteButton = useCallback42(({ muted, volume }) => {
33763
33920
  const isMutedOrZero = muted || volume === 0;
33764
- return /* @__PURE__ */ jsx84("button", {
33921
+ return /* @__PURE__ */ jsx94("button", {
33765
33922
  "aria-label": isMutedOrZero ? "Unmute sound" : "Mute sound",
33766
33923
  title: isMutedOrZero ? "Unmute sound" : "Mute sound",
33767
33924
  onClick,
@@ -33769,13 +33926,13 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
33769
33926
  onFocus: () => setFocused(true),
33770
33927
  style: volumeContainer,
33771
33928
  type: "button",
33772
- children: isMutedOrZero ? /* @__PURE__ */ jsx84(VolumeOffIcon, {}) : /* @__PURE__ */ jsx84(VolumeOnIcon, {})
33929
+ children: isMutedOrZero ? /* @__PURE__ */ jsx94(VolumeOffIcon, {}) : /* @__PURE__ */ jsx94(VolumeOnIcon, {})
33773
33930
  });
33774
33931
  }, [onBlur, onClick, volumeContainer]);
33775
- const muteButton = useMemo43(() => {
33932
+ const muteButton = useMemo57(() => {
33776
33933
  return renderMuteButton ? renderMuteButton({ muted: playerMuted, volume: mediaVolume }) : renderDefaultMuteButton({ muted: playerMuted, volume: mediaVolume });
33777
33934
  }, [playerMuted, mediaVolume, renderDefaultMuteButton, renderMuteButton]);
33778
- const volumeSlider = useMemo43(() => {
33935
+ const volumeSlider = useMemo57(() => {
33779
33936
  return (focused || hover) && !playerMuted && !Internals.isIosSafari() ? (renderVolumeSlider ?? renderDefaultVolumeSlider)({
33780
33937
  isVertical: displayVerticalVolumeSlider,
33781
33938
  volume: mediaVolume,
@@ -33802,8 +33959,8 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
33802
33959
  });
33803
33960
  };
33804
33961
  function useComponentVisible(initialIsVisible) {
33805
- const [isComponentVisible, setIsComponentVisible] = useState72(initialIsVisible);
33806
- const ref = useRef62(null);
33962
+ const [isComponentVisible, setIsComponentVisible] = useState62(initialIsVisible);
33963
+ const ref = useRef72(null);
33807
33964
  useEffect83(() => {
33808
33965
  const handleClickOutside = (event) => {
33809
33966
  if (ref.current && !ref.current.contains(event.target)) {
@@ -33837,10 +33994,10 @@ var checkmarkStyle = {
33837
33994
  height: 14,
33838
33995
  color: "black"
33839
33996
  };
33840
- var Checkmark = () => /* @__PURE__ */ jsx94("svg", {
33997
+ var Checkmark = () => /* @__PURE__ */ jsx104("svg", {
33841
33998
  viewBox: "0 0 512 512",
33842
33999
  style: checkmarkStyle,
33843
- children: /* @__PURE__ */ jsx94("path", {
34000
+ children: /* @__PURE__ */ jsx104("path", {
33844
34001
  fill: "currentColor",
33845
34002
  d: "M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z"
33846
34003
  })
@@ -33855,7 +34012,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
33855
34012
  e.preventDefault();
33856
34013
  onSelect(rate);
33857
34014
  }, [onSelect, rate]);
33858
- const [hovered, setHovered] = useState82(false);
34015
+ const [hovered, setHovered] = useState72(false);
33859
34016
  const onMouseEnter = useCallback52(() => {
33860
34017
  setHovered(true);
33861
34018
  }, []);
@@ -33863,7 +34020,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
33863
34020
  setHovered(false);
33864
34021
  }, []);
33865
34022
  const isFocused = keyboardSelectedRate === rate;
33866
- const actualStyle = useMemo57(() => {
34023
+ const actualStyle = useMemo62(() => {
33867
34024
  return {
33868
34025
  ...rateDiv,
33869
34026
  backgroundColor: hovered || isFocused ? "#eee" : "transparent"
@@ -33876,9 +34033,9 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
33876
34033
  style: actualStyle,
33877
34034
  onClick,
33878
34035
  children: [
33879
- /* @__PURE__ */ jsx94("div", {
34036
+ /* @__PURE__ */ jsx104("div", {
33880
34037
  style: checkmarkContainer,
33881
- children: rate === selectedRate ? /* @__PURE__ */ jsx94(Checkmark, {}) : null
34038
+ children: rate === selectedRate ? /* @__PURE__ */ jsx104(Checkmark, {}) : null
33882
34039
  }),
33883
34040
  formatPlaybackRate(rate),
33884
34041
  "x"
@@ -33887,7 +34044,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
33887
34044
  };
33888
34045
  var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
33889
34046
  const { setPlaybackRate, playbackRate } = Internals.usePlaybackRate();
33890
- const [keyboardSelectedRate, setKeyboardSelectedRate] = useState82(playbackRate);
34047
+ const [keyboardSelectedRate, setKeyboardSelectedRate] = useState72(playbackRate);
33891
34048
  useEffect92(() => {
33892
34049
  const listener = (e) => {
33893
34050
  e.preventDefault();
@@ -33930,7 +34087,7 @@ var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
33930
34087
  setPlaybackRate(rate);
33931
34088
  setIsComponentVisible(false);
33932
34089
  }, [setIsComponentVisible, setPlaybackRate]);
33933
- const playbackPopup = useMemo57(() => {
34090
+ const playbackPopup = useMemo62(() => {
33934
34091
  return {
33935
34092
  position: "absolute",
33936
34093
  right: 0,
@@ -33944,10 +34101,10 @@ var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
33944
34101
  textAlign: "left"
33945
34102
  };
33946
34103
  }, [canvasSize.height]);
33947
- return /* @__PURE__ */ jsx94("div", {
34104
+ return /* @__PURE__ */ jsx104("div", {
33948
34105
  style: playbackPopup,
33949
34106
  children: playbackRates.map((rate) => {
33950
- return /* @__PURE__ */ jsx94(PlaybackrateOption, {
34107
+ return /* @__PURE__ */ jsx104(PlaybackrateOption, {
33951
34108
  selectedRate: playbackRate,
33952
34109
  onSelect,
33953
34110
  rate,
@@ -33994,7 +34151,7 @@ var PlaybackrateControl = ({ playbackRates, canvasSize }) => {
33994
34151
  e.preventDefault();
33995
34152
  setIsComponentVisible((prevIsComponentVisible) => !prevIsComponentVisible);
33996
34153
  }, [setIsComponentVisible]);
33997
- return /* @__PURE__ */ jsx94("div", {
34154
+ return /* @__PURE__ */ jsx104("div", {
33998
34155
  ref,
33999
34156
  children: /* @__PURE__ */ jsxs52("button", {
34000
34157
  type: "button",
@@ -34009,7 +34166,7 @@ var PlaybackrateControl = ({ playbackRates, canvasSize }) => {
34009
34166
  "x"
34010
34167
  ]
34011
34168
  }),
34012
- isComponentVisible && /* @__PURE__ */ jsx94(PlaybackPopup, {
34169
+ isComponentVisible && /* @__PURE__ */ jsx104(PlaybackPopup, {
34013
34170
  canvasSize,
34014
34171
  playbackRates,
34015
34172
  setIsComponentVisible
@@ -34053,15 +34210,15 @@ var findBodyInWhichDivIsLocated = (div) => {
34053
34210
  return current;
34054
34211
  };
34055
34212
  var PlayerSeekBar = ({ durationInFrames, onSeekEnd, onSeekStart, inFrame, outFrame }) => {
34056
- const containerRef = useRef72(null);
34213
+ const containerRef = useRef82(null);
34057
34214
  const barHovered = useHoverState(containerRef, false);
34058
34215
  const size4 = useElementSize(containerRef, {
34059
34216
  triggerOnWindowResize: true,
34060
34217
  shouldApplyCssTransforms: true
34061
34218
  });
34062
- const { seek: seek2, play, pause, playing } = usePlayer();
34219
+ const { seek: seek2, play, pause, isPlaying } = usePlayerMethods();
34063
34220
  const frame = Internals.Timeline.useTimelinePosition();
34064
- const [dragging, setDragging] = useState92({
34221
+ const [dragging, setDragging] = useState82({
34065
34222
  dragging: false
34066
34223
  });
34067
34224
  const width = size4?.width ?? 0;
@@ -34071,14 +34228,15 @@ var PlayerSeekBar = ({ durationInFrames, onSeekEnd, onSeekStart, inFrame, outFra
34071
34228
  }
34072
34229
  const posLeft = containerRef.current?.getBoundingClientRect().left;
34073
34230
  const _frame = getFrameFromX(e.clientX - posLeft, durationInFrames, width);
34231
+ const wasPlaying = isPlaying();
34074
34232
  pause();
34075
34233
  seek2(_frame);
34076
34234
  setDragging({
34077
34235
  dragging: true,
34078
- wasPlaying: playing
34236
+ wasPlaying
34079
34237
  });
34080
34238
  onSeekStart();
34081
- }, [durationInFrames, width, pause, seek2, playing, onSeekStart]);
34239
+ }, [durationInFrames, width, isPlaying, pause, seek2, onSeekStart]);
34082
34240
  const onPointerMove = useCallback62((e) => {
34083
34241
  if (!size4) {
34084
34242
  throw new Error("Player has no size");
@@ -34116,7 +34274,7 @@ var PlayerSeekBar = ({ durationInFrames, onSeekEnd, onSeekStart, inFrame, outFra
34116
34274
  body.removeEventListener("pointerup", onPointerUp);
34117
34275
  };
34118
34276
  }, [dragging.dragging, onPointerMove, onPointerUp]);
34119
- const knobStyle = useMemo62(() => {
34277
+ const knobStyle = useMemo72(() => {
34120
34278
  return {
34121
34279
  height: KNOB_SIZE2,
34122
34280
  width: KNOB_SIZE2,
@@ -34129,7 +34287,7 @@ var PlayerSeekBar = ({ durationInFrames, onSeekEnd, onSeekStart, inFrame, outFra
34129
34287
  opacity: Number(barHovered || dragging.dragging)
34130
34288
  };
34131
34289
  }, [barHovered, dragging.dragging, durationInFrames, frame, width]);
34132
- const fillStyle = useMemo62(() => {
34290
+ const fillStyle = useMemo72(() => {
34133
34291
  return {
34134
34292
  height: BAR_HEIGHT2,
34135
34293
  backgroundColor: "rgba(255, 255, 255, 1)",
@@ -34138,7 +34296,7 @@ var PlayerSeekBar = ({ durationInFrames, onSeekEnd, onSeekStart, inFrame, outFra
34138
34296
  borderRadius: BAR_HEIGHT2 / 2
34139
34297
  };
34140
34298
  }, [durationInFrames, frame, inFrame, width]);
34141
- const active = useMemo62(() => {
34299
+ const active = useMemo72(() => {
34142
34300
  return {
34143
34301
  height: BAR_HEIGHT2,
34144
34302
  backgroundColor: "rgba(255, 255, 255, 0.25)",
@@ -34156,15 +34314,15 @@ var PlayerSeekBar = ({ durationInFrames, onSeekEnd, onSeekStart, inFrame, outFra
34156
34314
  /* @__PURE__ */ jsxs62("div", {
34157
34315
  style: barBackground,
34158
34316
  children: [
34159
- /* @__PURE__ */ jsx104("div", {
34317
+ /* @__PURE__ */ jsx114("div", {
34160
34318
  style: active
34161
34319
  }),
34162
- /* @__PURE__ */ jsx104("div", {
34320
+ /* @__PURE__ */ jsx114("div", {
34163
34321
  style: fillStyle
34164
34322
  })
34165
34323
  ]
34166
34324
  }),
34167
- /* @__PURE__ */ jsx104("div", {
34325
+ /* @__PURE__ */ jsx114("div", {
34168
34326
  style: knobStyle
34169
34327
  })
34170
34328
  ]
@@ -34177,7 +34335,7 @@ var formatTime = (timeInSeconds) => {
34177
34335
  };
34178
34336
  var PlayerTimeLabel = ({ durationInFrames, maxTimeLabelWidth, fps }) => {
34179
34337
  const frame = Internals.Timeline.useTimelinePosition();
34180
- const timeLabel = useMemo72(() => {
34338
+ const timeLabel = useMemo82(() => {
34181
34339
  return {
34182
34340
  color: "white",
34183
34341
  fontFamily: "sans-serif",
@@ -34204,7 +34362,7 @@ var useVideoControlsResize = ({
34204
34362
  allowFullscreen: allowFullScreen,
34205
34363
  playerWidth
34206
34364
  }) => {
34207
- const resizeInfo = useMemo82(() => {
34365
+ const resizeInfo = useMemo92(() => {
34208
34366
  const playPauseIconSize = ICON_SIZE2;
34209
34367
  const volumeIconSize = ICON_SIZE2;
34210
34368
  const _fullscreenIconSize = allowFullScreen ? fullscreenIconSize : 0;
@@ -34330,14 +34488,14 @@ var Controls = ({
34330
34488
  toggle,
34331
34489
  renderCustomControls
34332
34490
  }) => {
34333
- const playButtonRef = useRef82(null);
34334
- const [supportsFullscreen, setSupportsFullscreen] = useState102(false);
34491
+ const playButtonRef = useRef92(null);
34492
+ const [supportsFullscreen, setSupportsFullscreen] = useState92(false);
34335
34493
  const hovered = useHoverState(containerRef, hideControlsWhenPointerDoesntMove);
34336
34494
  const { maxTimeLabelWidth, displayVerticalVolumeSlider } = useVideoControlsResize({
34337
34495
  allowFullscreen,
34338
34496
  playerWidth: canvasSize?.width ?? 0
34339
34497
  });
34340
- const [shouldShowInitially, setInitiallyShowControls] = useState102(() => {
34498
+ const [shouldShowInitially, setInitiallyShowControls] = useState92(() => {
34341
34499
  if (typeof initiallyShowControls === "boolean") {
34342
34500
  return initiallyShowControls;
34343
34501
  }
@@ -34358,7 +34516,7 @@ var Controls = ({
34358
34516
  }
34359
34517
  throw new TypeError("initiallyShowControls must be a number or a boolean");
34360
34518
  });
34361
- const containerCss = useMemo92(() => {
34519
+ const containerCss = useMemo102(() => {
34362
34520
  const shouldShow = hovered || !playing || shouldShowInitially || alwaysShowControls;
34363
34521
  return {
34364
34522
  ...containerStyle2,
@@ -34387,7 +34545,7 @@ var Controls = ({
34387
34545
  clearInterval(timeout);
34388
34546
  };
34389
34547
  }, [shouldShowInitially]);
34390
- const playbackRates = useMemo92(() => {
34548
+ const playbackRates = useMemo102(() => {
34391
34549
  if (showPlaybackRateControl === true) {
34392
34550
  return [0.5, 0.8, 1, 1.2, 1.5, 1.8, 2, 2.5, 3];
34393
34551
  }
@@ -34405,8 +34563,8 @@ var Controls = ({
34405
34563
  return null;
34406
34564
  }, [showPlaybackRateControl]);
34407
34565
  const customControlsElement = renderCustomControls ? renderCustomControls() : null;
34408
- const ref = useRef82(null);
34409
- const flexRef = useRef82(null);
34566
+ const ref = useRef92(null);
34567
+ const flexRef = useRef92(null);
34410
34568
  const onPointerDownIfContainer = useCallback72((e) => {
34411
34569
  if (e.target === ref.current || e.target === flexRef.current) {
34412
34570
  onPointerDown?.(e);
@@ -34430,82 +34588,82 @@ var Controls = ({
34430
34588
  /* @__PURE__ */ jsxs82("div", {
34431
34589
  style: leftPartStyle,
34432
34590
  children: [
34433
- /* @__PURE__ */ jsx114("button", {
34591
+ /* @__PURE__ */ jsx124("button", {
34434
34592
  ref: playButtonRef,
34435
34593
  type: "button",
34436
34594
  style: playerButtonStyle,
34437
34595
  onClick: toggle,
34438
34596
  "aria-label": playing ? "Pause video" : "Play video",
34439
34597
  title: playing ? "Pause video" : "Play video",
34440
- children: renderPlayPauseButton === null ? /* @__PURE__ */ jsx114(DefaultPlayPauseButton, {
34598
+ children: renderPlayPauseButton === null ? /* @__PURE__ */ jsx124(DefaultPlayPauseButton, {
34441
34599
  buffering,
34442
34600
  playing
34443
34601
  }) : renderPlayPauseButton({
34444
34602
  playing,
34445
34603
  isBuffering: buffering
34446
- }) ?? /* @__PURE__ */ jsx114(DefaultPlayPauseButton, {
34604
+ }) ?? /* @__PURE__ */ jsx124(DefaultPlayPauseButton, {
34447
34605
  buffering,
34448
34606
  playing
34449
34607
  })
34450
34608
  }),
34451
34609
  showVolumeControls ? /* @__PURE__ */ jsxs82(Fragment23, {
34452
34610
  children: [
34453
- /* @__PURE__ */ jsx114("div", {
34611
+ /* @__PURE__ */ jsx124("div", {
34454
34612
  style: xSpacer
34455
34613
  }),
34456
- /* @__PURE__ */ jsx114(MediaVolumeSlider, {
34614
+ /* @__PURE__ */ jsx124(MediaVolumeSlider, {
34457
34615
  renderMuteButton,
34458
34616
  renderVolumeSlider,
34459
34617
  displayVerticalVolumeSlider
34460
34618
  })
34461
34619
  ]
34462
34620
  }) : null,
34463
- /* @__PURE__ */ jsx114("div", {
34621
+ /* @__PURE__ */ jsx124("div", {
34464
34622
  style: xSpacer
34465
34623
  }),
34466
- /* @__PURE__ */ jsx114(PlayerTimeLabel, {
34624
+ /* @__PURE__ */ jsx124(PlayerTimeLabel, {
34467
34625
  durationInFrames,
34468
34626
  fps,
34469
34627
  maxTimeLabelWidth
34470
34628
  }),
34471
- /* @__PURE__ */ jsx114("div", {
34629
+ /* @__PURE__ */ jsx124("div", {
34472
34630
  style: xSpacer
34473
34631
  })
34474
34632
  ]
34475
34633
  }),
34476
- /* @__PURE__ */ jsx114("div", {
34634
+ /* @__PURE__ */ jsx124("div", {
34477
34635
  style: flex1
34478
34636
  }),
34479
34637
  customControlsElement,
34480
- customControlsElement && playbackRates && canvasSize ? /* @__PURE__ */ jsx114("div", {
34638
+ customControlsElement && playbackRates && canvasSize ? /* @__PURE__ */ jsx124("div", {
34481
34639
  style: xSpacer
34482
34640
  }) : null,
34483
- playbackRates && canvasSize && /* @__PURE__ */ jsx114(PlaybackrateControl, {
34641
+ playbackRates && canvasSize && /* @__PURE__ */ jsx124(PlaybackrateControl, {
34484
34642
  canvasSize,
34485
34643
  playbackRates
34486
34644
  }),
34487
- playbackRates && supportsFullscreen && allowFullscreen ? /* @__PURE__ */ jsx114("div", {
34645
+ playbackRates && supportsFullscreen && allowFullscreen ? /* @__PURE__ */ jsx124("div", {
34488
34646
  style: xSpacer
34489
34647
  }) : null,
34490
- /* @__PURE__ */ jsx114("div", {
34648
+ /* @__PURE__ */ jsx124("div", {
34491
34649
  style: fullscreen,
34492
- children: supportsFullscreen && allowFullscreen ? /* @__PURE__ */ jsx114("button", {
34650
+ children: supportsFullscreen && allowFullscreen ? /* @__PURE__ */ jsx124("button", {
34493
34651
  type: "button",
34494
34652
  "aria-label": isFullscreen ? "Exit fullscreen" : "Enter Fullscreen",
34495
34653
  title: isFullscreen ? "Exit fullscreen" : "Enter Fullscreen",
34496
34654
  style: playerButtonStyle,
34497
34655
  onClick: isFullscreen ? onExitFullscreenButtonClick : onFullscreenButtonClick,
34498
- children: renderFullscreenButton === null ? /* @__PURE__ */ jsx114(FullscreenIcon, {
34656
+ children: renderFullscreenButton === null ? /* @__PURE__ */ jsx124(FullscreenIcon, {
34499
34657
  isFullscreen
34500
34658
  }) : renderFullscreenButton({ isFullscreen })
34501
34659
  }) : null
34502
34660
  })
34503
34661
  ]
34504
34662
  }),
34505
- /* @__PURE__ */ jsx114("div", {
34663
+ /* @__PURE__ */ jsx124("div", {
34506
34664
  style: ySpacer
34507
34665
  }),
34508
- /* @__PURE__ */ jsx114(PlayerSeekBar, {
34666
+ /* @__PURE__ */ jsx124(PlayerSeekBar, {
34509
34667
  onSeekEnd,
34510
34668
  onSeekStart,
34511
34669
  durationInFrames,
@@ -34538,7 +34696,7 @@ var cancellablePromise = (promise) => {
34538
34696
  };
34539
34697
  var delay = (n) => new Promise((resolve) => setTimeout(resolve, n));
34540
34698
  var useCancellablePromises = () => {
34541
- const pendingPromises = useRef92([]);
34699
+ const pendingPromises = useRef102([]);
34542
34700
  const appendPendingPromise = useCallback82((promise) => {
34543
34701
  pendingPromises.current = [...pendingPromises.current, promise];
34544
34702
  }, []);
@@ -34546,7 +34704,7 @@ var useCancellablePromises = () => {
34546
34704
  pendingPromises.current = pendingPromises.current.filter((p) => p !== promise);
34547
34705
  }, []);
34548
34706
  const clearPendingPromises = useCallback82(() => pendingPromises.current.map((p) => p.cancel()), []);
34549
- const api = useMemo102(() => ({
34707
+ const api = useMemo112(() => ({
34550
34708
  appendPendingPromise,
34551
34709
  removePendingPromise,
34552
34710
  clearPendingPromises
@@ -34586,7 +34744,7 @@ var useClickPreventionOnDoubleClick = (onClick, onDoubleClick, doubleClickToFull
34586
34744
  api.clearPendingPromises();
34587
34745
  onDoubleClick();
34588
34746
  }, [api, onDoubleClick]);
34589
- const returnValue = useMemo112(() => {
34747
+ const returnValue = useMemo122(() => {
34590
34748
  if (!doubleClickToFullscreen) {
34591
34749
  return { handlePointerDown: onClick, handleDoubleClick: () => {
34592
34750
  return;
@@ -34596,7 +34754,7 @@ var useClickPreventionOnDoubleClick = (onClick, onDoubleClick, doubleClickToFull
34596
34754
  }, [doubleClickToFullscreen, handleDoubleClick, handlePointerDown, onClick]);
34597
34755
  return returnValue;
34598
34756
  };
34599
- var reactVersion = React102.version.split(".")[0];
34757
+ var reactVersion = React112.version.split(".")[0];
34600
34758
  if (reactVersion === "0") {
34601
34759
  throw new Error(`Version ${reactVersion} of "react" is not supported by Remotion`);
34602
34760
  }
@@ -34643,23 +34801,32 @@ var PlayerUI = ({
34643
34801
  }, ref) => {
34644
34802
  const config = Internals.useUnsafeVideoConfig();
34645
34803
  const video = Internals.useVideo();
34646
- const container4 = useRef102(null);
34804
+ const container4 = useRef112(null);
34647
34805
  const canvasSize = useElementSize(container4, {
34648
34806
  triggerOnWindowResize: false,
34649
34807
  shouldApplyCssTransforms: false
34650
34808
  });
34651
- const [hasPausedToResume, setHasPausedToResume] = useState113(false);
34652
- const [shouldAutoplay, setShouldAutoPlay] = useState113(autoPlay);
34653
- const [isFullscreen, setIsFullscreen] = useState113(() => false);
34654
- const [seeking, setSeeking] = useState113(false);
34655
- const supportsFullScreen = useMemo122(() => {
34809
+ const [hasPausedToResume, setHasPausedToResume] = useState102(false);
34810
+ const [shouldAutoplay, setShouldAutoPlay] = useState102(autoPlay);
34811
+ const [isFullscreen, setIsFullscreen] = useState102(() => false);
34812
+ const [seeking, setSeeking] = useState102(false);
34813
+ const [hasPlayed, setHasPlayed] = useState102(false);
34814
+ const supportsFullScreen = useMemo132(() => {
34656
34815
  if (typeof document === "undefined") {
34657
34816
  return false;
34658
34817
  }
34659
34818
  return Boolean(document.fullscreenEnabled || document.webkitFullscreenEnabled);
34660
34819
  }, []);
34661
- const player = usePlayer();
34662
- const playerToggle = player.toggle;
34820
+ const player = usePlayerMethods();
34821
+ const [playing] = Internals.Timeline.usePlayingState();
34822
+ const frame = Internals.Timeline.useTimelinePosition();
34823
+ const play = useCallback102((e) => {
34824
+ if (player.isPlaying()) {
34825
+ return;
34826
+ }
34827
+ setHasPlayed(true);
34828
+ player.play(e);
34829
+ }, [player]);
34663
34830
  const { playerMuted, mediaVolume } = useContext52(Internals.MediaVolumeContext);
34664
34831
  useEffect122(() => {
34665
34832
  player.emitter.dispatchVolumeChange(mediaVolume);
@@ -34681,11 +34848,11 @@ var PlayerUI = ({
34681
34848
  muted: isMuted
34682
34849
  });
34683
34850
  useEffect122(() => {
34684
- if (hasPausedToResume && !player.playing) {
34851
+ if (hasPausedToResume && !playing) {
34685
34852
  setHasPausedToResume(false);
34686
- player.play();
34853
+ play();
34687
34854
  }
34688
- }, [hasPausedToResume, player]);
34855
+ }, [hasPausedToResume, play, playing]);
34689
34856
  useEffect122(() => {
34690
34857
  const { current } = container4;
34691
34858
  if (!current) {
@@ -34703,8 +34870,12 @@ var PlayerUI = ({
34703
34870
  };
34704
34871
  }, []);
34705
34872
  const toggle = useCallback102((e) => {
34706
- playerToggle(e);
34707
- }, [playerToggle]);
34873
+ if (player.isPlaying()) {
34874
+ player.pause();
34875
+ } else {
34876
+ play(e);
34877
+ }
34878
+ }, [play, player]);
34708
34879
  const requestFullscreen = useCallback102(() => {
34709
34880
  if (!allowFullscreen) {
34710
34881
  throw new Error("allowFullscreen is false");
@@ -34753,7 +34924,7 @@ var PlayerUI = ({
34753
34924
  };
34754
34925
  }, [player.emitter]);
34755
34926
  const durationInFrames = config?.durationInFrames ?? 1;
34756
- const layout = useMemo122(() => {
34927
+ const layout = useMemo132(() => {
34757
34928
  if (!config || !canvasSize) {
34758
34929
  return null;
34759
34930
  }
@@ -34765,7 +34936,7 @@ var PlayerUI = ({
34765
34936
  });
34766
34937
  }, [canvasSize, config]);
34767
34938
  const scale = layout?.scale ?? 1;
34768
- const initialScaleIgnored = useRef102(false);
34939
+ const initialScaleIgnored = useRef112(false);
34769
34940
  useEffect122(() => {
34770
34941
  if (!initialScaleIgnored.current) {
34771
34942
  initialScaleIgnored.current = true;
@@ -34774,7 +34945,7 @@ var PlayerUI = ({
34774
34945
  player.emitter.dispatchScaleChange(scale);
34775
34946
  }, [player.emitter, scale]);
34776
34947
  const { setMediaVolume, setPlayerMuted } = useContext52(Internals.SetMediaVolumeContext);
34777
- const [showBufferIndicator, setShowBufferState] = useState113(false);
34948
+ const [showBufferIndicator, setShowBufferState] = useState102(false);
34778
34949
  useEffect122(() => {
34779
34950
  let timeout = null;
34780
34951
  let stopped = false;
@@ -34815,7 +34986,7 @@ var PlayerUI = ({
34815
34986
  }, [bufferStateDelayInMilliseconds, player.emitter]);
34816
34987
  useImperativeHandle11(ref, () => {
34817
34988
  const methods = {
34818
- play: player.play,
34989
+ play,
34819
34990
  pause: () => {
34820
34991
  setHasPausedToResume(false);
34821
34992
  player.pause();
@@ -34885,6 +35056,7 @@ var PlayerUI = ({
34885
35056
  isMuted,
34886
35057
  mediaVolume,
34887
35058
  player,
35059
+ play,
34888
35060
  requestFullscreen,
34889
35061
  setPlayerMuted,
34890
35062
  setMediaVolume,
@@ -34892,7 +35064,7 @@ var PlayerUI = ({
34892
35064
  scale
34893
35065
  ]);
34894
35066
  const VideoComponent = video ? video.component : null;
34895
- const outerStyle = useMemo122(() => {
35067
+ const outerStyle = useMemo132(() => {
34896
35068
  return calculateOuterStyle({
34897
35069
  canvasSize,
34898
35070
  config,
@@ -34901,10 +35073,10 @@ var PlayerUI = ({
34901
35073
  layout
34902
35074
  });
34903
35075
  }, [canvasSize, config, layout, overflowVisible, style2]);
34904
- const outer = useMemo122(() => {
35076
+ const outer = useMemo132(() => {
34905
35077
  return calculateOuter({ config, layout, scale, overflowVisible });
34906
35078
  }, [config, layout, overflowVisible, scale]);
34907
- const containerStyle3 = useMemo122(() => {
35079
+ const containerStyle3 = useMemo132(() => {
34908
35080
  return calculateContainerStyle({
34909
35081
  config,
34910
35082
  layout,
@@ -34949,18 +35121,18 @@ var PlayerUI = ({
34949
35121
  const { handlePointerDown, handleDoubleClick } = useClickPreventionOnDoubleClick(onSingleClick, onDoubleClick, doubleClickToFullscreen && allowFullscreen && supportsFullScreen);
34950
35122
  useEffect122(() => {
34951
35123
  if (shouldAutoplay) {
34952
- player.play();
35124
+ play();
34953
35125
  setShouldAutoPlay(false);
34954
35126
  }
34955
- }, [shouldAutoplay, player]);
34956
- const loadingMarkup = useMemo122(() => {
35127
+ }, [play, shouldAutoplay]);
35128
+ const loadingMarkup = useMemo132(() => {
34957
35129
  return renderLoading ? renderLoading({
34958
35130
  height: outerStyle.height,
34959
35131
  width: outerStyle.width,
34960
35132
  isBuffering: showBufferIndicator
34961
35133
  }) : null;
34962
35134
  }, [outerStyle.height, outerStyle.width, renderLoading, showBufferIndicator]);
34963
- const currentScale = useMemo122(() => {
35135
+ const currentScale = useMemo132(() => {
34964
35136
  return {
34965
35137
  type: "scale",
34966
35138
  scale
@@ -34979,8 +35151,8 @@ var PlayerUI = ({
34979
35151
  }
34980
35152
  const shouldShowPoster = poster && [
34981
35153
  showPosterWhenPaused && !player.isPlaying() && !seeking,
34982
- showPosterWhenEnded && player.isLastFrame && !player.isPlaying(),
34983
- showPosterWhenUnplayed && !player.hasPlayed && !player.isPlaying(),
35154
+ showPosterWhenEnded && frame === durationInFrames - 1 && !player.isPlaying(),
35155
+ showPosterWhenUnplayed && !hasPlayed && !player.isPlaying(),
34984
35156
  showPosterWhenBuffering && showBufferIndicator && player.isPlaying(),
34985
35157
  showPosterWhenBufferingAndPaused && showBufferIndicator && !player.isPlaying()
34986
35158
  ].some(Boolean);
@@ -34996,18 +35168,18 @@ var PlayerUI = ({
34996
35168
  style: containerStyle3,
34997
35169
  className: playerCssClassname(overrideInternalClassName),
34998
35170
  children: [
34999
- VideoComponent ? /* @__PURE__ */ jsx124(ErrorBoundary, {
35171
+ VideoComponent ? /* @__PURE__ */ jsx133(ErrorBoundary, {
35000
35172
  onError,
35001
35173
  errorFallback,
35002
- children: /* @__PURE__ */ jsx124(Internals.CurrentScaleContext.Provider, {
35174
+ children: /* @__PURE__ */ jsx133(Internals.CurrentScaleContext.Provider, {
35003
35175
  value: currentScale,
35004
- children: /* @__PURE__ */ jsx124(VideoComponent, {
35176
+ children: /* @__PURE__ */ jsx133(VideoComponent, {
35005
35177
  ...video?.props ?? {},
35006
35178
  ...inputProps ?? {}
35007
35179
  })
35008
35180
  })
35009
35181
  }) : null,
35010
- shouldShowPoster && posterFillMode === "composition-size" ? /* @__PURE__ */ jsx124("div", {
35182
+ shouldShowPoster && posterFillMode === "composition-size" ? /* @__PURE__ */ jsx133("div", {
35011
35183
  style: {
35012
35184
  ...outerWithoutScale,
35013
35185
  width: config.width,
@@ -35019,19 +35191,19 @@ var PlayerUI = ({
35019
35191
  }) : null
35020
35192
  ]
35021
35193
  }),
35022
- /* @__PURE__ */ jsx124(RenderWarningIfBlacklist, {})
35194
+ /* @__PURE__ */ jsx133(RenderWarningIfBlacklist, {})
35023
35195
  ]
35024
35196
  }),
35025
- shouldShowPoster && posterFillMode === "player-size" ? /* @__PURE__ */ jsx124("div", {
35197
+ shouldShowPoster && posterFillMode === "player-size" ? /* @__PURE__ */ jsx133("div", {
35026
35198
  style: outer,
35027
35199
  onPointerDown: clickToPlay ? handlePointerDown : undefined,
35028
35200
  onDoubleClick: doubleClickToFullscreen ? handleDoubleClick : undefined,
35029
35201
  children: poster
35030
35202
  }) : null,
35031
- controls ? /* @__PURE__ */ jsx124(Controls, {
35203
+ controls ? /* @__PURE__ */ jsx133(Controls, {
35032
35204
  fps: config.fps,
35033
- playing: player.playing,
35034
- toggle: player.toggle,
35205
+ playing,
35206
+ toggle,
35035
35207
  durationInFrames: config.durationInFrames,
35036
35208
  containerRef: container4,
35037
35209
  onFullscreenButtonClick,
@@ -35061,18 +35233,18 @@ var PlayerUI = ({
35061
35233
  ]
35062
35234
  });
35063
35235
  if (noSuspense || IS_NODE && !doesReactVersionSupportSuspense) {
35064
- return /* @__PURE__ */ jsx124("div", {
35236
+ return /* @__PURE__ */ jsx133("div", {
35065
35237
  ref: container4,
35066
35238
  style: outerStyle,
35067
35239
  className: className2,
35068
35240
  children: content
35069
35241
  });
35070
35242
  }
35071
- return /* @__PURE__ */ jsx124("div", {
35243
+ return /* @__PURE__ */ jsx133("div", {
35072
35244
  ref: container4,
35073
35245
  style: outerStyle,
35074
35246
  className: className2,
35075
- children: /* @__PURE__ */ jsx124(Suspense2, {
35247
+ children: /* @__PURE__ */ jsx133(Suspense2, {
35076
35248
  fallback: loadingMarkup,
35077
35249
  children: content
35078
35250
  })
@@ -35122,7 +35294,7 @@ var SharedPlayerContexts = ({
35122
35294
  audioEnabled
35123
35295
  }) => {
35124
35296
  const persistVolumeToStorage = initialVolume === undefined;
35125
- const compositionManagerContext = useMemo132(() => {
35297
+ const compositionManagerContext = useMemo142(() => {
35126
35298
  const context = {
35127
35299
  compositions: [
35128
35300
  {
@@ -35165,15 +35337,15 @@ var SharedPlayerContexts = ({
35165
35337
  fps,
35166
35338
  inputProps
35167
35339
  ]);
35168
- const [playerMuted, setPlayerMuted] = useState122(() => initiallyMuted);
35169
- const [mediaVolume, setMediaVolume] = useState122(() => persistVolumeToStorage ? getPreferredVolume(volumePersistenceKey ?? null) : initialVolume);
35170
- const mediaVolumeContextValue = useMemo132(() => {
35340
+ const [playerMuted, setPlayerMuted] = useState113(() => initiallyMuted);
35341
+ const [mediaVolume, setMediaVolume] = useState113(() => persistVolumeToStorage ? getPreferredVolume(volumePersistenceKey ?? null) : initialVolume);
35342
+ const mediaVolumeContextValue = useMemo142(() => {
35171
35343
  return {
35172
35344
  playerMuted,
35173
35345
  mediaVolume
35174
35346
  };
35175
35347
  }, [playerMuted, mediaVolume]);
35176
- const audioContextWasCreated = useRef112(false);
35348
+ const audioContextWasCreated = useRef122(false);
35177
35349
  const shouldCreateAudioContext = audioContextWasCreated.current || audioEnabled && !playerMuted && mediaVolume > 0;
35178
35350
  audioContextWasCreated.current = shouldCreateAudioContext;
35179
35351
  const setMediaVolumeAndPersist = useCallback112((vol) => {
@@ -35182,19 +35354,19 @@ var SharedPlayerContexts = ({
35182
35354
  persistVolume(vol, logLevel, volumePersistenceKey ?? null);
35183
35355
  }
35184
35356
  }, [persistVolumeToStorage, logLevel, volumePersistenceKey]);
35185
- const setMediaVolumeContextValue = useMemo132(() => {
35357
+ const setMediaVolumeContextValue = useMemo142(() => {
35186
35358
  return {
35187
35359
  setPlayerMuted,
35188
35360
  setMediaVolume: setMediaVolumeAndPersist
35189
35361
  };
35190
35362
  }, [setMediaVolumeAndPersist]);
35191
- const logLevelContext = useMemo132(() => {
35363
+ const logLevelContext = useMemo142(() => {
35192
35364
  return {
35193
35365
  logLevel,
35194
35366
  mountTime: Date.now()
35195
35367
  };
35196
35368
  }, [logLevel]);
35197
- const env = useMemo132(() => {
35369
+ const env = useMemo142(() => {
35198
35370
  return {
35199
35371
  isPlayer: true,
35200
35372
  isRendering: false,
@@ -35203,33 +35375,45 @@ var SharedPlayerContexts = ({
35203
35375
  isReadOnlyStudio: false
35204
35376
  };
35205
35377
  }, []);
35206
- return /* @__PURE__ */ jsx133(Internals.RemotionEnvironmentContext.Provider, {
35378
+ const frameRef = useRef122(timelineContext.frame);
35379
+ frameRef.current = timelineContext.frame;
35380
+ const timelineImperativeContextValue = useMemo142(() => {
35381
+ return {
35382
+ frameRef,
35383
+ imperativePlaying: timelineContext.imperativePlaying,
35384
+ audioAndVideoTags: timelineContext.audioAndVideoTags
35385
+ };
35386
+ }, [timelineContext.audioAndVideoTags, timelineContext.imperativePlaying]);
35387
+ return /* @__PURE__ */ jsx143(Internals.RemotionEnvironmentContext.Provider, {
35207
35388
  value: env,
35208
- children: /* @__PURE__ */ jsx133(Internals.LogLevelContext.Provider, {
35389
+ children: /* @__PURE__ */ jsx143(Internals.LogLevelContext.Provider, {
35209
35390
  value: logLevelContext,
35210
- children: /* @__PURE__ */ jsx133(Internals.CanUseRemotionHooksProvider, {
35211
- children: /* @__PURE__ */ jsx133(Internals.AbsoluteTimeContext.Provider, {
35391
+ children: /* @__PURE__ */ jsx143(Internals.CanUseRemotionHooksProvider, {
35392
+ children: /* @__PURE__ */ jsx143(Internals.AbsoluteTimeContext.Provider, {
35212
35393
  value: timelineContext,
35213
- children: /* @__PURE__ */ jsx133(Internals.PlaybackRateContext.Provider, {
35394
+ children: /* @__PURE__ */ jsx143(Internals.PlaybackRateContext.Provider, {
35214
35395
  value: playbackRateContext,
35215
- children: /* @__PURE__ */ jsx133(Internals.TimelineContext.Provider, {
35216
- value: timelineContext,
35217
- children: /* @__PURE__ */ jsx133(Internals.CompositionManager.Provider, {
35218
- value: compositionManagerContext,
35219
- children: /* @__PURE__ */ jsx133(Internals.PrefetchProvider, {
35220
- children: /* @__PURE__ */ jsx133(Internals.DurationsContextProvider, {
35221
- children: /* @__PURE__ */ jsx133(Internals.MediaVolumeContext.Provider, {
35222
- value: mediaVolumeContextValue,
35223
- children: /* @__PURE__ */ jsx133(Internals.SetMediaVolumeContext.Provider, {
35224
- value: setMediaVolumeContextValue,
35225
- children: /* @__PURE__ */ jsx133(Internals.BufferingProvider, {
35226
- children: /* @__PURE__ */ jsx133(Internals.SharedAudioContextProvider, {
35227
- audioLatencyHint,
35228
- audioEnabled: shouldCreateAudioContext,
35229
- previewSampleRate: sampleRate,
35230
- children: /* @__PURE__ */ jsx133(Internals.SharedAudioTagsContextProvider, {
35231
- numberOfAudioTags: numberOfSharedAudioTags,
35232
- children
35396
+ children: /* @__PURE__ */ jsx143(CoreTimelineImperativeContextProvider, {
35397
+ value: timelineImperativeContextValue,
35398
+ children: /* @__PURE__ */ jsx143(Internals.TimelineContext.Provider, {
35399
+ value: timelineContext,
35400
+ children: /* @__PURE__ */ jsx143(Internals.CompositionManager.Provider, {
35401
+ value: compositionManagerContext,
35402
+ children: /* @__PURE__ */ jsx143(Internals.PrefetchProvider, {
35403
+ children: /* @__PURE__ */ jsx143(Internals.DurationsContextProvider, {
35404
+ children: /* @__PURE__ */ jsx143(Internals.MediaVolumeContext.Provider, {
35405
+ value: mediaVolumeContextValue,
35406
+ children: /* @__PURE__ */ jsx143(Internals.SetMediaVolumeContext.Provider, {
35407
+ value: setMediaVolumeContextValue,
35408
+ children: /* @__PURE__ */ jsx143(Internals.BufferingProvider, {
35409
+ children: /* @__PURE__ */ jsx143(Internals.SharedAudioContextProvider, {
35410
+ audioLatencyHint,
35411
+ audioEnabled: shouldCreateAudioContext,
35412
+ previewSampleRate: sampleRate,
35413
+ children: /* @__PURE__ */ jsx143(Internals.SharedAudioTagsContextProvider, {
35414
+ numberOfAudioTags: numberOfSharedAudioTags,
35415
+ children
35416
+ })
35233
35417
  })
35234
35418
  })
35235
35419
  })
@@ -35417,21 +35601,21 @@ var PlayerFn = ({
35417
35601
  if (componentForValidation === Composition) {
35418
35602
  throw new TypeError(`'component' must not be the 'Composition' component. Pass your own React component directly, and set the duration, fps and dimensions as separate props. See https://www.remotion.dev/docs/player/examples for an example.`);
35419
35603
  }
35420
- useState132(() => acknowledgeRemotionLicenseMessage(Boolean(acknowledgeRemotionLicense), logLevel));
35604
+ useState122(() => acknowledgeRemotionLicenseMessage(Boolean(acknowledgeRemotionLicense), logLevel));
35421
35605
  const component = Internals.useLazyComponent({
35422
35606
  compProps: componentProps,
35423
35607
  componentName: "Player",
35424
35608
  noSuspense: Boolean(noSuspense)
35425
35609
  });
35426
35610
  validateInitialFrame({ initialFrame, durationInFrames });
35427
- const [frame, setFrame] = useState132(() => ({
35611
+ const [frame, setFrame] = useState122(() => ({
35428
35612
  [PLAYER_COMP_ID]: initialFrame ?? 0
35429
35613
  }));
35430
- const [playing, setPlaying] = useState132(false);
35431
- const rootRef = useRef122(null);
35432
- const audioAndVideoTags = useRef122([]);
35433
- const imperativePlaying = useRef122(false);
35434
- const [currentPlaybackRate, setCurrentPlaybackRate] = useState132(playbackRate);
35614
+ const [playing, setPlaying] = useState122(false);
35615
+ const rootRef = useRef132(null);
35616
+ const audioAndVideoTags = useRef132([]);
35617
+ const imperativePlaying = useRef132(false);
35618
+ const [currentPlaybackRate, setCurrentPlaybackRate] = useState122(playbackRate);
35435
35619
  if (typeof compositionHeight !== "number") {
35436
35620
  throw new TypeError(`'compositionHeight' must be a number but got '${typeof compositionHeight}' instead`);
35437
35621
  }
@@ -35492,7 +35676,7 @@ var PlayerFn = ({
35492
35676
  setCurrentPlaybackRate(playbackRate);
35493
35677
  }, [playbackRate]);
35494
35678
  useImperativeHandle22(ref, () => rootRef.current, []);
35495
- useState132(() => {
35679
+ useState122(() => {
35496
35680
  Internals.playbackLogging({
35497
35681
  logLevel,
35498
35682
  message: `[player] Mounting <Player>. User agent = ${typeof navigator === "undefined" ? "server" : navigator.userAgent}`,
@@ -35500,7 +35684,7 @@ var PlayerFn = ({
35500
35684
  mountTime: Date.now()
35501
35685
  });
35502
35686
  });
35503
- const timelineContextValue = useMemo142(() => {
35687
+ const timelineContextValue = useMemo152(() => {
35504
35688
  return {
35505
35689
  frame,
35506
35690
  playing,
@@ -35508,13 +35692,13 @@ var PlayerFn = ({
35508
35692
  audioAndVideoTags
35509
35693
  };
35510
35694
  }, [frame, playing]);
35511
- const playbackRateContextValue = useMemo142(() => {
35695
+ const playbackRateContextValue = useMemo152(() => {
35512
35696
  return {
35513
35697
  playbackRate: currentPlaybackRate,
35514
35698
  setPlaybackRate: setCurrentPlaybackRate
35515
35699
  };
35516
35700
  }, [currentPlaybackRate]);
35517
- const setTimelineContextValue = useMemo142(() => {
35701
+ const setTimelineContextValue = useMemo152(() => {
35518
35702
  return {
35519
35703
  setFrame,
35520
35704
  setPlaying
@@ -35525,14 +35709,14 @@ var PlayerFn = ({
35525
35709
  Internals.CSSUtils.injectCSS(Internals.CSSUtils.makeDefaultPreviewCSS(`.${playerCssClassname(overrideInternalClassName)}`, "#fff"));
35526
35710
  }, [overrideInternalClassName]);
35527
35711
  }
35528
- const actualInputProps = useMemo142(() => inputProps ?? {}, [inputProps]);
35529
- const browserMediaControlsBehavior = useMemo142(() => {
35712
+ const actualInputProps = useMemo152(() => inputProps ?? {}, [inputProps]);
35713
+ const browserMediaControlsBehavior = useMemo152(() => {
35530
35714
  return passedBrowserMediaControlsBehavior ?? {
35531
35715
  mode: "prevent-media-session"
35532
35716
  };
35533
35717
  }, [passedBrowserMediaControlsBehavior]);
35534
- return /* @__PURE__ */ jsx143(Internals.IsPlayerContextProvider, {
35535
- children: /* @__PURE__ */ jsx143(SharedPlayerContexts, {
35718
+ return /* @__PURE__ */ jsx153(Internals.IsPlayerContextProvider, {
35719
+ children: /* @__PURE__ */ jsx153(SharedPlayerContexts, {
35536
35720
  timelineContext: timelineContextValue,
35537
35721
  playbackRateContext: playbackRateContextValue,
35538
35722
  component,
@@ -35549,11 +35733,11 @@ var PlayerFn = ({
35549
35733
  initialVolume,
35550
35734
  inputProps: actualInputProps,
35551
35735
  audioEnabled: true,
35552
- children: /* @__PURE__ */ jsx143(Internals.SetTimelineContext.Provider, {
35736
+ children: /* @__PURE__ */ jsx153(Internals.SetTimelineContext.Provider, {
35553
35737
  value: setTimelineContextValue,
35554
- children: /* @__PURE__ */ jsx143(PlayerEmitterProvider, {
35738
+ children: /* @__PURE__ */ jsx153(PlayerEmitterProvider, {
35555
35739
  currentPlaybackRate,
35556
- children: /* @__PURE__ */ jsx143(PlayerUI_default, {
35740
+ children: /* @__PURE__ */ jsx153(PlayerUI_default, {
35557
35741
  ref: rootRef,
35558
35742
  posterFillMode,
35559
35743
  renderLoading,
@@ -35606,14 +35790,14 @@ var useThumbnail = () => {
35606
35790
  if (!emitter) {
35607
35791
  throw new TypeError("Expected Player event emitter context");
35608
35792
  }
35609
- const returnValue = useMemo152(() => {
35793
+ const returnValue = useMemo162(() => {
35610
35794
  return {
35611
35795
  emitter
35612
35796
  };
35613
35797
  }, [emitter]);
35614
35798
  return returnValue;
35615
35799
  };
35616
- var reactVersion2 = React133.version.split(".")[0];
35800
+ var reactVersion2 = React143.version.split(".")[0];
35617
35801
  if (reactVersion2 === "0") {
35618
35802
  throw new Error(`Version ${reactVersion2} of "react" is not supported by Remotion`);
35619
35803
  }
@@ -35630,12 +35814,12 @@ var ThumbnailUI = ({
35630
35814
  }, ref) => {
35631
35815
  const config = Internals.useUnsafeVideoConfig();
35632
35816
  const video = Internals.useVideo();
35633
- const container4 = useRef132(null);
35817
+ const container4 = useRef142(null);
35634
35818
  const canvasSize = useElementSize(container4, {
35635
35819
  triggerOnWindowResize: false,
35636
35820
  shouldApplyCssTransforms: false
35637
35821
  });
35638
- const layout = useMemo162(() => {
35822
+ const layout = useMemo172(() => {
35639
35823
  if (!config || !canvasSize) {
35640
35824
  return null;
35641
35825
  }
@@ -35657,7 +35841,7 @@ var ThumbnailUI = ({
35657
35841
  return Object.assign(thumbnail.emitter, methods);
35658
35842
  }, [scale, thumbnail.emitter]);
35659
35843
  const VideoComponent = video ? video.component : null;
35660
- const outerStyle = useMemo162(() => {
35844
+ const outerStyle = useMemo172(() => {
35661
35845
  return calculateOuterStyle({
35662
35846
  config,
35663
35847
  style: style2,
@@ -35666,10 +35850,10 @@ var ThumbnailUI = ({
35666
35850
  layout
35667
35851
  });
35668
35852
  }, [canvasSize, config, layout, overflowVisible, style2]);
35669
- const outer = useMemo162(() => {
35853
+ const outer = useMemo172(() => {
35670
35854
  return calculateOuter({ config, layout, scale, overflowVisible });
35671
35855
  }, [config, layout, overflowVisible, scale]);
35672
- const containerStyle3 = useMemo162(() => {
35856
+ const containerStyle3 = useMemo172(() => {
35673
35857
  return calculateContainerStyle({
35674
35858
  config,
35675
35859
  layout,
@@ -35680,14 +35864,14 @@ var ThumbnailUI = ({
35680
35864
  const onError = useCallback122((error2) => {
35681
35865
  thumbnail.emitter.dispatchError(error2);
35682
35866
  }, [thumbnail.emitter]);
35683
- const loadingMarkup = useMemo162(() => {
35867
+ const loadingMarkup = useMemo172(() => {
35684
35868
  return renderLoading ? renderLoading({
35685
35869
  height: outerStyle.height,
35686
35870
  width: outerStyle.width,
35687
35871
  isBuffering: false
35688
35872
  }) : null;
35689
35873
  }, [outerStyle.height, outerStyle.width, renderLoading]);
35690
- const currentScaleContext = useMemo162(() => {
35874
+ const currentScaleContext = useMemo172(() => {
35691
35875
  return {
35692
35876
  type: "scale",
35693
35877
  scale
@@ -35696,17 +35880,17 @@ var ThumbnailUI = ({
35696
35880
  if (!config) {
35697
35881
  return null;
35698
35882
  }
35699
- const content = /* @__PURE__ */ jsx153("div", {
35883
+ const content = /* @__PURE__ */ jsx163("div", {
35700
35884
  style: outer,
35701
- children: /* @__PURE__ */ jsx153("div", {
35885
+ children: /* @__PURE__ */ jsx163("div", {
35702
35886
  style: containerStyle3,
35703
35887
  className: playerCssClassname(overrideInternalClassName),
35704
- children: VideoComponent ? /* @__PURE__ */ jsx153(ErrorBoundary, {
35888
+ children: VideoComponent ? /* @__PURE__ */ jsx163(ErrorBoundary, {
35705
35889
  onError,
35706
35890
  errorFallback,
35707
- children: /* @__PURE__ */ jsx153(Internals.CurrentScaleContext.Provider, {
35891
+ children: /* @__PURE__ */ jsx163(Internals.CurrentScaleContext.Provider, {
35708
35892
  value: currentScaleContext,
35709
- children: /* @__PURE__ */ jsx153(VideoComponent, {
35893
+ children: /* @__PURE__ */ jsx163(VideoComponent, {
35710
35894
  ...video?.props ?? {},
35711
35895
  ...inputProps ?? {}
35712
35896
  })
@@ -35715,18 +35899,18 @@ var ThumbnailUI = ({
35715
35899
  })
35716
35900
  });
35717
35901
  if (noSuspense || IS_NODE && !doesReactVersionSupportSuspense2) {
35718
- return /* @__PURE__ */ jsx153("div", {
35902
+ return /* @__PURE__ */ jsx163("div", {
35719
35903
  ref: container4,
35720
35904
  style: outerStyle,
35721
35905
  className: className2,
35722
35906
  children: content
35723
35907
  });
35724
35908
  }
35725
- return /* @__PURE__ */ jsx153("div", {
35909
+ return /* @__PURE__ */ jsx163("div", {
35726
35910
  ref: container4,
35727
35911
  style: outerStyle,
35728
35912
  className: className2,
35729
- children: /* @__PURE__ */ jsx153(Suspense22, {
35913
+ children: /* @__PURE__ */ jsx163(Suspense22, {
35730
35914
  fallback: loadingMarkup,
35731
35915
  children: content
35732
35916
  })
@@ -35755,21 +35939,21 @@ var ThumbnailFn = ({
35755
35939
  window.remotion_isPlayer = true;
35756
35940
  }, []);
35757
35941
  }
35758
- const rootRef = useRef142(null);
35759
- const timelineState = useMemo172(() => {
35942
+ const rootRef = useRef152(null);
35943
+ const imperativePlaying = useRef152(false);
35944
+ const audioAndVideoTags = useRef152([]);
35945
+ const timelineState = useMemo182(() => {
35760
35946
  const value = {
35761
35947
  playing: false,
35762
35948
  frame: {
35763
35949
  [PLAYER_COMP_ID]: frameToDisplay
35764
35950
  },
35765
- imperativePlaying: {
35766
- current: false
35767
- },
35768
- audioAndVideoTags: { current: [] }
35951
+ imperativePlaying,
35952
+ audioAndVideoTags
35769
35953
  };
35770
35954
  return value;
35771
35955
  }, [frameToDisplay]);
35772
- const playbackRateContext = useMemo172(() => {
35956
+ const playbackRateContext = useMemo182(() => {
35773
35957
  return {
35774
35958
  playbackRate: 1,
35775
35959
  setPlaybackRate: () => {
@@ -35783,12 +35967,12 @@ var ThumbnailFn = ({
35783
35967
  componentName: "Thumbnail",
35784
35968
  noSuspense: Boolean(noSuspense)
35785
35969
  });
35786
- const [emitter] = useState142(() => new ThumbnailEmitter);
35787
- const passedInputProps = useMemo172(() => {
35970
+ const [emitter] = useState132(() => new ThumbnailEmitter);
35971
+ const passedInputProps = useMemo182(() => {
35788
35972
  return inputProps ?? {};
35789
35973
  }, [inputProps]);
35790
- return /* @__PURE__ */ jsx163(Internals.IsPlayerContextProvider, {
35791
- children: /* @__PURE__ */ jsx163(SharedPlayerContexts, {
35974
+ return /* @__PURE__ */ jsx173(Internals.IsPlayerContextProvider, {
35975
+ children: /* @__PURE__ */ jsx173(SharedPlayerContexts, {
35792
35976
  timelineContext: timelineState,
35793
35977
  playbackRateContext,
35794
35978
  component: Component,
@@ -35803,9 +35987,9 @@ var ThumbnailFn = ({
35803
35987
  sampleRate: 48000,
35804
35988
  inputProps: passedInputProps,
35805
35989
  audioEnabled: false,
35806
- children: /* @__PURE__ */ jsx163(ThumbnailEmitterContext.Provider, {
35990
+ children: /* @__PURE__ */ jsx173(ThumbnailEmitterContext.Provider, {
35807
35991
  value: emitter,
35808
- children: /* @__PURE__ */ jsx163(ThumbnailUI_default, {
35992
+ children: /* @__PURE__ */ jsx173(ThumbnailUI_default, {
35809
35993
  ref: rootRef,
35810
35994
  className: className2,
35811
35995
  errorFallback,
@@ -36604,17 +36788,17 @@ function useColorMode() {
36604
36788
 
36605
36789
  // ../media/dist/esm/index.mjs
36606
36790
  import { useMemo as useMemo312, useState as useState312 } from "react";
36607
- import { useContext as useContext212, useEffect as useEffect43, useMemo as useMemo60, useRef as useRef51, useState as useState41 } from "react";
36791
+ import { useContext as useContext212, useEffect as useEffect43, useMemo as useMemo60, useRef as useRef50, useState as useState41 } from "react";
36608
36792
  import {
36609
36793
  AudioBufferSink,
36610
36794
  InputDisposedError
36611
36795
  } from "mediabunny";
36612
36796
  import { ALL_FORMATS, Input as Input2, UrlSource } from "mediabunny";
36613
36797
  import { CanvasSink } from "mediabunny";
36614
- import { useContext as useContext49, useLayoutEffect as useLayoutEffect19 } from "react";
36798
+ import { useContext as useContext49, useLayoutEffect as useLayoutEffect20 } from "react";
36615
36799
  import { jsx as jsx61 } from "react/jsx-runtime";
36616
36800
  import { useContext as useContext312, useLayoutEffect as useLayoutEffect24, useMemo as useMemo213, useState as useState210 } from "react";
36617
- import React211 from "react";
36801
+ import React214 from "react";
36618
36802
  import {
36619
36803
  ALL_FORMATS as ALL_FORMATS2,
36620
36804
  AudioSampleSink,
@@ -36627,7 +36811,7 @@ import {
36627
36811
  } from "mediabunny";
36628
36812
  import { jsx as jsx216 } from "react/jsx-runtime";
36629
36813
  import { jsx as jsx316 } from "react/jsx-runtime";
36630
- import React63, { useMemo as useMemo63, useState as useState63 } from "react";
36814
+ import React64, { useMemo as useMemo63, useState as useState63 } from "react";
36631
36815
  import {
36632
36816
  useCallback as useCallback41,
36633
36817
  useContext as useContext410,
@@ -38862,7 +39046,7 @@ var useCommonEffects = ({
38862
39046
  label: label3
38863
39047
  }) => {
38864
39048
  const sharedAudioContext = useContext49(Internals.SharedAudioContext);
38865
- useLayoutEffect19(() => {
39049
+ useLayoutEffect20(() => {
38866
39050
  const mediaPlayer = mediaPlayerRef.current;
38867
39051
  if (!mediaPlayer)
38868
39052
  return;
@@ -38879,7 +39063,7 @@ var useCommonEffects = ({
38879
39063
  frame,
38880
39064
  mediaPlayerRef
38881
39065
  ]);
38882
- useLayoutEffect19(() => {
39066
+ useLayoutEffect20(() => {
38883
39067
  if (!sharedAudioContext)
38884
39068
  return;
38885
39069
  const { remove } = sharedAudioContext.audioSyncAnchorEmitter.subscribe((event) => {
@@ -38891,90 +39075,90 @@ var useCommonEffects = ({
38891
39075
  remove();
38892
39076
  };
38893
39077
  }, [sharedAudioContext, mediaPlayerRef]);
38894
- useLayoutEffect19(() => {
39078
+ useLayoutEffect20(() => {
38895
39079
  const mediaPlayer = mediaPlayerRef.current;
38896
39080
  if (!mediaPlayer || !mediaPlayerReady) {
38897
39081
  return;
38898
39082
  }
38899
39083
  mediaPlayer.setTrimBefore(trimBefore, currentTimeRef.current);
38900
39084
  }, [trimBefore, mediaPlayerReady, mediaPlayerRef, currentTimeRef]);
38901
- useLayoutEffect19(() => {
39085
+ useLayoutEffect20(() => {
38902
39086
  const mediaPlayer = mediaPlayerRef.current;
38903
39087
  if (!mediaPlayer || !mediaPlayerReady) {
38904
39088
  return;
38905
39089
  }
38906
39090
  mediaPlayer.setTrimAfter(trimAfter, currentTimeRef.current);
38907
39091
  }, [trimAfter, mediaPlayerReady, mediaPlayerRef, currentTimeRef]);
38908
- useLayoutEffect19(() => {
39092
+ useLayoutEffect20(() => {
38909
39093
  const mediaPlayer = mediaPlayerRef.current;
38910
39094
  if (!mediaPlayer || !mediaPlayerReady)
38911
39095
  return;
38912
39096
  mediaPlayer.setMuted(effectiveMuted);
38913
39097
  }, [effectiveMuted, mediaPlayerReady, mediaPlayerRef]);
38914
- useLayoutEffect19(() => {
39098
+ useLayoutEffect20(() => {
38915
39099
  const mediaPlayer = mediaPlayerRef.current;
38916
39100
  if (!mediaPlayer || !mediaPlayerReady) {
38917
39101
  return;
38918
39102
  }
38919
39103
  mediaPlayer.setVolume(userPreferredVolume);
38920
39104
  }, [userPreferredVolume, mediaPlayerReady, mediaPlayerRef]);
38921
- useLayoutEffect19(() => {
39105
+ useLayoutEffect20(() => {
38922
39106
  const mediaPlayer = mediaPlayerRef.current;
38923
39107
  if (!mediaPlayer || !mediaPlayerReady) {
38924
39108
  return;
38925
39109
  }
38926
39110
  mediaPlayer.setPlaybackRate(playbackRate, currentTimeRef.current);
38927
39111
  }, [playbackRate, mediaPlayerReady, mediaPlayerRef, currentTimeRef]);
38928
- useLayoutEffect19(() => {
39112
+ useLayoutEffect20(() => {
38929
39113
  const mediaPlayer = mediaPlayerRef.current;
38930
39114
  if (!mediaPlayer || !mediaPlayerReady) {
38931
39115
  return;
38932
39116
  }
38933
39117
  mediaPlayer.setGlobalPlaybackRate(globalPlaybackRate, currentTimeRef.current);
38934
39118
  }, [globalPlaybackRate, mediaPlayerReady, mediaPlayerRef, currentTimeRef]);
38935
- useLayoutEffect19(() => {
39119
+ useLayoutEffect20(() => {
38936
39120
  const mediaPlayer = mediaPlayerRef.current;
38937
39121
  if (!mediaPlayer || !mediaPlayerReady) {
38938
39122
  return;
38939
39123
  }
38940
39124
  mediaPlayer.setLoop(loop, currentTimeRef.current);
38941
39125
  }, [loop, mediaPlayerReady, mediaPlayerRef, currentTimeRef]);
38942
- useLayoutEffect19(() => {
39126
+ useLayoutEffect20(() => {
38943
39127
  const mediaPlayer = mediaPlayerRef.current;
38944
39128
  if (!mediaPlayer || !mediaPlayerReady) {
38945
39129
  return;
38946
39130
  }
38947
39131
  mediaPlayer.setSequenceDurationInFrames(durationInFrames, currentTimeRef.current);
38948
39132
  }, [durationInFrames, mediaPlayerReady, mediaPlayerRef, currentTimeRef]);
38949
- useLayoutEffect19(() => {
39133
+ useLayoutEffect20(() => {
38950
39134
  const mediaPlayer = mediaPlayerRef.current;
38951
39135
  if (!mediaPlayer) {
38952
39136
  return;
38953
39137
  }
38954
39138
  mediaPlayer.setIsPremounting(isPremounting);
38955
39139
  }, [isPremounting, mediaPlayerReady, mediaPlayerRef]);
38956
- useLayoutEffect19(() => {
39140
+ useLayoutEffect20(() => {
38957
39141
  const mediaPlayer = mediaPlayerRef.current;
38958
39142
  if (!mediaPlayer) {
38959
39143
  return;
38960
39144
  }
38961
39145
  mediaPlayer.setIsPostmounting(isPostmounting);
38962
39146
  }, [isPostmounting, mediaPlayerReady, mediaPlayerRef]);
38963
- useLayoutEffect19(() => {
39147
+ useLayoutEffect20(() => {
38964
39148
  const mediaPlayer = mediaPlayerRef.current;
38965
39149
  if (!mediaPlayer || !mediaPlayerReady) {
38966
39150
  return;
38967
39151
  }
38968
39152
  mediaPlayer.setFps(fps, currentTimeRef.current);
38969
39153
  }, [fps, mediaPlayerReady, mediaPlayerRef, currentTimeRef]);
38970
- useLayoutEffect19(() => {
39154
+ useLayoutEffect20(() => {
38971
39155
  const mediaPlayer = mediaPlayerRef.current;
38972
39156
  if (!mediaPlayer || !mediaPlayerReady) {
38973
39157
  return;
38974
39158
  }
38975
39159
  mediaPlayer.setSequenceOffset(sequenceOffset, currentTimeRef.current);
38976
39160
  }, [sequenceOffset, mediaPlayerReady, mediaPlayerRef, currentTimeRef]);
38977
- useLayoutEffect19(() => {
39161
+ useLayoutEffect20(() => {
38978
39162
  const mediaPlayer = mediaPlayerRef.current;
38979
39163
  if (!mediaPlayer || !mediaPlayerReady)
38980
39164
  return;
@@ -39019,9 +39203,9 @@ var AudioForPreviewAssertedShowing = ({
39019
39203
  }) => {
39020
39204
  const videoConfig = useUnsafeVideoConfig2();
39021
39205
  const frame = useCurrentFrame();
39022
- const mediaPlayerRef = useRef51(null);
39023
- const initialTrimBeforeRef = useRef51(trimBefore);
39024
- const initialTrimAfterRef = useRef51(trimAfter);
39206
+ const mediaPlayerRef = useRef50(null);
39207
+ const initialTrimBeforeRef = useRef50(trimBefore);
39208
+ const initialTrimAfterRef = useRef50(trimAfter);
39025
39209
  const [initialRequestInit] = useState41(requestInit);
39026
39210
  const [mediaPlayerReady, setMediaPlayerReady] = useState41(false);
39027
39211
  const [shouldFallbackToNativeAudio, setShouldFallbackToNativeAudio] = useState41(false);
@@ -39045,7 +39229,7 @@ var AudioForPreviewAssertedShowing = ({
39045
39229
  throw new TypeError("No `src` was passed to <NewAudioForPreview>.");
39046
39230
  }
39047
39231
  const currentTime = frame / videoConfig.fps;
39048
- const currentTimeRef = useRef51(currentTime);
39232
+ const currentTimeRef = useRef50(currentTime);
39049
39233
  currentTimeRef.current = currentTime;
39050
39234
  const preloadedSrc = usePreload2(src);
39051
39235
  const parentSequence = useContext212(SequenceContext2);
@@ -39058,14 +39242,14 @@ var AudioForPreviewAssertedShowing = ({
39058
39242
  }
39059
39243
  const effectiveMuted = muted || playerMuted || userPreferredVolume <= 0;
39060
39244
  const isPlayerBuffering = Internals.useIsPlayerBuffering(bufferingContext);
39061
- const initialPlaying = useRef51(playing && !isPlayerBuffering);
39062
- const initialIsPremounting = useRef51(isPremounting);
39063
- const initialIsPostmounting = useRef51(isPostmounting);
39064
- const initialGlobalPlaybackRate = useRef51(globalPlaybackRate);
39065
- const initialPlaybackRate = useRef51(playbackRate);
39066
- const initialMuted = useRef51(effectiveMuted);
39067
- const initialDurationInFrames = useRef51(videoConfig.durationInFrames);
39068
- const initialSequenceOffset = useRef51(sequenceOffset);
39245
+ const initialPlaying = useRef50(playing && !isPlayerBuffering);
39246
+ const initialIsPremounting = useRef50(isPremounting);
39247
+ const initialIsPostmounting = useRef50(isPostmounting);
39248
+ const initialGlobalPlaybackRate = useRef50(globalPlaybackRate);
39249
+ const initialPlaybackRate = useRef50(playbackRate);
39250
+ const initialMuted = useRef50(effectiveMuted);
39251
+ const initialDurationInFrames = useRef50(videoConfig.durationInFrames);
39252
+ const initialSequenceOffset = useRef50(sequenceOffset);
39069
39253
  useCommonEffects({
39070
39254
  mediaPlayerRef,
39071
39255
  mediaPlayerReady,
@@ -40169,7 +40353,7 @@ var getMaxVideoCacheSize = (logLevel) => {
40169
40353
  return cachedMaxCacheSize;
40170
40354
  };
40171
40355
  var useMaxMediaCacheSize = (logLevel) => {
40172
- const context = React211.useContext(Internals.MaxMediaCacheSizeContext);
40356
+ const context = React214.useContext(Internals.MaxMediaCacheSizeContext);
40173
40357
  if (context === null) {
40174
40358
  return getMaxVideoCacheSize(logLevel);
40175
40359
  }
@@ -42606,7 +42790,7 @@ var VideoInner = ({
42606
42790
  overrideId: controls?.overrideId ?? null
42607
42791
  });
42608
42792
  const memoizedEffectDefinitions = Internals.useMemoizedEffectDefinitions(effects ?? []);
42609
- const refForOutline = React63.useRef(null);
42793
+ const refForOutline = React64.useRef(null);
42610
42794
  const {
42611
42795
  effectivePostmountFor,
42612
42796
  effectivePremountFor,
@@ -44008,7 +44192,7 @@ import {
44008
44192
  import { BufferTarget, StreamTarget } from "mediabunny";
44009
44193
 
44010
44194
  // ../core/dist/esm/version.mjs
44011
- var VERSION2 = "4.0.505";
44195
+ var VERSION2 = "4.0.506";
44012
44196
 
44013
44197
  // ../web-renderer/dist/esm/index.mjs
44014
44198
  import { AudioSample, VideoSample } from "mediabunny";
@@ -49605,7 +49789,7 @@ var renderMediaOnWeb = (options2) => {
49605
49789
  };
49606
49790
 
49607
49791
  // src/components/homepage/Demo/DemoRender.tsx
49608
- import React70, { useCallback as useCallback49 } from "react";
49792
+ import React71, { useCallback as useCallback49 } from "react";
49609
49793
  import { z } from "zod";
49610
49794
 
49611
49795
  // src/components/homepage/Demo/DemoErrorIcon.tsx
@@ -49803,7 +49987,7 @@ var style2 = {
49803
49987
  justifyContent: "center"
49804
49988
  };
49805
49989
  var RenderButton = ({ renderData, onError, playerRef }) => {
49806
- const [state, setState] = React70.useState({
49990
+ const [state, setState] = React71.useState({
49807
49991
  type: "idle"
49808
49992
  });
49809
49993
  const triggerRender = useCallback49(async () => {
@@ -50378,7 +50562,7 @@ var PlayerVolume = ({ playerRef }) => {
50378
50562
  };
50379
50563
 
50380
50564
  // src/components/homepage/Demo/PlayPauseButton.tsx
50381
- import React75, { useCallback as useCallback55, useEffect as useEffect55 } from "react";
50565
+ import React76, { useCallback as useCallback55, useEffect as useEffect55 } from "react";
50382
50566
  import { jsx as jsx108 } from "react/jsx-runtime";
50383
50567
  var playerButtonStyle2 = {
50384
50568
  appearance: "none",
@@ -50395,7 +50579,7 @@ var playerButtonStyle2 = {
50395
50579
  color: PALETTE.TEXT_COLOR
50396
50580
  };
50397
50581
  var PlayPauseButton = ({ playerRef }) => {
50398
- const [playing, setPlaying] = React75.useState(true);
50582
+ const [playing, setPlaying] = React76.useState(true);
50399
50583
  useEffect55(() => {
50400
50584
  const { current } = playerRef;
50401
50585
  if (!current) {
@@ -50433,7 +50617,7 @@ var PlayPauseButton = ({ playerRef }) => {
50433
50617
  };
50434
50618
 
50435
50619
  // src/components/homepage/Demo/TimeDisplay.tsx
50436
- import React76, { useEffect as useEffect56 } from "react";
50620
+ import React77, { useEffect as useEffect56 } from "react";
50437
50621
  import { jsx as jsx109 } from "react/jsx-runtime";
50438
50622
  var formatTime2 = (timeInSeconds) => {
50439
50623
  const minutes = Math.floor(timeInSeconds / 60);
@@ -50441,7 +50625,7 @@ var formatTime2 = (timeInSeconds) => {
50441
50625
  return `${String(minutes)}:${String(seconds).padStart(2, "0")}`;
50442
50626
  };
50443
50627
  var TimeDisplay = ({ fps, playerRef }) => {
50444
- const [time, setTime] = React76.useState(0);
50628
+ const [time, setTime] = React77.useState(0);
50445
50629
  useEffect56(() => {
50446
50630
  const { current } = playerRef;
50447
50631
  if (!current) {
@@ -50520,7 +50704,7 @@ var PlayerControls = ({ playerRef, durationInFrames, fps, children }) => {
50520
50704
  };
50521
50705
 
50522
50706
  // src/components/homepage/Demo/ThemeNudge.tsx
50523
- import React77 from "react";
50707
+ import React78 from "react";
50524
50708
  import { jsx as jsx111, jsxs as jsxs39 } from "react/jsx-runtime";
50525
50709
  var origWidth3 = 37;
50526
50710
  var scale3 = 0.4;
@@ -50543,7 +50727,7 @@ var Icon6 = () => {
50543
50727
  };
50544
50728
  var ThemeNudge = () => {
50545
50729
  const { colorMode, setColorMode } = useColorMode();
50546
- const toggleTheme = React77.useCallback((e) => {
50730
+ const toggleTheme = React78.useCallback((e) => {
50547
50731
  e.preventDefault();
50548
50732
  setColorMode(colorMode === "dark" ? "light" : "dark");
50549
50733
  }, [colorMode, setColorMode]);
@@ -50869,7 +51053,7 @@ var EvaluateRemotion_default = EvaluateRemotionSection;
50869
51053
  import { useEffect as useEffect61, useRef as useRef61 } from "react";
50870
51054
 
50871
51055
  // src/components/homepage/MakeVideosLinks.tsx
50872
- import React80 from "react";
51056
+ import React81 from "react";
50873
51057
  import { jsx as jsx119, jsxs as jsxs44, Fragment as Fragment16 } from "react/jsx-runtime";
50874
51058
  var icon2 = {
50875
51059
  height: 16,
@@ -50905,7 +51089,7 @@ var MakeVideosLinks = ({ links }) => {
50905
51089
  /* @__PURE__ */ jsx119("div", {
50906
51090
  className: "leading-6",
50907
51091
  children: links.map((link) => {
50908
- return /* @__PURE__ */ jsxs44(React80.Fragment, {
51092
+ return /* @__PURE__ */ jsxs44(React81.Fragment, {
50909
51093
  children: [
50910
51094
  /* @__PURE__ */ jsx119(MakeVideosLinkItem, {
50911
51095
  ...link
@@ -51021,7 +51205,7 @@ var MakeVideosAgentically = ({
51021
51205
  children: title
51022
51206
  }),
51023
51207
  /* @__PURE__ */ jsx121("p", {
51024
- className: "leading-relaxed",
51208
+ className: "text-balance leading-relaxed",
51025
51209
  children: description
51026
51210
  }),
51027
51211
  showLinks ? /* @__PURE__ */ jsx121(MakeVideosLinks, {
@@ -51049,7 +51233,10 @@ var MakeVideosInteractively = ({
51049
51233
  }),
51050
51234
  description = "Edit and animate using drag and drop and save back to code.",
51051
51235
  showLinks = true,
51052
- links = [{ label: "Remotion Studio", href: "/docs/studio" }],
51236
+ links = [
51237
+ { label: "Studio", href: "/docs/studio" },
51238
+ { label: "Elements", href: "/elements" }
51239
+ ],
51053
51240
  showVideo = true,
51054
51241
  videoSrc = "/img/editing-vp9-chrome.webm",
51055
51242
  fallbackVideoSrc = "/img/editing-safari.mp4"
@@ -51087,7 +51274,7 @@ var MakeVideosInteractively = ({
51087
51274
  children: title
51088
51275
  }),
51089
51276
  /* @__PURE__ */ jsx125("p", {
51090
- className: "leading-relaxed",
51277
+ className: "text-balance leading-relaxed",
51091
51278
  children: description
51092
51279
  }),
51093
51280
  showLinks ? /* @__PURE__ */ jsx125(MakeVideosLinks, {
@@ -51143,7 +51330,7 @@ var MakeVideosProgrammatically = ({
51143
51330
  children: title
51144
51331
  }),
51145
51332
  /* @__PURE__ */ jsx127("p", {
51146
- className: "leading-relaxed",
51333
+ className: "text-balance leading-relaxed",
51147
51334
  children: description
51148
51335
  }),
51149
51336
  showLinks ? /* @__PURE__ */ jsx127(MakeVideosLinks, {
@@ -51243,19 +51430,87 @@ var NewsletterButton = () => {
51243
51430
  });
51244
51431
  };
51245
51432
 
51433
+ // src/components/homepage/ReactSourceOfTruth.tsx
51434
+ import { jsx as jsx129, jsxs as jsxs51 } from "react/jsx-runtime";
51435
+ var ReactSourceOfTruth = () => {
51436
+ return /* @__PURE__ */ jsx129("section", {
51437
+ "aria-labelledby": "react-source-of-truth",
51438
+ className: "mb-16 mt-[60px] hidden items-center justify-center gap-2 lg:flex",
51439
+ children: /* @__PURE__ */ jsxs51("div", {
51440
+ className: "flex shrink-0 items-center gap-2",
51441
+ children: [
51442
+ /* @__PURE__ */ jsxs51("svg", {
51443
+ "aria-hidden": "true",
51444
+ className: "h-6 w-6 text-[var(--subtitle)]",
51445
+ fill: "none",
51446
+ viewBox: "0 0 64 64",
51447
+ children: [
51448
+ /* @__PURE__ */ jsx129("ellipse", {
51449
+ cx: "32",
51450
+ cy: "32",
51451
+ rx: "26",
51452
+ ry: "10",
51453
+ stroke: "currentColor",
51454
+ strokeWidth: "5"
51455
+ }),
51456
+ /* @__PURE__ */ jsx129("ellipse", {
51457
+ cx: "32",
51458
+ cy: "32",
51459
+ rx: "26",
51460
+ ry: "10",
51461
+ stroke: "currentColor",
51462
+ strokeWidth: "5",
51463
+ transform: "rotate(60 32 32)"
51464
+ }),
51465
+ /* @__PURE__ */ jsx129("ellipse", {
51466
+ cx: "32",
51467
+ cy: "32",
51468
+ rx: "26",
51469
+ ry: "10",
51470
+ stroke: "currentColor",
51471
+ strokeWidth: "5",
51472
+ transform: "rotate(120 32 32)"
51473
+ }),
51474
+ /* @__PURE__ */ jsx129("circle", {
51475
+ cx: "32",
51476
+ cy: "32",
51477
+ fill: "currentColor",
51478
+ r: "3.5"
51479
+ })
51480
+ ]
51481
+ }),
51482
+ /* @__PURE__ */ jsx129("p", {
51483
+ id: "react-source-of-truth",
51484
+ className: "m-0 font-brand leading-relaxed",
51485
+ children: "Switch workflows at any time. Code is always the source of truth."
51486
+ }),
51487
+ /* @__PURE__ */ jsx129("svg", {
51488
+ "aria-hidden": "true",
51489
+ className: "h-6 w-6 text-[var(--subtitle)]",
51490
+ fill: "currentColor",
51491
+ viewBox: "0 0 640 640",
51492
+ children: /* @__PURE__ */ jsx129("path", {
51493
+ d: "M176 168C189.3 168 200 157.3 200 144C200 130.7 189.3 120 176 120C162.7 120 152 130.7 152 144C152 157.3 162.7 168 176 168zM256 144C256 176.8 236.3 205 208 217.3L208 288L384 288C410.5 288 432 266.5 432 240L432 217.3C403.7 205 384 176.8 384 144C384 99.8 419.8 64 464 64C508.2 64 544 99.8 544 144C544 176.8 524.3 205 496 217.3L496 240C496 301.9 445.9 352 384 352L208 352L208 422.7C236.3 435 256 463.2 256 496C256 540.2 220.2 576 176 576C131.8 576 96 540.2 96 496C96 463.2 115.7 435 144 422.7L144 217.4C115.7 205 96 176.8 96 144C96 99.8 131.8 64 176 64C220.2 64 256 99.8 256 144zM488 144C488 130.7 477.3 120 464 120C450.7 120 440 130.7 440 144C440 157.3 450.7 168 464 168C477.3 168 488 157.3 488 144zM176 520C189.3 520 200 509.3 200 496C200 482.7 189.3 472 176 472C162.7 472 152 482.7 152 496C152 509.3 162.7 520 176 520z"
51494
+ })
51495
+ })
51496
+ ]
51497
+ })
51498
+ });
51499
+ };
51500
+
51246
51501
  // src/components/homepage/TrustedByBanner.tsx
51247
- import { jsx as jsx129, jsxs as jsxs51, Fragment as Fragment20 } from "react/jsx-runtime";
51502
+ import { jsx as jsx130, jsxs as jsxs53, Fragment as Fragment20 } from "react/jsx-runtime";
51248
51503
  var TrustedByBanner = () => {
51249
51504
  const logos = [
51250
51505
  {
51251
51506
  id: "logo1",
51252
51507
  url: "https://www.github.com/",
51253
- light: /* @__PURE__ */ jsx129("svg", {
51508
+ light: /* @__PURE__ */ jsx130("svg", {
51254
51509
  height: "50",
51255
51510
  viewBox: "0 0 64 62",
51256
51511
  fill: "none",
51257
51512
  xmlns: "http://www.w3.org/2000/svg",
51258
- children: /* @__PURE__ */ jsx129("path", {
51513
+ children: /* @__PURE__ */ jsx130("path", {
51259
51514
  d: "M21.3033 49.7496C21.3033 50.0051 21.0079 50.2095 20.6355 50.2095C20.2118 50.2478 19.9164 50.0434 19.9164 49.7496C19.9164 49.4941 20.2118 49.2896 20.5842 49.2896C20.9694 49.2513 21.3033 49.4557 21.3033 49.7496ZM17.3097 49.1747C17.2198 49.4302 17.4766 49.724 17.8619 49.8007C18.1957 49.9284 18.581 49.8007 18.658 49.5452C18.7351 49.2896 18.4911 48.9958 18.1059 48.8808C17.772 48.7914 17.3996 48.9191 17.3097 49.1747ZM22.9854 48.9575C22.6131 49.0469 22.3562 49.2896 22.3948 49.5835C22.4333 49.839 22.7671 50.0051 23.1524 49.9157C23.5248 49.8262 23.7816 49.5835 23.7431 49.328C23.7045 49.0852 23.3578 48.9191 22.9854 48.9575ZM31.4348 0C13.6243 0 0 13.4531 0 31.1733C0 45.3419 8.96304 57.4663 21.7655 61.7334C23.4092 62.0273 23.987 61.018 23.987 60.1875C23.987 59.3954 23.9485 55.0261 23.9485 52.3431C23.9485 52.3431 14.9598 54.2595 13.0722 48.5359C13.0722 48.5359 11.6083 44.8181 9.50236 43.8599C9.50236 43.8599 6.56177 41.854 9.70782 41.8924C9.70782 41.8924 12.9052 42.1479 14.6645 45.1886C17.4766 50.1201 22.1893 48.702 24.0256 47.8587C24.3209 45.8146 25.1556 44.3965 26.0801 43.5532C18.902 42.7611 11.6597 41.7263 11.6597 29.4358C11.6597 25.9224 12.6356 24.1593 14.6901 21.9108C14.3563 21.0803 13.2648 17.6564 15.024 13.2359C17.7078 12.4055 23.8843 16.6854 23.8843 16.6854C26.4525 15.9699 29.2133 15.5994 31.9485 15.5994C34.6836 15.5994 37.4444 15.9699 40.0126 16.6854C40.0126 16.6854 46.1892 12.3927 48.873 13.2359C50.6322 17.6691 49.5407 21.0803 49.2068 21.9108C51.2614 24.1721 52.5198 25.9352 52.5198 29.4358C52.5198 41.7646 44.9564 42.7484 37.7783 43.5532C38.9597 44.5625 39.9613 46.4789 39.9613 49.4813C39.9613 53.7868 39.9228 59.1144 39.9228 60.162C39.9228 60.9924 40.5134 62.0017 42.1443 61.7079C54.9853 57.4663 63.6915 45.3419 63.6915 31.1733C63.6915 13.4531 49.2453 0 31.4348 0ZM12.4815 44.0643C12.3145 44.192 12.3531 44.4859 12.5714 44.7286C12.7768 44.933 13.0722 45.0225 13.2391 44.8564C13.406 44.7286 13.3675 44.4348 13.1492 44.192C12.9438 43.9876 12.6484 43.8982 12.4815 44.0643ZM11.0946 43.0294C11.0048 43.1955 11.1332 43.3999 11.39 43.5277C11.5954 43.6554 11.8523 43.6171 11.9422 43.4383C12.032 43.2722 11.9036 43.0678 11.6468 42.94C11.39 42.8633 11.1845 42.9017 11.0946 43.0294ZM15.2551 47.5777C15.0497 47.7438 15.1267 48.127 15.4221 48.3698C15.7174 48.6636 16.0898 48.702 16.2567 48.4975C16.4237 48.3314 16.3466 47.9482 16.0898 47.7054C15.8073 47.4116 15.4221 47.3732 15.2551 47.5777ZM13.7913 45.6996C13.5858 45.8274 13.5858 46.1595 13.7913 46.4534C13.9967 46.7472 14.3434 46.875 14.5104 46.7472C14.7158 46.5811 14.7158 46.249 14.5104 45.9551C14.3306 45.6613 13.9967 45.5335 13.7913 45.6996Z",
51260
51515
  fill: "var(--text-color)"
51261
51516
  })
@@ -51264,57 +51519,57 @@ var TrustedByBanner = () => {
51264
51519
  {
51265
51520
  id: "logo2",
51266
51521
  url: "https://www.musixmatch.com/",
51267
- light: /* @__PURE__ */ jsxs51("svg", {
51522
+ light: /* @__PURE__ */ jsxs53("svg", {
51268
51523
  height: "40",
51269
51524
  viewBox: "0 0 229 48",
51270
51525
  fill: "none",
51271
51526
  xmlns: "http://www.w3.org/2000/svg",
51272
51527
  children: [
51273
- /* @__PURE__ */ jsx129("path", {
51528
+ /* @__PURE__ */ jsx130("path", {
51274
51529
  d: "M6.51644 0.088258C4.05524 0.528184 1.89128 2.12143 0.856857 4.24972C-0.058664 6.12832 0.000785433 4.71342 0.000785433 23.7491C0.000785433 38.5758 0.0245652 40.9181 0.179134 41.5245C0.892527 44.3543 2.99704 46.4826 5.82683 47.2435C6.77802 47.4932 8.49017 47.5289 9.48892 47.303C11.0465 46.9582 11.855 46.4113 18.9889 40.9538C22.7224 38.1002 25.8137 35.7579 25.8613 35.7579C25.897 35.7579 29.0002 38.1002 32.7336 40.9538C36.5622 43.8906 39.9033 46.3518 40.367 46.6015C40.8307 46.8393 41.5441 47.1246 41.9721 47.2435C43.0065 47.517 44.8613 47.517 45.8958 47.2435C48.4996 46.5302 50.5328 44.5921 51.4364 41.9407C51.6505 41.3105 51.6623 40.5733 51.6623 23.7491V6.21155L51.377 5.34359C50.6398 3.08451 48.7255 1.19402 46.3595 0.385505C45.4796 0.088258 45.1943 0.0406985 43.9339 0.0406985C42.6855 0.0406985 42.3882 0.088258 41.5559 0.373615C41.0328 0.551964 40.3432 0.861101 40.0103 1.06323C39.6892 1.26536 36.3957 3.70278 32.7099 6.48502C29.0121 9.26725 25.9326 11.5382 25.8613 11.5382C25.79 11.5382 22.7105 9.26725 19.0127 6.48502C15.3269 3.70278 12.0334 1.26536 11.7123 1.06323C10.3569 0.230937 8.06213 -0.197099 6.51644 0.088258ZM8.82308 4.63019C9.13222 4.72531 11.5459 6.46124 15.6835 9.57639C19.1911 12.2159 22.0684 14.4037 22.0803 14.4512C22.1279 14.582 14.1141 20.7172 13.912 20.7053C13.8168 20.7053 11.6291 19.0764 9.06088 17.0908L4.38815 13.4882L4.42382 10.2066L4.45949 6.92494L4.78052 6.33045C5.06588 5.7954 5.39879 5.40304 5.96951 4.975C6.57589 4.5113 7.91945 4.35673 8.82308 4.63019ZM45.0872 4.67775C45.8125 4.91555 46.5497 5.5695 46.9421 6.31856L47.2631 6.92494L47.2988 10.2066L47.3344 13.4882L42.6617 17.0908C40.0935 19.0764 37.9057 20.7053 37.7987 20.7053C37.5966 20.7172 29.5947 14.582 29.6423 14.4512C29.7017 14.2491 42.519 4.71342 42.8519 4.6183C43.4345 4.43996 44.4927 4.47563 45.0872 4.67775ZM30.0346 20.5032C32.2818 22.251 34.0891 23.7135 34.0415 23.7491C33.8632 23.9156 26.0991 29.8843 25.9683 29.9675C25.8375 30.0389 17.7167 23.868 17.6929 23.6778C17.6929 23.5827 25.6948 17.3405 25.8375 17.3405C25.897 17.3286 27.7875 18.7554 30.0346 20.5032ZM7.37252 21.4425C9.72671 23.2616 10.2142 23.6897 10.0834 23.8086C9.80994 24.082 4.51894 28.1484 4.45949 28.1484C4.42382 28.1484 4.40004 26.139 4.40004 23.6897C4.40004 21.2404 4.42382 19.231 4.4476 19.231C4.48327 19.231 5.80305 20.2297 7.37252 21.4425ZM47.3225 23.6897C47.3225 26.139 47.2988 28.1484 47.2631 28.1484C47.2274 28.1484 45.9195 27.1496 44.3501 25.9369C42.2456 24.308 41.5203 23.6778 41.6154 23.5827C41.8651 23.333 47.1442 19.2548 47.2393 19.2429C47.2869 19.231 47.3225 21.2404 47.3225 23.6897ZM20.3682 31.4776C21.3312 32.2147 22.116 32.8568 22.116 32.8925C22.1041 33.047 9.59592 42.4995 9.07277 42.7373C7.51519 43.4745 5.58903 42.7492 4.79241 41.1321L4.45949 40.4544L4.42382 37.1847L4.38815 33.9031L9.156 30.2053L13.9357 26.5076L16.2662 28.3148C17.5621 29.3017 19.3932 30.7285 20.3682 31.4776ZM42.6617 30.3005L47.3344 33.915L47.2988 37.2442L47.2631 40.5733L46.9421 41.1678C46.5378 41.9288 46.1217 42.3211 45.3013 42.7016C44.4452 43.1059 43.4583 43.1178 42.6498 42.7373C42.0197 42.4519 29.5947 33.0232 29.6423 32.8687C29.7017 32.6665 37.7631 26.5195 37.8701 26.6027C37.9414 26.6503 40.0935 28.303 42.6617 30.3005Z",
51275
51530
  fill: "var(--text-color)"
51276
51531
  }),
51277
- /* @__PURE__ */ jsx129("path", {
51532
+ /* @__PURE__ */ jsx130("path", {
51278
51533
  d: "M120.255 8.16145C119.673 8.43492 118.983 9.20776 118.805 9.82604C118.484 10.8842 118.709 11.7998 119.47 12.5607C120.374 13.4643 121.563 13.6546 122.681 13.0958C124.785 12.0494 124.678 9.00564 122.502 8.09011C121.955 7.86421 120.838 7.89988 120.255 8.16145Z",
51279
51534
  fill: "var(--text-color)"
51280
51535
  }),
51281
- /* @__PURE__ */ jsx129("path", {
51536
+ /* @__PURE__ */ jsx130("path", {
51282
51537
  d: "M214.613 19.7065V31.4775H216.801H219.001L219.036 26.8048C219.084 21.6446 219.084 21.6327 219.88 20.7885C220.427 20.2178 221.081 19.9443 221.926 19.9443C222.817 19.9443 223.507 20.2535 223.947 20.8123C224.565 21.6327 224.601 21.9656 224.601 26.9237V31.4775H226.8H229V26.0914C229 21.6446 228.964 20.5864 228.822 20.0038C228.382 18.2916 227.478 17.1145 226.087 16.4249C223.935 15.3667 221.414 15.6759 219.809 17.1978C219.452 17.5307 219.131 17.8042 219.096 17.8042C219.048 17.8042 219.013 15.5807 219.013 12.8699V7.93555H216.813H214.613V19.7065Z",
51283
51538
  fill: "var(--text-color)"
51284
51539
  }),
51285
- /* @__PURE__ */ jsx129("path", {
51540
+ /* @__PURE__ */ jsx130("path", {
51286
51541
  d: "M188.574 13.6427V16.0207H187.088H185.602V17.9825V19.9443H187.076H188.563L188.598 23.8323C188.646 27.4587 188.67 27.7917 188.907 28.5051C189.383 29.9437 190.477 30.9781 191.963 31.43C192.819 31.6915 194.757 31.7629 195.827 31.5726L196.719 31.4181L196.755 29.6108L196.79 27.8154L195.482 27.7679C194.032 27.7322 193.723 27.6014 193.271 26.8286C193.045 26.4481 193.033 26.2103 193.033 23.2141V20.0038L194.971 19.9681L196.897 19.9443V17.9825V16.0207H194.935H192.974V13.6427V11.2647H190.774H188.574V13.6427Z",
51287
51542
  fill: "var(--text-color)"
51288
51543
  }),
51289
- /* @__PURE__ */ jsx129("path", {
51544
+ /* @__PURE__ */ jsx130("path", {
51290
51545
  d: "M109.768 15.8423C106.82 16.3774 104.763 18.6959 105.048 21.1809C105.321 23.654 106.736 24.8192 110.196 25.4137C110.957 25.5445 111.813 25.7466 112.087 25.8417C113.775 26.46 113.145 28.3862 111.266 28.3862C110.089 28.3862 109.233 27.8511 108.829 26.8999C108.71 26.6027 108.532 26.3649 108.437 26.3649C108.341 26.3649 107.485 26.5789 106.534 26.8286C104.81 27.2804 104.81 27.2923 104.822 27.6252C104.87 28.6834 106.273 30.3837 107.652 31.0614C109.804 32.1196 112.8 32.0839 114.869 30.9901C115.796 30.4907 116.783 29.4206 117.104 28.5764C117.616 27.1972 117.544 25.6039 116.902 24.4268C116.141 23.0238 114.477 22.1797 111.778 21.8467C110.47 21.6803 109.673 21.4187 109.447 21.0977C108.936 20.3605 109.554 19.3261 110.612 19.1715C111.742 19.0051 112.574 19.3974 113.074 20.3367C113.24 20.6459 113.43 20.8955 113.49 20.8955C113.561 20.8955 114.417 20.6815 115.392 20.4318C117.425 19.9206 117.342 20.0157 116.759 18.8029C116.046 17.3167 114.405 16.1753 112.515 15.8423C111.385 15.6402 110.898 15.6402 109.768 15.8423Z",
51291
51546
  fill: "var(--text-color)"
51292
51547
  }),
51293
- /* @__PURE__ */ jsx129("path", {
51548
+ /* @__PURE__ */ jsx130("path", {
51294
51549
  d: "M70.1511 15.9493C69.4496 16.1515 68.9146 16.4249 68.1655 16.9838L67.5353 17.4593V16.7341V16.0207H65.3357H63.1361V23.7491V31.4775H65.3952H67.6424L67.678 26.6265C67.7137 21.9299 67.7256 21.7754 67.9753 21.3117C68.4865 20.3605 69.2237 19.9443 70.3889 19.9443C71.5541 19.9443 72.2675 20.3961 72.7312 21.4306C72.9215 21.8586 72.9452 22.3937 72.9809 26.6859L73.0166 31.4775H75.2043H77.3921L77.4277 26.6265C77.4634 21.9299 77.4753 21.7754 77.725 21.3117C78.2362 20.3486 78.9734 19.9443 80.1624 19.9443C81.0304 19.9443 81.7557 20.2297 82.1361 20.7172C82.7068 21.4425 82.7544 21.9181 82.7544 26.8642V31.4775H85.0254H87.2963L87.2488 26.0914C87.2012 20.9431 87.1893 20.6815 86.9396 19.9324C86.4284 18.3749 85.4058 17.2216 83.8602 16.4487C82.9565 15.9969 81.9102 15.7829 80.5548 15.7829C78.7832 15.7829 77.5942 16.1515 76.5003 17.0432L76.0009 17.4356L75.561 17.0194C74.6574 16.1634 73.4684 15.7829 71.8276 15.7948C71.1974 15.7948 70.4484 15.8661 70.1511 15.9493Z",
51295
51550
  fill: "var(--text-color)"
51296
51551
  }),
51297
- /* @__PURE__ */ jsx129("path", {
51552
+ /* @__PURE__ */ jsx130("path", {
51298
51553
  d: "M149.064 15.9018C148.434 16.0682 147.459 16.5676 146.877 17.0551L146.365 17.4593V16.746V16.0207H144.166H141.966V23.7491V31.4775H144.154H146.353L146.401 26.8048C146.425 23.7253 146.484 22.0013 146.579 21.7278C146.781 21.1333 147.4 20.4199 147.959 20.1702C148.624 19.873 149.801 19.873 150.384 20.1702C150.943 20.4556 151.169 20.7053 151.466 21.3711C151.704 21.8824 151.716 22.1321 151.716 26.6859V31.4775H153.975H156.234V26.8286C156.234 21.7873 156.258 21.5614 156.864 20.8242C157.363 20.2178 158.017 19.9443 158.98 19.9443C160.134 19.9443 160.704 20.2654 161.168 21.1928L161.525 21.9062L161.561 26.6859L161.596 31.4775H163.796H165.984V26.1509C165.984 20.3961 165.96 20.194 165.318 18.9218C164.628 17.5664 162.833 16.2704 161.133 15.9137C160.324 15.7472 158.445 15.7472 157.637 15.9137C156.793 16.092 155.913 16.52 155.306 17.0432L154.807 17.4712L154.201 16.9243C153.321 16.1277 152.536 15.878 150.883 15.8304C150.134 15.8067 149.314 15.8423 149.064 15.9018Z",
51299
51554
  fill: "var(--text-color)"
51300
51555
  }),
51301
- /* @__PURE__ */ jsx129("path", {
51556
+ /* @__PURE__ */ jsx130("path", {
51302
51557
  d: "M173.95 15.8661C171.203 16.2823 168.849 18.4224 167.934 21.3236C167.232 23.5351 167.541 26.2103 168.742 28.2435C169.23 29.0758 170.49 30.3718 171.239 30.8117C172.583 31.5964 174.211 31.9056 175.924 31.7153C177.267 31.5727 178.385 31.2278 179.074 30.7641L179.598 30.4193L179.633 30.9425L179.669 31.4775H181.869H184.056V23.8086V16.1396H181.857H179.657V16.6746V17.2216L179.122 16.853C177.957 16.0563 175.614 15.6045 173.95 15.8661ZM177.113 20.0038C178.04 20.2891 178.813 20.955 179.3 21.8943C179.693 22.6552 179.716 22.786 179.716 23.7967C179.705 24.6408 179.657 24.9975 179.455 25.4375C179.098 26.2222 178.313 27.0188 177.529 27.3993C176.97 27.6847 176.72 27.7322 175.912 27.7203C175.127 27.7203 174.842 27.6609 174.283 27.3993C173.486 27.0069 172.844 26.3292 172.428 25.4256C171.976 24.4625 171.976 23.0238 172.428 22.0607C173.248 20.2891 175.21 19.4331 177.113 20.0038Z",
51303
51558
  fill: "var(--text-color)"
51304
51559
  }),
51305
- /* @__PURE__ */ jsx129("path", {
51560
+ /* @__PURE__ */ jsx130("path", {
51306
51561
  d: "M203.615 15.9612C200.607 16.6152 198.181 18.9575 197.432 21.9062C197.004 23.5708 197.29 25.9725 198.11 27.649C198.669 28.7904 200.215 30.3123 201.416 30.9068C202.902 31.6202 203.615 31.7748 205.577 31.7629C207.099 31.7629 207.408 31.7272 208.217 31.4538C210.369 30.7404 211.831 29.5276 212.723 27.7441C213.02 27.1258 213.186 26.674 213.115 26.6146C212.996 26.4957 209.501 25.4137 209.251 25.4137C209.156 25.4137 209.013 25.5564 208.942 25.7347C208.656 26.3768 208.062 26.9475 207.301 27.328C206.635 27.6609 206.409 27.7084 205.577 27.7084C204.745 27.7084 204.531 27.6609 203.853 27.328C201.094 25.9606 201.118 21.5733 203.889 20.2178C204.471 19.9325 204.709 19.8849 205.577 19.8849C206.362 19.8849 206.718 19.9443 207.135 20.1465C207.8 20.4437 208.538 21.1571 208.823 21.7516L209.025 22.1915L209.596 22.0132C209.905 21.9181 210.809 21.6446 211.617 21.4068L213.079 20.9669L212.996 20.6102C212.961 20.408 212.735 19.8849 212.509 19.445C211.665 17.8161 209.715 16.4368 207.634 15.9731C206.599 15.7472 204.614 15.7353 203.615 15.9612Z",
51307
51562
  fill: "var(--text-color)"
51308
51563
  }),
51309
- /* @__PURE__ */ jsx129("path", {
51564
+ /* @__PURE__ */ jsx130("path", {
51310
51565
  d: "M119.256 23.7491V31.4775H121.456H123.656V23.7491V16.0207H121.456H119.256V23.7491Z",
51311
51566
  fill: "var(--text-color)"
51312
51567
  }),
51313
- /* @__PURE__ */ jsx129("path", {
51568
+ /* @__PURE__ */ jsx130("path", {
51314
51569
  d: "M125.082 16.0801C125.082 16.1158 126.283 17.8517 127.746 19.9443L130.409 23.7491L127.686 27.5539C126.188 29.6584 124.964 31.3943 124.964 31.4181C124.964 31.4537 126.057 31.4775 127.401 31.4775H129.838L131.277 29.2779C132.074 28.0651 132.763 27.0783 132.811 27.0783C132.858 27.0783 133.548 28.0651 134.333 29.2779L135.771 31.4775H138.28H140.801L140.385 30.9068C138.661 28.5407 135.308 23.7372 135.308 23.6421C135.308 23.5826 136.473 21.9062 137.9 19.9206C139.326 17.9231 140.539 16.2347 140.587 16.1634C140.646 16.0563 140.087 16.0207 138.221 16.0207H135.771L134.333 18.2203C133.548 19.4212 132.858 20.3961 132.823 20.3724C132.787 20.3486 132.133 19.3498 131.384 18.1727L130.017 16.0207H127.556C126.188 16.0207 125.082 16.0445 125.082 16.0801Z",
51315
51570
  fill: "var(--text-color)"
51316
51571
  }),
51317
- /* @__PURE__ */ jsx129("path", {
51572
+ /* @__PURE__ */ jsx130("path", {
51318
51573
  d: "M88.9728 21.0382C89.0323 26.5076 89.0679 26.7929 89.8527 28.291C90.9228 30.3361 93.051 31.6083 95.7144 31.7986C98.5561 32.0007 101.41 30.5501 102.575 28.3267C103.336 26.8643 103.36 26.6978 103.407 21.1571L103.455 16.1396H101.196H98.9246V20.8123C98.9246 26.1033 98.9009 26.2698 98.0924 27.0069C97.0579 27.9343 95.2269 27.8987 94.2638 26.9356C93.491 26.1627 93.4553 25.8655 93.4553 20.6934V16.1396H91.1843H88.9134L88.9728 21.0382Z",
51319
51574
  fill: "var(--text-color)"
51320
51575
  })
@@ -51324,18 +51579,18 @@ var TrustedByBanner = () => {
51324
51579
  {
51325
51580
  id: "logo3",
51326
51581
  url: "https://www.wistia.com/",
51327
- light: /* @__PURE__ */ jsxs51("svg", {
51582
+ light: /* @__PURE__ */ jsxs53("svg", {
51328
51583
  height: "30",
51329
51584
  viewBox: "0 0 165 36",
51330
51585
  fill: "none",
51331
51586
  className: "-mt-2",
51332
51587
  xmlns: "http://www.w3.org/2000/svg",
51333
51588
  children: [
51334
- /* @__PURE__ */ jsx129("path", {
51589
+ /* @__PURE__ */ jsx130("path", {
51335
51590
  d: "M16.4128 26.0434H11.2775C9.66644 26.0434 8.15605 26.4461 7.04844 27.6544L0.302047 35.4078C5.23597 35.7098 10.3713 35.7098 13.9962 35.7098C32.4229 35.7098 35.343 24.6337 35.4437 19.0956C33.8326 21.1094 28.9994 26.0434 16.4128 26.0434ZM33.1278 8.22082C33.0271 9.12705 32.5236 13.0541 21.4474 13.0541C12.4858 13.0541 8.8609 13.054 -3.05176e-05 12.8527L6.64567 20.5053C7.95467 22.0157 9.76713 22.5191 11.781 22.6198C13.9962 22.6198 17.017 22.7205 17.4198 22.7205C29.8049 22.7205 35.0409 16.9811 35.0409 12.8527C35.1416 10.6374 34.4368 9.22774 33.1278 8.22082Z",
51336
51591
  fill: "var(--light-text-color)"
51337
51592
  }),
51338
- /* @__PURE__ */ jsx129("path", {
51593
+ /* @__PURE__ */ jsx130("path", {
51339
51594
  d: "M68.0509 9.70953H75.3052V27.0081C75.3052 28.9054 74.8588 30.5795 74.0776 31.9187C73.2963 33.258 72.2919 34.1508 70.9526 34.8204C69.6134 35.49 68.1625 35.7132 66.4885 35.7132C64.8144 35.7132 63.3636 35.3784 62.0243 34.8204C60.6851 34.1508 59.6807 33.258 58.8994 31.9187C58.7878 31.8071 58.7878 31.5839 58.6762 31.4723C58.5646 31.5839 58.5646 31.8071 58.453 31.9187C57.6718 33.258 56.6673 34.1508 55.3281 34.8204C53.9889 35.49 52.538 35.7132 50.8639 35.7132C49.1899 35.7132 47.739 35.3784 46.5114 34.8204C45.1722 34.1508 44.1677 33.258 43.3865 31.9187C42.6053 30.5795 42.2704 29.017 42.2704 27.0081L42.0472 9.70953H49.3015V25.6689C49.3015 26.7849 49.5247 27.5662 50.0827 28.0126C50.6407 28.459 51.3104 28.6822 52.0916 28.6822C52.8728 28.6822 53.654 28.459 54.2121 28.0126C54.7701 27.5662 55.1049 26.7849 55.1049 25.6689V9.70953H57.7834H59.6807H62.3592V25.6689C62.3592 26.7849 62.694 27.5662 63.252 28.0126C63.81 28.459 64.5912 28.6822 65.3725 28.6822C66.1537 28.6822 66.8233 28.459 67.3813 28.0126C67.8277 27.5662 68.0509 26.7849 68.0509 25.6689V9.70953ZM85.796 0.446408C85.2379 0.111596 84.5683 -7.62939e-06 83.7871 -7.62939e-06C83.0059 -7.62939e-06 82.3362 0.111596 81.7782 0.446408C81.2202 0.78122 80.6622 1.22764 80.3274 1.78565C79.9926 2.34367 79.7694 3.0133 79.7694 3.68292C79.7694 4.79896 80.1042 5.69179 80.8854 6.36141C81.6666 7.03104 82.6711 7.36585 83.7871 7.36585C84.5683 7.36585 85.2379 7.25425 85.796 6.91943C86.4656 6.58462 86.912 6.13821 87.2468 5.58019C87.5816 5.02217 87.8048 4.35254 87.8048 3.57132C87.8048 2.79009 87.5816 2.23207 87.2468 1.67405C86.912 1.22764 86.4656 0.78122 85.796 0.446408ZM80.1042 35.1552H87.3584V10.0443H80.1042V35.1552ZM104.211 23.4368C103.876 22.8788 103.318 22.3208 102.871 21.7628C102.425 21.3163 101.867 20.8699 101.309 20.3119C100.862 19.8655 100.528 19.5307 100.193 19.1959C99.9697 18.8611 99.8581 18.5262 99.8581 18.0798C99.8581 17.4102 100.193 16.9638 100.974 16.629C101.755 16.2942 102.648 16.1826 103.764 16.1826H104.88L104.211 9.48632C103.541 9.37472 102.871 9.37472 102.202 9.37472C100.416 9.37472 98.742 9.59793 97.068 10.0443C95.5055 10.4908 94.1663 11.272 93.1618 12.388C92.1574 13.5041 91.5994 14.9549 91.5994 16.8522C91.5994 18.1914 91.8226 19.3075 92.3806 20.3119C92.9386 21.3163 93.6082 22.2092 94.3895 23.102C94.8359 23.5484 95.2823 23.9948 95.7287 24.4412C96.1751 24.8877 96.6215 25.3341 96.8448 25.6689C97.068 26.0037 97.1796 26.3385 97.1796 26.7849C97.1796 27.4546 96.8447 28.0126 96.0635 28.3474C95.2823 28.6822 94.2779 28.9054 92.827 28.9054C92.269 28.9054 91.8226 28.9054 91.5994 28.7938L92.4922 35.49C93.1618 35.7132 93.7198 35.7132 94.5011 35.7132C96.6215 35.7132 98.4072 35.3784 100.081 34.8204C101.755 34.2624 103.095 33.3696 104.099 32.1419C105.103 30.9143 105.55 29.4634 105.55 27.5662C105.55 26.7849 105.438 26.0037 105.215 25.2225C104.88 24.5529 104.657 23.9948 104.211 23.4368ZM117.491 28.0126C116.933 27.4546 116.71 26.6733 116.71 25.6689V16.4058H121.956V10.0443H116.71V3.68292L109.456 5.8034V28.0126C109.456 30.5795 110.014 32.5883 111.018 33.816C112.134 35.0436 113.697 35.7132 115.817 35.7132C116.933 35.7132 117.938 35.6016 118.942 35.49C119.947 35.3784 120.728 35.1552 121.509 34.8204L122.848 28.5706C122.067 28.7938 121.063 28.9054 119.947 28.9054C118.719 28.7938 117.938 28.5706 117.491 28.0126ZM126.531 35.1552H133.786V10.0443H126.531V35.1552ZM132.223 0.446408C131.665 0.111596 130.996 -7.62939e-06 130.214 -7.62939e-06C129.433 -7.62939e-06 128.763 0.111596 128.205 0.446408C127.647 0.78122 127.089 1.22764 126.755 1.78565C126.42 2.34367 126.197 3.0133 126.197 3.68292C126.197 4.79896 126.531 5.69179 127.313 6.36141C128.094 7.03104 129.098 7.36585 130.214 7.36585C130.996 7.36585 131.665 7.25425 132.223 6.91943C132.893 6.58462 133.339 6.13821 133.674 5.58019C134.009 5.02217 134.232 4.35254 134.232 3.57132C134.232 2.79009 134.009 2.23207 133.674 1.67405C133.339 1.22764 132.893 0.78122 132.223 0.446408ZM164.477 10.0443V35.1552H157.222V31.0259C156.441 32.2535 155.548 33.258 154.432 34.0392C152.87 35.1552 150.973 35.7132 148.852 35.7132C146.732 35.7132 144.834 35.1552 143.272 34.0392C141.71 32.9231 140.482 31.3607 139.589 29.3518C138.696 27.3429 138.25 25.1109 138.25 22.544C138.25 19.9771 138.696 17.745 139.589 15.8477C140.482 13.8389 141.71 12.2764 143.272 11.1604C144.834 10.0443 146.732 9.48632 148.852 9.48632C150.973 9.48632 152.87 10.0443 154.432 11.1604C155.548 11.9416 156.441 12.946 157.222 14.1737V10.0443H164.477ZM156.664 25.6689C157.222 24.7761 157.446 23.66 157.446 22.544C157.446 21.4279 157.222 20.3119 156.664 19.4191C156.218 18.5262 155.548 17.745 154.656 17.2986C153.763 16.7406 152.87 16.5174 151.754 16.5174C150.749 16.5174 149.745 16.7406 148.852 17.2986C147.959 17.8566 147.29 18.5262 146.843 19.4191C146.285 20.3119 146.062 21.3163 146.062 22.544C146.062 23.66 146.285 24.7761 146.843 25.6689C147.401 26.5617 148.071 27.3429 148.852 27.7894C149.745 28.3474 150.638 28.5706 151.754 28.5706C152.758 28.5706 153.763 28.3474 154.656 27.7894C155.548 27.3429 156.218 26.5617 156.664 25.6689Z",
51340
51595
  fill: "var(--text-color)"
51341
51596
  })
@@ -51345,27 +51600,27 @@ var TrustedByBanner = () => {
51345
51600
  {
51346
51601
  id: "logo5",
51347
51602
  url: "https://www.soundcloud.com/",
51348
- light: /* @__PURE__ */ jsx129("svg", {
51603
+ light: /* @__PURE__ */ jsx130("svg", {
51349
51604
  height: "40",
51350
51605
  viewBox: "0 0 129 57",
51351
51606
  fill: "none",
51352
51607
  xmlns: "http://www.w3.org/2000/svg",
51353
- children: /* @__PURE__ */ jsx129("path", {
51608
+ children: /* @__PURE__ */ jsx130("path", {
51354
51609
  d: "M68.962 1.89524C67.7646 2.35781 67.4474 2.83682 67.4351 3.75787V54.1228C67.4597 55.093 68.2007 55.9034 69.1483 55.9976C69.1893 55.9996 112.847 56.0222 113.134 56.0222C121.898 56.0222 129 48.9199 129 40.1536C129 31.3872 121.898 24.287 113.134 24.287C111.027 24.286 108.941 24.7042 106.997 25.5171C105.734 11.2183 93.7445 -2.25304e-06 79.1141 -2.25304e-06C75.643 0.00545336 72.2022 0.649256 68.964 1.89936M62.4471 5.46073L61.7308 41.2056L62.4471 54.1781C62.4717 55.1257 63.2454 55.9055 64.1951 55.9055C64.6562 55.9018 65.0976 55.7172 65.4241 55.3915C65.7506 55.0657 65.9362 54.6249 65.941 54.1637V54.1761L66.7188 41.2036L65.941 5.45461C65.9165 4.49876 65.1427 3.7149 64.1951 3.7149C63.2474 3.7149 62.4553 4.50079 62.4471 5.46073ZM57.1398 8.42858L56.5259 41.1913C56.5259 41.2118 57.1398 54.3643 57.1398 54.3643C57.1643 55.2547 57.889 55.9875 58.7773 55.9875C59.2089 55.9827 59.6215 55.8099 59.9276 55.5056C60.2338 55.2014 60.4094 54.7897 60.4168 54.3582L61.1064 41.2036L60.4168 8.42645C60.3923 7.52996 59.6656 6.7993 58.7793 6.7993C58.3481 6.80456 57.9359 6.97771 57.6302 7.28189C57.3245 7.58607 57.1495 7.99738 57.142 8.42858M41.2713 11.863L40.4588 41.1933L41.2733 54.6611C41.2938 55.3816 41.8872 55.9506 42.579 55.9506C43.2708 55.9506 43.8625 55.3775 43.885 54.655V54.6488L44.7999 41.1913L43.885 11.861C43.8604 11.1303 43.2872 10.5613 42.579 10.5613C41.8708 10.5613 41.2898 11.1303 41.2693 11.861M46.5171 12.6122L45.7721 41.1953L46.5191 54.5301C46.5437 55.314 47.1577 55.9343 47.9375 55.9343C48.7174 55.9343 49.3294 55.312 49.3539 54.522V54.5301L50.1727 41.1933L49.3539 12.6101C49.3294 11.818 48.7112 11.1978 47.9375 11.1978C47.1639 11.1978 46.5356 11.82 46.5171 12.6101M36.0642 12.8148L35.1842 41.1892L36.0642 54.7388C36.0711 55.0527 36.1999 55.3516 36.4234 55.5721C36.647 55.7926 36.9477 55.9173 37.2617 55.9199C37.9064 55.9199 38.4324 55.402 38.459 54.7327L39.4496 41.1892L38.459 12.8127C38.4324 12.1475 37.9064 11.6257 37.2617 11.6257C36.9467 11.6283 36.6451 11.7538 36.4214 11.9756C36.1978 12.1974 36.0695 12.4978 36.0642 12.8127M51.808 13.6561L51.1244 41.1933L51.808 54.4461C51.8325 55.2915 52.4979 55.9567 53.3371 55.9567C54.1762 55.9567 54.8435 55.2915 54.8619 54.438V54.4483L55.6272 41.1953L54.8619 13.6539C54.8581 13.2511 54.6962 12.8658 54.4109 12.5813C54.1256 12.2968 53.7399 12.1359 53.3371 12.1332C52.5184 12.1332 51.8223 12.8026 51.808 13.6561ZM30.8982 14.9946C30.8982 14.9967 29.9566 41.1831 29.9566 41.1831L30.8982 54.8719C30.9066 55.1562 31.0241 55.4263 31.2266 55.6261C31.429 55.8258 31.7008 55.9398 31.9851 55.9444C32.5643 55.9444 33.041 55.4736 33.0697 54.8678L34.1341 41.1831L33.0697 14.9946C33.039 14.3908 32.5623 13.918 31.9851 13.918C31.7001 13.9227 31.4278 14.0372 31.2253 14.2378C31.0228 14.4385 30.9056 14.7097 30.8982 14.9946ZM25.7751 19.866L24.7659 41.1831L25.7751 54.9578C25.8017 55.4961 26.2296 55.9199 26.7515 55.9199C27.0066 55.9138 27.2498 55.8107 27.4316 55.6316C27.6133 55.4525 27.7198 55.2108 27.7296 54.9558V54.96L28.872 41.1851L27.7296 19.868C27.6969 19.3276 27.2673 18.9019 26.7515 18.9019C26.2357 18.9019 25.8017 19.3256 25.7751 19.866ZM15.6516 27.0563L14.5138 41.179L15.6516 54.8412C15.6844 55.2648 16.008 55.5821 16.4092 55.5821C16.8103 55.5821 17.1296 55.2648 17.1665 54.8412L18.4559 41.179L17.1665 27.0522C17.1296 26.6326 16.8062 26.3112 16.4092 26.3112C16.0121 26.3112 15.6823 26.6306 15.6516 27.0563ZM10.6514 27.4308C10.6514 27.4329 9.44385 41.177 9.44385 41.177L10.6514 54.4195C10.6882 54.788 10.9585 55.0337 11.2982 55.0337C11.638 55.0337 11.9042 54.7676 11.9431 54.3992L13.3103 41.1565L11.9451 27.4103C11.9042 27.0419 11.6319 26.7758 11.2982 26.7758C10.9646 26.7758 10.6841 27.0419 10.6514 27.4103M20.6929 28.0592L19.6205 41.1585L20.6929 54.9334C20.7256 55.4184 21.0942 55.7888 21.5588 55.7888C22.0235 55.7888 22.3898 55.4204 22.4246 54.9354L23.6423 41.1606L22.4246 28.0531C22.3877 27.5721 22.0194 27.2057 21.5588 27.2057C21.0983 27.2057 20.7236 27.57 20.6929 28.0592ZM5.69409 29.5738C5.69409 29.5758 4.4251 41.1585 4.4251 41.1585L5.69409 52.4894C5.73093 52.7924 5.9603 53.0094 6.23252 53.0094C6.50474 53.0094 6.72376 52.7965 6.7647 52.4916L8.20559 41.1585L6.7647 29.5738C6.71762 29.2668 6.49869 29.0539 6.22852 29.0539C5.95835 29.0539 5.72693 29.2729 5.69009 29.5738M0.941686 33.9948L0 41.1585L0.941686 48.1994C0.978528 48.4962 1.19125 48.705 1.45938 48.705C1.7275 48.705 1.93013 48.4962 1.97107 48.2015L3.08865 41.1565L1.97107 33.9928C1.93013 33.698 1.71727 33.4913 1.45938 33.4913C1.20148 33.4913 0.976481 33.7 0.941686 33.9948Z",
51355
51610
  fill: "var(--text-color)"
51356
51611
  })
51357
51612
  })
51358
51613
  }
51359
51614
  ];
51360
- return /* @__PURE__ */ jsxs51(Fragment20, {
51615
+ return /* @__PURE__ */ jsxs53(Fragment20, {
51361
51616
  children: [
51362
- /* @__PURE__ */ jsx129("h3", {
51617
+ /* @__PURE__ */ jsx130("h3", {
51363
51618
  className: "text-center mt-20 mb-10",
51364
51619
  children: "Trusted by"
51365
51620
  }),
51366
- /* @__PURE__ */ jsx129("div", {
51621
+ /* @__PURE__ */ jsx130("div", {
51367
51622
  className: "text-center flex flex-col lg:flex-row flex-nowrap justify-center items-center gap-10 mb-20",
51368
- children: logos.map((logo) => /* @__PURE__ */ jsx129("a", {
51623
+ children: logos.map((logo) => /* @__PURE__ */ jsx130("a", {
51369
51624
  href: logo.url,
51370
51625
  target: "_blank",
51371
51626
  className: "opacity-80 hover:opacity-100 transition-opacity",
@@ -51388,7 +51643,7 @@ import { forwardRef as forwardRef41, useEffect as useEffect65, useImperativeHand
51388
51643
  import Hls from "hls.js";
51389
51644
  import"plyr/dist/plyr.css";
51390
51645
  import { forwardRef as forwardRef40, useCallback as useCallback58, useEffect as useEffect63, useRef as useRef65, useState as useState61 } from "react";
51391
- import { jsx as jsx130 } from "react/jsx-runtime";
51646
+ import { jsx as jsx131 } from "react/jsx-runtime";
51392
51647
  var useCombinedRefs = function(...refs) {
51393
51648
  const targetRef = useRef65(null);
51394
51649
  useEffect63(() => {
@@ -51474,9 +51729,9 @@ var VideoPlayerWithControls = forwardRef40(({ playbackId, poster, currentTime, o
51474
51729
  video.currentTime = currentTime;
51475
51730
  }
51476
51731
  }, [currentTime]);
51477
- return /* @__PURE__ */ jsx130("div", {
51732
+ return /* @__PURE__ */ jsx131("div", {
51478
51733
  className: "video-container",
51479
- children: /* @__PURE__ */ jsx130("video", {
51734
+ children: /* @__PURE__ */ jsx131("video", {
51480
51735
  ref: metaRef,
51481
51736
  autoPlay,
51482
51737
  poster,
@@ -51487,7 +51742,7 @@ var VideoPlayerWithControls = forwardRef40(({ playbackId, poster, currentTime, o
51487
51742
  });
51488
51743
 
51489
51744
  // src/components/homepage/MuxVideo.tsx
51490
- import { jsx as jsx131 } from "react/jsx-runtime";
51745
+ import { jsx as jsx134 } from "react/jsx-runtime";
51491
51746
  var getVideoToPlayUrl = (muxId) => {
51492
51747
  return `https://stream.mux.com/${muxId}.m3u8`;
51493
51748
  };
@@ -51515,7 +51770,7 @@ var MuxVideoForward = ({ muxId, ...props }, ref) => {
51515
51770
  }
51516
51771
  };
51517
51772
  }, [vidUrl, videoRef]);
51518
- return /* @__PURE__ */ jsx131("video", {
51773
+ return /* @__PURE__ */ jsx134("video", {
51519
51774
  ref: videoRef,
51520
51775
  ...props
51521
51776
  });
@@ -51523,7 +51778,7 @@ var MuxVideoForward = ({ muxId, ...props }, ref) => {
51523
51778
  var MuxVideo = forwardRef41(MuxVideoForward);
51524
51779
 
51525
51780
  // src/components/homepage/VideoAppsShowcase.tsx
51526
- import { jsx as jsx134, jsxs as jsxs53 } from "react/jsx-runtime";
51781
+ import { jsx as jsx136, jsxs as jsxs55 } from "react/jsx-runtime";
51527
51782
  var tabs = [
51528
51783
  "Music visualization",
51529
51784
  "Captions",
@@ -51574,11 +51829,11 @@ var icon3 = {
51574
51829
  height: 16,
51575
51830
  marginLeft: 10
51576
51831
  };
51577
- var Arrow3 = () => /* @__PURE__ */ jsx134("svg", {
51832
+ var Arrow3 = () => /* @__PURE__ */ jsx136("svg", {
51578
51833
  style: icon3,
51579
51834
  xmlns: "http://www.w3.org/2000/svg",
51580
51835
  viewBox: "0 0 448 512",
51581
- children: /* @__PURE__ */ jsx134("path", {
51836
+ children: /* @__PURE__ */ jsx136("path", {
51582
51837
  fill: "currentColor",
51583
51838
  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"
51584
51839
  })
@@ -51630,15 +51885,15 @@ var BuiltWithRemotionShowcase = () => {
51630
51885
  setIsMuted(newMutedState);
51631
51886
  }
51632
51887
  };
51633
- return /* @__PURE__ */ jsxs53("div", {
51888
+ return /* @__PURE__ */ jsxs55("div", {
51634
51889
  ref: containerRef,
51635
51890
  children: [
51636
- /* @__PURE__ */ jsx134(SectionTitle, {
51891
+ /* @__PURE__ */ jsx136(SectionTitle, {
51637
51892
  children: "Built with Remotion"
51638
51893
  }),
51639
- /* @__PURE__ */ jsx134("div", {
51894
+ /* @__PURE__ */ jsx136("div", {
51640
51895
  className: "flex flex-wrap justify-center gap-x-8 gap-y-3 mb-6 mt-1",
51641
- children: tabs.map((tab, index2) => /* @__PURE__ */ jsx134("button", {
51896
+ children: tabs.map((tab, index2) => /* @__PURE__ */ jsx136("button", {
51642
51897
  type: "button",
51643
51898
  "data-active": index2 === activeTab,
51644
51899
  className: `bg-transparent border-none m-0 p-0 cursor-pointer text-sm fontbrand font-bold transition-colors text-muted data-[active=true]:text-brand`,
@@ -51646,17 +51901,17 @@ var BuiltWithRemotionShowcase = () => {
51646
51901
  children: tab
51647
51902
  }, tab))
51648
51903
  }),
51649
- /* @__PURE__ */ jsx134("div", {
51904
+ /* @__PURE__ */ jsx136("div", {
51650
51905
  className: "card flex p-0 overflow-hidden",
51651
51906
  "data-nosnippet": true,
51652
- children: /* @__PURE__ */ jsxs53("div", {
51907
+ children: /* @__PURE__ */ jsxs55("div", {
51653
51908
  className: "flex-1 grid grid-cols-1 lg:grid-cols-2",
51654
51909
  children: [
51655
- /* @__PURE__ */ jsxs53("div", {
51910
+ /* @__PURE__ */ jsxs55("div", {
51656
51911
  className: "w-full aspect-video lg:aspect-square relative overflow-hidden bg-[#eee] cursor-pointer",
51657
51912
  onClick: handlePlayPause,
51658
51913
  children: [
51659
- videoLoaded ? /* @__PURE__ */ jsx134(MuxVideo, {
51914
+ videoLoaded ? /* @__PURE__ */ jsx136(MuxVideo, {
51660
51915
  ref: videoRef,
51661
51916
  muxId: videoApps[activeTab].muxId,
51662
51917
  className: "absolute left-0 top-0 w-full h-full object-contain rounded-sm rounded-tr-none rounded-br-none",
@@ -51665,26 +51920,26 @@ var BuiltWithRemotionShowcase = () => {
51665
51920
  muted: isMuted,
51666
51921
  autoPlay: true,
51667
51922
  onPlay: () => setIsPlaying(true)
51668
- }) : /* @__PURE__ */ jsx134("img", {
51923
+ }) : /* @__PURE__ */ jsx136("img", {
51669
51924
  src: `https://image.mux.com/${videoApps[activeTab].muxId}/thumbnail.png?time=1`,
51670
51925
  className: "absolute left-0 top-0 w-full h-full object-contain rounded-sm rounded-tr-none rounded-br-none",
51671
51926
  alt: videoApps[activeTab].title
51672
51927
  }),
51673
- /* @__PURE__ */ jsx134("button", {
51928
+ /* @__PURE__ */ jsx136("button", {
51674
51929
  type: "button",
51675
51930
  className: "absolute bottom-2.5 left-2.5 bg-white text-black rounded-full w-8 h-8 flex justify-center items-center text-base cursor-pointer transition-colors border-2 border-black border-solid",
51676
51931
  onClick: (e) => {
51677
51932
  e.stopPropagation();
51678
51933
  handlePlayPause();
51679
51934
  },
51680
- children: isPlaying ? /* @__PURE__ */ jsx134(PlayingIcon, {
51935
+ children: isPlaying ? /* @__PURE__ */ jsx136(PlayingIcon, {
51681
51936
  style: {
51682
51937
  width: 12,
51683
51938
  height: 20,
51684
51939
  marginLeft: "2px",
51685
51940
  marginTop: "1px"
51686
51941
  }
51687
- }) : /* @__PURE__ */ jsx134(PausedIcon, {
51942
+ }) : /* @__PURE__ */ jsx136(PausedIcon, {
51688
51943
  style: {
51689
51944
  width: 14,
51690
51945
  height: 16,
@@ -51693,20 +51948,20 @@ var BuiltWithRemotionShowcase = () => {
51693
51948
  }
51694
51949
  })
51695
51950
  }),
51696
- /* @__PURE__ */ jsx134("button", {
51951
+ /* @__PURE__ */ jsx136("button", {
51697
51952
  type: "button",
51698
51953
  className: "absolute bottom-2.5 right-2.5 bg-white text-black rounded-full w-8 h-8 flex justify-center items-center text-base cursor-pointer transition-colors border-2 border-black border-solid",
51699
51954
  onClick: (e) => {
51700
51955
  e.stopPropagation();
51701
51956
  handleMuteToggle();
51702
51957
  },
51703
- children: isMuted ? /* @__PURE__ */ jsx134(IsMutedIcon, {
51958
+ children: isMuted ? /* @__PURE__ */ jsx136(IsMutedIcon, {
51704
51959
  style: {
51705
51960
  width: 16,
51706
51961
  height: 16,
51707
51962
  marginTop: "1px"
51708
51963
  }
51709
- }) : /* @__PURE__ */ jsx134(NotMutedIcon, {
51964
+ }) : /* @__PURE__ */ jsx136(NotMutedIcon, {
51710
51965
  style: {
51711
51966
  width: 16,
51712
51967
  height: 16,
@@ -51716,30 +51971,30 @@ var BuiltWithRemotionShowcase = () => {
51716
51971
  })
51717
51972
  ]
51718
51973
  }),
51719
- /* @__PURE__ */ jsxs53("div", {
51974
+ /* @__PURE__ */ jsxs55("div", {
51720
51975
  className: "p-6 lg:p-10 flex min-w-0 flex-col justify-center",
51721
51976
  children: [
51722
- /* @__PURE__ */ jsx134("div", {
51977
+ /* @__PURE__ */ jsx136("div", {
51723
51978
  className: "text-3xl font-bold fontbrand mt-0",
51724
51979
  children: videoApps[activeTab].title
51725
51980
  }),
51726
- /* @__PURE__ */ jsx134("div", {
51981
+ /* @__PURE__ */ jsx136("div", {
51727
51982
  className: "text-muted mt-3 text-base fontbrand leading-relaxed",
51728
51983
  children: videoApps[activeTab].description
51729
51984
  }),
51730
- videoApps[activeTab].additionalInfo ? /* @__PURE__ */ jsx134("div", {
51985
+ videoApps[activeTab].additionalInfo ? /* @__PURE__ */ jsx136("div", {
51731
51986
  className: "text-muted mt-4 text-base fontbrand",
51732
51987
  children: videoApps[activeTab].additionalInfo
51733
51988
  }) : null,
51734
- /* @__PURE__ */ jsx134("div", {
51989
+ /* @__PURE__ */ jsx136("div", {
51735
51990
  className: "h-5"
51736
51991
  }),
51737
- /* @__PURE__ */ jsxs53("a", {
51992
+ /* @__PURE__ */ jsxs55("a", {
51738
51993
  className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center",
51739
51994
  href: videoApps[activeTab].link,
51740
51995
  children: [
51741
51996
  videoApps[activeTab].buttonText,
51742
- /* @__PURE__ */ jsx134(Arrow3, {})
51997
+ /* @__PURE__ */ jsx136(Arrow3, {})
51743
51998
  ]
51744
51999
  })
51745
52000
  ]
@@ -51747,20 +52002,20 @@ var BuiltWithRemotionShowcase = () => {
51747
52002
  ]
51748
52003
  })
51749
52004
  }),
51750
- /* @__PURE__ */ jsx134("div", {
52005
+ /* @__PURE__ */ jsx136("div", {
51751
52006
  style: {
51752
52007
  marginTop: "1rem",
51753
52008
  justifyContent: "center",
51754
52009
  display: "flex"
51755
52010
  },
51756
- children: /* @__PURE__ */ jsxs53("div", {
52011
+ children: /* @__PURE__ */ jsxs55("div", {
51757
52012
  style: {
51758
52013
  fontFamily: "GTPlanar"
51759
52014
  },
51760
52015
  children: [
51761
52016
  "For more examples of products and workflows, see our",
51762
52017
  " ",
51763
- /* @__PURE__ */ jsx134("a", {
52018
+ /* @__PURE__ */ jsx136("a", {
51764
52019
  href: "/showcase",
51765
52020
  className: "bluelink",
51766
52021
  children: "Showcase page"
@@ -51777,28 +52032,28 @@ var BuiltWithRemotionShowcase = () => {
51777
52032
  import { useState as useState66 } from "react";
51778
52033
 
51779
52034
  // src/components/homepage/GitHubButton.tsx
51780
- import { jsx as jsx136, jsxs as jsxs55 } from "react/jsx-runtime";
52035
+ import { jsx as jsx137, jsxs as jsxs56 } from "react/jsx-runtime";
51781
52036
  var GithubIcon = () => {
51782
- return /* @__PURE__ */ jsx136("svg", {
52037
+ return /* @__PURE__ */ jsx137("svg", {
51783
52038
  viewBox: "0 0 496 512",
51784
52039
  style: { height: 24, marginRight: 8 },
51785
- children: /* @__PURE__ */ jsx136("path", {
52040
+ children: /* @__PURE__ */ jsx137("path", {
51786
52041
  fill: "currentColor",
51787
52042
  d: "M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"
51788
52043
  })
51789
52044
  });
51790
52045
  };
51791
52046
  var GithubButton = () => {
51792
- return /* @__PURE__ */ jsxs55("div", {
52047
+ return /* @__PURE__ */ jsxs56("div", {
51793
52048
  className: "flex flex-row items-center text-base",
51794
52049
  children: [
51795
- /* @__PURE__ */ jsx136(GithubIcon, {}),
52050
+ /* @__PURE__ */ jsx137(GithubIcon, {}),
51796
52051
  " ",
51797
- /* @__PURE__ */ jsx136("span", {
52052
+ /* @__PURE__ */ jsx137("span", {
51798
52053
  children: "GitHub"
51799
52054
  }),
51800
52055
  " ",
51801
- /* @__PURE__ */ jsx136("div", {
52056
+ /* @__PURE__ */ jsx137("div", {
51802
52057
  className: "text-xs inline-block ml-2 leading-none mt-[3px] self-center",
51803
52058
  children: "55k"
51804
52059
  })
@@ -51807,18 +52062,18 @@ var GithubButton = () => {
51807
52062
  };
51808
52063
 
51809
52064
  // src/components/homepage/GetStartedStrip.tsx
51810
- import { jsx as jsx137, jsxs as jsxs56 } from "react/jsx-runtime";
52065
+ import { jsx as jsx138, jsxs as jsxs57 } from "react/jsx-runtime";
51811
52066
  var GetStarted = () => {
51812
52067
  const [clicked, setClicked] = useState66(null);
51813
- return /* @__PURE__ */ jsxs56("div", {
52068
+ return /* @__PURE__ */ jsxs57("div", {
51814
52069
  className: "flex flex-col lg:flex-row items-center justify-center text-center w-full",
51815
52070
  children: [
51816
- /* @__PURE__ */ jsx137("div", {
52071
+ /* @__PURE__ */ jsx138("div", {
51817
52072
  className: "w-full lg:w-auto",
51818
- children: /* @__PURE__ */ jsxs56("div", {
52073
+ children: /* @__PURE__ */ jsxs57("div", {
51819
52074
  className: "flex flex-row w-full relative",
51820
52075
  children: [
51821
- clicked ? /* @__PURE__ */ jsx137("div", {
52076
+ clicked ? /* @__PURE__ */ jsx138("div", {
51822
52077
  style: {
51823
52078
  animation: "click 0.7s linear",
51824
52079
  animationFillMode: "forwards"
@@ -51826,7 +52081,7 @@ var GetStarted = () => {
51826
52081
  className: "absolute z-0 top-[-10px] font-mono text-sm text-center w-full",
51827
52082
  children: "Copied!"
51828
52083
  }, clicked) : null,
51829
- /* @__PURE__ */ jsx137(Button, {
52084
+ /* @__PURE__ */ jsx138(Button, {
51830
52085
  className: "bg-[#333] text-white rounded-lg px-4 font-mono hover:[#444] cursor-pointer w-full",
51831
52086
  onClick: () => {
51832
52087
  navigator.clipboard.writeText("npx create-video@latest");
@@ -51838,39 +52093,39 @@ var GetStarted = () => {
51838
52093
  ]
51839
52094
  })
51840
52095
  }),
51841
- /* @__PURE__ */ jsx137("div", {
52096
+ /* @__PURE__ */ jsx138("div", {
51842
52097
  style: { width: 10, height: 10 }
51843
52098
  }),
51844
- /* @__PURE__ */ jsx137("div", {
52099
+ /* @__PURE__ */ jsx138("div", {
51845
52100
  className: "w-full lg:w-auto",
51846
- children: /* @__PURE__ */ jsx137(Button, {
52101
+ children: /* @__PURE__ */ jsx138(Button, {
51847
52102
  href: "/docs",
51848
52103
  className: "w-full",
51849
52104
  children: "Docs"
51850
52105
  })
51851
52106
  }),
51852
- /* @__PURE__ */ jsx137("div", {
52107
+ /* @__PURE__ */ jsx138("div", {
51853
52108
  className: "w-2 h-2"
51854
52109
  }),
51855
- /* @__PURE__ */ jsx137("div", {
52110
+ /* @__PURE__ */ jsx138("div", {
51856
52111
  className: "w-full lg:w-auto",
51857
- children: /* @__PURE__ */ jsx137(Button, {
52112
+ children: /* @__PURE__ */ jsx138(Button, {
51858
52113
  href: "https://remotion.dev/discord",
51859
52114
  target: "_blank",
51860
52115
  className: "w-full",
51861
52116
  children: "Discord"
51862
52117
  })
51863
52118
  }),
51864
- /* @__PURE__ */ jsx137("div", {
52119
+ /* @__PURE__ */ jsx138("div", {
51865
52120
  className: "w-2 h-2"
51866
52121
  }),
51867
- /* @__PURE__ */ jsx137("div", {
52122
+ /* @__PURE__ */ jsx138("div", {
51868
52123
  className: "w-full lg:w-auto",
51869
- children: /* @__PURE__ */ jsx137(Button, {
52124
+ children: /* @__PURE__ */ jsx138(Button, {
51870
52125
  href: "https://github.com/remotion-dev/remotion",
51871
52126
  target: "_blank",
51872
52127
  className: "w-full",
51873
- children: /* @__PURE__ */ jsx137(GithubButton, {})
52128
+ children: /* @__PURE__ */ jsx138(GithubButton, {})
51874
52129
  })
51875
52130
  })
51876
52131
  ]
@@ -51878,72 +52133,72 @@ var GetStarted = () => {
51878
52133
  };
51879
52134
 
51880
52135
  // src/components/homepage/WriteInReact.tsx
51881
- import { jsx as jsx138, jsxs as jsxs57 } from "react/jsx-runtime";
52136
+ import { jsx as jsx139, jsxs as jsxs58 } from "react/jsx-runtime";
51882
52137
  var WriteInReact = () => {
51883
- return /* @__PURE__ */ jsxs57("div", {
52138
+ return /* @__PURE__ */ jsxs58("div", {
51884
52139
  children: [
51885
- /* @__PURE__ */ jsx138("h1", {
52140
+ /* @__PURE__ */ jsx139("h1", {
51886
52141
  className: "text-4xl sm:text-5xl lg:text-[5em] text-center fontbrand font-black leading-none text-balance",
51887
52142
  style: {
51888
52143
  textShadow: "0 5px 30px var(--background)"
51889
52144
  },
51890
52145
  children: "Make videos programmatically."
51891
52146
  }),
51892
- /* @__PURE__ */ jsxs57("p", {
52147
+ /* @__PURE__ */ jsxs58("p", {
51893
52148
  style: {
51894
52149
  textShadow: "0 5px 30px var(--background)"
51895
52150
  },
51896
52151
  className: "font-medium text-center text-lg",
51897
52152
  children: [
51898
52153
  "Create real MP4 videos with React. ",
51899
- /* @__PURE__ */ jsx138("br", {}),
52154
+ /* @__PURE__ */ jsx139("br", {}),
51900
52155
  "Use coding agents, build apps and render in bulk."
51901
52156
  ]
51902
52157
  }),
51903
- /* @__PURE__ */ jsx138("br", {}),
51904
- /* @__PURE__ */ jsx138("div", {
51905
- children: /* @__PURE__ */ jsx138(GetStarted, {})
52158
+ /* @__PURE__ */ jsx139("br", {}),
52159
+ /* @__PURE__ */ jsx139("div", {
52160
+ children: /* @__PURE__ */ jsx139(GetStarted, {})
51906
52161
  }),
51907
- /* @__PURE__ */ jsx138("br", {}),
51908
- /* @__PURE__ */ jsx138("br", {})
52162
+ /* @__PURE__ */ jsx139("br", {}),
52163
+ /* @__PURE__ */ jsx139("br", {})
51909
52164
  ]
51910
52165
  });
51911
52166
  };
51912
52167
 
51913
52168
  // src/components/Homepage.tsx
51914
- import { jsx as jsx139, jsxs as jsxs58 } from "react/jsx-runtime";
52169
+ import { jsx as jsx140, jsxs as jsxs59 } from "react/jsx-runtime";
51915
52170
  "use client";
51916
52171
  var makeVideosRowClassName = "mt-4 md:mt-6 flex flex-col lg:flex-row gap-10";
51917
52172
  var NewLanding = ({ colorMode, setColorMode }) => {
51918
- return /* @__PURE__ */ jsx139(ColorModeProvider, {
52173
+ return /* @__PURE__ */ jsx140(ColorModeProvider, {
51919
52174
  colorMode,
51920
52175
  setColorMode,
51921
- children: /* @__PURE__ */ jsx139("div", {
52176
+ children: /* @__PURE__ */ jsx140("div", {
51922
52177
  className: "w-full relative",
51923
- children: /* @__PURE__ */ jsxs58("div", {
52178
+ children: /* @__PURE__ */ jsxs59("div", {
51924
52179
  style: { overflow: "hidden" },
51925
52180
  children: [
51926
- /* @__PURE__ */ jsx139("div", {
51927
- children: /* @__PURE__ */ jsx139(BackgroundAnimation, {})
52181
+ /* @__PURE__ */ jsx140("div", {
52182
+ children: /* @__PURE__ */ jsx140(BackgroundAnimation, {})
51928
52183
  }),
51929
- /* @__PURE__ */ jsx139("br", {}),
51930
- /* @__PURE__ */ jsx139("br", {}),
51931
- /* @__PURE__ */ jsx139("br", {}),
51932
- /* @__PURE__ */ jsx139("br", {}),
51933
- /* @__PURE__ */ jsxs58("div", {
52184
+ /* @__PURE__ */ jsx140("br", {}),
52185
+ /* @__PURE__ */ jsx140("br", {}),
52186
+ /* @__PURE__ */ jsx140("br", {}),
52187
+ /* @__PURE__ */ jsx140("br", {}),
52188
+ /* @__PURE__ */ jsxs59("div", {
51934
52189
  className: "max-w-[500px] lg:max-w-[1000px] m-auto pl-5 pr-5 overflow-x-clip md:overflow-x-visible relative",
51935
52190
  children: [
51936
- /* @__PURE__ */ jsx139(WriteInReact, {}),
51937
- /* @__PURE__ */ jsx139("br", {}),
51938
- /* @__PURE__ */ jsxs58("div", {
52191
+ /* @__PURE__ */ jsx140(WriteInReact, {}),
52192
+ /* @__PURE__ */ jsx140("br", {}),
52193
+ /* @__PURE__ */ jsxs59("div", {
51939
52194
  className: makeVideosRowClassName,
51940
52195
  children: [
51941
- /* @__PURE__ */ jsx139(MakeVideosAgentically, {
52196
+ /* @__PURE__ */ jsx140(MakeVideosAgentically, {
51942
52197
  videoSrc: "/img/homepage-assets-master.webm",
51943
52198
  fallbackVideoSrc: "/img/homepage-assets-master.mp4"
51944
52199
  }),
51945
- /* @__PURE__ */ jsx139(MakeVideosInteractively, {}),
51946
- /* @__PURE__ */ jsx139(MakeVideosProgrammatically, {
52200
+ /* @__PURE__ */ jsx140(MakeVideosInteractively, {}),
52201
+ /* @__PURE__ */ jsx140(MakeVideosProgrammatically, {
51947
52202
  links: [
51948
52203
  { label: "API Docs", href: "/docs/api" },
51949
52204
  { label: "Resources", href: "/docs/resources" }
@@ -51951,12 +52206,11 @@ var NewLanding = ({ colorMode, setColorMode }) => {
51951
52206
  })
51952
52207
  ]
51953
52208
  }),
51954
- /* @__PURE__ */ jsx139("br", {}),
51955
- /* @__PURE__ */ jsx139("br", {}),
51956
- /* @__PURE__ */ jsxs58("div", {
52209
+ /* @__PURE__ */ jsx140(ReactSourceOfTruth, {}),
52210
+ /* @__PURE__ */ jsxs59("div", {
51957
52211
  className: makeVideosRowClassName,
51958
52212
  children: [
51959
- /* @__PURE__ */ jsx139(MakeVideosProgrammatically, {
52213
+ /* @__PURE__ */ jsx140(MakeVideosProgrammatically, {
51960
52214
  title: "Design systems",
51961
52215
  description: "Create a library of animated assets for your organization.",
51962
52216
  videoSrc: "/img/design-systems.webm",
@@ -51965,7 +52219,7 @@ var NewLanding = ({ colorMode, setColorMode }) => {
51965
52219
  { label: "Motion design systems", href: "/design-systems" }
51966
52220
  ]
51967
52221
  }),
51968
- /* @__PURE__ */ jsx139(MakeVideosAgentically, {
52222
+ /* @__PURE__ */ jsx140(MakeVideosAgentically, {
51969
52223
  title: "Batch rendering",
51970
52224
  description: "Render millions of videos on your own infrastructure.",
51971
52225
  links: [
@@ -51979,7 +52233,7 @@ var NewLanding = ({ colorMode, setColorMode }) => {
51979
52233
  }
51980
52234
  ]
51981
52235
  }),
51982
- /* @__PURE__ */ jsx139(MakeVideosInteractively, {
52236
+ /* @__PURE__ */ jsx140(MakeVideosInteractively, {
51983
52237
  title: "Applications",
51984
52238
  description: "Publish a simple tool or a complex video editor.",
51985
52239
  videoSrc: "/img/applications.webm",
@@ -51991,33 +52245,33 @@ var NewLanding = ({ colorMode, setColorMode }) => {
51991
52245
  })
51992
52246
  ]
51993
52247
  }),
51994
- /* @__PURE__ */ jsx139(Demo, {}),
51995
- /* @__PURE__ */ jsx139("br", {}),
51996
- /* @__PURE__ */ jsx139("br", {}),
51997
- /* @__PURE__ */ jsx139("br", {}),
51998
- /* @__PURE__ */ jsx139(BuiltWithRemotionShowcase, {}),
51999
- /* @__PURE__ */ jsx139("br", {}),
52000
- /* @__PURE__ */ jsx139("br", {}),
52001
- /* @__PURE__ */ jsx139("br", {}),
52002
- /* @__PURE__ */ jsx139(SectionTitle, {
52248
+ /* @__PURE__ */ jsx140(Demo, {}),
52249
+ /* @__PURE__ */ jsx140("br", {}),
52250
+ /* @__PURE__ */ jsx140("br", {}),
52251
+ /* @__PURE__ */ jsx140("br", {}),
52252
+ /* @__PURE__ */ jsx140(BuiltWithRemotionShowcase, {}),
52253
+ /* @__PURE__ */ jsx140("br", {}),
52254
+ /* @__PURE__ */ jsx140("br", {}),
52255
+ /* @__PURE__ */ jsx140("br", {}),
52256
+ /* @__PURE__ */ jsx140(SectionTitle, {
52003
52257
  children: "Pricing"
52004
52258
  }),
52005
- /* @__PURE__ */ jsx139(Pricing, {}),
52006
- /* @__PURE__ */ jsx139(TrustedByBanner_default, {}),
52007
- /* @__PURE__ */ jsx139("br", {}),
52008
- /* @__PURE__ */ jsx139(EvaluateRemotion_default, {}),
52009
- /* @__PURE__ */ jsx139("br", {}),
52010
- /* @__PURE__ */ jsx139("br", {}),
52011
- /* @__PURE__ */ jsx139("br", {}),
52012
- /* @__PURE__ */ jsx139(CommunityStats_default, {}),
52013
- /* @__PURE__ */ jsx139("br", {}),
52014
- /* @__PURE__ */ jsx139("br", {}),
52015
- /* @__PURE__ */ jsx139("br", {}),
52016
- /* @__PURE__ */ jsx139("br", {}),
52017
- /* @__PURE__ */ jsx139(NewsletterButton, {}),
52018
- /* @__PURE__ */ jsx139("br", {}),
52019
- /* @__PURE__ */ jsx139("br", {}),
52020
- /* @__PURE__ */ jsx139("br", {})
52259
+ /* @__PURE__ */ jsx140(Pricing, {}),
52260
+ /* @__PURE__ */ jsx140(TrustedByBanner_default, {}),
52261
+ /* @__PURE__ */ jsx140("br", {}),
52262
+ /* @__PURE__ */ jsx140(EvaluateRemotion_default, {}),
52263
+ /* @__PURE__ */ jsx140("br", {}),
52264
+ /* @__PURE__ */ jsx140("br", {}),
52265
+ /* @__PURE__ */ jsx140("br", {}),
52266
+ /* @__PURE__ */ jsx140(CommunityStats_default, {}),
52267
+ /* @__PURE__ */ jsx140("br", {}),
52268
+ /* @__PURE__ */ jsx140("br", {}),
52269
+ /* @__PURE__ */ jsx140("br", {}),
52270
+ /* @__PURE__ */ jsx140("br", {}),
52271
+ /* @__PURE__ */ jsx140(NewsletterButton, {}),
52272
+ /* @__PURE__ */ jsx140("br", {}),
52273
+ /* @__PURE__ */ jsx140("br", {}),
52274
+ /* @__PURE__ */ jsx140("br", {})
52021
52275
  ]
52022
52276
  })
52023
52277
  ]