@remotion/promo-pages 4.0.498 → 4.0.500

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
@@ -911,7 +911,7 @@ var experts = [
911
911
  }
912
912
  ];
913
913
  // src/components/experts/ExpertsPage.tsx
914
- import { useMemo as useMemo41 } from "react";
914
+ import { useMemo as useMemo42 } from "react";
915
915
 
916
916
  // ../core/dist/esm/index.mjs
917
917
  import { createContext } from "react";
@@ -984,8 +984,9 @@ import {
984
984
  useRef as useRef9,
985
985
  useState as useState6
986
986
  } from "react";
987
- import React16, { useCallback as useCallback7, useImperativeHandle, useMemo as useMemo17, useRef as useRef8 } from "react";
988
- import { useEffect as useEffect4, useMemo as useMemo16, useRef as useRef7 } from "react";
987
+ import { useMemo as useMemo16 } from "react";
988
+ import React16, { useCallback as useCallback7, useImperativeHandle, useMemo as useMemo18, useRef as useRef8 } from "react";
989
+ import { useEffect as useEffect4, useMemo as useMemo17, useRef as useRef7 } from "react";
989
990
  import { jsx as jsx13 } from "react/jsx-runtime";
990
991
  import { jsx as jsx14 } from "react/jsx-runtime";
991
992
  import { useContext as useContext19, useLayoutEffect as useLayoutEffect4, useState as useState8 } from "react";
@@ -994,18 +995,18 @@ import {
994
995
  useCallback as useCallback8,
995
996
  useImperativeHandle as useImperativeHandle3,
996
997
  useLayoutEffect as useLayoutEffect3,
997
- useMemo as useMemo18,
998
+ useMemo as useMemo19,
998
999
  useRef as useRef10,
999
1000
  useState as useState7
1000
1001
  } from "react";
1001
1002
  import { jsx as jsx15 } from "react/jsx-runtime";
1002
1003
  import { forwardRef as forwardRef7, useCallback as useCallback14, useContext as useContext31 } from "react";
1003
- import React17, { createContext as createContext18, useMemo as useMemo19 } from "react";
1004
+ import React17, { createContext as createContext18, useMemo as useMemo20 } from "react";
1004
1005
  import { jsx as jsx16 } from "react/jsx-runtime";
1005
1006
  import { useContext as useContext20 } from "react";
1006
1007
  import { createContext as createContext19, useEffect as useEffect6, useState as useState9 } from "react";
1007
1008
  import { jsx as jsx17 } from "react/jsx-runtime";
1008
- import { createContext as createContext20, useMemo as useMemo20, useReducer } from "react";
1009
+ import { createContext as createContext20, useMemo as useMemo21, useReducer } from "react";
1009
1010
  import { jsx as jsx18 } from "react/jsx-runtime";
1010
1011
  import { useCallback as useCallback13 } from "react";
