@remotion/promo-pages 4.0.463 → 4.0.464

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
@@ -1,15 +1,26 @@
1
+ var __create = Object.create;
2
+ var __getProtoOf = Object.getPrototypeOf;
1
3
  var __defProp = Object.defineProperty;
2
- var __returnValue = (v) => v;
3
- function __exportSetter(name, newValue) {
4
- this[name] = __returnValue.bind(null, newValue);
5
- }
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __toESM = (mod, isNodeMode, target) => {
7
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
8
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
9
+ for (let key of __getOwnPropNames(mod))
10
+ if (!__hasOwnProp.call(to, key))
11
+ __defProp(to, key, {
12
+ get: () => mod[key],
13
+ enumerable: true
14
+ });
15
+ return to;
16
+ };
6
17
  var __export = (target, all) => {
7
18
  for (var name in all)
8
19
  __defProp(target, name, {
9
20
  get: all[name],
10
21
  enumerable: true,
11
22
  configurable: true,
12
- set: __exportSetter.bind(all, name)
23
+ set: (newValue) => all[name] = () => newValue
13
24
  });
14
25
  };
15
26
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
@@ -900,7 +911,7 @@ var experts = [
900
911
  }
901
912
  ];
902
913
  // src/components/experts/ExpertsPage.tsx
903
- import { useMemo as useMemo38 } from "react";
914
+ import { useMemo as useMemo39 } from "react";
904
915
 
905
916
  // ../core/dist/esm/index.mjs
906
917
  import { createContext } from "react";
@@ -930,13 +941,6 @@ import * as React6 from "react";
930
941
  import React7, { useMemo as useMemo6, useRef as useRef2 } from "react";
931
942
  import { useContext as useContext8, useMemo as useMemo7 } from "react";
932
943
  import { jsx as jsx7 } from "react/jsx-runtime";
