@remotion/promo-pages 4.0.458 → 4.0.460

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
@@ -971,6 +971,7 @@ import { createContext as createContext14 } from "react";
971
971
  import React12, { useCallback as useCallback5, useMemo as useMemo14, useRef as useRef6, useState as useState4 } from "react";
972
972
  import { jsx as jsx11 } from "react/jsx-runtime";
973
973
  import React13, { forwardRef as forwardRef2, useState as useState5, useContext as useContext15, useMemo as useMemo15 } from "react";
974
+ import { createContext as createContext15 } from "react";
974
975
  import { jsx as jsx12 } from "react/jsx-runtime";
975
976
  import {
976
977
  forwardRef as forwardRef4,
@@ -984,7 +985,7 @@ import React15, { useCallback as useCallback6, useImperativeHandle, useRef as us
984
985
  import { jsx as jsx13 } from "react/jsx-runtime";
985
986
  import { jsx as jsx14 } from "react/jsx-runtime";
986
987
  import {
987
- createContext as createContext15,
988
+ createContext as createContext16,
988
989
  forwardRef as forwardRef5,
989
990
  useCallback as useCallback7,
990
991
  useContext as useContext17,
@@ -996,7 +997,7 @@ import {
996
997
  import { jsx as jsx15 } from "react/jsx-runtime";
997
998
  import { useContext as useContext18, useLayoutEffect as useLayoutEffect5, useState as useState10 } from "react";
998
999
  import {
999
- createContext as createContext16,
1000
+ createContext as createContext17,
1000
1001
  useCallback as useCallback8,
1001
1002
  useImperativeHandle as useImperativeHandle3,
1002
1003
  useLayoutEffect as useLayoutEffect4,
@@ -1006,17 +1007,17 @@ import {
1006
1007
  } from "react";
1007
1008
  import { jsx as jsx16 } from "react/jsx-runtime";
1008
1009
  import { forwardRef as forwardRef8, useCallback as useCallback13, useContext as useContext30 } from "react";
1009
- import React17, { createContext as createContext17, useMemo as useMemo19 } from "react";
1010
+ import React17, { createContext as createContext18, useMemo as useMemo19 } from "react";
1010
1011
  import { jsx as jsx17 } from "react/jsx-runtime";
1011
1012
  import { useContext as useContext19 } from "react";
1012
- import { createContext as createContext18, useEffect as useEffect7, useState as useState11 } from "react";
1013
+ import { createContext as createContext19, useEffect as useEffect7, useState as useState11 } from "react";
1013
1014
  import { jsx as jsx18 } from "react/jsx-runtime";
1014
- import { createContext as createContext19, useMemo as useMemo20, useReducer } from "react";
1015
+ import { createContext as createContext20, useMemo as useMemo20, useReducer } from "react";
1015
1016
  import { jsx as jsx19 } from "react/jsx-runtime";
1016
1017
  import React23, {
1017
1018
  forwardRef as forwardRef6,
1018
1019
  useContext as useContext28,
1019
- useEffect as useEffect15,
1020
+ useEffect as useEffect14,
1020
1021
  useImperativeHandle as useImperativeHandle4,
1021
1022
  useMemo as useMemo28,
1022
1023
  useRef as useRef18,
@@ -1024,7 +1025,7 @@ import React23, {
1024
1025
  } from "react";
1025
1026
  import { useContext as useContext21, useLayoutEffect as useLayoutEffect6, useRef as useRef13 } from "react";
1026
1027
  import React20, {
1027
- createContext as createContext20,
1028
+ createContext as createContext21,
1028
1029
  createRef as createRef2,
1029
1030
  useCallback as useCallback9,
1030
1031
  useContext as useContext20,
@@ -1032,15 +1033,15 @@ import React20, {
1032
1033
  useRef as useRef11,
1033
1034
  useState as useState12
1034
1035
  } from "react";
1035
- import { useEffect as useEffect8, useMemo as useMemo21 } from "react";
1036
+ import { useMemo as useMemo21 } from "react";
1036
1037
  import { jsx as jsx20, jsxs as jsxs22 } from "react/jsx-runtime";
1037
1038
  import { useRef as useRef12 } from "react";
1038
- import { useContext as useContext23, useEffect as useEffect9, useMemo as useMemo23, useState as useState13 } from "react";
1039
+ import { useContext as useContext23, useEffect as useEffect8, useMemo as useMemo23, useState as useState13 } from "react";
1039
1040
  import { useContext as useContext22 } from "react";
1040
1041
  import {
1041
1042
  useCallback as useCallback12,
1042
1043
  useContext as useContext26,
1043
- useEffect as useEffect13,
1044
+ useEffect as useEffect12,
1044
1045
  useLayoutEffect as useLayoutEffect8,
1045
1046
  useRef as useRef17
1046
1047
  } from "react";
@@ -1049,7 +1050,7 @@ import { useContext as useContext25, useMemo as useMemo25 } from "react";
1049
1050
  import React21, {
1050
1051
  useCallback as useCallback10,
1051
1052
  useContext as useContext24,
1052
- useEffect as useEffect10,
1053
+ useEffect as useEffect9,
1053
1054
  useLayoutEffect as useLayoutEffect7,
1054
1055
  useMemo as useMemo24,
1055
1056
  useRef as useRef14,
@@ -1057,15 +1058,15 @@ import React21, {
1057
1058
  } from "react";
1058
1059
  import { jsx as jsx21 } from "react/jsx-runtime";
1059
1060
  import React22 from "react";
1060
- import { useEffect as useEffect11, useState as useState15 } from "react";
1061
- import { useEffect as useEffect12, useRef as useRef16 } from "react";
1062
- import { useEffect as useEffect14 } from "react";
1063
- import { createContext as createContext21, useContext as useContext27, useMemo as useMemo27 } from "react";
1061
+ import { useEffect as useEffect10, useState as useState15 } from "react";
1062
+ import { useEffect as useEffect11, useRef as useRef16 } from "react";
1063
+ import { useEffect as useEffect13 } from "react";
1064
+ import { createContext as createContext22, useContext as useContext27, useMemo as useMemo27 } from "react";
1064
1065
  import { jsx as jsx222 } from "react/jsx-runtime";
1065
1066
  import {
1066
1067
  forwardRef as forwardRef7,
1067
1068
  useContext as useContext29,
1068
- useEffect as useEffect16,
1069
+ useEffect as useEffect15,
1069
1070
  useImperativeHandle as useImperativeHandle5,
1070
1071
  useLayoutEffect as useLayoutEffect9,
1071
1072
  useMemo as useMemo29,
@@ -1096,17 +1097,16 @@ import {
1096
1097
  import { jsx as jsx27 } from "react/jsx-runtime";
1097
1098
  import React29 from "react";
1098
1099
  import { useMemo as useMemo32 } from "react";
1099
- import { createContext as createContext22, useContext as useContext32, useMemo as useMemo31 } from "react";
1100
+ import { createContext as createContext23, useContext as useContext32, useMemo as useMemo31 } from "react";
1100
1101
  import { jsx as jsx28 } from "react/jsx-runtime";
1101
1102
  import { jsx as jsx29 } from "react/jsx-runtime";
1102
1103
  import React31 from "react";
1103
- import React32, { createContext as createContext23 } from "react";
1104
- import { useContext as useContext33 } from "react";
1104
+ import React32, { createContext as createContext24 } from "react";
1105
1105
  import { useCallback as useCallback18 } from "react";
1106
1106
  import {
1107
1107
  useCallback as useCallback17,
1108
- useContext as useContext34,
1109
- useEffect as useEffect17,
1108
+ useContext as useContext33,
1109
+ useEffect as useEffect16,
1110
1110
  useLayoutEffect as useLayoutEffect11,
1111
1111
  useMemo as useMemo33,
1112
1112
  useState as useState20
@@ -1114,29 +1114,29 @@ import {
1114
1114
  import { jsx as jsx30 } from "react/jsx-runtime";
1115
1115
  import React34, {
1116
1116
  forwardRef as forwardRef10,
1117
- useContext as useContext35,
1118
- useEffect as useEffect19,
1117
+ useContext as useContext34,
1118
+ useEffect as useEffect18,
1119
1119
  useImperativeHandle as useImperativeHandle8,
1120
1120
  useMemo as useMemo34,
1121
1121
  useRef as useRef22,
1122
1122
  useState as useState21
1123
1123
  } from "react";
1124
- import { useEffect as useEffect18 } from "react";
1124
+ import { useEffect as useEffect17 } from "react";
1125
1125
  import { jsx as jsx31 } from "react/jsx-runtime";
1126
1126
  import { jsx as jsx32 } from "react/jsx-runtime";
1127
1127
  import React36, { useMemo as useMemo35 } from "react";
1128
1128
  import { jsx as jsx33 } from "react/jsx-runtime";
1129
1129
  import { Children, forwardRef as forwardRef11, useMemo as useMemo36 } from "react";
1130
1130
  import React37 from "react";
1131
- import React38, { createContext as createContext24 } from "react";
1131
+ import React38, { createContext as createContext25 } from "react";
1132
1132
  import { jsx as jsx34 } from "react/jsx-runtime";
1133
1133
  import { jsx as jsx35 } from "react/jsx-runtime";
1134
1134
  import React40 from "react";
1135
- import { forwardRef as forwardRef13, useCallback as useCallback19, useContext as useContext37 } from "react";
1135
+ import { forwardRef as forwardRef13, useCallback as useCallback19, useContext as useContext36 } from "react";
1136
1136
  import {
1137
1137
  forwardRef as forwardRef12,
1138
- useContext as useContext36,
1139
- useEffect as useEffect20,
1138
+ useContext as useContext35,
1139
+ useEffect as useEffect19,
1140
1140
  useImperativeHandle as useImperativeHandle9,
1141
1141
  useLayoutEffect as useLayoutEffect12,
1142
1142
  useMemo as useMemo37,
@@ -2673,7 +2673,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2673
2673
  var addSequenceStackTraces = (component) => {
2674
2674
  componentsToAddStacksTo.push(component);
2675
2675
  };
2676
- var VERSION = "4.0.458";
2676
+ var VERSION = "4.0.460";
2677
2677
  var checkMultipleRemotionVersions = () => {
2678
2678
  if (typeof globalThis === "undefined") {
2679
2679
  return;
@@ -2892,6 +2892,9 @@ var sequenceSchemaDefaultLayoutNone = {
2892
2892
  default: "none"
2893
2893
  }
2894
2894
  };
2895
+ var nodePathToString = (nodePath) => {
2896
+ return nodePath.join(".");
2897
+ };
2895
2898
  var SequenceManager = React12.createContext({
2896
2899
  registerSequence: () => {
2897
2900
  throw new Error("SequenceManagerContext not initialized");
@@ -2907,19 +2910,48 @@ var SequenceVisibilityToggleContext = React12.createContext({
2907
2910
  throw new Error("SequenceVisibilityToggle not initialized");
2908
2911
  }
2909
2912
  });
2910
- var VisualModeOverridesContext = React12.createContext({
2911
- dragOverrides: {},
2913
+ var getCodeValues = (codeValues, nodePath) => {
2914
+ const status = codeValues[nodePathToString(nodePath)];
2915
+ if (!status) {
2916
+ return;
2917
+ }
2918
+ if (!status.canUpdate) {
2919
+ return;
2920
+ }
2921
+ return status.props;
2922
+ };
2923
+ var getIsJsxInMapCallback = (codeValues, nodePath) => {
2924
+ const status = codeValues[nodePathToString(nodePath)];
2925
+ if (!status) {
2926
+ return false;
2927
+ }
2928
+ if (!status.canUpdate) {
2929
+ return false;
2930
+ }
2931
+ return status.jsxInMapCallback;
2932
+ };
2933
+ var VisualModeGettersContext = React12.createContext({
2934
+ getDragOverrides: () => {
2935
+ throw new Error("VisualModeGettersContext not initialized");
2936
+ },
2937
+ getCodeValues: () => {
2938
+ throw new Error("VisualModeGettersContext not initialized");
2939
+ },
2940
+ getIsJsxInMapCallback: () => {
2941
+ throw new Error("VisualModeGettersContext not initialized");
2942
+ },
2943
+ visualModeEnabled: false
2944
+ });
2945
+ var VisualModeSettersContext = React12.createContext({
2912
2946
  setDragOverrides: () => {
2913
- throw new Error("VisualModeOverridesContext not initialized");
2947
+ throw new Error("VisualModeSettersContext not initialized");
2914
2948
  },
2915
2949
  clearDragOverrides: () => {
2916
- throw new Error("VisualModeOverridesContext not initialized");
2950
+ throw new Error("VisualModeSettersContext not initialized");
2917
2951
  },
2918
- codeValues: {},
2919
2952
  setCodeValues: () => {
2920
- throw new Error("VisualModeOverridesContext not initialized");
2921
- },
2922
- visualModeEnabled: false
2953
+ throw new Error("VisualModeSettersContext not initialized");
2954
+ }
2923
2955
  });
2924
2956
  var SequenceManagerProvider = ({ children, visualModeEnabled }) => {
2925
2957
  const [sequences, setSequences] = useState4([]);
@@ -2928,39 +2960,33 @@ var SequenceManagerProvider = ({ children, visualModeEnabled }) => {
2928
2960
  const controlOverridesRef = useRef6(dragOverrides);
2929
2961
  controlOverridesRef.current = dragOverrides;
2930
2962
  const [codeValues, setCodeValuesMapState] = useState4({});
2931
- const setDragOverrides = useCallback5((sequenceId, key, value) => {
2963
+ const setDragOverrides = useCallback5((nodePath, key, value) => {
2932
2964
  setControlOverrides((prev) => ({
2933
2965
  ...prev,
2934
- [sequenceId]: {
2935
- ...prev[sequenceId],
2966
+ [nodePathToString(nodePath)]: {
2967
+ ...prev[nodePathToString(nodePath)],
2936
2968
  [key]: value
2937
2969
  }
2938
2970
  }));
2939
2971
  }, []);
2940
- const clearDragOverrides = useCallback5((sequenceId) => {
2972
+ const clearDragOverrides = useCallback5((nodePath) => {
2941
2973
  setControlOverrides((prev) => {
2942
- if (!prev[sequenceId]) {
2974
+ const key = nodePathToString(nodePath);
2975
+ if (!prev[key]) {
2943
2976
  return prev;
2944
2977
  }
2945
2978
  const next = { ...prev };
2946
- delete next[sequenceId];
2979
+ delete next[key];
2947
2980
  return next;
2948
2981
  });
2949
2982
  }, []);
2950
- const setCodeValues = useCallback5((sequenceId, values) => {
2983
+ const setCodeValues = useCallback5((nodePath, values) => {
2951
2984
  setCodeValuesMapState((prev) => {
2952
- if (prev[sequenceId] === values) {
2985
+ const key = nodePathToString(nodePath);
2986
+ if (prev[key] === values) {
2953
2987
  return prev;
2954
2988
  }
2955
- if (values === null) {
2956
- if (!(sequenceId in prev)) {
2957
- return prev;
2958
- }
2959
- const next = { ...prev };
2960
- delete next[sequenceId];
2961
- return next;
2962
- }
2963
- return { ...prev, [sequenceId]: values };
2989
+ return { ...prev, [key]: values };
2964
2990
  });
2965
2991
  }, []);
2966
2992
  const registerSequence = useCallback5((seq) => {
@@ -2984,30 +3010,31 @@ var SequenceManagerProvider = ({ children, visualModeEnabled }) => {
2984
3010
  setHidden
2985
3011
  };
2986
3012
  }, [hidden]);
2987
- const overrideContext = useMemo14(() => {
3013
+ const gettersContext = useMemo14(() => {
2988
3014
  return {
2989
3015
  visualModeEnabled,
2990
- dragOverrides,
3016
+ getDragOverrides: (nodePath) => dragOverrides[nodePathToString(nodePath)] ?? {},
3017
+ getCodeValues: (nodePath) => getCodeValues(codeValues, nodePath),
3018
+ getIsJsxInMapCallback: (nodePath) => getIsJsxInMapCallback(codeValues, nodePath)
3019
+ };
3020
+ }, [visualModeEnabled, dragOverrides, codeValues]);
3021
+ const settersContext = useMemo14(() => {
3022
+ return {
2991
3023
  setDragOverrides,
2992
3024
  clearDragOverrides,
2993
- codeValues,
2994
3025
  setCodeValues
2995
3026
  };
2996
- }, [
2997
- visualModeEnabled,
2998
- dragOverrides,
2999
- setDragOverrides,
3000
- clearDragOverrides,
3001
- codeValues,
3002
- setCodeValues
3003
- ]);
3027
+ }, [setDragOverrides, clearDragOverrides, setCodeValues]);
3004
3028
  return /* @__PURE__ */ jsx11(SequenceManager.Provider, {
3005
3029
  value: sequenceContext,
3006
3030
  children: /* @__PURE__ */ jsx11(SequenceVisibilityToggleContext.Provider, {
3007
3031
  value: hiddenContext,
3008
- children: /* @__PURE__ */ jsx11(VisualModeOverridesContext.Provider, {
3009
- value: overrideContext,
3010
- children
3032
+ children: /* @__PURE__ */ jsx11(VisualModeGettersContext.Provider, {
3033
+ value: gettersContext,
3034
+ children: /* @__PURE__ */ jsx11(VisualModeSettersContext.Provider, {
3035
+ value: settersContext,
3036
+ children
3037
+ })
3011
3038
  })
3012
3039
  })
3013
3040
  });
@@ -3052,6 +3079,14 @@ var getFlatSchemaWithAllKeys = (schema) => {
3052
3079
  }
3053
3080
  return out;
3054
3081
  };
3082
+ var OverrideIdsToNodePathsGettersContext = createContext15({
3083
+ overrideIdToNodePathMappings: {}
3084
+ });
3085
+ var OverrideIdsToNodePathsSettersContext = createContext15({
3086
+ setOverrideIdToNodePath: () => {
3087
+ throw new Error("OverrideIdsToNodePathsSettersContext not initialized");
3088
+ }
3089
+ });
3055
3090
  var getEffectiveVisualModeValue = ({
3056
3091
  codeValue,
3057
3092
  runtimeValue,
@@ -3156,6 +3191,7 @@ var mergeValues = ({
3156
3191
  }
3157
3192
  return merged;
3158
3193
  };
3194
+ var stackToOverrideMap = {};
3159
3195
  var wrapInSchema = (Component, schema) => {
3160
3196
  if (typeof process === "undefined" || !process.env?.EXPERIMENTAL_VISUAL_MODE_ENABLED) {
3161
3197
  return Component;
@@ -3164,7 +3200,8 @@ var wrapInSchema = (Component, schema) => {
3164
3200
  const flatKeys = Object.keys(flatSchema);
3165
3201
  const Wrapped = forwardRef2((props, ref) => {
3166
3202
  const env = useRemotionEnvironment();
3167
- const { visualModeEnabled, dragOverrides, codeValues } = useContext15(VisualModeOverridesContext);
3203
+ const { visualModeEnabled, getDragOverrides, getCodeValues: getCodeValues2 } = useContext15(VisualModeGettersContext);
3204
+ const nodePathMapping = useContext15(OverrideIdsToNodePathsGettersContext);
3168
3205
  if (!env.isStudio || env.isReadOnlyStudio || env.isRendering || !visualModeEnabled) {
3169
3206
  return React13.createElement(Component, {
3170
3207
  ...props,
@@ -3178,7 +3215,20 @@ var wrapInSchema = (Component, schema) => {
3178
3215
  ref
3179
3216
  });
3180
3217
  }
3181
- const [overrideId] = useState5(() => String(Math.random()));
3218
+ const [overrideId] = useState5(() => {
3219
+ const { stack } = props;
3220
+ if (!stack) {
3221
+ return String(Math.random());
3222
+ }
3223
+ const existingOverrideId = stackToOverrideMap[stack];
3224
+ if (existingOverrideId) {
3225
+ return existingOverrideId;
3226
+ }
3227
+ const newOverrideId = String(Math.random());
3228
+ stackToOverrideMap[stack] = newOverrideId;
3229
+ return newOverrideId;
3230
+ });
3231
+ const nodePath = nodePathMapping.overrideIdToNodePathMappings[overrideId] ?? null;
3182
3232
  const runtimeValues = flatKeys.map((k) => getNestedValue(props, k));
3183
3233
  const currentRuntimeValueDotNotation = useMemo15(() => readValuesFromProps(props, flatKeys), runtimeValues);
3184
3234
  const controls = useMemo15(() => {
@@ -3192,10 +3242,15 @@ var wrapInSchema = (Component, schema) => {
3192
3242
  return computeEffectiveSchemaValuesDotNotation({
3193
3243
  schema,
3194
3244
  currentValue: currentRuntimeValueDotNotation,
3195
- overrideValues: dragOverrides[overrideId] ?? {},
3196
- propStatus: codeValues[overrideId]
3245
+ overrideValues: nodePath === null ? {} : getDragOverrides(nodePath),
3246
+ propStatus: nodePath === null ? undefined : getCodeValues2(nodePath)
3197
3247
  });
3198
- }, [currentRuntimeValueDotNotation, dragOverrides, overrideId, codeValues]);
3248
+ }, [
3249
+ currentRuntimeValueDotNotation,
3250
+ getDragOverrides,
3251
+ nodePath,
3252
+ getCodeValues2
3253
+ ]);
3199
3254
  const activeKeys = selectActiveKeys(schema, valuesDotNotation);
3200
3255
  const mergedProps = mergeValues({
3201
3256
  props,
@@ -3859,7 +3914,7 @@ var defaultOnPaint = ({
3859
3914
  const transform = ctx.drawElementImage(elementImage, 0, 0);
3860
3915
  element.style.transform = transform.toString();
3861
3916
  };
3862
- var HtmlInCanvasAncestorContext = createContext15(false);
3917
+ var HtmlInCanvasAncestorContext = createContext16(false);
3863
3918
  var HtmlInCanvasInner = forwardRef5(({
3864
3919
  width,
3865
3920
  height,
@@ -4076,7 +4131,7 @@ var validateRenderAsset = (artifact) => {
4076
4131
  }
4077
4132
  validateContent(artifact.content);
4078
4133
  };
4079
- var RenderAssetManager = createContext16({
4134
+ var RenderAssetManager = createContext17({
4080
4135
  registerRenderAsset: () => {
4081
4136
  return;
4082
4137
  },
@@ -4214,7 +4269,7 @@ var calculateMediaDuration = ({
4214
4269
  const actualDuration = duration / playbackRate;
4215
4270
  return Math.floor(actualDuration);
4216
4271
  };
4217
- var LoopContext = createContext17(null);
4272
+ var LoopContext = createContext18(null);
4218
4273
  var useLoop = () => {
4219
4274
  return React17.useContext(LoopContext);
4220
4275
  };
@@ -4285,7 +4340,7 @@ var playbackLogging = ({
4285
4340
  const tags = [mountTime ? Date.now() - mountTime + "ms " : null, tag].filter(Boolean).join(" ");
4286
4341
  Log.trace({ logLevel, tag: null }, `[${tags}]`, message);
4287
4342
  };
4288
- var PreloadContext = createContext18({});
4343
+ var PreloadContext = createContext19({});
4289
4344
  var preloads = {};
4290
4345
  var updaters = [];
4291
4346
  var setPreloads = (updater) => {
@@ -4606,7 +4661,7 @@ var durationReducer = (state, action) => {
4606
4661
  return state;
4607
4662
  }
4608
4663
  };
4609
- var DurationsContext = createContext19({
4664
+ var DurationsContext = createContext20({
4610
4665
  durations: {},
4611
4666
  setDurations: () => {
4612
4667
  throw new Error("context missing");
@@ -4772,11 +4827,6 @@ var useSingletonAudioContext = ({
4772
4827
  gainNode
4773
4828
  };
4774
4829
  }, [logLevel, latencyHint, env.isRendering, audioEnabled]);
4775
- useEffect8(() => {
4776
- return () => {
4777
- context?.audioContext?.close();
4778
- };
4779
- }, [context]);
4780
4830
  return context;
4781
4831
  };
4782
4832
  var waitUntilActuallyResumed = (audioContext, logLevel) => {
@@ -4825,8 +4875,8 @@ var didPropChange = (key, newProp, prevProp) => {
4825
4875
  }
4826
4876
  return true;
4827
4877
  };
4828
- var SharedAudioContext = createContext20(null);
4829
- var SharedAudioTagsContext = createContext20(null);
4878
+ var SharedAudioContext = createContext21(null);
4879
+ var SharedAudioTagsContext = createContext21(null);
4830
4880
  var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled }) => {
4831
4881
  const logLevel = useLogLevel();
4832
4882
  const ctxAndGain = useSingletonAudioContext({
@@ -4871,8 +4921,9 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4871
4921
  if (!ctxAndGain) {
4872
4922
  throw new Error("Audio context not found");
4873
4923
  }
4924
+ const saveForLater = ctxAndGain.audioContext.state === "suspended" && !isResuming.current;
4874
4925
  if (duration > 0) {
4875
- if (ctxAndGain.audioContext.state === "suspended") {
4926
+ if (saveForLater) {
4876
4927
  nodesToResume.current.set(node, {
4877
4928
  scheduledTime,
4878
4929
  offset,
@@ -4890,7 +4941,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4890
4941
  const prev = prevEndTimes.current;
4891
4942
  const scheduledMismatch = prev.scheduledEndTime !== null && Math.abs(scheduledTime - prev.scheduledEndTime) > 0.001;
4892
4943
  const mediaMismatch = prev.mediaEndTime !== null && Math.abs(mediaTime - prev.mediaEndTime) > 0.001;
4893
- Log.verbose({ logLevel, tag: "audio-scheduling" }, "scheduled %c%s%c %s %c%s%c %s %c%s%c %s %s %s", scheduledMismatch ? "color: red; font-weight: bold" : "", scheduledTime.toFixed(4), "", scheduledEndTime.toFixed(4), mediaMismatch ? "color: red; font-weight: bold" : "", mediaTime.toFixed(4), "", mediaEndTime.toFixed(4), duration < 0 ? "color: red; font-weight: bold" : timeDiff < 0 ? "color: red; font-weight: bold" : "color: blue; font-weight: bold", duration < 0 ? "missed " + Math.abs(offset).toFixed(2) + "s" : Math.abs(timeDiff).toFixed(2) + (timeDiff < 0 ? " delay" : " ahead"), "", "current=" + currentTime.toFixed(4), "offset=" + offset.toFixed(4), "latency=" + latency.toFixed(4), "state=" + ctxAndGain.audioContext.state, originalUnloopedMediaTimestamp !== mediaTime ? "original_ts=" + originalUnloopedMediaTimestamp.toFixed(4) : "");
4944
+ Log.verbose({ logLevel, tag: "audio-scheduling" }, "scheduled %c%s%c %s %c%s%c %s %c%s%c %s %s %s %s %s", scheduledMismatch ? "color: red; font-weight: bold" : "", scheduledTime.toFixed(4), "", scheduledEndTime.toFixed(4), mediaMismatch ? "color: red; font-weight: bold" : "", mediaTime.toFixed(4), "", mediaEndTime.toFixed(4), duration < 0 ? "color: red; font-weight: bold" : timeDiff < 0 ? "color: red; font-weight: bold" : "color: blue; font-weight: bold", duration < 0 ? "missed " + Math.abs(offset).toFixed(2) + "s" : Math.abs(timeDiff).toFixed(2) + (timeDiff < 0 ? " delay" : " ahead"), "", "current=" + currentTime.toFixed(4), "actualcurrent=" + ctxAndGain.audioContext.currentTime.toFixed(4), "offset=" + offset.toFixed(4), "latency=" + latency.toFixed(4), "state=" + ctxAndGain.audioContext.state, originalUnloopedMediaTimestamp !== mediaTime ? "original_ts=" + originalUnloopedMediaTimestamp.toFixed(4) : "", "action=" + (saveForLater ? "schedule" : "start"), "");
4894
4945
  prev.scheduledEndTime = scheduledEndTime;
4895
4946
  prev.mediaEndTime = mediaEndTime;
4896
4947
  return duration > 0 ? {
@@ -4910,6 +4961,13 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4910
4961
  return Promise.resolve();
4911
4962
  }
4912
4963
  audioContextIsPlayingEventually.current = true;
4964
+ ctxAndGain.gainNode.gain.cancelScheduledValues(ctxAndGain.audioContext.currentTime);
4965
+ ctxAndGain.gainNode.gain.setValueAtTime(0, ctxAndGain.audioContext.currentTime);
4966
+ ctxAndGain.gainNode.gain.linearRampToValueAtTime(1, ctxAndGain.audioContext.currentTime + 0.03);
4967
+ nodesToResume.current.forEach((r, node) => {
4968
+ node.start(r.scheduledTime, r.offset, r.duration);
4969
+ });
4970
+ nodesToResume.current.clear();
4913
4971
  const resumePromise = ctxAndGain.audioContext.resume();
4914
4972
  isResuming.current = new Promise((resolve) => {
4915
4973
  waitUntilActuallyResumed(ctxAndGain.audioContext, logLevel).then(resolve);
@@ -4920,11 +4978,6 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4920
4978
  }).finally(() => {
4921
4979
  isResuming.current = null;
4922
4980
  });
4923
- ctxAndGain.gainNode.gain.cancelScheduledValues(ctxAndGain.audioContext.currentTime);
4924
- ctxAndGain.gainNode.gain.setValueAtTime(0, ctxAndGain.audioContext.currentTime);
4925
- ctxAndGain.gainNode.gain.linearRampToValueAtTime(1, ctxAndGain.audioContext.currentTime + 0.03);
4926
- nodesToResume.current.forEach((r, node) => node.start(r.scheduledTime, r.offset, r.duration));
4927
- nodesToResume.current.clear();
4928
4981
  return resumePromise.catch(() => {});
4929
4982
  }, [ctxAndGain, logLevel]);
4930
4983
  const getIsResumingAudioContext = useCallback9(() => {
@@ -5507,7 +5560,7 @@ var useBasicMediaInTimeline = ({
5507
5560
  });
5508
5561
  }).join(",");
5509
5562
  }, [duration, mediaStartsAt, volume, mediaVolume]);
5510
- useEffect9(() => {
5563
+ useEffect8(() => {
5511
5564
  if (typeof volume === "number" && volume !== initialVolume) {
5512
5565
  warnOnce2(`Remotion: The ${mediaType} with src ${src} has changed it's volume. Prefer the callback syntax for setting volume to get better timeline display: https://www.remotion.dev/docs/audio/volume`);
5513
5566
  }
@@ -5570,7 +5623,7 @@ var useImageInTimeline = ({
5570
5623
  loop: false
5571
5624
  });
5572
5625
  const { isStudio } = useRemotionEnvironment();
5573
- useEffect9(() => {
5626
+ useEffect8(() => {
5574
5627
  if (!src) {
5575
5628
  throw new Error("No src passed");
5576
5629
  }
@@ -5653,7 +5706,7 @@ var useMediaInTimeline = ({
5653
5706
  loop: false
5654
5707
  });
5655
5708
  const { isStudio } = useRemotionEnvironment();
5656
- useEffect9(() => {
5709
+ useEffect8(() => {
5657
5710
  if (!src) {
5658
5711
  throw new Error("No src passed");
5659
5712
  }
@@ -5726,9 +5779,14 @@ var useBufferManager = (logLevel, mountTime) => {
5726
5779
  }
5727
5780
  };
5728
5781
  }
5782
+ let unblocked = false;
5729
5783
  setBlocks((b) => [...b, block]);
5730
5784
  return {
5731
5785
  unblock: () => {
5786
+ if (unblocked) {
5787
+ return;
5788
+ }
5789
+ unblocked = true;
5732
5790
  setBlocks((b) => {
5733
5791
  const newArr = b.filter((bx) => bx !== block);
5734
5792
  if (newArr.length === b.length) {
@@ -5755,7 +5813,7 @@ var useBufferManager = (logLevel, mountTime) => {
5755
5813
  }
5756
5814
  };
5757
5815
  }, []);
5758
- useEffect10(() => {
5816
+ useEffect9(() => {
5759
5817
  if (rendering) {
5760
5818
  return;
5761
5819
  }
@@ -5800,7 +5858,7 @@ var BufferingProvider = ({ children }) => {
5800
5858
  };
5801
5859
  var useIsPlayerBuffering = (bufferManager) => {
5802
5860
  const [isBuffering, setIsBuffering] = useState14(bufferManager.buffering.current);
5803
- useEffect10(() => {
5861
+ useEffect9(() => {
5804
5862
  const onBuffer = () => {
5805
5863
  setIsBuffering(true);
5806
5864
  };
@@ -5822,18 +5880,30 @@ var useIsPlayerBuffering = (bufferManager) => {
5822
5880
  };
5823
5881
  var useBufferState = () => {
5824
5882
  const buffer = useContext25(BufferingContextReact);
5883
+ const logLevel = useLogLevel();
5825
5884
  const addBlock = buffer ? buffer.addBlock : null;
5826
5885
  return useMemo25(() => ({
5827
5886
  delayPlayback: () => {
5828
5887
  if (!addBlock) {
5829
5888
  throw new Error("Tried to enable the buffering state, but a Remotion context was not found. This API can only be called in a component that was passed to the Remotion Player or a <Composition>. Or you might have experienced a version mismatch - run `npx remotion versions` and ensure all packages have the same version. This error is thrown by the buffer state https://remotion.dev/docs/player/buffer-state");
5830
5889
  }
5890
+ Log.trace({ logLevel, tag: "[buffer-state]" }, "Adding buffer handle", new Error().stack);
5831
5891
  const { unblock } = addBlock({
5832
5892
  id: String(Math.random())
5833
5893
  });
5834
- return { unblock };
5894
+ let unblocked = false;
5895
+ return {
5896
+ unblock: () => {
5897
+ if (unblocked) {
5898
+ return;
5899
+ }
5900
+ unblocked = true;
5901
+ Log.trace({ logLevel, tag: "[buffer-state]" }, "Removing buffer handle");
5902
+ unblock();
5903
+ }
5904
+ };
5835
5905
  }
5836
- }), [addBlock]);
5906
+ }), [addBlock, logLevel]);
5837
5907
  };
5838
5908
  var isSafariWebkit = () => {
5839
5909
  const isSafari2 = /^((?!chrome|android).)*safari/i.test(window.navigator.userAgent);
@@ -5969,7 +6039,7 @@ var useMediaBuffering = ({
5969
6039
  }) => {
5970
6040
  const buffer = useBufferState();
5971
6041
  const [isBuffering, setIsBuffering] = useState15(false);
5972
- useEffect11(() => {
6042
+ useEffect10(() => {
5973
6043
  let cleanupFns = [];
5974
6044
  const { current } = element;
5975
6045
  if (!current) {
@@ -6102,7 +6172,7 @@ var useRequestVideoCallbackTime = ({
6102
6172
  onVariableFpsVideoDetected
6103
6173
  }) => {
6104
6174
  const currentTime = useRef16(null);
6105
- useEffect12(() => {
6175
+ useEffect11(() => {
6106
6176
  const { current } = mediaRef;
6107
6177
  if (current) {
6108
6178
  currentTime.current = {
@@ -6388,7 +6458,7 @@ var useMediaPlayback = ({
6388
6458
  return acceptableTimeshift ?? defaultAcceptableTimeshift;
6389
6459
  })();
6390
6460
  const isPlayerBuffering = useIsPlayerBuffering(buffering);
6391
- useEffect13(() => {
6461
+ useEffect12(() => {
6392
6462
  if (mediaRef.current?.paused) {
6393
6463
  return;
6394
6464
  }
@@ -6433,7 +6503,7 @@ var useMediaPlayback = ({
6433
6503
  mediaRef.current.playbackRate = playbackRateToSet;
6434
6504
  }
6435
6505
  }, [mediaRef, playbackRate]);
6436
- useEffect13(() => {
6506
+ useEffect12(() => {
6437
6507
  const tagName = mediaType === "audio" ? "<Html5Audio>" : "<Html5Video>";
6438
6508
  if (!mediaRef.current) {
6439
6509
  throw new Error(`No ${mediaType} ref found`);
@@ -6562,7 +6632,7 @@ var useMediaTag = ({
6562
6632
  const logLevel = useLogLevel();
6563
6633
  const mountTime = useMountTime();
6564
6634
  const env = useRemotionEnvironment();
6565
- useEffect14(() => {
6635
+ useEffect13(() => {
6566
6636
  const tag = {
6567
6637
  id,
6568
6638
  play: (reason) => {
@@ -6601,11 +6671,11 @@ var useMediaTag = ({
6601
6671
  env.isPlayer
6602
6672
  ]);
6603
6673
  };
6604
- var MediaVolumeContext = createContext21({
6674
+ var MediaVolumeContext = createContext22({
6605
6675
  mediaMuted: false,
6606
6676
  mediaVolume: 1
6607
6677
  });
6608
- var SetMediaVolumeContext = createContext21({
6678
+ var SetMediaVolumeContext = createContext22({
6609
6679
  setMediaMuted: () => {
6610
6680
  throw new Error("default");
6611
6681
  },
@@ -6781,7 +6851,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
6781
6851
  }, [audioRef]);
6782
6852
  const currentOnDurationCallback = useRef18(onDuration);
6783
6853
  currentOnDurationCallback.current = onDuration;
6784
- useEffect15(() => {
6854
+ useEffect14(() => {
6785
6855
  const { current } = audioRef;
6786
6856
  if (!current) {
6787
6857
  return;
@@ -6850,7 +6920,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
6850
6920
  useImperativeHandle5(ref, () => {
6851
6921
  return audioRef.current;
6852
6922
  }, []);
6853
- useEffect16(() => {
6923
+ useEffect15(() => {
6854
6924
  if (!props.src) {
6855
6925
  throw new Error("No src passed");
6856
6926
  }
@@ -7439,7 +7509,7 @@ var waitForRoot = (fn) => {
7439
7509
  listeners = listeners.filter((l) => l !== fn);
7440
7510
  };
7441
7511
  };
7442
- var MediaEnabledContext = createContext22(null);
7512
+ var MediaEnabledContext = createContext23(null);
7443
7513
  var useVideoEnabled = () => {
7444
7514
  const context = useContext32(MediaEnabledContext);
7445
7515
  if (!context) {
@@ -7721,7 +7791,7 @@ var setupEnvVariables = () => {
7721
7791
  });
7722
7792
  };
7723
7793
  var CurrentScaleContext = React32.createContext(null);
7724
- var PreviewSizeContext = createContext23({
7794
+ var PreviewSizeContext = createContext24({
7725
7795
  setSize: () => {
7726
7796
  return;
7727
7797
  },
@@ -7744,14 +7814,6 @@ var calculateScale = ({
7744
7814
  }
7745
7815
  return Number(previewSize);
7746
7816
  };
7747
- var useSequenceControlOverride = (key) => {
7748
- const seqContext = useContext33(SequenceContext);
7749
- const { dragOverrides: overrides } = useContext33(VisualModeOverridesContext);
7750
- if (!seqContext) {
7751
- return;
7752
- }
7753
- return overrides[seqContext.id]?.[key];
7754
- };
7755
7817
  var getOffthreadVideoSource = ({
7756
7818
  src,
7757
7819
  transparent,
@@ -7783,9 +7845,9 @@ var OffthreadVideoForRendering = ({
7783
7845
  const frame = useCurrentFrame();
7784
7846
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior);
7785
7847
  const videoConfig = useUnsafeVideoConfig();
7786
- const sequenceContext = useContext34(SequenceContext);
7848
+ const sequenceContext = useContext33(SequenceContext);
7787
7849
  const mediaStartsAt = useMediaStartsAt();
7788
- const { registerRenderAsset, unregisterRenderAsset } = useContext34(RenderAssetManager);
7850
+ const { registerRenderAsset, unregisterRenderAsset } = useContext33(RenderAssetManager);
7789
7851
  if (!src) {
7790
7852
  throw new TypeError("No `src` was passed to <OffthreadVideo>.");
7791
7853
  }
@@ -7804,7 +7866,7 @@ var OffthreadVideoForRendering = ({
7804
7866
  mediaVolume: 1
7805
7867
  });
7806
7868
  warnAboutTooHighVolume(volume);
7807
- useEffect17(() => {
7869
+ useEffect16(() => {
7808
7870
  if (!src) {
7809
7871
  throw new Error("No src passed");
7810
7872
  }
@@ -7965,7 +8027,7 @@ var useEmitVideoFrame = ({
7965
8027
  ref,
7966
8028
  onVideoFrame
7967
8029
  }) => {
7968
- useEffect18(() => {
8030
+ useEffect17(() => {
7969
8031
  const { current } = ref;
7970
8032
  if (!current) {
7971
8033
  return;
@@ -7997,7 +8059,7 @@ class MediaPlaybackError extends Error {
7997
8059
  }
7998
8060
  }
7999
8061
  var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8000
- const context = useContext35(SharedAudioContext);
8062
+ const context = useContext34(SharedAudioContext);
8001
8063
  if (!context) {
8002
8064
  throw new Error("SharedAudioContext not found");
8003
8065
  }
@@ -8053,8 +8115,8 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8053
8115
  }
8054
8116
  const volumePropFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
8055
8117
  const { fps, durationInFrames } = useVideoConfig();
8056
- const parentSequence = useContext35(SequenceContext);
8057
- const { hidden } = useContext35(SequenceVisibilityToggleContext);
8118
+ const parentSequence = useContext34(SequenceContext);
8119
+ const { hidden } = useContext34(SequenceVisibilityToggleContext);
8058
8120
  const logLevel = useLogLevel();
8059
8121
  const mountTime = useMountTime();
8060
8122
  const [timelineId] = useState21(() => String(Math.random()));
@@ -8129,7 +8191,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8129
8191
  tag: "video",
8130
8192
  mountTime
8131
8193
  }));
8132
- useEffect19(() => {
8194
+ useEffect18(() => {
8133
8195
  const { current } = videoRef;
8134
8196
  if (!current) {
8135
8197
  return;
@@ -8172,7 +8234,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8172
8234
  const currentOnDurationCallback = useRef22(onDuration);
8173
8235
  currentOnDurationCallback.current = onDuration;
8174
8236
  useEmitVideoFrame({ ref: videoRef, onVideoFrame });
8175
- useEffect19(() => {
8237
+ useEffect18(() => {
8176
8238
  const { current } = videoRef;
8177
8239
  if (!current) {
8178
8240
  return;
@@ -8189,7 +8251,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8189
8251
  current.removeEventListener("loadedmetadata", onLoadedMetadata);
8190
8252
  };
8191
8253
  }, [src]);
8192
- useEffect19(() => {
8254
+ useEffect18(() => {
8193
8255
  const { current } = videoRef;
8194
8256
  if (!current) {
8195
8257
  return;
@@ -8478,7 +8540,8 @@ var Internals = {
8478
8540
  VideoForPreview,
8479
8541
  CompositionManager,
8480
8542
  CompositionSetters,
8481
- VisualModeOverridesContext,
8543
+ VisualModeGettersContext,
8544
+ VisualModeSettersContext,
8482
8545
  SequenceManager,
8483
8546
  SequenceStackTracesUpdateContext,
8484
8547
  SequenceVisibilityToggleContext,
@@ -8487,7 +8550,6 @@ var Internals = {
8487
8550
  sequenceStyleSchema,
8488
8551
  flattenActiveSchema,
8489
8552
  getFlatSchemaWithAllKeys,
8490
- useSequenceControlOverride,
8491
8553
  RemotionRootContexts,
8492
8554
  CompositionManagerProvider,
8493
8555
  useVideo,
@@ -8580,7 +8642,9 @@ var Internals = {
8580
8642
  useMemoizedEffects,
8581
8643
  defineEffect,
8582
8644
  createDescriptor,
8583
- computeEffectiveSchemaValuesDotNotation
8645
+ computeEffectiveSchemaValuesDotNotation,
8646
+ OverrideIdsToNodePathsGettersContext,
8647
+ OverrideIdsToNodePathsSettersContext
8584
8648
  };
8585
8649
  var NUMBER = "[-+]?\\d*\\.?\\d+";
8586
8650
  var PERCENTAGE = NUMBER + "%";
@@ -8618,7 +8682,7 @@ var flattenChildren = (children) => {
8618
8682
  return flatChildren;
8619
8683
  }, []);
8620
8684
  };
8621
- var IsInsideSeriesContext = createContext24(false);
8685
+ var IsInsideSeriesContext = createContext25(false);
8622
8686
  var IsInsideSeriesContainer = ({ children }) => {
8623
8687
  return /* @__PURE__ */ jsx34(IsInsideSeriesContext.Provider, {
8624
8688
  value: true,
@@ -8660,9 +8724,6 @@ var SeriesInner = (props2) => {
8660
8724
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but got ${castedChild} instead`);
8661
8725
  }
8662
8726
  const debugInfo = `index = ${i}, duration = ${castedChild.props.durationInFrames}`;
8663
- if (!castedChild?.props.children) {
8664
- throw new TypeError(`A <Series.Sequence /> component (${debugInfo}) was detected to not have any children. Delete it to fix this error.`);
8665
- }
8666
8727
  const durationInFramesProp = castedChild.props.durationInFrames;
8667
8728
  const {
8668
8729
  durationInFrames,
@@ -9178,13 +9239,13 @@ var VideoForRenderingForwardFunction = ({
9178
9239
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
9179
9240
  const videoConfig = useUnsafeVideoConfig();
9180
9241
  const videoRef = useRef23(null);
9181
- const sequenceContext = useContext36(SequenceContext);
9242
+ const sequenceContext = useContext35(SequenceContext);
9182
9243
  const mediaStartsAt = useMediaStartsAt();
9183
9244
  const environment = useRemotionEnvironment();
9184
9245
  const logLevel = useLogLevel();
9185
9246
  const mountTime = useMountTime();
9186
9247
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
9187
- const { registerRenderAsset, unregisterRenderAsset } = useContext36(RenderAssetManager);
9248
+ const { registerRenderAsset, unregisterRenderAsset } = useContext35(RenderAssetManager);
9188
9249
  const id = useMemo37(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
9189
9250
  props2.src,
9190
9251
  sequenceContext?.cumulatedFrom,
@@ -9200,7 +9261,7 @@ var VideoForRenderingForwardFunction = ({
9200
9261
  mediaVolume: 1
9201
9262
  });
9202
9263
  warnAboutTooHighVolume(volume);
9203
- useEffect20(() => {
9264
+ useEffect19(() => {
9204
9265
  if (!props2.src) {
9205
9266
  throw new Error("No src passed");
9206
9267
  }
@@ -9243,7 +9304,7 @@ var VideoForRenderingForwardFunction = ({
9243
9304
  useImperativeHandle9(ref, () => {
9244
9305
  return videoRef.current;
9245
9306
  }, []);
9246
- useEffect20(() => {
9307
+ useEffect19(() => {
9247
9308
  if (!window.remotion_videoEnabled) {
9248
9309
  return;
9249
9310
  }
@@ -9394,7 +9455,7 @@ var VideoForwardingFunction = (props2, ref) => {
9394
9455
  if (environment.isClientSideRendering) {
9395
9456
  throw new Error("<Html5Video> is not supported in @remotion/web-renderer. Use <Video> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");
9396
9457
  }
9397
- const { durations, setDurations } = useContext37(DurationsContext);
9458
+ const { durations, setDurations } = useContext36(DurationsContext);
9398
9459
  if (typeof ref === "string") {
9399
9460
  throw new Error("string refs are not supported");
9400
9461
  }
@@ -11287,7 +11348,7 @@ var getDefaultConfig = () => {
11287
11348
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
11288
11349
 
11289
11350
  // ../design/dist/esm/index.mjs
11290
- import React33, { useEffect as useEffect21, useMemo as useMemo41, useState as useState23 } from "react";
11351
+ import React33, { useEffect as useEffect20, useMemo as useMemo41, useState as useState23 } from "react";
11291
11352
 
11292
11353
  // ../paths/dist/esm/index.mjs
11293
11354
  var cutLInstruction = ({
@@ -15882,7 +15943,7 @@ var useHoverTransforms = (ref, disabled) => {
15882
15943
  isActive: false
15883
15944
  });
15884
15945
  const eventTarget = useMemo41(() => new EventTarget, []);
15885
- useEffect21(() => {
15946
+ useEffect20(() => {
15886
15947
  if (disabled) {
15887
15948
  eventTarget.dispatchEvent(new Event("disabled"));
15888
15949
  } else {
@@ -16029,7 +16090,7 @@ var getAngle = (ref, coordinates) => {
16029
16090
  var lastCoordinates = null;
16030
16091
  var useMousePosition = (ref) => {
16031
16092
  const [angle, setAngle] = useState23(getAngle(ref.current, lastCoordinates));
16032
- useEffect21(() => {
16093
+ useEffect20(() => {
16033
16094
  const element = ref.current;
16034
16095
  if (!element) {
16035
16096
  return;
@@ -24265,7 +24326,7 @@ var Pricing = () => {
24265
24326
  };
24266
24327
 
24267
24328
  // src/components/homepage/BackgroundAnimation.tsx
24268
- import { useEffect as useEffect40 } from "react";
24329
+ import { useEffect as useEffect41 } from "react";
24269
24330
  import { jsx as jsx49, jsxs as jsxs10 } from "react/jsx-runtime";
24270
24331
  "use client";
24271
24332
  var rx = 0.2;
@@ -24291,7 +24352,7 @@ var BackgroundAnimation = () => {
24291
24352
  }
24292
24353
  }
24293
24354
  `;
24294
- useEffect40(() => {
24355
+ useEffect41(() => {
24295
24356
  const _style = document.createElement("style");
24296
24357
  _style.innerHTML = css;
24297
24358
  document.head.appendChild(_style);
@@ -24397,7 +24458,7 @@ var InstallsPerMonth = () => {
24397
24458
  },
24398
24459
  children: [
24399
24460
  /* @__PURE__ */ jsx50(StatItemContent, {
24400
- content: "1.4M",
24461
+ content: "3M",
24401
24462
  width: "100px",
24402
24463
  fontSize: "2.5rem",
24403
24464
  fontWeight: "bold"
@@ -24419,7 +24480,7 @@ var InstallsPerMonth = () => {
24419
24480
  ]
24420
24481
  }),
24421
24482
  /* @__PURE__ */ jsx50(StatItemContent, {
24422
- content: "installs per month",
24483
+ content: "installs",
24423
24484
  width: "75%",
24424
24485
  fontSize: "1.0rem",
24425
24486
  fontWeight: "bold"
@@ -24505,7 +24566,7 @@ var GitHubStars = () => {
24505
24566
  width: "45px"
24506
24567
  }),
24507
24568
  /* @__PURE__ */ jsx50(StatItemContent, {
24508
- content: "45k",
24569
+ content: "46k",
24509
24570
  width: "80px",
24510
24571
  fontSize: "2.5rem",
24511
24572
  fontWeight: "bold"
@@ -24697,16 +24758,16 @@ var CommunityStats_default = CommunityStats;
24697
24758
  import { jsx as jsx56, jsxs as jsxs13 } from "react/jsx-runtime";
24698
24759
  import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment11 } from "react/jsx-runtime";
24699
24760
  import React56 from "react";
24700
- import { useContext as useContext210, useEffect as useEffect41, useState as useState40 } from "react";
24701
- import { useContext as useContext44, useLayoutEffect as useLayoutEffect17 } from "react";
24761
+ import { useContext as useContext210, useEffect as useEffect42, useState as useState40 } from "react";
24762
+ import { useContext as useContext43, useLayoutEffect as useLayoutEffect17 } from "react";
24702
24763
  import { jsx as jsx313 } from "react/jsx-runtime";
24703
24764
  import { useCallback as useCallback34, useRef as useRef42 } from "react";
24704
- import { useEffect as useEffect210, useState as useState24 } from "react";
24765
+ import { useEffect as useEffect24, useState as useState24 } from "react";
24705
24766
  import { useLayoutEffect as useLayoutEffect23 } from "react";
24706
- import { useContext as useContext45, useEffect as useEffect52, useRef as useRef52 } from "react";
24767
+ import { useContext as useContext44, useEffect as useEffect52, useRef as useRef52 } from "react";
24707
24768
  import { useEffect as useEffect310, useRef as useRef310 } from "react";
24708
- import { useCallback as useCallback24, useContext as useContext39, useMemo as useMemo51, useRef as useRef26, useState as useState310 } from "react";
24709
- import { useEffect as useEffect42, useRef as useRef43 } from "react";
24769
+ import { useCallback as useCallback24, useContext as useContext38, useMemo as useMemo51, useRef as useRef26, useState as useState310 } from "react";
24770
+ import { useEffect as useEffect43, useRef as useRef43 } from "react";
24710
24771
  import { useCallback as useCallback35, useEffect as useEffect62, useMemo as useMemo212, useState as useState42 } from "react";
24711
24772
  import {
24712
24773
  forwardRef as forwardRef210,
@@ -25991,7 +26052,7 @@ class ThumbnailEmitter {
25991
26052
  };
25992
26053
  }
25993
26054
  var useBufferStateEmitter = (emitter) => {
25994
- const bufferManager = useContext44(Internals.BufferingContextReact);
26055
+ const bufferManager = useContext43(Internals.BufferingContextReact);
25995
26056
  if (!bufferManager) {
25996
26057
  throw new Error("BufferingContextReact not found");
25997
26058
  }
@@ -26016,7 +26077,7 @@ var PlayerEmitterProvider = ({ children, currentPlaybackRate }) => {
26016
26077
  if (!bufferManager) {
26017
26078
  throw new Error("BufferingContextReact not found");
26018
26079
  }
26019
- useEffect41(() => {
26080
+ useEffect42(() => {
26020
26081
  if (currentPlaybackRate) {
26021
26082
  emitter.dispatchRateChange(currentPlaybackRate);
26022
26083
  }
@@ -26029,7 +26090,7 @@ var PlayerEmitterProvider = ({ children, currentPlaybackRate }) => {
26029
26090
  };
26030
26091
  var useHoverState = (ref, hideControlsWhenPointerDoesntMove) => {
26031
26092
  const [hovered, setHovered] = useState24(false);
26032
- useEffect210(() => {
26093
+ useEffect24(() => {
26033
26094
  const { current } = ref;
26034
26095
  if (!current) {
26035
26096
  return;
@@ -26074,21 +26135,21 @@ var usePlayer = () => {
26074
26135
  const playStart = useRef26(frame);
26075
26136
  const setFrame = Internals.Timeline.useTimelineSetFrame();
26076
26137
  const setTimelinePosition = Internals.Timeline.useTimelineSetFrame();
26077
- const audioContext = useContext39(Internals.SharedAudioContext);
26078
- const audioTagsContext = useContext39(Internals.SharedAudioTagsContext);
26138
+ const audioContext = useContext38(Internals.SharedAudioContext);
26139
+ const audioTagsContext = useContext38(Internals.SharedAudioTagsContext);
26079
26140
  const { audioAndVideoTags } = Internals.useTimelineContext();
26080
26141
  const frameRef = useRef26(frame);
26081
26142
  frameRef.current = frame;
26082
26143
  const video = Internals.useVideo();
26083
26144
  const config = Internals.useUnsafeVideoConfig();
26084
- const emitter = useContext39(PlayerEventEmitterContext);
26145
+ const emitter = useContext38(PlayerEventEmitterContext);
26085
26146
  const lastFrame = (config?.durationInFrames ?? 1) - 1;
26086
26147
  const isLastFrame = frame === lastFrame;
26087
26148
  const isFirstFrame = frame === 0;
26088
26149
  if (!emitter) {
26089
26150
  throw new TypeError("Expected Player event emitter context");
26090
26151
  }
26091
- const bufferingContext = useContext39(Internals.BufferingContextReact);
26152
+ const bufferingContext = useContext38(Internals.BufferingContextReact);
26092
26153
  if (!bufferingContext) {
26093
26154
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
26094
26155
  }
@@ -26390,7 +26451,7 @@ var getIsBackgrounded = () => {
26390
26451
  };
26391
26452
  var useIsBackgrounded = () => {
26392
26453
  const isBackgrounded = useRef43(getIsBackgrounded());
26393
- useEffect42(() => {
26454
+ useEffect43(() => {
26394
26455
  const onVisibilityChange = () => {
26395
26456
  isBackgrounded.current = getIsBackgrounded();
26396
26457
  };
@@ -26407,17 +26468,18 @@ var setGlobalTimeAnchor = ({
26407
26468
  audioSyncAnchor,
26408
26469
  absoluteTimeInSeconds,
26409
26470
  globalPlaybackRate,
26410
- logLevel
26471
+ logLevel,
26472
+ force
26411
26473
  }) => {
26412
26474
  const newAnchor = audioContext.currentTime - absoluteTimeInSeconds / globalPlaybackRate;
26413
26475
  const shift4 = (newAnchor - audioSyncAnchor.value) * globalPlaybackRate;
26414
26476
  const { outputLatency } = audioContext;
26415
26477
  const safeOutputLatency = outputLatency === 0 ? 0.3 : outputLatency;
26416
26478
  const latency = audioContext.baseLatency + safeOutputLatency;
26417
- if (Math.abs(shift4) < ALLOWED_GLOBAL_TIME_ANCHOR_SHIFT + latency) {
26479
+ if (Math.abs(shift4) < ALLOWED_GLOBAL_TIME_ANCHOR_SHIFT + latency && !force) {
26418
26480
  return false;
26419
26481
  }
26420
- Internals.Log.verbose({ logLevel, tag: "audio-scheduling" }, "Anchor changed from %s to %s with shift %s", audioSyncAnchor.value, newAnchor, shift4);
26482
+ Internals.Log.verbose({ logLevel, tag: "audio-scheduling" }, "Anchor " + (force ? "forcibly " : "") + "changed from %s to %s with shift %s", audioSyncAnchor.value, newAnchor, shift4);
26421
26483
  audioSyncAnchor.value = newAnchor;
26422
26484
  return true;
26423
26485
  };
@@ -26435,11 +26497,11 @@ var usePlayback = ({
26435
26497
  const frame = Internals.Timeline.useTimelinePosition();
26436
26498
  const { playing, pause, emitter, isPlaying } = usePlayer();
26437
26499
  const setFrame = Internals.Timeline.useTimelineSetFrame();
26438
- const sharedAudioContext = useContext45(Internals.SharedAudioContext);
26500
+ const sharedAudioContext = useContext44(Internals.SharedAudioContext);
26439
26501
  const logLevel = Internals.useLogLevel();
26440
26502
  const isBackgroundedRef = useIsBackgrounded();
26441
26503
  const lastTimeUpdateTimestamp = useRef52(0);
26442
- const context = useContext45(Internals.BufferingContextReact);
26504
+ const context = useContext44(Internals.BufferingContextReact);
26443
26505
  if (!context) {
26444
26506
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
26445
26507
  }
@@ -26458,17 +26520,56 @@ var usePlayback = ({
26458
26520
  if (!config) {
26459
26521
  return;
26460
26522
  }
26523
+ if (muted) {
26524
+ return;
26525
+ }
26461
26526
  const changed = setGlobalTimeAnchor({
26462
26527
  audioContext: sharedAudioContext.audioContext,
26463
26528
  audioSyncAnchor: sharedAudioContext.audioSyncAnchor,
26464
26529
  absoluteTimeInSeconds: frame / config.fps,
26465
26530
  globalPlaybackRate: playbackRate,
26466
- logLevel
26531
+ logLevel,
26532
+ force: false
26467
26533
  });
26468
26534
  if (changed) {
26469
26535
  sharedAudioContext.audioSyncAnchorEmitter.dispatch("changed");
26470
26536
  }
26471
- }, [config, frame, logLevel, playbackRate, sharedAudioContext]);
26537
+ }, [config, frame, logLevel, playbackRate, sharedAudioContext, muted]);
26538
+ useLayoutEffect23(() => {
26539
+ const audioContext = sharedAudioContext?.audioContext;
26540
+ if (!audioContext) {
26541
+ return;
26542
+ }
26543
+ if (!config) {
26544
+ return;
26545
+ }
26546
+ if (muted) {
26547
+ return;
26548
+ }
26549
+ const callback = () => {
26550
+ if (audioContext.state !== "running") {
26551
+ setGlobalTimeAnchor({
26552
+ audioContext,
26553
+ audioSyncAnchor: sharedAudioContext.audioSyncAnchor,
26554
+ absoluteTimeInSeconds: getCurrentFrame() / config.fps,
26555
+ globalPlaybackRate: playbackRate,
26556
+ logLevel,
26557
+ force: true
26558
+ });
26559
+ }
26560
+ };
26561
+ audioContext?.addEventListener("statechange", callback);
26562
+ return () => {
26563
+ audioContext?.removeEventListener("statechange", callback);
26564
+ };
26565
+ }, [
26566
+ config,
26567
+ getCurrentFrame,
26568
+ logLevel,
26569
+ muted,
26570
+ playbackRate,
26571
+ sharedAudioContext
26572
+ ]);
26472
26573
  useEffect52(() => {
26473
26574
  if (!config) {
26474
26575
  return;
@@ -26502,7 +26603,7 @@ var usePlayback = ({
26502
26603
  sharedAudioContext?.suspend?.();
26503
26604
  return;
26504
26605
  }
26505
- if (!muted) {
26606
+ if (!muted && !context.buffering.current) {
26506
26607
  sharedAudioContext?.resume?.();
26507
26608
  }
26508
26609
  const time = performance.now() - startedTime;
@@ -26520,7 +26621,7 @@ var usePlayback = ({
26520
26621
  shouldLoop: loop
26521
26622
  });
26522
26623
  framesAdvanced += framesToAdvance;
26523
- if (nextFrame !== getCurrentFrame() && (!hasEnded || moveToBeginningWhenEnded)) {
26624
+ if (nextFrame !== getCurrentFrame() && (!hasEnded || moveToBeginningWhenEnded) && !context.buffering.current) {
26524
26625
  setFrame((c) => ({ ...c, [config.id]: nextFrame }));
26525
26626
  }
26526
26627
  if (hasEnded) {
@@ -26535,27 +26636,16 @@ var usePlayback = ({
26535
26636
  const getIsResumingAudioContext = sharedAudioContext?.getIsResumingAudioContext?.() ?? null;
26536
26637
  if (getIsResumingAudioContext !== null && !muted) {
26537
26638
  getIsResumingAudioContext.then(() => {
26538
- if (!sharedAudioContext?.audioContext) {
26539
- return;
26540
- }
26541
- if (!sharedAudioContext.audioSyncAnchor) {
26542
- return;
26543
- }
26544
- setGlobalTimeAnchor({
26545
- audioContext: sharedAudioContext.audioContext,
26546
- audioSyncAnchor: sharedAudioContext.audioSyncAnchor,
26547
- absoluteTimeInSeconds: getCurrentFrame() / config.fps,
26548
- globalPlaybackRate: playbackRate,
26549
- logLevel
26550
- });
26551
26639
  startedTime = performance.now();
26552
26640
  framesAdvanced = 0;
26553
26641
  queueNextFrame();
26554
26642
  });
26555
26643
  return;
26556
26644
  }
26557
- if (context.buffering.current && !muted) {
26558
- sharedAudioContext?.suspend?.();
26645
+ if (context.buffering.current) {
26646
+ if (!muted) {
26647
+ sharedAudioContext?.suspend?.();
26648
+ }
26559
26649
  const stopListening = context.listenForResume(() => {
26560
26650
  stopListening.remove();
26561
26651
  startedTime = performance.now();
@@ -29077,7 +29167,7 @@ var Thumbnail = forward2(ThumbnailFn);
29077
29167
  // src/components/homepage/Demo/index.tsx
29078
29168
  import {
29079
29169
  useCallback as useCallback49,
29080
- useEffect as useEffect57,
29170
+ useEffect as useEffect58,
29081
29171
  useMemo as useMemo64,
29082
29172
  useRef as useRef53,
29083
29173
  useState as useState56
@@ -29829,7 +29919,7 @@ var UNDERLAY_RED = curriedTransparentize$1(0.9, RED);
29829
29919
  var BLUE_TEXT = curriedDarken$1(0.3, "#42e9f5");
29830
29920
 
29831
29921
  // src/components/homepage/layout/use-color-mode.tsx
29832
- import React57, { useContext as useContext46, useMemo as useMemo53 } from "react";
29922
+ import React57, { useContext as useContext45, useMemo as useMemo53 } from "react";
29833
29923
  import { jsx as jsx57 } from "react/jsx-runtime";
29834
29924
  var Context = React57.createContext(undefined);
29835
29925
  var ColorModeProvider = ({
@@ -29846,7 +29936,7 @@ var ColorModeProvider = ({
29846
29936
  });
29847
29937
  };
29848
29938
  function useColorMode() {
29849
- const context = useContext46(Context);
29939
+ const context = useContext45(Context);
29850
29940
  if (context === null || context === undefined) {
29851
29941
  throw new Error("ColorModeProvider");
29852
29942
  }
@@ -29856,13 +29946,13 @@ function useColorMode() {
29856
29946
  // ../media/dist/esm/index.mjs
29857
29947
  import { useState as useState312 } from "react";
29858
29948
  import { useMemo as useMemo311 } from "react";
29859
- import { useContext as useContext212, useEffect as useEffect43, useMemo as useMemo55, useRef as useRef44, useState as useState41 } from "react";
29949
+ import { useContext as useContext212, useEffect as useEffect44, useMemo as useMemo55, useRef as useRef44, useState as useState41 } from "react";
29860
29950
  import { ALL_FORMATS, Input as Input2, UrlSource } from "mediabunny";
29861
29951
  import { AudioBufferSink, InputDisposedError } from "mediabunny";
29862
29952
  import { CanvasSink } from "mediabunny";
29863
- import { useContext as useContext48, useLayoutEffect as useLayoutEffect18 } from "react";
29953
+ import { useContext as useContext47, useLayoutEffect as useLayoutEffect18 } from "react";
29864
29954
  import { jsx as jsx58 } from "react/jsx-runtime";
29865
- import { useContext as useContext311, useLayoutEffect as useLayoutEffect24, useMemo as useMemo213, useState as useState210 } from "react";
29955
+ import { useContext as useContext310, useLayoutEffect as useLayoutEffect24, useMemo as useMemo213, useState as useState210 } from "react";
29866
29956
  import React211 from "react";
29867
29957
  import {
29868
29958
  ALL_FORMATS as ALL_FORMATS2,
@@ -29878,8 +29968,8 @@ import { jsx as jsx216 } from "react/jsx-runtime";
29878
29968
  import { jsx as jsx315 } from "react/jsx-runtime";
29879
29969
  import { useMemo as useMemo63, useState as useState63 } from "react";
29880
29970
  import {
29881
- useContext as useContext47,
29882
- useEffect as useEffect212,
29971
+ useContext as useContext46,
29972
+ useEffect as useEffect210,
29883
29973
  useLayoutEffect as useLayoutEffect34,
29884
29974
  useMemo as useMemo412,
29885
29975
  useRef as useRef210,
@@ -30300,6 +30390,12 @@ var audioIteratorManager = ({
30300
30390
  let audioIteratorsCreated = 0;
30301
30391
  let totalAudioScheduledInSeconds = 0;
30302
30392
  let currentDelayHandle = null;
30393
+ const unblockCurrentDelayHandle = () => {
30394
+ if (currentDelayHandle) {
30395
+ currentDelayHandle.unblock();
30396
+ currentDelayHandle = null;
30397
+ }
30398
+ };
30303
30399
  const pendingScheduleWaiters = [];
30304
30400
  const notifyNodeScheduled = () => {
30305
30401
  for (let i = pendingScheduleWaiters.length - 1;i >= 0; i--) {
@@ -30400,6 +30496,7 @@ var audioIteratorManager = ({
30400
30496
  waitForTurn({
30401
30497
  getPriority: () => {
30402
30498
  if (iterator.isDestroyed()) {
30499
+ onDestroyed();
30403
30500
  return null;
30404
30501
  }
30405
30502
  const guessedNextTimestamp = iterator.guessNextTimestamp();
@@ -30452,9 +30549,11 @@ var audioIteratorManager = ({
30452
30549
  },
30453
30550
  onError: (e) => {
30454
30551
  if (e instanceof InputDisposedError) {
30552
+ onDestroyed();
30455
30553
  return;
30456
30554
  }
30457
30555
  if (e instanceof StaleWaiterError) {
30556
+ onDestroyed();
30458
30557
  return;
30459
30558
  }
30460
30559
  throw e;
@@ -30480,6 +30579,7 @@ var audioIteratorManager = ({
30480
30579
  return;
30481
30580
  }
30482
30581
  audioBufferIterator?.destroy();
30582
+ unblockCurrentDelayHandle();
30483
30583
  const delayHandle = delayPlaybackHandleIfNotPremounting();
30484
30584
  currentDelayHandle = delayHandle;
30485
30585
  const iterator = makeAudioIterator({
@@ -30494,6 +30594,7 @@ var audioIteratorManager = ({
30494
30594
  });
30495
30595
  audioIteratorsCreated++;
30496
30596
  audioBufferIterator = iterator;
30597
+ let chunksScheduled = 0;
30497
30598
  proceedScheduling({
30498
30599
  iterator,
30499
30600
  nonce,
@@ -30501,7 +30602,10 @@ var audioIteratorManager = ({
30501
30602
  playbackRate,
30502
30603
  scheduleAudioNode,
30503
30604
  onScheduled: () => {
30504
- delayHandle.unblock();
30605
+ chunksScheduled++;
30606
+ if (chunksScheduled === 6) {
30607
+ delayHandle.unblock();
30608
+ }
30505
30609
  },
30506
30610
  onDestroyed: () => {
30507
30611
  delayHandle.unblock();
@@ -30529,6 +30633,9 @@ var audioIteratorManager = ({
30529
30633
  fps,
30530
30634
  getAudioContextCurrentTimeMockedInTest
30531
30635
  }) => {
30636
+ if (nonce.isStale()) {
30637
+ return;
30638
+ }
30532
30639
  if (currentSeek.time === newTime && currentSeek.playbackRate === playbackRate && currentSeek.trimBefore === trimBefore && currentSeek.trimAfter === trimAfter && currentSeek.sequenceOffset === sequenceOffset && currentSeek.sequenceDurationInFrames === sequenceDurationInFrames && currentSeek.loop === loop && currentSeek.fps === fps) {
30533
30640
  return;
30534
30641
  }
@@ -30580,10 +30687,7 @@ var audioIteratorManager = ({
30580
30687
  destroyIterator: () => {
30581
30688
  audioBufferIterator?.destroy();
30582
30689
  audioBufferIterator = null;
30583
- if (currentDelayHandle) {
30584
- currentDelayHandle.unblock();
30585
- currentDelayHandle = null;
30586
- }
30690
+ unblockCurrentDelayHandle();
30587
30691
  },
30588
30692
  seek: seek2,
30589
30693
  getAudioIteratorsCreated: () => audioIteratorsCreated,
@@ -31631,7 +31735,7 @@ var useCommonEffects = ({
31631
31735
  logLevel,
31632
31736
  label: label3
31633
31737
  }) => {
31634
- const sharedAudioContext = useContext48(Internals.SharedAudioContext);
31738
+ const sharedAudioContext = useContext47(Internals.SharedAudioContext);
31635
31739
  useLayoutEffect18(() => {
31636
31740
  const mediaPlayer = mediaPlayerRef.current;
31637
31741
  if (!mediaPlayer)
@@ -31856,7 +31960,7 @@ var AudioForPreviewAssertedShowing = ({
31856
31960
  logLevel,
31857
31961
  label: "AudioForPreview"
31858
31962
  });
31859
- useEffect43(() => {
31963
+ useEffect44(() => {
31860
31964
  if (!sharedAudioContext)
31861
31965
  return;
31862
31966
  if (!sharedAudioContext.audioContext)
@@ -33907,7 +34011,7 @@ var AudioForRendering2 = ({
33907
34011
  const frame = useCurrentFrame();
33908
34012
  const absoluteFrame = Internals.useTimelinePosition();
33909
34013
  const videoConfig = Internals.useUnsafeVideoConfig();
33910
- const { registerRenderAsset, unregisterRenderAsset } = useContext311(Internals.RenderAssetManager);
34014
+ const { registerRenderAsset, unregisterRenderAsset } = useContext310(Internals.RenderAssetManager);
33911
34015
  const startsAt = Internals.useMediaStartsAt();
33912
34016
  const environment = useRemotionEnvironment();
33913
34017
  if (!videoConfig) {
@@ -33919,7 +34023,7 @@ var AudioForRendering2 = ({
33919
34023
  const { fps } = videoConfig;
33920
34024
  const { delayRender: delayRender2, continueRender } = useDelayRender();
33921
34025
  const [replaceWithHtml5Audio, setReplaceWithHtml5Audio] = useState210(false);
33922
- const sequenceContext = useContext311(Internals.SequenceContext);
34026
+ const sequenceContext = useContext310(Internals.SequenceContext);
33923
34027
  const id = useMemo213(() => `media-audio-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
33924
34028
  src,
33925
34029
  sequenceContext?.cumulatedFrom,
@@ -34272,7 +34376,7 @@ var VideoForPreviewAssertedShowing = ({
34272
34376
  const [shouldFallbackToNativeVideo, setShouldFallbackToNativeVideo] = useState43(false);
34273
34377
  const [playing] = Timeline2.usePlayingState();
34274
34378
  const { playbackRate: globalPlaybackRate } = Internals.usePlaybackRate();
34275
- const sharedAudioContext = useContext47(SharedAudioContext22);
34379
+ const sharedAudioContext = useContext46(SharedAudioContext22);
34276
34380
  const buffer = useBufferState();
34277
34381
  const [mediaMuted] = useMediaMutedState22();
34278
34382
  const [mediaVolume] = useMediaVolumeState22();
@@ -34293,7 +34397,7 @@ var VideoForPreviewAssertedShowing = ({
34293
34397
  effectChainStateRef.current = effectChainState;
34294
34398
  const frameRef = useRef210(frame);
34295
34399
  frameRef.current = frame;
34296
- const parentSequence = useContext47(SequenceContext22);
34400
+ const parentSequence = useContext46(SequenceContext22);
34297
34401
  const isPremounting = Boolean(parentSequence?.premounting);
34298
34402
  const isPostmounting = Boolean(parentSequence?.postmounting);
34299
34403
  const sequenceOffset = ((parentSequence?.cumulatedFrom ?? 0) + (parentSequence?.relativeFrom ?? 0)) / videoConfig.fps;
@@ -34301,7 +34405,7 @@ var VideoForPreviewAssertedShowing = ({
34301
34405
  const currentTimeRef = useRef210(currentTime);
34302
34406
  currentTimeRef.current = currentTime;
34303
34407
  const preloadedSrc = usePreload22(src);
34304
- const buffering = useContext47(Internals.BufferingContextReact);
34408
+ const buffering = useContext46(Internals.BufferingContextReact);
34305
34409
  if (!buffering) {
34306
34410
  throw new Error("useMediaPlayback must be used inside a <BufferingContext>");
34307
34411
  }
@@ -34353,7 +34457,7 @@ var VideoForPreviewAssertedShowing = ({
34353
34457
  cacheVideoFrame(src, canvas);
34354
34458
  };
34355
34459
  }, [_experimentalInitiallyDrawCachedFrame, src]);
34356
- useEffect212(() => {
34460
+ useEffect210(() => {
34357
34461
  if (!sharedAudioContext)
34358
34462
  return;
34359
34463
  if (!sharedAudioContext.audioContext)
@@ -35143,13 +35247,13 @@ var Video = Internals.wrapInSchema(VideoInner, videoSchema);
35143
35247
  Internals.addSequenceStackTraces(Video);
35144
35248
 
35145
35249
  // src/components/homepage/Demo/Comp.tsx
35146
- import { useCallback as useCallback41, useEffect as useEffect49, useMemo as useMemo58, useState as useState48 } from "react";
35250
+ import { useCallback as useCallback41, useEffect as useEffect50, useMemo as useMemo58, useState as useState48 } from "react";
35147
35251
 
35148
35252
  // src/components/homepage/Demo/Cards.tsx
35149
35253
  import {
35150
35254
  createRef as createRef4,
35151
35255
  useCallback as useCallback40,
35152
- useEffect as useEffect48,
35256
+ useEffect as useEffect49,
35153
35257
  useRef as useRef49,
35154
35258
  useState as useState47
35155
35259
  } from "react";
@@ -35517,14 +35621,14 @@ var CurrentCountry = ({ theme, countryPaths, countryLabel }) => {
35517
35621
  import {
35518
35622
  forwardRef as forwardRef35,
35519
35623
  useCallback as useCallback39,
35520
- useEffect as useEffect47,
35624
+ useEffect as useEffect48,
35521
35625
  useImperativeHandle as useImperativeHandle12,
35522
35626
  useRef as useRef48
35523
35627
  } from "react";
35524
35628
 
35525
35629
  // ../lottie/dist/esm/index.mjs
35526
35630
  import lottie from "lottie-web";
35527
- import { useEffect as useEffect45, useRef as useRef47, useState as useState44 } from "react";
35631
+ import { useEffect as useEffect46, useRef as useRef47, useState as useState44 } from "react";
35528
35632
  import { jsx as jsx69 } from "react/jsx-runtime";
35529
35633
  var getLottieMetadata = (animationData) => {
35530
35634
  const width2 = animationData.w;
@@ -35600,14 +35704,14 @@ var Lottie = ({
35600
35704
  onAnimationLoadedRef.current = onAnimationLoaded;
35601
35705
  const { delayRender: delayRender2, continueRender } = useDelayRender();
35602
35706
  const [handle] = useState44(() => delayRender2("Waiting for Lottie animation to load"));
35603
- useEffect45(() => {
35707
+ useEffect46(() => {
35604
35708
  return () => {
35605
35709
  continueRender(handle);
35606
35710
  };
35607
35711
  }, [handle, continueRender]);
35608
35712
  const frame = useCurrentFrame();
35609
35713
  currentFrameRef.current = frame;
35610
- useEffect45(() => {
35714
+ useEffect46(() => {
35611
35715
  if (!containerRef.current) {
35612
35716
  return;
35613
35717
  }
@@ -35652,17 +35756,17 @@ var Lottie = ({
35652
35756
  renderer,
35653
35757
  continueRender
35654
35758
  ]);
35655
- useEffect45(() => {
35759
+ useEffect46(() => {
35656
35760
  if (animationRef.current && direction) {
35657
35761
  animationRef.current.setDirection(direction === "backward" ? -1 : 1);
35658
35762
  }
35659
35763
  }, [direction]);
35660
- useEffect45(() => {
35764
+ useEffect46(() => {
35661
35765
  if (animationRef.current && playbackRate) {
35662
35766
  animationRef.current.setSpeed(playbackRate);
35663
35767
  }
35664
35768
  }, [playbackRate]);
35665
- useEffect45(() => {
35769
+ useEffect46(() => {
35666
35770
  if (!animationRef.current) {
35667
35771
  return;
35668
35772
  }
@@ -35695,7 +35799,7 @@ var Lottie = ({
35695
35799
  };
35696
35800
 
35697
35801
  // src/components/homepage/Demo/DisplayedEmoji.tsx
35698
- import { useEffect as useEffect46, useMemo as useMemo56, useState as useState46 } from "react";
35802
+ import { useEffect as useEffect47, useMemo as useMemo56, useState as useState46 } from "react";
35699
35803
  import { jsx as jsx70 } from "react/jsx-runtime";
35700
35804
  var DisplayedEmoji = ({ emoji }) => {
35701
35805
  const [data, setData] = useState46(null);
@@ -35715,7 +35819,7 @@ var DisplayedEmoji = ({ emoji }) => {
35715
35819
  throw new Error("Unknown emoji");
35716
35820
  }, [emoji]);
35717
35821
  const [handle] = useState46(() => delayRender2("Loading emojis!"));
35718
- useEffect46(() => {
35822
+ useEffect47(() => {
35719
35823
  fetch(src).then((res) => res.json()).then((json) => {
35720
35824
  setData({
35721
35825
  duration: getLottieMetadata(json)?.durationInSeconds,
@@ -35726,7 +35830,7 @@ var DisplayedEmoji = ({ emoji }) => {
35726
35830
  cancelRender2(err);
35727
35831
  });
35728
35832
  }, [handle, src, continueRender, cancelRender2]);
35729
- useEffect46(() => {
35833
+ useEffect47(() => {
35730
35834
  if (typeof document !== "undefined") {
35731
35835
  setBrowser(true);
35732
35836
  }
@@ -35822,7 +35926,7 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
35822
35926
  transforms: transforms.current
35823
35927
  });
35824
35928
  }, []);
35825
- useEffect47(() => {
35929
+ useEffect48(() => {
35826
35930
  if (!ref1.current || !ref2.current || !ref3.current) {
35827
35931
  return;
35828
35932
  }
@@ -35839,7 +35943,7 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
35839
35943
  onRight
35840
35944
  };
35841
35945
  }, [onLeft, onRight]);
35842
- useEffect47(() => {
35946
+ useEffect48(() => {
35843
35947
  if (!ref1.current || !ref2.current || !ref3.current) {
35844
35948
  return;
35845
35949
  }
@@ -36254,7 +36358,7 @@ var Cards = ({
36254
36358
  const positions = useRef49(getInitialPositions());
36255
36359
  const shouldBePositions = useRef49(getInitialPositions());
36256
36360
  const { isRendering } = useRemotionEnvironment();
36257
- useEffect48(() => {
36361
+ useEffect49(() => {
36258
36362
  const { current } = container4;
36259
36363
  if (!current) {
36260
36364
  return;
@@ -36367,7 +36471,7 @@ var HomepageVideoComp = ({
36367
36471
  }
36368
36472
  return sadAudio;
36369
36473
  }, [emoji]);
36370
- useEffect49(() => {
36474
+ useEffect50(() => {
36371
36475
  const a = prefetch(fireAudio);
36372
36476
  const b = prefetch(partyHornAudio);
36373
36477
  const c = prefetch(sadAudio);
@@ -36443,7 +36547,7 @@ import {
36443
36547
  import { BufferTarget, StreamTarget } from "mediabunny";
36444
36548
 
36445
36549
  // ../core/dist/esm/version.mjs
36446
- var VERSION2 = "4.0.458";
36550
+ var VERSION2 = "4.0.460";
36447
36551
 
36448
36552
  // ../web-renderer/dist/esm/index.mjs
36449
36553
  import { AudioSample, VideoSample } from "mediabunny";
@@ -41449,10 +41553,10 @@ var DragAndDropNudge = () => {
41449
41553
  };
41450
41554
 
41451
41555
  // src/components/homepage/Demo/PlayerSeekBar.tsx
41452
- import { useCallback as useCallback46, useEffect as useEffect51, useMemo as useMemo61, useRef as useRef50, useState as useState51 } from "react";
41556
+ import { useCallback as useCallback46, useEffect as useEffect53, useMemo as useMemo61, useRef as useRef50, useState as useState51 } from "react";
41453
41557
 
41454
41558
  // src/components/homepage/layout/use-el-size.ts
41455
- import { useCallback as useCallback45, useEffect as useEffect50, useMemo as useMemo60, useState as useState50 } from "react";
41559
+ import { useCallback as useCallback45, useEffect as useEffect51, useMemo as useMemo60, useState as useState50 } from "react";
41456
41560
  var useElementSize2 = (ref) => {
41457
41561
  const [size4, setSize] = useState50(null);
41458
41562
  const observer = useMemo60(() => {
@@ -41476,7 +41580,7 @@ var useElementSize2 = (ref) => {
41476
41580
  height: rect[0].height
41477
41581
  });
41478
41582
  }, [ref]);
41479
- useEffect50(() => {
41583
+ useEffect51(() => {
41480
41584
  updateSize();
41481
41585
  if (!observer) {
41482
41586
  return;
@@ -41532,7 +41636,7 @@ var findBodyInWhichDivIsLocated2 = (div) => {
41532
41636
  };
41533
41637
  var useHoverState2 = (ref, hideControlsWhenPointerDoesntMove) => {
41534
41638
  const [hovered, setHovered] = useState51(false);
41535
- useEffect51(() => {
41639
+ useEffect53(() => {
41536
41640
  const { current } = ref;
41537
41641
  if (!current) {
41538
41642
  return;
@@ -41583,7 +41687,7 @@ var PlayerSeekBar2 = ({
41583
41687
  const size4 = useElementSize2(containerRef.current);
41584
41688
  const [playing, setPlaying] = useState51(false);
41585
41689
  const [frame, setFrame] = useState51(0);
41586
- useEffect51(() => {
41690
+ useEffect53(() => {
41587
41691
  const { current } = playerRef;
41588
41692
  if (!current) {
41589
41693
  return;
@@ -41596,7 +41700,7 @@ var PlayerSeekBar2 = ({
41596
41700
  current.removeEventListener("frameupdate", onFrameUpdate);
41597
41701
  };
41598
41702
  }, [playerRef]);
41599
- useEffect51(() => {
41703
+ useEffect53(() => {
41600
41704
  const { current } = playerRef;
41601
41705
  if (!current) {
41602
41706
  return;
@@ -41657,7 +41761,7 @@ var PlayerSeekBar2 = ({
41657
41761
  }
41658
41762
  onSeekEnd();
41659
41763
  }, [dragging, onSeekEnd, playerRef]);
41660
- useEffect51(() => {
41764
+ useEffect53(() => {
41661
41765
  if (!dragging.dragging) {
41662
41766
  return;
41663
41767
  }
@@ -41727,7 +41831,7 @@ var PlayerSeekBar2 = ({
41727
41831
  };
41728
41832
 
41729
41833
  // src/components/homepage/Demo/PlayerVolume.tsx
41730
- import { useCallback as useCallback47, useEffect as useEffect53, useRef as useRef51, useState as useState54 } from "react";
41834
+ import { useCallback as useCallback47, useEffect as useEffect55, useRef as useRef51, useState as useState54 } from "react";
41731
41835
 
41732
41836
  // src/components/homepage/Demo/icons.tsx
41733
41837
  import { jsx as jsx101 } from "react/jsx-runtime";
@@ -41788,7 +41892,7 @@ var PlayerVolume = ({ playerRef }) => {
41788
41892
  const [muted, setIsMuted] = useState54(() => playerRef.current?.isMuted() ?? true);
41789
41893
  const [isHovered, setIsHovered] = useState54(false);
41790
41894
  const timerRef = useRef51(null);
41791
- useEffect53(() => {
41895
+ useEffect55(() => {
41792
41896
  const { current } = playerRef;
41793
41897
  if (!current) {
41794
41898
  return;
@@ -41801,7 +41905,7 @@ var PlayerVolume = ({ playerRef }) => {
41801
41905
  current.removeEventListener("mutechange", onMutedChange);
41802
41906
  };
41803
41907
  }, [playerRef]);
41804
- useEffect53(() => {
41908
+ useEffect55(() => {
41805
41909
  if (isHovered) {
41806
41910
  document.body.style.userSelect = "none";
41807
41911
  } else {
@@ -41846,7 +41950,7 @@ var PlayerVolume = ({ playerRef }) => {
41846
41950
  };
41847
41951
 
41848
41952
  // src/components/homepage/Demo/PlayPauseButton.tsx
41849
- import React71, { useCallback as useCallback48, useEffect as useEffect55 } from "react";
41953
+ import React71, { useCallback as useCallback48, useEffect as useEffect56 } from "react";
41850
41954
  import { jsx as jsx107 } from "react/jsx-runtime";
41851
41955
  var playerButtonStyle2 = {
41852
41956
  appearance: "none",
@@ -41864,7 +41968,7 @@ var playerButtonStyle2 = {
41864
41968
  };
41865
41969
  var PlayPauseButton = ({ playerRef }) => {
41866
41970
  const [playing, setPlaying] = React71.useState(true);
41867
- useEffect55(() => {
41971
+ useEffect56(() => {
41868
41972
  const { current } = playerRef;
41869
41973
  if (!current) {
41870
41974
  return;
@@ -41901,7 +42005,7 @@ var PlayPauseButton = ({ playerRef }) => {
41901
42005
  };
41902
42006
 
41903
42007
  // src/components/homepage/Demo/TimeDisplay.tsx
41904
- import React73, { useEffect as useEffect56 } from "react";
42008
+ import React73, { useEffect as useEffect57 } from "react";
41905
42009
  import { jsx as jsx108 } from "react/jsx-runtime";
41906
42010
  var formatTime2 = (timeInSeconds) => {
41907
42011
  const minutes = Math.floor(timeInSeconds / 60);
@@ -41910,7 +42014,7 @@ var formatTime2 = (timeInSeconds) => {
41910
42014
  };
41911
42015
  var TimeDisplay = ({ fps, playerRef }) => {
41912
42016
  const [time, setTime] = React73.useState(0);
41913
- useEffect56(() => {
42017
+ useEffect57(() => {
41914
42018
  const { current } = playerRef;
41915
42019
  if (!current) {
41916
42020
  return;
@@ -42081,7 +42185,7 @@ var Demo = () => {
42081
42185
  const [cardOrder, setCardOrder] = useState56([0, 1, 2, 3]);
42082
42186
  const [emojiIndex, setEmojiIndex] = useState56(0);
42083
42187
  const [error2, setError] = useState56(false);
42084
- useEffect57(() => {
42188
+ useEffect58(() => {
42085
42189
  getDataAndProps().then((d2) => {
42086
42190
  setData(d2);
42087
42191
  }).catch((err) => {
@@ -42089,7 +42193,7 @@ var Demo = () => {
42089
42193
  setError(true);
42090
42194
  });
42091
42195
  }, []);
42092
- useEffect57(() => {
42196
+ useEffect58(() => {
42093
42197
  const { current: playerRef } = ref;
42094
42198
  if (!playerRef || !data2) {
42095
42199
  return;
@@ -42234,16 +42338,16 @@ var ClearButton = (props) => {
42234
42338
 
42235
42339
  // src/components/homepage/MuxVideo.tsx
42236
42340
  import Hls2 from "hls.js";
42237
- import { forwardRef as forwardRef38, useEffect as useEffect59, useImperativeHandle as useImperativeHandle14, useRef as useRef56 } from "react";
42341
+ import { forwardRef as forwardRef38, useEffect as useEffect60, useImperativeHandle as useImperativeHandle14, useRef as useRef56 } from "react";
42238
42342
 
42239
42343
  // src/components/homepage/VideoPlayerWithControls.tsx
42240
42344
  import Hls from "hls.js";
42241
42345
  import"plyr/dist/plyr.css";
42242
- import { forwardRef as forwardRef37, useCallback as useCallback50, useEffect as useEffect58, useRef as useRef55, useState as useState57 } from "react";
42346
+ import { forwardRef as forwardRef37, useCallback as useCallback50, useEffect as useEffect59, useRef as useRef55, useState as useState57 } from "react";
42243
42347
  import { jsx as jsx116 } from "react/jsx-runtime";
42244
42348
  var useCombinedRefs = function(...refs) {
42245
42349
  const targetRef = useRef55(null);
42246
- useEffect58(() => {
42350
+ useEffect59(() => {
42247
42351
  refs.forEach((ref) => {
42248
42352
  if (!ref)
42249
42353
  return;
@@ -42272,12 +42376,12 @@ var VideoPlayerWithControls = forwardRef37(({ playbackId, poster, currentTime, o
42272
42376
  console.error("Error getting img dimensions", event);
42273
42377
  }
42274
42378
  }, [onLoaded, onSize]);
42275
- useEffect58(() => {
42379
+ useEffect59(() => {
42276
42380
  const img = new Image;
42277
42381
  img.onload = (evt) => onImageLoad(evt);
42278
42382
  img.src = poster;
42279
42383
  }, [onImageLoad, poster]);
42280
- useEffect58(() => {
42384
+ useEffect59(() => {
42281
42385
  const video = videoRef.current;
42282
42386
  const src = `https://stream.mux.com/${playbackId}.m3u8`;
42283
42387
  let hls;
@@ -42320,7 +42424,7 @@ var VideoPlayerWithControls = forwardRef37(({ playbackId, poster, currentTime, o
42320
42424
  }
42321
42425
  };
42322
42426
  }, [playbackId, playerInitTime, videoError, videoRef]);
42323
- useEffect58(() => {
42427
+ useEffect59(() => {
42324
42428
  const video = videoRef.current;
42325
42429
  if (currentTime && video) {
42326
42430
  video.currentTime = currentTime;
@@ -42347,7 +42451,7 @@ var MuxVideoForward = ({ muxId, ...props }, ref) => {
42347
42451
  const videoRef = useRef56(null);
42348
42452
  const vidUrl = getVideoToPlayUrl(muxId);
42349
42453
  useImperativeHandle14(ref, () => videoRef.current, []);
42350
- useEffect59(() => {
42454
+ useEffect60(() => {
42351
42455
  let hls;
42352
42456
  if (videoRef.current) {
42353
42457
  const { current } = videoRef;
@@ -42460,11 +42564,11 @@ var EditorStarterSection = () => {
42460
42564
  var EditorStarterSection_default = EditorStarterSection;
42461
42565
 
42462
42566
  // src/components/homepage/EvaluateRemotion.tsx
42463
- import { useEffect as useEffect60, useState as useState58 } from "react";
42567
+ import { useEffect as useEffect61, useState as useState58 } from "react";
42464
42568
  import { jsx as jsx119, jsxs as jsxs40 } from "react/jsx-runtime";
42465
42569
  var EvaluateRemotionSection = () => {
42466
42570
  const [dailyAvatars, setDailyAvatars] = useState58([]);
42467
- useEffect60(() => {
42571
+ useEffect61(() => {
42468
42572
  const avatars = experts.map((expert) => expert.image);
42469
42573
  const selectedAvatars = [];
42470
42574
  for (let i = 0;i < 3; i++) {
@@ -42561,7 +42665,7 @@ var EvaluateRemotionSection = () => {
42561
42665
  var EvaluateRemotion_default = EvaluateRemotionSection;
42562
42666
 
42563
42667
  // src/components/homepage/IfYouKnowReact.tsx
42564
- import { useEffect as useEffect61, useState as useState59 } from "react";
42668
+ import { useEffect as useEffect63, useState as useState59 } from "react";
42565
42669
  import { jsx as jsx120, jsxs as jsxs41 } from "react/jsx-runtime";
42566
42670
  var isWebkit = () => {
42567
42671
  if (typeof window === "undefined") {
@@ -42577,7 +42681,7 @@ var icon2 = {
42577
42681
  };
42578
42682
  var IfYouKnowReact = () => {
42579
42683
  const [vid, setVid] = useState59("/img/compose.webm");
42580
- useEffect61(() => {
42684
+ useEffect63(() => {
42581
42685
  if (isWebkit()) {
42582
42686
  setVid("/img/compose.mp4");
42583
42687
  }
@@ -42724,7 +42828,7 @@ var NewsletterButton = () => {
42724
42828
  };
42725
42829
 
42726
42830
  // src/components/homepage/ParameterizeAndEdit.tsx
42727
- import { useEffect as useEffect63, useRef as useRef57, useState as useState61 } from "react";
42831
+ import { useEffect as useEffect65, useRef as useRef57, useState as useState61 } from "react";
42728
42832
  import { jsx as jsx124, jsxs as jsxs46 } from "react/jsx-runtime";
42729
42833
  var icon3 = {
42730
42834
  height: 16,
@@ -42733,7 +42837,7 @@ var icon3 = {
42733
42837
  var ParameterizeAndEdit = () => {
42734
42838
  const ref = useRef57(null);
42735
42839
  const [vid, setVid] = useState61("/img/editing-vp9-chrome.webm");
42736
- useEffect63(() => {
42840
+ useEffect65(() => {
42737
42841
  if (isWebkit()) {
42738
42842
  setVid("/img/editing-safari.mp4");
42739
42843
  }
@@ -42847,7 +42951,7 @@ var ParameterizeAndEdit = () => {
42847
42951
  };
42848
42952
 
42849
42953
  // src/components/homepage/RealMp4Videos.tsx
42850
- import { useEffect as useEffect65, useRef as useRef58, useState as useState64 } from "react";
42954
+ import { useEffect as useEffect66, useRef as useRef58, useState as useState64 } from "react";
42851
42955
  import { jsx as jsx126, jsxs as jsxs47 } from "react/jsx-runtime";
42852
42956
  var icon4 = {
42853
42957
  height: 16,
@@ -42857,12 +42961,12 @@ var RealMP4Videos = () => {
42857
42961
  const ref = useRef58(null);
42858
42962
  const videoRef = useRef58(null);
42859
42963
  const [vid, setVid] = useState64("/img/render-progress.webm");
42860
- useEffect65(() => {
42964
+ useEffect66(() => {
42861
42965
  if (isWebkit()) {
42862
42966
  setVid("/img/render-progress.mp4");
42863
42967
  }
42864
42968
  }, []);
42865
- useEffect65(() => {
42969
+ useEffect66(() => {
42866
42970
  const { current } = ref;
42867
42971
  if (!current) {
42868
42972
  return;
@@ -43431,6 +43535,7 @@ var listOfRemotionPackages = [
43431
43535
  "@remotion/studio",
43432
43536
  "@remotion/tailwind",
43433
43537
  "@remotion/tailwind-v4",
43538
+ "@remotion/timeline-utils",
43434
43539
  "@remotion/test-utils",
43435
43540
  "@remotion/three",
43436
43541
  "@remotion/transitions",
@@ -44707,7 +44812,7 @@ var GithubButton = () => {
44707
44812
  " ",
44708
44813
  /* @__PURE__ */ jsx164("div", {
44709
44814
  className: "text-xs inline-block ml-2 leading-none mt-[3px] self-center",
44710
- children: "45k"
44815
+ children: "46k"
44711
44816
  })
44712
44817
  ]
44713
44818
  });