1011
1012
  import React23, {
@@ -1013,7 +1014,7 @@ import React23, {
1013
1014
  useContext as useContext29,
1014
1015
  useEffect as useEffect14,
1015
1016
  useImperativeHandle as useImperativeHandle4,
1016
- useMemo as useMemo28,
1017
+ useMemo as useMemo29,
1017
1018
  useRef as useRef19,
1018
1019
  useState as useState14
1019
1020
  } from "react";
@@ -1024,14 +1025,14 @@ import React20, {
1024
1025
  useCallback as useCallback9,
1025
1026
  useContext as useContext21,
1026
1027
  useEffect as useEffect7,
1027
- useMemo as useMemo22,
1028
+ useMemo as useMemo23,
1028
1029
  useRef as useRef12,
1029
1030
  useState as useState10
1030
1031
  } from "react";
1031
- import { useMemo as useMemo21, useRef as useRef11 } from "react";
1032
+ import { useMemo as useMemo22, useRef as useRef11 } from "react";
1032
1033
  import { jsx as jsx19, jsxs as jsxs22 } from "react/jsx-runtime";
1033
1034
  import { useRef as useRef13 } from "react";
1034
- import { useContext as useContext24, useEffect as useEffect8, useMemo as useMemo23, useState as useState11 } from "react";
1035
+ import { useContext as useContext24, useEffect as useEffect8, useMemo as useMemo24, useState as useState11 } from "react";
1035
1036
  import { useContext as useContext23 } from "react";
1036
1037
  import {
1037
1038
  useCallback as useCallback12,
@@ -1040,14 +1041,14 @@ import {
1040
1041
  useLayoutEffect as useLayoutEffect7,
1041
1042
  useRef as useRef18
1042
1043
  } from "react";
1043
- import { useCallback as useCallback11, useMemo as useMemo26, useRef as useRef16 } from "react";
1044
- import { useContext as useContext26, useMemo as useMemo25 } from "react";
1044
+ import { useCallback as useCallback11, useMemo as useMemo27, useRef as useRef16 } from "react";
1045
+ import { useContext as useContext26, useMemo as useMemo26 } from "react";
1045
1046
  import React21, {
1046
1047
  useCallback as useCallback10,
1047
1048
  useContext as useContext25,
1048
1049
  useEffect as useEffect9,
1049
1050
  useLayoutEffect as useLayoutEffect6,
1050
- useMemo as useMemo24,
1051
+ useMemo as useMemo25,
1051
1052
  useRef as useRef15,
1052
1053
  useState as useState12
1053
1054
  } from "react";
@@ -1056,7 +1057,7 @@ import React22 from "react";
1056
1057
  import { useEffect as useEffect10, useState as useState13 } from "react";
1057
1058
  import { useEffect as useEffect11, useRef as useRef17 } from "react";
1058
1059
  import { useEffect as useEffect13 } from "react";
1059
- import { createContext as createContext22, useContext as useContext28, useMemo as useMemo27 } from "react";
1060
+ import { createContext as createContext22, useContext as useContext28, useMemo as useMemo28 } from "react";
1060
1061
  import { jsx as jsx21 } from "react/jsx-runtime";
1061
1062
  import {
1062
1063
  forwardRef as forwardRef6,
@@ -1064,7 +1065,7 @@ import {
1064
1065
  useEffect as useEffect15,
1065
1066
  useImperativeHandle as useImperativeHandle5,
1066
1067
  useLayoutEffect as useLayoutEffect8,
1067
- useMemo as useMemo29,
1068
+ useMemo as useMemo30,
1068
1069
  useRef as useRef20
1069
1070
  } from "react";
1070
1071
  import { jsx as jsx222 } from "react/jsx-runtime";
@@ -1074,7 +1075,7 @@ import {
1074
1075
  useCallback as useCallback15,
1075
1076
  useEffect as useEffect16,
1076
1077
  useImperativeHandle as useImperativeHandle6,
1077
- useMemo as useMemo30,
1078
+ useMemo as useMemo31,
1078
1079
  useRef as useRef21,
1079
1080
  useState as useState15
1080
1081
  } from "react";
@@ -1085,7 +1086,7 @@ import {
1085
1086
  useCallback as useCallback16,
1086
1087
  useContext as useContext32,
1087
1088
  useLayoutEffect as useLayoutEffect9,
1088
- useMemo as useMemo31,
1089
+ useMemo as useMemo32,
1089
1090
  useRef as useRef22
1090
1091
  } from "react";
1091
1092
  import { jsx as jsx25 } from "react/jsx-runtime";
@@ -1095,7 +1096,7 @@ import {
1095
1096
  useContext as useContext33,
1096
1097
  useImperativeHandle as useImperativeHandle7,
1097
1098
  useLayoutEffect as useLayoutEffect10,
1098
- useMemo as useMemo32,
1099
+ useMemo as useMemo33,
1099
1100
  useRef as useRef23,
1100
1101
  useState as useState16
1101
1102
  } from "react";
@@ -1117,14 +1118,14 @@ import React31 from "react";
1117
1118
  import {
1118
1119
  useCallback as useCallback21,
1119
1120
  useImperativeHandle as useImperativeHandle8,
1120
- useMemo as useMemo33,
1121
+ useMemo as useMemo34,
1121
1122
  useRef as useRef26,
1122
1123
  useState as useState19
1123
1124
  } from "react";
1124
1125
  import { jsx as jsx30 } from "react/jsx-runtime";
1125
1126
  import React32 from "react";
1126
- import { useMemo as useMemo35 } from "react";
1127
- import { createContext as createContext24, useContext as useContext35, useMemo as useMemo34 } from "react";
1127
+ import { useMemo as useMemo36 } from "react";
1128
+ import { createContext as createContext24, useContext as useContext35, useMemo as useMemo35 } from "react";
1128
1129
  import { jsx as jsx31 } from "react/jsx-runtime";
1129
1130
  import { jsx as jsx32 } from "react/jsx-runtime";
1130
1131
  import React34 from "react";
@@ -1136,7 +1137,7 @@ import {
1136
1137
  useContext as useContext37,
1137
1138
  useEffect as useEffect17,
1138
1139
  useLayoutEffect as useLayoutEffect12,
1139
- useMemo as useMemo36,
1140
+ useMemo as useMemo37,
1140
1141
  useState as useState20
1141
1142
  } from "react";
1142
1143
  import { jsx as jsx33 } from "react/jsx-runtime";
@@ -1146,18 +1147,18 @@ import React38, {
1146
1147
  useContext as useContext38,
1147
1148
  useEffect as useEffect19,
1148
1149
  useImperativeHandle as useImperativeHandle9,
1149
- useMemo as useMemo37,
1150
+ useMemo as useMemo38,
1150
1151
  useRef as useRef27,
1151
1152
  useState as useState21
1152
1153
  } from "react";
1153
1154
  import { useEffect as useEffect18 } from "react";
1154
1155
  import { jsx as jsx34 } from "react/jsx-runtime";
1155
1156
  import { jsx as jsx35 } from "react/jsx-runtime";
1156
- import React40, { useMemo as useMemo38 } from "react";
1157
+ import React40, { useMemo as useMemo39 } from "react";
1157
1158
  import { jsx as jsx36 } from "react/jsx-runtime";
1158
1159
  import React42, {
1159
1160
  forwardRef as forwardRef14,
1160
- useMemo as useMemo39
1161
+ useMemo as useMemo40
1161
1162
  } from "react";
1162
1163
  import React41 from "react";
1163
1164
  import { jsx as jsx37, jsxs as jsxs3, Fragment } from "react/jsx-runtime";
@@ -1169,7 +1170,7 @@ import {
1169
1170
  useEffect as useEffect20,
1170
1171
  useImperativeHandle as useImperativeHandle10,
1171
1172
  useLayoutEffect as useLayoutEffect13,
1172
- useMemo as useMemo40,
1173
+ useMemo as useMemo41,
1173
1174
  useRef as useRef28
1174
1175
  } from "react";
1175
1176
  import { jsx as jsx38 } from "react/jsx-runtime";
@@ -2349,7 +2350,7 @@ var getSingleChildComponent = (children) => {
2349
2350
  }
2350
2351
  return child.type;
2351
2352
  };
2352
- var VERSION = "4.0.498";
2353
+ var VERSION = "4.0.500";
2353
2354
  var checkMultipleRemotionVersions = () => {
2354
2355
  if (typeof globalThis === "undefined") {
2355
2356
  return;
@@ -2391,38 +2392,6 @@ __export2(exports_timeline_position_state, {
2391
2392
  getFrameForComposition: () => getFrameForComposition,
2392
2393
  clampFrameToCompositionRange: () => clampFrameToCompositionRange
2393
2394
  });
2394
- function mulberry32(a) {
2395
- let t = a + 1831565813;
2396
- t = Math.imul(t ^ t >>> 15, t | 1);
2397
- t ^= t + Math.imul(t ^ t >>> 7, t | 61);
2398
- return ((t ^ t >>> 14) >>> 0) / 4294967296;
2399
- }
2400
- function hashCode(str) {
2401
- let i = 0;
2402
- let chr = 0;
2403
- let hash = 0;
2404
- for (i = 0;i < str.length; i++) {
2405
- chr = str.charCodeAt(i);
2406
- hash = (hash << 5) - hash + chr;
2407
- hash |= 0;
2408
- }
2409
- return hash;
2410
- }
2411
- var random = (seed, dummy) => {
2412
- if (dummy !== undefined) {
2413
- throw new TypeError("random() takes only one argument");
2414
- }
2415
- if (seed === null) {
2416
- return Math.random();
2417
- }
2418
- if (typeof seed === "string") {
2419
- return mulberry32(hashCode(seed));
2420
- }
2421
- if (typeof seed === "number") {
2422
- return mulberry32(seed * 10000000000);
2423
- }
2424
- throw new Error("random() argument must be a number or a string");
2425
- };
2426
2395
  var SetTimelineContext = createContext13({
2427
2396
  setFrame: () => {
2428
2397
  throw new Error("default");
@@ -2439,7 +2408,6 @@ var TimelineContextProvider = ({ children, frameState }) => {
2439
2408
  const imperativePlaying = useRef3(false);
2440
2409
  const [playbackRate, setPlaybackRate] = useState2(1);
2441
2410
  const audioAndVideoTags = useRef3([]);
2442
- const [remotionRootId] = useState2(() => String(random(null)));
2443
2411
  const [_frame, setFrame] = useState2(() => getInitialFrameState());
2444
2412
  const frame = frameState ?? _frame;
2445
2413
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
@@ -2474,10 +2442,9 @@ var TimelineContextProvider = ({ children, frameState }) => {
2474
2442
  frame,
2475
2443
  playing,
2476
2444
  imperativePlaying,
2477
- rootId: remotionRootId,
2478
2445
  audioAndVideoTags
2479
2446
  };
2480
- }, [frame, playing, remotionRootId]);
2447
+ }, [frame, playing]);
2481
2448
  const playbackRateContextValue = useMemo8(() => {
2482
2449
  return {
2483
2450
  playbackRate,
@@ -2866,6 +2833,29 @@ var backgroundSchema = {
2866
2833
  description: "Color"
2867
2834
  }
2868
2835
  };
2836
+ var svgStrokeSchema = {
2837
+ stroke: {
2838
+ type: "color",
2839
+ default: "none",
2840
+ description: "Stroke"
2841
+ },
2842
+ strokeWidth: {
2843
+ type: "number",
2844
+ default: 1,
2845
+ description: "Stroke width",
2846
+ min: 0,
2847
+ step: 1,
2848
+ hiddenFromList: false
2849
+ }
2850
+ };
2851
+ var svgPaintSchema = {
2852
+ fill: {
2853
+ type: "color",
2854
+ default: undefined,
2855
+ description: "Fill"
2856
+ },
2857
+ ...svgStrokeSchema
2858
+ };
2869
2859
  var textContentSchema = {
2870
2860
  children: {
2871
2861
  type: "text-content",
@@ -2896,7 +2886,51 @@ var premountSchema = {
2896
2886
  var sequencePremountSchema = {
2897
2887
  ...premountSchema
2898
2888
  };
2889
+ var cropSchema = {
2890
+ cropLeft: {
2891
+ type: "number",
2892
+ default: 0,
2893
+ description: "Crop left",
2894
+ min: 0,
2895
+ max: 1,
2896
+ step: 0.01,
2897
+ hiddenFromList: false,
2898
+ keyframable: true
2899
+ },
2900
+ cropRight: {
2901
+ type: "number",
2902
+ default: 0,
2903
+ description: "Crop right",
2904
+ min: 0,
2905
+ max: 1,
2906
+ step: 0.01,
2907
+ hiddenFromList: false,
2908
+ keyframable: true
2909
+ },
2910
+ cropTop: {
2911
+ type: "number",
2912
+ default: 0,
2913
+ description: "Crop top",
2914
+ min: 0,
2915
+ max: 1,
2916
+ step: 0.01,
2917
+ hiddenFromList: false,
2918
+ keyframable: true
2919
+ },
2920
+ cropBottom: {
2921
+ type: "number",
2922
+ default: 0,
2923
+ description: "Crop bottom",
2924
+ min: 0,
2925
+ max: 1,
2926
+ step: 0.01,
2927
+ hiddenFromList: false,
2928
+ keyframable: true
2929
+ }
2930
+ };
2931
+ var sequenceCropSchema = cropSchema;
2899
2932
  var sequenceStyleSchema = {
2933
+ ...sequenceCropSchema,
2900
2934
  ...transformSchema,
2901
2935
  ...backgroundSchema,
2902
2936
  ...borderSchema,
@@ -2985,6 +3019,54 @@ var sequenceSchemaDefaultLayoutNone = {
2985
3019
  default: "none"
2986
3020
  }
2987
3021
  };
3022
+ var clampCrop = (value) => {
3023
+ return Math.min(1, Math.max(0, value ?? 0));
3024
+ };
3025
+ var resolveAxis = (start, end) => {
3026
+ const resolvedStart = clampCrop(start);
3027
+ const resolvedEnd = clampCrop(end);
3028
+ if (resolvedStart + resolvedEnd > 1) {
3029
+ return [0.5, 0.5];
3030
+ }
3031
+ return [resolvedStart, resolvedEnd];
3032
+ };
3033
+ var resolveSequenceCrop = ({
3034
+ cropLeft,
3035
+ cropRight,
3036
+ cropTop,
3037
+ cropBottom
3038
+ }) => {
3039
+ const [left, right] = resolveAxis(cropLeft, cropRight);
3040
+ const [top, bottom] = resolveAxis(cropTop, cropBottom);
3041
+ return { left, right, top, bottom };
3042
+ };
3043
+ var getSequenceCropClipPath = ({
3044
+ left,
3045
+ right,
3046
+ top,
3047
+ bottom,
3048
+ borderRadius
3049
+ }) => {
3050
+ if (left === 0 && right === 0 && top === 0 && bottom === 0) {
3051
+ return null;
3052
+ }
3053
+ const serializedBorderRadius = typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius;
3054
+ const rounded = serializedBorderRadius ? ` round ${serializedBorderRadius}` : "";
3055
+ return `inset(${top * 100}% ${right * 100}% ${bottom * 100}% ${left * 100}%${rounded})`;
3056
+ };
3057
+ var validateSequenceCrop = (crop, componentName = "<Sequence />") => {
3058
+ for (const [name, value] of Object.entries(crop)) {
3059
+ if (value === undefined) {
3060
+ continue;
3061
+ }
3062
+ if (typeof value !== "number" || !Number.isFinite(value)) {
3063
+ throw new TypeError(`The "${name}" prop of ${componentName} must be a finite number, but got ${String(value)}.`);
3064
+ }
3065
+ if (value < 0 || value > 1) {
3066
+ throw new RangeError(`The "${name}" prop of ${componentName} must be between 0 and 1, but got ${value}.`);
3067
+ }
3068
+ }
3069
+ };
2988
3070
  var SequenceManager = React12.createContext({
2989
3071
  registerSequence: () => {
2990
3072
  throw new Error("SequenceManagerContext not initialized");
@@ -5404,7 +5486,7 @@ var withInteractivitySchema = ({
5404
5486
  const flatKeys = Object.keys(flatSchema);
5405
5487
  const Wrapped = forwardRef2((props, ref) => {
5406
5488
  const env = useRemotionEnvironment();
5407
- if (!env.isStudio || env.isReadOnlyStudio || env.isRendering) {
5489
+ if (!env.isStudio || env.isRendering) {
5408
5490
  return React14.createElement(Component, {
5409
5491
  ...props,
5410
5492
  controls: null,
@@ -5434,7 +5516,7 @@ var withInteractivitySchema = ({
5434
5516
  stackToOverrideMap[stack] = newOverrideId;
5435
5517
  return newOverrideId;
5436
5518
  });
5437
- const nodePath = nodePathMapping.overrideIdToNodePathMappings[overrideId] ?? null;
5519
+ const nodePath = env.isReadOnlyStudio ? null : nodePathMapping.overrideIdToNodePathMappings[overrideId] ?? null;
5438
5520
  const runtimeValues = flatKeys.map((key) => getRuntimeValueForSchemaKey({
5439
5521
  flatSchema,
5440
5522
  key,
@@ -5505,17 +5587,32 @@ var RegularSequenceRefForwardingFunction = ({
5505
5587
  _remotionInternalPostmountDisplay: postmountDisplay,
5506
5588
  _remotionInternalIsMedia: isMedia,
5507
5589
  outlineRef: passedRefForOutline,
5590
+ cropLeft,
5591
+ cropRight,
5592
+ cropTop,
5593
+ cropBottom,
5508
5594
  ...other
5509
5595
  }, ref) => {
5510
5596
  const { layout = "absolute-fill" } = other;
5511
5597
  const [id] = useState5(() => String(Math.random()));
5512
5598
  const parentSequence = useContext18(SequenceContext);
5513
- const { rootId } = useTimelineContext();
5514
5599
  const cumulatedFrom = parentSequence ? parentSequence.cumulatedFrom + parentSequence.relativeFrom : 0;
5515
5600
  const nonce = useNonce();
5516
5601
  if (layout !== "absolute-fill" && layout !== "none") {
5517
5602
  throw new TypeError(`The layout prop of <Sequence /> expects either "absolute-fill" or "none", but you passed: ${layout}`);
5518
5603
  }
5604
+ const cropProps = { cropLeft, cropRight, cropTop, cropBottom };
5605
+ const hasCropProp = Object.values(cropProps).some((value) => value !== undefined);
5606
+ if (layout === "none" && hasCropProp) {
5607
+ throw new TypeError('The cropLeft, cropRight, cropTop and cropBottom props of <Sequence /> are only supported with layout="absolute-fill".');
5608
+ }
5609
+ validateSequenceCrop(cropProps);
5610
+ const {
5611
+ left: resolvedCropLeft,
5612
+ right: resolvedCropRight,
5613
+ top: resolvedCropTop,
5614
+ bottom: resolvedCropBottom
5615
+ } = resolveSequenceCrop(cropProps);
5519
5616
  if (layout === "none" && typeof other.style !== "undefined") {
5520
5617
  throw new TypeError('If layout="none", you may not pass a style. Passed: ' + JSON.stringify(other.style));
5521
5618
  }
@@ -5641,7 +5738,6 @@ var RegularSequenceRefForwardingFunction = ({
5641
5738
  parent: parentSequence?.id ?? null,
5642
5739
  postmountDisplay: postmountDisplay ?? null,
5643
5740
  premountDisplay: premountDisplay ?? null,
5644
- rootId,
5645
5741
  showInTimeline,
5646
5742
  src: isMedia.src,
5647
5743
  getStack: () => stackRef.current,
@@ -5668,7 +5764,6 @@ var RegularSequenceRefForwardingFunction = ({
5668
5764
  playbackRate: isMedia.data.playbackRate,
5669
5765
  postmountDisplay: postmountDisplay ?? null,
5670
5766
  premountDisplay: premountDisplay ?? null,
5671
- rootId,
5672
5767
  showInTimeline,
5673
5768
  src: isMedia.data.src,
5674
5769
  getStack: () => stackRef.current,
@@ -5695,7 +5790,6 @@ var RegularSequenceRefForwardingFunction = ({
5695
5790
  documentationLink: resolvedDocumentationLink,
5696
5791
  parent: parentSequence?.id ?? null,
5697
5792
  type: "sequence",
5698
- rootId,
5699
5793
  showInTimeline,
5700
5794
  nonce: nonce.get(),
5701
5795
  loopDisplay,
@@ -5721,7 +5815,6 @@ var RegularSequenceRefForwardingFunction = ({
5721
5815
  unregisterSequence,
5722
5816
  parentSequence?.id,
5723
5817
  actualDurationInFrames,
5724
- rootId,
5725
5818
  from,
5726
5819
  trimBefore,
5727
5820
  registeredTrimBefore,
@@ -5750,6 +5843,13 @@ var RegularSequenceRefForwardingFunction = ({
5750
5843
  children: content
5751
5844
  });
5752
5845
  const styleIfThere = other.layout === "none" ? undefined : other.style;
5846
+ const cropClipPath = getSequenceCropClipPath({
5847
+ left: resolvedCropLeft,
5848
+ right: resolvedCropRight,
5849
+ top: resolvedCropTop,
5850
+ bottom: resolvedCropBottom,
5851
+ borderRadius: styleIfThere?.borderRadius
5852
+ });
5753
5853
  const sequenceRef = useCallback6((node) => {
5754
5854
  wrapperRefForOutline.current = node;
5755
5855
  if (typeof ref === "function") {
@@ -5763,9 +5863,12 @@ var RegularSequenceRefForwardingFunction = ({
5763
5863
  flexDirection: undefined,
5764
5864
  ...width ? { width } : {},
5765
5865
  ...height ? { height } : {},
5766
- ...styleIfThere ?? {}
5866
+ ...styleIfThere ?? {},
5867
+ ...cropClipPath ? {
5868
+ clipPath: cropClipPath
5869
+ } : {}
5767
5870
  };
5768
- }, [height, styleIfThere, width]);
5871
+ }, [cropClipPath, height, styleIfThere, width]);
5769
5872
  if (ref !== null && layout === "none") {
5770
5873
  throw new TypeError('It is not supported to pass both a `ref` and `layout="none"` to <Sequence />.');
5771
5874
  }
@@ -5864,6 +5967,26 @@ var SequenceWithoutFrom = withInteractivitySchema({
5864
5967
  schema: sequenceSchemaWithoutFrom,
5865
5968
  supportsEffects: false
5866
5969
  });
5970
+ var useCropStyle = ({
5971
+ cropLeft,
5972
+ cropRight,
5973
+ cropTop,
5974
+ cropBottom,
5975
+ style,
5976
+ componentName
5977
+ }) => {
5978
+ validateSequenceCrop({ cropLeft, cropRight, cropTop, cropBottom }, componentName);
5979
+ return useMemo16(() => {
5980
+ const cropClipPath = getSequenceCropClipPath({
5981
+ ...resolveSequenceCrop({ cropLeft, cropRight, cropTop, cropBottom }),
5982
+ borderRadius: style?.borderRadius
5983
+ });
5984
+ if (cropClipPath === null) {
5985
+ return style;
5986
+ }
5987
+ return { ...style, clipPath: cropClipPath };
5988
+ }, [cropBottom, cropLeft, cropRight, cropTop, style]);
5989
+ };
5867
5990
  var calculateImageFit = (fit, imageSize, canvasSize) => {
5868
5991
  switch (fit) {
5869
5992
  case "fill": {
@@ -6156,7 +6279,7 @@ var useEffectChainState = () => {
6156
6279
  }
6157
6280
  };
6158
6281
  }, []);
6159
- return useMemo16(() => ({
6282
+ return useMemo17(() => ({
6160
6283
  get: (width, height) => {
6161
6284
  if (!sizeRef.current || sizeRef.current.width !== width || sizeRef.current.height !== height) {
6162
6285
  if (chainStateRef.current) {
@@ -6172,7 +6295,7 @@ var useEffectChainState = () => {
6172
6295
  var CanvasRefForwardingFunction = ({ width, height, fit, className, style, effects, ...props }, ref) => {
6173
6296
  const canvasRef = useRef8(null);
6174
6297
  const chainState = useEffectChainState();
6175
- const sourceCanvas = useMemo17(() => {
6298
+ const sourceCanvas = useMemo18(() => {
6176
6299
  if (typeof document === "undefined") {
6177
6300
  return null;
6178
6301
  }
@@ -6434,6 +6557,7 @@ var animatedImageSchema = {
6434
6557
  keyframable: false
6435
6558
  },
6436
6559
  ...baseSchema,
6560
+ ...cropSchema,
6437
6561
  ...premountSchema,
6438
6562
  playbackRate: {
6439
6563
  type: "number",
@@ -6628,6 +6752,10 @@ var AnimatedImageInner = ({
6628
6752
  postmountFor,
6629
6753
  styleWhilePremounted,
6630
6754
  styleWhilePostmounted,
6755
+ cropLeft,
6756
+ cropRight,
6757
+ cropTop,
6758
+ cropBottom,
6631
6759
  requestInit,
6632
6760
  effects = [],
6633
6761
  controls,
@@ -6657,6 +6785,14 @@ var AnimatedImageInner = ({
6657
6785
  styleWhilePostmounted: styleWhilePostmounted ?? null,
6658
6786
  hideWhilePremounted: "display-none"
6659
6787
  });
6788
+ const croppedStyle = useCropStyle({
6789
+ cropLeft,
6790
+ cropRight,
6791
+ cropTop,
6792
+ cropBottom,
6793
+ style: premountingStyle,
6794
+ componentName: "<AnimatedImage />"
6795
+ });
6660
6796
  const canvasProps = getCanvasPropsFromSequenceProps(sequenceProps);
6661
6797
  const animatedImageProps = {
6662
6798
  src,
@@ -6668,7 +6804,7 @@ var AnimatedImageInner = ({
6668
6804
  loopBehavior,
6669
6805
  id,
6670
6806
  className,
6671
- style: premountingStyle ?? undefined,
6807
+ style: croppedStyle ?? undefined,
6672
6808
  requestInit,
6673
6809
  ...canvasProps
6674
6810
  };
@@ -6809,7 +6945,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
6809
6945
  };
6810
6946
  }
6811
6947
  }, []);
6812
- const contextValue = useMemo18(() => {
6948
+ const contextValue = useMemo19(() => {
6813
6949
  return {
6814
6950
  registerRenderAsset,
6815
6951
  unregisterRenderAsset,
@@ -6938,14 +7074,14 @@ var Loop = ({
6938
7074
  const iteration = Math.floor(currentFrame / durationInFrames);
6939
7075
  const start = iteration * durationInFrames;
6940
7076
  const from = Math.min(start, maxFrame);
6941
- const loopDisplay = useMemo19(() => {
7077
+ const loopDisplay = useMemo20(() => {
6942
7078
  return {
6943
7079
  numberOfTimes: Math.min(compDuration / durationInFrames, times),
6944
7080
  startOffset: -from,
6945
7081
  durationInFrames
6946
7082
  };
6947
7083
  }, [compDuration, durationInFrames, from, times]);
6948
- const loopContext = useMemo19(() => {
7084
+ const loopContext = useMemo20(() => {
6949
7085
  return {
6950
7086
  iteration: Math.floor(currentFrame / durationInFrames),
6951
7087
  durationInFrames
@@ -7317,7 +7453,7 @@ var DurationsContext = createContext20({
7317
7453
  });
7318
7454
  var DurationsContextProvider = ({ children }) => {
7319
7455
  const [durations, setDurations] = useReducer(durationReducer, {});
7320
- const value = useMemo20(() => {
7456
+ const value = useMemo21(() => {
7321
7457
  return {
7322
7458
  durations,
7323
7459
  setDurations
@@ -7344,6 +7480,38 @@ var getCrossOriginValue = ({
7344
7480
  }
7345
7481
  return;
7346
7482
  };
7483
+ function mulberry32(a2) {
7484
+ let t = a2 + 1831565813;
7485
+ t = Math.imul(t ^ t >>> 15, t | 1);
7486
+ t ^= t + Math.imul(t ^ t >>> 7, t | 61);
7487
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
7488
+ }
7489
+ function hashCode(str) {
7490
+ let i = 0;
7491
+ let chr = 0;
7492
+ let hash = 0;
7493
+ for (i = 0;i < str.length; i++) {
7494
+ chr = str.charCodeAt(i);
7495
+ hash = (hash << 5) - hash + chr;
7496
+ hash |= 0;
7497
+ }
7498
+ return hash;
7499
+ }
7500
+ var random = (seed, dummy) => {
7501
+ if (dummy !== undefined) {
7502
+ throw new TypeError("random() takes only one argument");
7503
+ }
7504
+ if (seed === null) {
7505
+ return Math.random();
7506
+ }
7507
+ if (typeof seed === "string") {
7508
+ return mulberry32(hashCode(seed));
7509
+ }
7510
+ if (typeof seed === "number") {
7511
+ return mulberry32(seed * 10000000000);
7512
+ }
7513
+ throw new Error("random() argument must be a number or a string");
7514
+ };
7347
7515
  var playAndHandleNotAllowedError = ({
7348
7516
  mediaRef,
7349
7517
  mediaType,
@@ -7460,7 +7628,7 @@ var useSingletonAudioContext = ({
7460
7628
  if (sampleRate !== initialSampleRate.current) {
7461
7629
  throw new Error(`Changing the AudioContext sample rate dynamically is not supported. The sample rate was initialized with ${initialSampleRate.current} Hz, but ${sampleRate} Hz was passed later.`);
7462
7630
  }
7463
- const context = useMemo21(() => {
7631
+ const context = useMemo22(() => {
7464
7632
  if (env.isRendering) {
7465
7633
  return null;
7466
7634
  }
@@ -7594,9 +7762,9 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
7594
7762
  });
7595
7763
  const audioContextIsPlayingEventually = useRef12(false);
7596
7764
  const isResuming = useRef12(null);
7597
- const audioSyncAnchor = useMemo22(() => ({ value: 0 }), []);
7765
+ const audioSyncAnchor = useMemo23(() => ({ value: 0 }), []);
7598
7766
  const audioSyncAnchorListeners = useRef12([]);
7599
- const audioSyncAnchorEmitter = useMemo22(() => {
7767
+ const audioSyncAnchorEmitter = useMemo23(() => {
7600
7768
  return {
7601
7769
  dispatch: (event) => {
7602
7770
  audioSyncAnchorListeners.current.forEach((l) => l(event));
@@ -7616,7 +7784,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
7616
7784
  const unscheduleAudioNode = useCallback9((node) => {
7617
7785
  nodesToResume.current.delete(node);
7618
7786
  }, []);
7619
- const scheduleAudioNode = useMemo22(() => {
7787
+ const scheduleAudioNode = useMemo23(() => {
7620
7788
  return ({
7621
7789
  node,
7622
7790
  mediaTimestamp,
@@ -7708,7 +7876,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled, pr
7708
7876
  audioContextIsPlayingEventually.current = false;
7709
7877
  return ctxAndGain.suspend();
7710
7878
  }, [ctxAndGain]);
7711
- const audioContextValue = useMemo22(() => {
7879
+ const audioContextValue = useMemo23(() => {
7712
7880
  return {
7713
7881
  audioContext: ctxAndGain?.audioContext ?? null,
7714
7882
  getAudioContextState: () => ctxAndGain?.getState() ?? null,
@@ -7890,7 +8058,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7890
8058
  });
7891
8059
  resume?.();
7892
8060
  }, [logLevel, mountTime, refs, env.isPlayer, resume]);
7893
- const audioTagsValue = useMemo22(() => {
8061
+ const audioTagsValue = useMemo23(() => {
7894
8062
  return {
7895
8063
  registerAudio,
7896
8064
  unregisterAudio,
@@ -7905,7 +8073,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7905
8073
  unregisterAudio,
7906
8074
  updateAudio
7907
8075
  ]);
7908
- const sharedAudioTagElements = useMemo22(() => {
8076
+ const sharedAudioTagElements = useMemo23(() => {
7909
8077
  return refs.map(({ id, ref }) => {
7910
8078
  return /* @__PURE__ */ jsx19("audio", {
7911
8079
  ref,
@@ -8273,7 +8441,7 @@ var useBasicMediaInTimeline = ({
8273
8441
  parentSequenceDurationInFrames: parentSequence?.durationInFrames ?? null,
8274
8442
  loop
8275
8443
  });
8276
- const volumes = useMemo23(() => {
8444
+ const volumes = useMemo24(() => {
8277
8445
  if (typeof volume === "number") {
8278
8446
  return volume;
8279
8447
  }
@@ -8292,15 +8460,13 @@ var useBasicMediaInTimeline = ({
8292
8460
  }, [initialVolume, mediaType, src, volume]);
8293
8461
  const doesVolumeChange = typeof volume === "function";
8294
8462
  const nonce = useNonce();
8295
- const { rootId } = useTimelineContext();
8296
8463
  const startMediaFrom = 0 - mediaStartsAt + (trimBefore ?? 0);
8297
- const memoizedResult = useMemo23(() => {
8464
+ const memoizedResult = useMemo24(() => {
8298
8465
  return {
8299
8466
  volumes,
8300
8467
  duration,
8301
8468
  doesVolumeChange,
8302
8469
  nonce,
8303
- rootId,
8304
8470
  finalDisplayName: displayName ?? getAssetDisplayName(src),
8305
8471
  startMediaFrom,
8306
8472
  src,
@@ -8311,7 +8477,6 @@ var useBasicMediaInTimeline = ({
8311
8477
  duration,
8312
8478
  doesVolumeChange,
8313
8479
  nonce,
8314
- rootId,
8315
8480
  displayName,
8316
8481
  src,
8317
8482
  startMediaFrom,
@@ -8340,7 +8505,7 @@ var useMediaInTimeline = ({
8340
8505
  const { registerSequence, unregisterSequence } = useContext24(SequenceManager);
8341
8506
  const { durationInFrames } = useVideoConfig();
8342
8507
  const mediaStartsAt = useMediaStartsAt();
8343
- const { volumes, duration, doesVolumeChange, nonce, rootId, finalDisplayName } = useBasicMediaInTimeline({
8508
+ const { volumes, duration, doesVolumeChange, nonce, finalDisplayName } = useBasicMediaInTimeline({
8344
8509
  volume,
8345
8510
  mediaVolume,
8346
8511
  mediaType,
@@ -8374,7 +8539,6 @@ var useMediaInTimeline = ({
8374
8539
  parent: parentSequence?.id ?? null,
8375
8540
  displayName: finalDisplayName,
8376
8541
  documentationLink,
8377
- rootId,
8378
8542
  volume: volumes,
8379
8543
  showInTimeline: true,
8380
8544
  nonce: nonce.get(),
@@ -8415,7 +8579,6 @@ var useMediaInTimeline = ({
8415
8579
  postmountDisplay,
8416
8580
  loopDisplay,
8417
8581
  documentationLink,
8418
- rootId,
8419
8582
  finalDisplayName,
8420
8583
  isStudio,
8421
8584
  refForOutline
@@ -8502,7 +8665,7 @@ var useBufferManager = (logLevel, mountTime) => {
8502
8665
  }
8503
8666
  }, [blocks]);
8504
8667
  }
8505
- return useMemo24(() => {
8668
+ return useMemo25(() => {
8506
8669
  return { addBlock, listenForBuffering, listenForResume, buffering };
8507
8670
  }, [addBlock, buffering, listenForBuffering, listenForResume]);
8508
8671
  };
@@ -8537,7 +8700,7 @@ var useBufferState = () => {
8537
8700
  const buffer = useContext26(BufferingContextReact);
8538
8701
  const logLevel = useLogLevel();
8539
8702
  const addBlock = buffer ? buffer.addBlock : null;
8540
- return useMemo25(() => ({
8703
+ return useMemo26(() => ({
8541
8704
  delayPlayback: () => {
8542
8705
  if (!addBlock) {
8543
8706
  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");
@@ -8645,7 +8808,7 @@ var useBufferUntilFirstFrame = ({
8645
8808
  onVariableFpsVideoDetected,
8646
8809
  pauseWhenBuffering
8647
8810
  ]);
8648
- return useMemo26(() => {
8811
+ return useMemo27(() => {
8649
8812
  return {
8650
8813
  isBuffering: () => bufferingRef.current,
8651
8814
  bufferUntilFirstFrame
@@ -9316,14 +9479,14 @@ var SetMediaVolumeContext = createContext22({
9316
9479
  var useMediaVolumeState = () => {
9317
9480
  const { mediaVolume } = useContext28(MediaVolumeContext);
9318
9481
  const { setMediaVolume } = useContext28(SetMediaVolumeContext);
9319
- return useMemo27(() => {
9482
+ return useMemo28(() => {
9320
9483
  return [mediaVolume, setMediaVolume];
9321
9484
  }, [mediaVolume, setMediaVolume]);
9322
9485
  };
9323
9486
  var usePlayerMutedState = () => {
9324
9487
  const { playerMuted } = useContext28(MediaVolumeContext);
9325
9488
  const { setPlayerMuted } = useContext28(SetMediaVolumeContext);
9326
- return useMemo27(() => {
9489
+ return useMemo28(() => {
9327
9490
  return [playerMuted, setPlayerMuted];
9328
9491
  }, [playerMuted, setPlayerMuted]);
9329
9492
  };
@@ -9390,7 +9553,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
9390
9553
  requestsVideoFrame: false,
9391
9554
  isClientSideRendering: false
9392
9555
  });
9393
- const propsToPass = useMemo28(() => {
9556
+ const propsToPass = useMemo29(() => {
9394
9557
  return {
9395
9558
  muted: muted || playerMuted || userPreferredVolume <= 0,
9396
9559
  src: preloadedSrc,
@@ -9407,7 +9570,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
9407
9570
  userPreferredVolume,
9408
9571
  crossOriginValue
9409
9572
  ]);
9410
- const id = useMemo28(() => `audio-${random(src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}-muted:${props.muted}-loop:${props.loop}`, [
9573
+ const id = useMemo29(() => `audio-${random(src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}-muted:${props.muted}-loop:${props.loop}`, [
9411
9574
  src,
9412
9575
  sequenceContext?.relativeFrom,
9413
9576
  sequenceContext?.cumulatedFrom,
@@ -9540,7 +9703,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
9540
9703
  const sequenceContext = useContext30(SequenceContext);
9541
9704
  const { registerRenderAsset, unregisterRenderAsset } = useContext30(RenderAssetManager);
9542
9705
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
9543
- const id = useMemo29(() => `audio-${random(props.src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}`, [
9706
+ const id = useMemo30(() => `audio-${random(props.src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}`, [
9544
9707
  props.src,
9545
9708
  sequenceContext?.relativeFrom,
9546
9709
  sequenceContext?.cumulatedFrom,
@@ -9814,7 +9977,8 @@ var solidSchema = {
9814
9977
  },
9815
9978
  ...transformSchema,
9816
9979
  ...backgroundSchema,
9817
- ...borderSchema
9980
+ ...borderSchema,
9981
+ ...cropSchema
9818
9982
  };
9819
9983
  var SolidInner = ({
9820
9984
  color,
@@ -9836,7 +10000,7 @@ var SolidInner = ({
9836
10000
  effects,
9837
10001
  overrideId: overrideId ?? null
9838
10002
  });
9839
- const sourceCanvas = useMemo30(() => {
10003
+ const sourceCanvas = useMemo31(() => {
9840
10004
  if (typeof document === "undefined") {
9841
10005
  return null;
9842
10006
  }
@@ -9904,7 +10068,7 @@ var SolidInner = ({
9904
10068
  cancelRender2,
9905
10069
  memoizedEffects
9906
10070
  ]);
9907
- const canvasStyle = useMemo30(() => {
10071
+ const canvasStyle = useMemo31(() => {
9908
10072
  return {
9909
10073
  width,
9910
10074
  height,
@@ -9935,6 +10099,10 @@ var SolidOuter = forwardRef8(({
9935
10099
  hidden,
9936
10100
  showInTimeline,
9937
10101
  pixelDensity,
10102
+ cropLeft,
10103
+ cropRight,
10104
+ cropTop,
10105
+ cropBottom,
9938
10106
  ...props2
9939
10107
  }, ref) => {
9940
10108
  const memoizedEffectDefinitions = useMemoizedEffectDefinitions(effects);
@@ -9942,6 +10110,14 @@ var SolidOuter = forwardRef8(({
9942
10110
  useImperativeHandle6(ref, () => {
9943
10111
  return actualRef.current;
9944
10112
  }, []);
10113
+ const croppedStyle = useCropStyle({
10114
+ cropLeft,
10115
+ cropRight,
10116
+ cropTop,
10117
+ cropBottom,
10118
+ style: style ?? null,
10119
+ componentName: "<Solid />"
10120
+ });
9945
10121
  return /* @__PURE__ */ jsx24(Sequence, {
9946
10122
  layout: "none",
9947
10123
  from,
@@ -9963,7 +10139,7 @@ var SolidOuter = forwardRef8(({
9963
10139
  height,
9964
10140
  width,
9965
10141
  className,
9966
- style,
10142
+ style: croppedStyle ?? undefined,
9967
10143
  effects,
9968
10144
  pixelDensity
9969
10145
  })
@@ -9992,6 +10168,17 @@ var isHtmlInCanvasSupported = () => {
9992
10168
  return cachedSupport;
9993
10169
  };
9994
10170
  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).";
10171
+ var MINIMUM_CHROME_VERSION_FOR_NESTED_HTML_IN_CANVAS = 152;
10172
+ var getChromeMajorVersion = () => {
10173
+ if (typeof navigator === "undefined") {
10174
+ return null;
10175
+ }
10176
+ const match = navigator.userAgent.match(/\b(?:HeadlessChrome|Chrome)\/(\d+)/);
10177
+ if (!match) {
10178
+ return null;
10179
+ }
10180
+ return Number(match[1]);
10181
+ };
9995
10182
  function assertHtmlInCanvasDimensions(width, height) {
9996
10183
  if (typeof width !== "number" || typeof height !== "number") {
9997
10184
  throw new Error(`HtmlInCanvas: \`width\` and \`height\` must be numbers. Received width=${String(width)}, height=${String(height)}.`);
@@ -10055,6 +10242,10 @@ var HtmlInCanvasContent = forwardRef9(({
10055
10242
  }, ref) => {
10056
10243
  const ancestor = useContext32(HtmlInCanvasAncestorContext);
10057
10244
  assertHtmlInCanvasDimensions(width, height);
10245
+ const chromeMajorVersion = getChromeMajorVersion();
10246
+ if (ancestor && chromeMajorVersion !== null && chromeMajorVersion < MINIMUM_CHROME_VERSION_FOR_NESTED_HTML_IN_CANVAS) {
10247
+ throw new Error(`Nested <HtmlInCanvas> components require Chrome ${MINIMUM_CHROME_VERSION_FOR_NESTED_HTML_IN_CANVAS} or newer, but the current browser is Chrome ${chromeMajorVersion}. Upgrade Chrome or avoid nesting components that use <HtmlInCanvas>, such as shapes with effects.`);
10248
+ }
10058
10249
  const resolvedPixelDensity = resolveHtmlInCanvasPixelDensity(pixelDensity);
10059
10250
  const canvasWidth = Math.ceil(width * resolvedPixelDensity);
10060
10251
  const canvasHeight = Math.ceil(height * resolvedPixelDensity);
@@ -10273,20 +10464,20 @@ var HtmlInCanvasContent = forwardRef9(({
10273
10464
  continueRender2(handle);
10274
10465
  };
10275
10466
  }, [width, height, continueRender2, delayRender2, canvasSizeKey]);
10276
- const innerStyle = useMemo31(() => {
10467
+ const innerStyle = useMemo32(() => {
10277
10468
  return {
10278
10469
  width,
10279
10470
  height
10280
10471
  };
10281
10472
  }, [width, height]);
10282
- const canvasStyle = useMemo31(() => {
10473
+ const canvasStyle = useMemo32(() => {
10283
10474
  return {
10284
10475
  width,
10285
10476
  height,
10286
10477
  ...style ?? {}
10287
10478
  };
10288
10479
  }, [height, style, width]);
10289
- const ancestorValue = useMemo31(() => {
10480
+ const ancestorValue = useMemo32(() => {
10290
10481
  return {
10291
10482
  requestParentPaint: () => {
10292
10483
  canvas2dRef.current?.requestPaint?.();
@@ -10319,6 +10510,10 @@ var HtmlInCanvasInner = forwardRef9(({
10319
10510
  pixelDensity,
10320
10511
  controls,
10321
10512
  style,
10513
+ cropLeft,
10514
+ cropRight,
10515
+ cropTop,
10516
+ cropBottom,
10322
10517
  durationInFrames,
10323
10518
  name,
10324
10519
  ...sequenceProps
@@ -10333,6 +10528,14 @@ var HtmlInCanvasInner = forwardRef9(({
10333
10528
  ref.current = node;
10334
10529
  }
10335
10530
  }, [ref]);
10531
+ const croppedStyle = useCropStyle({
10532
+ cropLeft,
10533
+ cropRight,
10534
+ cropTop,
10535
+ cropBottom,
10536
+ style: style ?? null,
10537
+ componentName: "<HtmlInCanvas />"
10538
+ });
10336
10539
  return /* @__PURE__ */ jsx25(Sequence, {
10337
10540
  durationInFrames,
10338
10541
  name: name ?? "<HtmlInCanvas>",
@@ -10351,7 +10554,7 @@ var HtmlInCanvasInner = forwardRef9(({
10351
10554
  onInit,
10352
10555
  pixelDensity,
10353
10556
  controls,
10354
- style,
10557
+ style: croppedStyle ?? undefined,
10355
10558
  children
10356
10559
  })
10357
10560
  });
@@ -10370,7 +10573,8 @@ var htmlInCanvasSchema = {
10370
10573
  },
10371
10574
  ...transformSchema,
10372
10575
  ...backgroundSchema,
10373
- ...borderSchema
10576
+ ...borderSchema,
10577
+ ...cropSchema
10374
10578
  };
10375
10579
  var HtmlInCanvasWrapped = withInteractivitySchema({
10376
10580
  Component: HtmlInCanvasInner,
@@ -10392,6 +10596,7 @@ function truncateSrcForLabel(src) {
10392
10596
  }
10393
10597
  var canvasImageSchema = {
10394
10598
  ...baseSchema,
10599
+ ...cropSchema,
10395
10600
  ...premountSchema,
10396
10601
  fit: {
10397
10602
  type: "enum",
@@ -10522,7 +10727,7 @@ var CanvasImageContent = forwardRef10(({
10522
10727
  continueRender2(pending.handle);
10523
10728
  pendingLoadDelayRef.current = null;
10524
10729
  }, [continueRender2]);
10525
- const sourceCanvas = useMemo32(() => {
10730
+ const sourceCanvas = useMemo33(() => {
10526
10731
  if (typeof document === "undefined") {
10527
10732
  return null;
10528
10733
  }
@@ -10736,9 +10941,14 @@ var CanvasImageInner = forwardRef10(({
10736
10941
  hidden,
10737
10942
  name,
10738
10943
  showInTimeline,
10944
+ cropLeft,
10945
+ cropRight,
10946
+ cropTop,
10947
+ cropBottom,
10739
10948
  stack,
10740
10949
  controls,
10741
10950
  _remotionInternalDocumentationLink,
10951
+ _remotionInternalCropComponentName,
10742
10952
  outlineRef,
10743
10953
  ...canvasProps
10744
10954
  }, ref) => {
@@ -10768,6 +10978,14 @@ var CanvasImageInner = forwardRef10(({
10768
10978
  styleWhilePostmounted: styleWhilePostmounted ?? null,
10769
10979
  hideWhilePremounted: "display-none"
10770
10980
  });
10981
+ const croppedStyle = useCropStyle({
10982
+ cropLeft,
10983
+ cropRight,
10984
+ cropTop,
10985
+ cropBottom,
10986
+ style: premountingStyle,
10987
+ componentName: _remotionInternalCropComponentName ?? "<CanvasImage />"
10988
+ });
10771
10989
  return /* @__PURE__ */ jsx26(Freeze, {
10772
10990
  frame: freezeFrame,
10773
10991
  active: isPremountingOrPostmounting,
@@ -10799,7 +11017,7 @@ var CanvasImageInner = forwardRef10(({
10799
11017
  effects,
10800
11018
  controls,
10801
11019
  className,
10802
- style: premountingStyle ?? undefined,
11020
+ style: croppedStyle ?? undefined,
10803
11021
  id,
10804
11022
  onError,
10805
11023
  pauseWhenLoading,
@@ -11030,6 +11248,10 @@ var NativeImgInner = ({
11030
11248
  style,
11031
11249
  styleWhilePremounted,
11032
11250
  styleWhilePostmounted,
11251
+ cropLeft,
11252
+ cropRight,
11253
+ cropTop,
11254
+ cropBottom,
11033
11255
  controls,
11034
11256
  outlineRef: refForOutline,
11035
11257
  ...props2
@@ -11055,6 +11277,14 @@ var NativeImgInner = ({
11055
11277
  styleWhilePostmounted: styleWhilePostmounted ?? null,
11056
11278
  hideWhilePremounted: "display-none"
11057
11279
  });
11280
+ const croppedStyle = useCropStyle({
11281
+ cropLeft,
11282
+ cropRight,
11283
+ cropTop,
11284
+ cropBottom,
11285
+ style: premountingStyle,
11286
+ componentName: "<Img />"
11287
+ });
11058
11288
  return /* @__PURE__ */ jsx28(Freeze, {
11059
11289
  frame: freezeFrame,
11060
11290
  active: isPremountingOrPostmounting,
@@ -11079,7 +11309,7 @@ var NativeImgInner = ({
11079
11309
  children: /* @__PURE__ */ jsx28(ImgContent, {
11080
11310
  src,
11081
11311
  refForOutline,
11082
- style: premountingStyle ?? undefined,
11312
+ style: croppedStyle ?? undefined,
11083
11313
  ...props2
11084
11314
  })
11085
11315
  })
@@ -11094,6 +11324,7 @@ var imgSchema = {
11094
11324
  keyframable: false
11095
11325
  },
11096
11326
  ...baseSchema,
11327
+ ...cropSchema,
11097
11328
  ...premountSchema,
11098
11329
  ...transformSchema,
11099
11330
  ...backgroundSchema,
@@ -11162,6 +11393,10 @@ var ImgInner = ({
11162
11393
  height,
11163
11394
  className,
11164
11395
  style,
11396
+ cropLeft,
11397
+ cropRight,
11398
+ cropTop,
11399
+ cropBottom,
11165
11400
  id,
11166
11401
  pauseWhenLoading,
11167
11402
  maxRetries,
@@ -11193,6 +11428,10 @@ var ImgInner = ({
11193
11428
  height,
11194
11429
  className,
11195
11430
  style,
11431
+ cropLeft,
11432
+ cropRight,
11433
+ cropTop,
11434
+ cropBottom,
11196
11435
  id,
11197
11436
  pauseWhenLoading: shouldPauseWhenLoading,
11198
11437
  maxRetries,
@@ -11222,6 +11461,10 @@ var ImgInner = ({
11222
11461
  effects,
11223
11462
  className,
11224
11463
  style,
11464
+ cropLeft,
11465
+ cropRight,
11466
+ cropTop,
11467
+ cropBottom,
11225
11468
  id,
11226
11469
  pauseWhenLoading: shouldPauseWhenLoading,
11227
11470
  maxRetries,
@@ -11240,6 +11483,7 @@ var ImgInner = ({
11240
11483
  showInTimeline,
11241
11484
  stack,
11242
11485
  _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/img",
11486
+ _remotionInternalCropComponentName: "<Img />",
11243
11487
  controls,
11244
11488
  outlineRef: refForOutline,
11245
11489
  ...canvasProps
@@ -11288,9 +11532,22 @@ var interactiveTextElementSchema = {
11288
11532
  };
11289
11533
  var interactiveSvgTextElementSchema = {
11290
11534
  ...interactiveElementSchema,
11535
+ ...svgPaintSchema,
11291
11536
  ...textSchema,
11292
11537
  ...textContentSchema
11293
11538
  };
11539
+ var interactiveSvgElementSchema = {
11540
+ ...interactiveElementSchema,
11541
+ ...svgPaintSchema
11542
+ };
11543
+ var interactiveSvgStrokeElementSchema = {
11544
+ ...interactiveElementSchema,
11545
+ ...svgStrokeSchema
11546
+ };
11547
+ var interactiveSvgRootElementSchema = {
11548
+ ...interactiveBorderElementSchema,
11549
+ ...svgPaintSchema
11550
+ };
11294
11551
  var setRef = (ref, value) => {
11295
11552
  if (typeof ref === "function") {
11296
11553
  ref(value);
@@ -11358,8 +11615,11 @@ var makeInteractiveElement = (tag, displayName, schema) => {
11358
11615
  var makeInteractiveTextElement = (tag, displayName) => {
11359
11616
  return makeInteractiveElement(tag, displayName, interactiveTextElementSchema);
11360
11617
  };
11361
- var makeInteractiveNonTextElement = (tag, displayName) => {
11362
- return makeInteractiveElement(tag, displayName, interactiveElementSchema);
11618
+ var makeInteractiveSvgElement = (tag, displayName) => {
11619
+ return makeInteractiveElement(tag, displayName, interactiveSvgElementSchema);
11620
+ };
11621
+ var makeInteractiveSvgStrokeElement = (tag, displayName) => {
11622
+ return makeInteractiveElement(tag, displayName, interactiveSvgStrokeElementSchema);
11363
11623
  };
11364
11624
  var Interactive = {
11365
11625
  baseSchema,
@@ -11367,6 +11627,9 @@ var Interactive = {
11367
11627
  textSchema,
11368
11628
  backgroundSchema,
11369
11629
  borderSchema,
11630
+ cropSchema,
11631
+ svgPaintSchema,
11632
+ svgStrokeSchema,
11370
11633
  premountSchema,
11371
11634
  sequenceSchema,
11372
11635
  withSchema,
@@ -11375,13 +11638,13 @@ var Interactive = {
11375
11638
  Article: makeInteractiveTextElement("article", "<Interactive.Article>"),
11376
11639
  Aside: makeInteractiveTextElement("aside", "<Interactive.Aside>"),
11377
11640
  Button: makeInteractiveTextElement("button", "<Interactive.Button>"),
11378
- Circle: makeInteractiveNonTextElement("circle", "<Interactive.Circle>"),
11641
+ Circle: makeInteractiveSvgElement("circle", "<Interactive.Circle>"),
11379
11642
  Code: makeInteractiveTextElement("code", "<Interactive.Code>"),
11380
11643
  Div: makeInteractiveTextElement("div", "<Interactive.Div>"),
11381
- Ellipse: makeInteractiveNonTextElement("ellipse", "<Interactive.Ellipse>"),
11644
+ Ellipse: makeInteractiveSvgElement("ellipse", "<Interactive.Ellipse>"),
11382
11645
  Em: makeInteractiveTextElement("em", "<Interactive.Em>"),
11383
11646
  Footer: makeInteractiveTextElement("footer", "<Interactive.Footer>"),
11384
- G: makeInteractiveNonTextElement("g", "<Interactive.G>"),
11647
+ G: makeInteractiveSvgElement("g", "<Interactive.G>"),
11385
11648
  H1: makeInteractiveTextElement("h1", "<Interactive.H1>"),
11386
11649
  H2: makeInteractiveTextElement("h2", "<Interactive.H2>"),
11387
11650
  H3: makeInteractiveTextElement("h3", "<Interactive.H3>"),
@@ -11391,19 +11654,19 @@ var Interactive = {
11391
11654
  Header: makeInteractiveTextElement("header", "<Interactive.Header>"),
11392
11655
  Label: makeInteractiveTextElement("label", "<Interactive.Label>"),
11393
11656
  Li: makeInteractiveTextElement("li", "<Interactive.Li>"),
11394
- Line: makeInteractiveNonTextElement("line", "<Interactive.Line>"),
11657
+ Line: makeInteractiveSvgStrokeElement("line", "<Interactive.Line>"),
11395
11658
  Main: makeInteractiveTextElement("main", "<Interactive.Main>"),
11396
11659
  Nav: makeInteractiveTextElement("nav", "<Interactive.Nav>"),
11397
11660
  Ol: makeInteractiveTextElement("ol", "<Interactive.Ol>"),
11398
11661
  P: makeInteractiveTextElement("p", "<Interactive.P>"),
11399
- Path: makeInteractiveNonTextElement("path", "<Interactive.Path>"),
11662
+ Path: makeInteractiveSvgElement("path", "<Interactive.Path>"),
11400
11663
  Pre: makeInteractiveTextElement("pre", "<Interactive.Pre>"),
11401
- Rect: makeInteractiveNonTextElement("rect", "<Interactive.Rect>"),
11664
+ Rect: makeInteractiveSvgElement("rect", "<Interactive.Rect>"),
11402
11665
  Section: makeInteractiveTextElement("section", "<Interactive.Section>"),
11403
11666
  Small: makeInteractiveTextElement("small", "<Interactive.Small>"),
11404
11667
  Span: makeInteractiveTextElement("span", "<Interactive.Span>"),
11405
11668
  Strong: makeInteractiveTextElement("strong", "<Interactive.Strong>"),
11406
- Svg: makeInteractiveElement("svg", "<Interactive.Svg>", interactiveBorderElementSchema),
11669
+ Svg: makeInteractiveElement("svg", "<Interactive.Svg>", interactiveSvgRootElementSchema),
11407
11670
  Text: makeInteractiveElement("text", "<Interactive.Text>", interactiveSvgTextElementSchema),
11408
11671
  Ul: makeInteractiveTextElement("ul", "<Interactive.Ul>")
11409
11672
  };
@@ -11491,7 +11754,7 @@ var CompositionManagerProvider = ({
11491
11754
  getCompositions: () => currentcompositionsRef.current
11492
11755
  };
11493
11756
  }, []);
11494
- const compositionManagerSetters = useMemo33(() => {
11757
+ const compositionManagerSetters = useMemo34(() => {
11495
11758
  return {
11496
11759
  registerComposition,
11497
11760
  unregisterComposition,
@@ -11507,7 +11770,7 @@ var CompositionManagerProvider = ({
11507
11770
  unregisterFolder,
11508
11771
  onlyRenderComposition
11509
11772
  ]);
11510
- const compositionManagerContextValue = useMemo33(() => {
11773
+ const compositionManagerContextValue = useMemo34(() => {
11511
11774
  return {
11512
11775
  compositions,
11513
11776
  folders,
@@ -11629,7 +11892,7 @@ var MediaEnabledProvider = ({
11629
11892
  videoEnabled,
11630
11893
  audioEnabled
11631
11894
  }) => {
11632
- const value = useMemo34(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
11895
+ const value = useMemo35(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
11633
11896
  return /* @__PURE__ */ jsx31(MediaEnabledContext.Provider, {
11634
11897
  value,
11635
11898
  children
@@ -11645,13 +11908,13 @@ var RemotionRootContexts = ({
11645
11908
  audioEnabled,
11646
11909
  frameState
11647
11910
  }) => {
11648
- const nonceContext = useMemo35(() => {
11911
+ const nonceContext = useMemo36(() => {
11649
11912
  let counter = 0;
11650
11913
  return {
11651
11914
  getNonce: () => counter++
11652
11915
  };
11653
11916
  }, []);
11654
- const logging = useMemo35(() => {
11917
+ const logging = useMemo36(() => {
11655
11918
  return { logLevel, mountTime: Date.now() };
11656
11919
  }, [logLevel]);
11657
11920
  return /* @__PURE__ */ jsx32(LogLevelContext.Provider, {
@@ -11958,7 +12221,7 @@ var OffthreadVideoForRendering = ({
11958
12221
  if (!src) {
11959
12222
  throw new TypeError("No `src` was passed to <OffthreadVideo>.");
11960
12223
  }
11961
- const id = useMemo36(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
12224
+ const id = useMemo37(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
11962
12225
  src,
11963
12226
  sequenceContext?.cumulatedFrom,
11964
12227
  sequenceContext?.relativeFrom,
@@ -12013,14 +12276,14 @@ var OffthreadVideoForRendering = ({
12013
12276
  sequenceContext?.cumulatedNegativeFrom,
12014
12277
  audioStreamIndex
12015
12278
  ]);
12016
- const currentTime = useMemo36(() => {
12279
+ const currentTime = useMemo37(() => {
12017
12280
  return getExpectedMediaFrameUncorrected({
12018
12281
  frame,
12019
12282
  playbackRate: playbackRate || 1,
12020
12283
  startFrom: -mediaStartsAt
12021
12284
  }) / videoConfig.fps;
12022
12285
  }, [frame, mediaStartsAt, playbackRate, videoConfig.fps]);
12023
- const actualSrc = useMemo36(() => {
12286
+ const actualSrc = useMemo37(() => {
12024
12287
  return getOffthreadVideoSource({
12025
12288
  src,
12026
12289
  currentTime,
@@ -12108,7 +12371,7 @@ var OffthreadVideoForRendering = ({
12108
12371
  cancelRender("Failed to load image with src " + imageSrc);
12109
12372
  }
12110
12373
  }, [imageSrc, onError]);
12111
- const className = useMemo36(() => {
12374
+ const className = useMemo37(() => {
12112
12375
  return [OBJECTFIT_CONTAIN_CLASS_NAME, props2.className].filter(truthy).join(" ");
12113
12376
  }, [props2.className]);
12114
12377
  const onImageFrame = useCallback22((img) => {
@@ -12177,7 +12440,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
12177
12440
  throw new Error("SharedAudioContext not found");
12178
12441
  }
12179
12442
  const videoRef = useRef27(null);
12180
- const sharedSource = useMemo37(() => {
12443
+ const sharedSource = useMemo38(() => {
12181
12444
  if (!context.audioContext) {
12182
12445
  return null;
12183
12446
  }
@@ -12380,7 +12643,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
12380
12643
  current.preload = "auto";
12381
12644
  }
12382
12645
  }, []);
12383
- const actualStyle = useMemo37(() => {
12646
+ const actualStyle = useMemo38(() => {
12384
12647
  return {
12385
12648
  ...style
12386
12649
  };
@@ -12577,7 +12840,7 @@ function useRemotionContexts() {
12577
12840
  const visualModePropStatusesRefContext = React40.useContext(VisualModePropStatusesRefContext);
12578
12841
  const bufferManagerContext = React40.useContext(BufferingContextReact);
12579
12842
  const logLevelContext = React40.useContext(LogLevelContext);
12580
- return useMemo38(() => ({
12843
+ return useMemo39(() => ({
12581
12844
  compositionManagerCtx,
12582
12845
  timelineContext,
12583
12846
  setTimelineContext,
@@ -12686,6 +12949,7 @@ var Internals = {
12686
12949
  sequenceStyleSchema,
12687
12950
  sequenceVisualStyleSchema,
12688
12951
  sequencePremountSchema,
12952
+ sequenceCropSchema,
12689
12953
  textSchema,
12690
12954
  transformSchema,
12691
12955
  premountSchema,
@@ -12809,7 +13073,9 @@ var Internals = {
12809
13073
  hiddenField,
12810
13074
  durationInFramesField,
12811
13075
  freezeField,
12812
- fromField
13076
+ fromField,
13077
+ resolveSequenceCrop,
13078
+ useCropStyle
12813
13079
  };
12814
13080
  var flattenChildren = (children) => {
12815
13081
  const childrenArray = React41.Children.toArray(children);
@@ -12879,7 +13145,7 @@ var validateSeriesSequenceProps = ({
12879
13145
  return offset;
12880
13146
  };
12881
13147
  var SeriesInner = (props2) => {
12882
- const childrenValue = useMemo39(() => {
13148
+ const childrenValue = useMemo40(() => {
12883
13149
  const flattenedChildren = flattenChildren(props2.children);
12884
13150
  const renderChildren = (i, startFrame) => {
12885
13151
  if (i === flattenedChildren.length) {
@@ -13215,7 +13481,7 @@ var VideoForRenderingForwardFunction = ({
13215
13481
  const mountTime = useMountTime();
13216
13482
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
13217
13483
  const { registerRenderAsset, unregisterRenderAsset } = useContext39(RenderAssetManager);
13218
- const id = useMemo40(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
13484
+ const id = useMemo41(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
13219
13485
  props2.src,
13220
13486
  sequenceContext?.cumulatedFrom,
13221
13487
  sequenceContext?.relativeFrom,
@@ -13883,7 +14149,7 @@ var ExpertCard = ({ expert, Link }) => {
13883
14149
  });
13884
14150
  };
13885
14151
  var ExpertsPageContent = ({ Link }) => {
13886
- const expertsInRandomOrder = useMemo41(() => {
14152
+ const expertsInRandomOrder = useMemo42(() => {
13887
14153
  if (typeof window === "undefined") {
13888
14154
  return [];
13889
14155
  }
@@ -13981,7 +14247,7 @@ var ExpertsPageContent = ({ Link }) => {
13981
14247
  });
13982
14248
  };
13983
14249
  // src/components/homepage/Pricing.tsx
13984
- import { useMemo as useMemo54 } from "react";
14250
+ import { useMemo as useMemo55 } from "react";
13985
14251
 
13986
14252
  // ../design/dist/esm/index.mjs
13987
14253
  import * as React24 from "react";
@@ -15329,7 +15595,7 @@ var getDefaultConfig = () => {
15329
15595
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
15330
15596
 
15331
15597
  // ../design/dist/esm/index.mjs
15332
- import React33, { useEffect as useEffect21, useMemo as useMemo44, useState as useState23 } from "react";
15598
+ import React33, { useEffect as useEffect21, useMemo as useMemo45, useState as useState23 } from "react";
15333
15599
 
15334
15600
  // ../paths/dist/esm/index.mjs
15335
15601
  var cutLInstruction = ({
@@ -18095,7 +18361,7 @@ var PathInternals = {
18095
18361
  };
18096
18362
 
18097
18363
  // ../shapes/dist/esm/index.mjs
18098
- import React3, { useCallback as useCallback26, useMemo as useMemo43, useRef as useRef29 } from "react";
18364
+ import React3, { useCallback as useCallback26, useMemo as useMemo44, useRef as useRef29 } from "react";
18099
18365
  import { version } from "react-dom";
18100
18366
  import { jsx as jsx44, jsxs as jsxs7 } from "react/jsx-runtime";
18101
18367
  import { jsx as jsx210 } from "react/jsx-runtime";
@@ -18277,13 +18543,13 @@ var RenderSvg = ({
18277
18543
  stack,
18278
18544
  ...props
18279
18545
  }) => {
18280
- const actualStyle = useMemo43(() => {
18546
+ const actualStyle = useMemo44(() => {
18281
18547
  return {
18282
18548
  overflow: "visible",
18283
18549
  ...style ?? {}
18284
18550
  };
18285
18551
  }, [style]);
18286
- const actualPathStyle = useMemo43(() => {
18552
+ const actualPathStyle = useMemo44(() => {
18287
18553
  return {
18288
18554
  transformBox: "fill-box",
18289
18555
  ...pathStyle ?? {}
@@ -21264,7 +21530,7 @@ var useHoverTransforms = (ref, disabled) => {
21264
21530
  progress: 0,
21265
21531
  isActive: false
21266
21532
  });
21267
- const eventTarget = useMemo44(() => new EventTarget, []);
21533
+ const eventTarget = useMemo45(() => new EventTarget, []);
21268
21534
  useEffect21(() => {
21269
21535
  if (disabled) {
21270
21536
  eventTarget.dispatchEvent(new Event("disabled"));
@@ -27711,7 +27977,7 @@ var Triangle22 = (props) => {
27711
27977
  };
27712
27978
 
27713
27979
  // src/components/homepage/FreePricing.tsx
27714
- import React53, { useCallback as useCallback38, useMemo as useMemo53 } from "react";
27980
+ import React53, { useCallback as useCallback38, useMemo as useMemo54 } from "react";
27715
27981
 
27716
27982
  // ../../node_modules/.bun/tailwind-merge@2.5.2/node_modules/tailwind-merge/dist/bundle-mjs.mjs
27717
27983
  var CLASS_PART_SEPARATOR2 = "-";
@@ -29198,11 +29464,11 @@ var FreePricing = () => {
29198
29464
  checked: true
29199
29465
  }),
29200
29466
  /* @__PURE__ */ jsx49(PricingBulletPoint, {
29201
- text: "Commercial use allowed",
29467
+ text: "All features included",
29202
29468
  checked: true
29203
29469
  }),
29204
29470
  /* @__PURE__ */ jsx49(PricingBulletPoint, {
29205
- text: "Unlimited use",
29471
+ text: "Unlimited commercial use",
29206
29472
  checked: true
29207
29473
  }),
29208
29474
  /* @__PURE__ */ jsx49(PricingBulletPoint, {
@@ -29368,14 +29634,14 @@ var CompanyPricing = () => {
29368
29634
  }, []);
29369
29635
  const creatorsPrice = creatorsSelected ? devSeatCount * SEAT_PRICE : 0;
29370
29636
  const automatorsPrice = automatorsSelected ? Math.ceil(cloudRenders / 1000) * RENDER_UNIT_PRICE : 0;
29371
- const totalPrice = useMemo53(() => {
29637
+ const totalPrice = useMemo54(() => {
29372
29638
  const basePrice = creatorsPrice + automatorsPrice;
29373
29639
  if (automatorsSelected) {
29374
29640
  return Math.max(100, basePrice);
29375
29641
  }
29376
29642
  return basePrice;
29377
29643
  }, [creatorsPrice, automatorsPrice, automatorsSelected]);
29378
- const totalPriceString = useMemo53(() => {
29644
+ const totalPriceString = useMemo54(() => {
29379
29645
  return formatPrice(totalPrice);
29380
29646
  }, [formatPrice, totalPrice]);
29381
29647
  const showMinimumMessage = automatorsSelected && creatorsPrice + automatorsPrice < 100;
@@ -29605,13 +29871,13 @@ var Pricing = ({
29605
29871
  licenseHref = "https://github.com/remotion-dev/remotion/blob/main/LICENSE.md",
29606
29872
  termsHref = "/docs/license/terms"
29607
29873
  }) => {
29608
- const faqLinkTarget = useMemo54(() => {
29874
+ const faqLinkTarget = useMemo55(() => {
29609
29875
  return faqHref.startsWith("http") ? "_blank" : undefined;
29610
29876
  }, [faqHref]);
29611
- const licenseLinkTarget = useMemo54(() => {
29877
+ const licenseLinkTarget = useMemo55(() => {
29612
29878
  return licenseHref.startsWith("http") ? "_blank" : undefined;
29613
29879
  }, [licenseHref]);
29614
- const termsLinkTarget = useMemo54(() => {
29880
+ const termsLinkTarget = useMemo55(() => {
29615
29881
  return termsHref.startsWith("http") ? "_blank" : undefined;
29616
29882
  }, [termsHref]);
29617
29883
  return /* @__PURE__ */ jsxs11("div", {
@@ -29666,358 +29932,9 @@ var Pricing = ({
29666
29932
  });
29667
29933
  };
29668
29934
 
29669
- // src/components/homepage/VideoAppsTitle.tsx
29670
- import { jsx as jsx51 } from "react/jsx-runtime";
29671
- var SectionTitle = ({
29672
- children
29673
- }) => {
29674
- return /* @__PURE__ */ jsx51("div", {
29675
- className: "text-center",
29676
- children: /* @__PURE__ */ jsx51("h2", {
29677
- className: "fontbrand text-4xl",
29678
- children
29679
- })
29680
- });
29681
- };
29682
-
29683
- // src/components/homepage/AutomationsSection.tsx
29684
- import { jsx as jsx54, jsxs as jsxs12, Fragment as Fragment12 } from "react/jsx-runtime";
29685
- var appPipeline = [
29686
- {
29687
- step: "01",
29688
- title: "Design a template",
29689
- description: "Start in Remotion Studio and build a reusable composition for your video workflow.",
29690
- link: "/docs/studio",
29691
- buttonText: "Remotion Studio",
29692
- illustration: "studio"
29693
- },
29694
- {
29695
- step: "02",
29696
- title: "Build an app around it",
29697
- description: "Expose props for text, images, colors, timing, and layouts to power editors, generators, and automations.",
29698
- link: "/docs/parameterized-rendering",
29699
- buttonText: "Parameterized rendering",
29700
- illustration: "preview"
29701
- },
29702
- {
29703
- step: "03",
29704
- title: "Preview and render",
29705
- description: /* @__PURE__ */ jsxs12(Fragment12, {
29706
- children: [
29707
- "Use the",
29708
- " ",
29709
- /* @__PURE__ */ jsx54("a", {
29710
- href: "/player",
29711
- className: "font-semibold text-text no-underline",
29712
- children: "Player"
29713
- }),
29714
- " ",
29715
- "for interactive previews, then render locally, on servers, serverlessly, or in-browser."
29716
- ]
29717
- }),
29718
- link: "/docs/render",
29719
- buttonText: "Rendering options",
29720
- illustration: "render"
29721
- }
29722
- ];
29723
- var launchOptions = [
29724
- {
29725
- title: "Start from a template",
29726
- description: "Use starter projects for SaaS workflows, social videos, slideshows, captions, and repeatable video products.",
29727
- link: "/templates",
29728
- buttonText: "Browse templates"
29729
- },
29730
- {
29731
- title: "Build a video editor",
29732
- description: "Editor Starter is an official paid template for a timeline, canvas, asset uploads, and rendering.",
29733
- link: "/docs/editor-starter",
29734
- buttonText: "Editor Starter"
29735
- },
29736
- {
29737
- title: "See what teams ship",
29738
- description: "Audiograms, captioning tools, year-in-review generators, creative editors, and other products built with Remotion.",
29739
- link: "/showcase",
29740
- buttonText: "Showcase"
29741
- }
29742
- ];
29743
- var icon2 = {
29744
- height: 16,
29745
- marginLeft: 10
29746
- };
29747
- var Arrow3 = () => /* @__PURE__ */ jsx54("svg", {
29748
- style: icon2,
29749
- viewBox: "0 0 448 512",
29750
- children: /* @__PURE__ */ jsx54("path", {
29751
- fill: "currentColor",
29752
- d: "M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
29753
- })
29754
- });
29755
- var InlineLink = ({ href, children }) => {
29756
- return /* @__PURE__ */ jsxs12("a", {
29757
- href,
29758
- className: "mt-3 inline-flex flex-row items-center font-brand text-base font-semibold text-text no-underline sm:text-sm",
29759
- children: [
29760
- children,
29761
- /* @__PURE__ */ jsx54(Arrow3, {})
29762
- ]
29763
- });
29764
- };
29765
- var illustrationFrame = "relative mb-5 flex h-40 w-full items-center justify-center px-3";
29766
- var StudioIllustration = () => {
29767
- return /* @__PURE__ */ jsx54("div", {
29768
- className: illustrationFrame,
29769
- "aria-hidden": "true",
29770
- children: /* @__PURE__ */ jsxs12("div", {
29771
- className: "relative w-full max-w-[220px] rounded-md bg-pane px-4 py-6 fontbrand",
29772
- children: [
29773
- /* @__PURE__ */ jsxs12("div", {
29774
- className: "absolute bottom-5 left-1/2 top-3 flex -translate-x-1/2 flex-col items-center",
29775
- children: [
29776
- /* @__PURE__ */ jsx54("div", {
29777
- className: "h-2 w-1 rounded-full bg-brand"
29778
- }),
29779
- /* @__PURE__ */ jsx54("div", {
29780
- className: "w-px flex-1 bg-brand/50"
29781
- })
29782
- ]
29783
- }),
29784
- /* @__PURE__ */ jsxs12("div", {
29785
- className: "space-y-4",
29786
- children: [
29787
- /* @__PURE__ */ jsxs12("div", {
29788
- className: "grid grid-cols-[28px_1fr] items-center gap-3",
29789
- children: [
29790
- /* @__PURE__ */ jsx54("div", {
29791
- className: "h-2 rounded-full bg-muted"
29792
- }),
29793
- /* @__PURE__ */ jsx54("div", {
29794
- className: "h-3 rounded-full bg-brand"
29795
- })
29796
- ]
29797
- }),
29798
- /* @__PURE__ */ jsxs12("div", {
29799
- className: "grid grid-cols-[28px_1fr] items-center gap-3",
29800
- children: [
29801
- /* @__PURE__ */ jsx54("div", {
29802
- className: "h-2 rounded-full bg-muted"
29803
- }),
29804
- /* @__PURE__ */ jsx54("div", {
29805
- className: "ml-8 h-3 rounded-full bg-muted"
29806
- })
29807
- ]
29808
- }),
29809
- /* @__PURE__ */ jsxs12("div", {
29810
- className: "grid grid-cols-[28px_1fr] items-center gap-3",
29811
- children: [
29812
- /* @__PURE__ */ jsx54("div", {
29813
- className: "h-2 rounded-full bg-muted"
29814
- }),
29815
- /* @__PURE__ */ jsx54("div", {
29816
- className: "mr-10 h-3 rounded-full bg-muted"
29817
- })
29818
- ]
29819
- })
29820
- ]
29821
- })
29822
- ]
29823
- })
29824
- });
29825
- };
29826
- var PropsIllustration = () => {
29827
- return /* @__PURE__ */ jsx54("div", {
29828
- className: illustrationFrame,
29829
- "aria-hidden": "true",
29830
- children: /* @__PURE__ */ jsxs12("div", {
29831
- className: "flex h-[124px] w-full max-w-[240px] flex-col justify-center whitespace-nowrap rounded-md bg-pane p-4 text-left font-mono text-base leading-6 text-text sm:text-sm sm:leading-5",
29832
- children: [
29833
- /* @__PURE__ */ jsx54("div", {
29834
- className: "text-brand",
29835
- children: "{"
29836
- }),
29837
- /* @__PURE__ */ jsx54("div", {
29838
- className: "pl-4",
29839
- children: "title: 'Sale',"
29840
- }),
29841
- /* @__PURE__ */ jsx54("div", {
29842
- className: "pl-4",
29843
- children: "color: '#0B84F3',"
29844
- }),
29845
- /* @__PURE__ */ jsx54("div", {
29846
- className: "pl-4",
29847
- children: "items: 42"
29848
- }),
29849
- /* @__PURE__ */ jsx54("div", {
29850
- className: "text-brand",
29851
- children: "}"
29852
- })
29853
- ]
29854
- })
29855
- });
29856
- };
29857
- var PreviewIllustration = () => {
29858
- return /* @__PURE__ */ jsx54("div", {
29859
- className: illustrationFrame,
29860
- "aria-hidden": "true",
29861
- children: /* @__PURE__ */ jsxs12("div", {
29862
- className: "w-full max-w-[240px] rounded-md border border-solid border-muted bg-card-bg p-2 fontbrand",
29863
- children: [
29864
- /* @__PURE__ */ jsx54("div", {
29865
- className: "relative flex h-[92px] items-center justify-center rounded-sm border border-solid border-muted bg-pane text-brand",
29866
- children: /* @__PURE__ */ jsxs12("svg", {
29867
- className: "h-14 w-14 text-brand",
29868
- viewBox: "-11.5 -10.23174 23 20.46348",
29869
- fill: "none",
29870
- children: [
29871
- /* @__PURE__ */ jsx54("circle", {
29872
- cx: "0",
29873
- cy: "0",
29874
- r: "2.05",
29875
- fill: "currentColor"
29876
- }),
29877
- /* @__PURE__ */ jsx54("ellipse", {
29878
- cx: "0",
29879
- cy: "0",
29880
- rx: "11",
29881
- ry: "4.2",
29882
- stroke: "currentColor",
29883
- strokeWidth: "1"
29884
- }),
29885
- /* @__PURE__ */ jsx54("ellipse", {
29886
- cx: "0",
29887
- cy: "0",
29888
- rx: "11",
29889
- ry: "4.2",
29890
- stroke: "currentColor",
29891
- strokeWidth: "1",
29892
- transform: "rotate(60)"
29893
- }),
29894
- /* @__PURE__ */ jsx54("ellipse", {
29895
- cx: "0",
29896
- cy: "0",
29897
- rx: "11",
29898
- ry: "4.2",
29899
- stroke: "currentColor",
29900
- strokeWidth: "1",
29901
- transform: "rotate(120)"
29902
- })
29903
- ]
29904
- })
29905
- }),
29906
- /* @__PURE__ */ jsxs12("div", {
29907
- className: "mt-2 flex items-center gap-2",
29908
- children: [
29909
- /* @__PURE__ */ jsx54("div", {
29910
- className: "fontbrand text-xs font-semibold text-text",
29911
- children: "0:12"
29912
- }),
29913
- /* @__PURE__ */ jsx54("div", {
29914
- className: "h-1.5 flex-1 rounded-full bg-muted",
29915
- children: /* @__PURE__ */ jsx54("div", {
29916
- className: "h-full w-2/5 rounded-full bg-brand"
29917
- })
29918
- }),
29919
- /* @__PURE__ */ jsx54("div", {
29920
- className: "fontbrand text-xs font-semibold text-text",
29921
- children: "0:30"
29922
- })
29923
- ]
29924
- })
29925
- ]
29926
- })
29927
- });
29928
- };
29929
- var RenderIllustration = () => {
29930
- return /* @__PURE__ */ jsx54("div", {
29931
- className: illustrationFrame,
29932
- "aria-hidden": "true",
29933
- children: /* @__PURE__ */ jsx54("div", {
29934
- className: "grid w-full max-w-[240px] grid-cols-2 gap-2 fontbrand text-base font-semibold",
29935
- children: [".mp4", ".webm", ".gif", ".png"].map((format) => /* @__PURE__ */ jsx54("div", {
29936
- className: "rounded-md bg-pane px-4 py-3 text-center text-brand",
29937
- children: format
29938
- }, format))
29939
- })
29940
- });
29941
- };
29942
- var PipelineIllustration = ({ kind }) => {
29943
- if (kind === "studio") {
29944
- return /* @__PURE__ */ jsx54(StudioIllustration, {});
29945
- }
29946
- if (kind === "props") {
29947
- return /* @__PURE__ */ jsx54(PropsIllustration, {});
29948
- }
29949
- if (kind === "preview") {
29950
- return /* @__PURE__ */ jsx54(PreviewIllustration, {});
29951
- }
29952
- return /* @__PURE__ */ jsx54(RenderIllustration, {});
29953
- };
29954
- var AutomationsSection = () => {
29955
- return /* @__PURE__ */ jsxs12("div", {
29956
- children: [
29957
- /* @__PURE__ */ jsx54(SectionTitle, {
29958
- children: "Create video apps and automations"
29959
- }),
29960
- /* @__PURE__ */ jsx54("div", {
29961
- className: "mx-auto mb-8 mt-3 max-w-[70ch] text-center fontbrand text-base leading-relaxed text-muted text-pretty",
29962
- children: "Design a reusable video template in Remotion, expose props for app UIs and automations, then preview and render it wherever your workflow runs."
29963
- }),
29964
- /* @__PURE__ */ jsx54("div", {
29965
- className: "py-4",
29966
- children: /* @__PURE__ */ jsx54("dl", {
29967
- className: "grid grid-cols-1 justify-items-stretch gap-5 lg:grid-cols-3 lg:justify-items-center lg:gap-0",
29968
- children: appPipeline.map((item) => /* @__PURE__ */ jsxs12("div", {
29969
- className: "flex w-full flex-col rounded-lg border border-solid border-text/10 bg-card-bg px-4 py-5 text-left sm:px-5 lg:max-w-[300px] lg:rounded-none lg:border-y-0 lg:border-r-0 lg:border-l lg:bg-transparent lg:px-6 lg:py-0 lg:first:border-l-0",
29970
- children: [
29971
- /* @__PURE__ */ jsx54(PipelineIllustration, {
29972
- kind: item.illustration
29973
- }),
29974
- /* @__PURE__ */ jsxs12("div", {
29975
- className: "mb-2 flex items-center gap-2.5",
29976
- children: [
29977
- /* @__PURE__ */ jsx54("div", {
29978
- className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-pane fontbrand text-xs font-semibold text-brand",
29979
- children: item.step
29980
- }),
29981
- /* @__PURE__ */ jsx54("dt", {
29982
- className: "fontbrand text-xl font-semibold tracking-tight text-text text-balance",
29983
- children: item.title
29984
- })
29985
- ]
29986
- }),
29987
- /* @__PURE__ */ jsx54("dd", {
29988
- className: "m-0 mt-1 flex-1 fontbrand text-base leading-relaxed text-muted text-pretty sm:text-sm",
29989
- children: item.description
29990
- }),
29991
- /* @__PURE__ */ jsx54(InlineLink, {
29992
- href: item.link,
29993
- children: item.buttonText
29994
- })
29995
- ]
29996
- }, item.step))
29997
- })
29998
- }),
29999
- /* @__PURE__ */ jsxs12("div", {
30000
- className: "mt-8 flex flex-wrap justify-center gap-x-5 gap-y-2 fontbrand text-base text-muted sm:text-sm",
30001
- children: [
30002
- /* @__PURE__ */ jsx54("span", {
30003
- children: "Explore:"
30004
- }),
30005
- launchOptions.map((item) => /* @__PURE__ */ jsx54("a", {
30006
- href: item.link,
30007
- className: "font-semibold text-text no-underline",
30008
- title: item.description,
30009
- children: item.buttonText
30010
- }, item.link))
30011
- ]
30012
- })
30013
- ]
30014
- });
30015
- };
30016
- var AutomationsSection_default = AutomationsSection;
30017
-
30018
29935
  // src/components/homepage/BackgroundAnimation.tsx
30019
29936
  import { useEffect as useEffect40 } from "react";
30020
- import { jsx as jsx56, jsxs as jsxs13 } from "react/jsx-runtime";
29937
+ import { jsx as jsx51, jsxs as jsxs12 } from "react/jsx-runtime";
30021
29938
  "use client";
30022
29939
  var rx = 0.2;
30023
29940
  var ry = 0.45;
@@ -30047,9 +29964,9 @@ var BackgroundAnimation = () => {
30047
29964
  _style.innerHTML = css;
30048
29965
  document.head.appendChild(_style);
30049
29966
  }, [css]);
30050
- return /* @__PURE__ */ jsx56("div", {
29967
+ return /* @__PURE__ */ jsx51("div", {
30051
29968
  className: " w-full h-full min-w-0 m-auto lg:relative lg:min-w-[700px] lg:max-w-[1200px] lg:ml-auto lg:left-auto pointer-events-none",
30052
- children: /* @__PURE__ */ jsxs13("svg", {
29969
+ children: /* @__PURE__ */ jsxs12("svg", {
30053
29970
  className: "translate-y-[-30%] lg:translate-y-[-50%]",
30054
29971
  viewBox: "0 0 1 1",
30055
29972
  style: {
@@ -30057,7 +29974,7 @@ var BackgroundAnimation = () => {
30057
29974
  position: "absolute"
30058
29975
  },
30059
29976
  children: [
30060
- /* @__PURE__ */ jsx56("path", {
29977
+ /* @__PURE__ */ jsx51("path", {
30061
29978
  d: d2,
30062
29979
  fill: "none",
30063
29980
  stroke: "var(--ifm-color-primary)",
@@ -30070,7 +29987,7 @@ var BackgroundAnimation = () => {
30070
29987
  strokeDasharray: `${length2 * 0.2} ${length2 * 0.8}`
30071
29988
  }
30072
29989
  }),
30073
- /* @__PURE__ */ jsx56("path", {
29990
+ /* @__PURE__ */ jsx51("path", {
30074
29991
  d: d2,
30075
29992
  fill: "none",
30076
29993
  stroke: "var(--ifm-color-primary)",
@@ -30084,7 +30001,7 @@ var BackgroundAnimation = () => {
30084
30001
  strokeDasharray: `${length2 * 0.2} ${length2 * 0.8}`
30085
30002
  }
30086
30003
  }),
30087
- /* @__PURE__ */ jsx56("path", {
30004
+ /* @__PURE__ */ jsx51("path", {
30088
30005
  d: d2,
30089
30006
  fill: "none",
30090
30007
  stroke: "var(--ifm-color-primary)",
@@ -30104,7 +30021,7 @@ var BackgroundAnimation = () => {
30104
30021
  };
30105
30022
 
30106
30023
  // src/components/homepage/CommunityStatsItems.tsx
30107
- import { jsx as jsx57, jsxs as jsxs14 } from "react/jsx-runtime";
30024
+ import { jsx as jsx54, jsxs as jsxs13 } from "react/jsx-runtime";
30108
30025
  var StatItemContent = ({
30109
30026
  content,
30110
30027
  width,
@@ -30113,7 +30030,7 @@ var StatItemContent = ({
30113
30030
  height = "auto",
30114
30031
  fontSize,
30115
30032
  fontWeight
30116
- }) => /* @__PURE__ */ jsx57("div", {
30033
+ }) => /* @__PURE__ */ jsx54("div", {
30117
30034
  style: {
30118
30035
  width,
30119
30036
  minWidth,
@@ -30131,36 +30048,36 @@ var StatItemContent = ({
30131
30048
  children: content
30132
30049
  });
30133
30050
  var Pill = ({ children, className }) => {
30134
- return /* @__PURE__ */ jsx57("div", {
30051
+ return /* @__PURE__ */ jsx54("div", {
30135
30052
  className: cn2(className, "card leading-none flex flex-wrap justify-center items-center min-w-[200px] min-h-[80px] max-h-[110px] flex-1 p-0"),
30136
30053
  children
30137
30054
  });
30138
30055
  };
30139
30056
  var InstallsPerMonth = () => {
30140
- return /* @__PURE__ */ jsxs14(Pill, {
30057
+ return /* @__PURE__ */ jsxs13(Pill, {
30141
30058
  className: "w-[30%] flex-col",
30142
30059
  children: [
30143
- /* @__PURE__ */ jsxs14("div", {
30060
+ /* @__PURE__ */ jsxs13("div", {
30144
30061
  style: {
30145
30062
  display: "flex",
30146
30063
  alignItems: "center",
30147
30064
  justifyContent: "center"
30148
30065
  },
30149
30066
  children: [
30150
- /* @__PURE__ */ jsx57(StatItemContent, {
30067
+ /* @__PURE__ */ jsx54(StatItemContent, {
30151
30068
  content: "5M+",
30152
30069
  width: "100px",
30153
30070
  fontSize: "2.5rem",
30154
30071
  fontWeight: "bold"
30155
30072
  }),
30156
- /* @__PURE__ */ jsx57(StatItemContent, {
30157
- content: /* @__PURE__ */ jsx57("svg", {
30073
+ /* @__PURE__ */ jsx54(StatItemContent, {
30074
+ content: /* @__PURE__ */ jsx54("svg", {
30158
30075
  width: "40",
30159
30076
  height: "40",
30160
30077
  viewBox: "0 0 25 25",
30161
30078
  fill: "none",
30162
30079
  xmlns: "http://www.w3.org/2000/svg",
30163
- children: /* @__PURE__ */ jsx57("path", {
30080
+ children: /* @__PURE__ */ jsx54("path", {
30164
30081
  d: "M12.6367 2.47534C12.5488 2.44116 12.4512 2.44116 12.3584 2.47534L3.10547 5.98608L12.5 9.67749L21.8945 5.98608L12.6367 2.47534ZM2.34375 18.4519C2.34375 18.613 2.44629 18.7595 2.59766 18.8181L11.3281 22.1287V11.738L2.34375 8.20776V18.4519ZM13.6719 22.1287L22.4023 18.8181C22.5537 18.7595 22.6562 18.613 22.6562 18.4519V8.20776L13.6719 11.738V22.1287ZM11.5283 0.287842C12.1533 0.048584 12.8418 0.048584 13.4668 0.287842L23.2324 3.9939C24.2969 4.39429 25 5.40991 25 6.54761V18.4519C25 19.5896 24.2969 20.6052 23.2373 21.0105L13.4717 24.7166C12.8467 24.9558 12.1582 24.9558 11.5332 24.7166L1.76758 21.0105C0.703125 20.6052 0 19.5896 0 18.4519V6.54761C0 5.40991 0.703125 4.39429 1.7627 3.98901L11.5283 0.282959V0.287842Z",
30165
30082
  fill: "var(--text-color)"
30166
30083
  })
@@ -30169,7 +30086,7 @@ var InstallsPerMonth = () => {
30169
30086
  })
30170
30087
  ]
30171
30088
  }),
30172
- /* @__PURE__ */ jsx57(StatItemContent, {
30089
+ /* @__PURE__ */ jsx54(StatItemContent, {
30173
30090
  content: "installs per month",
30174
30091
  width: "75%",
30175
30092
  fontSize: "1.0rem",
@@ -30179,27 +30096,27 @@ var InstallsPerMonth = () => {
30179
30096
  });
30180
30097
  };
30181
30098
  var PagesOfDocs = () => {
30182
- return /* @__PURE__ */ jsxs14(Pill, {
30099
+ return /* @__PURE__ */ jsxs13(Pill, {
30183
30100
  className: "flex-col",
30184
30101
  children: [
30185
- /* @__PURE__ */ jsxs14("div", {
30102
+ /* @__PURE__ */ jsxs13("div", {
30186
30103
  style: { display: "flex", alignItems: "center", gap: 8 },
30187
30104
  children: [
30188
- /* @__PURE__ */ jsx57(StatItemContent, {
30189
- content: /* @__PURE__ */ jsx57("svg", {
30105
+ /* @__PURE__ */ jsx54(StatItemContent, {
30106
+ content: /* @__PURE__ */ jsx54("svg", {
30190
30107
  width: "28",
30191
30108
  height: "40",
30192
30109
  viewBox: "0 0 18 21",
30193
30110
  fill: "none",
30194
30111
  xmlns: "http://www.w3.org/2000/svg",
30195
- children: /* @__PURE__ */ jsx57("path", {
30112
+ children: /* @__PURE__ */ jsx54("path", {
30196
30113
  d: "M0 3.60938C0 1.61602 1.58304 0 3.53571 0H17.0357H18V0.984375V15.4219V16.4062H17.0357H16.7143V19.0312H17.0357H18V21H17.0357H3.21429C1.43839 21 0 19.5316 0 17.7188C0 17.608 0.00401786 17.4973 0.0160714 17.3906H0V3.60938ZM3.21429 16.4062C2.50312 16.4062 1.92857 16.9928 1.92857 17.7188C1.92857 18.4447 2.50312 19.0312 3.21429 19.0312H14.7857V16.4062H3.21429ZM1.92857 14.7123C2.32232 14.5359 2.75625 14.4375 3.21429 14.4375H16.0714V1.96875H3.53571C2.64777 1.96875 1.92857 2.70293 1.92857 3.60938V14.7123ZM6.10714 4.59375H13.1786H14.1429V6.5625H13.1786H6.10714H5.14286V4.59375H6.10714ZM6.10714 7.875H13.1786H14.1429V9.84375H13.1786H6.10714H5.14286V7.875H6.10714Z",
30197
30114
  fill: "var(--text-color)"
30198
30115
  })
30199
30116
  }),
30200
30117
  width: "32px"
30201
30118
  }),
30202
- /* @__PURE__ */ jsx57(StatItemContent, {
30119
+ /* @__PURE__ */ jsx54(StatItemContent, {
30203
30120
  content: "1000",
30204
30121
  width: "112px",
30205
30122
  fontSize: "2.5rem",
@@ -30207,7 +30124,7 @@ var PagesOfDocs = () => {
30207
30124
  })
30208
30125
  ]
30209
30126
  }),
30210
- /* @__PURE__ */ jsx57(StatItemContent, {
30127
+ /* @__PURE__ */ jsx54(StatItemContent, {
30211
30128
  content: "pages of docs",
30212
30129
  width: "125px",
30213
30130
  fontSize: "1.0rem",
@@ -30216,16 +30133,16 @@ var PagesOfDocs = () => {
30216
30133
  ]
30217
30134
  });
30218
30135
  };
30219
- var TemplatesAndExamples = () => /* @__PURE__ */ jsxs14(Pill, {
30136
+ var TemplatesAndExamples = () => /* @__PURE__ */ jsxs13(Pill, {
30220
30137
  className: "w-[30%] flex items-center flex-row",
30221
30138
  children: [
30222
- /* @__PURE__ */ jsx57(StatItemContent, {
30139
+ /* @__PURE__ */ jsx54(StatItemContent, {
30223
30140
  content: "35",
30224
30141
  width: "60px",
30225
30142
  fontSize: "2.7rem",
30226
30143
  fontWeight: "bold"
30227
30144
  }),
30228
- /* @__PURE__ */ jsx57(StatItemContent, {
30145
+ /* @__PURE__ */ jsx54(StatItemContent, {
30229
30146
  content: "templates & examples",
30230
30147
  width: "135px",
30231
30148
  fontSize: "1.35rem",
@@ -30234,27 +30151,27 @@ var TemplatesAndExamples = () => /* @__PURE__ */ jsxs14(Pill, {
30234
30151
  ]
30235
30152
  });
30236
30153
  var GitHubStars = () => {
30237
- return /* @__PURE__ */ jsxs14(Pill, {
30154
+ return /* @__PURE__ */ jsxs13(Pill, {
30238
30155
  className: "w-[30%] flex-col",
30239
30156
  children: [
30240
- /* @__PURE__ */ jsxs14("div", {
30157
+ /* @__PURE__ */ jsxs13("div", {
30241
30158
  style: { display: "flex", alignItems: "center" },
30242
30159
  children: [
30243
- /* @__PURE__ */ jsx57(StatItemContent, {
30244
- content: /* @__PURE__ */ jsx57("svg", {
30160
+ /* @__PURE__ */ jsx54(StatItemContent, {
30161
+ content: /* @__PURE__ */ jsx54("svg", {
30245
30162
  width: "40",
30246
30163
  height: "40",
30247
30164
  viewBox: "0 0 26 24",
30248
30165
  fill: "none",
30249
30166
  xmlns: "http://www.w3.org/2000/svg",
30250
- children: /* @__PURE__ */ jsx57("path", {
30167
+ children: /* @__PURE__ */ jsx54("path", {
30251
30168
  d: "M12.9951 0C13.4424 0 13.8507 0.24375 14.0451 0.632812L17.3799 7.25625L24.8271 8.31562C25.2646 8.37656 25.6292 8.67188 25.7653 9.07969C25.9014 9.4875 25.7896 9.92812 25.4785 10.2281L20.0778 15.3937L21.3514 22.6875C21.4243 23.1094 21.2444 23.5359 20.8799 23.7891C20.5153 24.0422 20.0389 24.0703 19.65 23.8688L12.9903 20.4375L6.34027 23.8641C5.94652 24.0656 5.47014 24.0375 5.11041 23.7844C4.75069 23.5312 4.56597 23.1047 4.63889 22.6828L5.9125 15.3891L0.511803 10.2281C0.195831 9.92812 0.0888863 9.48281 0.224997 9.07969C0.361108 8.67656 0.725692 8.38125 1.16319 8.31562L8.61041 7.25625L11.9451 0.632812C12.1444 0.24375 12.5479 0 12.9951 0ZM12.9951 3.70312L10.4431 8.775C10.2729 9.10781 9.94722 9.34219 9.56319 9.39844L3.8125 10.2141L7.98819 14.2031C8.25555 14.4609 8.38194 14.8266 8.31875 15.1875L7.33194 20.7984L12.4458 18.1641C12.791 17.9859 13.2042 17.9859 13.5444 18.1641L18.6583 20.7984L17.6764 15.1922C17.6132 14.8313 17.7347 14.4656 18.0069 14.2078L22.1826 10.2188L16.4319 9.39844C16.0528 9.34219 15.7222 9.1125 15.5521 8.775L12.9951 3.70312Z",
30252
30169
  fill: "var(--text-color)"
30253
30170
  })
30254
30171
  }),
30255
30172
  width: "45px"
30256
30173
  }),
30257
- /* @__PURE__ */ jsx57(StatItemContent, {
30174
+ /* @__PURE__ */ jsx54(StatItemContent, {
30258
30175
  content: "54K",
30259
30176
  width: "80px",
30260
30177
  fontSize: "2.5rem",
@@ -30262,7 +30179,7 @@ var GitHubStars = () => {
30262
30179
  })
30263
30180
  ]
30264
30181
  }),
30265
- /* @__PURE__ */ jsx57(StatItemContent, {
30182
+ /* @__PURE__ */ jsx54(StatItemContent, {
30266
30183
  content: "GitHub stars",
30267
30184
  width: "125px",
30268
30185
  fontSize: "1.0rem",
@@ -30272,9 +30189,9 @@ var GitHubStars = () => {
30272
30189
  });
30273
30190
  };
30274
30191
  var DiscordMembers = () => {
30275
- return /* @__PURE__ */ jsx57(Pill, {
30192
+ return /* @__PURE__ */ jsx54(Pill, {
30276
30193
  className: "w-[30%]",
30277
- children: /* @__PURE__ */ jsxs14("div", {
30194
+ children: /* @__PURE__ */ jsxs13("div", {
30278
30195
  style: {
30279
30196
  width: "80%",
30280
30197
  display: "flex",
@@ -30282,7 +30199,7 @@ var DiscordMembers = () => {
30282
30199
  justifyContent: "center"
30283
30200
  },
30284
30201
  children: [
30285
- /* @__PURE__ */ jsxs14("div", {
30202
+ /* @__PURE__ */ jsxs13("div", {
30286
30203
  style: {
30287
30204
  display: "flex",
30288
30205
  flexDirection: "column",
@@ -30290,13 +30207,13 @@ var DiscordMembers = () => {
30290
30207
  justifyContent: "center"
30291
30208
  },
30292
30209
  children: [
30293
- /* @__PURE__ */ jsx57(StatItemContent, {
30210
+ /* @__PURE__ */ jsx54(StatItemContent, {
30294
30211
  content: "10K+",
30295
30212
  width: "142px",
30296
30213
  fontSize: "2.5rem",
30297
30214
  fontWeight: "bold"
30298
30215
  }),
30299
- /* @__PURE__ */ jsx57(StatItemContent, {
30216
+ /* @__PURE__ */ jsx54(StatItemContent, {
30300
30217
  content: "Discord members",
30301
30218
  width: "142px",
30302
30219
  fontSize: "1rem",
@@ -30304,19 +30221,19 @@ var DiscordMembers = () => {
30304
30221
  })
30305
30222
  ]
30306
30223
  }),
30307
- /* @__PURE__ */ jsx57("div", {
30224
+ /* @__PURE__ */ jsx54("div", {
30308
30225
  style: {
30309
30226
  display: "flex",
30310
30227
  justifyContent: "center"
30311
30228
  },
30312
- children: /* @__PURE__ */ jsx57(StatItemContent, {
30313
- content: /* @__PURE__ */ jsx57("svg", {
30229
+ children: /* @__PURE__ */ jsx54(StatItemContent, {
30230
+ content: /* @__PURE__ */ jsx54("svg", {
30314
30231
  width: "61",
30315
30232
  height: "47",
30316
30233
  viewBox: "0 0 46 35",
30317
30234
  fill: "none",
30318
30235
  xmlns: "http://www.w3.org/2000/svg",
30319
- children: /* @__PURE__ */ jsx57("path", {
30236
+ children: /* @__PURE__ */ jsx54("path", {
30320
30237
  d: "M38.9978 2.95533C38.9843 2.93009 38.962 2.91064 38.9352 2.90065C35.955 1.53492 32.8101 0.560692 29.5791 0.00230404C29.55 -0.00300893 29.5201 0.00092017 29.4934 0.0135365C29.4667 0.0261528 29.4447 0.0468187 29.4304 0.0726144C29.0019 0.84938 28.6129 1.64724 28.2648 2.46316C24.7802 1.93495 21.2356 1.93495 17.7509 2.46316C17.4015 1.64523 17.0072 0.847165 16.5697 0.0726144C16.5546 0.0475873 16.5324 0.0275657 16.506 0.0150584C16.4795 0.00255114 16.45 -0.00188563 16.421 0.00230404C13.1844 0.558177 10.034 1.53248 7.04927 2.90065C7.0231 2.91173 7.00116 2.93089 6.98669 2.95533C1.02568 11.8535 -0.609293 20.5251 0.188637 29.0951C0.190896 29.1167 0.197628 29.1376 0.208402 29.1564C0.219177 29.1752 0.233759 29.1916 0.25122 29.2045C3.7235 31.7693 7.60667 33.7268 11.7352 34.9934C11.7648 35.0025 11.7966 35.0022 11.8261 34.9924C11.8556 34.9826 11.8812 34.9638 11.8994 34.9387C12.7852 33.7344 13.5702 32.4593 14.2463 31.1263C14.2553 31.108 14.2604 31.088 14.2613 31.0676C14.2622 31.0471 14.2589 31.0268 14.2516 31.0077C14.2442 30.9886 14.233 30.9713 14.2186 30.9567C14.2043 30.9422 14.1871 30.9308 14.1681 30.9232C12.9278 30.4486 11.7271 29.8765 10.5774 29.2123C10.5571 29.1999 10.54 29.1828 10.5277 29.1624C10.5154 29.142 10.5082 29.119 10.5067 29.0953C10.5051 29.0715 10.5093 29.0478 10.5189 29.026C10.5285 29.0042 10.5432 28.985 10.5617 28.9701C10.8042 28.7904 11.0468 28.6029 11.2736 28.4155C11.2936 28.3979 11.3182 28.3864 11.3445 28.3822C11.3708 28.3781 11.3978 28.3815 11.4222 28.392C18.9478 31.8216 27.0992 31.8216 34.5388 28.392C34.5625 28.3804 34.589 28.3757 34.6153 28.3785C34.6416 28.3813 34.6666 28.3914 34.6874 28.4076C34.9143 28.5951 35.1568 28.7904 35.3993 28.9701C35.4178 28.985 35.4325 29.0042 35.4421 29.026C35.4517 29.0478 35.4559 29.0715 35.4543 29.0953C35.4528 29.119 35.4456 29.142 35.4333 29.1624C35.421 29.1828 35.4039 29.1999 35.3836 29.2123C34.2369 29.8799 33.0357 30.4496 31.7929 30.9154C31.7739 30.923 31.7567 30.9344 31.7424 30.9489C31.728 30.9635 31.7168 30.9808 31.7095 30.9999C31.7021 31.019 31.6988 31.0393 31.6997 31.0597C31.7006 31.0801 31.7057 31.1001 31.7147 31.1185C32.4026 32.4449 33.187 33.7191 34.0616 34.9309C34.0798 34.956 34.1054 34.9748 34.1349 34.9846C34.1644 34.9944 34.1962 34.9947 34.2258 34.9856C38.3663 33.7246 42.2606 31.7669 45.7411 29.1967C45.7589 29.1841 45.7737 29.1679 45.7846 29.149C45.7954 29.1301 45.8019 29.109 45.8037 29.0873C46.758 19.1892 44.1922 10.5879 38.9978 2.95533ZM15.3728 23.8765C13.1042 23.8765 11.2423 21.7985 11.2423 19.2517C11.2423 16.7049 13.0729 14.619 15.3728 14.619C17.6962 14.619 19.5424 16.7127 19.5032 19.2439C19.5032 21.7985 17.6727 23.8765 15.3728 23.8765ZM30.6586 23.8765C28.39 23.8765 26.5282 21.7985 26.5282 19.2517C26.5282 16.7049 28.3509 14.619 30.6586 14.619C32.982 14.619 34.8282 16.7127 34.7891 19.2439C34.7891 21.7985 32.9742 23.8765 30.6586 23.8765Z",
30321
30238
  fill: "var(--text-color)"
30322
30239
  })
@@ -30329,21 +30246,21 @@ var DiscordMembers = () => {
30329
30246
  });
30330
30247
  };
30331
30248
  var Contributors = () => {
30332
- return /* @__PURE__ */ jsx57(Pill, {
30249
+ return /* @__PURE__ */ jsx54(Pill, {
30333
30250
  className: "w-[30%]",
30334
- children: /* @__PURE__ */ jsxs14("div", {
30251
+ children: /* @__PURE__ */ jsxs13("div", {
30335
30252
  style: { display: "flex", justifyContent: "center" },
30336
30253
  children: [
30337
- /* @__PURE__ */ jsx57("div", {
30254
+ /* @__PURE__ */ jsx54("div", {
30338
30255
  style: { display: "flex", justifyContent: "center" },
30339
- children: /* @__PURE__ */ jsx57(StatItemContent, {
30340
- content: /* @__PURE__ */ jsx57("svg", {
30256
+ children: /* @__PURE__ */ jsx54(StatItemContent, {
30257
+ content: /* @__PURE__ */ jsx54("svg", {
30341
30258
  width: "60",
30342
30259
  height: "50",
30343
30260
  viewBox: "0 0 63 40",
30344
30261
  fill: "none",
30345
30262
  xmlns: "http://www.w3.org/2000/svg",
30346
- children: /* @__PURE__ */ jsx57("path", {
30263
+ children: /* @__PURE__ */ jsx54("path", {
30347
30264
  d: "M6.975 5.375C6.975 3.94946 7.54656 2.58231 8.56395 1.5743C9.58133 0.566293 10.9612 0 12.4 0C13.8388 0 15.2187 0.566293 16.2361 1.5743C17.2534 2.58231 17.825 3.94946 17.825 5.375C17.825 6.80054 17.2534 8.16769 16.2361 9.1757C15.2187 10.1837 13.8388 10.75 12.4 10.75C10.9612 10.75 9.58133 10.1837 8.56395 9.1757C7.54656 8.16769 6.975 6.80054 6.975 5.375ZM6.2 20.5114C5.23125 21.5864 4.65 23.0165 4.65 24.5714C4.65 26.1263 5.23125 27.5565 6.2 28.6315V20.5114ZM20.1887 15.7795C17.3116 18.3038 15.5 21.9991 15.5 26.1071C15.5 29.3993 16.6625 32.4228 18.6 34.7935V36.8571C18.6 38.556 17.2147 39.9286 15.5 39.9286H9.3C7.58531 39.9286 6.2 38.556 6.2 36.8571V34.2848C2.53813 32.5571 0 28.8618 0 24.5714C0 18.6301 4.85344 13.8214 10.85 13.8214H13.95C16.275 13.8214 18.4256 14.5413 20.1887 15.7699V15.7795ZM43.4 36.8571V34.7935C45.3375 32.4228 46.5 29.3993 46.5 26.1071C46.5 21.9991 44.6884 18.3038 41.8112 15.7699C43.5744 14.5413 45.725 13.8214 48.05 13.8214H51.15C57.1466 13.8214 62 18.6301 62 24.5714C62 28.8618 59.4619 32.5571 55.8 34.2848V36.8571C55.8 38.556 54.4147 39.9286 52.7 39.9286H46.5C44.7853 39.9286 43.4 38.556 43.4 36.8571ZM44.175 5.375C44.175 3.94946 44.7466 2.58231 45.7639 1.5743C46.7813 0.566293 48.1612 0 49.6 0C51.0388 0 52.4187 0.566293 53.4361 1.5743C54.4534 2.58231 55.025 3.94946 55.025 5.375C55.025 6.80054 54.4534 8.16769 53.4361 9.1757C52.4187 10.1837 51.0388 10.75 49.6 10.75C48.1612 10.75 46.7813 10.1837 45.7639 9.1757C44.7466 8.16769 44.175 6.80054 44.175 5.375ZM55.8 20.5114V28.6411C56.7687 27.5565 57.35 26.1359 57.35 24.581C57.35 23.0261 56.7687 21.596 55.8 20.521V20.5114ZM31 0C32.6443 0 34.2213 0.647192 35.3841 1.7992C36.5468 2.95121 37.2 4.51367 37.2 6.14286C37.2 7.77204 36.5468 9.3345 35.3841 10.4865C34.2213 11.6385 32.6443 12.2857 31 12.2857C29.3557 12.2857 27.7787 11.6385 26.6159 10.4865C25.4532 9.3345 24.8 7.77204 24.8 6.14286C24.8 4.51367 25.4532 2.95121 26.6159 1.7992C27.7787 0.647192 29.3557 0 31 0ZM23.25 26.1071C23.25 27.6621 23.8312 29.0826 24.8 30.1672V22.0471C23.8312 23.1317 23.25 24.5522 23.25 26.1071ZM37.2 22.0471V30.1768C38.1687 29.0922 38.75 27.6717 38.75 26.1167C38.75 24.5618 38.1687 23.1317 37.2 22.0567V22.0471ZM43.4 26.1071C43.4 30.3975 40.8619 34.0929 37.2 35.8205V39.9286C37.2 41.6275 35.8147 43 34.1 43H27.9C26.1853 43 24.8 41.6275 24.8 39.9286V35.8205C21.1381 34.0929 18.6 30.3975 18.6 26.1071C18.6 20.1658 23.4534 15.3571 29.45 15.3571H32.55C38.5466 15.3571 43.4 20.1658 43.4 26.1071Z",
30348
30265
  fill: "var(--text-color)"
30349
30266
  })
@@ -30351,7 +30268,7 @@ var Contributors = () => {
30351
30268
  width: "65px"
30352
30269
  })
30353
30270
  }),
30354
- /* @__PURE__ */ jsxs14("div", {
30271
+ /* @__PURE__ */ jsxs13("div", {
30355
30272
  style: {
30356
30273
  display: "flex",
30357
30274
  flexDirection: "column",
@@ -30359,13 +30276,13 @@ var Contributors = () => {
30359
30276
  justifyContent: "center"
30360
30277
  },
30361
30278
  children: [
30362
- /* @__PURE__ */ jsx57(StatItemContent, {
30279
+ /* @__PURE__ */ jsx54(StatItemContent, {
30363
30280
  content: "300+",
30364
30281
  width: "100px",
30365
30282
  fontSize: "2.5rem",
30366
30283
  fontWeight: "bold"
30367
30284
  }),
30368
- /* @__PURE__ */ jsx57(StatItemContent, {
30285
+ /* @__PURE__ */ jsx54(StatItemContent, {
30369
30286
  content: "contributors",
30370
30287
  width: "100px",
30371
30288
  fontSize: "1.0rem",
@@ -30378,50 +30295,64 @@ var Contributors = () => {
30378
30295
  });
30379
30296
  };
30380
30297
 
30298
+ // src/components/homepage/VideoAppsTitle.tsx
30299
+ import { jsx as jsx56 } from "react/jsx-runtime";
30300
+ var SectionTitle = ({
30301
+ children
30302
+ }) => {
30303
+ return /* @__PURE__ */ jsx56("div", {
30304
+ className: "text-center",
30305
+ children: /* @__PURE__ */ jsx56("h2", {
30306
+ className: "fontbrand text-4xl",
30307
+ children
30308
+ })
30309
+ });
30310
+ };
30311
+
30381
30312
  // src/components/homepage/CommunityStats.tsx
30382
- import { jsx as jsx58, jsxs as jsxs15 } from "react/jsx-runtime";
30383
- var SectionLink = ({ href, children }) => /* @__PURE__ */ jsx58("a", {
30313
+ import { jsx as jsx57, jsxs as jsxs14 } from "react/jsx-runtime";
30314
+ var SectionLink = ({ href, children }) => /* @__PURE__ */ jsx57("a", {
30384
30315
  target: "_blank",
30385
30316
  href,
30386
30317
  className: "no-underline text-inherit contents",
30387
30318
  children
30388
30319
  });
30389
- var CommunityStats = () => /* @__PURE__ */ jsxs15("div", {
30320
+ var CommunityStats = () => /* @__PURE__ */ jsxs14("div", {
30390
30321
  className: "m-auto max-w-[700px] text-center",
30391
30322
  children: [
30392
- /* @__PURE__ */ jsx58(SectionTitle, {
30323
+ /* @__PURE__ */ jsx57(SectionTitle, {
30393
30324
  children: "Never build alone"
30394
30325
  }),
30395
- /* @__PURE__ */ jsx58("div", {
30326
+ /* @__PURE__ */ jsx57("div", {
30396
30327
  className: "fontbrand text-center mb-10 -mt-4",
30397
30328
  children: "Join a thriving community of developers."
30398
30329
  }),
30399
- /* @__PURE__ */ jsxs15("div", {
30330
+ /* @__PURE__ */ jsxs14("div", {
30400
30331
  className: "flex flex-wrap justify-between gap-4 w-full items-center",
30401
30332
  children: [
30402
- /* @__PURE__ */ jsx58(SectionLink, {
30333
+ /* @__PURE__ */ jsx57(SectionLink, {
30403
30334
  href: "https://www.npmjs.com/package/remotion",
30404
- children: /* @__PURE__ */ jsx58(InstallsPerMonth, {})
30335
+ children: /* @__PURE__ */ jsx57(InstallsPerMonth, {})
30405
30336
  }),
30406
- /* @__PURE__ */ jsx58(SectionLink, {
30337
+ /* @__PURE__ */ jsx57(SectionLink, {
30407
30338
  href: "https://www.remotion.dev/docs/",
30408
- children: /* @__PURE__ */ jsx58(PagesOfDocs, {})
30339
+ children: /* @__PURE__ */ jsx57(PagesOfDocs, {})
30409
30340
  }),
30410
- /* @__PURE__ */ jsx58(SectionLink, {
30341
+ /* @__PURE__ */ jsx57(SectionLink, {
30411
30342
  href: "https://www.remotion.dev/templates",
30412
- children: /* @__PURE__ */ jsx58(TemplatesAndExamples, {})
30343
+ children: /* @__PURE__ */ jsx57(TemplatesAndExamples, {})
30413
30344
  }),
30414
- /* @__PURE__ */ jsx58(SectionLink, {
30345
+ /* @__PURE__ */ jsx57(SectionLink, {
30415
30346
  href: "https://github.com/remotion-dev/remotion",
30416
- children: /* @__PURE__ */ jsx58(GitHubStars, {})
30347
+ children: /* @__PURE__ */ jsx57(GitHubStars, {})
30417
30348
  }),
30418
- /* @__PURE__ */ jsx58(SectionLink, {
30349
+ /* @__PURE__ */ jsx57(SectionLink, {
30419
30350
  href: "https://remotion.dev/discord",
30420
- children: /* @__PURE__ */ jsx58(DiscordMembers, {})
30351
+ children: /* @__PURE__ */ jsx57(DiscordMembers, {})
30421
30352
  }),
30422
- /* @__PURE__ */ jsx58(SectionLink, {
30353
+ /* @__PURE__ */ jsx57(SectionLink, {
30423
30354
  href: "https://github.com/remotion-dev/remotion/graphs/contributors",
30424
- children: /* @__PURE__ */ jsx58(Contributors, {})
30355
+ children: /* @__PURE__ */ jsx57(Contributors, {})
30425
30356
  })
30426
30357
  ]
30427
30358
  })
@@ -30431,8 +30362,8 @@ var CommunityStats_default = CommunityStats;
30431
30362
 
30432
30363
  // ../player/dist/esm/index.mjs
30433
30364
  import { createContext as createContext32 } from "react";
30434
- import { jsx as jsx59, jsxs as jsxs16 } from "react/jsx-runtime";
30435
- import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment13 } from "react/jsx-runtime";
30365
+ import { jsx as jsx58, jsxs as jsxs15 } from "react/jsx-runtime";
30366
+ import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment12 } from "react/jsx-runtime";
30436
30367
  import React57 from "react";
30437
30368
  import { useContext as useContext210, useEffect as useEffect41, useState as useState40 } from "react";
30438
30369
  import { useContext as useContext47, useLayoutEffect as useLayoutEffect18 } from "react";
@@ -30441,7 +30372,7 @@ import { useEffect as useEffect210, useState as useState24 } from "react";
30441
30372
  import { useLayoutEffect as useLayoutEffect23 } from "react";
30442
30373
  import { useContext as useContext42, useEffect as useEffect52, useRef as useRef47 } from "react";
30443
30374
  import { useEffect as useEffect310, useRef as useRef212 } from "react";
30444
- import { useCallback as useCallback39, useContext as useContext310, useMemo as useMemo55, useRef as useRef48, useState as useState310 } from "react";
30375
+ import { useCallback as useCallback39, useContext as useContext310, useMemo as useMemo56, useRef as useRef48, useState as useState310 } from "react";
30445
30376
  import { useEffect as useEffect42, useRef as useRef310 } from "react";
30446
30377
  import { useCallback as useCallback210, useEffect as useEffect62, useMemo as useMemo212, useState as useState42 } from "react";
30447
30378
  import {
@@ -30470,11 +30401,11 @@ import React410, { useEffect as useEffect72 } from "react";
30470
30401
  import { jsx as jsx55 } from "react/jsx-runtime";
30471
30402
  import { useCallback as useCallback72, useEffect as useEffect112, useMemo as useMemo92, useRef as useRef82, useState as useState102 } from "react";
30472
30403
  import { jsx as jsx64 } from "react/jsx-runtime";
30473
- import { useCallback as useCallback42, useMemo as useMemo42, useRef as useRef52, useState as useState62 } from "react";
30404
+ import { useCallback as useCallback42, useMemo as useMemo43, useRef as useRef52, useState as useState62 } from "react";
30474
30405
  import React54, { useCallback as useCallback310, useMemo as useMemo310, useState as useState52 } from "react";
30475
30406
  import { jsx as jsx74, jsxs as jsxs33 } from "react/jsx-runtime";
30476
30407
  import { jsx as jsx84, jsxs as jsxs43 } from "react/jsx-runtime";
30477
- import { useCallback as useCallback52, useEffect as useEffect92, useMemo as useMemo56, useState as useState82 } from "react";
30408
+ import { useCallback as useCallback52, useEffect as useEffect92, useMemo as useMemo57, useState as useState82 } from "react";
30478
30409
  import { useEffect as useEffect83, useRef as useRef62, useState as useState72 } from "react";
30479
30410
  import { jsx as jsx94, jsxs as jsxs52 } from "react/jsx-runtime";
30480
30411
  import { useCallback as useCallback62, useEffect as useEffect102, useMemo as useMemo62, useRef as useRef72, useState as useState92 } from "react";
@@ -31247,6 +31178,29 @@ var backgroundSchema2 = {
31247
31178
  description: "Color"
31248
31179
  }
31249
31180
  };
31181
+ var svgStrokeSchema2 = {
31182
+ stroke: {
31183
+ type: "color",
31184
+ default: "none",
31185
+ description: "Stroke"
31186
+ },
31187
+ strokeWidth: {
31188
+ type: "number",
31189
+ default: 1,
31190
+ description: "Stroke width",
31191
+ min: 0,
31192
+ step: 1,
31193
+ hiddenFromList: false
31194
+ }
31195
+ };
31196
+ var svgPaintSchema2 = {
31197
+ fill: {
31198
+ type: "color",
31199
+ default: undefined,
31200
+ description: "Fill"
31201
+ },
31202
+ ...svgStrokeSchema2
31203
+ };
31250
31204
  var premountSchema2 = {
31251
31205
  premountFor: {
31252
31206
  type: "number",
@@ -31269,7 +31223,51 @@ var premountSchema2 = {
31269
31223
  var sequencePremountSchema2 = {
31270
31224
  ...premountSchema2
31271
31225
  };
31226
+ var cropSchema2 = {
31227
+ cropLeft: {
31228
+ type: "number",
31229
+ default: 0,
31230
+ description: "Crop left",
31231
+ min: 0,
31232
+ max: 1,
31233
+ step: 0.01,
31234
+ hiddenFromList: false,
31235
+ keyframable: true
31236
+ },
31237
+ cropRight: {
31238
+ type: "number",
31239
+ default: 0,
31240
+ description: "Crop right",
31241
+ min: 0,
31242
+ max: 1,
31243
+ step: 0.01,
31244
+ hiddenFromList: false,
31245
+ keyframable: true
31246
+ },
31247
+ cropTop: {
31248
+ type: "number",
31249
+ default: 0,
31250
+ description: "Crop top",
31251
+ min: 0,
31252
+ max: 1,
31253
+ step: 0.01,
31254
+ hiddenFromList: false,
31255
+ keyframable: true
31256
+ },
31257
+ cropBottom: {
31258
+ type: "number",
31259
+ default: 0,
31260
+ description: "Crop bottom",
31261
+ min: 0,
31262
+ max: 1,
31263
+ step: 0.01,
31264
+ hiddenFromList: false,
31265
+ keyframable: true
31266
+ }
31267
+ };
31268
+ var sequenceCropSchema2 = cropSchema2;
31272
31269
  var sequenceStyleSchema2 = {
31270
+ ...sequenceCropSchema2,
31273
31271
  ...transformSchema2,
31274
31272
  ...backgroundSchema2,
31275
31273
  ...borderSchema2,
@@ -32058,12 +32056,12 @@ if (typeof createContext32 !== "function") {
32058
32056
  var ICON_SIZE2 = 25;
32059
32057
  var fullscreenIconSize = 16;
32060
32058
  var PlayIcon = () => {
32061
- return /* @__PURE__ */ jsx59("svg", {
32059
+ return /* @__PURE__ */ jsx58("svg", {
32062
32060
  width: ICON_SIZE2,
32063
32061
  height: ICON_SIZE2,
32064
32062
  viewBox: "0 0 25 25",
32065
32063
  fill: "none",
32066
- children: /* @__PURE__ */ jsx59("path", {
32064
+ children: /* @__PURE__ */ jsx58("path", {
32067
32065
  d: "M8 6.375C7.40904 8.17576 7.06921 10.2486 7.01438 12.3871C6.95955 14.5255 7.19163 16.6547 7.6875 18.5625C9.95364 18.2995 12.116 17.6164 14.009 16.5655C15.902 15.5147 17.4755 14.124 18.6088 12.5C17.5158 10.8949 15.9949 9.51103 14.1585 8.45082C12.3222 7.3906 10.2174 6.68116 8 6.375Z",
32068
32066
  fill: "white",
32069
32067
  stroke: "white",
@@ -32073,12 +32071,12 @@ var PlayIcon = () => {
32073
32071
  });
32074
32072
  };
32075
32073
  var PauseIcon = () => {
32076
- return /* @__PURE__ */ jsxs16("svg", {
32074
+ return /* @__PURE__ */ jsxs15("svg", {
32077
32075
  viewBox: "0 0 100 100",
32078
32076
  width: ICON_SIZE2,
32079
32077
  height: ICON_SIZE2,
32080
32078
  children: [
32081
- /* @__PURE__ */ jsx59("rect", {
32079
+ /* @__PURE__ */ jsx58("rect", {
32082
32080
  x: "25",
32083
32081
  y: "20",
32084
32082
  width: "20",
@@ -32087,7 +32085,7 @@ var PauseIcon = () => {
32087
32085
  ry: "5",
32088
32086
  rx: "5"
32089
32087
  }),
32090
- /* @__PURE__ */ jsx59("rect", {
32088
+ /* @__PURE__ */ jsx58("rect", {
32091
32089
  x: "55",
32092
32090
  y: "20",
32093
32091
  width: "20",
@@ -32107,12 +32105,12 @@ var FullscreenIcon = ({
32107
32105
  const out = isFullscreen ? 0 : strokeWidth2 / 2;
32108
32106
  const middleInset = isFullscreen ? strokeWidth2 * 1.6 : strokeWidth2 / 2;
32109
32107
  const inset = isFullscreen ? strokeWidth2 * 1.6 : strokeWidth2 * 2;
32110
- return /* @__PURE__ */ jsxs16("svg", {
32108
+ return /* @__PURE__ */ jsxs15("svg", {
32111
32109
  viewBox: `0 0 ${viewSize} ${viewSize}`,
32112
32110
  height: fullscreenIconSize,
32113
32111
  width: fullscreenIconSize,
32114
32112
  children: [
32115
- /* @__PURE__ */ jsx59("path", {
32113
+ /* @__PURE__ */ jsx58("path", {
32116
32114
  d: `
32117
32115
  M ${out} ${inset}
32118
32116
  L ${middleInset} ${middleInset}
@@ -32122,7 +32120,7 @@ var FullscreenIcon = ({
32122
32120
  strokeWidth: strokeWidth2,
32123
32121
  fill: "none"
32124
32122
  }),
32125
- /* @__PURE__ */ jsx59("path", {
32123
+ /* @__PURE__ */ jsx58("path", {
32126
32124
  d: `
32127
32125
  M ${viewSize - out} ${inset}
32128
32126
  L ${viewSize - middleInset} ${middleInset}
@@ -32132,7 +32130,7 @@ var FullscreenIcon = ({
32132
32130
  strokeWidth: strokeWidth2,
32133
32131
  fill: "none"
32134
32132
  }),
32135
- /* @__PURE__ */ jsx59("path", {
32133
+ /* @__PURE__ */ jsx58("path", {
32136
32134
  d: `
32137
32135
  M ${out} ${viewSize - inset}
32138
32136
  L ${middleInset} ${viewSize - middleInset}
@@ -32142,7 +32140,7 @@ var FullscreenIcon = ({
32142
32140
  strokeWidth: strokeWidth2,
32143
32141
  fill: "none"
32144
32142
  }),
32145
- /* @__PURE__ */ jsx59("path", {
32143
+ /* @__PURE__ */ jsx58("path", {
32146
32144
  d: `
32147
32145
  M ${viewSize - out} ${viewSize - inset}
32148
32146
  L ${viewSize - middleInset} ${viewSize - middleInset}
@@ -32156,22 +32154,22 @@ var FullscreenIcon = ({
32156
32154
  });
32157
32155
  };
32158
32156
  var VolumeOffIcon = () => {
32159
- return /* @__PURE__ */ jsx59("svg", {
32157
+ return /* @__PURE__ */ jsx58("svg", {
32160
32158
  width: ICON_SIZE2,
32161
32159
  height: ICON_SIZE2,
32162
32160
  viewBox: "0 0 24 24",
32163
- children: /* @__PURE__ */ jsx59("path", {
32161
+ children: /* @__PURE__ */ jsx58("path", {
32164
32162
  d: "M3.63 3.63a.996.996 0 000 1.41L7.29 8.7 7 9H4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 1.71-.71v-4.17l4.18 4.18c-.49.37-1.02.68-1.6.91-.36.15-.58.53-.58.92 0 .72.73 1.18 1.39.91.8-.33 1.55-.77 2.22-1.31l1.34 1.34a.996.996 0 101.41-1.41L5.05 3.63c-.39-.39-1.02-.39-1.42 0zM19 12c0 .82-.15 1.61-.41 2.34l1.53 1.53c.56-1.17.88-2.48.88-3.87 0-3.83-2.4-7.11-5.78-8.4-.59-.23-1.22.23-1.22.86v.19c0 .38.25.71.61.85C17.18 6.54 19 9.06 19 12zm-8.71-6.29l-.17.17L12 7.76V6.41c0-.89-1.08-1.33-1.71-.7zM16.5 12A4.5 4.5 0 0014 7.97v1.79l2.48 2.48c.01-.08.02-.16.02-.24z",
32165
32163
  fill: "#fff"
32166
32164
  })
32167
32165
  });
32168
32166
  };
32169
32167
  var VolumeOnIcon = () => {
32170
- return /* @__PURE__ */ jsx59("svg", {
32168
+ return /* @__PURE__ */ jsx58("svg", {
32171
32169
  width: ICON_SIZE2,
32172
32170
  height: ICON_SIZE2,
32173
32171
  viewBox: "0 0 24 24",
32174
- children: /* @__PURE__ */ jsx59("path", {
32172
+ children: /* @__PURE__ */ jsx58("path", {
32175
32173
  d: "M3 10v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 1.71-.71V6.41c0-.89-1.08-1.34-1.71-.71L7 9H4c-.55 0-1 .45-1 1zm13.5 2A4.5 4.5 0 0014 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 4.45v.2c0 .38.25.71.6.85C17.18 6.53 19 9.06 19 12s-1.82 5.47-4.4 6.5c-.36.14-.6.47-.6.85v.2c0 .63.63 1.07 1.21.85C18.6 19.11 21 15.84 21 12s-2.4-7.11-5.79-8.4c-.58-.23-1.21.22-1.21.85z",
32176
32174
  fill: "#fff"
32177
32175
  })
@@ -32195,7 +32193,7 @@ var studioStyle = {
32195
32193
  };
32196
32194
  var BufferingIndicator = ({ type }) => {
32197
32195
  const style = type === "player" ? playerStyle : studioStyle;
32198
- return /* @__PURE__ */ jsxs24(Fragment13, {
32196
+ return /* @__PURE__ */ jsxs24(Fragment12, {
32199
32197
  children: [
32200
32198
  /* @__PURE__ */ jsx214("style", {
32201
32199
  type: "text/css",
@@ -32701,7 +32699,7 @@ var usePlayer = () => {
32701
32699
  const isBuffering = useCallback39(() => {
32702
32700
  return buffering.current;
32703
32701
  }, [buffering]);
32704
- const returnValue = useMemo55(() => {
32702
+ const returnValue = useMemo56(() => {
32705
32703
  return {
32706
32704
  frameBack,
32707
32705
  frameForward,
@@ -33547,7 +33545,7 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
33547
33545
  }
33548
33546
  setPlayerMuted((mute) => !mute);
33549
33547
  }, [isVolume0, setPlayerMuted, setMediaVolume]);
33550
- const parentDivStyle = useMemo42(() => {
33548
+ const parentDivStyle = useMemo43(() => {
33551
33549
  return {
33552
33550
  display: "inline-flex",
33553
33551
  background: "none",
@@ -33558,7 +33556,7 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
33558
33556
  ...displayVerticalVolumeSlider && { position: "relative" }
33559
33557
  };
33560
33558
  }, [displayVerticalVolumeSlider]);
33561
- const volumeContainer = useMemo42(() => {
33559
+ const volumeContainer = useMemo43(() => {
33562
33560
  return {
33563
33561
  display: "inline",
33564
33562
  width: ICON_SIZE2,
@@ -33583,10 +33581,10 @@ var MediaVolumeSlider = ({ displayVerticalVolumeSlider, renderMuteButton, render
33583
33581
  children: isMutedOrZero ? /* @__PURE__ */ jsx84(VolumeOffIcon, {}) : /* @__PURE__ */ jsx84(VolumeOnIcon, {})
33584
33582
  });
33585
33583
  }, [onBlur, onClick, volumeContainer]);
33586
- const muteButton = useMemo42(() => {
33584
+ const muteButton = useMemo43(() => {
33587
33585
  return renderMuteButton ? renderMuteButton({ muted: playerMuted, volume: mediaVolume }) : renderDefaultMuteButton({ muted: playerMuted, volume: mediaVolume });
33588
33586
  }, [playerMuted, mediaVolume, renderDefaultMuteButton, renderMuteButton]);
33589
- const volumeSlider = useMemo42(() => {
33587
+ const volumeSlider = useMemo43(() => {
33590
33588
  return (focused || hover) && !playerMuted && !Internals.isIosSafari() ? (renderVolumeSlider ?? renderDefaultVolumeSlider)({
33591
33589
  isVertical: displayVerticalVolumeSlider,
33592
33590
  volume: mediaVolume,
@@ -33674,7 +33672,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
33674
33672
  setHovered(false);
33675
33673
  }, []);
33676
33674
  const isFocused = keyboardSelectedRate === rate;
33677
- const actualStyle = useMemo56(() => {
33675
+ const actualStyle = useMemo57(() => {
33678
33676
  return {
33679
33677
  ...rateDiv,
33680
33678
  backgroundColor: hovered || isFocused ? "#eee" : "transparent"
@@ -33741,7 +33739,7 @@ var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
33741
33739
  setPlaybackRate(rate);
33742
33740
  setIsComponentVisible(false);
33743
33741
  }, [setIsComponentVisible, setPlaybackRate]);
33744
- const playbackPopup = useMemo56(() => {
33742
+ const playbackPopup = useMemo57(() => {
33745
33743
  return {
33746
33744
  position: "absolute",
33747
33745
  right: 0,
@@ -35239,7 +35237,6 @@ var PlayerFn = ({
35239
35237
  [PLAYER_COMP_ID]: initialFrame ?? 0
35240
35238
  }));
35241
35239
  const [playing, setPlaying] = useState132(false);
35242
- const [rootId] = useState132("player-comp");
35243
35240
  const rootRef = useRef122(null);
35244
35241
  const audioAndVideoTags = useRef122([]);
35245
35242
  const imperativePlaying = useRef122(false);
@@ -35316,11 +35313,10 @@ var PlayerFn = ({
35316
35313
  return {
35317
35314
  frame,
35318
35315
  playing,
35319
- rootId,
35320
35316
  imperativePlaying,
35321
35317
  audioAndVideoTags
35322
35318
  };
35323
- }, [frame, playing, rootId]);
35319
+ }, [frame, playing]);
35324
35320
  const playbackRateContextValue = useMemo142(() => {
35325
35321
  return {
35326
35322
  playbackRate: currentPlaybackRate,
@@ -35568,7 +35564,6 @@ var ThumbnailFn = ({
35568
35564
  window.remotion_isPlayer = true;
35569
35565
  }, []);
35570
35566
  }
35571
- const [thumbnailId] = useState142(() => String(random(null)));
35572
35567
  const rootRef = useRef142(null);
35573
35568
  const timelineState = useMemo172(() => {
35574
35569
  const value = {
@@ -35576,14 +35571,13 @@ var ThumbnailFn = ({
35576
35571
  frame: {
35577
35572
  [PLAYER_COMP_ID]: frameToDisplay
35578
35573
  },
35579
- rootId: thumbnailId,
35580
35574
  imperativePlaying: {
35581
35575
  current: false
35582
35576
  },
35583
35577
  audioAndVideoTags: { current: [] }
35584
35578
  };
35585
35579
  return value;
35586
- }, [frameToDisplay, thumbnailId]);
35580
+ }, [frameToDisplay]);
35587
35581
  const playbackRateContext = useMemo172(() => {
35588
35582
  return {
35589
35583
  playbackRate: 1,
@@ -35642,7 +35636,7 @@ var Thumbnail = forward2(ThumbnailFn);
35642
35636
  import {
35643
35637
  useCallback as useCallback55,
35644
35638
  useEffect as useEffect57,
35645
- useMemo as useMemo69,
35639
+ useMemo as useMemo70,
35646
35640
  useRef as useRef59,
35647
35641
  useState as useState56
35648
35642
  } from "react";
@@ -36393,18 +36387,18 @@ var UNDERLAY_RED = curriedTransparentize$1(0.9, RED);
36393
36387
  var BLUE_TEXT = curriedDarken$1(0.3, "#42e9f5");
36394
36388
 
36395
36389
  // src/components/homepage/layout/use-color-mode.tsx
36396
- import React58, { useContext as useContext48, useMemo as useMemo57 } from "react";
36397
- import { jsx as jsx60 } from "react/jsx-runtime";
36390
+ import React58, { useContext as useContext48, useMemo as useMemo58 } from "react";
36391
+ import { jsx as jsx59 } from "react/jsx-runtime";
36398
36392
  var Context = React58.createContext(undefined);
36399
36393
  var ColorModeProvider = ({
36400
36394
  children,
36401
36395
  colorMode,
36402
36396
  setColorMode
36403
36397
  }) => {
36404
- const value = useMemo57(() => {
36398
+ const value = useMemo58(() => {
36405
36399
  return { colorMode, setColorMode };
36406
36400
  }, [colorMode, setColorMode]);
36407
- return /* @__PURE__ */ jsx60(Context.Provider, {
36401
+ return /* @__PURE__ */ jsx59(Context.Provider, {
36408
36402
  value,
36409
36403
  children
36410
36404
  });
@@ -36419,7 +36413,7 @@ function useColorMode() {
36419
36413
 
36420
36414
  // ../media/dist/esm/index.mjs
36421
36415
  import { useMemo as useMemo312, useState as useState312 } from "react";
36422
- import { useContext as useContext212, useEffect as useEffect43, useMemo as useMemo59, useRef as useRef50, useState as useState41 } from "react";
36416
+ import { useContext as useContext212, useEffect as useEffect43, useMemo as useMemo60, useRef as useRef50, useState as useState41 } from "react";
36423
36417
  import {
36424
36418
  AudioBufferSink,
36425
36419
  InputDisposedError
@@ -36427,7 +36421,7 @@ import {
36427
36421
  import { ALL_FORMATS, Input as Input2, UrlSource } from "mediabunny";
36428
36422
  import { CanvasSink } from "mediabunny";
36429
36423
  import { useContext as useContext49, useLayoutEffect as useLayoutEffect19 } from "react";
36430
- import { jsx as jsx61 } from "react/jsx-runtime";
36424
+ import { jsx as jsx60 } from "react/jsx-runtime";
36431
36425
  import { useContext as useContext312, useLayoutEffect as useLayoutEffect24, useMemo as useMemo213, useState as useState210 } from "react";
36432
36426
  import React211 from "react";
36433
36427
  import {
@@ -36456,7 +36450,7 @@ import { jsx as jsx412 } from "react/jsx-runtime";
36456
36450
  import {
36457
36451
  useContext as useContext53,
36458
36452
  useLayoutEffect as useLayoutEffect43,
36459
- useMemo as useMemo58,
36453
+ useMemo as useMemo59,
36460
36454
  useRef as useRef312,
36461
36455
  useState as useState53
36462
36456
  } from "react";
@@ -39049,7 +39043,7 @@ var AudioForPreviewAssertedShowing = ({
39049
39043
  setMediaDurationInSeconds
39050
39044
  ]);
39051
39045
  if (shouldFallbackToNativeAudio && !disallowFallbackToHtml5Audio) {
39052
- return /* @__PURE__ */ jsx61(Audio, {
39046
+ return /* @__PURE__ */ jsx60(Audio, {
39053
39047
  src,
39054
39048
  muted,
39055
39049
  volume,
@@ -39099,7 +39093,7 @@ var AudioForPreview2 = ({
39099
39093
  const frame = useCurrentFrame();
39100
39094
  const videoConfig = useVideoConfig();
39101
39095
  const currentTime = frame / videoConfig.fps;
39102
- const showShow = useMemo59(() => {
39096
+ const showShow = useMemo60(() => {
39103
39097
  return getTimeInSeconds({
39104
39098
  unloopedTimeInSeconds: currentTime,
39105
39099
  playbackRate,
@@ -39126,7 +39120,7 @@ var AudioForPreview2 = ({
39126
39120
  if (!setMediaDurationInSeconds) {
39127
39121
  throw new Error("setMediaDurationInSeconds is required");
39128
39122
  }
39129
- return /* @__PURE__ */ jsx61(AudioForPreviewAssertedShowing, {
39123
+ return /* @__PURE__ */ jsx60(AudioForPreviewAssertedShowing, {
39130
39124
  audioStreamIndex,
39131
39125
  src: preloadedSrc,
39132
39126
  playbackRate,
@@ -41879,7 +41873,7 @@ var VideoForRendering2 = ({
41879
41873
  const { registerRenderAsset, unregisterRenderAsset } = useContext53(Internals.RenderAssetManager);
41880
41874
  const startsAt = Internals.useMediaStartsAt();
41881
41875
  const sequenceContext = useContext53(Internals.SequenceContext);
41882
- const id = useMemo58(() => `media-video-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
41876
+ const id = useMemo59(() => `media-video-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
41883
41877
  src,
41884
41878
  sequenceContext?.cumulatedFrom,
41885
41879
  sequenceContext?.relativeFrom,
@@ -42098,10 +42092,10 @@ var VideoForRendering2 = ({
42098
42092
  initialRequestInit
42099
42093
  ]);
42100
42094
  warnAboutObjectFitInStyleOrClassName({ style: style2, className: className2, logLevel });
42101
- const classNameValue = useMemo58(() => {
42095
+ const classNameValue = useMemo59(() => {
42102
42096
  return [Internals.OBJECTFIT_CONTAIN_CLASS_NAME, className2].filter(Internals.truthy).join(" ");
42103
42097
  }, [className2]);
42104
- const styleWithObjectFit = useMemo58(() => {
42098
+ const styleWithObjectFit = useMemo59(() => {
42105
42099
  return {
42106
42100
  ...style2,
42107
42101
  objectFit: objectFitProp
@@ -42171,7 +42165,12 @@ var VideoForRendering2 = ({
42171
42165
  className: classNameValue
42172
42166
  });
42173
42167
  };
42174
- var { validateMediaTrimProps: validateMediaTrimProps2, resolveTrimProps: resolveTrimProps2, validateMediaProps: validateMediaProps22 } = Internals;
42168
+ var {
42169
+ validateMediaTrimProps: validateMediaTrimProps2,
42170
+ resolveTrimProps: resolveTrimProps2,
42171
+ validateMediaProps: validateMediaProps22,
42172
+ useCropStyle: useCropStyle2
42173
+ } = Internals;
42175
42174
  var videoSchema = {
42176
42175
  src: {
42177
42176
  type: "asset",
@@ -42203,7 +42202,8 @@ var videoSchema = {
42203
42202
  loop: { type: "boolean", default: false, description: "Loop" },
42204
42203
  ...Internals.transformSchema,
42205
42204
  ...Interactive.backgroundSchema,
42206
- ...Interactive.borderSchema
42205
+ ...Interactive.borderSchema,
42206
+ ...Interactive.cropSchema
42207
42207
  };
42208
42208
  var InnerVideo = ({
42209
42209
  src,
@@ -42357,6 +42357,10 @@ var VideoInner = ({
42357
42357
  postmountFor,
42358
42358
  styleWhilePremounted,
42359
42359
  styleWhilePostmounted,
42360
+ cropLeft,
42361
+ cropRight,
42362
+ cropTop,
42363
+ cropBottom,
42360
42364
  ...props
42361
42365
  }) => {
42362
42366
  const fallbackLogLevel = Internals.useLogLevel();
@@ -42430,6 +42434,14 @@ var VideoInner = ({
42430
42434
  styleWhilePostmounted: styleWhilePostmounted ?? null,
42431
42435
  hideWhilePremounted: "display-none"
42432
42436
  });
42437
+ const croppedStyle = useCropStyle2({
42438
+ cropLeft,
42439
+ cropRight,
42440
+ cropTop,
42441
+ cropBottom,
42442
+ style: premountingStyle,
42443
+ componentName: "<Video />"
42444
+ });
42433
42445
  if (sequenceDurationInFrames === 0) {
42434
42446
  return null;
42435
42447
  }
@@ -42471,7 +42483,7 @@ var VideoInner = ({
42471
42483
  playbackRate: playbackRate ?? 1,
42472
42484
  showInTimeline: showInTimeline ?? true,
42473
42485
  src,
42474
- style: premountingStyle ?? {},
42486
+ style: croppedStyle ?? {},
42475
42487
  trimAfter,
42476
42488
  trimBefore,
42477
42489
  volume: volume ?? 1,
@@ -42501,7 +42513,7 @@ var Video = Interactive.withSchema({
42501
42513
  });
42502
42514
 
42503
42515
  // src/components/homepage/Demo/Comp.tsx
42504
- import { useCallback as useCallback47, useEffect as useEffect49, useMemo as useMemo64, useState as useState48 } from "react";
42516
+ import { useCallback as useCallback47, useEffect as useEffect49, useMemo as useMemo66, useState as useState48 } from "react";
42505
42517
 
42506
42518
  // src/components/homepage/Demo/Cards.tsx
42507
42519
  import {
@@ -42548,14 +42560,14 @@ var getIndexFromPosition = (clientX, clientY) => {
42548
42560
 
42549
42561
  // src/components/homepage/Demo/Switcher.tsx
42550
42562
  import { useCallback as useCallback41 } from "react";
42551
- import { jsx as jsx66, jsxs as jsxs17 } from "react/jsx-runtime";
42563
+ import { jsx as jsx61, jsxs as jsxs16 } from "react/jsx-runtime";
42552
42564
  var Switcher = ({ type, theme, onTap }) => {
42553
42565
  const onPointerDown = useCallback41((e) => {
42554
42566
  e.stopPropagation();
42555
42567
  onTap();
42556
42568
  }, [onTap]);
42557
42569
  const switcherSize = 40;
42558
- return /* @__PURE__ */ jsx66("div", {
42570
+ return /* @__PURE__ */ jsx61("div", {
42559
42571
  onPointerDown,
42560
42572
  style: {
42561
42573
  height: switcherSize,
@@ -42573,15 +42585,15 @@ var Switcher = ({ type, theme, onTap }) => {
42573
42585
  alignItems: "center",
42574
42586
  display: "flex"
42575
42587
  },
42576
- children: /* @__PURE__ */ jsxs17("svg", {
42588
+ children: /* @__PURE__ */ jsxs16("svg", {
42577
42589
  style: { height: switcherSize / 2 },
42578
42590
  viewBox: "0 0 320 512",
42579
42591
  children: [
42580
- type === "left" ? /* @__PURE__ */ jsx66("path", {
42592
+ type === "left" ? /* @__PURE__ */ jsx61("path", {
42581
42593
  fill: "currentcolor",
42582
42594
  d: "M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z"
42583
42595
  }) : null,
42584
- type === "right" ? /* @__PURE__ */ jsx66("path", {
42596
+ type === "right" ? /* @__PURE__ */ jsx61("path", {
42585
42597
  fill: "currentcolor",
42586
42598
  d: "M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"
42587
42599
  }) : null
@@ -42591,7 +42603,7 @@ var Switcher = ({ type, theme, onTap }) => {
42591
42603
  };
42592
42604
 
42593
42605
  // src/components/homepage/Demo/Card.tsx
42594
- import { jsx as jsx68, jsxs as jsxs18, Fragment as Fragment14 } from "react/jsx-runtime";
42606
+ import { jsx as jsx66, jsxs as jsxs17, Fragment as Fragment13 } from "react/jsx-runtime";
42595
42607
  var arePositionsEqual = (a2, b2) => {
42596
42608
  return a2.every((pos, i) => {
42597
42609
  return pos.x === b2[i].x && pos.y === b2[i].y;
@@ -42752,7 +42764,7 @@ var Card2 = ({
42752
42764
  }, []);
42753
42765
  const { x, y } = getPositionForIndex(index2);
42754
42766
  const color = theme === "light" ? " #EAEAEA" : "#333";
42755
- return /* @__PURE__ */ jsx68("div", {
42767
+ return /* @__PURE__ */ jsx66("div", {
42756
42768
  ref: refToUse,
42757
42769
  className: "transition-opacity duration-200",
42758
42770
  onPointerDown,
@@ -42768,7 +42780,7 @@ var Card2 = ({
42768
42780
  borderRadius: 13,
42769
42781
  cursor: "grab"
42770
42782
  },
42771
- children: /* @__PURE__ */ jsxs18(AbsoluteFill, {
42783
+ children: /* @__PURE__ */ jsxs17(AbsoluteFill, {
42772
42784
  style: {
42773
42785
  backgroundColor: color,
42774
42786
  borderRadius: 12
@@ -42776,14 +42788,14 @@ var Card2 = ({
42776
42788
  className: "transition-opacity duration-200",
42777
42789
  children: [
42778
42790
  content,
42779
- withSwitcher ? /* @__PURE__ */ jsxs18(Fragment14, {
42791
+ withSwitcher ? /* @__PURE__ */ jsxs17(Fragment13, {
42780
42792
  children: [
42781
- /* @__PURE__ */ jsx68(Switcher, {
42793
+ /* @__PURE__ */ jsx66(Switcher, {
42782
42794
  onTap: onClickLeft,
42783
42795
  type: "left",
42784
42796
  theme
42785
42797
  }),
42786
- /* @__PURE__ */ jsx68(Switcher, {
42798
+ /* @__PURE__ */ jsx66(Switcher, {
42787
42799
  onTap: onClickRight,
42788
42800
  type: "right",
42789
42801
  theme
@@ -42796,7 +42808,7 @@ var Card2 = ({
42796
42808
  };
42797
42809
 
42798
42810
  // src/components/homepage/Demo/CurrentCountry.tsx
42799
- import { jsx as jsx69, jsxs as jsxs19 } from "react/jsx-runtime";
42811
+ import { jsx as jsx68, jsxs as jsxs18 } from "react/jsx-runtime";
42800
42812
  var CurrentCountry = ({ theme, countryPaths, countryLabel }) => {
42801
42813
  const { fps } = useVideoConfig();
42802
42814
  const frame = useCurrentFrame();
@@ -42811,31 +42823,31 @@ var CurrentCountry = ({ theme, countryPaths, countryLabel }) => {
42811
42823
  frame,
42812
42824
  delay: 10
42813
42825
  });
42814
- return /* @__PURE__ */ jsxs19(AbsoluteFill, {
42826
+ return /* @__PURE__ */ jsxs18(AbsoluteFill, {
42815
42827
  style: { overflow: "hidden" },
42816
42828
  children: [
42817
- /* @__PURE__ */ jsx69(AbsoluteFill, {
42829
+ /* @__PURE__ */ jsx68(AbsoluteFill, {
42818
42830
  style: {
42819
42831
  transform: `scale(${progress})`
42820
42832
  },
42821
- children: /* @__PURE__ */ jsx69("svg", {
42833
+ children: /* @__PURE__ */ jsx68("svg", {
42822
42834
  viewBox: boundingBox.viewBox,
42823
42835
  style: {
42824
42836
  scale: "0.8"
42825
42837
  },
42826
- children: /* @__PURE__ */ jsx69("path", {
42838
+ children: /* @__PURE__ */ jsx68("path", {
42827
42839
  fill: theme === "light" ? "#bbb" : "#222",
42828
42840
  d: reset
42829
42841
  })
42830
42842
  })
42831
42843
  }),
42832
- /* @__PURE__ */ jsxs19(AbsoluteFill, {
42844
+ /* @__PURE__ */ jsxs18(AbsoluteFill, {
42833
42845
  style: {
42834
42846
  alignItems: "center",
42835
42847
  justifyContent: "center"
42836
42848
  },
42837
42849
  children: [
42838
- /* @__PURE__ */ jsx69("div", {
42850
+ /* @__PURE__ */ jsx68("div", {
42839
42851
  style: {
42840
42852
  color: "#0b84f3",
42841
42853
  fontFamily: "GTPlanar",
@@ -42850,7 +42862,7 @@ var CurrentCountry = ({ theme, countryPaths, countryLabel }) => {
42850
42862
  },
42851
42863
  children: "Your country"
42852
42864
  }),
42853
- /* @__PURE__ */ jsx69("div", {
42865
+ /* @__PURE__ */ jsx68("div", {
42854
42866
  style: {
42855
42867
  lineHeight: 1.1,
42856
42868
  fontFamily: "GTPlanar",
@@ -42883,7 +42895,7 @@ import {
42883
42895
  // ../lottie/dist/esm/index.mjs
42884
42896
  import lottie from "lottie-web";
42885
42897
  import { useEffect as useEffect45, useRef as useRef53, useState as useState44 } from "react";
42886
- import { jsx as jsx70 } from "react/jsx-runtime";
42898
+ import { jsx as jsx69 } from "react/jsx-runtime";
42887
42899
  var getLottieMetadata = (animationData) => {
42888
42900
  const width2 = animationData.w;
42889
42901
  const height2 = animationData.h;
@@ -43045,7 +43057,7 @@ var Lottie = ({
43045
43057
  img.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", img.href.baseVal);
43046
43058
  });
43047
43059
  }, [direction, frame, loop, playbackRate, delayRender, continueRender]);
43048
- return /* @__PURE__ */ jsx70("div", {
43060
+ return /* @__PURE__ */ jsx69("div", {
43049
43061
  ref: containerRef,
43050
43062
  className: className2,
43051
43063
  style: style2
@@ -43053,15 +43065,15 @@ var Lottie = ({
43053
43065
  };
43054
43066
 
43055
43067
  // src/components/homepage/Demo/DisplayedEmoji.tsx
43056
- import { useEffect as useEffect46, useMemo as useMemo60, useState as useState46 } from "react";
43057
- import { jsx as jsx71 } from "react/jsx-runtime";
43068
+ import { useEffect as useEffect46, useMemo as useMemo61, useState as useState46 } from "react";
43069
+ import { jsx as jsx70 } from "react/jsx-runtime";
43058
43070
  var DisplayedEmoji = ({ emoji }) => {
43059
43071
  const [data, setData] = useState46(null);
43060
43072
  const { durationInFrames, fps } = useVideoConfig();
43061
43073
  const [browser, setBrowser] = useState46(typeof document !== "undefined");
43062
43074
  const { delayRender, continueRender, cancelRender: cancelRender2 } = useDelayRender();
43063
43075
  const { isRendering } = useRemotionEnvironment();
43064
- const src = useMemo60(() => {
43076
+ const src = useMemo61(() => {
43065
43077
  if (emoji === "melting") {
43066
43078
  return "https://fonts.gstatic.com/s/e/notoemoji/latest/1fae0/lottie.json";
43067
43079
  }
@@ -43104,7 +43116,7 @@ var DisplayedEmoji = ({ emoji }) => {
43104
43116
  const ratio = durationInFrames / fps / animDurtion;
43105
43117
  const closestInteger = ratio;
43106
43118
  const closestRatio = closestInteger / ratio;
43107
- return /* @__PURE__ */ jsx71(Lottie, {
43119
+ return /* @__PURE__ */ jsx70(Lottie, {
43108
43120
  style: {
43109
43121
  height: 100,
43110
43122
  width: "100%",
@@ -43118,7 +43130,7 @@ var DisplayedEmoji = ({ emoji }) => {
43118
43130
  };
43119
43131
 
43120
43132
  // src/components/homepage/Demo/EmojiCard.tsx
43121
- import { jsx as jsx75, jsxs as jsxs20, Fragment as Fragment15 } from "react/jsx-runtime";
43133
+ import { jsx as jsx71, jsxs as jsxs19, Fragment as Fragment14 } from "react/jsx-runtime";
43122
43134
  var applyTransforms = ({ ref1, ref2, ref3, transforms }) => {
43123
43135
  ref1.style.transform = `translateX(${transforms[0]}%)`;
43124
43136
  ref2.style.transform = `translateX(${transforms[1]}%)`;
@@ -43214,14 +43226,14 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
43214
43226
  });
43215
43227
  }, []);
43216
43228
  const env = useRemotionEnvironment();
43217
- return /* @__PURE__ */ jsxs20(AbsoluteFill, {
43229
+ return /* @__PURE__ */ jsxs19(AbsoluteFill, {
43218
43230
  style: {
43219
43231
  justifyContent: "center",
43220
43232
  alignItems: "center",
43221
43233
  overflow: "hidden"
43222
43234
  },
43223
43235
  children: [
43224
- /* @__PURE__ */ jsx75("div", {
43236
+ /* @__PURE__ */ jsx71("div", {
43225
43237
  style: {
43226
43238
  color: "#0b84f3",
43227
43239
  fontFamily: "GTPlanar",
@@ -43233,7 +43245,7 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
43233
43245
  },
43234
43246
  children: "Choose an emoji"
43235
43247
  }),
43236
- /* @__PURE__ */ jsx75("div", {
43248
+ /* @__PURE__ */ jsx71("div", {
43237
43249
  style: {
43238
43250
  position: "absolute",
43239
43251
  width: "100%",
@@ -43241,31 +43253,31 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
43241
43253
  whiteSpace: "nowrap",
43242
43254
  height: "100%"
43243
43255
  },
43244
- children: env.isRendering ? /* @__PURE__ */ jsx75("div", {
43256
+ children: env.isRendering ? /* @__PURE__ */ jsx71("div", {
43245
43257
  style: emojiStyle,
43246
- children: /* @__PURE__ */ jsx75(DisplayedEmoji, {
43258
+ children: /* @__PURE__ */ jsx71(DisplayedEmoji, {
43247
43259
  emoji: emojiIndex
43248
43260
  })
43249
- }) : /* @__PURE__ */ jsxs20(Fragment15, {
43261
+ }) : /* @__PURE__ */ jsxs19(Fragment14, {
43250
43262
  children: [
43251
- /* @__PURE__ */ jsx75("div", {
43263
+ /* @__PURE__ */ jsx71("div", {
43252
43264
  ref: ref1,
43253
43265
  style: emojiStyle,
43254
- children: /* @__PURE__ */ jsx75(DisplayedEmoji, {
43266
+ children: /* @__PURE__ */ jsx71(DisplayedEmoji, {
43255
43267
  emoji: "melting"
43256
43268
  })
43257
43269
  }),
43258
- /* @__PURE__ */ jsx75("div", {
43270
+ /* @__PURE__ */ jsx71("div", {
43259
43271
  ref: ref2,
43260
43272
  style: emojiStyle,
43261
- children: /* @__PURE__ */ jsx75(DisplayedEmoji, {
43273
+ children: /* @__PURE__ */ jsx71(DisplayedEmoji, {
43262
43274
  emoji: "partying-face"
43263
43275
  })
43264
43276
  }),
43265
- /* @__PURE__ */ jsx75("div", {
43277
+ /* @__PURE__ */ jsx71("div", {
43266
43278
  ref: ref3,
43267
43279
  style: emojiStyle,
43268
- children: /* @__PURE__ */ jsx75(DisplayedEmoji, {
43280
+ children: /* @__PURE__ */ jsx71(DisplayedEmoji, {
43269
43281
  emoji: "fire"
43270
43282
  })
43271
43283
  })
@@ -43278,9 +43290,9 @@ var EmojiCardRefFn = ({ emojiIndex }, ref) => {
43278
43290
  var EmojiCard = forwardRef38(EmojiCardRefFn);
43279
43291
 
43280
43292
  // src/components/homepage/Demo/Minus.tsx
43281
- import { jsx as jsx77 } from "react/jsx-runtime";
43293
+ import { jsx as jsx75 } from "react/jsx-runtime";
43282
43294
  var Minus = ({ leftOffset, minusSignOpacity }) => {
43283
- return /* @__PURE__ */ jsx77("div", {
43295
+ return /* @__PURE__ */ jsx75("div", {
43284
43296
  style: {
43285
43297
  position: "relative",
43286
43298
  marginLeft: -40 - leftOffset,
@@ -43294,7 +43306,7 @@ var Minus = ({ leftOffset, minusSignOpacity }) => {
43294
43306
  };
43295
43307
 
43296
43308
  // src/components/homepage/Demo/DigitWheel.tsx
43297
- import { jsx as jsx78, jsxs as jsxs21 } from "react/jsx-runtime";
43309
+ import { jsx as jsx77, jsxs as jsxs20 } from "react/jsx-runtime";
43298
43310
  var DURATION = 25;
43299
43311
  var items = 10;
43300
43312
  var NUM_WIDTH = 36;
@@ -43338,7 +43350,7 @@ var Wheel = ({ delay: delay2, digits, renderDigit, isLeadingDigit, isNegative })
43338
43350
  const rotation = progresses.map((p, i) => {
43339
43351
  return p * offsets[i];
43340
43352
  }).reduce((a2, b2) => a2 + b2, 0) + rotations[0];
43341
- return /* @__PURE__ */ jsxs21("div", {
43353
+ return /* @__PURE__ */ jsxs20("div", {
43342
43354
  style: {
43343
43355
  position: "relative",
43344
43356
  width: NUM_WIDTH,
@@ -43347,11 +43359,11 @@ var Wheel = ({ delay: delay2, digits, renderDigit, isLeadingDigit, isNegative })
43347
43359
  marginLeft: shiftLeft
43348
43360
  },
43349
43361
  children: [
43350
- isLeadingDigit ? /* @__PURE__ */ jsx78(Minus, {
43362
+ isLeadingDigit ? /* @__PURE__ */ jsx77(Minus, {
43351
43363
  minusSignOpacity,
43352
43364
  leftOffset: shiftLeft + minusSignMarginLeft
43353
43365
  }) : null,
43354
- /* @__PURE__ */ jsx78(AbsoluteFill, {
43366
+ /* @__PURE__ */ jsx77(AbsoluteFill, {
43355
43367
  style: {
43356
43368
  perspective: 5000,
43357
43369
  maskImage: `linear-gradient(to bottom, transparent 0%, #000 28%, #000 80%, transparent 100%)`,
@@ -43362,7 +43374,7 @@ var Wheel = ({ delay: delay2, digits, renderDigit, isLeadingDigit, isNegative })
43362
43374
  const z = Math.cos(index2 * -Math.PI * 2) * 120;
43363
43375
  const y = Math.sin(index2 * Math.PI * 2) * -120;
43364
43376
  const r2 = interpolate(index2, [0, 1], [0, Math.PI * 2]);
43365
- return /* @__PURE__ */ jsx78(AbsoluteFill, {
43377
+ return /* @__PURE__ */ jsx77(AbsoluteFill, {
43366
43378
  style: {
43367
43379
  justifyContent: "center",
43368
43380
  alignItems: "center",
@@ -43372,7 +43384,7 @@ var Wheel = ({ delay: delay2, digits, renderDigit, isLeadingDigit, isNegative })
43372
43384
  backfaceVisibility: "hidden",
43373
43385
  perspective: 1000
43374
43386
  },
43375
- children: /* @__PURE__ */ jsx78("div", {
43387
+ children: /* @__PURE__ */ jsx77("div", {
43376
43388
  style: {
43377
43389
  transform: `rotateX(-${r2}rad)`,
43378
43390
  backfaceVisibility: "hidden",
@@ -43382,7 +43394,7 @@ var Wheel = ({ delay: delay2, digits, renderDigit, isLeadingDigit, isNegative })
43382
43394
  justifyContent: "center",
43383
43395
  opacity: opacity2
43384
43396
  },
43385
- children: /* @__PURE__ */ jsx78("div", {
43397
+ children: /* @__PURE__ */ jsx77("div", {
43386
43398
  style: {
43387
43399
  lineHeight: 1,
43388
43400
  display: "inline",
@@ -43399,14 +43411,14 @@ var Wheel = ({ delay: delay2, digits, renderDigit, isLeadingDigit, isNegative })
43399
43411
  };
43400
43412
 
43401
43413
  // src/components/homepage/Demo/TemperatureNumber.tsx
43402
- import { jsx as jsx79, jsxs as jsxs25 } from "react/jsx-runtime";
43414
+ import { jsx as jsx78, jsxs as jsxs21 } from "react/jsx-runtime";
43403
43415
  var TemperatureNumber = ({ theme, temperatureInCelsius }) => {
43404
43416
  const temperatureInFahrenheit = temperatureInCelsius * 9 / 5 + 32;
43405
43417
  const celsiusDegree = Math.abs(temperatureInCelsius);
43406
43418
  const fahrenheitDegree = Math.abs(temperatureInFahrenheit);
43407
43419
  const paddedCelsiusDegree = String(celsiusDegree).padStart(fahrenheitDegree.toFixed(0).length, "0").split("");
43408
43420
  const paddedFahrenheitDegree = fahrenheitDegree.toFixed(0).padStart(paddedCelsiusDegree.length, "0").split("");
43409
- return /* @__PURE__ */ jsxs25("div", {
43421
+ return /* @__PURE__ */ jsxs21("div", {
43410
43422
  style: {
43411
43423
  lineHeight: 1.1,
43412
43424
  fontFamily: "GTPlanar",
@@ -43420,7 +43432,7 @@ var TemperatureNumber = ({ theme, temperatureInCelsius }) => {
43420
43432
  alignItems: "center"
43421
43433
  },
43422
43434
  children: [
43423
- paddedCelsiusDegree.map((digit, i) => /* @__PURE__ */ jsx79(Wheel, {
43435
+ paddedCelsiusDegree.map((digit, i) => /* @__PURE__ */ jsx78(Wheel, {
43424
43436
  delay: i * 4,
43425
43437
  renderDigit: (_i) => 9 - _i,
43426
43438
  digits: [
@@ -43435,14 +43447,14 @@ var TemperatureNumber = ({ theme, temperatureInCelsius }) => {
43435
43447
  ],
43436
43448
  isLeadingDigit: i === 0
43437
43449
  }, i)),
43438
- /* @__PURE__ */ jsx79("div", {
43450
+ /* @__PURE__ */ jsx78("div", {
43439
43451
  style: { width: 8 }
43440
43452
  }),
43441
43453
  "°",
43442
- /* @__PURE__ */ jsx79(Wheel, {
43454
+ /* @__PURE__ */ jsx78(Wheel, {
43443
43455
  delay: paddedCelsiusDegree.length * 4 - 2,
43444
43456
  digits: [0, 1, 0],
43445
- renderDigit: (_i) => _i % 2 === 0 ? "C" : /* @__PURE__ */ jsx79("span", {
43457
+ renderDigit: (_i) => _i % 2 === 0 ? "C" : /* @__PURE__ */ jsx78("span", {
43446
43458
  style: { marginLeft: -5 },
43447
43459
  children: "F"
43448
43460
  }),
@@ -43454,13 +43466,13 @@ var TemperatureNumber = ({ theme, temperatureInCelsius }) => {
43454
43466
  };
43455
43467
 
43456
43468
  // src/components/homepage/Demo/Temperature.tsx
43457
- import { jsx as jsx80, jsxs as jsxs27 } from "react/jsx-runtime";
43469
+ import { jsx as jsx79, jsxs as jsxs25 } from "react/jsx-runtime";
43458
43470
  var Temperature = ({ theme, city, temperatureInCelsius }) => {
43459
43471
  if (temperatureInCelsius === null) {
43460
43472
  return null;
43461
43473
  }
43462
- return /* @__PURE__ */ jsx80(AbsoluteFill, {
43463
- children: /* @__PURE__ */ jsxs27(AbsoluteFill, {
43474
+ return /* @__PURE__ */ jsx79(AbsoluteFill, {
43475
+ children: /* @__PURE__ */ jsxs25(AbsoluteFill, {
43464
43476
  style: {
43465
43477
  alignItems: "center",
43466
43478
  justifyContent: "center",
@@ -43468,7 +43480,7 @@ var Temperature = ({ theme, city, temperatureInCelsius }) => {
43468
43480
  paddingRight: 20
43469
43481
  },
43470
43482
  children: [
43471
- /* @__PURE__ */ jsxs27("div", {
43483
+ /* @__PURE__ */ jsxs25("div", {
43472
43484
  style: {
43473
43485
  color: "#0b84f3",
43474
43486
  fontFamily: "GTPlanar",
@@ -43482,7 +43494,7 @@ var Temperature = ({ theme, city, temperatureInCelsius }) => {
43482
43494
  city
43483
43495
  ]
43484
43496
  }),
43485
- /* @__PURE__ */ jsx80(TemperatureNumber, {
43497
+ /* @__PURE__ */ jsx79(TemperatureNumber, {
43486
43498
  theme,
43487
43499
  temperatureInCelsius
43488
43500
  })
@@ -43492,8 +43504,8 @@ var Temperature = ({ theme, city, temperatureInCelsius }) => {
43492
43504
  };
43493
43505
 
43494
43506
  // src/components/homepage/Demo/TrendingRepos.tsx
43495
- import { useMemo as useMemo61 } from "react";
43496
- import { jsx as jsx81, jsxs as jsxs28 } from "react/jsx-runtime";
43507
+ import { useMemo as useMemo64 } from "react";
43508
+ import { jsx as jsx80, jsxs as jsxs27 } from "react/jsx-runtime";
43497
43509
  var TrendingRepoItem = ({ repo, theme, number }) => {
43498
43510
  const frame = useCurrentFrame();
43499
43511
  const { fps } = useVideoConfig();
@@ -43505,7 +43517,7 @@ var TrendingRepoItem = ({ repo, theme, number }) => {
43505
43517
  },
43506
43518
  delay: number * 10 + 20
43507
43519
  });
43508
- const item = useMemo61(() => {
43520
+ const item = useMemo64(() => {
43509
43521
  return {
43510
43522
  lineHeight: 1.1,
43511
43523
  fontFamily: "GTPlanar",
@@ -43515,7 +43527,7 @@ var TrendingRepoItem = ({ repo, theme, number }) => {
43515
43527
  opacity: progress
43516
43528
  };
43517
43529
  }, [progress, theme]);
43518
- return /* @__PURE__ */ jsxs28("div", {
43530
+ return /* @__PURE__ */ jsxs27("div", {
43519
43531
  style: item,
43520
43532
  children: [
43521
43533
  number,
@@ -43539,16 +43551,16 @@ var TrendingRepos = ({ theme, trending }) => {
43539
43551
  if (trending === null) {
43540
43552
  return null;
43541
43553
  }
43542
- return /* @__PURE__ */ jsx81(AbsoluteFill, {
43543
- children: /* @__PURE__ */ jsx81(AbsoluteFill, {
43554
+ return /* @__PURE__ */ jsx80(AbsoluteFill, {
43555
+ children: /* @__PURE__ */ jsx80(AbsoluteFill, {
43544
43556
  style: {
43545
43557
  justifyContent: "center",
43546
43558
  paddingLeft: 20,
43547
43559
  paddingRight: 20
43548
43560
  },
43549
- children: /* @__PURE__ */ jsxs28("div", {
43561
+ children: /* @__PURE__ */ jsxs27("div", {
43550
43562
  children: [
43551
- /* @__PURE__ */ jsx81("div", {
43563
+ /* @__PURE__ */ jsx80("div", {
43552
43564
  style: {
43553
43565
  color: fill,
43554
43566
  fontFamily: "GTPlanar",
@@ -43562,7 +43574,7 @@ var TrendingRepos = ({ theme, trending }) => {
43562
43574
  day: "numeric"
43563
43575
  }).format(new Date(trending.date))
43564
43576
  }),
43565
- /* @__PURE__ */ jsx81("div", {
43577
+ /* @__PURE__ */ jsx80("div", {
43566
43578
  style: {
43567
43579
  color: "#0b84f3",
43568
43580
  fontFamily: "GTPlanar",
@@ -43574,17 +43586,17 @@ var TrendingRepos = ({ theme, trending }) => {
43574
43586
  },
43575
43587
  children: "Trending repositories"
43576
43588
  }),
43577
- /* @__PURE__ */ jsx81(TrendingRepoItem, {
43589
+ /* @__PURE__ */ jsx80(TrendingRepoItem, {
43578
43590
  number: 1,
43579
43591
  repo: trending.repos[0],
43580
43592
  theme
43581
43593
  }),
43582
- /* @__PURE__ */ jsx81(TrendingRepoItem, {
43594
+ /* @__PURE__ */ jsx80(TrendingRepoItem, {
43583
43595
  number: 2,
43584
43596
  repo: trending.repos[1],
43585
43597
  theme
43586
43598
  }),
43587
- /* @__PURE__ */ jsx81(TrendingRepoItem, {
43599
+ /* @__PURE__ */ jsx80(TrendingRepoItem, {
43588
43600
  number: 3,
43589
43601
  repo: trending.repos[2],
43590
43602
  theme
@@ -43596,7 +43608,7 @@ var TrendingRepos = ({ theme, trending }) => {
43596
43608
  };
43597
43609
 
43598
43610
  // src/components/homepage/Demo/Cards.tsx
43599
- import { jsx as jsx85 } from "react/jsx-runtime";
43611
+ import { jsx as jsx81 } from "react/jsx-runtime";
43600
43612
  var Cards = ({
43601
43613
  onUpdate,
43602
43614
  indices,
@@ -43642,26 +43654,26 @@ var Cards = ({
43642
43654
  ref.current?.onLeft();
43643
43655
  onLeftPress();
43644
43656
  }, [onLeftPress]);
43645
- return /* @__PURE__ */ jsx85(AbsoluteFill, {
43657
+ return /* @__PURE__ */ jsx81(AbsoluteFill, {
43646
43658
  ref: container4,
43647
43659
  children: new Array(4).fill(true).map((_, i) => {
43648
43660
  const index2 = indices[i];
43649
- const content = index2 === 0 ? /* @__PURE__ */ jsx85(TrendingRepos, {
43661
+ const content = index2 === 0 ? /* @__PURE__ */ jsx81(TrendingRepos, {
43650
43662
  trending,
43651
43663
  theme
43652
- }) : index2 === 1 ? /* @__PURE__ */ jsx85(Temperature, {
43664
+ }) : index2 === 1 ? /* @__PURE__ */ jsx81(Temperature, {
43653
43665
  city: location?.city ? decodeURIComponent(location?.city) : null,
43654
43666
  theme,
43655
43667
  temperatureInCelsius: trending?.temperatureInCelsius ?? null
43656
- }) : index2 === 2 ? /* @__PURE__ */ jsx85(CurrentCountry, {
43668
+ }) : index2 === 2 ? /* @__PURE__ */ jsx81(CurrentCountry, {
43657
43669
  countryPaths: trending?.countryPaths ?? null,
43658
43670
  countryLabel: trending?.countryLabel ?? null,
43659
43671
  theme
43660
- }) : /* @__PURE__ */ jsx85(EmojiCard, {
43672
+ }) : /* @__PURE__ */ jsx81(EmojiCard, {
43661
43673
  ref,
43662
43674
  emojiIndex: emojiName
43663
43675
  });
43664
- return /* @__PURE__ */ jsx85(Card2, {
43676
+ return /* @__PURE__ */ jsx81(Card2, {
43665
43677
  onUpdate,
43666
43678
  refsToUse: refs,
43667
43679
  index: i,
@@ -43679,7 +43691,7 @@ var Cards = ({
43679
43691
  };
43680
43692
 
43681
43693
  // src/components/homepage/Demo/Comp.tsx
43682
- import { jsx as jsx87, jsxs as jsxs29 } from "react/jsx-runtime";
43694
+ import { jsx as jsx85, jsxs as jsxs28 } from "react/jsx-runtime";
43683
43695
  var getDataAndProps = async () => {
43684
43696
  const location = await fetch("https://utils.remotion.dev/location").then((res) => res.json());
43685
43697
  const trending = await fetch(`https://bugs.remotion.dev/trending?lat=${location.latitude}&lng=${location.longitude}&country=${location.country}`).then((res) => res.json()).then((data) => {
@@ -43712,7 +43724,7 @@ var HomepageVideoComp = ({
43712
43724
  setRerenders(rerenders + 1);
43713
43725
  updateCardOrder(newIndices);
43714
43726
  }, [rerenders, updateCardOrder]);
43715
- const emoji = useMemo64(() => {
43727
+ const emoji = useMemo66(() => {
43716
43728
  if ((emojiIndex + 1e4 * 3) % 3 === 1) {
43717
43729
  return "melting";
43718
43730
  }
@@ -43721,7 +43733,7 @@ var HomepageVideoComp = ({
43721
43733
  }
43722
43734
  return "partying-face";
43723
43735
  }, [emojiIndex]);
43724
- const audioSrc = useMemo64(() => {
43736
+ const audioSrc = useMemo66(() => {
43725
43737
  if (emoji === "fire") {
43726
43738
  return fireAudio;
43727
43739
  }
@@ -43740,12 +43752,12 @@ var HomepageVideoComp = ({
43740
43752
  c2.free();
43741
43753
  };
43742
43754
  }, []);
43743
- return /* @__PURE__ */ jsxs29(AbsoluteFill, {
43755
+ return /* @__PURE__ */ jsxs28(AbsoluteFill, {
43744
43756
  style: {
43745
43757
  backgroundColor: theme === "dark" ? "#222" : "#fafafa"
43746
43758
  },
43747
43759
  children: [
43748
- /* @__PURE__ */ jsx87(Cards, {
43760
+ /* @__PURE__ */ jsx85(Cards, {
43749
43761
  onUpdate,
43750
43762
  indices: cardOrder,
43751
43763
  theme,
@@ -43756,7 +43768,7 @@ var HomepageVideoComp = ({
43756
43768
  onRight: onClickRight,
43757
43769
  emojiName: emoji
43758
43770
  }, rerenders),
43759
- audioSrc ? /* @__PURE__ */ jsx87(Audio2, {
43771
+ audioSrc ? /* @__PURE__ */ jsx85(Audio2, {
43760
43772
  src: audioSrc
43761
43773
  }) : null
43762
43774
  ]
@@ -43764,9 +43776,9 @@ var HomepageVideoComp = ({
43764
43776
  };
43765
43777
 
43766
43778
  // src/components/homepage/Demo/DemoError.tsx
43767
- import { jsx as jsx88 } from "react/jsx-runtime";
43779
+ import { jsx as jsx87 } from "react/jsx-runtime";
43768
43780
  var DemoError = () => {
43769
- return /* @__PURE__ */ jsx88("div", {
43781
+ return /* @__PURE__ */ jsx87("div", {
43770
43782
  style: {
43771
43783
  color: RED,
43772
43784
  fontFamily: FONTS.GTPLANAR,
@@ -43806,7 +43818,7 @@ import {
43806
43818
  import { BufferTarget, StreamTarget } from "mediabunny";
43807
43819
 
43808
43820
  // ../core/dist/esm/version.mjs
43809
- var VERSION2 = "4.0.498";
43821
+ var VERSION2 = "4.0.500";
43810
43822
 
43811
43823
  // ../web-renderer/dist/esm/index.mjs
43812
43824
  import { AudioSample, VideoSample } from "mediabunny";
@@ -43816,7 +43828,7 @@ import { flushSync as flushSync22 } from "react-dom";
43816
43828
  import ReactDOM6 from "react-dom/client";
43817
43829
  import { useImperativeHandle as useImperativeHandle14, useState as useState49 } from "react";
43818
43830
  import { flushSync as flushSync3 } from "react-dom";
43819
- import { jsx as jsx89 } from "react/jsx-runtime";
43831
+ import { jsx as jsx88 } from "react/jsx-runtime";
43820
43832
  import { jsx as jsx217 } from "react/jsx-runtime";
43821
43833
  import { Output, VideoSampleSource } from "mediabunny";
43822
43834
  var __dispose2 = Symbol.dispose || /* @__PURE__ */ Symbol.for("Symbol.dispose");
@@ -44592,7 +44604,7 @@ var UpdateTime = ({
44592
44604
  });
44593
44605
  }
44594
44606
  }));
44595
- return /* @__PURE__ */ jsx89(Internals.RemotionRootContexts, {
44607
+ return /* @__PURE__ */ jsx88(Internals.RemotionRootContexts, {
44596
44608
  audioEnabled,
44597
44609
  videoEnabled,
44598
44610
  logLevel,
@@ -46430,12 +46442,106 @@ function setClipPath({
46430
46442
  ctx.restore();
46431
46443
  };
46432
46444
  }
46445
+ var firstLayer = (value) => value.split(",")[0].trim();
46446
+ var parseLengthPercentage = (value) => {
46447
+ const match = value.match(/^(-?(?:\d+\.?\d*|\.\d+))(%|px)$/);
46448
+ if (match) {
46449
+ return {
46450
+ unit: match[2],
46451
+ value: Number(match[1])
46452
+ };
46453
+ }
46454
+ if (value === "0") {
46455
+ return { unit: "px", value: 0 };
46456
+ }
46457
+ return null;
46458
+ };
46459
+ var resolveSize = ({
46460
+ containerSize,
46461
+ value
46462
+ }) => {
46463
+ if (value === undefined || value === "auto") {
46464
+ return containerSize;
46465
+ }
46466
+ const parsed = parseLengthPercentage(value);
46467
+ if (!parsed) {
46468
+ return containerSize;
46469
+ }
46470
+ return parsed.unit === "%" ? containerSize * (parsed.value / 100) : parsed.value;
46471
+ };
46472
+ var positionKeywordToPercentage = (value) => {
46473
+ if (value === "left" || value === "top") {
46474
+ return 0;
46475
+ }
46476
+ if (value === "center") {
46477
+ return 50;
46478
+ }
46479
+ if (value === "right" || value === "bottom") {
46480
+ return 100;
46481
+ }
46482
+ return null;
46483
+ };
46484
+ var resolvePosition = ({
46485
+ containerSize,
46486
+ imageSize,
46487
+ value
46488
+ }) => {
46489
+ const keywordPercentage = positionKeywordToPercentage(value);
46490
+ if (keywordPercentage !== null) {
46491
+ return (containerSize - imageSize) * (keywordPercentage / 100);
46492
+ }
46493
+ const parsed = parseLengthPercentage(value);
46494
+ if (!parsed) {
46495
+ return 0;
46496
+ }
46497
+ return parsed.unit === "%" ? (containerSize - imageSize) * (parsed.value / 100) : parsed.value;
46498
+ };
46499
+ var parsePosition2 = (value) => {
46500
+ const parts = firstLayer(value).split(/\s+/);
46501
+ if (parts.length === 1) {
46502
+ if (parts[0] === "top" || parts[0] === "bottom") {
46503
+ return { x: "center", y: parts[0] };
46504
+ }
46505
+ return { x: parts[0], y: "center" };
46506
+ }
46507
+ if (parts[0] === "top" || parts[0] === "bottom") {
46508
+ return { x: parts[1], y: parts[0] };
46509
+ }
46510
+ return { x: parts[0], y: parts[1] };
46511
+ };
46512
+ var getBackgroundImageRect = ({
46513
+ backgroundPosition,
46514
+ backgroundSize,
46515
+ positioningArea
46516
+ }) => {
46517
+ const sizeParts = firstLayer(backgroundSize).split(/\s+/);
46518
+ const width2 = resolveSize({
46519
+ containerSize: positioningArea.width,
46520
+ value: sizeParts[0]
46521
+ });
46522
+ const height2 = resolveSize({
46523
+ containerSize: positioningArea.height,
46524
+ value: sizeParts[1]
46525
+ });
46526
+ const position = parsePosition2(backgroundPosition);
46527
+ return new DOMRect(positioningArea.left + resolvePosition({
46528
+ containerSize: positioningArea.width,
46529
+ imageSize: width2,
46530
+ value: position.x
46531
+ }), positioningArea.top + resolvePosition({
46532
+ containerSize: positioningArea.height,
46533
+ imageSize: height2,
46534
+ value: position.y
46535
+ }), width2, height2);
46536
+ };
46433
46537
  var isColorTransparent = (color) => {
46434
46538
  return color === "transparent" || color.startsWith("rgba") && (color.endsWith(", 0)") || color.endsWith(",0"));
46435
46539
  };
46436
46540
  var getBackgroundFill = ({
46437
46541
  backgroundColor,
46438
46542
  backgroundImage,
46543
+ backgroundPosition,
46544
+ backgroundSize,
46439
46545
  contextToDraw,
46440
46546
  boundingRect,
46441
46547
  offsetLeft,
@@ -46444,9 +46550,14 @@ var getBackgroundFill = ({
46444
46550
  if (backgroundImage && backgroundImage !== "none") {
46445
46551
  const gradientInfo = parseLinearGradient(backgroundImage);
46446
46552
  if (gradientInfo) {
46553
+ const backgroundImageRect = getBackgroundImageRect({
46554
+ backgroundPosition,
46555
+ backgroundSize,
46556
+ positioningArea: boundingRect
46557
+ });
46447
46558
  const gradient = createCanvasGradient({
46448
46559
  ctx: contextToDraw,
46449
- rect: boundingRect,
46560
+ rect: backgroundImageRect,
46450
46561
  gradientInfo,
46451
46562
  offsetLeft,
46452
46563
  offsetTop
@@ -46514,6 +46625,8 @@ var drawBackground = async ({
46514
46625
  }
46515
46626
  const backgroundFill = getBackgroundFill({
46516
46627
  backgroundImage,
46628
+ backgroundPosition: computedStyle.backgroundPosition,
46629
+ backgroundSize: computedStyle.backgroundSize,
46517
46630
  backgroundColor,
46518
46631
  contextToDraw,
46519
46632
  boundingRect,
@@ -47192,10 +47305,10 @@ var drawElement = async ({
47192
47305
  finishTransform();
47193
47306
  return {
47194
47307
  cleanupAfterChildren: () => {
47308
+ finishOverflowHidden();
47195
47309
  finishFilter();
47196
47310
  finishOpacity();
47197
47311
  finishClipPath();
47198
- finishOverflowHidden();
47199
47312
  }
47200
47313
  };
47201
47314
  };
@@ -49000,9 +49113,9 @@ import React70, { useCallback as useCallback48 } from "react";
49000
49113
  import { z } from "zod";
49001
49114
 
49002
49115
  // src/components/homepage/Demo/DemoErrorIcon.tsx
49003
- import { jsx as jsx90 } from "react/jsx-runtime";
49116
+ import { jsx as jsx89 } from "react/jsx-runtime";
49004
49117
  var DemoErrorIcon = () => {
49005
- return /* @__PURE__ */ jsx90("div", {
49118
+ return /* @__PURE__ */ jsx89("div", {
49006
49119
  style: {
49007
49120
  height: 26,
49008
49121
  width: 26,
@@ -49012,14 +49125,14 @@ var DemoErrorIcon = () => {
49012
49125
  justifyContent: "center",
49013
49126
  animation: "jump 0.2s ease-out"
49014
49127
  },
49015
- children: /* @__PURE__ */ jsx90("svg", {
49128
+ children: /* @__PURE__ */ jsx89("svg", {
49016
49129
  style: {
49017
49130
  flexShrink: 0,
49018
49131
  width: 26
49019
49132
  },
49020
49133
  xmlns: "http://www.w3.org/2000/svg",
49021
49134
  viewBox: "0 0 512 512",
49022
- children: /* @__PURE__ */ jsx90("path", {
49135
+ children: /* @__PURE__ */ jsx89("path", {
49023
49136
  fill: RED,
49024
49137
  d: "M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zM256 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"
49025
49138
  })
@@ -49028,9 +49141,9 @@ var DemoErrorIcon = () => {
49028
49141
  };
49029
49142
 
49030
49143
  // src/components/homepage/Demo/DoneCheckmark.tsx
49031
- import { jsx as jsx91, jsxs as jsxs30 } from "react/jsx-runtime";
49144
+ import { jsx as jsx90, jsxs as jsxs29 } from "react/jsx-runtime";
49032
49145
  var DoneCheckmark = () => {
49033
- return /* @__PURE__ */ jsx91("div", {
49146
+ return /* @__PURE__ */ jsx90("div", {
49034
49147
  style: {
49035
49148
  backgroundColor: PALETTE.BRAND,
49036
49149
  height: 26,
@@ -49041,7 +49154,7 @@ var DoneCheckmark = () => {
49041
49154
  justifyContent: "center",
49042
49155
  animation: "jump 0.2s ease-out"
49043
49156
  },
49044
- children: /* @__PURE__ */ jsxs30("svg", {
49157
+ children: /* @__PURE__ */ jsxs29("svg", {
49045
49158
  viewBox: "0 0 20 20",
49046
49159
  fill: "none",
49047
49160
  xmlns: "http://www.w3.org/2000/svg",
@@ -49050,13 +49163,13 @@ var DoneCheckmark = () => {
49050
49163
  width: 26
49051
49164
  },
49052
49165
  children: [
49053
- /* @__PURE__ */ jsx91("circle", {
49166
+ /* @__PURE__ */ jsx90("circle", {
49054
49167
  cx: "10",
49055
49168
  cy: "10",
49056
49169
  r: "10",
49057
49170
  fill: "#0B84F3"
49058
49171
  }),
49059
- /* @__PURE__ */ jsx91("path", {
49172
+ /* @__PURE__ */ jsx90("path", {
49060
49173
  d: "M14.7908 7.20505C15.0697 7.47844 15.0697 7.92243 14.7908 8.19583L9.07711 13.795C8.79813 14.0683 8.34505 14.0683 8.06606 13.795L5.20924 10.9954C4.93025 10.722 4.93025 10.278 5.20924 10.0046C5.48823 9.73121 5.9413 9.73121 6.22029 10.0046L8.5727 12.3077L13.7819 7.20505C14.0609 6.93165 14.514 6.93165 14.793 7.20505H14.7908Z",
49061
49174
  fill: "white",
49062
49175
  style: {
@@ -49070,7 +49183,7 @@ var DoneCheckmark = () => {
49070
49183
  };
49071
49184
 
49072
49185
  // src/components/homepage/Demo/Progress.tsx
49073
- import { jsx as jsx95, jsxs as jsxs31 } from "react/jsx-runtime";
49186
+ import { jsx as jsx91, jsxs as jsxs30 } from "react/jsx-runtime";
49074
49187
  var Progress = ({ progress }) => {
49075
49188
  const inner2 = makeCircle({
49076
49189
  radius: 10
@@ -49080,17 +49193,17 @@ var Progress = ({ progress }) => {
49080
49193
  closePath: false,
49081
49194
  radius: 10
49082
49195
  });
49083
- return /* @__PURE__ */ jsxs31("svg", {
49196
+ return /* @__PURE__ */ jsxs30("svg", {
49084
49197
  viewBox: `0 0 ${inner2.width} ${inner2.height}`,
49085
49198
  style: { overflow: "visible", height: 22 },
49086
49199
  children: [
49087
- /* @__PURE__ */ jsx95("path", {
49200
+ /* @__PURE__ */ jsx91("path", {
49088
49201
  d: inner2.path,
49089
49202
  stroke: PALETTE.BORDER_COLOR,
49090
49203
  strokeWidth: 4,
49091
49204
  fill: "transparent"
49092
49205
  }),
49093
- /* @__PURE__ */ jsx95("path", {
49206
+ /* @__PURE__ */ jsx91("path", {
49094
49207
  d: outer.path,
49095
49208
  stroke: PALETTE.BRAND,
49096
49209
  strokeWidth: 4,
@@ -49102,23 +49215,23 @@ var Progress = ({ progress }) => {
49102
49215
  };
49103
49216
 
49104
49217
  // src/components/homepage/Demo/Spinner.tsx
49105
- import { useMemo as useMemo66 } from "react";
49106
- import { jsx as jsx97, jsxs as jsxs34, Fragment as Fragment16 } from "react/jsx-runtime";
49218
+ import { useMemo as useMemo67 } from "react";
49219
+ import { jsx as jsx95, jsxs as jsxs31, Fragment as Fragment15 } from "react/jsx-runtime";
49107
49220
  var viewBox2 = 100;
49108
49221
  var lines2 = 8;
49109
49222
  var className2 = "__remotion_spinner_line";
49110
49223
  var remotionSpinnerAnimation = "__remotion_spinner_animation";
49111
49224
  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";
49112
49225
  var Spinner2 = ({ size: size4, duration }) => {
49113
- const style2 = useMemo66(() => {
49226
+ const style2 = useMemo67(() => {
49114
49227
  return {
49115
49228
  width: size4,
49116
49229
  height: size4
49117
49230
  };
49118
49231
  }, [size4]);
49119
- return /* @__PURE__ */ jsxs34(Fragment16, {
49232
+ return /* @__PURE__ */ jsxs31(Fragment15, {
49120
49233
  children: [
49121
- /* @__PURE__ */ jsx97("style", {
49234
+ /* @__PURE__ */ jsx95("style", {
49122
49235
  type: "text/css",
49123
49236
  children: `
49124
49237
  @keyframes ${remotionSpinnerAnimation} {
@@ -49135,11 +49248,11 @@ var Spinner2 = ({ size: size4, duration }) => {
49135
49248
  }
49136
49249
  `
49137
49250
  }),
49138
- /* @__PURE__ */ jsx97("svg", {
49251
+ /* @__PURE__ */ jsx95("svg", {
49139
49252
  style: style2,
49140
49253
  viewBox: `0 0 ${viewBox2} ${viewBox2}`,
49141
49254
  children: new Array(lines2).fill(true).map((_, index2) => {
49142
- return /* @__PURE__ */ jsx97("path", {
49255
+ return /* @__PURE__ */ jsx95("path", {
49143
49256
  className: className2,
49144
49257
  style: {
49145
49258
  rotate: `${index2 * Math.PI * 2 / lines2}rad`,
@@ -49156,7 +49269,7 @@ var Spinner2 = ({ size: size4, duration }) => {
49156
49269
  };
49157
49270
 
49158
49271
  // src/components/homepage/Demo/DemoRender.tsx
49159
- import { jsx as jsx98 } from "react/jsx-runtime";
49272
+ import { jsx as jsx97 } from "react/jsx-runtime";
49160
49273
  var countryPath = z.object({
49161
49274
  d: z.string(),
49162
49275
  class: z.string()
@@ -49246,24 +49359,24 @@ var RenderButton = ({ renderData, onError, playerRef }) => {
49246
49359
  onError();
49247
49360
  }
49248
49361
  }, [onError, renderData, playerRef]);
49249
- return /* @__PURE__ */ jsx98("button", {
49362
+ return /* @__PURE__ */ jsx97("button", {
49250
49363
  type: "button",
49251
49364
  onClick: triggerRender,
49252
49365
  style: style2,
49253
49366
  disabled: !renderData || state.type !== "idle",
49254
- children: state.type === "error" ? /* @__PURE__ */ jsx98(DemoErrorIcon, {}) : state.type === "done" ? /* @__PURE__ */ jsx98(DoneCheckmark, {}) : state.type === "progress" ? /* @__PURE__ */ jsx98(Progress, {
49367
+ children: state.type === "error" ? /* @__PURE__ */ jsx97(DemoErrorIcon, {}) : state.type === "done" ? /* @__PURE__ */ jsx97(DoneCheckmark, {}) : state.type === "progress" ? /* @__PURE__ */ jsx97(Progress, {
49255
49368
  progress: state.progress
49256
- }) : state.type === "invoking" ? /* @__PURE__ */ jsx98(Spinner2, {
49369
+ }) : state.type === "invoking" ? /* @__PURE__ */ jsx97(Spinner2, {
49257
49370
  size: 20,
49258
49371
  duration: 1
49259
- }) : /* @__PURE__ */ jsx98("svg", {
49372
+ }) : /* @__PURE__ */ jsx97("svg", {
49260
49373
  style: {
49261
49374
  width: 18,
49262
49375
  opacity: renderData ? 1 : 0.5
49263
49376
  },
49264
49377
  xmlns: "http://www.w3.org/2000/svg",
49265
49378
  viewBox: "0 0 384 512",
49266
- children: /* @__PURE__ */ jsx98("path", {
49379
+ children: /* @__PURE__ */ jsx97("path", {
49267
49380
  fill: PALETTE.TEXT_COLOR,
49268
49381
  d: "M214.6 342.6L192 365.3l-22.6-22.6-128-128L18.7 192 64 146.7l22.6 22.6L160 242.7 160 64l0-32 64 0 0 32 0 178.7 73.4-73.4L320 146.7 365.3 192l-22.6 22.6-128 128zM32 416l320 0 32 0 0 64-32 0L32 480 0 480l0-64 32 0z"
49269
49382
  })
@@ -49272,18 +49385,18 @@ var RenderButton = ({ renderData, onError, playerRef }) => {
49272
49385
  };
49273
49386
 
49274
49387
  // src/components/homepage/Demo/DownloadNudge.tsx
49275
- import { jsx as jsx99, jsxs as jsxs36 } from "react/jsx-runtime";
49388
+ import { jsx as jsx98, jsxs as jsxs34 } from "react/jsx-runtime";
49276
49389
  var origWidth = 77;
49277
49390
  var scale = 0.4;
49278
49391
  var Icon3 = () => {
49279
- return /* @__PURE__ */ jsx99("svg", {
49392
+ return /* @__PURE__ */ jsx98("svg", {
49280
49393
  style: {
49281
49394
  width: origWidth * scale
49282
49395
  },
49283
49396
  viewBox: "0 0 77 160",
49284
49397
  fill: "none",
49285
49398
  xmlns: "http://www.w3.org/2000/svg",
49286
- children: /* @__PURE__ */ jsx99("path", {
49399
+ children: /* @__PURE__ */ jsx98("path", {
49287
49400
  d: "M5 154.5C51 121 79 81 69 5",
49288
49401
  stroke: "currentColor",
49289
49402
  strokeWidth: "8",
@@ -49292,7 +49405,7 @@ var Icon3 = () => {
49292
49405
  });
49293
49406
  };
49294
49407
  var DownloadNudge = () => {
49295
- return /* @__PURE__ */ jsx99("div", {
49408
+ return /* @__PURE__ */ jsx98("div", {
49296
49409
  style: {
49297
49410
  position: "relative",
49298
49411
  flexDirection: "row",
@@ -49302,10 +49415,10 @@ var DownloadNudge = () => {
49302
49415
  paddingRight: 24,
49303
49416
  paddingTop: 18
49304
49417
  },
49305
- children: /* @__PURE__ */ jsxs36("div", {
49418
+ children: /* @__PURE__ */ jsxs34("div", {
49306
49419
  children: [
49307
- /* @__PURE__ */ jsx99(Icon3, {}),
49308
- /* @__PURE__ */ jsx99("div", {
49420
+ /* @__PURE__ */ jsx98(Icon3, {}),
49421
+ /* @__PURE__ */ jsx98("div", {
49309
49422
  style: {
49310
49423
  fontFamily: FONTS.GTPLANAR,
49311
49424
  fontSize: 15,
@@ -49322,18 +49435,18 @@ var DownloadNudge = () => {
49322
49435
  };
49323
49436
 
49324
49437
  // src/components/homepage/Demo/DragAndDropNudge.tsx
49325
- import { jsx as jsx100, jsxs as jsxs37 } from "react/jsx-runtime";
49438
+ import { jsx as jsx99, jsxs as jsxs36 } from "react/jsx-runtime";
49326
49439
  var origWidth2 = 37;
49327
49440
  var scale2 = 0.4;
49328
49441
  var Icon5 = () => {
49329
- return /* @__PURE__ */ jsx100("svg", {
49442
+ return /* @__PURE__ */ jsx99("svg", {
49330
49443
  style: {
49331
49444
  width: origWidth2 * scale2,
49332
49445
  overflow: "visible"
49333
49446
  },
49334
49447
  viewBox: "0 0 37 59",
49335
49448
  fill: "none",
49336
- children: /* @__PURE__ */ jsx100("path", {
49449
+ children: /* @__PURE__ */ jsx99("path", {
49337
49450
  d: "M5.00003 5C5.00002 36.5 16 44 32.0002 54",
49338
49451
  stroke: PALETTE.TEXT_COLOR,
49339
49452
  strokeWidth: "8",
@@ -49342,7 +49455,7 @@ var Icon5 = () => {
49342
49455
  });
49343
49456
  };
49344
49457
  var DragAndDropNudge = () => {
49345
- return /* @__PURE__ */ jsx100("div", {
49458
+ return /* @__PURE__ */ jsx99("div", {
49346
49459
  style: {
49347
49460
  position: "absolute",
49348
49461
  flexDirection: "row",
@@ -49352,9 +49465,9 @@ var DragAndDropNudge = () => {
49352
49465
  marginTop: 18
49353
49466
  },
49354
49467
  className: "ml-4 lg:-ml-5",
49355
- children: /* @__PURE__ */ jsxs37("div", {
49468
+ children: /* @__PURE__ */ jsxs36("div", {
49356
49469
  children: [
49357
- /* @__PURE__ */ jsx100("div", {
49470
+ /* @__PURE__ */ jsx99("div", {
49358
49471
  style: {
49359
49472
  fontFamily: FONTS.GTPLANAR,
49360
49473
  fontSize: 15,
@@ -49365,20 +49478,20 @@ var DragAndDropNudge = () => {
49365
49478
  className: "-ml-3 lg:-ml-5",
49366
49479
  children: "Drag and drop the cards to reorder them."
49367
49480
  }),
49368
- /* @__PURE__ */ jsx100(Icon5, {})
49481
+ /* @__PURE__ */ jsx99(Icon5, {})
49369
49482
  ]
49370
49483
  })
49371
49484
  });
49372
49485
  };
49373
49486
 
49374
49487
  // src/components/homepage/Demo/PlayerSeekBar.tsx
49375
- import { useCallback as useCallback50, useEffect as useEffect51, useMemo as useMemo68, useRef as useRef57, useState as useState51 } from "react";
49488
+ import { useCallback as useCallback50, useEffect as useEffect51, useMemo as useMemo69, useRef as useRef57, useState as useState51 } from "react";
49376
49489
 
49377
49490
  // src/components/homepage/layout/use-el-size.ts
49378
- import { useCallback as useCallback49, useEffect as useEffect50, useMemo as useMemo67, useState as useState50 } from "react";
49491
+ import { useCallback as useCallback49, useEffect as useEffect50, useMemo as useMemo68, useState as useState50 } from "react";
49379
49492
  var useElementSize2 = (ref) => {
49380
49493
  const [size4, setSize] = useState50(null);
49381
- const observer = useMemo67(() => {
49494
+ const observer = useMemo68(() => {
49382
49495
  if (typeof ResizeObserver === "undefined") {
49383
49496
  return;
49384
49497
  }
@@ -49417,7 +49530,7 @@ var useElementSize2 = (ref) => {
49417
49530
  };
49418
49531
 
49419
49532
  // src/components/homepage/Demo/PlayerSeekBar.tsx
49420
- import { jsx as jsx101, jsxs as jsxs38 } from "react/jsx-runtime";
49533
+ import { jsx as jsx100, jsxs as jsxs37 } from "react/jsx-runtime";
49421
49534
  var getFrameFromX2 = (clientX, durationInFrames, width2) => {
49422
49535
  const pos = clientX;
49423
49536
  const frame = Math.round(interpolate(pos, [0, width2], [0, durationInFrames - 1], {
@@ -49592,7 +49705,7 @@ var PlayerSeekBar2 = ({
49592
49705
  body.removeEventListener("pointerup", onPointerUp);
49593
49706
  };
49594
49707
  }, [dragging.dragging, onPointerMove, onPointerUp]);
49595
- const knobStyle = useMemo68(() => {
49708
+ const knobStyle = useMemo69(() => {
49596
49709
  return {
49597
49710
  height: KNOB_SIZE3,
49598
49711
  width: KNOB_SIZE3,
@@ -49606,7 +49719,7 @@ var PlayerSeekBar2 = ({
49606
49719
  transition: "opacity 0.s ease"
49607
49720
  };
49608
49721
  }, [barHovered, durationInFrames, frame, width2]);
49609
- const fillStyle = useMemo68(() => {
49722
+ const fillStyle = useMemo69(() => {
49610
49723
  return {
49611
49724
  height: BAR_HEIGHT3,
49612
49725
  backgroundColor: "var(--ifm-font-color-base)",
@@ -49615,7 +49728,7 @@ var PlayerSeekBar2 = ({
49615
49728
  borderRadius: BAR_HEIGHT3 / 2
49616
49729
  };
49617
49730
  }, [durationInFrames, frame, inFrame]);
49618
- const active = useMemo68(() => {
49731
+ const active = useMemo69(() => {
49619
49732
  return {
49620
49733
  height: BAR_HEIGHT3,
49621
49734
  backgroundColor: "var(--ifm-font-color-base)",
@@ -49626,23 +49739,23 @@ var PlayerSeekBar2 = ({
49626
49739
  position: "absolute"
49627
49740
  };
49628
49741
  }, [durationInFrames, inFrame, outFrame]);
49629
- return /* @__PURE__ */ jsxs38("div", {
49742
+ return /* @__PURE__ */ jsxs37("div", {
49630
49743
  ref: containerRef,
49631
49744
  onPointerDown,
49632
49745
  style: containerStyle3,
49633
49746
  children: [
49634
- /* @__PURE__ */ jsxs38("div", {
49747
+ /* @__PURE__ */ jsxs37("div", {
49635
49748
  style: barBackground2,
49636
49749
  children: [
49637
- /* @__PURE__ */ jsx101("div", {
49750
+ /* @__PURE__ */ jsx100("div", {
49638
49751
  style: active
49639
49752
  }),
49640
- /* @__PURE__ */ jsx101("div", {
49753
+ /* @__PURE__ */ jsx100("div", {
49641
49754
  style: fillStyle
49642
49755
  })
49643
49756
  ]
49644
49757
  }),
49645
- /* @__PURE__ */ jsx101("div", {
49758
+ /* @__PURE__ */ jsx100("div", {
49646
49759
  style: knobStyle
49647
49760
  })
49648
49761
  ]
@@ -49653,9 +49766,9 @@ var PlayerSeekBar2 = ({
49653
49766
  import { useCallback as useCallback51, useEffect as useEffect53, useRef as useRef58, useState as useState54 } from "react";
49654
49767
 
49655
49768
  // src/components/homepage/Demo/icons.tsx
49656
- import { jsx as jsx105 } from "react/jsx-runtime";
49769
+ import { jsx as jsx101 } from "react/jsx-runtime";
49657
49770
  var PausedIcon = (props) => {
49658
- return /* @__PURE__ */ jsx105("svg", {
49771
+ return /* @__PURE__ */ jsx101("svg", {
49659
49772
  "aria-hidden": "true",
49660
49773
  focusable: "false",
49661
49774
  "data-prefix": "fas",
@@ -49665,48 +49778,48 @@ var PausedIcon = (props) => {
49665
49778
  xmlns: "http://www.w3.org/2000/svg",
49666
49779
  viewBox: "0 0 480 512",
49667
49780
  ...props,
49668
- children: /* @__PURE__ */ jsx105("path", {
49781
+ children: /* @__PURE__ */ jsx101("path", {
49669
49782
  fill: "currentColor",
49670
49783
  d: "M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"
49671
49784
  })
49672
49785
  });
49673
49786
  };
49674
49787
  var PlayingIcon = (props) => {
49675
- return /* @__PURE__ */ jsx105("svg", {
49788
+ return /* @__PURE__ */ jsx101("svg", {
49676
49789
  xmlns: "http://www.w3.org/2000/svg",
49677
49790
  viewBox: "0 0 400 512",
49678
49791
  fill: "currentColor",
49679
49792
  ...props,
49680
- children: /* @__PURE__ */ jsx105("path", {
49793
+ children: /* @__PURE__ */ jsx101("path", {
49681
49794
  d: "M48 64C21.5 64 0 85.5 0 112L0 400c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48L48 64zm192 0c-26.5 0-48 21.5-48 48l0 288c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48l-32 0z"
49682
49795
  })
49683
49796
  });
49684
49797
  };
49685
49798
  var NotMutedIcon = (props) => {
49686
- return /* @__PURE__ */ jsx105("svg", {
49799
+ return /* @__PURE__ */ jsx101("svg", {
49687
49800
  xmlns: "http://www.w3.org/2000/svg",
49688
49801
  ...props,
49689
49802
  viewBox: "0 0 640 512",
49690
49803
  fill: "currentColor",
49691
- children: /* @__PURE__ */ jsx105("path", {
49804
+ children: /* @__PURE__ */ jsx101("path", {
49692
49805
  d: "M32 160l0 192 128 0L304 480l48 0 0-448-48 0L160 160 32 160zM441.6 332.8C464.9 315.3 480 287.4 480 256s-15.1-59.3-38.4-76.8l-28.8 38.4c11.7 8.8 19.2 22.7 19.2 38.4s-7.5 29.6-19.2 38.4l28.8 38.4zm57.6 76.8c46.6-35 76.8-90.8 76.8-153.6s-30.2-118.6-76.8-153.6l-28.8 38.4c35 26.3 57.6 68.1 57.6 115.2s-22.6 88.9-57.6 115.2l28.8 38.4z"
49693
49806
  })
49694
49807
  });
49695
49808
  };
49696
49809
  var IsMutedIcon = (props) => {
49697
- return /* @__PURE__ */ jsx105("svg", {
49810
+ return /* @__PURE__ */ jsx101("svg", {
49698
49811
  xmlns: "http://www.w3.org/2000/svg",
49699
49812
  ...props,
49700
49813
  viewBox: "0 0 640 512",
49701
49814
  fill: RED,
49702
- children: /* @__PURE__ */ jsx105("path", {
49815
+ children: /* @__PURE__ */ jsx101("path", {
49703
49816
  d: "M48.4 14.8L29.4 .1 0 38l19 14.7L591.5 497.2l19 14.7L639.9 474l-19-14.7-95.1-73.8C557 351.3 576 305.9 576 256c0-62.8-30.2-118.6-76.8-153.6l-28.8 38.4c35 26.3 57.6 68.1 57.6 115.2c0 38.8-15.3 74-40.3 99.9l-38.2-29.7C468.3 308.7 480 283.7 480 256c0-31.4-15.1-59.3-38.4-76.8l-28.8 38.4c11.7 8.8 19.2 22.7 19.2 38.4s-7.5 29.6-19.2 38.4l5.9 7.9L352 250.5 352 32l-48 0L195.2 128.7 48.4 14.8zM352 373.3L81.2 160 32 160l0 192 128 0L304 480l48 0 0-106.7z"
49704
49817
  })
49705
49818
  });
49706
49819
  };
49707
49820
 
49708
49821
  // src/components/homepage/Demo/PlayerVolume.tsx
49709
- import { jsx as jsx107 } from "react/jsx-runtime";
49822
+ import { jsx as jsx105 } from "react/jsx-runtime";
49710
49823
  var PlayerVolume = ({ playerRef }) => {
49711
49824
  const [muted, setIsMuted] = useState54(() => playerRef.current?.isMuted() ?? true);
49712
49825
  const [isHovered, setIsHovered] = useState54(false);
@@ -49742,10 +49855,10 @@ var PlayerVolume = ({ playerRef }) => {
49742
49855
  playerRef.current.mute();
49743
49856
  }
49744
49857
  }, [playerRef]);
49745
- return /* @__PURE__ */ jsx107("div", {
49858
+ return /* @__PURE__ */ jsx105("div", {
49746
49859
  className: "relative cursor-pointer block pl-4 pr-4 h-full",
49747
49860
  onPointerEnter: () => setIsHovered(true),
49748
- children: /* @__PURE__ */ jsx107("button", {
49861
+ children: /* @__PURE__ */ jsx105("button", {
49749
49862
  type: "button",
49750
49863
  onClick,
49751
49864
  style: {
@@ -49759,9 +49872,9 @@ var PlayerVolume = ({ playerRef }) => {
49759
49872
  alignItems: "center",
49760
49873
  color: PALETTE.TEXT_COLOR
49761
49874
  },
49762
- children: muted ? /* @__PURE__ */ jsx107(IsMutedIcon, {
49875
+ children: muted ? /* @__PURE__ */ jsx105(IsMutedIcon, {
49763
49876
  style: { height: 20 }
49764
- }) : /* @__PURE__ */ jsx107(NotMutedIcon, {
49877
+ }) : /* @__PURE__ */ jsx105(NotMutedIcon, {
49765
49878
  style: { height: 20 }
49766
49879
  })
49767
49880
  })
@@ -49770,7 +49883,7 @@ var PlayerVolume = ({ playerRef }) => {
49770
49883
 
49771
49884
  // src/components/homepage/Demo/PlayPauseButton.tsx
49772
49885
  import React75, { useCallback as useCallback53, useEffect as useEffect55 } from "react";
49773
- import { jsx as jsx108 } from "react/jsx-runtime";
49886
+ import { jsx as jsx107 } from "react/jsx-runtime";
49774
49887
  var playerButtonStyle2 = {
49775
49888
  appearance: "none",
49776
49889
  border: "none",
@@ -49811,13 +49924,13 @@ var PlayPauseButton = ({ playerRef }) => {
49811
49924
  const playPauseIconStyle = {
49812
49925
  width: 15
49813
49926
  };
49814
- return /* @__PURE__ */ jsx108("button", {
49927
+ return /* @__PURE__ */ jsx107("button", {
49815
49928
  type: "button",
49816
49929
  style: playerButtonStyle2,
49817
49930
  onClick: onToggle,
49818
- children: playing ? /* @__PURE__ */ jsx108(PlayingIcon, {
49931
+ children: playing ? /* @__PURE__ */ jsx107(PlayingIcon, {
49819
49932
  style: playPauseIconStyle
49820
- }) : /* @__PURE__ */ jsx108(PausedIcon, {
49933
+ }) : /* @__PURE__ */ jsx107(PausedIcon, {
49821
49934
  style: playPauseIconStyle
49822
49935
  })
49823
49936
  });
@@ -49825,7 +49938,7 @@ var PlayPauseButton = ({ playerRef }) => {
49825
49938
 
49826
49939
  // src/components/homepage/Demo/TimeDisplay.tsx
49827
49940
  import React76, { useEffect as useEffect56 } from "react";
49828
- import { jsx as jsx109 } from "react/jsx-runtime";
49941
+ import { jsx as jsx108 } from "react/jsx-runtime";
49829
49942
  var formatTime2 = (timeInSeconds) => {
49830
49943
  const minutes = Math.floor(timeInSeconds / 60);
49831
49944
  const seconds = Math.floor(timeInSeconds - minutes * 60);
@@ -49846,21 +49959,21 @@ var TimeDisplay = ({ fps, playerRef }) => {
49846
49959
  current.removeEventListener("frameupdate", onTimeUpdate);
49847
49960
  };
49848
49961
  }, [playerRef]);
49849
- return /* @__PURE__ */ jsx109("div", {
49962
+ return /* @__PURE__ */ jsx108("div", {
49850
49963
  style: {
49851
49964
  fontSize: 16,
49852
49965
  fontVariantNumeric: "tabular-nums"
49853
49966
  },
49854
- children: /* @__PURE__ */ jsx109("span", {
49967
+ children: /* @__PURE__ */ jsx108("span", {
49855
49968
  children: formatTime2(time / fps)
49856
49969
  })
49857
49970
  });
49858
49971
  };
49859
49972
 
49860
49973
  // src/components/homepage/Demo/PlayerControls.tsx
49861
- import { jsx as jsx110, jsxs as jsxs39 } from "react/jsx-runtime";
49974
+ import { jsx as jsx109, jsxs as jsxs38 } from "react/jsx-runtime";
49862
49975
  var Separator2 = () => {
49863
- return /* @__PURE__ */ jsx110("div", {
49976
+ return /* @__PURE__ */ jsx109("div", {
49864
49977
  style: {
49865
49978
  borderRight: `2px solid ${PALETTE.BOX_STROKE}`,
49866
49979
  height: 50
@@ -49868,28 +49981,28 @@ var Separator2 = () => {
49868
49981
  });
49869
49982
  };
49870
49983
  var PlayerControls = ({ playerRef, durationInFrames, fps, children }) => {
49871
- return /* @__PURE__ */ jsxs39("div", {
49984
+ return /* @__PURE__ */ jsxs38("div", {
49872
49985
  className: "flex flex-row items-center bg-pane",
49873
49986
  children: [
49874
- /* @__PURE__ */ jsx110(PlayPauseButton, {
49987
+ /* @__PURE__ */ jsx109(PlayPauseButton, {
49875
49988
  playerRef
49876
49989
  }),
49877
- /* @__PURE__ */ jsx110(Separator2, {}),
49878
- /* @__PURE__ */ jsx110(PlayerVolume, {
49990
+ /* @__PURE__ */ jsx109(Separator2, {}),
49991
+ /* @__PURE__ */ jsx109(PlayerVolume, {
49879
49992
  playerRef
49880
49993
  }),
49881
- /* @__PURE__ */ jsx110(Separator2, {}),
49882
- /* @__PURE__ */ jsx110("div", {
49994
+ /* @__PURE__ */ jsx109(Separator2, {}),
49995
+ /* @__PURE__ */ jsx109("div", {
49883
49996
  style: { width: 15 }
49884
49997
  }),
49885
- /* @__PURE__ */ jsx110(TimeDisplay, {
49998
+ /* @__PURE__ */ jsx109(TimeDisplay, {
49886
49999
  playerRef,
49887
50000
  fps
49888
50001
  }),
49889
- /* @__PURE__ */ jsx110("div", {
50002
+ /* @__PURE__ */ jsx109("div", {
49890
50003
  style: { width: 15 }
49891
50004
  }),
49892
- /* @__PURE__ */ jsx110(PlayerSeekBar2, {
50005
+ /* @__PURE__ */ jsx109(PlayerSeekBar2, {
49893
50006
  durationInFrames,
49894
50007
  playerRef,
49895
50008
  inFrame: null,
@@ -49901,10 +50014,10 @@ var PlayerControls = ({ playerRef, durationInFrames, fps, children }) => {
49901
50014
  return;
49902
50015
  }
49903
50016
  }),
49904
- /* @__PURE__ */ jsx110("div", {
50017
+ /* @__PURE__ */ jsx109("div", {
49905
50018
  style: { width: 20 }
49906
50019
  }),
49907
- /* @__PURE__ */ jsx110(Separator2, {}),
50020
+ /* @__PURE__ */ jsx109(Separator2, {}),
49908
50021
  children
49909
50022
  ]
49910
50023
  });
@@ -49912,11 +50025,11 @@ var PlayerControls = ({ playerRef, durationInFrames, fps, children }) => {
49912
50025
 
49913
50026
  // src/components/homepage/Demo/ThemeNudge.tsx
49914
50027
  import React77 from "react";
49915
- import { jsx as jsx111, jsxs as jsxs40 } from "react/jsx-runtime";
50028
+ import { jsx as jsx110, jsxs as jsxs39 } from "react/jsx-runtime";
49916
50029
  var origWidth3 = 37;
49917
50030
  var scale3 = 0.4;
49918
50031
  var Icon6 = () => {
49919
- return /* @__PURE__ */ jsx111("svg", {
50032
+ return /* @__PURE__ */ jsx110("svg", {
49920
50033
  style: {
49921
50034
  width: origWidth3 * scale3,
49922
50035
  overflow: "visible"
@@ -49924,7 +50037,7 @@ var Icon6 = () => {
49924
50037
  viewBox: "0 0 37 59",
49925
50038
  fill: "none",
49926
50039
  xmlns: "http://www.w3.org/2000/svg",
49927
- children: /* @__PURE__ */ jsx111("path", {
50040
+ children: /* @__PURE__ */ jsx110("path", {
49928
50041
  d: "M32 5C32 36.5 21 44 5 54",
49929
50042
  stroke: "currentColor",
49930
50043
  strokeWidth: "8",
@@ -49938,7 +50051,7 @@ var ThemeNudge = () => {
49938
50051
  e.preventDefault();
49939
50052
  setColorMode(colorMode === "dark" ? "light" : "dark");
49940
50053
  }, [colorMode, setColorMode]);
49941
- return /* @__PURE__ */ jsx111("div", {
50054
+ return /* @__PURE__ */ jsx110("div", {
49942
50055
  style: {
49943
50056
  flexDirection: "row",
49944
50057
  display: "flex",
@@ -49948,9 +50061,9 @@ var ThemeNudge = () => {
49948
50061
  position: "absolute"
49949
50062
  },
49950
50063
  className: "lg:top-3 lg:-right-6 right-0 top-0",
49951
- children: /* @__PURE__ */ jsxs40("div", {
50064
+ children: /* @__PURE__ */ jsxs39("div", {
49952
50065
  children: [
49953
- /* @__PURE__ */ jsxs40("div", {
50066
+ /* @__PURE__ */ jsxs39("div", {
49954
50067
  style: {
49955
50068
  fontFamily: FONTS.GTPLANAR,
49956
50069
  fontSize: 15,
@@ -49961,7 +50074,7 @@ var ThemeNudge = () => {
49961
50074
  marginTop: 5
49962
50075
  },
49963
50076
  children: [
49964
- /* @__PURE__ */ jsxs40("a", {
50077
+ /* @__PURE__ */ jsxs39("a", {
49965
50078
  href: "#",
49966
50079
  onClick: toggleTheme,
49967
50080
  className: "bluelink",
@@ -49976,14 +50089,14 @@ var ThemeNudge = () => {
49976
50089
  " "
49977
50090
  ]
49978
50091
  }),
49979
- /* @__PURE__ */ jsx111(Icon6, {})
50092
+ /* @__PURE__ */ jsx110(Icon6, {})
49980
50093
  ]
49981
50094
  })
49982
50095
  });
49983
50096
  };
49984
50097
 
49985
50098
  // src/components/homepage/Demo/index.tsx
49986
- import { jsx as jsx115, jsxs as jsxs41 } from "react/jsx-runtime";
50099
+ import { jsx as jsx111, jsxs as jsxs40 } from "react/jsx-runtime";
49987
50100
  var style3 = {
49988
50101
  width: "100%",
49989
50102
  aspectRatio: "640 / 360",
@@ -50029,7 +50142,7 @@ var Demo = () => {
50029
50142
  const updateCardOrder = useCallback55((newCardOrder) => {
50030
50143
  setCardOrder(newCardOrder);
50031
50144
  }, []);
50032
- const props = useMemo69(() => {
50145
+ const props = useMemo70(() => {
50033
50146
  return {
50034
50147
  theme: colorMode,
50035
50148
  onToggle: () => {
@@ -50051,28 +50164,27 @@ var Demo = () => {
50051
50164
  const onError = useCallback55(() => {
50052
50165
  setError(true);
50053
50166
  }, []);
50054
- return /* @__PURE__ */ jsxs41("div", {
50167
+ return /* @__PURE__ */ jsxs40("div", {
50055
50168
  id: "demo",
50169
+ className: "pt-24",
50056
50170
  children: [
50057
- /* @__PURE__ */ jsx115("br", {}),
50058
- /* @__PURE__ */ jsx115("br", {}),
50059
- /* @__PURE__ */ jsx115(SectionTitle, {
50171
+ /* @__PURE__ */ jsx111(SectionTitle, {
50060
50172
  children: "Interactive demo"
50061
50173
  }),
50062
- /* @__PURE__ */ jsxs41("div", {
50174
+ /* @__PURE__ */ jsxs40("div", {
50063
50175
  className: "max-w-[760px] mx-auto",
50064
50176
  children: [
50065
- /* @__PURE__ */ jsxs41("div", {
50177
+ /* @__PURE__ */ jsxs40("div", {
50066
50178
  className: "h-[105px] relative",
50067
50179
  children: [
50068
- /* @__PURE__ */ jsx115(DragAndDropNudge, {}),
50069
- /* @__PURE__ */ jsx115(ThemeNudge, {})
50180
+ /* @__PURE__ */ jsx111(DragAndDropNudge, {}),
50181
+ /* @__PURE__ */ jsx111(ThemeNudge, {})
50070
50182
  ]
50071
50183
  }),
50072
- /* @__PURE__ */ jsxs41("div", {
50184
+ /* @__PURE__ */ jsxs40("div", {
50073
50185
  style: playerWrapper,
50074
50186
  children: [
50075
- /* @__PURE__ */ jsx115(Player, {
50187
+ /* @__PURE__ */ jsx111(Player, {
50076
50188
  ref,
50077
50189
  component: HomepageVideoComp,
50078
50190
  compositionWidth: 640,
@@ -50089,11 +50201,11 @@ var Demo = () => {
50089
50201
  numberOfSharedAudioTags: 0,
50090
50202
  loop: true
50091
50203
  }),
50092
- /* @__PURE__ */ jsx115(PlayerControls, {
50204
+ /* @__PURE__ */ jsx111(PlayerControls, {
50093
50205
  playerRef: ref,
50094
50206
  durationInFrames: 120,
50095
50207
  fps: 30,
50096
- children: /* @__PURE__ */ jsx115(RenderButton, {
50208
+ children: /* @__PURE__ */ jsx111(RenderButton, {
50097
50209
  onError,
50098
50210
  renderData: data2 ? {
50099
50211
  cardOrder,
@@ -50107,8 +50219,8 @@ var Demo = () => {
50107
50219
  })
50108
50220
  ]
50109
50221
  }),
50110
- error2 ? /* @__PURE__ */ jsx115(DemoError, {}) : null,
50111
- /* @__PURE__ */ jsx115(DownloadNudge, {})
50222
+ error2 ? /* @__PURE__ */ jsx111(DemoError, {}) : null,
50223
+ /* @__PURE__ */ jsx111(DownloadNudge, {})
50112
50224
  ]
50113
50225
  })
50114
50226
  ]
@@ -50119,7 +50231,7 @@ var Demo = () => {
50119
50231
  import { useEffect as useEffect58, useState as useState57 } from "react";
50120
50232
 
50121
50233
  // src/components/homepage/layout/Button.tsx
50122
- import { jsx as jsx117 } from "react/jsx-runtime";
50234
+ import { jsx as jsx115 } from "react/jsx-runtime";
50123
50235
  var Button2 = (props) => {
50124
50236
  const {
50125
50237
  children,
@@ -50132,7 +50244,7 @@ var Button2 = (props) => {
50132
50244
  ...other
50133
50245
  } = props;
50134
50246
  const actualDisabled = other.disabled || loading;
50135
- return /* @__PURE__ */ jsx117("button", {
50247
+ return /* @__PURE__ */ jsx115("button", {
50136
50248
  type: "button",
50137
50249
  className: cn2("text-base rounded-lg font-bold appearance-none border-2 border-solid border-black border-b-4 font-sans flex flex-row items-center justify-center ", className3),
50138
50250
  disabled: actualDisabled,
@@ -50150,7 +50262,7 @@ var Button2 = (props) => {
50150
50262
  });
50151
50263
  };
50152
50264
  var BlueButton = (props) => {
50153
- return /* @__PURE__ */ jsx117(Button2, {
50265
+ return /* @__PURE__ */ jsx115(Button2, {
50154
50266
  ...props,
50155
50267
  background: "var(--blue-underlay)",
50156
50268
  color: "white"
@@ -50158,7 +50270,7 @@ var BlueButton = (props) => {
50158
50270
  };
50159
50271
 
50160
50272
  // src/components/homepage/EvaluateRemotion.tsx
50161
- import { jsx as jsx118, jsxs as jsxs44 } from "react/jsx-runtime";
50273
+ import { jsx as jsx117, jsxs as jsxs41 } from "react/jsx-runtime";
50162
50274
  var EvaluateRemotionSection = () => {
50163
50275
  const [dailyAvatars, setDailyAvatars] = useState57([]);
50164
50276
  useEffect58(() => {
@@ -50171,41 +50283,41 @@ var EvaluateRemotionSection = () => {
50171
50283
  }
50172
50284
  setDailyAvatars(selectedAvatars);
50173
50285
  }, []);
50174
- return /* @__PURE__ */ jsxs44("div", {
50286
+ return /* @__PURE__ */ jsxs41("div", {
50175
50287
  className: "flex flex-col lg:flex-row gap-2",
50176
50288
  children: [
50177
- /* @__PURE__ */ jsxs44("div", {
50289
+ /* @__PURE__ */ jsxs41("div", {
50178
50290
  className: "card flex-1 flex flex-col",
50179
50291
  children: [
50180
- /* @__PURE__ */ jsx118("div", {
50292
+ /* @__PURE__ */ jsx117("div", {
50181
50293
  className: "fontbrand text-2xl font-bold",
50182
50294
  children: "Questions about our license?"
50183
50295
  }),
50184
- /* @__PURE__ */ jsx118("p", {
50296
+ /* @__PURE__ */ jsx117("p", {
50185
50297
  className: "text-muted fontbrand leading-snug",
50186
50298
  children: "Book a 20 minute call or write us an email to get all your questions answered."
50187
50299
  }),
50188
- /* @__PURE__ */ jsx118("div", {
50300
+ /* @__PURE__ */ jsx117("div", {
50189
50301
  className: "flex-1"
50190
50302
  }),
50191
- /* @__PURE__ */ jsxs44("div", {
50303
+ /* @__PURE__ */ jsxs41("div", {
50192
50304
  className: "flex flex-row flex-wrap gap-2",
50193
50305
  children: [
50194
- /* @__PURE__ */ jsx118("a", {
50306
+ /* @__PURE__ */ jsx117("a", {
50195
50307
  target: "_blank",
50196
50308
  href: "https://cal.com/remotion/evaluate",
50197
50309
  style: { textDecoration: "none" },
50198
- children: /* @__PURE__ */ jsx118(BlueButton, {
50310
+ children: /* @__PURE__ */ jsx117(BlueButton, {
50199
50311
  size: "sm",
50200
50312
  loading: false,
50201
50313
  children: "Schedule a call"
50202
50314
  })
50203
50315
  }),
50204
- /* @__PURE__ */ jsx118("a", {
50316
+ /* @__PURE__ */ jsx117("a", {
50205
50317
  target: "_blank",
50206
50318
  href: "mailto:hi@remotion.dev",
50207
50319
  style: { textDecoration: "none" },
50208
- children: /* @__PURE__ */ jsx118(BlueButton, {
50320
+ children: /* @__PURE__ */ jsx117(BlueButton, {
50209
50321
  size: "sm",
50210
50322
  loading: false,
50211
50323
  children: "Write an email"
@@ -50215,35 +50327,35 @@ var EvaluateRemotionSection = () => {
50215
50327
  })
50216
50328
  ]
50217
50329
  }),
50218
- /* @__PURE__ */ jsxs44("div", {
50330
+ /* @__PURE__ */ jsxs41("div", {
50219
50331
  className: "card flex-1 flex flex-col",
50220
50332
  children: [
50221
- /* @__PURE__ */ jsx118("div", {
50333
+ /* @__PURE__ */ jsx117("div", {
50222
50334
  className: "fontbrand text-2xl font-bold",
50223
50335
  children: "Get help with your Remotion project"
50224
50336
  }),
50225
- /* @__PURE__ */ jsx118("p", {
50337
+ /* @__PURE__ */ jsx117("p", {
50226
50338
  className: "text-muted fontbrand leading-snug",
50227
50339
  children: "Contact our experts for help and work."
50228
50340
  }),
50229
- /* @__PURE__ */ jsx118("div", {
50341
+ /* @__PURE__ */ jsx117("div", {
50230
50342
  className: "flex-1"
50231
50343
  }),
50232
- /* @__PURE__ */ jsxs44("div", {
50344
+ /* @__PURE__ */ jsxs41("div", {
50233
50345
  className: "flex flex-row justify-between",
50234
50346
  children: [
50235
- /* @__PURE__ */ jsx118("a", {
50347
+ /* @__PURE__ */ jsx117("a", {
50236
50348
  href: "/experts",
50237
50349
  style: { textDecoration: "none" },
50238
- children: /* @__PURE__ */ jsx118(BlueButton, {
50350
+ children: /* @__PURE__ */ jsx117(BlueButton, {
50239
50351
  size: "sm",
50240
50352
  loading: false,
50241
50353
  children: "Remotion Experts"
50242
50354
  })
50243
50355
  }),
50244
- /* @__PURE__ */ jsx118("div", {
50356
+ /* @__PURE__ */ jsx117("div", {
50245
50357
  className: "flex justify-end items-end gap-3",
50246
- children: dailyAvatars.map((avatar) => /* @__PURE__ */ jsx118("div", {
50358
+ children: dailyAvatars.map((avatar) => /* @__PURE__ */ jsx117("div", {
50247
50359
  className: "w-12 h-12 rounded-full bg-muted bg-cover bg-center -ml-5 border-2 border-black",
50248
50360
  style: { backgroundImage: `url(${avatar})` }
50249
50361
  }, avatar))
@@ -50258,26 +50370,26 @@ var EvaluateRemotionSection = () => {
50258
50370
  var EvaluateRemotion_default = EvaluateRemotionSection;
50259
50371
 
50260
50372
  // src/components/homepage/MakeVideosAgentically.tsx
50261
- import { useEffect as useEffect59, useRef as useRef60 } from "react";
50373
+ import { useEffect as useEffect61, useRef as useRef60 } from "react";
50262
50374
 
50263
50375
  // src/components/homepage/MakeVideosLinks.tsx
50264
50376
  import React80 from "react";
50265
- import { jsx as jsx119, jsxs as jsxs46, Fragment as Fragment17 } from "react/jsx-runtime";
50266
- var icon3 = {
50377
+ import { jsx as jsx118, jsxs as jsxs44, Fragment as Fragment16 } from "react/jsx-runtime";
50378
+ var icon2 = {
50267
50379
  height: 16,
50268
50380
  marginLeft: 10
50269
50381
  };
50270
50382
  var MakeVideosLinkItem = ({ href, label: label3 }) => {
50271
- return /* @__PURE__ */ jsxs46("a", {
50383
+ return /* @__PURE__ */ jsxs44("a", {
50272
50384
  className: "no-underline text-[var(--subtitle)] font-brand font-medium text-sm inline-flex flex-row items-center",
50273
50385
  href,
50274
50386
  children: [
50275
50387
  label3,
50276
- /* @__PURE__ */ jsx119("svg", {
50277
- style: icon3,
50388
+ /* @__PURE__ */ jsx118("svg", {
50389
+ style: icon2,
50278
50390
  xmlns: "http://www.w3.org/2000/svg",
50279
50391
  viewBox: "0 0 448 512",
50280
- children: /* @__PURE__ */ jsx119("path", {
50392
+ children: /* @__PURE__ */ jsx118("path", {
50281
50393
  fill: "currentColor",
50282
50394
  d: "M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
50283
50395
  })
@@ -50289,20 +50401,20 @@ var MakeVideosLinks = ({ links }) => {
50289
50401
  if (links.length === 0) {
50290
50402
  return null;
50291
50403
  }
50292
- return /* @__PURE__ */ jsxs46(Fragment17, {
50404
+ return /* @__PURE__ */ jsxs44(Fragment16, {
50293
50405
  children: [
50294
- /* @__PURE__ */ jsx119("div", {
50406
+ /* @__PURE__ */ jsx118("div", {
50295
50407
  className: "h-4"
50296
50408
  }),
50297
- /* @__PURE__ */ jsx119("div", {
50409
+ /* @__PURE__ */ jsx118("div", {
50298
50410
  className: "leading-6",
50299
50411
  children: links.map((link) => {
50300
- return /* @__PURE__ */ jsxs46(React80.Fragment, {
50412
+ return /* @__PURE__ */ jsxs44(React80.Fragment, {
50301
50413
  children: [
50302
- /* @__PURE__ */ jsx119(MakeVideosLinkItem, {
50414
+ /* @__PURE__ */ jsx118(MakeVideosLinkItem, {
50303
50415
  ...link
50304
50416
  }),
50305
- /* @__PURE__ */ jsx119("br", {})
50417
+ /* @__PURE__ */ jsx118("br", {})
50306
50418
  ]
50307
50419
  }, link.href);
50308
50420
  })
@@ -50311,10 +50423,37 @@ var MakeVideosLinks = ({ links }) => {
50311
50423
  });
50312
50424
  };
50313
50425
 
50426
+ // src/components/homepage/use-transparent-video-source.ts
50427
+ import { useEffect as useEffect60, useState as useState59 } from "react";
50428
+
50429
+ // src/components/homepage/IfYouKnowReact.tsx
50430
+ import { useEffect as useEffect59, useState as useState58 } from "react";
50431
+ import { jsx as jsx119, jsxs as jsxs46 } from "react/jsx-runtime";
50432
+ var isWebkit = () => {
50433
+ if (typeof window === "undefined") {
50434
+ return false;
50435
+ }
50436
+ const isSafariUserAgent = Boolean(navigator.userAgent.match(/Version\/[\d.]+.*Safari/));
50437
+ const isChrome = Boolean(navigator.userAgent.match(/CriOS\//));
50438
+ return isSafariUserAgent || isChrome;
50439
+ };
50440
+
50441
+ // src/components/homepage/use-transparent-video-source.ts
50442
+ var useTransparentVideoSource = ({
50443
+ fallbackVideoSrc,
50444
+ videoSrc
50445
+ }) => {
50446
+ const [src, setSrc] = useState59(videoSrc);
50447
+ useEffect60(() => {
50448
+ setSrc(isWebkit() ? fallbackVideoSrc : videoSrc);
50449
+ }, [fallbackVideoSrc, videoSrc]);
50450
+ return src;
50451
+ };
50452
+
50314
50453
  // src/components/homepage/MakeVideosAgentically.tsx
50315
- import { jsx as jsx120, jsxs as jsxs47, Fragment as Fragment18 } from "react/jsx-runtime";
50454
+ import { jsx as jsx120, jsxs as jsxs47, Fragment as Fragment17 } from "react/jsx-runtime";
50316
50455
  var MakeVideosAgentically = ({
50317
- title = /* @__PURE__ */ jsxs47(Fragment18, {
50456
+ title = /* @__PURE__ */ jsxs47(Fragment17, {
50318
50457
  children: [
50319
50458
  /* @__PURE__ */ jsx120("span", {
50320
50459
  className: "text-[var(--subtitle)]",
@@ -50336,7 +50475,8 @@ var MakeVideosAgentically = ({
50336
50475
  }) => {
50337
50476
  const ref = useRef60(null);
50338
50477
  const videoRef = useRef60(null);
50339
- useEffect59(() => {
50478
+ const src = useTransparentVideoSource({ fallbackVideoSrc, videoSrc });
50479
+ useEffect61(() => {
50340
50480
  const { current } = ref;
50341
50481
  if (!current) {
50342
50482
  return;
@@ -50359,8 +50499,9 @@ var MakeVideosAgentically = ({
50359
50499
  children: [
50360
50500
  /* @__PURE__ */ jsx120("div", {
50361
50501
  className: "flex aspect-square w-full items-start",
50362
- children: showVideo ? /* @__PURE__ */ jsxs47("video", {
50502
+ children: showVideo ? /* @__PURE__ */ jsx120("video", {
50363
50503
  ref: videoRef,
50504
+ src,
50364
50505
  muted: true,
50365
50506
  autoPlay: true,
50366
50507
  playsInline: true,
@@ -50373,17 +50514,7 @@ var MakeVideosAgentically = ({
50373
50514
  borderRadius: 7,
50374
50515
  overflow: "hidden"
50375
50516
  },
50376
- className: "cursor-default! relative object-contain",
50377
- children: [
50378
- /* @__PURE__ */ jsx120("source", {
50379
- src: fallbackVideoSrc,
50380
- type: "video/mp4"
50381
- }),
50382
- /* @__PURE__ */ jsx120("source", {
50383
- src: videoSrc,
50384
- type: "video/webm"
50385
- })
50386
- ]
50517
+ className: "cursor-default! relative object-contain"
50387
50518
  }) : null
50388
50519
  }),
50389
50520
  /* @__PURE__ */ jsxs47("div", {
@@ -50408,9 +50539,9 @@ var MakeVideosAgentically = ({
50408
50539
 
50409
50540
  // src/components/homepage/MakeVideosInteractively.tsx
50410
50541
  import { useRef as useRef61 } from "react";
50411
- import { jsx as jsx121, jsxs as jsxs48, Fragment as Fragment19 } from "react/jsx-runtime";
50542
+ import { jsx as jsx121, jsxs as jsxs48, Fragment as Fragment18 } from "react/jsx-runtime";
50412
50543
  var MakeVideosInteractively = ({
50413
- title = /* @__PURE__ */ jsxs48(Fragment19, {
50544
+ title = /* @__PURE__ */ jsxs48(Fragment18, {
50414
50545
  children: [
50415
50546
  /* @__PURE__ */ jsx121("span", {
50416
50547
  className: "text-[var(--subtitle)]",
@@ -50428,13 +50559,15 @@ var MakeVideosInteractively = ({
50428
50559
  fallbackVideoSrc = "/img/editing-safari.mp4"
50429
50560
  }) => {
50430
50561
  const ref = useRef61(null);
50562
+ const src = useTransparentVideoSource({ fallbackVideoSrc, videoSrc });
50431
50563
  return /* @__PURE__ */ jsxs48("div", {
50432
50564
  ref,
50433
50565
  className: "flex min-w-0 basis-0 flex-col justify-start items-start lg:mt-0 flex-1",
50434
50566
  children: [
50435
50567
  /* @__PURE__ */ jsx121("div", {
50436
50568
  className: "flex aspect-square w-full items-start",
50437
- children: showVideo ? /* @__PURE__ */ jsxs48("video", {
50569
+ children: showVideo ? /* @__PURE__ */ jsx121("video", {
50570
+ src,
50438
50571
  autoPlay: true,
50439
50572
  muted: true,
50440
50573
  playsInline: true,
@@ -50447,17 +50580,7 @@ var MakeVideosInteractively = ({
50447
50580
  borderRadius: 7,
50448
50581
  overflow: "hidden"
50449
50582
  },
50450
- className: "object-contain",
50451
- children: [
50452
- /* @__PURE__ */ jsx121("source", {
50453
- src: fallbackVideoSrc,
50454
- type: "video/mp4"
50455
- }),
50456
- /* @__PURE__ */ jsx121("source", {
50457
- src: videoSrc,
50458
- type: "video/webm"
50459
- })
50460
- ]
50583
+ className: "object-contain"
50461
50584
  }) : null
50462
50585
  }),
50463
50586
  /* @__PURE__ */ jsxs48("div", {
@@ -50481,9 +50604,9 @@ var MakeVideosInteractively = ({
50481
50604
  };
50482
50605
 
50483
50606
  // src/components/homepage/MakeVideosProgrammatically.tsx
50484
- import { jsx as jsx125, jsxs as jsxs49, Fragment as Fragment20 } from "react/jsx-runtime";
50607
+ import { jsx as jsx125, jsxs as jsxs49, Fragment as Fragment19 } from "react/jsx-runtime";
50485
50608
  var MakeVideosProgrammatically = ({
50486
- title = /* @__PURE__ */ jsxs49(Fragment20, {
50609
+ title = /* @__PURE__ */ jsxs49(Fragment19, {
50487
50610
  children: [
50488
50611
  /* @__PURE__ */ jsx125("span", {
50489
50612
  className: "text-[var(--subtitle)]",
@@ -50500,28 +50623,20 @@ var MakeVideosProgrammatically = ({
50500
50623
  videoSrc = "/img/what-is-remotion.webm",
50501
50624
  fallbackVideoSrc = "/img/what-is-remotion.mp4"
50502
50625
  }) => {
50626
+ const src = useTransparentVideoSource({ fallbackVideoSrc, videoSrc });
50503
50627
  return /* @__PURE__ */ jsxs49("div", {
50504
50628
  className: "flex min-w-0 basis-0 flex-col flex-1",
50505
50629
  children: [
50506
50630
  /* @__PURE__ */ jsx125("div", {
50507
50631
  className: "flex aspect-square w-full items-start",
50508
- children: showVideo ? /* @__PURE__ */ jsxs49("video", {
50632
+ children: showVideo ? /* @__PURE__ */ jsx125("video", {
50633
+ src,
50509
50634
  muted: true,
50510
50635
  autoPlay: true,
50511
50636
  playsInline: true,
50512
50637
  loop: true,
50513
50638
  preload: "metadata",
50514
- className: "relative max-h-full max-w-full cursor-default! object-contain lg:mb-0 lg:mt-0",
50515
- children: [
50516
- /* @__PURE__ */ jsx125("source", {
50517
- src: fallbackVideoSrc,
50518
- type: "video/mp4"
50519
- }),
50520
- /* @__PURE__ */ jsx125("source", {
50521
- src: videoSrc,
50522
- type: "video/webm"
50523
- })
50524
- ]
50639
+ className: "relative max-h-full max-w-full cursor-default! object-contain lg:mb-0 lg:mt-0"
50525
50640
  }) : null
50526
50641
  }),
50527
50642
  /* @__PURE__ */ jsxs49("div", {
@@ -50545,12 +50660,12 @@ var MakeVideosProgrammatically = ({
50545
50660
  };
50546
50661
 
50547
50662
  // src/components/homepage/NewsletterButton.tsx
50548
- import { useCallback as useCallback56, useState as useState58 } from "react";
50663
+ import { useCallback as useCallback56, useState as useState60 } from "react";
50549
50664
  import { jsx as jsx127, jsxs as jsxs50 } from "react/jsx-runtime";
50550
50665
  var NewsletterButton = () => {
50551
- const [email, setEmail] = useState58("");
50552
- const [submitting, setSubmitting] = useState58(false);
50553
- const [subscribed, setSubscribed] = useState58(false);
50666
+ const [email, setEmail] = useState60("");
50667
+ const [submitting, setSubmitting] = useState60(false);
50668
+ const [subscribed, setSubscribed] = useState60(false);
50554
50669
  const handleSubmit = useCallback56(async (e) => {
50555
50670
  try {
50556
50671
  setSubmitting(true);
@@ -50633,7 +50748,7 @@ var NewsletterButton = () => {
50633
50748
  };
50634
50749
 
50635
50750
  // src/components/homepage/TrustedByBanner.tsx
50636
- import { jsx as jsx128, jsxs as jsxs51, Fragment as Fragment21 } from "react/jsx-runtime";
50751
+ import { jsx as jsx128, jsxs as jsxs51, Fragment as Fragment20 } from "react/jsx-runtime";
50637
50752
  var TrustedByBanner = () => {
50638
50753
  const logos = [
50639
50754
  {
@@ -50746,7 +50861,7 @@ var TrustedByBanner = () => {
50746
50861
  })
50747
50862
  }
50748
50863
  ];
50749
- return /* @__PURE__ */ jsxs51(Fragment21, {
50864
+ return /* @__PURE__ */ jsxs51(Fragment20, {
50750
50865
  children: [
50751
50866
  /* @__PURE__ */ jsx128("h3", {
50752
50867
  className: "text-center mt-20 mb-10",
@@ -50767,20 +50882,20 @@ var TrustedByBanner = () => {
50767
50882
  var TrustedByBanner_default = TrustedByBanner;
50768
50883
 
50769
50884
  // src/components/homepage/VideoAppsShowcase.tsx
50770
- import { useRef as useRef66, useState as useState60 } from "react";
50885
+ import { useRef as useRef66, useState as useState64 } from "react";
50771
50886
 
50772
50887
  // src/components/homepage/MuxVideo.tsx
50773
50888
  import Hls2 from "hls.js";
50774
- import { forwardRef as forwardRef41, useEffect as useEffect61, useImperativeHandle as useImperativeHandle15, useRef as useRef65 } from "react";
50889
+ import { forwardRef as forwardRef41, useEffect as useEffect65, useImperativeHandle as useImperativeHandle15, useRef as useRef65 } from "react";
50775
50890
 
50776
50891
  // src/components/homepage/VideoPlayerWithControls.tsx
50777
50892
  import Hls from "hls.js";
50778
50893
  import"plyr/dist/plyr.css";
50779
- import { forwardRef as forwardRef40, useCallback as useCallback57, useEffect as useEffect60, useRef as useRef63, useState as useState59 } from "react";
50894
+ import { forwardRef as forwardRef40, useCallback as useCallback57, useEffect as useEffect63, useRef as useRef63, useState as useState61 } from "react";
50780
50895
  import { jsx as jsx129 } from "react/jsx-runtime";
50781
50896
  var useCombinedRefs = function(...refs) {
50782
50897
  const targetRef = useRef63(null);
50783
- useEffect60(() => {
50898
+ useEffect63(() => {
50784
50899
  refs.forEach((ref) => {
50785
50900
  if (!ref)
50786
50901
  return;
@@ -50797,7 +50912,7 @@ var VideoPlayerWithControls = forwardRef40(({ playbackId, poster, currentTime, o
50797
50912
  const videoRef = useRef63(null);
50798
50913
  const metaRef = useCombinedRefs(ref, videoRef);
50799
50914
  const playerRef = useRef63(null);
50800
- const [playerInitTime] = useState59(Date.now());
50915
+ const [playerInitTime] = useState61(Date.now());
50801
50916
  const videoError = useCallback57((event) => onError(event), [onError]);
50802
50917
  const onImageLoad = useCallback57((event) => {
50803
50918
  const [w, h] = [event.target.width, event.target.height];
@@ -50809,12 +50924,12 @@ var VideoPlayerWithControls = forwardRef40(({ playbackId, poster, currentTime, o
50809
50924
  console.error("Error getting img dimensions", event);
50810
50925
  }
50811
50926
  }, [onLoaded, onSize]);
50812
- useEffect60(() => {
50927
+ useEffect63(() => {
50813
50928
  const img = new Image;
50814
50929
  img.onload = (evt) => onImageLoad(evt);
50815
50930
  img.src = poster;
50816
50931
  }, [onImageLoad, poster]);
50817
- useEffect60(() => {
50932
+ useEffect63(() => {
50818
50933
  const video = videoRef.current;
50819
50934
  const src = `https://stream.mux.com/${playbackId}.m3u8`;
50820
50935
  let hls;
@@ -50857,7 +50972,7 @@ var VideoPlayerWithControls = forwardRef40(({ playbackId, poster, currentTime, o
50857
50972
  }
50858
50973
  };
50859
50974
  }, [playbackId, playerInitTime, videoError, videoRef]);
50860
- useEffect60(() => {
50975
+ useEffect63(() => {
50861
50976
  const video = videoRef.current;
50862
50977
  if (currentTime && video) {
50863
50978
  video.currentTime = currentTime;
@@ -50884,7 +50999,7 @@ var MuxVideoForward = ({ muxId, ...props }, ref) => {
50884
50999
  const videoRef = useRef65(null);
50885
51000
  const vidUrl = getVideoToPlayUrl(muxId);
50886
51001
  useImperativeHandle15(ref, () => videoRef.current, []);
50887
- useEffect61(() => {
51002
+ useEffect65(() => {
50888
51003
  let hls;
50889
51004
  if (videoRef.current) {
50890
51005
  const { current } = videoRef;
@@ -50959,12 +51074,12 @@ var videoApps = [
50959
51074
  buttonText: "GitHub Unwrapped website"
50960
51075
  }
50961
51076
  ];
50962
- var icon4 = {
51077
+ var icon3 = {
50963
51078
  height: 16,
50964
51079
  marginLeft: 10
50965
51080
  };
50966
- var Arrow4 = () => /* @__PURE__ */ jsx131("svg", {
50967
- style: icon4,
51081
+ var Arrow3 = () => /* @__PURE__ */ jsx131("svg", {
51082
+ style: icon3,
50968
51083
  xmlns: "http://www.w3.org/2000/svg",
50969
51084
  viewBox: "0 0 448 512",
50970
51085
  children: /* @__PURE__ */ jsx131("path", {
@@ -50973,10 +51088,10 @@ var Arrow4 = () => /* @__PURE__ */ jsx131("svg", {
50973
51088
  })
50974
51089
  });
50975
51090
  var BuiltWithRemotionShowcase = () => {
50976
- const [activeTab, setActiveTab] = useState60(0);
50977
- const [isMuted, setIsMuted] = useState60(true);
50978
- const [isPlaying, setIsPlaying] = useState60(false);
50979
- const [videoLoaded, setVideoLoaded] = useState60(false);
51091
+ const [activeTab, setActiveTab] = useState64(0);
51092
+ const [isMuted, setIsMuted] = useState64(true);
51093
+ const [isPlaying, setIsPlaying] = useState64(false);
51094
+ const [videoLoaded, setVideoLoaded] = useState64(false);
50980
51095
  const videoRef = useRef66(null);
50981
51096
  const containerRef = useRef66(null);
50982
51097
  const handleTabChange = (index2) => {
@@ -51128,7 +51243,7 @@ var BuiltWithRemotionShowcase = () => {
51128
51243
  href: videoApps[activeTab].link,
51129
51244
  children: [
51130
51245
  videoApps[activeTab].buttonText,
51131
- /* @__PURE__ */ jsx131(Arrow4, {})
51246
+ /* @__PURE__ */ jsx131(Arrow3, {})
51132
51247
  ]
51133
51248
  })
51134
51249
  ]
@@ -51163,7 +51278,7 @@ var BuiltWithRemotionShowcase = () => {
51163
51278
  };
51164
51279
 
51165
51280
  // src/components/homepage/GetStartedStrip.tsx
51166
- import { useState as useState61 } from "react";
51281
+ import { useState as useState66 } from "react";
51167
51282
 
51168
51283
  // src/components/homepage/GitHubButton.tsx
51169
51284
  import { jsx as jsx134, jsxs as jsxs55 } from "react/jsx-runtime";
@@ -51198,7 +51313,7 @@ var GithubButton = () => {
51198
51313
  // src/components/homepage/GetStartedStrip.tsx
51199
51314
  import { jsx as jsx136, jsxs as jsxs56 } from "react/jsx-runtime";
51200
51315
  var GetStarted = () => {
51201
- const [clicked, setClicked] = useState61(null);
51316
+ const [clicked, setClicked] = useState66(null);
51202
51317
  return /* @__PURE__ */ jsxs56("div", {
51203
51318
  className: "flex flex-col lg:flex-row items-center justify-center text-center w-full",
51204
51319
  children: [
@@ -51342,13 +51457,44 @@ var NewLanding = ({ colorMode, setColorMode }) => {
51342
51457
  }),
51343
51458
  /* @__PURE__ */ jsx138("br", {}),
51344
51459
  /* @__PURE__ */ jsx138("br", {}),
51345
- /* @__PURE__ */ jsx138("br", {}),
51346
- /* @__PURE__ */ jsx138("div", {
51347
- className: "pt-6 md:pt-8",
51348
- children: /* @__PURE__ */ jsx138(AutomationsSection_default, {})
51460
+ /* @__PURE__ */ jsxs58("div", {
51461
+ className: makeVideosRowClassName,
51462
+ children: [
51463
+ /* @__PURE__ */ jsx138(MakeVideosProgrammatically, {
51464
+ title: "Design systems",
51465
+ description: "Create a library of animated assets for your organization.",
51466
+ videoSrc: "/img/design-systems.webm",
51467
+ fallbackVideoSrc: "/img/design-systems.mp4",
51468
+ links: [
51469
+ { label: "Motion design systems", href: "/design-systems" }
51470
+ ]
51471
+ }),
51472
+ /* @__PURE__ */ jsx138(MakeVideosAgentically, {
51473
+ title: "Batch rendering",
51474
+ description: "Render millions of videos on your own infrastructure.",
51475
+ links: [
51476
+ {
51477
+ label: "Server-side rendering",
51478
+ href: "/docs/compare-ssr"
51479
+ },
51480
+ {
51481
+ label: "Client-side rendering",
51482
+ href: "/docs/client-side-rendering"
51483
+ }
51484
+ ]
51485
+ }),
51486
+ /* @__PURE__ */ jsx138(MakeVideosInteractively, {
51487
+ title: "Applications",
51488
+ description: "Publish a simple tool or a complex video editor.",
51489
+ videoSrc: "/img/applications.webm",
51490
+ fallbackVideoSrc: "/img/applications.mp4",
51491
+ links: [
51492
+ { label: "Player", href: "/docs/player" },
51493
+ { label: "Editor Starter", href: "/editor-starter" }
51494
+ ]
51495
+ })
51496
+ ]
51349
51497
  }),
51350
- /* @__PURE__ */ jsx138("br", {}),
51351
- /* @__PURE__ */ jsx138("br", {}),
51352
51498
  /* @__PURE__ */ jsx138(Demo, {}),
51353
51499
  /* @__PURE__ */ jsx138("br", {}),
51354
51500
  /* @__PURE__ */ jsx138("br", {}),