933
- import {
934
- forwardRef as forwardRef4,
935
- useCallback as useCallback6,
936
- useEffect as useEffect5,
937
- useMemo as useMemo16,
938
- useState as useState6
939
- } from "react";
940
944
  import {
941
945
  forwardRef as forwardRef3,
942
946
  useContext as useContext17,
@@ -944,6 +948,7 @@ import {
944
948
  useMemo as useMemo14,
945
949
  useState as useState5
946
950
  } from "react";
951
+ import { useRef as useRef6 } from "react";
947
952
  import { useContext as useContext14, useMemo as useMemo11 } from "react";
948
953
  import { createContext as createContext12 } from "react";
949
954
  import { useContext as useContext10, useMemo as useMemo9 } from "react";
@@ -966,18 +971,25 @@ import React12, { forwardRef as forwardRef2, useState as useState4, useContext a
966
971
  import { useContext as useContext15, useRef as useRef5 } from "react";
967
972
  import { createContext as createContext15 } from "react";
968
973
  import { jsx as jsx11 } from "react/jsx-runtime";
969
- import { useEffect as useEffect4, useMemo as useMemo15, useRef as useRef6 } from "react";
974
+ import {
975
+ forwardRef as forwardRef4,
976
+ useEffect as useEffect5,
977
+ useImperativeHandle as useImperativeHandle2,
978
+ useLayoutEffect as useLayoutEffect2,
979
+ useRef as useRef9,
980
+ useState as useState6
981
+ } from "react";
982
+ import React14, { useCallback as useCallback6, useImperativeHandle, useMemo as useMemo16, useRef as useRef8 } from "react";
983
+ import { useEffect as useEffect4, useMemo as useMemo15, useRef as useRef7 } from "react";
970
984
  import { jsx as jsx12 } from "react/jsx-runtime";
985
+ import { jsx as jsx13 } from "react/jsx-runtime";
971
986
  import {
972
987
  forwardRef as forwardRef5,
988
+ useCallback as useCallback7,
973
989
  useEffect as useEffect6,
974
- useImperativeHandle as useImperativeHandle2,
975
- useLayoutEffect as useLayoutEffect2,
976
- useRef as useRef8,
990
+ useMemo as useMemo17,
977
991
  useState as useState7
978
992
  } from "react";
979
- import React15, { useCallback as useCallback7, useImperativeHandle, useRef as useRef7 } from "react";
980
- import { jsx as jsx13 } from "react/jsx-runtime";
981
993
  import { jsx as jsx14 } from "react/jsx-runtime";
982
994
  import {
983
995
  createContext as createContext16,
@@ -985,78 +997,78 @@ import {
985
997
  useCallback as useCallback8,
986
998
  useContext as useContext18,
987
999
  useLayoutEffect as useLayoutEffect3,
988
- useMemo as useMemo17,
989
- useRef as useRef9,
990
- useState as useState8
1000
+ useMemo as useMemo18,
1001
+ useRef as useRef10
991
1002
  } from "react";
992
1003
  import { jsx as jsx15 } from "react/jsx-runtime";
993
- import { useContext as useContext19, useLayoutEffect as useLayoutEffect5, useState as useState10 } from "react";
1004
+ import { useContext as useContext19, useLayoutEffect as useLayoutEffect5, useState as useState9 } from "react";
994
1005
  import {
995
1006
  createContext as createContext17,
996
1007
  useCallback as useCallback9,
997
1008
  useImperativeHandle as useImperativeHandle3,
998
1009
  useLayoutEffect as useLayoutEffect4,
999
- useMemo as useMemo18,
1000
- useRef as useRef10,
1001
- useState as useState9
1010
+ useMemo as useMemo19,
1011
+ useRef as useRef11,
1012
+ useState as useState8
1002
1013
  } from "react";
1003
1014
  import { jsx as jsx16 } from "react/jsx-runtime";
1004
- import { forwardRef as forwardRef9, useCallback as useCallback14, useContext as useContext31 } from "react";
1005
- import React17, { createContext as createContext18, useMemo as useMemo19 } from "react";
1015
+ import { forwardRef as forwardRef9, useCallback as useCallback15, useContext as useContext31 } from "react";
1016
+ import React17, { createContext as createContext18, useMemo as useMemo20 } from "react";
1006
1017
  import { jsx as jsx17 } from "react/jsx-runtime";
1007
1018
  import { useContext as useContext20 } from "react";
1008
- import { createContext as createContext19, useEffect as useEffect7, useState as useState11 } from "react";
1019
+ import { createContext as createContext19, useEffect as useEffect7, useState as useState10 } from "react";
1009
1020
  import { jsx as jsx18 } from "react/jsx-runtime";
1010
- import { createContext as createContext20, useMemo as useMemo20, useReducer } from "react";
1021
+ import { createContext as createContext20, useMemo as useMemo21, useReducer } from "react";
1011
1022
  import { jsx as jsx19 } from "react/jsx-runtime";
1023
+ import { useCallback as useCallback14 } from "react";
1012
1024
  import React23, {
1013
1025
  forwardRef as forwardRef7,
1014
1026
  useContext as useContext29,
1015
1027
  useEffect as useEffect14,
1016
1028
  useImperativeHandle as useImperativeHandle4,
1017
- useMemo as useMemo28,
1018
- useRef as useRef18,
1019
- useState as useState16
1029
+ useMemo as useMemo29,
1030
+ useRef as useRef19,
1031
+ useState as useState15
1020
1032
  } from "react";
1021
- import { useContext as useContext22, useLayoutEffect as useLayoutEffect6, useRef as useRef13 } from "react";
1033
+ import { useContext as useContext22, useLayoutEffect as useLayoutEffect6, useRef as useRef14 } from "react";
1022
1034
  import React20, {
1023
1035
  createContext as createContext21,
1024
1036
  createRef as createRef2,
1025
1037
  useCallback as useCallback10,
1026
1038
  useContext as useContext21,
1027
- useMemo as useMemo22,
1028
- useRef as useRef11,
1029
- useState as useState12
1039
+ useMemo as useMemo23,
1040
+ useRef as useRef12,
1041
+ useState as useState11
1030
1042
  } from "react";
1031
- import { useMemo as useMemo21 } from "react";
1043
+ import { useMemo as useMemo22 } from "react";
1032
1044
  import { jsx as jsx20, jsxs as jsxs22 } from "react/jsx-runtime";
1033
- import { useRef as useRef12 } from "react";
1034
- import { useContext as useContext24, useEffect as useEffect8, useMemo as useMemo23, useState as useState13 } from "react";
1045
+ import { useRef as useRef13 } from "react";
1046
+ import { useContext as useContext24, useEffect as useEffect8, useMemo as useMemo24, useState as useState12 } from "react";
1035
1047
  import { useContext as useContext23 } from "react";
1036
1048
  import {
1037
1049
  useCallback as useCallback13,
1038
1050
  useContext as useContext27,
1039
1051
  useEffect as useEffect12,
1040
1052
  useLayoutEffect as useLayoutEffect8,
1041
- useRef as useRef17
1053
+ useRef as useRef18
1042
1054
  } from "react";
1043
- import { useCallback as useCallback12, useMemo as useMemo26, useRef as useRef15 } from "react";
1044
- import { useContext as useContext26, useMemo as useMemo25 } from "react";
1055
+ import { useCallback as useCallback12, useMemo as useMemo27, useRef as useRef16 } from "react";
1056
+ import { useContext as useContext26, useMemo as useMemo26 } from "react";
1045
1057
  import React21, {
1046
1058
  useCallback as useCallback11,
1047
1059
  useContext as useContext25,
1048
1060
  useEffect as useEffect9,
1049
1061
  useLayoutEffect as useLayoutEffect7,
1050
- useMemo as useMemo24,
1051
- useRef as useRef14,
1052
- useState as useState14
1062
+ useMemo as useMemo25,
1063
+ useRef as useRef15,
1064
+ useState as useState13
1053
1065
  } from "react";
1054
1066
  import { jsx as jsx21 } from "react/jsx-runtime";
1055
1067
  import React22 from "react";
1056
- import { useEffect as useEffect10, useState as useState15 } from "react";
1057
- import { useEffect as useEffect11, useRef as useRef16 } from "react";
1068
+ import { useEffect as useEffect10, useState as useState14 } from "react";
1069
+ import { useEffect as useEffect11, useRef as useRef17 } from "react";
1058
1070
  import { useEffect as useEffect13 } from "react";
1059
- import { createContext as createContext22, useContext as useContext28, useMemo as useMemo27 } from "react";
1071
+ import { createContext as createContext22, useContext as useContext28, useMemo as useMemo28 } from "react";
1060
1072
  import { jsx as jsx222 } from "react/jsx-runtime";
1061
1073
  import {
1062
1074
  forwardRef as forwardRef8,
@@ -1064,47 +1076,47 @@ import {
1064
1076
  useEffect as useEffect15,
1065
1077
  useImperativeHandle as useImperativeHandle5,
1066
1078
  useLayoutEffect as useLayoutEffect9,
1067
- useMemo as useMemo29,
1068
- useRef as useRef19
1079
+ useMemo as useMemo30,
1080
+ useRef as useRef20
1069
1081
  } from "react";
1070
1082
  import { jsx as jsx23 } from "react/jsx-runtime";
1071
1083
  import { jsx as jsx24 } from "react/jsx-runtime";
1072
- import { forwardRef as forwardRef10, useCallback as useCallback15, useState as useState17 } from "react";
1084
+ import { forwardRef as forwardRef10, useCallback as useCallback16, useState as useState16 } from "react";
1073
1085
  import { jsx as jsx25 } from "react/jsx-runtime";
1074
1086
  import {
1075
- useCallback as useCallback16,
1087
+ useCallback as useCallback17,
1076
1088
  useContext as useContext32,
1077
1089
  useImperativeHandle as useImperativeHandle6,
1078
1090
  useLayoutEffect as useLayoutEffect10,
1079
- useRef as useRef20,
1080
- useState as useState18
1091
+ useRef as useRef21,
1092
+ useState as useState17
1081
1093
  } from "react";
1082
1094
  import { jsx as jsx26 } from "react/jsx-runtime";
1083
1095
  import { createRef as createRef3 } from "react";
1084
1096
  import React28 from "react";
1085
1097
  import {
1086
- useCallback as useCallback17,
1098
+ useCallback as useCallback18,
1087
1099
  useImperativeHandle as useImperativeHandle7,
1088
- useMemo as useMemo30,
1089
- useRef as useRef21,
1090
- useState as useState19
1100
+ useMemo as useMemo31,
1101
+ useRef as useRef22,
1102
+ useState as useState18
1091
1103
  } from "react";
1092
1104
  import { jsx as jsx27 } from "react/jsx-runtime";
1093
1105
  import React29 from "react";
1094
- import { useMemo as useMemo32 } from "react";
1095
- import { createContext as createContext23, useContext as useContext33, useMemo as useMemo31 } from "react";
1106
+ import { useMemo as useMemo33 } from "react";
1107
+ import { createContext as createContext23, useContext as useContext33, useMemo as useMemo32 } from "react";
1096
1108
  import { jsx as jsx28 } from "react/jsx-runtime";
1097
1109
  import { jsx as jsx29 } from "react/jsx-runtime";
1098
1110
  import React31 from "react";
1099
1111
  import React32, { createContext as createContext24 } from "react";
1100
- import { useCallback as useCallback19 } from "react";
1112
+ import { useCallback as useCallback21 } from "react";
1101
1113
  import {
1102
- useCallback as useCallback18,
1114
+ useCallback as useCallback19,
1103
1115
  useContext as useContext34,
1104
1116
  useEffect as useEffect16,
1105
1117
  useLayoutEffect as useLayoutEffect11,
1106
- useMemo as useMemo33,
1107
- useState as useState20
1118
+ useMemo as useMemo34,
1119
+ useState as useState19
1108
1120
  } from "react";
1109
1121
  import { jsx as jsx30 } from "react/jsx-runtime";
1110
1122
  import React34, {
@@ -1112,45 +1124,42 @@ import React34, {
1112
1124
  useContext as useContext35,
1113
1125
  useEffect as useEffect18,
1114
1126
  useImperativeHandle as useImperativeHandle8,
1115
- useMemo as useMemo34,
1116
- useRef as useRef22,
1117
- useState as useState21
1127
+ useMemo as useMemo35,
1128
+ useRef as useRef23,
1129
+ useState as useState20,
1130
+ useCallback as useCallback20
1118
1131
  } from "react";
1119
1132
  import { useEffect as useEffect17 } from "react";
1120
1133
  import { jsx as jsx31 } from "react/jsx-runtime";
1121
1134
  import { jsx as jsx32 } from "react/jsx-runtime";
1122
- import React36, { useMemo as useMemo35 } from "react";
1135
+ import React36, { useMemo as useMemo36 } from "react";
1123
1136
  import { jsx as jsx33 } from "react/jsx-runtime";
1124
- import { Children, forwardRef as forwardRef12, useMemo as useMemo36 } from "react";
1137
+ import { Children, forwardRef as forwardRef12, useMemo as useMemo37 } from "react";
1125
1138
  import React37 from "react";
1126
1139
  import React38, { createContext as createContext25 } from "react";
1127
1140
  import { jsx as jsx34 } from "react/jsx-runtime";
1128
1141
  import { jsx as jsx35 } from "react/jsx-runtime";
1129
1142
  import React40 from "react";
1130
- import { forwardRef as forwardRef14, useCallback as useCallback20, useContext as useContext37 } from "react";
1143
+ import { forwardRef as forwardRef14, useCallback as useCallback22, useContext as useContext37 } from "react";
1131
1144
  import {
1132
1145
  forwardRef as forwardRef13,
1133
1146
  useContext as useContext36,
1134
1147
  useEffect as useEffect19,
1135
1148
  useImperativeHandle as useImperativeHandle9,
1136
1149
  useLayoutEffect as useLayoutEffect12,
1137
- useMemo as useMemo37,
1138
- useRef as useRef23
1150
+ useMemo as useMemo38,
1151
+ useRef as useRef24
1139
1152
  } from "react";
1140
1153
  import { jsx as jsx36 } from "react/jsx-runtime";
1141
1154
  import { jsx as jsx37 } from "react/jsx-runtime";
1142
1155
  var __defProp2 = Object.defineProperty;
1143
- var __returnValue2 = (v) => v;
1144
- function __exportSetter2(name, newValue) {
1145
- this[name] = __returnValue2.bind(null, newValue);
1146
- }
1147
1156
  var __export2 = (target, all) => {
1148
1157
  for (var name in all)
1149
1158
  __defProp2(target, name, {
1150
1159
  get: all[name],
1151
1160
  enumerable: true,
1152
1161
  configurable: true,
1153
- set: __exportSetter2.bind(all, name)
1162
+ set: (newValue) => all[name] = () => newValue
1154
1163
  });
1155
1164
  };
1156
1165
  if (typeof createContext !== "function") {
@@ -2215,75 +2224,33 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2215
2224
  var addSequenceStackTraces = (component) => {
2216
2225
  componentsToAddStacksTo.push(component);
2217
2226
  };
2218
- var sequenceStyleSchema = {
2219
- "style.translate": {
2220
- type: "translate",
2221
- step: 1,
2222
- default: "0px 0px",
2223
- description: "Offset"
2224
- },
2225
- "style.scale": {
2226
- type: "number",
2227
- min: 0.05,
2228
- max: 100,
2229
- step: 0.01,
2230
- default: 1,
2231
- description: "Scale"
2232
- },
2233
- "style.rotate": {
2234
- type: "rotation",
2235
- step: 1,
2236
- default: "0deg",
2237
- description: "Rotation"
2238
- },
2239
- "style.opacity": {
2240
- type: "number",
2241
- min: 0,
2242
- max: 1,
2243
- step: 0.01,
2244
- default: 1,
2245
- description: "Opacity"
2246
- },
2247
- premountFor: {
2248
- type: "number",
2249
- default: 0,
2250
- description: "Premount For",
2251
- min: 0,
2252
- step: 1
2253
- },
2254
- postmountFor: {
2255
- type: "hidden"
2256
- },
2257
- styleWhilePremounted: {
2258
- type: "hidden"
2259
- },
2260
- styleWhilePostmounted: {
2261
- type: "hidden"
2227
+ var VERSION = "4.0.464";
2228
+ var checkMultipleRemotionVersions = () => {
2229
+ if (typeof globalThis === "undefined") {
2230
+ return;
2262
2231
  }
2263
- };
2264
- var hiddenField = {
2265
- type: "boolean",
2266
- default: false,
2267
- description: "Hidden"
2268
- };
2269
- var sequenceSchema = {
2270
- hidden: hiddenField,
2271
- layout: {
2272
- type: "enum",
2273
- default: "absolute-fill",
2274
- description: "Layout",
2275
- variants: {
2276
- "absolute-fill": sequenceStyleSchema,
2277
- none: {}
2232
+ const set = () => {
2233
+ globalThis.remotion_imported = VERSION;
2234
+ if (typeof window !== "undefined") {
2235
+ window.remotion_imported = VERSION;
2278
2236
  }
2237
+ };
2238
+ const alreadyImported = globalThis.remotion_imported || typeof window !== "undefined" && window.remotion_imported;
2239
+ if (alreadyImported) {
2240
+ if (alreadyImported === VERSION) {
2241
+ return;
2242
+ }
2243
+ if (typeof alreadyImported === "string" && alreadyImported.includes("webcodecs")) {
2244
+ set();
2245
+ return;
2246
+ }
2247
+ throw new TypeError(`\uD83D\uDEA8 Multiple versions of Remotion detected: ${[
2248
+ VERSION,
2249
+ typeof alreadyImported === "string" ? alreadyImported : "an older version"
2250
+ ].filter(truthy).join(" and ")}. This will cause things to break in an unexpected way.
2251
+ Check that all your Remotion packages are on the same version. If your dependencies depend on Remotion, make them peer dependencies. You can also run \`npx remotion versions\` from your terminal to see which versions are mismatching.`);
2279
2252
  }
2280
- };
2281
- var sequenceSchemaDefaultLayoutNone = {
2282
- ...sequenceSchema,
2283
- layout: {
2284
- ...sequenceSchema.layout,
2285
- default: "none"
2286
- }
2253
+ set();
2287
2254
  };
2288
2255
  var SequenceContext = createContext12(null);
2289
2256
  var exports_timeline_position_state = {};
@@ -2619,6 +2586,82 @@ var Freeze = ({
2619
2586
  var PremountContext = createContext14({
2620
2587
  premountFramesRemaining: 0
2621
2588
  });
2589
+ var sequenceVisualStyleSchema = {
2590
+ "style.translate": {
2591
+ type: "translate",
2592
+ step: 1,
2593
+ default: "0px 0px",
2594
+ description: "Offset"
2595
+ },
2596
+ "style.scale": {
2597
+ type: "number",
2598
+ min: 0.05,
2599
+ max: 100,
2600
+ step: 0.01,
2601
+ default: 1,
2602
+ description: "Scale"
2603
+ },
2604
+ "style.rotate": {
2605
+ type: "rotation",
2606
+ step: 1,
2607
+ default: "0deg",
2608
+ description: "Rotation"
2609
+ },
2610
+ "style.opacity": {
2611
+ type: "number",
2612
+ min: 0,
2613
+ max: 1,
2614
+ step: 0.01,
2615
+ default: 1,
2616
+ description: "Opacity"
2617
+ }
2618
+ };
2619
+ var sequencePremountSchema = {
2620
+ premountFor: {
2621
+ type: "number",
2622
+ default: 0,
2623
+ description: "Premount For",
2624
+ min: 0,
2625
+ step: 1
2626
+ },
2627
+ postmountFor: {
2628
+ type: "hidden"
2629
+ },
2630
+ styleWhilePremounted: {
2631
+ type: "hidden"
2632
+ },
2633
+ styleWhilePostmounted: {
2634
+ type: "hidden"
2635
+ }
2636
+ };
2637
+ var sequenceStyleSchema = {
2638
+ ...sequenceVisualStyleSchema,
2639
+ ...sequencePremountSchema
2640
+ };
2641
+ var hiddenField = {
2642
+ type: "boolean",
2643
+ default: false,
2644
+ description: "Hidden"
2645
+ };
2646
+ var sequenceSchema = {
2647
+ hidden: hiddenField,
2648
+ layout: {
2649
+ type: "enum",
2650
+ default: "absolute-fill",
2651
+ description: "Layout",
2652
+ variants: {
2653
+ "absolute-fill": sequenceStyleSchema,
2654
+ none: {}
2655
+ }
2656
+ }
2657
+ };
2658
+ var sequenceSchemaDefaultLayoutNone = {
2659
+ ...sequenceSchema,
2660
+ layout: {
2661
+ ...sequenceSchema.layout,
2662
+ default: "none"
2663
+ }
2664
+ };
2622
2665
  var SequenceManager = React11.createContext({
2623
2666
  registerSequence: () => {
2624
2667
  throw new Error("SequenceManagerContext not initialized");
@@ -3301,7 +3344,8 @@ var RegularSequenceRefForwardingFunction = ({
3301
3344
  }, [name]);
3302
3345
  const env = useRemotionEnvironment();
3303
3346
  const inheritedStack = other?.stack ?? null;
3304
- const [stackDoesntChange] = useState5(() => stack ?? inheritedStack);
3347
+ const stackRef = useRef6(null);
3348
+ stackRef.current = stack ?? inheritedStack;
3305
3349
  useEffect3(() => {
3306
3350
  if (!env.isStudio) {
3307
3351
  return;
@@ -3325,7 +3369,7 @@ var RegularSequenceRefForwardingFunction = ({
3325
3369
  rootId,
3326
3370
  showInTimeline,
3327
3371
  src: isMedia.data.src,
3328
- stack: stackDoesntChange,
3372
+ getStack: () => stackRef.current,
3329
3373
  startMediaFrom: isMedia.data.startMediaFrom,
3330
3374
  volume: isMedia.data.volumes
3331
3375
  });
@@ -3344,7 +3388,7 @@ var RegularSequenceRefForwardingFunction = ({
3344
3388
  showInTimeline,
3345
3389
  nonce: nonce.get(),
3346
3390
  loopDisplay,
3347
- stack: stackDoesntChange,
3391
+ getStack: () => stackRef.current,
3348
3392
  premountDisplay: premountDisplay ?? null,
3349
3393
  postmountDisplay: postmountDisplay ?? null,
3350
3394
  controls: controls ?? null,
@@ -3367,7 +3411,6 @@ var RegularSequenceRefForwardingFunction = ({
3367
3411
  showInTimeline,
3368
3412
  nonce,
3369
3413
  loopDisplay,
3370
- stackDoesntChange,
3371
3414
  premountDisplay,
3372
3415
  postmountDisplay,
3373
3416
  env.isStudio,
@@ -3476,6 +3519,10 @@ var SequenceRefForwardingFunction = (props, ref) => {
3476
3519
  };
3477
3520
  var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
3478
3521
  var Sequence = wrapInSchema(SequenceInner, sequenceSchema);
3522
+ var WEBGL_CONTEXT_DOCS_URL = "https://remotion.dev/docs/troubleshooting/webgl2-context";
3523
+ var webGlContextErrorMessage = (versionLabel, effectName) => `Failed to acquire ${versionLabel} context for ${effectName}. ` + 'Pass --gl=angle when using the CLI, set chromiumOptions: { gl: "angle" } when using SSR APIs, ' + 'or set "OpenGL render backend" to "angle" in the Advanced section when rendering in the Studio. ' + `See ${WEBGL_CONTEXT_DOCS_URL}`;
3524
+ var createWebGLContextError = (effectName) => new Error(webGlContextErrorMessage("WebGL", effectName));
3525
+ var createWebGL2ContextError = (effectName) => new Error(webGlContextErrorMessage("WebGL2", effectName));
3479
3526
 
3480
3527
  class CanvasPool {
3481
3528
  width;
@@ -3524,7 +3571,7 @@ class CanvasPool {
3524
3571
  preserveDrawingBuffer: true
3525
3572
  });
3526
3573
  if (!ctx) {
3527
- throw new Error("Failed to acquire WebGL2 context for canvas effect");
3574
+ throw createWebGL2ContextError("canvas effect");
3528
3575
  }
3529
3576
  canvas.addEventListener("webglcontextlost", (e) => {
3530
3577
  e.preventDefault();
@@ -3691,8 +3738,8 @@ var runEffectChain = async ({
3691
3738
  return true;
3692
3739
  };
3693
3740
  var useEffectChainState = () => {
3694
- const chainStateRef = useRef6(null);
3695
- const sizeRef = useRef6(null);
3741
+ const chainStateRef = useRef7(null);
3742
+ const sizeRef = useRef7(null);
3696
3743
  useEffect4(() => {
3697
3744
  return () => {
3698
3745
  if (chainStateRef.current) {
@@ -3713,186 +3760,6 @@ var useEffectChainState = () => {
3713
3760
  }
3714
3761
  }), []);
3715
3762
  };
3716
- var solidSchema = {
3717
- color: {
3718
- type: "color",
3719
- default: "#ffffff",
3720
- description: "Color"
3721
- },
3722
- width: {
3723
- type: "number",
3724
- min: 1,
3725
- step: 1,
3726
- default: 1920,
3727
- description: "Width"
3728
- },
3729
- height: {
3730
- type: "number",
3731
- min: 1,
3732
- step: 1,
3733
- default: 1080,
3734
- description: "Height"
3735
- },
3736
- ...sequenceStyleSchema
3737
- };
3738
- var SolidInner = ({
3739
- color,
3740
- width,
3741
- height,
3742
- _experimentalEffects: experimentalEffects = [],
3743
- className,
3744
- style,
3745
- overrideId,
3746
- ref
3747
- }) => {
3748
- const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
3749
- const [outputCanvas, setOutputCanvas] = useState6(null);
3750
- const memoizedEffects = useMemoizedEffects({
3751
- effects: experimentalEffects,
3752
- overrideId: overrideId ?? null
3753
- });
3754
- const sourceCanvas = useMemo16(() => {
3755
- if (typeof document === "undefined") {
3756
- return null;
3757
- }
3758
- const canvas = document.createElement("canvas");
3759
- canvas.width = 1;
3760
- canvas.height = 1;
3761
- return canvas;
3762
- }, []);
3763
- const chainState = useEffectChainState();
3764
- const canvasRef = useCallback6((canvas) => {
3765
- setOutputCanvas(canvas);
3766
- if (typeof ref === "function") {
3767
- ref(canvas);
3768
- } else if (ref) {
3769
- ref.current = canvas;
3770
- }
3771
- }, [ref]);
3772
- useEffect5(() => {
3773
- if (!outputCanvas || !sourceCanvas) {
3774
- return;
3775
- }
3776
- const handle = delayRender2("Solid effect chain");
3777
- if (!chainState) {
3778
- continueRender2(handle);
3779
- return () => {
3780
- continueRender2(handle);
3781
- };
3782
- }
3783
- const ctx = sourceCanvas.getContext("2d", { colorSpace: "srgb" });
3784
- if (!ctx) {
3785
- cancelRender2(new Error("Failed to acquire 2D context for <Solid> source"));
3786
- return;
3787
- }
3788
- ctx.fillStyle = color;
3789
- ctx.fillRect(0, 0, 1, 1);
3790
- runEffectChain({
3791
- state: chainState.get(width, height),
3792
- source: sourceCanvas,
3793
- effects: memoizedEffects,
3794
- output: outputCanvas,
3795
- width,
3796
- height
3797
- }).then((completed) => {
3798
- if (completed) {
3799
- continueRender2(handle);
3800
- }
3801
- }).catch((err) => {
3802
- cancelRender2(err);
3803
- });
3804
- return () => {
3805
- continueRender2(handle);
3806
- };
3807
- }, [
3808
- color,
3809
- outputCanvas,
3810
- sourceCanvas,
3811
- chainState,
3812
- width,
3813
- height,
3814
- delayRender2,
3815
- continueRender2,
3816
- cancelRender2,
3817
- memoizedEffects
3818
- ]);
3819
- return /* @__PURE__ */ jsx12("canvas", {
3820
- ref: canvasRef,
3821
- width,
3822
- height,
3823
- className,
3824
- style
3825
- });
3826
- };
3827
- var SolidOuter = forwardRef4(({
3828
- _experimentalEffects = [],
3829
- _experimentalControls: controls,
3830
- color,
3831
- height,
3832
- width,
3833
- className,
3834
- durationInFrames,
3835
- style,
3836
- name,
3837
- from,
3838
- hidden,
3839
- showInTimeline,
3840
- ...props
3841
- }, ref) => {
3842
- const memoizedEffectDefinitions = useMemoizedEffectDefinitions(_experimentalEffects);
3843
- return /* @__PURE__ */ jsx12(Sequence, {
3844
- layout: "none",
3845
- from,
3846
- hidden,
3847
- showInTimeline,
3848
- _experimentalControls: controls,
3849
- _experimentalEffects: memoizedEffectDefinitions,
3850
- durationInFrames,
3851
- name: name ?? "<Solid>",
3852
- ...props,
3853
- children: /* @__PURE__ */ jsx12(SolidInner, {
3854
- ref,
3855
- overrideId: controls?.overrideId ?? null,
3856
- color,
3857
- height,
3858
- width,
3859
- className,
3860
- style,
3861
- _experimentalEffects
3862
- })
3863
- });
3864
- });
3865
- var Solid = wrapInSchema(SolidOuter, solidSchema);
3866
- Solid.displayName = "Solid";
3867
- addSequenceStackTraces(Solid);
3868
- var VERSION = "4.0.463";
3869
- var checkMultipleRemotionVersions = () => {
3870
- if (typeof globalThis === "undefined") {
3871
- return;
3872
- }
3873
- const set = () => {
3874
- globalThis.remotion_imported = VERSION;
3875
- if (typeof window !== "undefined") {
3876
- window.remotion_imported = VERSION;
3877
- }
3878
- };
3879
- const alreadyImported = globalThis.remotion_imported || typeof window !== "undefined" && window.remotion_imported;
3880
- if (alreadyImported) {
3881
- if (alreadyImported === VERSION) {
3882
- return;
3883
- }
3884
- if (typeof alreadyImported === "string" && alreadyImported.includes("webcodecs")) {
3885
- set();
3886
- return;
3887
- }
3888
- throw new TypeError(`\uD83D\uDEA8 Multiple versions of Remotion detected: ${[
3889
- VERSION,
3890
- typeof alreadyImported === "string" ? alreadyImported : "an older version"
3891
- ].filter(truthy).join(" and ")}. This will cause things to break in an unexpected way.
3892
- Check that all your Remotion packages are on the same version. If your dependencies depend on Remotion, make them peer dependencies. You can also run \`npx remotion versions\` from your terminal to see which versions are mismatching.`);
3893
- }
3894
- set();
3895
- };
3896
3763
  var calcArgs = (fit, frameSize, canvasSize) => {
3897
3764
  switch (fit) {
3898
3765
  case "fill": {
@@ -3941,29 +3808,49 @@ var calcArgs = (fit, frameSize, canvasSize) => {
3941
3808
  throw new Error("Unknown fit: " + fit);
3942
3809
  }
3943
3810
  };
3944
- var CanvasRefForwardingFunction = ({ width, height, fit, className, style }, ref) => {
3945
- const canvasRef = useRef7(null);
3946
- const draw = useCallback7((imageData) => {
3811
+ var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effects }, ref) => {
3812
+ const canvasRef = useRef8(null);
3813
+ const chainState = useEffectChainState();
3814
+ const sourceCanvas = useMemo16(() => {
3815
+ if (typeof document === "undefined") {
3816
+ return null;
3817
+ }
3818
+ return document.createElement("canvas");
3819
+ }, []);
3820
+ const draw = useCallback6(async (imageData) => {
3947
3821
  const canvas = canvasRef.current;
3948
3822
  const canvasWidth = width ?? imageData.displayWidth;
3949
3823
  const canvasHeight = height ?? imageData.displayHeight;
3950
3824
  if (!canvas) {
3951
3825
  throw new Error("Canvas ref is not set");
3952
3826
  }
3953
- const ctx = canvasRef.current?.getContext("2d");
3954
- if (!ctx) {
3955
- throw new Error("Could not get 2d context");
3827
+ if (!sourceCanvas) {
3828
+ throw new Error("Source canvas is not available");
3956
3829
  }
3957
- canvas.width = canvasWidth;
3958
- canvas.height = canvasHeight;
3959
- ctx.drawImage(imageData, ...calcArgs(fit, {
3830
+ sourceCanvas.width = canvasWidth;
3831
+ sourceCanvas.height = canvasHeight;
3832
+ const sourceCtx = sourceCanvas.getContext("2d");
3833
+ if (!sourceCtx) {
3834
+ throw new Error("Could not get 2d context for source canvas");
3835
+ }
3836
+ sourceCtx.drawImage(imageData, ...calcArgs(fit, {
3960
3837
  height: imageData.displayHeight,
3961
3838
  width: imageData.displayWidth
3962
3839
  }, {
3963
3840
  width: canvasWidth,
3964
3841
  height: canvasHeight
3965
3842
  }));
3966
- }, [fit, height, width]);
3843
+ canvas.width = canvasWidth;
3844
+ canvas.height = canvasHeight;
3845
+ return runEffectChain({
3846
+ state: chainState.get(canvasWidth, canvasHeight),
3847
+ source: sourceCanvas,
3848
+ effects,
3849
+ output: canvas,
3850
+ width: canvasWidth,
3851
+ height: canvasHeight
3852
+ });
3853
+ }, [chainState, effects, fit, height, sourceCanvas, width]);
3967
3854
  useImperativeHandle(ref, () => {
3968
3855
  return {
3969
3856
  draw,
@@ -3982,13 +3869,13 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style }, ref
3982
3869
  }
3983
3870
  };
3984
3871
  }, [draw]);
3985
- return /* @__PURE__ */ jsx13("canvas", {
3872
+ return /* @__PURE__ */ jsx12("canvas", {
3986
3873
  ref: canvasRef,
3987
3874
  className,
3988
3875
  style
3989
3876
  });
3990
3877
  };
3991
- var Canvas = React15.forwardRef(CanvasRefForwardingFunction);
3878
+ var Canvas = React14.forwardRef(CanvasRefForwardingFunction);
3992
3879
  var CACHE_SIZE = 5;
3993
3880
  var getActualTime = ({
3994
3881
  loopBehavior,
@@ -4144,10 +4031,10 @@ var animatedImageSchema = {
4144
4031
  default: 1,
4145
4032
  description: "Playback Rate"
4146
4033
  },
4147
- ...sequenceStyleSchema,
4034
+ ...sequenceVisualStyleSchema,
4148
4035
  hidden: hiddenField
4149
4036
  };
4150
- var AnimatedImageContent = forwardRef5(({
4037
+ var AnimatedImageContent = forwardRef4(({
4151
4038
  src,
4152
4039
  width,
4153
4040
  height,
@@ -4155,26 +4042,24 @@ var AnimatedImageContent = forwardRef5(({
4155
4042
  loopBehavior = "loop",
4156
4043
  playbackRate = 1,
4157
4044
  fit = "fill",
4045
+ effects,
4046
+ controls,
4158
4047
  ...props
4159
4048
  }, canvasRef) => {
4160
- const mountState = useRef8({ isMounted: true });
4161
- useEffect6(() => {
4162
- const { current } = mountState;
4163
- current.isMounted = true;
4164
- return () => {
4165
- current.isMounted = false;
4166
- };
4167
- }, []);
4168
4049
  const resolvedSrc = resolveAnimatedImageSource(src);
4169
- const [imageDecoder, setImageDecoder] = useState7(null);
4050
+ const [imageDecoder, setImageDecoder] = useState6(null);
4170
4051
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
4171
- const [decodeHandle] = useState7(() => delayRender2(`Rendering <AnimatedImage/> with src="${resolvedSrc}"`));
4052
+ const [decodeHandle] = useState6(() => delayRender2(`Rendering <AnimatedImage/> with src="${resolvedSrc}"`));
4172
4053
  const frame = useCurrentFrame();
4173
4054
  const { fps } = useVideoConfig();
4174
4055
  const currentTime = frame / playbackRate / fps;
4175
- const currentTimeRef = useRef8(currentTime);
4056
+ const currentTimeRef = useRef9(currentTime);
4176
4057
  currentTimeRef.current = currentTime;
4177
- const ref = useRef8(null);
4058
+ const ref = useRef9(null);
4059
+ const memoizedEffects = useMemoizedEffects({
4060
+ effects,
4061
+ overrideId: controls?.overrideId ?? null
4062
+ });
4178
4063
  useImperativeHandle2(canvasRef, () => {
4179
4064
  const c = ref.current?.getCanvas();
4180
4065
  if (!c) {
@@ -4182,8 +4067,8 @@ var AnimatedImageContent = forwardRef5(({
4182
4067
  }
4183
4068
  return c;
4184
4069
  }, []);
4185
- const [initialLoopBehavior] = useState7(() => loopBehavior);
4186
- useEffect6(() => {
4070
+ const [initialLoopBehavior] = useState6(() => loopBehavior);
4071
+ useEffect5(() => {
4187
4072
  const controller = new AbortController;
4188
4073
  decodeImage({
4189
4074
  resolvedSrc,
@@ -4220,16 +4105,24 @@ var AnimatedImageContent = forwardRef5(({
4220
4105
  return;
4221
4106
  }
4222
4107
  const delay = delayRender2(`Rendering frame at ${currentTime} of <AnimatedImage src="${src}"/>`);
4223
- imageDecoder.getFrame(currentTime, loopBehavior).then((videoFrame) => {
4224
- if (mountState.current.isMounted) {
4225
- if (videoFrame === null) {
4226
- ref.current?.clear();
4227
- } else {
4228
- ref.current?.draw(videoFrame.frame);
4229
- }
4108
+ let cancelled = false;
4109
+ imageDecoder.getFrame(currentTime, loopBehavior).then(async (videoFrame) => {
4110
+ if (cancelled) {
4111
+ return;
4112
+ }
4113
+ if (videoFrame === null) {
4114
+ ref.current?.clear();
4115
+ continueRender2(delay);
4116
+ return;
4117
+ }
4118
+ const completed = await ref.current?.draw(videoFrame.frame);
4119
+ if (completed && !cancelled) {
4120
+ continueRender2(delay);
4230
4121
  }
4231
- continueRender2(delay);
4232
4122
  }).catch((err) => {
4123
+ if (cancelled) {
4124
+ return;
4125
+ }
4233
4126
  if (onError) {
4234
4127
  onError(err);
4235
4128
  continueRender2(delay);
@@ -4237,6 +4130,10 @@ var AnimatedImageContent = forwardRef5(({
4237
4130
  cancelRender(err);
4238
4131
  }
4239
4132
  });
4133
+ return () => {
4134
+ cancelled = true;
4135
+ continueRender2(delay);
4136
+ };
4240
4137
  }, [
4241
4138
  currentTime,
4242
4139
  imageDecoder,
@@ -4244,13 +4141,18 @@ var AnimatedImageContent = forwardRef5(({
4244
4141
  onError,
4245
4142
  src,
4246
4143
  continueRender2,
4247
- delayRender2
4144
+ delayRender2,
4145
+ memoizedEffects,
4146
+ fit,
4147
+ width,
4148
+ height
4248
4149
  ]);
4249
- return /* @__PURE__ */ jsx14(Canvas, {
4150
+ return /* @__PURE__ */ jsx13(Canvas, {
4250
4151
  ref,
4251
4152
  width,
4252
4153
  height,
4253
4154
  fit,
4155
+ effects: memoizedEffects,
4254
4156
  ...props
4255
4157
  });
4256
4158
  });
@@ -4267,12 +4169,14 @@ var AnimatedImageInner = ({
4267
4169
  className,
4268
4170
  style,
4269
4171
  durationInFrames,
4172
+ _experimentalEffects: effects = [],
4270
4173
  _experimentalControls: controls,
4271
4174
  ref,
4272
4175
  ...sequenceProps
4273
4176
  }) => {
4274
4177
  const { durationInFrames: videoDuration } = useVideoConfig();
4275
4178
  const resolvedDuration = durationInFrames ?? videoDuration;
4179
+ const memoizedEffectDefinitions = useMemoizedEffectDefinitions(effects);
4276
4180
  const animatedImageProps = {
4277
4181
  src,
4278
4182
  width,
@@ -4285,21 +4189,179 @@ var AnimatedImageInner = ({
4285
4189
  className,
4286
4190
  style
4287
4191
  };
4288
- return /* @__PURE__ */ jsx14(Sequence, {
4192
+ return /* @__PURE__ */ jsx13(Sequence, {
4289
4193
  layout: "none",
4290
4194
  durationInFrames: resolvedDuration,
4291
4195
  name: "<AnimatedImage>",
4292
4196
  _experimentalControls: controls,
4197
+ _experimentalEffects: memoizedEffectDefinitions,
4293
4198
  ...sequenceProps,
4294
- children: /* @__PURE__ */ jsx14(AnimatedImageContent, {
4199
+ children: /* @__PURE__ */ jsx13(AnimatedImageContent, {
4295
4200
  ...animatedImageProps,
4296
- ref
4201
+ ref,
4202
+ effects,
4203
+ controls
4297
4204
  })
4298
4205
  });
4299
4206
  };
4300
4207
  var AnimatedImage = wrapInSchema(AnimatedImageInner, animatedImageSchema);
4301
4208
  AnimatedImage.displayName = "AnimatedImage";
4302
4209
  addSequenceStackTraces(AnimatedImage);
4210
+ var solidSchema = {
4211
+ color: {
4212
+ type: "color",
4213
+ default: "transparent",
4214
+ description: "Color"
4215
+ },
4216
+ width: {
4217
+ type: "number",
4218
+ min: 1,
4219
+ step: 1,
4220
+ default: 1920,
4221
+ description: "Width"
4222
+ },
4223
+ height: {
4224
+ type: "number",
4225
+ min: 1,
4226
+ step: 1,
4227
+ default: 1080,
4228
+ description: "Height"
4229
+ },
4230
+ ...sequenceVisualStyleSchema
4231
+ };
4232
+ var SolidInner = ({
4233
+ color,
4234
+ width,
4235
+ height,
4236
+ _experimentalEffects: experimentalEffects = [],
4237
+ className,
4238
+ style,
4239
+ overrideId,
4240
+ ref
4241
+ }) => {
4242
+ const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
4243
+ const [outputCanvas, setOutputCanvas] = useState7(null);
4244
+ const memoizedEffects = useMemoizedEffects({
4245
+ effects: experimentalEffects,
4246
+ overrideId: overrideId ?? null
4247
+ });
4248
+ const sourceCanvas = useMemo17(() => {
4249
+ if (typeof document === "undefined") {
4250
+ return null;
4251
+ }
4252
+ const canvas = document.createElement("canvas");
4253
+ canvas.width = 1;
4254
+ canvas.height = 1;
4255
+ return canvas;
4256
+ }, []);
4257
+ const chainState = useEffectChainState();
4258
+ const canvasRef = useCallback7((canvas) => {
4259
+ setOutputCanvas(canvas);
4260
+ if (typeof ref === "function") {
4261
+ ref(canvas);
4262
+ } else if (ref) {
4263
+ ref.current = canvas;
4264
+ }
4265
+ }, [ref]);
4266
+ useEffect6(() => {
4267
+ if (!outputCanvas || !sourceCanvas) {
4268
+ return;
4269
+ }
4270
+ const handle = delayRender2("Solid effect chain");
4271
+ if (!chainState) {
4272
+ continueRender2(handle);
4273
+ return () => {
4274
+ continueRender2(handle);
4275
+ };
4276
+ }
4277
+ const ctx = sourceCanvas.getContext("2d", { colorSpace: "srgb" });
4278
+ if (!ctx) {
4279
+ cancelRender2(new Error("Failed to acquire 2D context for <Solid> source"));
4280
+ return;
4281
+ }
4282
+ ctx.clearRect(0, 0, 1, 1);
4283
+ if (color !== undefined) {
4284
+ ctx.fillStyle = color;
4285
+ ctx.fillRect(0, 0, 1, 1);
4286
+ }
4287
+ runEffectChain({
4288
+ state: chainState.get(width, height),
4289
+ source: sourceCanvas,
4290
+ effects: memoizedEffects,
4291
+ output: outputCanvas,
4292
+ width,
4293
+ height
4294
+ }).then((completed) => {
4295
+ if (completed) {
4296
+ continueRender2(handle);
4297
+ }
4298
+ }).catch((err) => {
4299
+ cancelRender2(err);
4300
+ });
4301
+ return () => {
4302
+ continueRender2(handle);
4303
+ };
4304
+ }, [
4305
+ color,
4306
+ outputCanvas,
4307
+ sourceCanvas,
4308
+ chainState,
4309
+ width,
4310
+ height,
4311
+ delayRender2,
4312
+ continueRender2,
4313
+ cancelRender2,
4314
+ memoizedEffects
4315
+ ]);
4316
+ return /* @__PURE__ */ jsx14("canvas", {
4317
+ ref: canvasRef,
4318
+ width,
4319
+ height,
4320
+ className,
4321
+ style
4322
+ });
4323
+ };
4324
+ var SolidOuter = forwardRef5(({
4325
+ _experimentalEffects = [],
4326
+ _experimentalControls: controls,
4327
+ color,
4328
+ height,
4329
+ width,
4330
+ className,
4331
+ durationInFrames,
4332
+ style,
4333
+ name,
4334
+ from,
4335
+ hidden,
4336
+ showInTimeline,
4337
+ ...props
4338
+ }, ref) => {
4339
+ const memoizedEffectDefinitions = useMemoizedEffectDefinitions(_experimentalEffects);
4340
+ return /* @__PURE__ */ jsx14(Sequence, {
4341
+ layout: "none",
4342
+ from,
4343
+ hidden,
4344
+ showInTimeline,
4345
+ _experimentalControls: controls,
4346
+ _experimentalEffects: memoizedEffectDefinitions,
4347
+ durationInFrames,
4348
+ name: name ?? "<Solid>",
4349
+ ...props,
4350
+ children: /* @__PURE__ */ jsx14(SolidInner, {
4351
+ ref,
4352
+ overrideId: controls?.overrideId ?? null,
4353
+ color,
4354
+ height,
4355
+ width,
4356
+ className,
4357
+ style,
4358
+ _experimentalEffects
4359
+ })
4360
+ });
4361
+ });
4362
+ var Solid = wrapInSchema(SolidOuter, solidSchema);
4363
+ Solid.displayName = "Solid";
4364
+ addSequenceStackTraces(Solid);
4303
4365
  var cachedSupport = null;
4304
4366
  var isHtmlInCanvasSupported = () => {
4305
4367
  if (cachedSupport !== null) {
@@ -4310,7 +4372,7 @@ var isHtmlInCanvasSupported = () => {
4310
4372
  }
4311
4373
  const canvas = document.createElement("canvas");
4312
4374
  const ctx = canvas.getContext("2d");
4313
- cachedSupport = typeof ctx?.drawElementImage === "function" && typeof canvas.requestPaint === "function" && typeof canvas.captureElementImage === "function";
4375
+ cachedSupport = typeof ctx?.drawElementImage === "function" && typeof canvas.requestPaint === "function" && typeof canvas.captureElementImage === "function" && "transferControlToOffscreen" in HTMLCanvasElement.prototype;
4314
4376
  return cachedSupport;
4315
4377
  };
4316
4378
  var HTML_IN_CANVAS_UNSUPPORTED_MESSAGE = "HTML in Canvas is not supported. Two common causes: Chrome is older than version 148 (update Chrome), or the HTML-in-Canvas flag is disabled at chrome://flags/#canvas-draw-element (enable it and restart Chrome).";
@@ -4346,8 +4408,10 @@ var HtmlInCanvasContent = forwardRef6(({ width, height, effects, children, onPai
4346
4408
  if (!isHtmlInCanvasSupported()) {
4347
4409
  cancelRender2(new Error(HTML_IN_CANVAS_UNSUPPORTED_MESSAGE));
4348
4410
  }
4349
- const canvas2dRef = useRef9(null);
4350
- const divRef = useRef9(null);
4411
+ const canvas2dRef = useRef10(null);
4412
+ const offscreenRef = useRef10(null);
4413
+ const divRef = useRef10(null);
4414
+ const canvasSizeKey = `${width}x${height}`;
4351
4415
  const setLayoutCanvasRef = useCallback8((node) => {
4352
4416
  canvas2dRef.current = node;
4353
4417
  if (typeof ref === "function") {
@@ -4356,45 +4420,48 @@ var HtmlInCanvasContent = forwardRef6(({ width, height, effects, children, onPai
4356
4420
  ref.current = node;
4357
4421
  }
4358
4422
  }, [ref]);
4359
- const [offscreenCanvas] = useState8(() => new OffscreenCanvas(1, 1));
4360
4423
  const chainState = useEffectChainState();
4361
4424
  const memoizedEffects = useMemoizedEffects({
4362
4425
  effects,
4363
4426
  overrideId: controls?.overrideId ?? null
4364
4427
  });
4365
- const effectsRef = useRef9(memoizedEffects);
4428
+ const effectsRef = useRef10(memoizedEffects);
4366
4429
  effectsRef.current = memoizedEffects;
4367
- const onPaintRef = useRef9(onPaint);
4430
+ const onPaintRef = useRef10(onPaint);
4368
4431
  onPaintRef.current = onPaint;
4369
- const onInitRef = useRef9(onInit);
4432
+ const onInitRef = useRef10(onInit);
4370
4433
  onInitRef.current = onInit;
4371
- const initializedRef = useRef9(false);
4372
- const onInitCleanupRef = useRef9(null);
4373
- const unmountedRef = useRef9(false);
4434
+ const initializedRef = useRef10(false);
4435
+ const onInitCleanupRef = useRef10(null);
4436
+ const unmountedRef = useRef10(false);
4374
4437
  const onPaintCb = useCallback8(async () => {
4375
4438
  const element = divRef.current;
4376
4439
  if (!element) {
4377
4440
  throw new Error("Canvas or scene element not found");
4378
4441
  }
4379
- offscreenCanvas.width = width;
4380
- offscreenCanvas.height = height;
4442
+ const offscreen = offscreenRef.current;
4443
+ if (!offscreen) {
4444
+ throw new Error("HtmlInCanvas: offscreen canvas not ready (transferControlToOffscreen failed or canvas is remounting)");
4445
+ }
4446
+ offscreen.width = width;
4447
+ offscreen.height = height;
4381
4448
  try {
4382
- const layoutCanvas = canvas2dRef.current;
4383
- if (!layoutCanvas) {
4449
+ const placeholderCanvas = canvas2dRef.current;
4450
+ if (!placeholderCanvas) {
4384
4451
  throw new Error("Canvas not found");
4385
4452
  }
4386
- const layout2d = layoutCanvas.getContext("2d");
4387
- if (!layout2d) {
4388
- throw new Error("Failed to acquire 2D context for <HtmlInCanvas> layout canvas");
4453
+ const offscreen2d = offscreen.getContext("2d");
4454
+ if (!offscreen2d) {
4455
+ throw new Error("Failed to acquire 2D context for <HtmlInCanvas> offscreen canvas");
4389
4456
  }
4390
4457
  const handle = delayRender("onPaint");
4391
4458
  if (!initializedRef.current) {
4392
4459
  initializedRef.current = true;
4393
- const initImage = layoutCanvas.captureElementImage(element);
4460
+ const initImage = placeholderCanvas.captureElementImage(element);
4394
4461
  const currentOnInit = onInitRef.current;
4395
4462
  if (currentOnInit) {
4396
4463
  const cleanup = await currentOnInit({
4397
- canvas: offscreenCanvas,
4464
+ canvas: offscreen,
4398
4465
  element,
4399
4466
  elementImage: initImage
4400
4467
  });
@@ -4409,17 +4476,17 @@ var HtmlInCanvasContent = forwardRef6(({ width, height, effects, children, onPai
4409
4476
  }
4410
4477
  }
4411
4478
  const handler = onPaintRef.current ?? defaultOnPaint;
4412
- const elImage = layoutCanvas.captureElementImage(element);
4479
+ const elImage = placeholderCanvas.captureElementImage(element);
4413
4480
  await handler({
4414
- canvas: offscreenCanvas,
4481
+ canvas: offscreen,
4415
4482
  element,
4416
4483
  elementImage: elImage
4417
4484
  });
4418
4485
  await runEffectChain({
4419
4486
  state: chainState.get(width, height),
4420
- source: offscreenCanvas,
4487
+ source: offscreen,
4421
4488
  effects: effectsRef.current,
4422
- output: canvas2dRef.current,
4489
+ output: offscreen,
4423
4490
  width,
4424
4491
  height
4425
4492
  });
@@ -4427,29 +4494,30 @@ var HtmlInCanvasContent = forwardRef6(({ width, height, effects, children, onPai
4427
4494
  } catch (error2) {
4428
4495
  cancelRender2(error2);
4429
4496
  }
4430
- }, [
4431
- chainState,
4432
- continueRender2,
4433
- cancelRender2,
4434
- width,
4435
- height,
4436
- offscreenCanvas
4437
- ]);
4497
+ }, [chainState, continueRender2, cancelRender2, width, height]);
4438
4498
  useLayoutEffect3(() => {
4439
- const canvas = canvas2dRef.current;
4440
- if (!canvas) {
4499
+ const placeholder = canvas2dRef.current;
4500
+ if (!placeholder) {
4441
4501
  throw new Error("Canvas not found");
4442
4502
  }
4443
- canvas.layoutSubtree = true;
4444
- canvas.addEventListener("paint", onPaintCb);
4503
+ placeholder.layoutSubtree = true;
4504
+ const offscreen = placeholder.transferControlToOffscreen();
4505
+ offscreenRef.current = offscreen;
4506
+ offscreen.width = width;
4507
+ offscreen.height = height;
4508
+ initializedRef.current = false;
4509
+ unmountedRef.current = false;
4510
+ placeholder.addEventListener("paint", onPaintCb);
4445
4511
  return () => {
4446
- canvas.removeEventListener("paint", onPaintCb);
4512
+ placeholder.removeEventListener("paint", onPaintCb);
4513
+ offscreenRef.current = null;
4514
+ initializedRef.current = false;
4447
4515
  unmountedRef.current = true;
4448
4516
  onInitCleanupRef.current?.();
4449
4517
  onInitCleanupRef.current = null;
4450
4518
  };
4451
- }, [onPaintCb, cancelRender2]);
4452
- const onPaintChangedRef = useRef9(false);
4519
+ }, [onPaintCb, cancelRender2, width, height]);
4520
+ const onPaintChangedRef = useRef10(false);
4453
4521
  useLayoutEffect3(() => {
4454
4522
  if (!onPaintChangedRef.current) {
4455
4523
  onPaintChangedRef.current = true;
@@ -4473,8 +4541,8 @@ var HtmlInCanvasContent = forwardRef6(({ width, height, effects, children, onPai
4473
4541
  return () => {
4474
4542
  continueRender2(handle);
4475
4543
  };
4476
- }, [width, height, continueRender2]);
4477
- const innerStyle = useMemo17(() => {
4544
+ }, [width, height, continueRender2, canvasSizeKey]);
4545
+ const innerStyle = useMemo18(() => {
4478
4546
  return {
4479
4547
  width,
4480
4548
  height
@@ -4495,7 +4563,7 @@ var HtmlInCanvasContent = forwardRef6(({ width, height, effects, children, onPai
4495
4563
  style: innerStyle,
4496
4564
  children
4497
4565
  })
4498
- })
4566
+ }, canvasSizeKey)
4499
4567
  });
4500
4568
  });
4501
4569
  HtmlInCanvasContent.displayName = "HtmlInCanvasContent";
@@ -4537,7 +4605,7 @@ var HtmlInCanvasInner = forwardRef6(({
4537
4605
  });
4538
4606
  HtmlInCanvasInner.displayName = "HtmlInCanvas";
4539
4607
  var htmlInCanvasSchema = {
4540
- ...sequenceStyleSchema,
4608
+ ...sequenceVisualStyleSchema,
4541
4609
  hidden: hiddenField
4542
4610
  };
4543
4611
  var HtmlInCanvasWrapped = wrapInSchema(HtmlInCanvasInner, htmlInCanvasSchema);
@@ -4585,8 +4653,8 @@ var RenderAssetManager = createContext17({
4585
4653
  renderAssets: []
4586
4654
  });
4587
4655
  var RenderAssetManagerProvider = ({ children, collectAssets }) => {
4588
- const [renderAssets, setRenderAssets] = useState9([]);
4589
- const renderAssetsRef = useRef10([]);
4656
+ const [renderAssets, setRenderAssets] = useState8([]);
4657
+ const renderAssetsRef = useRef11([]);
4590
4658
  const registerRenderAsset = useCallback9((renderAsset) => {
4591
4659
  validateRenderAsset(renderAsset);
4592
4660
  renderAssetsRef.current = [...renderAssetsRef.current, renderAsset];
@@ -4618,7 +4686,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
4618
4686
  };
4619
4687
  }
4620
4688
  }, []);
4621
- const contextValue = useMemo18(() => {
4689
+ const contextValue = useMemo19(() => {
4622
4690
  return {
4623
4691
  registerRenderAsset,
4624
4692
  unregisterRenderAsset,
@@ -4635,7 +4703,7 @@ var Artifact = ({ filename, content, downloadBehavior }) => {
4635
4703
  const { registerRenderAsset, unregisterRenderAsset } = useContext19(RenderAssetManager);
4636
4704
  const env = useRemotionEnvironment();
4637
4705
  const frame = useCurrentFrame();
4638
- const [id] = useState10(() => {
4706
+ const [id] = useState9(() => {
4639
4707
  return String(Math.random());
4640
4708
  });
4641
4709
  useLayoutEffect5(() => {
@@ -4747,14 +4815,14 @@ var Loop = ({
4747
4815
  const iteration = Math.floor(currentFrame / durationInFrames);
4748
4816
  const start = iteration * durationInFrames;
4749
4817
  const from = Math.min(start, maxFrame);
4750
- const loopDisplay = useMemo19(() => {
4818
+ const loopDisplay = useMemo20(() => {
4751
4819
  return {
4752
4820
  numberOfTimes: Math.min(compDuration / durationInFrames, times),
4753
4821
  startOffset: -from,
4754
4822
  durationInFrames
4755
4823
  };
4756
4824
  }, [compDuration, durationInFrames, from, times]);
4757
- const loopContext = useMemo19(() => {
4825
+ const loopContext = useMemo20(() => {
4758
4826
  return {
4759
4827
  iteration: Math.floor(currentFrame / durationInFrames),
4760
4828
  durationInFrames
@@ -4792,7 +4860,7 @@ var setPreloads = (updater) => {
4792
4860
  updaters.forEach((u) => u());
4793
4861
  };
4794
4862
  var PrefetchProvider = ({ children }) => {
4795
- const [_preloads, _setPreloads] = useState11(() => preloads);
4863
+ const [_preloads, _setPreloads] = useState10(() => preloads);
4796
4864
  useEffect7(() => {
4797
4865
  const updaterFunction = () => {
4798
4866
  _setPreloads(preloads);
@@ -5116,7 +5184,7 @@ var DurationsContext = createContext20({
5116
5184
  });
5117
5185
  var DurationsContextProvider = ({ children }) => {
5118
5186
  const [durations, setDurations] = useReducer(durationReducer, {});
5119
- const value = useMemo20(() => {
5187
+ const value = useMemo21(() => {
5120
5188
  return {
5121
5189
  durations,
5122
5190
  setDurations
@@ -5250,7 +5318,7 @@ var useSingletonAudioContext = ({
5250
5318
  audioEnabled
5251
5319
  }) => {
5252
5320
  const env = useRemotionEnvironment();
5253
- const context = useMemo21(() => {
5321
+ const context = useMemo22(() => {
5254
5322
  if (env.isRendering) {
5255
5323
  return null;
5256
5324
  }
@@ -5331,11 +5399,11 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
5331
5399
  latencyHint: audioLatencyHint,
5332
5400
  audioEnabled
5333
5401
  });
5334
- const audioContextIsPlayingEventually = useRef11(false);
5335
- const isResuming = useRef11(null);
5336
- const audioSyncAnchor = useMemo22(() => ({ value: 0 }), []);
5337
- const audioSyncAnchorListeners = useRef11([]);
5338
- const audioSyncAnchorEmitter = useMemo22(() => {
5402
+ const audioContextIsPlayingEventually = useRef12(false);
5403
+ const isResuming = useRef12(null);
5404
+ const audioSyncAnchor = useMemo23(() => ({ value: 0 }), []);
5405
+ const audioSyncAnchorListeners = useRef12([]);
5406
+ const audioSyncAnchorEmitter = useMemo23(() => {
5339
5407
  return {
5340
5408
  dispatch: (event) => {
5341
5409
  audioSyncAnchorListeners.current.forEach((l) => l(event));
@@ -5350,12 +5418,12 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
5350
5418
  }
5351
5419
  };
5352
5420
  }, []);
5353
- const prevEndTimes = useRef11({ scheduledEndTime: null, mediaEndTime: null });
5354
- const nodesToResume = useRef11(new Map);
5421
+ const prevEndTimes = useRef12({ scheduledEndTime: null, mediaEndTime: null });
5422
+ const nodesToResume = useRef12(new Map);
5355
5423
  const unscheduleAudioNode = useCallback10((node) => {
5356
5424
  nodesToResume.current.delete(node);
5357
5425
  }, []);
5358
- const scheduleAudioNode = useMemo22(() => {
5426
+ const scheduleAudioNode = useMemo23(() => {
5359
5427
  return ({
5360
5428
  node,
5361
5429
  mediaTimestamp,
@@ -5440,7 +5508,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
5440
5508
  audioContextIsPlayingEventually.current = false;
5441
5509
  ctxAndGain.audioContext.suspend();
5442
5510
  }, [ctxAndGain]);
5443
- const audioContextValue = useMemo22(() => {
5511
+ const audioContextValue = useMemo23(() => {
5444
5512
  return {
5445
5513
  audioContext: ctxAndGain?.audioContext ?? null,
5446
5514
  gainNode: ctxAndGain?.gainNode ?? null,
@@ -5468,8 +5536,8 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
5468
5536
  });
5469
5537
  };
5470
5538
  var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
5471
- const audios = useRef11([]);
5472
- const [initialNumberOfAudioTags] = useState12(numberOfAudioTags);
5539
+ const audios = useRef12([]);
5540
+ const [initialNumberOfAudioTags] = useState11(numberOfAudioTags);
5473
5541
  if (numberOfAudioTags !== initialNumberOfAudioTags) {
5474
5542
  throw new Error("The number of shared audio tags has changed dynamically. Once you have set this property, you cannot change it afterwards.");
5475
5543
  }
@@ -5479,7 +5547,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
5479
5547
  const audioCtx = useContext21(SharedAudioContext);
5480
5548
  const audioContext = audioCtx?.audioContext ?? null;
5481
5549
  const resume = audioCtx?.resume;
5482
- const refs = useMemo22(() => {
5550
+ const refs = useMemo23(() => {
5483
5551
  return new Array(numberOfAudioTags).fill(true).map(() => {
5484
5552
  const ref = createRef2();
5485
5553
  return {
@@ -5502,7 +5570,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
5502
5570
  });
5503
5571
  };
5504
5572
  }, [refs]);
5505
- const takenAudios = useRef11(new Array(numberOfAudioTags).fill(false));
5573
+ const takenAudios = useRef12(new Array(numberOfAudioTags).fill(false));
5506
5574
  const rerenderAudios = useCallback10(() => {
5507
5575
  refs.forEach(({ ref, id }) => {
5508
5576
  const data = audios.current?.find((a) => a.id === id);
@@ -5616,7 +5684,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
5616
5684
  });
5617
5685
  resume?.();
5618
5686
  }, [logLevel, mountTime, refs, env.isPlayer, resume]);
5619
- const audioTagsValue = useMemo22(() => {
5687
+ const audioTagsValue = useMemo23(() => {
5620
5688
  return {
5621
5689
  registerAudio,
5622
5690
  unregisterAudio,
@@ -5653,7 +5721,7 @@ var useSharedAudio = ({
5653
5721
  }) => {
5654
5722
  const audioCtx = useContext21(SharedAudioContext);
5655
5723
  const tagsCtx = useContext21(SharedAudioTagsContext);
5656
- const [elem] = useState12(() => {
5724
+ const [elem] = useState11(() => {
5657
5725
  if (tagsCtx && tagsCtx.numberOfAudioTags > 0) {
5658
5726
  return tagsCtx.registerAudio({ aud, audioId, premounting, postmounting });
5659
5727
  }
@@ -5789,9 +5857,9 @@ var useAppendVideoFragment = ({
5789
5857
  duration: initialDuration,
5790
5858
  fps
5791
5859
  }) => {
5792
- const actualFromRef = useRef12(initialActualFrom);
5793
- const actualDuration = useRef12(initialDuration);
5794
- const actualSrc = useRef12(initialActualSrc);
5860
+ const actualFromRef = useRef13(initialActualFrom);
5861
+ const actualDuration = useRef13(initialDuration);
5862
+ const actualSrc = useRef13(initialActualSrc);
5795
5863
  if (!isSubsetOfDuration({
5796
5864
  prevStartFrom: actualFromRef.current,
5797
5865
  newStartFrom: initialActualFrom,
@@ -5828,8 +5896,8 @@ var useVolume = ({
5828
5896
  source,
5829
5897
  shouldUseWebAudioApi
5830
5898
  }) => {
5831
- const audioStuffRef = useRef13(null);
5832
- const currentVolumeRef = useRef13(volume);
5899
+ const audioStuffRef = useRef14(null);
5900
+ const currentVolumeRef = useRef14(volume);
5833
5901
  currentVolumeRef.current = volume;
5834
5902
  const sharedAudioContext = useContext22(SharedAudioContext);
5835
5903
  if (!sharedAudioContext) {
@@ -5986,7 +6054,7 @@ var useBasicMediaInTimeline = ({
5986
6054
  throw new Error("No src passed");
5987
6055
  }
5988
6056
  const parentSequence = useContext24(SequenceContext);
5989
- const [initialVolume] = useState13(() => volume);
6057
+ const [initialVolume] = useState12(() => volume);
5990
6058
  const duration = getTimelineDuration({
5991
6059
  compositionDurationInFrames: sequenceDurationInFrames,
5992
6060
  playbackRate,
@@ -5995,7 +6063,7 @@ var useBasicMediaInTimeline = ({
5995
6063
  parentSequenceDurationInFrames: parentSequence?.durationInFrames ?? null,
5996
6064
  loop
5997
6065
  });
5998
- const volumes = useMemo23(() => {
6066
+ const volumes = useMemo24(() => {
5999
6067
  if (typeof volume === "number") {
6000
6068
  return volume;
6001
6069
  }
@@ -6016,7 +6084,7 @@ var useBasicMediaInTimeline = ({
6016
6084
  const nonce = useNonce();
6017
6085
  const { rootId } = useTimelineContext();
6018
6086
  const startMediaFrom = 0 - mediaStartsAt + (trimBefore ?? 0);
6019
- const memoizedResult = useMemo23(() => {
6087
+ const memoizedResult = useMemo24(() => {
6020
6088
  return {
6021
6089
  volumes,
6022
6090
  duration,
@@ -6045,7 +6113,7 @@ var useImageInTimeline = ({
6045
6113
  src,
6046
6114
  displayName,
6047
6115
  id,
6048
- stack,
6116
+ getStack,
6049
6117
  showInTimeline,
6050
6118
  premountDisplay,
6051
6119
  postmountDisplay,
@@ -6092,7 +6160,7 @@ var useImageInTimeline = ({
6092
6160
  showInTimeline: true,
6093
6161
  nonce: nonce.get(),
6094
6162
  loopDisplay,
6095
- stack,
6163
+ getStack,
6096
6164
  premountDisplay,
6097
6165
  postmountDisplay,
6098
6166
  controls,
@@ -6109,7 +6177,7 @@ var useImageInTimeline = ({
6109
6177
  registerSequence,
6110
6178
  unregisterSequence,
6111
6179
  nonce,
6112
- stack,
6180
+ getStack,
6113
6181
  showInTimeline,
6114
6182
  premountDisplay,
6115
6183
  postmountDisplay,
@@ -6128,7 +6196,7 @@ var useMediaInTimeline = ({
6128
6196
  playbackRate,
6129
6197
  displayName,
6130
6198
  id,
6131
- stack,
6199
+ getStack,
6132
6200
  showInTimeline,
6133
6201
  premountDisplay,
6134
6202
  postmountDisplay,
@@ -6179,7 +6247,7 @@ var useMediaInTimeline = ({
6179
6247
  doesVolumeChange,
6180
6248
  loopDisplay,
6181
6249
  playbackRate,
6182
- stack,
6250
+ getStack,
6183
6251
  premountDisplay,
6184
6252
  postmountDisplay,
6185
6253
  controls: null,
@@ -6201,7 +6269,7 @@ var useMediaInTimeline = ({
6201
6269
  mediaType,
6202
6270
  startsAt,
6203
6271
  playbackRate,
6204
- stack,
6272
+ getStack,
6205
6273
  showInTimeline,
6206
6274
  premountDisplay,
6207
6275
  postmountDisplay,
@@ -6212,12 +6280,12 @@ var useMediaInTimeline = ({
6212
6280
  ]);
6213
6281
  };
6214
6282
  var useBufferManager = (logLevel, mountTime) => {
6215
- const [blocks, setBlocks] = useState14([]);
6216
- const [onBufferingCallbacks, setOnBufferingCallbacks] = useState14([]);
6217
- const [onResumeCallbacks, setOnResumeCallbacks] = useState14([]);
6283
+ const [blocks, setBlocks] = useState13([]);
6284
+ const [onBufferingCallbacks, setOnBufferingCallbacks] = useState13([]);
6285
+ const [onResumeCallbacks, setOnResumeCallbacks] = useState13([]);
6218
6286
  const env = useRemotionEnvironment();
6219
6287
  const rendering = env.isRendering;
6220
- const buffering = useRef14(false);
6288
+ const buffering = useRef15(false);
6221
6289
  const addBlock = useCallback11((block) => {
6222
6290
  if (rendering) {
6223
6291
  return {
@@ -6290,7 +6358,7 @@ var useBufferManager = (logLevel, mountTime) => {
6290
6358
  }
6291
6359
  }, [blocks]);
6292
6360
  }
6293
- return useMemo24(() => {
6361
+ return useMemo25(() => {
6294
6362
  return { addBlock, listenForBuffering, listenForResume, buffering };
6295
6363
  }, [addBlock, buffering, listenForBuffering, listenForResume]);
6296
6364
  };
@@ -6304,7 +6372,7 @@ var BufferingProvider = ({ children }) => {
6304
6372
  });
6305
6373
  };
6306
6374
  var useIsPlayerBuffering = (bufferManager) => {
6307
- const [isBuffering, setIsBuffering] = useState14(bufferManager.buffering.current);
6375
+ const [isBuffering, setIsBuffering] = useState13(bufferManager.buffering.current);
6308
6376
  useEffect9(() => {
6309
6377
  const onBuffer = () => {
6310
6378
  setIsBuffering(true);
@@ -6329,7 +6397,7 @@ var useBufferState = () => {
6329
6397
  const buffer = useContext26(BufferingContextReact);
6330
6398
  const logLevel = useLogLevel();
6331
6399
  const addBlock = buffer ? buffer.addBlock : null;
6332
- return useMemo25(() => ({
6400
+ return useMemo26(() => ({
6333
6401
  delayPlayback: () => {
6334
6402
  if (!addBlock) {
6335
6403
  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");
@@ -6364,7 +6432,7 @@ var useBufferUntilFirstFrame = ({
6364
6432
  logLevel,
6365
6433
  mountTime
6366
6434
  }) => {
6367
- const bufferingRef = useRef15(false);
6435
+ const bufferingRef = useRef16(false);
6368
6436
  const { delayPlayback } = useBufferState();
6369
6437
  const bufferUntilFirstFrame = useCallback12((requestedTime) => {
6370
6438
  if (mediaType !== "video") {
@@ -6437,7 +6505,7 @@ var useBufferUntilFirstFrame = ({
6437
6505
  onVariableFpsVideoDetected,
6438
6506
  pauseWhenBuffering
6439
6507
  ]);
6440
- return useMemo26(() => {
6508
+ return useMemo27(() => {
6441
6509
  return {
6442
6510
  isBuffering: () => bufferingRef.current,
6443
6511
  bufferUntilFirstFrame
@@ -6485,7 +6553,7 @@ var useMediaBuffering = ({
6485
6553
  src
6486
6554
  }) => {
6487
6555
  const buffer = useBufferState();
6488
- const [isBuffering, setIsBuffering] = useState15(false);
6556
+ const [isBuffering, setIsBuffering] = useState14(false);
6489
6557
  useEffect10(() => {
6490
6558
  let cleanupFns = [];
6491
6559
  const { current } = element;
@@ -6618,7 +6686,7 @@ var useRequestVideoCallbackTime = ({
6618
6686
  lastSeek,
6619
6687
  onVariableFpsVideoDetected
6620
6688
  }) => {
6621
- const currentTime = useRef16(null);
6689
+ const currentTime = useRef17(null);
6622
6690
  useEffect11(() => {
6623
6691
  const { current } = mediaRef;
6624
6692
  if (current) {
@@ -6875,14 +6943,14 @@ var useMediaPlayback = ({
6875
6943
  const buffering = useContext27(BufferingContextReact);
6876
6944
  const { fps } = useVideoConfig();
6877
6945
  const mediaStartsAt = useMediaStartsAt();
6878
- const lastSeekDueToShift = useRef17(null);
6879
- const lastSeek = useRef17(null);
6946
+ const lastSeekDueToShift = useRef18(null);
6947
+ const lastSeek = useRef18(null);
6880
6948
  const logLevel = useLogLevel();
6881
6949
  const mountTime = useMountTime();
6882
6950
  if (!buffering) {
6883
6951
  throw new Error("useMediaPlayback must be used inside a <BufferingContext>");
6884
6952
  }
6885
- const isVariableFpsVideoMap = useRef17({});
6953
+ const isVariableFpsVideoMap = useRef18({});
6886
6954
  const onVariableFpsVideoDetected = useCallback13(() => {
6887
6955
  if (!src) {
6888
6956
  return;
@@ -7165,14 +7233,14 @@ var SetMediaVolumeContext = createContext22({
7165
7233
  var useMediaVolumeState = () => {
7166
7234
  const { mediaVolume } = useContext28(MediaVolumeContext);
7167
7235
  const { setMediaVolume } = useContext28(SetMediaVolumeContext);
7168
- return useMemo27(() => {
7236
+ return useMemo28(() => {
7169
7237
  return [mediaVolume, setMediaVolume];
7170
7238
  }, [mediaVolume, setMediaVolume]);
7171
7239
  };
7172
7240
  var useMediaMutedState = () => {
7173
7241
  const { mediaMuted } = useContext28(MediaVolumeContext);
7174
7242
  const { setMediaMuted } = useContext28(SetMediaVolumeContext);
7175
- return useMemo27(() => {
7243
+ return useMemo28(() => {
7176
7244
  return [mediaMuted, setMediaMuted];
7177
7245
  }, [mediaMuted, setMediaMuted]);
7178
7246
  };
@@ -7182,7 +7250,7 @@ var warnAboutTooHighVolume = (volume) => {
7182
7250
  }
7183
7251
  };
7184
7252
  var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7185
- const [initialShouldPreMountAudioElements] = useState16(props.shouldPreMountAudioTags);
7253
+ const [initialShouldPreMountAudioElements] = useState15(props.shouldPreMountAudioTags);
7186
7254
  if (props.shouldPreMountAudioTags !== initialShouldPreMountAudioElements) {
7187
7255
  throw new Error("Cannot change the behavior for pre-mounting audio tags dynamically.");
7188
7256
  }
@@ -7227,7 +7295,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7227
7295
  }
7228
7296
  const preloadedSrc = usePreload(src);
7229
7297
  const sequenceContext = useContext29(SequenceContext);
7230
- const [timelineId] = useState16(() => String(Math.random()));
7298
+ const [timelineId] = useState15(() => String(Math.random()));
7231
7299
  const userPreferredVolume = evaluateVolume({
7232
7300
  frame: volumePropFrame,
7233
7301
  volume,
@@ -7239,7 +7307,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7239
7307
  requestsVideoFrame: false,
7240
7308
  isClientSideRendering: false
7241
7309
  });
7242
- const propsToPass = useMemo28(() => {
7310
+ const propsToPass = useMemo29(() => {
7243
7311
  return {
7244
7312
  muted: muted || mediaMuted || userPreferredVolume <= 0,
7245
7313
  src: preloadedSrc,
@@ -7256,7 +7324,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7256
7324
  userPreferredVolume,
7257
7325
  crossOriginValue
7258
7326
  ]);
7259
- const id = useMemo28(() => `audio-${random(src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}-muted:${props.muted}-loop:${props.loop}`, [
7327
+ const id = useMemo29(() => `audio-${random(src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}-muted:${props.muted}-loop:${props.loop}`, [
7260
7328
  src,
7261
7329
  sequenceContext?.relativeFrom,
7262
7330
  sequenceContext?.cumulatedFrom,
@@ -7274,6 +7342,9 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7274
7342
  premounting: Boolean(sequenceContext?.premounting),
7275
7343
  postmounting: Boolean(sequenceContext?.postmounting)
7276
7344
  });
7345
+ const getStack = useCallback14(() => {
7346
+ return _remotionInternalStack ?? null;
7347
+ }, [_remotionInternalStack]);
7277
7348
  useMediaInTimeline({
7278
7349
  volume,
7279
7350
  mediaVolume,
@@ -7282,7 +7353,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7282
7353
  playbackRate: playbackRate ?? 1,
7283
7354
  displayName: name ?? null,
7284
7355
  id: timelineId,
7285
- stack: _remotionInternalStack,
7356
+ getStack,
7286
7357
  showInTimeline,
7287
7358
  premountDisplay: sequenceContext?.premountDisplay ?? null,
7288
7359
  postmountDisplay: sequenceContext?.postmountDisplay ?? null,
@@ -7327,7 +7398,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7327
7398
  useImperativeHandle4(ref, () => {
7328
7399
  return audioRef.current;
7329
7400
  }, [audioRef]);
7330
- const currentOnDurationCallback = useRef18(onDuration);
7401
+ const currentOnDurationCallback = useRef19(onDuration);
7331
7402
  currentOnDurationCallback.current = onDuration;
7332
7403
  useEffect14(() => {
7333
7404
  const { current } = audioRef;
@@ -7358,7 +7429,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
7358
7429
  };
7359
7430
  var AudioForPreview = forwardRef7(AudioForDevelopmentForwardRefFunction);
7360
7431
  var AudioForRenderingRefForwardingFunction = (props, ref) => {
7361
- const audioRef = useRef19(null);
7432
+ const audioRef = useRef20(null);
7362
7433
  const {
7363
7434
  volume: volumeProp,
7364
7435
  playbackRate,
@@ -7384,7 +7455,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
7384
7455
  const sequenceContext = useContext30(SequenceContext);
7385
7456
  const { registerRenderAsset, unregisterRenderAsset } = useContext30(RenderAssetManager);
7386
7457
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
7387
- const id = useMemo29(() => `audio-${random(props.src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}`, [
7458
+ const id = useMemo30(() => `audio-${random(props.src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}`, [
7388
7459
  props.src,
7389
7460
  sequenceContext?.relativeFrom,
7390
7461
  sequenceContext?.cumulatedFrom,
@@ -7515,7 +7586,7 @@ var AudioRefForwardingFunction = (props, ref) => {
7515
7586
  throw new TypeError(`The \`<Html5Audio>\` tag requires a string for \`src\`, but got ${JSON.stringify(props.src)} instead.`);
7516
7587
  }
7517
7588
  const preloadedSrc = usePreload(props.src);
7518
- const onError = useCallback14((e) => {
7589
+ const onError = useCallback15((e) => {
7519
7590
  console.log(e.currentTarget.error);
7520
7591
  const errMessage = `Could not play audio with src ${preloadedSrc}: ${e.currentTarget.error}. See https://remotion.dev/docs/media-playback-error for help.`;
7521
7592
  if (loop) {
@@ -7529,7 +7600,7 @@ var AudioRefForwardingFunction = (props, ref) => {
7529
7600
  console.warn(errMessage);
7530
7601
  }
7531
7602
  }, [loop, onRemotionError, preloadedSrc]);
7532
- const onDuration = useCallback14((src, durationInSeconds) => {
7603
+ const onDuration = useCallback15((src, durationInSeconds) => {
7533
7604
  setDurations({ type: "got-duration", durationInSeconds, src });
7534
7605
  }, [setDurations]);
7535
7606
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props.src)];
@@ -7619,15 +7690,15 @@ var IFrameRefForwarding = ({
7619
7690
  ...props2
7620
7691
  }, ref) => {
7621
7692
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
7622
- const [handle] = useState17(() => delayRender2(`Loading <IFrame> with source ${props2.src}`, {
7693
+ const [handle] = useState16(() => delayRender2(`Loading <IFrame> with source ${props2.src}`, {
7623
7694
  retries: delayRenderRetries ?? undefined,
7624
7695
  timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
7625
7696
  }));
7626
- const didLoad = useCallback15((e) => {
7697
+ const didLoad = useCallback16((e) => {
7627
7698
  continueRender2(handle);
7628
7699
  onLoad?.(e);
7629
7700
  }, [handle, onLoad, continueRender2]);
7630
- const didGetError = useCallback15((e) => {
7701
+ const didGetError = useCallback16((e) => {
7631
7702
  continueRender2(handle);
7632
7703
  if (onError) {
7633
7704
  onError(e);
@@ -7665,8 +7736,8 @@ var ImgContent = ({
7665
7736
  ref,
7666
7737
  ...props2
7667
7738
  }) => {
7668
- const imageRef = useRef20(null);
7669
- const errors = useRef20({});
7739
+ const imageRef = useRef21(null);
7740
+ const errors = useRef21({});
7670
7741
  const { delayPlayback } = useBufferState();
7671
7742
  const sequenceContext = useContext32(SequenceContext);
7672
7743
  const _propsValid = true;
@@ -7677,7 +7748,7 @@ var ImgContent = ({
7677
7748
  return imageRef.current;
7678
7749
  }, []);
7679
7750
  const actualSrc = usePreload(src);
7680
- const retryIn = useCallback16((timeout) => {
7751
+ const retryIn = useCallback17((timeout) => {
7681
7752
  if (!imageRef.current) {
7682
7753
  return;
7683
7754
  }
@@ -7695,7 +7766,7 @@ var ImgContent = ({
7695
7766
  }, timeout);
7696
7767
  }, []);
7697
7768
  const { delayRender: delayRender2, continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
7698
- const didGetError = useCallback16((e) => {
7769
+ const didGetError = useCallback17((e) => {
7699
7770
  if (!errors.current) {
7700
7771
  return;
7701
7772
  }
@@ -7807,15 +7878,18 @@ var ImgInner = ({
7807
7878
  ...props2
7808
7879
  }) => {
7809
7880
  const sequenceContext = useContext32(SequenceContext);
7810
- const [timelineId] = useState18(() => String(Math.random()));
7881
+ const [timelineId] = useState17(() => String(Math.random()));
7811
7882
  if (!src) {
7812
7883
  throw new Error('No "src" prop was passed to <Img>.');
7813
7884
  }
7885
+ const stackRef = useRef21(null);
7886
+ stackRef.current = stack ?? null;
7887
+ const getStack = useCallback17(() => stackRef.current, []);
7814
7888
  useImageInTimeline({
7815
7889
  src,
7816
7890
  displayName: name ?? null,
7817
7891
  id: timelineId,
7818
- stack: stack ?? null,
7892
+ getStack,
7819
7893
  showInTimeline: showInTimeline ?? true,
7820
7894
  premountDisplay: sequenceContext?.premountDisplay ?? null,
7821
7895
  postmountDisplay: sequenceContext?.postmountDisplay ?? null,
@@ -7831,7 +7905,7 @@ var ImgInner = ({
7831
7905
  });
7832
7906
  };
7833
7907
  var imgSchema = {
7834
- ...sequenceStyleSchema,
7908
+ ...sequenceVisualStyleSchema,
7835
7909
  hidden: hiddenField
7836
7910
  };
7837
7911
  var Img = wrapInSchema(ImgInner, imgSchema);
@@ -7844,18 +7918,18 @@ var CompositionManagerProvider = ({
7844
7918
  initialCompositions,
7845
7919
  initialCanvasContent
7846
7920
  }) => {
7847
- const [folders, setFolders] = useState19([]);
7848
- const [canvasContent, setCanvasContent] = useState19(initialCanvasContent);
7849
- const [compositions, setCompositions] = useState19(initialCompositions);
7850
- const currentcompositionsRef = useRef21(compositions);
7851
- const updateCompositions = useCallback17((updateComps) => {
7921
+ const [folders, setFolders] = useState18([]);
7922
+ const [canvasContent, setCanvasContent] = useState18(initialCanvasContent);
7923
+ const [compositions, setCompositions] = useState18(initialCompositions);
7924
+ const currentcompositionsRef = useRef22(compositions);
7925
+ const updateCompositions = useCallback18((updateComps) => {
7852
7926
  setCompositions((comps) => {
7853
7927
  const updated = updateComps(comps);
7854
7928
  currentcompositionsRef.current = updated;
7855
7929
  return updated;
7856
7930
  });
7857
7931
  }, []);
7858
- const registerComposition = useCallback17((comp) => {
7932
+ const registerComposition = useCallback18((comp) => {
7859
7933
  updateCompositions((comps) => {
7860
7934
  if (comps.find((c2) => c2.id === comp.id)) {
7861
7935
  throw new Error(`Multiple composition with id ${comp.id} are registered.`);
@@ -7863,12 +7937,12 @@ var CompositionManagerProvider = ({
7863
7937
  return [...comps, comp];
7864
7938
  });
7865
7939
  }, [updateCompositions]);
7866
- const unregisterComposition = useCallback17((id) => {
7940
+ const unregisterComposition = useCallback18((id) => {
7867
7941
  setCompositions((comps) => {
7868
7942
  return comps.filter((c2) => c2.id !== id);
7869
7943
  });
7870
7944
  }, []);
7871
- const registerFolder = useCallback17((name, parent, nonce) => {
7945
+ const registerFolder = useCallback18((name, parent, nonce) => {
7872
7946
  setFolders((prevFolders) => {
7873
7947
  return [
7874
7948
  ...prevFolders,
@@ -7880,7 +7954,7 @@ var CompositionManagerProvider = ({
7880
7954
  ];
7881
7955
  });
7882
7956
  }, []);
7883
- const unregisterFolder = useCallback17((name, parent) => {
7957
+ const unregisterFolder = useCallback18((name, parent) => {
7884
7958
  setFolders((prevFolders) => {
7885
7959
  return prevFolders.filter((p) => !(p.name === name && p.parent === parent));
7886
7960
  });
@@ -7890,7 +7964,7 @@ var CompositionManagerProvider = ({
7890
7964
  getCompositions: () => currentcompositionsRef.current
7891
7965
  };
7892
7966
  }, []);
7893
- const compositionManagerSetters = useMemo30(() => {
7967
+ const compositionManagerSetters = useMemo31(() => {
7894
7968
  return {
7895
7969
  registerComposition,
7896
7970
  unregisterComposition,
@@ -7906,7 +7980,7 @@ var CompositionManagerProvider = ({
7906
7980
  unregisterFolder,
7907
7981
  onlyRenderComposition
7908
7982
  ]);
7909
- const compositionManagerContextValue = useMemo30(() => {
7983
+ const compositionManagerContextValue = useMemo31(() => {
7910
7984
  return {
7911
7985
  compositions,
7912
7986
  folders,
@@ -7986,7 +8060,7 @@ var disabledEffectField = {
7986
8060
  description: "Disabled"
7987
8061
  };
7988
8062
  var createEffect = (definition) => {
7989
- const userCalculateKey = definition.calculateKey;
8063
+ const { calculateKey: userCalculateKey, validateParams } = definition;
7990
8064
  const widened = {
7991
8065
  ...definition,
7992
8066
  calculateKey: (params) => {
@@ -7998,12 +8072,15 @@ var createEffect = (definition) => {
7998
8072
  ...definition.schema
7999
8073
  }
8000
8074
  };
8001
- const factory = (params = {}) => ({
8002
- definition: widened,
8003
- params,
8004
- effectKey: widened.calculateKey(params),
8005
- memoized: false
8006
- });
8075
+ const factory = (params = {}) => {
8076
+ validateParams(params);
8077
+ return {
8078
+ definition: widened,
8079
+ params,
8080
+ effectKey: widened.calculateKey(params),
8081
+ memoized: false
8082
+ };
8083
+ };
8007
8084
  return factory;
8008
8085
  };
8009
8086
  var REMOTION_STUDIO_CONTAINER_ELEMENT = "__remotion-studio-container";
@@ -8054,7 +8131,7 @@ var MediaEnabledProvider = ({
8054
8131
  videoEnabled,
8055
8132
  audioEnabled
8056
8133
  }) => {
8057
- const value = useMemo31(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
8134
+ const value = useMemo32(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
8058
8135
  return /* @__PURE__ */ jsx28(MediaEnabledContext.Provider, {
8059
8136
  value,
8060
8137
  children
@@ -8069,13 +8146,13 @@ var RemotionRootContexts = ({
8069
8146
  audioEnabled,
8070
8147
  frameState
8071
8148
  }) => {
8072
- const nonceContext = useMemo32(() => {
8149
+ const nonceContext = useMemo33(() => {
8073
8150
  let counter = 0;
8074
8151
  return {
8075
8152
  getNonce: () => counter++
8076
8153
  };
8077
8154
  }, []);
8078
- const logging = useMemo32(() => {
8155
+ const logging = useMemo33(() => {
8079
8156
  return { logLevel, mountTime: Date.now() };
8080
8157
  }, [logLevel]);
8081
8158
  return /* @__PURE__ */ jsx29(LogLevelContext.Provider, {
@@ -8369,7 +8446,7 @@ var OffthreadVideoForRendering = ({
8369
8446
  if (!src) {
8370
8447
  throw new TypeError("No `src` was passed to <OffthreadVideo>.");
8371
8448
  }
8372
- const id = useMemo33(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
8449
+ const id = useMemo34(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
8373
8450
  src,
8374
8451
  sequenceContext?.cumulatedFrom,
8375
8452
  sequenceContext?.relativeFrom,
@@ -8424,14 +8501,14 @@ var OffthreadVideoForRendering = ({
8424
8501
  sequenceContext?.relativeFrom,
8425
8502
  audioStreamIndex
8426
8503
  ]);
8427
- const currentTime = useMemo33(() => {
8504
+ const currentTime = useMemo34(() => {
8428
8505
  return getExpectedMediaFrameUncorrected({
8429
8506
  frame,
8430
8507
  playbackRate: playbackRate || 1,
8431
8508
  startFrom: -mediaStartsAt
8432
8509
  }) / videoConfig.fps;
8433
8510
  }, [frame, mediaStartsAt, playbackRate, videoConfig.fps]);
8434
- const actualSrc = useMemo33(() => {
8511
+ const actualSrc = useMemo34(() => {
8435
8512
  return getOffthreadVideoSource({
8436
8513
  src,
8437
8514
  currentTime,
@@ -8439,7 +8516,7 @@ var OffthreadVideoForRendering = ({
8439
8516
  toneMapped
8440
8517
  });
8441
8518
  }, [toneMapped, currentTime, src, transparent]);
8442
- const [imageSrc, setImageSrc] = useState20(null);
8519
+ const [imageSrc, setImageSrc] = useState19(null);
8443
8520
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
8444
8521
  useLayoutEffect11(() => {
8445
8522
  if (!window.remotion_videoEnabled) {
@@ -8512,17 +8589,17 @@ var OffthreadVideoForRendering = ({
8512
8589
  continueRender2,
8513
8590
  delayRender2
8514
8591
  ]);
8515
- const onErr = useCallback18(() => {
8592
+ const onErr = useCallback19(() => {
8516
8593
  if (onError) {
8517
8594
  onError?.(new Error("Failed to load image with src " + imageSrc));
8518
8595
  } else {
8519
8596
  cancelRender("Failed to load image with src " + imageSrc);
8520
8597
  }
8521
8598
  }, [imageSrc, onError]);
8522
- const className = useMemo33(() => {
8599
+ const className = useMemo34(() => {
8523
8600
  return [OBJECTFIT_CONTAIN_CLASS_NAME, props2.className].filter(truthy).join(" ");
8524
8601
  }, [props2.className]);
8525
- const onImageFrame = useCallback18((img) => {
8602
+ const onImageFrame = useCallback19((img) => {
8526
8603
  if (onVideoFrame) {
8527
8604
  onVideoFrame(img);
8528
8605
  }
@@ -8581,8 +8658,8 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8581
8658
  if (!context) {
8582
8659
  throw new Error("SharedAudioContext not found");
8583
8660
  }
8584
- const videoRef = useRef22(null);
8585
- const sharedSource = useMemo34(() => {
8661
+ const videoRef = useRef23(null);
8662
+ const sharedSource = useMemo35(() => {
8586
8663
  if (!context.audioContext) {
8587
8664
  return null;
8588
8665
  }
@@ -8637,7 +8714,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8637
8714
  const parentSequence = useContext35(SequenceContext);
8638
8715
  const logLevel = useLogLevel();
8639
8716
  const mountTime = useMountTime();
8640
- const [timelineId] = useState21(() => String(Math.random()));
8717
+ const [timelineId] = useState20(() => String(Math.random()));
8641
8718
  if (typeof acceptableTimeShift !== "undefined") {
8642
8719
  throw new Error("acceptableTimeShift has been removed. Use acceptableTimeShiftInSeconds instead.");
8643
8720
  }
@@ -8649,6 +8726,9 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8649
8726
  mediaVolume
8650
8727
  });
8651
8728
  warnAboutTooHighVolume(userPreferredVolume);
8729
+ const getStack = useCallback20(() => {
8730
+ return _remotionInternalStack ?? null;
8731
+ }, [_remotionInternalStack]);
8652
8732
  useMediaInTimeline({
8653
8733
  volume,
8654
8734
  mediaVolume,
@@ -8657,7 +8737,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8657
8737
  playbackRate: props2.playbackRate ?? 1,
8658
8738
  displayName: name ?? null,
8659
8739
  id: timelineId,
8660
- stack: _remotionInternalStack,
8740
+ getStack,
8661
8741
  showInTimeline,
8662
8742
  premountDisplay: parentSequence?.premountDisplay ?? null,
8663
8743
  postmountDisplay: parentSequence?.postmountDisplay ?? null,
@@ -8703,7 +8783,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8703
8783
  useImperativeHandle8(ref, () => {
8704
8784
  return videoRef.current;
8705
8785
  }, []);
8706
- useState21(() => playbackLogging({
8786
+ useState20(() => playbackLogging({
8707
8787
  logLevel,
8708
8788
  message: `Mounting video with source = ${actualSrc}, v=${VERSION}, user agent=${typeof navigator === "undefined" ? "server" : navigator.userAgent}`,
8709
8789
  tag: "video",
@@ -8749,7 +8829,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8749
8829
  current.removeEventListener("error", errorHandler);
8750
8830
  };
8751
8831
  }, [onError, src]);
8752
- const currentOnDurationCallback = useRef22(onDuration);
8832
+ const currentOnDurationCallback = useRef23(onDuration);
8753
8833
  currentOnDurationCallback.current = onDuration;
8754
8834
  useEmitVideoFrame({ ref: videoRef, onVideoFrame });
8755
8835
  useEffect18(() => {
@@ -8780,7 +8860,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8780
8860
  current.preload = "auto";
8781
8861
  }
8782
8862
  }, []);
8783
- const actualStyle = useMemo34(() => {
8863
+ const actualStyle = useMemo35(() => {
8784
8864
  return {
8785
8865
  ...style
8786
8866
  };
@@ -8819,7 +8899,7 @@ var InnerOffthreadVideo = (props2) => {
8819
8899
  if (environment.isClientSideRendering) {
8820
8900
  throw new Error("<OffthreadVideo> is not supported in @remotion/web-renderer. Use <Video> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");
8821
8901
  }
8822
- const onDuration = useCallback19(() => {
8902
+ const onDuration = useCallback21(() => {
8823
8903
  return;
8824
8904
  }, []);
8825
8905
  if (typeof props2.src !== "string") {
@@ -8975,7 +9055,7 @@ function useRemotionContexts() {
8975
9055
  const sequenceManagerContext = React36.useContext(SequenceManager);
8976
9056
  const bufferManagerContext = React36.useContext(BufferingContextReact);
8977
9057
  const logLevelContext = React36.useContext(LogLevelContext);
8978
- return useMemo35(() => ({
9058
+ return useMemo36(() => ({
8979
9059
  compositionManagerCtx,
8980
9060
  timelineContext,
8981
9061
  setTimelineContext,
@@ -9067,6 +9147,8 @@ var Internals = {
9067
9147
  wrapInSchema,
9068
9148
  sequenceSchema,
9069
9149
  sequenceStyleSchema,
9150
+ sequenceVisualStyleSchema,
9151
+ sequencePremountSchema,
9070
9152
  flattenActiveSchema,
9071
9153
  getFlatSchemaWithAllKeys,
9072
9154
  RemotionRootContexts,
@@ -9161,6 +9243,8 @@ var Internals = {
9161
9243
  useMemoizedEffects,
9162
9244
  useMemoizedEffectDefinitions,
9163
9245
  createEffect,
9246
+ createWebGLContextError,
9247
+ createWebGL2ContextError,
9164
9248
  computeEffectiveSchemaValuesDotNotation,
9165
9249
  OverrideIdsToNodePathsGettersContext,
9166
9250
  OverrideIdsToNodePathsSettersContext,
@@ -9233,7 +9317,7 @@ var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
9233
9317
  };
9234
9318
  var SeriesSequence = forwardRef12(SeriesSequenceRefForwardingFunction);
9235
9319
  var SeriesInner = (props2) => {
9236
- const childrenValue = useMemo36(() => {
9320
+ const childrenValue = useMemo37(() => {
9237
9321
  let startFrame = 0;
9238
9322
  const flattenedChildren = flattenChildren(props2.children);
9239
9323
  return Children.map(flattenedChildren, (child, i) => {
@@ -9763,7 +9847,7 @@ var VideoForRenderingForwardFunction = ({
9763
9847
  const frame = useCurrentFrame();
9764
9848
  const volumePropsFrame = useFrameForVolumeProp(loopVolumeCurveBehavior ?? "repeat");
9765
9849
  const videoConfig = useUnsafeVideoConfig();
9766
- const videoRef = useRef23(null);
9850
+ const videoRef = useRef24(null);
9767
9851
  const sequenceContext = useContext36(SequenceContext);
9768
9852
  const mediaStartsAt = useMediaStartsAt();
9769
9853
  const environment = useRemotionEnvironment();
@@ -9771,7 +9855,7 @@ var VideoForRenderingForwardFunction = ({
9771
9855
  const mountTime = useMountTime();
9772
9856
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
9773
9857
  const { registerRenderAsset, unregisterRenderAsset } = useContext36(RenderAssetManager);
9774
- const id = useMemo37(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
9858
+ const id = useMemo38(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
9775
9859
  props2.src,
9776
9860
  sequenceContext?.cumulatedFrom,
9777
9861
  sequenceContext?.relativeFrom,
@@ -9988,10 +10072,10 @@ var VideoForwardingFunction = (props2, ref) => {
9988
10072
  throw new TypeError(`The \`<Html5Video>\` tag requires a string for \`src\`, but got ${JSON.stringify(props2.src)} instead.`);
9989
10073
  }
9990
10074
  const preloadedSrc = usePreload(props2.src);
9991
- const onDuration = useCallback20((src, durationInSeconds) => {
10075
+ const onDuration = useCallback22((src, durationInSeconds) => {
9992
10076
  setDurations({ type: "got-duration", durationInSeconds, src });
9993
10077
  }, [setDurations]);
9994
- const onVideoFrame = useCallback20(() => {}, []);
10078
+ const onVideoFrame = useCallback22(() => {}, []);
9995
10079
  const durationFetched = durations[getAbsoluteSrc(preloadedSrc)] ?? durations[getAbsoluteSrc(props2.src)];
9996
10080
  validateMediaTrimProps({ startFrom, endAt, trimBefore, trimAfter });
9997
10081
  const { trimBeforeValue, trimAfterValue } = resolveTrimProps({
@@ -10434,7 +10518,7 @@ var ExpertCard = ({ expert, Link }) => {
10434
10518
  });
10435
10519
  };
10436
10520
  var ExpertsPageContent = ({ Link }) => {
10437
- const expertsInRandomOrder = useMemo38(() => {
10521
+ const expertsInRandomOrder = useMemo39(() => {
10438
10522
  if (typeof window === "undefined") {
10439
10523
  return [];
10440
10524
  }
@@ -10535,7 +10619,7 @@ var ExpertsPageContent = ({ Link }) => {
10535
10619
  import * as React24 from "react";
10536
10620
  import * as React8 from "react";
10537
10621
  import { Fragment as Fragment22, jsx as jsx44 } from "react/jsx-runtime";
10538
- import React52, { useCallback as useCallback22, useRef as useRef24, useState as useState22 } from "react";
10622
+ import React52, { useCallback as useCallback24, useRef as useRef25, useState as useState22 } from "react";
10539
10623
 
10540
10624
  // ../../node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
10541
10625
  function r(e) {
@@ -11877,7 +11961,7 @@ var getDefaultConfig = () => {
11877
11961
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
11878
11962
 
11879
11963
  // ../design/dist/esm/index.mjs
11880
- import React33, { useEffect as useEffect20, useMemo as useMemo41, useState as useState23 } from "react";
11964
+ import React33, { useEffect as useEffect20, useMemo as useMemo42, useState as useState21 } from "react";
11881
11965
 
11882
11966
  // ../paths/dist/esm/index.mjs
11883
11967
  var cutLInstruction = ({
@@ -14643,7 +14727,7 @@ var PathInternals = {
14643
14727
  };
14644
14728
 
14645
14729
  // ../shapes/dist/esm/index.mjs
14646
- import React3, { useMemo as useMemo40 } from "react";
14730
+ import React3, { useMemo as useMemo41 } from "react";
14647
14731
  import { version } from "react-dom";
14648
14732
  import { jsx as jsx42, jsxs as jsxs5 } from "react/jsx-runtime";
14649
14733
  import { jsx as jsx210 } from "react/jsx-runtime";
@@ -14674,13 +14758,13 @@ var RenderSvg = ({
14674
14758
  instructions,
14675
14759
  ...props
14676
14760
  }) => {
14677
- const actualStyle = useMemo40(() => {
14761
+ const actualStyle = useMemo41(() => {
14678
14762
  return {
14679
14763
  overflow: "visible",
14680
14764
  ...style ?? {}
14681
14765
  };
14682
14766
  }, [style]);
14683
- const actualPathStyle = useMemo40(() => {
14767
+ const actualPathStyle = useMemo41(() => {
14684
14768
  return {
14685
14769
  transformBox: "fill-box",
14686
14770
  ...pathStyle ?? {}
@@ -16217,7 +16301,7 @@ var extrudeAndTransformElement = (options) => {
16217
16301
  // ../design/dist/esm/index.mjs
16218
16302
  import { jsx as jsx212, Fragment as Fragment3 } from "react/jsx-runtime";
16219
16303
  import { jsx as jsx311, jsxs as jsxs6 } from "react/jsx-runtime";
16220
- import { useEffect as useEffect22, useMemo as useMemo210, useRef as useRef25 } from "react";
16304
+ import { useEffect as useEffect22, useMemo as useMemo210, useRef as useRef26 } from "react";
16221
16305
  import { jsx as jsx45 } from "react/jsx-runtime";
16222
16306
  import { jsx as jsx53, jsxs as jsxs23 } from "react/jsx-runtime";
16223
16307
  import React62 from "react";
@@ -16244,8 +16328,8 @@ import * as React16 from "react";
16244
16328
  import * as React13 from "react";
16245
16329
  import * as ReactDOM from "react-dom";
16246
16330
  import { jsx as jsx172 } from "react/jsx-runtime";
16247
- import * as React14 from "react";
16248
- import * as React152 from "react";
16331
+ import * as React142 from "react";
16332
+ import * as React15 from "react";
16249
16333
  import { jsx as jsx182 } from "react/jsx-runtime";
16250
16334
  import * as React172 from "react";
16251
16335
  import * as React18 from "react";
@@ -16269,8 +16353,8 @@ import * as React282 from "react";
16269
16353
  import { jsx as jsx232 } from "react/jsx-runtime";
16270
16354
  import * as React35 from "react";
16271
16355
  import * as React312 from "react";
16272
- import * as React292 from "react";
16273
16356
  import { useState as useState112 } from "react";
16357
+ import * as React292 from "react";
16274
16358
  import * as React30 from "react";
16275
16359
  import * as React342 from "react";
16276
16360
  import * as React332 from "react";
@@ -16471,7 +16555,7 @@ var useHoverTransforms = (ref, disabled) => {
16471
16555
  progress: 0,
16472
16556
  isActive: false
16473
16557
  });
16474
- const eventTarget = useMemo41(() => new EventTarget, []);
16558
+ const eventTarget = useMemo42(() => new EventTarget, []);
16475
16559
  useEffect20(() => {
16476
16560
  if (disabled) {
16477
16561
  eventTarget.dispatchEvent(new Event("disabled"));
@@ -16618,7 +16702,7 @@ var getAngle = (ref, coordinates) => {
16618
16702
  };
16619
16703
  var lastCoordinates = null;
16620
16704
  var useMousePosition = (ref) => {
16621
- const [angle, setAngle] = useState23(getAngle(ref.current, lastCoordinates));
16705
+ const [angle, setAngle] = useState21(getAngle(ref.current, lastCoordinates));
16622
16706
  useEffect20(() => {
16623
16707
  const element = ref.current;
16624
16708
  if (!element) {
@@ -16739,7 +16823,7 @@ var Spinner = ({ size, duration }) => {
16739
16823
  height: size
16740
16824
  };
16741
16825
  }, [size]);
16742
- const pathsRef = useRef25([]);
16826
+ const pathsRef = useRef26([]);
16743
16827
  useEffect22(() => {
16744
16828
  const animate = () => {
16745
16829
  const now = performance.now();
@@ -16785,9 +16869,9 @@ var Button = ({
16785
16869
  ...rest
16786
16870
  }) => {
16787
16871
  const [dimensions, setDimensions] = useState22(null);
16788
- const ref = useRef24(null);
16872
+ const ref = useRef25(null);
16789
16873
  const { isActive, progress } = useHoverTransforms(ref, Boolean(disabled || loading));
16790
- const onPointerEnter = useCallback22((e) => {
16874
+ const onPointerEnter = useCallback24((e) => {
16791
16875
  if (e.pointerType !== "mouse") {
16792
16876
  return;
16793
16877
  }
@@ -16824,7 +16908,7 @@ var Button = ({
16824
16908
  const isDisabled = disabled || loading;
16825
16909
  const isAnchor = !asChild && "href" in rest && rest.href !== undefined;
16826
16910
  const sharedClasses = cn("text-text", "inline-flex", "justify-center", "bg-button-bg", "items-center", "font-brand", "border-solid", "text-[1em]", "rounded-lg", "border-black", "border-2", "border-b-4", "cursor-pointer", "px-4", "h-12", "flex-row", "items-center", "relative", "overflow-hidden", isDisabled && "cursor-default opacity-50", className);
16827
- const preventInteraction = useCallback22((e) => {
16911
+ const preventInteraction = useCallback24((e) => {
16828
16912
  e.preventDefault();
16829
16913
  e.stopPropagation();
16830
16914
  }, []);
@@ -17299,15 +17383,15 @@ function dispatchDiscreteCustomEvent(target, event) {
17299
17383
  ReactDOM.flushSync(() => target.dispatchEvent(event));
17300
17384
  }
17301
17385
  function useCallbackRef(callback) {
17302
- const callbackRef = React14.useRef(callback);
17303
- React14.useEffect(() => {
17386
+ const callbackRef = React142.useRef(callback);
17387
+ React142.useEffect(() => {
17304
17388
  callbackRef.current = callback;
17305
17389
  });
17306
- return React14.useMemo(() => (...args) => callbackRef.current?.(...args), []);
17390
+ return React142.useMemo(() => (...args) => callbackRef.current?.(...args), []);
17307
17391
  }
17308
17392
  function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {
17309
17393
  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);
17310
- React152.useEffect(() => {
17394
+ React15.useEffect(() => {
17311
17395
  const handleKeyDown = (event) => {
17312
17396
  if (event.key === "Escape") {
17313
17397
  onEscapeKeyDown(event);
@@ -20025,7 +20109,7 @@ var hideOthers = function(originalTarget, parentNode, markerName) {
20025
20109
  return applyAttributeToOthers(targets, activeParentNode, markerName, "aria-hidden");
20026
20110
  };
20027
20111
  var __assign = function() {
20028
- __assign = Object.assign || function __assign2(t) {
20112
+ __assign = Object.assign || function __assign(t) {
20029
20113
  for (var s, i = 1, n = arguments.length;i < n; i++) {
20030
20114
  s = arguments[i];
20031
20115
  for (var p in s)
@@ -21812,17 +21896,17 @@ function createContextScope2(scopeName, createContextScopeDeps = []) {
21812
21896
  let defaultContexts = [];
21813
21897
  function createContext32(rootComponentName, defaultContext) {
21814
21898
  const BaseContext = React382.createContext(defaultContext);
21815
- const index3 = defaultContexts.length;
21899
+ const index2 = defaultContexts.length;
21816
21900
  defaultContexts = [...defaultContexts, defaultContext];
21817
21901
  const Provider = (props) => {
21818
21902
  const { scope, children, ...context } = props;
21819
- const Context = scope?.[scopeName]?.[index3] || BaseContext;
21903
+ const Context = scope?.[scopeName]?.[index2] || BaseContext;
21820
21904
  const value = React382.useMemo(() => context, Object.values(context));
21821
21905
  return /* @__PURE__ */ jsx272(Context.Provider, { value, children });
21822
21906
  };
21823
21907
  Provider.displayName = rootComponentName + "Provider";
21824
21908
  function useContext222(consumerName, scope) {
21825
- const Context = scope?.[scopeName]?.[index3] || BaseContext;
21909
+ const Context = scope?.[scopeName]?.[index2] || BaseContext;
21826
21910
  const context = React382.useContext(Context);
21827
21911
  if (context)
21828
21912
  return context;
@@ -22019,10 +22103,10 @@ var OrderedDict = class _OrderedDict extends Map {
22019
22103
  super.set(key, value);
22020
22104
  return this;
22021
22105
  }
22022
- insert(index3, key, value) {
22106
+ insert(index2, key, value) {
22023
22107
  const has = this.has(key);
22024
22108
  const length2 = this.#keys.length;
22025
- const relativeIndex = toSafeInteger(index3);
22109
+ const relativeIndex = toSafeInteger(index2);
22026
22110
  let actualIndex = relativeIndex >= 0 ? relativeIndex : length2 + relativeIndex;
22027
22111
  const safeIndex = actualIndex < 0 || actualIndex >= length2 ? -1 : actualIndex;
22028
22112
  if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {
@@ -22060,39 +22144,39 @@ var OrderedDict = class _OrderedDict extends Map {
22060
22144
  }
22061
22145
  return this;
22062
22146
  }
22063
- with(index3, key, value) {
22147
+ with(index2, key, value) {
22064
22148
  const copy = new _OrderedDict(this);
22065
- copy.insert(index3, key, value);
22149
+ copy.insert(index2, key, value);
22066
22150
  return copy;
22067
22151
  }
22068
22152
  before(key) {
22069
- const index3 = this.#keys.indexOf(key) - 1;
22070
- if (index3 < 0) {
22153
+ const index2 = this.#keys.indexOf(key) - 1;
22154
+ if (index2 < 0) {
22071
22155
  return;
22072
22156
  }
22073
- return this.entryAt(index3);
22157
+ return this.entryAt(index2);
22074
22158
  }
22075
22159
  setBefore(key, newKey, value) {
22076
- const index3 = this.#keys.indexOf(key);
22077
- if (index3 === -1) {
22160
+ const index2 = this.#keys.indexOf(key);
22161
+ if (index2 === -1) {
22078
22162
  return this;
22079
22163
  }
22080
- return this.insert(index3, newKey, value);
22164
+ return this.insert(index2, newKey, value);
22081
22165
  }
22082
22166
  after(key) {
22083
- let index3 = this.#keys.indexOf(key);
22084
- index3 = index3 === -1 || index3 === this.size - 1 ? -1 : index3 + 1;
22085
- if (index3 === -1) {
22167
+ let index2 = this.#keys.indexOf(key);
22168
+ index2 = index2 === -1 || index2 === this.size - 1 ? -1 : index2 + 1;
22169
+ if (index2 === -1) {
22086
22170
  return;
22087
22171
  }
22088
- return this.entryAt(index3);
22172
+ return this.entryAt(index2);
22089
22173
  }
22090
22174
  setAfter(key, newKey, value) {
22091
- const index3 = this.#keys.indexOf(key);
22092
- if (index3 === -1) {
22175
+ const index2 = this.#keys.indexOf(key);
22176
+ if (index2 === -1) {
22093
22177
  return this;
22094
22178
  }
22095
- return this.insert(index3 + 1, newKey, value);
22179
+ return this.insert(index2 + 1, newKey, value);
22096
22180
  }
22097
22181
  first() {
22098
22182
  return this.entryAt(0);
@@ -22111,21 +22195,21 @@ var OrderedDict = class _OrderedDict extends Map {
22111
22195
  }
22112
22196
  return deleted;
22113
22197
  }
22114
- deleteAt(index3) {
22115
- const key = this.keyAt(index3);
22198
+ deleteAt(index2) {
22199
+ const key = this.keyAt(index2);
22116
22200
  if (key !== undefined) {
22117
22201
  return this.delete(key);
22118
22202
  }
22119
22203
  return false;
22120
22204
  }
22121
- at(index3) {
22122
- const key = at(this.#keys, index3);
22205
+ at(index2) {
22206
+ const key = at(this.#keys, index2);
22123
22207
  if (key !== undefined) {
22124
22208
  return this.get(key);
22125
22209
  }
22126
22210
  }
22127
- entryAt(index3) {
22128
- const key = at(this.#keys, index3);
22211
+ entryAt(index2) {
22212
+ const key = at(this.#keys, index2);
22129
22213
  if (key !== undefined) {
22130
22214
  return [key, this.get(key)];
22131
22215
  }
@@ -22133,15 +22217,15 @@ var OrderedDict = class _OrderedDict extends Map {
22133
22217
  indexOf(key) {
22134
22218
  return this.#keys.indexOf(key);
22135
22219
  }
22136
- keyAt(index3) {
22137
- return at(this.#keys, index3);
22220
+ keyAt(index2) {
22221
+ return at(this.#keys, index2);
22138
22222
  }
22139
22223
  from(key, offset4) {
22140
- const index3 = this.indexOf(key);
22141
- if (index3 === -1) {
22224
+ const index2 = this.indexOf(key);
22225
+ if (index2 === -1) {
22142
22226
  return;
22143
22227
  }
22144
- let dest = index3 + offset4;
22228
+ let dest = index2 + offset4;
22145
22229
  if (dest < 0)
22146
22230
  dest = 0;
22147
22231
  if (dest >= this.size)
@@ -22149,11 +22233,11 @@ var OrderedDict = class _OrderedDict extends Map {
22149
22233
  return this.at(dest);
22150
22234
  }
22151
22235
  keyFrom(key, offset4) {
22152
- const index3 = this.indexOf(key);
22153
- if (index3 === -1) {
22236
+ const index2 = this.indexOf(key);
22237
+ if (index2 === -1) {
22154
22238
  return;
22155
22239
  }
22156
- let dest = index3 + offset4;
22240
+ let dest = index2 + offset4;
22157
22241
  if (dest < 0)
22158
22242
  dest = 0;
22159
22243
  if (dest >= this.size)
@@ -22161,68 +22245,68 @@ var OrderedDict = class _OrderedDict extends Map {
22161
22245
  return this.keyAt(dest);
22162
22246
  }
22163
22247
  find(predicate, thisArg) {
22164
- let index3 = 0;
22248
+ let index2 = 0;
22165
22249
  for (const entry of this) {
22166
- if (Reflect.apply(predicate, thisArg, [entry, index3, this])) {
22250
+ if (Reflect.apply(predicate, thisArg, [entry, index2, this])) {
22167
22251
  return entry;
22168
22252
  }
22169
- index3++;
22253
+ index2++;
22170
22254
  }
22171
22255
  return;
22172
22256
  }
22173
22257
  findIndex(predicate, thisArg) {
22174
- let index3 = 0;
22258
+ let index2 = 0;
22175
22259
  for (const entry of this) {
22176
- if (Reflect.apply(predicate, thisArg, [entry, index3, this])) {
22177
- return index3;
22260
+ if (Reflect.apply(predicate, thisArg, [entry, index2, this])) {
22261
+ return index2;
22178
22262
  }
22179
- index3++;
22263
+ index2++;
22180
22264
  }
22181
22265
  return -1;
22182
22266
  }
22183
22267
  filter(predicate, thisArg) {
22184
22268
  const entries = [];
22185
- let index3 = 0;
22269
+ let index2 = 0;
22186
22270
  for (const entry of this) {
22187
- if (Reflect.apply(predicate, thisArg, [entry, index3, this])) {
22271
+ if (Reflect.apply(predicate, thisArg, [entry, index2, this])) {
22188
22272
  entries.push(entry);
22189
22273
  }
22190
- index3++;
22274
+ index2++;
22191
22275
  }
22192
22276
  return new _OrderedDict(entries);
22193
22277
  }
22194
22278
  map(callbackfn, thisArg) {
22195
22279
  const entries = [];
22196
- let index3 = 0;
22280
+ let index2 = 0;
22197
22281
  for (const entry of this) {
22198
- entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index3, this])]);
22199
- index3++;
22282
+ entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index2, this])]);
22283
+ index2++;
22200
22284
  }
22201
22285
  return new _OrderedDict(entries);
22202
22286
  }
22203
22287
  reduce(...args) {
22204
22288
  const [callbackfn, initialValue] = args;
22205
- let index3 = 0;
22289
+ let index2 = 0;
22206
22290
  let accumulator = initialValue ?? this.at(0);
22207
22291
  for (const entry of this) {
22208
- if (index3 === 0 && args.length === 1) {
22292
+ if (index2 === 0 && args.length === 1) {
22209
22293
  accumulator = entry;
22210
22294
  } else {
22211
- accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index3, this]);
22295
+ accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index2, this]);
22212
22296
  }
22213
- index3++;
22297
+ index2++;
22214
22298
  }
22215
22299
  return accumulator;
22216
22300
  }
22217
22301
  reduceRight(...args) {
22218
22302
  const [callbackfn, initialValue] = args;
22219
22303
  let accumulator = initialValue ?? this.at(-1);
22220
- for (let index3 = this.size - 1;index3 >= 0; index3--) {
22221
- const entry = this.at(index3);
22222
- if (index3 === this.size - 1 && args.length === 1) {
22304
+ for (let index2 = this.size - 1;index2 >= 0; index2--) {
22305
+ const entry = this.at(index2);
22306
+ if (index2 === this.size - 1 && args.length === 1) {
22223
22307
  accumulator = entry;
22224
22308
  } else {
22225
- accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index3, this]);
22309
+ accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index2, this]);
22226
22310
  }
22227
22311
  }
22228
22312
  return accumulator;
@@ -22233,8 +22317,8 @@ var OrderedDict = class _OrderedDict extends Map {
22233
22317
  }
22234
22318
  toReversed() {
22235
22319
  const reversed = new _OrderedDict;
22236
- for (let index3 = this.size - 1;index3 >= 0; index3--) {
22237
- const key = this.keyAt(index3);
22320
+ for (let index2 = this.size - 1;index2 >= 0; index2--) {
22321
+ const key = this.keyAt(index2);
22238
22322
  const element = this.get(key);
22239
22323
  reversed.set(key, element);
22240
22324
  }
@@ -22257,44 +22341,44 @@ var OrderedDict = class _OrderedDict extends Map {
22257
22341
  if (end !== undefined && end > 0) {
22258
22342
  stop = end - 1;
22259
22343
  }
22260
- for (let index3 = start;index3 <= stop; index3++) {
22261
- const key = this.keyAt(index3);
22344
+ for (let index2 = start;index2 <= stop; index2++) {
22345
+ const key = this.keyAt(index2);
22262
22346
  const element = this.get(key);
22263
22347
  result.set(key, element);
22264
22348
  }
22265
22349
  return result;
22266
22350
  }
22267
22351
  every(predicate, thisArg) {
22268
- let index3 = 0;
22352
+ let index2 = 0;
22269
22353
  for (const entry of this) {
22270
- if (!Reflect.apply(predicate, thisArg, [entry, index3, this])) {
22354
+ if (!Reflect.apply(predicate, thisArg, [entry, index2, this])) {
22271
22355
  return false;
22272
22356
  }
22273
- index3++;
22357
+ index2++;
22274
22358
  }
22275
22359
  return true;
22276
22360
  }
22277
22361
  some(predicate, thisArg) {
22278
- let index3 = 0;
22362
+ let index2 = 0;
22279
22363
  for (const entry of this) {
22280
- if (Reflect.apply(predicate, thisArg, [entry, index3, this])) {
22364
+ if (Reflect.apply(predicate, thisArg, [entry, index2, this])) {
22281
22365
  return true;
22282
22366
  }
22283
- index3++;
22367
+ index2++;
22284
22368
  }
22285
22369
  return false;
22286
22370
  }
22287
22371
  };
22288
- function at(array, index3) {
22372
+ function at(array, index2) {
22289
22373
  if ("at" in Array.prototype) {
22290
- return Array.prototype.at.call(array, index3);
22374
+ return Array.prototype.at.call(array, index2);
22291
22375
  }
22292
- const actualIndex = toSafeIndex(array, index3);
22376
+ const actualIndex = toSafeIndex(array, index2);
22293
22377
  return actualIndex === -1 ? undefined : array[actualIndex];
22294
22378
  }
22295
- function toSafeIndex(array, index3) {
22379
+ function toSafeIndex(array, index2) {
22296
22380
  const length2 = array.length;
22297
- const relativeIndex = toSafeInteger(index3);
22381
+ const relativeIndex = toSafeInteger(index2);
22298
22382
  const actualIndex = relativeIndex >= 0 ? relativeIndex : length2 + relativeIndex;
22299
22383
  return actualIndex < 0 || actualIndex >= length2 ? -1 : actualIndex;
22300
22384
  }
@@ -22346,7 +22430,7 @@ var Primitive2 = NODES2.reduce((primitive, node) => {
22346
22430
  Node2.displayName = `Primitive.${node}`;
22347
22431
  return { ...primitive, [node]: Node2 };
22348
22432
  }, {});
22349
- function useCallbackRef4(callback) {
22433
+ function useCallbackRef3(callback) {
22350
22434
  const callbackRef = React44.useRef(callback);
22351
22435
  React44.useEffect(() => {
22352
22436
  callbackRef.current = callback;
@@ -22450,7 +22534,7 @@ var RovingFocusGroupImpl = React47.forwardRef((props, forwardedRef) => {
22450
22534
  caller: GROUP_NAME2
22451
22535
  });
22452
22536
  const [isTabbingBackOut, setIsTabbingBackOut] = React47.useState(false);
22453
- const handleEntryFocus = useCallbackRef4(onEntryFocus);
22537
+ const handleEntryFocus = useCallbackRef3(onEntryFocus);
22454
22538
  const getItems = useCollection2(__scopeRovingFocusGroup);
22455
22539
  const isClickFocusRef = React47.useRef(false);
22456
22540
  const [focusableItemsCount, setFocusableItemsCount] = React47.useState(0);
@@ -22603,7 +22687,7 @@ function focusFirst2(candidates, preventScroll = false) {
22603
22687
  }
22604
22688
  }
22605
22689
  function wrapArray2(array, startIndex) {
22606
- return array.map((_, index3) => array[(startIndex + index3) % array.length]);
22690
+ return array.map((_, index2) => array[(startIndex + index2) % array.length]);
22607
22691
  }
22608
22692
  var Root3 = RovingFocusGroup;
22609
22693
  var Item2 = RovingFocusGroupItem;
@@ -22918,7 +23002,7 @@ var Triangle2 = (props) => {
22918
23002
  };
22919
23003
 
22920
23004
  // src/components/homepage/FreePricing.tsx
22921
- import React53, { useCallback as useCallback32, useMemo as useMemo50 } from "react";
23005
+ import React53, { useCallback as useCallback34, useMemo as useMemo51 } from "react";
22922
23006
 
22923
23007
  // ../../node_modules/.bun/tailwind-merge@2.5.2/node_modules/tailwind-merge/dist/bundle-mjs.mjs
22924
23008
  var CLASS_PART_SEPARATOR2 = "-";
@@ -24565,7 +24649,7 @@ var CompanyPricing = () => {
24565
24649
  const [automatorsSelected, setAutomatorsSelected] = React53.useState(true);
24566
24650
  const [devSeatCount, setDevSeatCount] = React53.useState(3);
24567
24651
  const [cloudRenders, setCloudRenders] = React53.useState(1e4);
24568
- const formatPrice = useCallback32((price) => {
24652
+ const formatPrice = useCallback34((price) => {
24569
24653
  const formatter = new Intl.NumberFormat("en-US", {
24570
24654
  style: "currency",
24571
24655
  currency: "USD",
@@ -24575,14 +24659,14 @@ var CompanyPricing = () => {
24575
24659
  }, []);
24576
24660
  const creatorsPrice = creatorsSelected ? devSeatCount * SEAT_PRICE : 0;
24577
24661
  const automatorsPrice = automatorsSelected ? Math.ceil(cloudRenders / 1000) * RENDER_UNIT_PRICE : 0;
24578
- const totalPrice = useMemo50(() => {
24662
+ const totalPrice = useMemo51(() => {
24579
24663
  const basePrice = creatorsPrice + automatorsPrice;
24580
24664
  if (automatorsSelected) {
24581
24665
  return Math.max(100, basePrice);
24582
24666
  }
24583
24667
  return basePrice;
24584
24668
  }, [creatorsPrice, automatorsPrice, automatorsSelected]);
24585
- const totalPriceString = useMemo50(() => {
24669
+ const totalPriceString = useMemo51(() => {
24586
24670
  return formatPrice(totalPrice);
24587
24671
  }, [formatPrice, totalPrice]);
24588
24672
  const showMinimumMessage = automatorsSelected && creatorsPrice + automatorsPrice < 100;
@@ -25288,14 +25372,14 @@ import { createContext as createContext32 } from "react";
25288
25372
  import { jsx as jsx56, jsxs as jsxs13 } from "react/jsx-runtime";
25289
25373
  import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment11 } from "react/jsx-runtime";
25290
25374
  import React56 from "react";
25291
- import { useContext as useContext210, useEffect as useEffect42, useState as useState40 } from "react";
25375
+ import { useContext as useContext210, useEffect as useEffect42, useState as useState38 } from "react";
25292
25376
  import { useContext as useContext44, useLayoutEffect as useLayoutEffect17 } from "react";
25293
25377
  import { jsx as jsx313 } from "react/jsx-runtime";
25294
- import { useEffect as useEffect24, useState as useState24 } from "react";
25378
+ import { useEffect as useEffect24, useState as useState210 } from "react";
25295
25379
  import { useLayoutEffect as useLayoutEffect23 } from "react";
25296
- import { useContext as useContext45, useEffect as useEffect52, useRef as useRef42 } from "react";
25297
- import { useEffect as useEffect310, useRef as useRef26 } from "react";
25298
- import { useCallback as useCallback33, useContext as useContext39, useMemo as useMemo51, useRef as useRef43, useState as useState310 } from "react";
25380
+ import { useContext as useContext45, useEffect as useEffect52, useRef as useRef43 } from "react";
25381
+ import { useEffect as useEffect310, useRef as useRef27 } from "react";
25382
+ import { useCallback as useCallback35, useContext as useContext39, useMemo as useMemo52, useRef as useRef44, useState as useState39 } from "react";
25299
25383
  import { useEffect as useEffect43, useRef as useRef310 } from "react";
25300
25384
  import { useCallback as useCallback210, useEffect as useEffect62, useMemo as useMemo212, useState as useState42 } from "react";
25301
25385
  import {
@@ -25325,10 +25409,10 @@ import { jsx as jsx55 } from "react/jsx-runtime";
25325
25409
  import { useCallback as useCallback72, useEffect as useEffect112, useMemo as useMemo92, useRef as useRef82, useState as useState102 } from "react";
25326
25410
  import { jsx as jsx64 } from "react/jsx-runtime";
25327
25411
  import { useCallback as useCallback42, useMemo as useMemo410, useRef as useRef52, useState as useState62 } from "react";
25328
- import React54, { useCallback as useCallback34, useMemo as useMemo39, useState as useState52 } from "react";
25412
+ import React54, { useCallback as useCallback36, useMemo as useMemo310, useState as useState52 } from "react";
25329
25413
  import { jsx as jsx74, jsxs as jsxs33 } from "react/jsx-runtime";
25330
25414
  import { jsx as jsx84, jsxs as jsxs43 } from "react/jsx-runtime";
25331
- import { useCallback as useCallback52, useEffect as useEffect92, useMemo as useMemo52, useState as useState82 } from "react";
25415
+ import { useCallback as useCallback52, useEffect as useEffect92, useMemo as useMemo53, useState as useState82 } from "react";
25332
25416
  import { useEffect as useEffect83, useRef as useRef62, useState as useState72 } from "react";
25333
25417
  import { jsx as jsx94, jsxs as jsxs53 } from "react/jsx-runtime";
25334
25418
  import { useCallback as useCallback62, useEffect as useEffect102, useMemo as useMemo62, useRef as useRef72, useState as useState92 } from "react";
@@ -26020,7 +26104,7 @@ var proResProfileOptions = [
26020
26104
  "light",
26021
26105
  "proxy"
26022
26106
  ];
26023
- var sequenceStyleSchema2 = {
26107
+ var sequenceVisualStyleSchema2 = {
26024
26108
  "style.translate": {
26025
26109
  type: "translate",
26026
26110
  step: 1,
@@ -26048,7 +26132,9 @@ var sequenceStyleSchema2 = {
26048
26132
  step: 0.01,
26049
26133
  default: 1,
26050
26134
  description: "Opacity"
26051
- },
26135
+ }
26136
+ };
26137
+ var sequencePremountSchema2 = {
26052
26138
  premountFor: {
26053
26139
  type: "number",
26054
26140
  default: 0,
@@ -26066,6 +26152,10 @@ var sequenceStyleSchema2 = {
26066
26152
  type: "hidden"
26067
26153
  }
26068
26154
  };
26155
+ var sequenceStyleSchema2 = {
26156
+ ...sequenceVisualStyleSchema2,
26157
+ ...sequencePremountSchema2
26158
+ };
26069
26159
  var hiddenField2 = {
26070
26160
  type: "boolean",
26071
26161
  default: false,
@@ -26746,7 +26836,7 @@ var useBufferStateEmitter = (emitter) => {
26746
26836
  }, [bufferManager, emitter]);
26747
26837
  };
26748
26838
  var PlayerEmitterProvider = ({ children, currentPlaybackRate }) => {
26749
- const [emitter] = useState40(() => new PlayerEmitter);
26839
+ const [emitter] = useState38(() => new PlayerEmitter);
26750
26840
  const bufferManager = useContext210(Internals.BufferingContextReact);
26751
26841
  if (!bufferManager) {
26752
26842
  throw new Error("BufferingContextReact not found");
@@ -26763,7 +26853,7 @@ var PlayerEmitterProvider = ({ children, currentPlaybackRate }) => {
26763
26853
  });
26764
26854
  };
26765
26855
  var useHoverState = (ref, hideControlsWhenPointerDoesntMove) => {
26766
- const [hovered, setHovered] = useState24(false);
26856
+ const [hovered, setHovered] = useState210(false);
26767
26857
  useEffect24(() => {
26768
26858
  const { current } = ref;
26769
26859
  if (!current) {
@@ -26804,15 +26894,15 @@ var useHoverState = (ref, hideControlsWhenPointerDoesntMove) => {
26804
26894
  };
26805
26895
  var usePlayer = () => {
26806
26896
  const [playing, setPlaying, imperativePlaying] = Internals.Timeline.usePlayingState();
26807
- const [hasPlayed, setHasPlayed] = useState310(false);
26897
+ const [hasPlayed, setHasPlayed] = useState39(false);
26808
26898
  const frame = Internals.Timeline.useTimelinePosition();
26809
- const playStart = useRef43(frame);
26899
+ const playStart = useRef44(frame);
26810
26900
  const setFrame = Internals.Timeline.useTimelineSetFrame();
26811
26901
  const setTimelinePosition = Internals.Timeline.useTimelineSetFrame();
26812
26902
  const audioContext = useContext39(Internals.SharedAudioContext);
26813
26903
  const audioTagsContext = useContext39(Internals.SharedAudioTagsContext);
26814
26904
  const { audioAndVideoTags } = Internals.useTimelineContext();
26815
- const frameRef = useRef43(frame);
26905
+ const frameRef = useRef44(frame);
26816
26906
  frameRef.current = frame;
26817
26907
  const video = Internals.useVideo();
26818
26908
  const config = Internals.useUnsafeVideoConfig();
@@ -26828,14 +26918,14 @@ var usePlayer = () => {
26828
26918
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
26829
26919
  }
26830
26920
  const { buffering } = bufferingContext;
26831
- const seek2 = useCallback33((newFrame) => {
26921
+ const seek2 = useCallback35((newFrame) => {
26832
26922
  if (video?.id) {
26833
26923
  setTimelinePosition((c) => ({ ...c, [video.id]: newFrame }));
26834
26924
  }
26835
26925
  frameRef.current = newFrame;
26836
26926
  emitter.dispatchSeek(newFrame);
26837
26927
  }, [emitter, setTimelinePosition, video?.id]);
26838
- const play = useCallback33((e) => {
26928
+ const play = useCallback35((e) => {
26839
26929
  if (imperativePlaying.current) {
26840
26930
  return;
26841
26931
  }
@@ -26862,7 +26952,7 @@ var usePlayer = () => {
26862
26952
  seek2,
26863
26953
  audioAndVideoTags
26864
26954
  ]);
26865
- const pause = useCallback33(() => {
26955
+ const pause = useCallback35(() => {
26866
26956
  if (imperativePlaying.current) {
26867
26957
  imperativePlaying.current = false;
26868
26958
  setPlaying(false);
@@ -26870,7 +26960,7 @@ var usePlayer = () => {
26870
26960
  audioContext?.suspend();
26871
26961
  }
26872
26962
  }, [emitter, imperativePlaying, setPlaying, audioContext]);
26873
- const pauseAndReturnToPlayStart = useCallback33(() => {
26963
+ const pauseAndReturnToPlayStart = useCallback35(() => {
26874
26964
  if (imperativePlaying.current) {
26875
26965
  imperativePlaying.current = false;
26876
26966
  frameRef.current = playStart.current;
@@ -26885,7 +26975,7 @@ var usePlayer = () => {
26885
26975
  }
26886
26976
  }, [config, emitter, imperativePlaying, setPlaying, setTimelinePosition]);
26887
26977
  const videoId = video?.id;
26888
- const frameBack = useCallback33((frames) => {
26978
+ const frameBack = useCallback35((frames) => {
26889
26979
  if (!videoId) {
26890
26980
  return null;
26891
26981
  }
@@ -26904,7 +26994,7 @@ var usePlayer = () => {
26904
26994
  };
26905
26995
  });
26906
26996
  }, [imperativePlaying, setFrame, videoId]);
26907
- const frameForward = useCallback33((frames) => {
26997
+ const frameForward = useCallback35((frames) => {
26908
26998
  if (!videoId) {
26909
26999
  return null;
26910
27000
  }
@@ -26923,23 +27013,23 @@ var usePlayer = () => {
26923
27013
  };
26924
27014
  });
26925
27015
  }, [videoId, imperativePlaying, lastFrame, setFrame]);
26926
- const toggle = useCallback33((e) => {
27016
+ const toggle = useCallback35((e) => {
26927
27017
  if (imperativePlaying.current) {
26928
27018
  pause();
26929
27019
  } else {
26930
27020
  play(e);
26931
27021
  }
26932
27022
  }, [imperativePlaying, pause, play]);
26933
- const isPlaying = useCallback33(() => {
27023
+ const isPlaying = useCallback35(() => {
26934
27024
  return imperativePlaying.current;
26935
27025
  }, [imperativePlaying]);
26936
- const getCurrentFrame = useCallback33(() => {
27026
+ const getCurrentFrame = useCallback35(() => {
26937
27027
  return frameRef.current;
26938
27028
  }, [frameRef]);
26939
- const isBuffering = useCallback33(() => {
27029
+ const isBuffering = useCallback35(() => {
26940
27030
  return buffering.current;
26941
27031
  }, [buffering]);
26942
- const returnValue = useMemo51(() => {
27032
+ const returnValue = useMemo52(() => {
26943
27033
  return {
26944
27034
  frameBack,
26945
27035
  frameForward,
@@ -26982,7 +27072,7 @@ var useBrowserMediaSession = ({
26982
27072
  playbackRate
26983
27073
  }) => {
26984
27074
  const { playing, pause, play, emitter, getCurrentFrame, seek: seek2 } = usePlayer();
26985
- const hasEverPlayed = useRef26(false);
27075
+ const hasEverPlayed = useRef27(false);
26986
27076
  useEffect310(() => {
26987
27077
  if (playing) {
26988
27078
  hasEverPlayed.current = true;
@@ -27174,7 +27264,7 @@ var usePlayback = ({
27174
27264
  const sharedAudioContext = useContext45(Internals.SharedAudioContext);
27175
27265
  const logLevel = Internals.useLogLevel();
27176
27266
  const isBackgroundedRef = useIsBackgrounded();
27177
- const lastTimeUpdateTimestamp = useRef42(0);
27267
+ const lastTimeUpdateTimestamp = useRef43(0);
27178
27268
  const context = useContext45(Internals.BufferingContextReact);
27179
27269
  if (!context) {
27180
27270
  throw new Error("Missing the buffering context. Most likely you have a Remotion version mismatch.");
@@ -27640,7 +27730,7 @@ var DefaultVolumeSlider = ({
27640
27730
  inputRef,
27641
27731
  setVolume
27642
27732
  }) => {
27643
- const sliderContainer = useMemo39(() => {
27733
+ const sliderContainer = useMemo310(() => {
27644
27734
  const paddingLeft = 5;
27645
27735
  const common = {
27646
27736
  paddingLeft,
@@ -27662,10 +27752,10 @@ var DefaultVolumeSlider = ({
27662
27752
  }, [isVertical]);
27663
27753
  const randomId = typeof React54.useId === "undefined" ? "volume-slider" : React54.useId();
27664
27754
  const [randomClass] = useState52(() => `__remotion-volume-slider-${random(randomId)}`.replace(".", ""));
27665
- const onVolumeChange = useCallback34((e) => {
27755
+ const onVolumeChange = useCallback36((e) => {
27666
27756
  setVolume(parseFloat(e.target.value));
27667
27757
  }, [setVolume]);
27668
- const inputStyle = useMemo39(() => {
27758
+ const inputStyle = useMemo310(() => {
27669
27759
  const commonStyle = {
27670
27760
  WebkitAppearance: "none",
27671
27761
  backgroundColor: "rgba(255, 255, 255, 0.5)",
@@ -27885,7 +27975,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
27885
27975
  setHovered(false);
27886
27976
  }, []);
27887
27977
  const isFocused = keyboardSelectedRate === rate;
27888
- const actualStyle = useMemo52(() => {
27978
+ const actualStyle = useMemo53(() => {
27889
27979
  return {
27890
27980
  ...rateDiv,
27891
27981
  backgroundColor: hovered || isFocused ? "#eee" : "transparent"
@@ -27952,7 +28042,7 @@ var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
27952
28042
  setPlaybackRate(rate);
27953
28043
  setIsComponentVisible(false);
27954
28044
  }, [setIsComponentVisible, setPlaybackRate]);
27955
- const playbackPopup = useMemo52(() => {
28045
+ const playbackPopup = useMemo53(() => {
27956
28046
  return {
27957
28047
  position: "absolute",
27958
28048
  right: 0,
@@ -29840,10 +29930,10 @@ var Thumbnail = forward2(ThumbnailFn);
29840
29930
 
29841
29931
  // src/components/homepage/Demo/index.tsx
29842
29932
  import {
29843
- useCallback as useCallback48,
29933
+ useCallback as useCallback50,
29844
29934
  useEffect as useEffect58,
29845
- useMemo as useMemo64,
29846
- useRef as useRef53,
29935
+ useMemo as useMemo66,
29936
+ useRef as useRef55,
29847
29937
  useState as useState56
29848
29938
  } from "react";
29849
29939
 
@@ -29899,7 +29989,7 @@ function _isNativeReflectConstruct() {
29899
29989
  try {
29900
29990
  var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
29901
29991
  } catch (t2) {}
29902
- return (_isNativeReflectConstruct = function _isNativeReflectConstruct2() {
29992
+ return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
29903
29993
  return !!t;
29904
29994
  })();
29905
29995
  }
@@ -29917,7 +30007,7 @@ function _construct(t, e, r2) {
29917
30007
  // ../../node_modules/.bun/@babel+runtime@7.27.1/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js
29918
30008
  function _wrapNativeSuper(t) {
29919
30009
  var r2 = typeof Map == "function" ? new Map : undefined;
29920
- return _wrapNativeSuper = function _wrapNativeSuper2(t2) {
30010
+ return _wrapNativeSuper = function _wrapNativeSuper(t2) {
29921
30011
  if (t2 === null || !_isNativeFunction(t2))
29922
30012
  return t2;
29923
30013
  if (typeof t2 != "function")
@@ -30593,7 +30683,7 @@ var UNDERLAY_RED = curriedTransparentize$1(0.9, RED);
30593
30683
  var BLUE_TEXT = curriedDarken$1(0.3, "#42e9f5");
30594
30684
 
30595
30685
  // src/components/homepage/layout/use-color-mode.tsx
30596
- import React57, { useContext as useContext46, useMemo as useMemo53 } from "react";
30686
+ import React57, { useContext as useContext46, useMemo as useMemo54 } from "react";
30597
30687
  import { jsx as jsx57 } from "react/jsx-runtime";
30598
30688
  var Context = React57.createContext(undefined);
30599
30689
  var ColorModeProvider = ({
@@ -30601,7 +30691,7 @@ var ColorModeProvider = ({
30601
30691
  colorMode,
30602
30692
  setColorMode
30603
30693
  }) => {
30604
- const value = useMemo53(() => {
30694
+ const value = useMemo54(() => {
30605
30695
  return { colorMode, setColorMode };
30606
30696
  }, [colorMode, setColorMode]);
30607
30697
  return /* @__PURE__ */ jsx57(Context.Provider, {
@@ -30618,15 +30708,15 @@ function useColorMode() {
30618
30708
  }
30619
30709
 
30620
30710
  // ../media/dist/esm/index.mjs
30621
- import { useState as useState312 } from "react";
30622
- import { useMemo as useMemo311 } from "react";
30623
- import { useContext as useContext212, useEffect as useEffect44, useMemo as useMemo55, useRef as useRef45, useState as useState41 } from "react";
30711
+ import { useState as useState311 } from "react";
30712
+ import { useMemo as useMemo312 } from "react";
30713
+ import { useContext as useContext212, useEffect as useEffect44, useMemo as useMemo56, useRef as useRef46, useState as useState40 } from "react";
30624
30714
  import { ALL_FORMATS, Input as Input2, UrlSource } from "mediabunny";
30625
30715
  import { AudioBufferSink, InputDisposedError } from "mediabunny";
30626
30716
  import { CanvasSink } from "mediabunny";
30627
30717
  import { useContext as useContext48, useLayoutEffect as useLayoutEffect18 } from "react";
30628
30718
  import { jsx as jsx58 } from "react/jsx-runtime";
30629
- import { useContext as useContext311, useLayoutEffect as useLayoutEffect24, useMemo as useMemo213, useState as useState210 } from "react";
30719
+ import { useContext as useContext311, useLayoutEffect as useLayoutEffect24, useMemo as useMemo213, useState as useState212 } from "react";
30630
30720
  import React211 from "react";
30631
30721
  import {
30632
30722
  ALL_FORMATS as ALL_FORMATS2,
@@ -30653,7 +30743,7 @@ import { jsx as jsx412 } from "react/jsx-runtime";
30653
30743
  import {
30654
30744
  useContext as useContext53,
30655
30745
  useLayoutEffect as useLayoutEffect43,
30656
- useMemo as useMemo54,
30746
+ useMemo as useMemo55,
30657
30747
  useRef as useRef312,
30658
30748
  useState as useState53
30659
30749
  } from "react";
@@ -31722,6 +31812,10 @@ var videoIteratorManager = async ({
31722
31812
  let videoFrameIterator = null;
31723
31813
  let framesRendered = 0;
31724
31814
  let currentDelayHandle = null;
31815
+ let lastDrawnFrame = null;
31816
+ const clearLastDrawnFrame = () => {
31817
+ lastDrawnFrame = null;
31818
+ };
31725
31819
  if (canvas) {
31726
31820
  const displayWidth = await videoTrack.getDisplayWidth();
31727
31821
  const displayHeight = await videoTrack.getDisplayHeight();
@@ -31736,7 +31830,7 @@ var videoIteratorManager = async ({
31736
31830
  alpha: true
31737
31831
  });
31738
31832
  const prewarmedVideoIteratorCache = makePrewarmedVideoIteratorCache(canvasSink);
31739
- const drawFrame = async (frame) => {
31833
+ const paintFrame = async (frame) => {
31740
31834
  if (context && canvas) {
31741
31835
  const effects = getEffects();
31742
31836
  const chainState = getEffectChainState(canvas.width, canvas.height);
@@ -31754,6 +31848,10 @@ var videoIteratorManager = async ({
31754
31848
  context.drawImage(frame.canvas, 0, 0);
31755
31849
  }
31756
31850
  }
31851
+ };
31852
+ const drawFrame = async (frame) => {
31853
+ await paintFrame(frame);
31854
+ lastDrawnFrame = frame;
31757
31855
  framesRendered++;
31758
31856
  drawDebugOverlay();
31759
31857
  const callback = getOnVideoFrameCallback();
@@ -31762,9 +31860,22 @@ var videoIteratorManager = async ({
31762
31860
  }
31763
31861
  Internals.Log.trace({ logLevel, tag: "@remotion/media" }, `[MediaPlayer] Drew frame ${frame.timestamp.toFixed(3)}s`);
31764
31862
  };
31863
+ const redrawCurrentFrame = async () => {
31864
+ if (!lastDrawnFrame) {
31865
+ return;
31866
+ }
31867
+ await paintFrame(lastDrawnFrame);
31868
+ drawDebugOverlay();
31869
+ const callback = getOnVideoFrameCallback();
31870
+ if (callback) {
31871
+ callback(lastDrawnFrame.canvas);
31872
+ }
31873
+ Internals.Log.trace({ logLevel, tag: "@remotion/media" }, `[MediaPlayer] Redrew frame ${lastDrawnFrame.timestamp.toFixed(3)}s with updated effects`);
31874
+ };
31765
31875
  const startVideoIterator = async (timeToSeek, nonce) => {
31766
31876
  let __stack = [];
31767
31877
  try {
31878
+ clearLastDrawnFrame();
31768
31879
  videoFrameIterator?.destroy();
31769
31880
  const delayHandle = __using(__stack, delayPlaybackHandleIfNotPremounting(), 0);
31770
31881
  currentDelayHandle = delayHandle;
@@ -31816,6 +31927,7 @@ var videoIteratorManager = async ({
31816
31927
  getVideoIteratorsCreated: () => videoIteratorsCreated,
31817
31928
  seek: seek2,
31818
31929
  destroy: () => {
31930
+ clearLastDrawnFrame();
31819
31931
  prewarmedVideoIteratorCache.destroy();
31820
31932
  videoFrameIterator?.destroy();
31821
31933
  if (context && canvas) {
@@ -31829,6 +31941,7 @@ var videoIteratorManager = async ({
31829
31941
  },
31830
31942
  getVideoFrameIterator: () => videoFrameIterator,
31831
31943
  drawFrame,
31944
+ redrawCurrentFrame,
31832
31945
  getFramesRendered: () => framesRendered
31833
31946
  };
31834
31947
  };
@@ -32338,6 +32451,9 @@ class MediaPlayer {
32338
32451
  setVideoFrameCallback(callback) {
32339
32452
  this.onVideoFrameCallback = callback;
32340
32453
  }
32454
+ async redrawVideoEffects() {
32455
+ await this.videoIteratorManager?.redrawCurrentFrame();
32456
+ }
32341
32457
  drawDebugOverlay = () => {
32342
32458
  if (!this.debugOverlay)
32343
32459
  return;
@@ -32559,11 +32675,11 @@ var AudioForPreviewAssertedShowing = ({
32559
32675
  }) => {
32560
32676
  const videoConfig = useUnsafeVideoConfig2();
32561
32677
  const frame = useCurrentFrame();
32562
- const mediaPlayerRef = useRef45(null);
32563
- const initialTrimBeforeRef = useRef45(trimBefore);
32564
- const initialTrimAfterRef = useRef45(trimAfter);
32565
- const [mediaPlayerReady, setMediaPlayerReady] = useState41(false);
32566
- const [shouldFallbackToNativeAudio, setShouldFallbackToNativeAudio] = useState41(false);
32678
+ const mediaPlayerRef = useRef46(null);
32679
+ const initialTrimBeforeRef = useRef46(trimBefore);
32680
+ const initialTrimAfterRef = useRef46(trimAfter);
32681
+ const [mediaPlayerReady, setMediaPlayerReady] = useState40(false);
32682
+ const [shouldFallbackToNativeAudio, setShouldFallbackToNativeAudio] = useState40(false);
32567
32683
  const [playing] = Timeline.usePlayingState();
32568
32684
  const { playbackRate: globalPlaybackRate } = Internals.usePlaybackRate();
32569
32685
  const sharedAudioContext = useContext212(SharedAudioContext2);
@@ -32584,7 +32700,7 @@ var AudioForPreviewAssertedShowing = ({
32584
32700
  throw new TypeError("No `src` was passed to <NewAudioForPreview>.");
32585
32701
  }
32586
32702
  const currentTime = frame / videoConfig.fps;
32587
- const currentTimeRef = useRef45(currentTime);
32703
+ const currentTimeRef = useRef46(currentTime);
32588
32704
  currentTimeRef.current = currentTime;
32589
32705
  const preloadedSrc = usePreload2(src);
32590
32706
  const parentSequence = useContext212(SequenceContext2);
@@ -32597,14 +32713,14 @@ var AudioForPreviewAssertedShowing = ({
32597
32713
  }
32598
32714
  const effectiveMuted = muted || mediaMuted || userPreferredVolume <= 0;
32599
32715
  const isPlayerBuffering = Internals.useIsPlayerBuffering(bufferingContext);
32600
- const initialPlaying = useRef45(playing && !isPlayerBuffering);
32601
- const initialIsPremounting = useRef45(isPremounting);
32602
- const initialIsPostmounting = useRef45(isPostmounting);
32603
- const initialGlobalPlaybackRate = useRef45(globalPlaybackRate);
32604
- const initialPlaybackRate = useRef45(playbackRate);
32605
- const initialMuted = useRef45(effectiveMuted);
32606
- const initialDurationInFrames = useRef45(videoConfig.durationInFrames);
32607
- const initialSequenceOffset = useRef45(sequenceOffset);
32716
+ const initialPlaying = useRef46(playing && !isPlayerBuffering);
32717
+ const initialIsPremounting = useRef46(isPremounting);
32718
+ const initialIsPostmounting = useRef46(isPostmounting);
32719
+ const initialGlobalPlaybackRate = useRef46(globalPlaybackRate);
32720
+ const initialPlaybackRate = useRef46(playbackRate);
32721
+ const initialMuted = useRef46(effectiveMuted);
32722
+ const initialDurationInFrames = useRef46(videoConfig.durationInFrames);
32723
+ const initialSequenceOffset = useRef46(sequenceOffset);
32608
32724
  useCommonEffects({
32609
32725
  mediaPlayerRef,
32610
32726
  mediaPlayerReady,
@@ -32815,7 +32931,7 @@ var AudioForPreview2 = ({
32815
32931
  const frame = useCurrentFrame();
32816
32932
  const videoConfig = useVideoConfig();
32817
32933
  const currentTime = frame / videoConfig.fps;
32818
- const showShow = useMemo55(() => {
32934
+ const showShow = useMemo56(() => {
32819
32935
  return getTimeInSeconds({
32820
32936
  unloopedTimeInSeconds: currentTime,
32821
32937
  playbackRate,
@@ -34689,7 +34805,7 @@ var AudioForRendering2 = ({
34689
34805
  }
34690
34806
  const { fps } = videoConfig;
34691
34807
  const { delayRender: delayRender2, continueRender } = useDelayRender();
34692
- const [replaceWithHtml5Audio, setReplaceWithHtml5Audio] = useState210(false);
34808
+ const [replaceWithHtml5Audio, setReplaceWithHtml5Audio] = useState212(false);
34693
34809
  const sequenceContext = useContext311(Internals.SequenceContext);
34694
34810
  const id = useMemo213(() => `media-audio-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
34695
34811
  src,
@@ -34905,8 +35021,8 @@ var AudioInner = (props) => {
34905
35021
  mediaStartsAt,
34906
35022
  loop: props.loop ?? false
34907
35023
  });
34908
- const [mediaDurationInSeconds, setMediaDurationInSeconds] = useState312(null);
34909
- const loopDisplay = useMemo311(() => getLoopDisplay({
35024
+ const [mediaDurationInSeconds, setMediaDurationInSeconds] = useState311(null);
35025
+ const loopDisplay = useMemo312(() => getLoopDisplay({
34910
35026
  loop: props.loop ?? false,
34911
35027
  mediaDurationInSeconds,
34912
35028
  playbackRate: props.playbackRate ?? 1,
@@ -34923,7 +35039,7 @@ var AudioInner = (props) => {
34923
35039
  sequenceDurationInFrames,
34924
35040
  videoConfig.fps
34925
35041
  ]);
34926
- const isMedia = useMemo311(() => ({
35042
+ const isMedia = useMemo312(() => ({
34927
35043
  type: "audio",
34928
35044
  data: basicInfo
34929
35045
  }), [basicInfo]);
@@ -35306,6 +35422,13 @@ var VideoForPreviewAssertedShowing = ({
35306
35422
  }
35307
35423
  mediaPlayer.setVideoFrameCallback(onVideoFrame ?? null);
35308
35424
  }, [onVideoFrame, mediaPlayerReady]);
35425
+ useLayoutEffect34(() => {
35426
+ const mediaPlayer = mediaPlayerRef.current;
35427
+ if (!mediaPlayer || !mediaPlayerReady) {
35428
+ return;
35429
+ }
35430
+ mediaPlayer.redrawVideoEffects().catch(() => {});
35431
+ }, [_experimentalEffects, mediaPlayerReady, mediaPlayerRef]);
35309
35432
  const actualStyle = useMemo412(() => {
35310
35433
  return {
35311
35434
  ...style2,
@@ -35405,7 +35528,7 @@ var VideoForRendering2 = ({
35405
35528
  const { registerRenderAsset, unregisterRenderAsset } = useContext53(Internals.RenderAssetManager);
35406
35529
  const startsAt = Internals.useMediaStartsAt();
35407
35530
  const sequenceContext = useContext53(Internals.SequenceContext);
35408
- const id = useMemo54(() => `media-video-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
35531
+ const id = useMemo55(() => `media-video-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
35409
35532
  src,
35410
35533
  sequenceContext?.cumulatedFrom,
35411
35534
  sequenceContext?.relativeFrom,
@@ -35598,10 +35721,10 @@ var VideoForRendering2 = ({
35598
35721
  credentials
35599
35722
  ]);
35600
35723
  warnAboutObjectFitInStyleOrClassName({ style: style2, className: className2, logLevel });
35601
- const classNameValue = useMemo54(() => {
35724
+ const classNameValue = useMemo55(() => {
35602
35725
  return [Internals.OBJECTFIT_CONTAIN_CLASS_NAME, className2].filter(Internals.truthy).join(" ");
35603
35726
  }, [className2]);
35604
- const styleWithObjectFit = useMemo54(() => {
35727
+ const styleWithObjectFit = useMemo55(() => {
35605
35728
  return {
35606
35729
  ...style2,
35607
35730
  objectFit: objectFitProp
@@ -35692,7 +35815,7 @@ var videoSchema = {
35692
35815
  description: "Hidden"
35693
35816
  },
35694
35817
  loop: { type: "boolean", default: false, description: "Loop" },
35695
- ...Internals.sequenceStyleSchema
35818
+ ...Internals.sequenceVisualStyleSchema
35696
35819
  };
35697
35820
  var InnerVideo = ({
35698
35821
  src,
@@ -35929,19 +36052,19 @@ var Video = Internals.wrapInSchema(VideoInner, videoSchema);
35929
36052
  Internals.addSequenceStackTraces(Video);
35930
36053
 
35931
36054
  // src/components/homepage/Demo/Comp.tsx
35932
- import { useCallback as useCallback40, useEffect as useEffect50, useMemo as useMemo58, useState as useState48 } from "react";
36055
+ import { useCallback as useCallback43, useEffect as useEffect50, useMemo as useMemo59, useState as useState48 } from "react";
35933
36056
 
35934
36057
  // src/components/homepage/Demo/Cards.tsx
35935
36058
  import {
35936
36059
  createRef as createRef4,
35937
- useCallback as useCallback39,
36060
+ useCallback as useCallback41,
35938
36061
  useEffect as useEffect49,
35939
- useRef as useRef49,
36062
+ useRef as useRef50,
35940
36063
  useState as useState47
35941
36064
  } from "react";
35942
36065
 
35943
36066
  // src/components/homepage/Demo/Card.tsx
35944
- import { useCallback as useCallback37, useRef as useRef46 } from "react";
36067
+ import { useCallback as useCallback39, useRef as useRef47 } from "react";
35945
36068
 
35946
36069
  // src/components/homepage/Demo/math.ts
35947
36070
  var paddingAndMargin = 20;
@@ -35975,10 +36098,10 @@ var getIndexFromPosition = (clientX, clientY) => {
35975
36098
  };
35976
36099
 
35977
36100
  // src/components/homepage/Demo/Switcher.tsx
35978
- import { useCallback as useCallback35 } from "react";
36101
+ import { useCallback as useCallback37 } from "react";
35979
36102
  import { jsx as jsx60, jsxs as jsxs14 } from "react/jsx-runtime";
35980
36103
  var Switcher = ({ type, theme, onTap }) => {
35981
- const onPointerDown = useCallback35((e) => {
36104
+ const onPointerDown = useCallback37((e) => {
35982
36105
  e.stopPropagation();
35983
36106
  onTap();
35984
36107
  }, [onTap]);
@@ -36039,9 +36162,9 @@ var Card2 = ({
36039
36162
  onClickRight
36040
36163
  }) => {
36041
36164
  const refToUse = refsToUse[index2];
36042
- const stopPrevious = useRef46([]);
36165
+ const stopPrevious = useRef47([]);
36043
36166
  let newIndices = [...indices];
36044
- const applyPositions = useCallback37((except) => {
36167
+ const applyPositions = useCallback39((except) => {
36045
36168
  let stopped = false;
36046
36169
  stopPrevious.current.forEach((s) => {
36047
36170
  s();
@@ -36114,7 +36237,7 @@ var Card2 = ({
36114
36237
  update();
36115
36238
  });
36116
36239
  }, [newIndices, onUpdate, positions, refsToUse, shouldBePositions]);
36117
- const onPointerDown = useCallback37((e) => {
36240
+ const onPointerDown = useCallback39((e) => {
36118
36241
  e.currentTarget.setPointerCapture(e.pointerId);
36119
36242
  const cardLeft = refToUse.current.offsetLeft;
36120
36243
  const cardTop = refToUse.current.offsetTop;
@@ -36175,7 +36298,7 @@ var Card2 = ({
36175
36298
  }, { once: true });
36176
36299
  refToUse.current.addEventListener("pointermove", onMove);
36177
36300
  }, [applyPositions, index2, positions, refToUse, shouldBePositions]);
36178
- const onPointerUp = useCallback37((e) => {
36301
+ const onPointerUp = useCallback39((e) => {
36179
36302
  e.currentTarget.releasePointerCapture(e.pointerId);
36180
36303
  }, []);
36181
36304
  const { x, y } = getPositionForIndex(index2);
@@ -36302,15 +36425,15 @@ var CurrentCountry = ({ theme, countryPaths, countryLabel }) => {
36302
36425
  // src/components/homepage/Demo/EmojiCard.tsx
36303
36426
  import {
36304
36427
  forwardRef as forwardRef36,
36305
- useCallback as useCallback38,
36428
+ useCallback as useCallback40,
36306
36429
  useEffect as useEffect48,
36307
36430
  useImperativeHandle as useImperativeHandle12,
36308
- useRef as useRef48
36431
+ useRef as useRef49
36309
36432
  } from "react";
36310
36433
 
36311
36434
  // ../lottie/dist/esm/index.mjs
36312
36435
  import lottie from "lottie-web";
36313
- import { useEffect as useEffect46, useRef as useRef47, useState as useState44 } from "react";
36436
+ import { useEffect as useEffect46, useRef as useRef48, useState as useState44 } from "react";
36314
36437
  import { jsx as jsx69 } from "react/jsx-runtime";
36315
36438
  var getLottieMetadata = (animationData) => {
36316
36439
  const width2 = animationData.w;
@@ -36379,10 +36502,10 @@ var Lottie = ({
36379
36502
  }
36380
36503
  validatePlaybackRate2(playbackRate);
36381
36504
  validateLoop(loop);
36382
- const animationRef = useRef47(null);
36383
- const currentFrameRef = useRef47(null);
36384
- const containerRef = useRef47(null);
36385
- const onAnimationLoadedRef = useRef47(onAnimationLoaded);
36505
+ const animationRef = useRef48(null);
36506
+ const currentFrameRef = useRef48(null);
36507
+ const containerRef = useRef48(null);
36508
+ const onAnimationLoadedRef = useRef48(onAnimationLoaded);
36386
36509
  onAnimationLoadedRef.current = onAnimationLoaded;
36387
36510
  const { delayRender: delayRender2, continueRender } = useDelayRender();
36388
36511
  const [handle] = useState44(() => delayRender2("Waiting for Lottie animation to load"));
@@ -36481,14 +36604,14 @@ var Lottie = ({
36481
36604
  };
36482
36605
 
36483
36606
  // src/components/homepage/Demo/DisplayedEmoji.tsx
36484
- import { useEffect as useEffect47, useMemo as useMemo56, useState as useState46 } from "react";
36607
+ import { useEffect as useEffect47, useMemo as useMemo57, useState as useState46 } from "react";
36485
36608
  import { jsx as jsx70 } from "react/jsx-runtime";
36486
36609
  var DisplayedEmoji = ({ emoji }) => {
36487
36610
  const [data, setData] = useState46(null);
36488
36611
  const { durationInFrames, fps } = useVideoConfig();
36489
36612
  const [browser, setBrowser] = useState46(typeof document !== "undefined");
36490
36613
  const { delayRender: delayRender2, continueRender, cancelRender: cancelRender2 } = useDelayRender();
36491
- const src = useMemo56(() => {
36614
+ const src = useMemo57(() => {
36492
36615
  if (emoji === "melting") {
36493
36616
  return "https://fonts.gstatic.com/s/e/notoemoji/latest/1fae0/lottie.json";
36494
36617
  }
@@ -36582,11 +36705,11 @@ var emojiStyle = {
36582
36705
  top: "calc(50% - 50px)"
36583
36706
  };
36584
36707
  var EmojiCardRefFn = ({ emojiIndex }, ref) => {
36585
- const ref1 = useRef48(null);
36586
- const ref2 = useRef48(null);
36587
- const ref3 = useRef48(null);
36588
- const transforms = useRef48([-100, 0, 100]);
36589
- const onLeft = useCallback38(() => {
36708
+ const ref1 = useRef49(null);
36709
+ const ref2 = useRef49(null);
36710
+ const ref3 = useRef49(null);
36711
+ const transforms = useRef49([-100, 0, 100]);
36712
+ const onLeft = useCallback40(() => {
36590
36713
  if (!ref1.current || !ref2.current || !ref3.current) {
36591
36714
  return;
36592
36715
  }
@@ -36597,7 +36720,7 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
36597
36720
  transforms: transforms.current
36598
36721
  });
36599
36722
  }, []);
36600
- const onRight = useCallback38(() => {
36723
+ const onRight = useCallback40(() => {
36601
36724
  if (!ref1.current || !ref2.current || !ref3.current) {
36602
36725
  return;
36603
36726
  }
@@ -36915,7 +37038,7 @@ var Temperature = ({ theme, city, temperatureInCelsius }) => {
36915
37038
  };
36916
37039
 
36917
37040
  // src/components/homepage/Demo/TrendingRepos.tsx
36918
- import { useMemo as useMemo57 } from "react";
37041
+ import { useMemo as useMemo58 } from "react";
36919
37042
  import { jsx as jsx80, jsxs as jsxs21 } from "react/jsx-runtime";
36920
37043
  var TrendingRepoItem = ({ repo, theme, number }) => {
36921
37044
  const frame = useCurrentFrame();
@@ -36928,7 +37051,7 @@ var TrendingRepoItem = ({ repo, theme, number }) => {
36928
37051
  },
36929
37052
  delay: number * 10 + 20
36930
37053
  });
36931
- const item = useMemo57(() => {
37054
+ const item = useMemo58(() => {
36932
37055
  return {
36933
37056
  lineHeight: 1.1,
36934
37057
  fontFamily: "GTPlanar",
@@ -37031,14 +37154,14 @@ var Cards = ({
37031
37154
  location,
37032
37155
  trending
37033
37156
  }) => {
37034
- const container4 = useRef49(null);
37157
+ const container4 = useRef50(null);
37035
37158
  const [refs] = useState47(() => {
37036
37159
  return new Array(4).fill(true).map(() => {
37037
37160
  return createRef4();
37038
37161
  });
37039
37162
  });
37040
- const positions = useRef49(getInitialPositions());
37041
- const shouldBePositions = useRef49(getInitialPositions());
37163
+ const positions = useRef50(getInitialPositions());
37164
+ const shouldBePositions = useRef50(getInitialPositions());
37042
37165
  const { isRendering } = useRemotionEnvironment();
37043
37166
  useEffect49(() => {
37044
37167
  const { current } = container4;
@@ -37056,12 +37179,12 @@ var Cards = ({
37056
37179
  current.removeEventListener("click", onClick);
37057
37180
  };
37058
37181
  }, [onToggle]);
37059
- const ref = useRef49(null);
37060
- const onLeft = useCallback39(() => {
37182
+ const ref = useRef50(null);
37183
+ const onLeft = useCallback41(() => {
37061
37184
  ref.current?.onRight();
37062
37185
  onRightPress();
37063
37186
  }, [onRightPress]);
37064
- const onRight = useCallback39(() => {
37187
+ const onRight = useCallback41(() => {
37065
37188
  ref.current?.onLeft();
37066
37189
  onLeftPress();
37067
37190
  }, [onLeftPress]);
@@ -37131,11 +37254,11 @@ var HomepageVideoComp = ({
37131
37254
  onClickRight
37132
37255
  }) => {
37133
37256
  const [rerenders, setRerenders] = useState48(0);
37134
- const onUpdate = useCallback40((newIndices) => {
37257
+ const onUpdate = useCallback43((newIndices) => {
37135
37258
  setRerenders(rerenders + 1);
37136
37259
  updateCardOrder(newIndices);
37137
37260
  }, [rerenders, updateCardOrder]);
37138
- const emoji = useMemo58(() => {
37261
+ const emoji = useMemo59(() => {
37139
37262
  if ((emojiIndex + 1e4 * 3) % 3 === 1) {
37140
37263
  return "melting";
37141
37264
  }
@@ -37144,7 +37267,7 @@ var HomepageVideoComp = ({
37144
37267
  }
37145
37268
  return "partying-face";
37146
37269
  }, [emojiIndex]);
37147
- const audioSrc = useMemo58(() => {
37270
+ const audioSrc = useMemo59(() => {
37148
37271
  if (emoji === "fire") {
37149
37272
  return fireAudio;
37150
37273
  }
@@ -37229,7 +37352,7 @@ import {
37229
37352
  import { BufferTarget, StreamTarget } from "mediabunny";
37230
37353
 
37231
37354
  // ../core/dist/esm/version.mjs
37232
- var VERSION2 = "4.0.463";
37355
+ var VERSION2 = "4.0.464";
37233
37356
 
37234
37357
  // ../web-renderer/dist/esm/index.mjs
37235
37358
  import { AudioSample, VideoSample } from "mediabunny";
@@ -41858,7 +41981,7 @@ var renderMediaOnWeb = (options2) => {
41858
41981
  };
41859
41982
 
41860
41983
  // src/components/homepage/Demo/DemoRender.tsx
41861
- import React68, { useCallback as useCallback41 } from "react";
41984
+ import React68, { useCallback as useCallback45 } from "react";
41862
41985
  import { z } from "zod";
41863
41986
 
41864
41987
  // src/components/homepage/Demo/DemoErrorIcon.tsx
@@ -41964,7 +42087,7 @@ var Progress = ({ progress }) => {
41964
42087
  };
41965
42088
 
41966
42089
  // src/components/homepage/Demo/Spinner.tsx
41967
- import { useMemo as useMemo59 } from "react";
42090
+ import { useMemo as useMemo60 } from "react";
41968
42091
  import { jsx as jsx95, jsxs as jsxs29, Fragment as Fragment14 } from "react/jsx-runtime";
41969
42092
  var viewBox2 = 100;
41970
42093
  var lines2 = 8;
@@ -41972,7 +42095,7 @@ var className2 = "__remotion_spinner_line";
41972
42095
  var remotionSpinnerAnimation = "__remotion_spinner_animation";
41973
42096
  var translated3 = "M 44 0 L 50 0 a 6 6 0 0 1 6 6 L 56 26 a 6 6 0 0 1 -6 6 L 50 32 a 6 6 0 0 1 -6 -6 L 44 6 a 6 6 0 0 1 6 -6 Z";
41974
42097
  var Spinner2 = ({ size: size4, duration }) => {
41975
- const style2 = useMemo59(() => {
42098
+ const style2 = useMemo60(() => {
41976
42099
  return {
41977
42100
  width: size4,
41978
42101
  height: size4
@@ -42059,7 +42182,7 @@ var RenderButton = ({ renderData, onError, playerRef }) => {
42059
42182
  const [state, setState] = React68.useState({
42060
42183
  type: "idle"
42061
42184
  });
42062
- const triggerRender = useCallback41(async () => {
42185
+ const triggerRender = useCallback45(async () => {
42063
42186
  if (renderData === null) {
42064
42187
  return;
42065
42188
  }
@@ -42234,13 +42357,13 @@ var DragAndDropNudge = () => {
42234
42357
  };
42235
42358
 
42236
42359
  // src/components/homepage/Demo/PlayerSeekBar.tsx
42237
- import { useCallback as useCallback45, useEffect as useEffect53, useMemo as useMemo61, useRef as useRef50, useState as useState51 } from "react";
42360
+ import { useCallback as useCallback47, useEffect as useEffect53, useMemo as useMemo64, useRef as useRef51, useState as useState51 } from "react";
42238
42361
 
42239
42362
  // src/components/homepage/layout/use-el-size.ts
42240
- import { useCallback as useCallback43, useEffect as useEffect51, useMemo as useMemo60, useState as useState50 } from "react";
42363
+ import { useCallback as useCallback46, useEffect as useEffect51, useMemo as useMemo61, useState as useState50 } from "react";
42241
42364
  var useElementSize2 = (ref) => {
42242
42365
  const [size4, setSize] = useState50(null);
42243
- const observer = useMemo60(() => {
42366
+ const observer = useMemo61(() => {
42244
42367
  if (typeof ResizeObserver === "undefined") {
42245
42368
  return;
42246
42369
  }
@@ -42251,7 +42374,7 @@ var useElementSize2 = (ref) => {
42251
42374
  });
42252
42375
  });
42253
42376
  }, []);
42254
- const updateSize = useCallback43(() => {
42377
+ const updateSize = useCallback46(() => {
42255
42378
  if (ref === null) {
42256
42379
  return;
42257
42380
  }
@@ -42363,7 +42486,7 @@ var PlayerSeekBar2 = ({
42363
42486
  outFrame,
42364
42487
  playerRef
42365
42488
  }) => {
42366
- const containerRef = useRef50(null);
42489
+ const containerRef = useRef51(null);
42367
42490
  const barHovered = useHoverState2(containerRef, false);
42368
42491
  const size4 = useElementSize2(containerRef.current);
42369
42492
  const [playing, setPlaying] = useState51(false);
@@ -42403,7 +42526,7 @@ var PlayerSeekBar2 = ({
42403
42526
  dragging: false
42404
42527
  });
42405
42528
  const width2 = size4?.width ?? 0;
42406
- const onPointerDown = useCallback45((e) => {
42529
+ const onPointerDown = useCallback47((e) => {
42407
42530
  if (e.button !== 0) {
42408
42531
  return;
42409
42532
  }
@@ -42417,7 +42540,7 @@ var PlayerSeekBar2 = ({
42417
42540
  });
42418
42541
  onSeekStart();
42419
42542
  }, [durationInFrames, width2, playerRef, playing, onSeekStart]);
42420
- const onPointerMove = useCallback45((e) => {
42543
+ const onPointerMove = useCallback47((e) => {
42421
42544
  if (!size4) {
42422
42545
  throw new Error("Player has no size");
42423
42546
  }
@@ -42428,7 +42551,7 @@ var PlayerSeekBar2 = ({
42428
42551
  const _frame = getFrameFromX2(e.clientX - posLeft, durationInFrames, size4.width);
42429
42552
  playerRef.current.seekTo(_frame);
42430
42553
  }, [dragging.dragging, durationInFrames, playerRef, size4]);
42431
- const onPointerUp = useCallback45(() => {
42554
+ const onPointerUp = useCallback47(() => {
42432
42555
  setDragging({
42433
42556
  dragging: false
42434
42557
  });
@@ -42454,7 +42577,7 @@ var PlayerSeekBar2 = ({
42454
42577
  body.removeEventListener("pointerup", onPointerUp);
42455
42578
  };
42456
42579
  }, [dragging.dragging, onPointerMove, onPointerUp]);
42457
- const knobStyle = useMemo61(() => {
42580
+ const knobStyle = useMemo64(() => {
42458
42581
  return {
42459
42582
  height: KNOB_SIZE3,
42460
42583
  width: KNOB_SIZE3,
@@ -42468,7 +42591,7 @@ var PlayerSeekBar2 = ({
42468
42591
  transition: "opacity 0.s ease"
42469
42592
  };
42470
42593
  }, [barHovered, durationInFrames, frame, width2]);
42471
- const fillStyle = useMemo61(() => {
42594
+ const fillStyle = useMemo64(() => {
42472
42595
  return {
42473
42596
  height: BAR_HEIGHT3,
42474
42597
  backgroundColor: "var(--ifm-font-color-base)",
@@ -42477,7 +42600,7 @@ var PlayerSeekBar2 = ({
42477
42600
  borderRadius: BAR_HEIGHT3 / 2
42478
42601
  };
42479
42602
  }, [durationInFrames, frame, inFrame]);
42480
- const active = useMemo61(() => {
42603
+ const active = useMemo64(() => {
42481
42604
  return {
42482
42605
  height: BAR_HEIGHT3,
42483
42606
  backgroundColor: "var(--ifm-font-color-base)",
@@ -42512,7 +42635,7 @@ var PlayerSeekBar2 = ({
42512
42635
  };
42513
42636
 
42514
42637
  // src/components/homepage/Demo/PlayerVolume.tsx
42515
- import { useCallback as useCallback46, useEffect as useEffect55, useRef as useRef51, useState as useState54 } from "react";
42638
+ import { useCallback as useCallback48, useEffect as useEffect55, useRef as useRef53, useState as useState54 } from "react";
42516
42639
 
42517
42640
  // src/components/homepage/Demo/icons.tsx
42518
42641
  import { jsx as jsx101 } from "react/jsx-runtime";
@@ -42572,7 +42695,7 @@ import { jsx as jsx105 } from "react/jsx-runtime";
42572
42695
  var PlayerVolume = ({ playerRef }) => {
42573
42696
  const [muted, setIsMuted] = useState54(() => playerRef.current?.isMuted() ?? true);
42574
42697
  const [isHovered, setIsHovered] = useState54(false);
42575
- const timerRef = useRef51(null);
42698
+ const timerRef = useRef53(null);
42576
42699
  useEffect55(() => {
42577
42700
  const { current } = playerRef;
42578
42701
  if (!current) {
@@ -42593,7 +42716,7 @@ var PlayerVolume = ({ playerRef }) => {
42593
42716
  document.body.style.userSelect = "auto";
42594
42717
  }
42595
42718
  }, [isHovered]);
42596
- const onClick = useCallback46(() => {
42719
+ const onClick = useCallback48(() => {
42597
42720
  if (timerRef.current !== null) {
42598
42721
  clearTimeout(timerRef.current);
42599
42722
  timerRef.current = null;
@@ -42631,7 +42754,7 @@ var PlayerVolume = ({ playerRef }) => {
42631
42754
  };
42632
42755
 
42633
42756
  // src/components/homepage/Demo/PlayPauseButton.tsx
42634
- import React71, { useCallback as useCallback47, useEffect as useEffect56 } from "react";
42757
+ import React71, { useCallback as useCallback49, useEffect as useEffect56 } from "react";
42635
42758
  import { jsx as jsx107 } from "react/jsx-runtime";
42636
42759
  var playerButtonStyle2 = {
42637
42760
  appearance: "none",
@@ -42667,7 +42790,7 @@ var PlayPauseButton = ({ playerRef }) => {
42667
42790
  current.removeEventListener("pause", onPause);
42668
42791
  };
42669
42792
  }, [playerRef]);
42670
- const onToggle = useCallback47(() => {
42793
+ const onToggle = useCallback49(() => {
42671
42794
  playerRef.current?.toggle();
42672
42795
  }, [playerRef]);
42673
42796
  const playPauseIconStyle = {
@@ -42861,7 +42984,7 @@ var playerWrapper = {
42861
42984
  var Demo = () => {
42862
42985
  const { colorMode } = useColorMode();
42863
42986
  const [data2, setData] = useState56(null);
42864
- const ref = useRef53(null);
42987
+ const ref = useRef55(null);
42865
42988
  const [isFullscreen, setIsFullscreen] = useState56(false);
42866
42989
  const [cardOrder, setCardOrder] = useState56([0, 1, 2, 3]);
42867
42990
  const [emojiIndex, setEmojiIndex] = useState56(0);
@@ -42887,10 +43010,10 @@ var Demo = () => {
42887
43010
  playerRef.removeEventListener("fullscreenchange", onFullscreenChange);
42888
43011
  };
42889
43012
  }, [data2]);
42890
- const updateCardOrder = useCallback48((newCardOrder) => {
43013
+ const updateCardOrder = useCallback50((newCardOrder) => {
42891
43014
  setCardOrder(newCardOrder);
42892
43015
  }, []);
42893
- const props = useMemo64(() => {
43016
+ const props = useMemo66(() => {
42894
43017
  return {
42895
43018
  theme: colorMode,
42896
43019
  onToggle: () => {
@@ -42909,7 +43032,7 @@ var Demo = () => {
42909
43032
  emojiIndex
42910
43033
  };
42911
43034
  }, [cardOrder, emojiIndex, colorMode, data2, updateCardOrder]);
42912
- const onError = useCallback48(() => {
43035
+ const onError = useCallback50(() => {
42913
43036
  setError(true);
42914
43037
  }, []);
42915
43038
  return /* @__PURE__ */ jsxs38("div", {
@@ -43019,15 +43142,15 @@ var ClearButton = (props) => {
43019
43142
 
43020
43143
  // src/components/homepage/MuxVideo.tsx
43021
43144
  import Hls2 from "hls.js";
43022
- import { forwardRef as forwardRef39, useEffect as useEffect60, useImperativeHandle as useImperativeHandle14, useRef as useRef56 } from "react";
43145
+ import { forwardRef as forwardRef39, useEffect as useEffect60, useImperativeHandle as useImperativeHandle14, useRef as useRef57 } from "react";
43023
43146
 
43024
43147
  // src/components/homepage/VideoPlayerWithControls.tsx
43025
43148
  import Hls from "hls.js";
43026
43149
  import"plyr/dist/plyr.css";
43027
- import { forwardRef as forwardRef38, useCallback as useCallback49, useEffect as useEffect59, useRef as useRef55, useState as useState57 } from "react";
43150
+ import { forwardRef as forwardRef38, useCallback as useCallback51, useEffect as useEffect59, useRef as useRef56, useState as useState57 } from "react";
43028
43151
  import { jsx as jsx116 } from "react/jsx-runtime";
43029
43152
  var useCombinedRefs = function(...refs) {
43030
- const targetRef = useRef55(null);
43153
+ const targetRef = useRef56(null);
43031
43154
  useEffect59(() => {
43032
43155
  refs.forEach((ref) => {
43033
43156
  if (!ref)
@@ -43042,12 +43165,12 @@ var useCombinedRefs = function(...refs) {
43042
43165
  return targetRef;
43043
43166
  };
43044
43167
  var VideoPlayerWithControls = forwardRef38(({ playbackId, poster, currentTime, onLoaded, onError, onSize, autoPlay }, ref) => {
43045
- const videoRef = useRef55(null);
43168
+ const videoRef = useRef56(null);
43046
43169
  const metaRef = useCombinedRefs(ref, videoRef);
43047
- const playerRef = useRef55(null);
43170
+ const playerRef = useRef56(null);
43048
43171
  const [playerInitTime] = useState57(Date.now());
43049
- const videoError = useCallback49((event) => onError(event), [onError]);
43050
- const onImageLoad = useCallback49((event) => {
43172
+ const videoError = useCallback51((event) => onError(event), [onError]);
43173
+ const onImageLoad = useCallback51((event) => {
43051
43174
  const [w, h] = [event.target.width, event.target.height];
43052
43175
  if (w && h) {
43053
43176
  onSize({ width: w, height: h });
@@ -43129,7 +43252,7 @@ var getVideoToPlayUrl = (muxId) => {
43129
43252
  return `https://stream.mux.com/${muxId}.m3u8`;
43130
43253
  };
43131
43254
  var MuxVideoForward = ({ muxId, ...props }, ref) => {
43132
- const videoRef = useRef56(null);
43255
+ const videoRef = useRef57(null);
43133
43256
  const vidUrl = getVideoToPlayUrl(muxId);
43134
43257
  useImperativeHandle14(ref, () => videoRef.current, []);
43135
43258
  useEffect60(() => {
@@ -43421,13 +43544,13 @@ var IfYouKnowReact = () => {
43421
43544
  };
43422
43545
 
43423
43546
  // src/components/homepage/NewsletterButton.tsx
43424
- import { useCallback as useCallback50, useState as useState60 } from "react";
43547
+ import { useCallback as useCallback53, useState as useState60 } from "react";
43425
43548
  import { jsx as jsx121, jsxs as jsxs44 } from "react/jsx-runtime";
43426
43549
  var NewsletterButton = () => {
43427
43550
  const [email, setEmail] = useState60("");
43428
43551
  const [submitting, setSubmitting] = useState60(false);
43429
43552
  const [subscribed, setSubscribed] = useState60(false);
43430
- const handleSubmit = useCallback50(async (e) => {
43553
+ const handleSubmit = useCallback53(async (e) => {
43431
43554
  try {
43432
43555
  setSubmitting(true);
43433
43556
  e.preventDefault();
@@ -43509,14 +43632,14 @@ var NewsletterButton = () => {
43509
43632
  };
43510
43633
 
43511
43634
  // src/components/homepage/ParameterizeAndEdit.tsx
43512
- import { useEffect as useEffect65, useRef as useRef57, useState as useState61 } from "react";
43635
+ import { useEffect as useEffect65, useRef as useRef58, useState as useState61 } from "react";
43513
43636
  import { jsx as jsx124, jsxs as jsxs46 } from "react/jsx-runtime";
43514
43637
  var icon3 = {
43515
43638
  height: 16,
43516
43639
  marginLeft: 10
43517
43640
  };
43518
43641
  var ParameterizeAndEdit = () => {
43519
- const ref = useRef57(null);
43642
+ const ref = useRef58(null);
43520
43643
  const [vid, setVid] = useState61("/img/editing-vp9-chrome.webm");
43521
43644
  useEffect65(() => {
43522
43645
  if (isWebkit()) {
@@ -43632,15 +43755,15 @@ var ParameterizeAndEdit = () => {
43632
43755
  };
43633
43756
 
43634
43757
  // src/components/homepage/RealMp4Videos.tsx
43635
- import { useEffect as useEffect66, useRef as useRef58, useState as useState64 } from "react";
43758
+ import { useEffect as useEffect66, useRef as useRef59, useState as useState64 } from "react";
43636
43759
  import { jsx as jsx126, jsxs as jsxs47 } from "react/jsx-runtime";
43637
43760
  var icon4 = {
43638
43761
  height: 16,
43639
43762
  marginLeft: 10
43640
43763
  };
43641
43764
  var RealMP4Videos = () => {
43642
- const ref = useRef58(null);
43643
- const videoRef = useRef58(null);
43765
+ const ref = useRef59(null);
43766
+ const videoRef = useRef59(null);
43644
43767
  const [vid, setVid] = useState64("/img/render-progress.webm");
43645
43768
  useEffect66(() => {
43646
43769
  if (isWebkit()) {
@@ -43893,7 +44016,7 @@ var TrustedByBanner = () => {
43893
44016
  var TrustedByBanner_default = TrustedByBanner;
43894
44017
 
43895
44018
  // src/components/homepage/VideoAppsShowcase.tsx
43896
- import { useRef as useRef59, useState as useState66 } from "react";
44019
+ import { useRef as useRef60, useState as useState66 } from "react";
43897
44020
  import { jsx as jsx128, jsxs as jsxs49 } from "react/jsx-runtime";
43898
44021
  var tabs = [
43899
44022
  "Music visualization",
@@ -43950,8 +44073,8 @@ var VideoAppsShowcase = () => {
43950
44073
  const [isMuted, setIsMuted] = useState66(true);
43951
44074
  const [isPlaying, setIsPlaying] = useState66(false);
43952
44075
  const [videoLoaded, setVideoLoaded] = useState66(false);
43953
- const videoRef = useRef59(null);
43954
- const containerRef = useRef59(null);
44076
+ const videoRef = useRef60(null);
44077
+ const containerRef = useRef60(null);
43955
44078
  const handleTabChange = (index2) => {
43956
44079
  const video = videoRef.current;
43957
44080
  if (video) {
@@ -44233,6 +44356,7 @@ var listOfRemotionPackages = [
44233
44356
  "@remotion/example-videos",
44234
44357
  "@remotion/whisper-web",
44235
44358
  "@remotion/media",
44359
+ "@remotion/remotion-media",
44236
44360
  "@remotion/web-renderer",
44237
44361
  "@remotion/design",
44238
44362
  "@remotion/light-leaks",
@@ -45603,7 +45727,7 @@ var WriteInReact = () => {
45603
45727
  return /* @__PURE__ */ jsxs67("div", {
45604
45728
  children: [
45605
45729
  /* @__PURE__ */ jsx167("h1", {
45606
- className: "text-5xl lg:text-[5em] text-center fontbrand font-black leading-none ",
45730
+ className: "text-4xl sm:text-5xl lg:text-[5em] text-center fontbrand font-black leading-none text-balance",
45607
45731
  style: {
45608
45732
  textShadow: "0 5px 30px var(--background)"
45609
45733
  },
@@ -45617,7 +45741,7 @@ var WriteInReact = () => {
45617
45741
  children: [
45618
45742
  "Create real MP4 videos with React. ",
45619
45743
  /* @__PURE__ */ jsx167("br", {}),
45620
- "Parametrize content, render server-side and build applications."
45744
+ "Use coding agents, build apps and render in bulk."
45621
45745
  ]
45622
45746
  }),
45623
45747
  /* @__PURE__ */ jsx167("br", {}),