@remotion/studio 4.0.401 → 4.0.403

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.
@@ -29,7 +29,7 @@ import { Internals as Internals65 } from "remotion";
29
29
 
30
30
  // src/components/Editor.tsx
31
31
  import { PlayerInternals as PlayerInternals19 } from "@remotion/player";
32
- import React176, { useCallback as useCallback134, useEffect as useEffect80, useMemo as useMemo136 } from "react";
32
+ import React177, { useCallback as useCallback134, useEffect as useEffect82, useMemo as useMemo137 } from "react";
33
33
  import { Internals as Internals61 } from "remotion";
34
34
 
35
35
  // src/helpers/colors.ts
@@ -1894,7 +1894,8 @@ var MenuSubItem = ({
1894
1894
  subMenu,
1895
1895
  onQuitMenu,
1896
1896
  subMenuActivated,
1897
- setSubMenuActivated
1897
+ setSubMenuActivated,
1898
+ disabled
1898
1899
  }) => {
1899
1900
  const [hovered, setHovered] = useState10(false);
1900
1901
  const ref = useRef6(null);
@@ -1907,21 +1908,29 @@ var MenuSubItem = ({
1907
1908
  const style = useMemo14(() => {
1908
1909
  return {
1909
1910
  ...container4,
1910
- backgroundColor: selected ? CLEAR_HOVER : "transparent"
1911
+ backgroundColor: selected && !disabled ? CLEAR_HOVER : "transparent",
1912
+ opacity: disabled ? 0.5 : 1,
1913
+ cursor: disabled ? "not-allowed" : "default"
1911
1914
  };
1912
- }, [selected]);
1915
+ }, [selected, disabled]);
1913
1916
  const onPointerUp = useCallback8((e) => {
1917
+ if (disabled) {
1918
+ return;
1919
+ }
1914
1920
  if (subMenu) {
1915
1921
  setSubMenuActivated("with-mouse");
1916
1922
  setHovered(true);
1917
1923
  return;
1918
1924
  }
1919
1925
  onActionChosen(id, e);
1920
- }, [id, onActionChosen, setSubMenuActivated, subMenu]);
1926
+ }, [disabled, id, onActionChosen, setSubMenuActivated, subMenu]);
1921
1927
  const onPointerEnter = useCallback8(() => {
1928
+ if (disabled) {
1929
+ return;
1930
+ }
1922
1931
  onItemSelected(id);
1923
1932
  setHovered(true);
1924
- }, [id, onItemSelected]);
1933
+ }, [disabled, id, onItemSelected]);
1925
1934
  const onPointerLeave = useCallback8(() => {
1926
1935
  setHovered(false);
1927
1936
  }, []);
@@ -2040,6 +2049,9 @@ var MenuContent = ({
2040
2049
  const onItemSelected = useCallback9((id) => {
2041
2050
  setSelectedItem(id);
2042
2051
  }, []);
2052
+ const isItemSelectable = useCallback9((v) => {
2053
+ return v.type !== "divider" && !v.disabled;
2054
+ }, []);
2043
2055
  const onArrowUp = useCallback9(() => {
2044
2056
  setSelectedItem((prevItem) => {
2045
2057
  if (prevItem === null) {
@@ -2049,31 +2061,31 @@ var MenuContent = ({
2049
2061
  if (topItemCanBeUnselected && index === 0 || prevItem === null) {
2050
2062
  return null;
2051
2063
  }
2052
- const previousItems = values.filter((v, i) => i < index && v.type !== "divider");
2064
+ const previousItems = values.filter((v, i) => i < index && isItemSelectable(v));
2053
2065
  if (previousItems.length > 0) {
2054
2066
  return previousItems[previousItems.length - 1].id;
2055
2067
  }
2056
- const firstNonDivider = values.find((v) => v.type !== "divider");
2057
- if (firstNonDivider) {
2058
- return firstNonDivider.id;
2068
+ const firstSelectable = values.find((v) => isItemSelectable(v));
2069
+ if (firstSelectable) {
2070
+ return firstSelectable.id;
2059
2071
  }
2060
2072
  throw new Error("could not find previous item");
2061
2073
  });
2062
- }, [topItemCanBeUnselected, values]);
2074
+ }, [topItemCanBeUnselected, values, isItemSelectable]);
2063
2075
  const onArrowDown = useCallback9(() => {
2064
2076
  setSelectedItem((prevItem) => {
2065
2077
  const index = values.findIndex((val) => val.id === prevItem);
2066
- const nextItem = values.find((v, i) => i > index && v.type !== "divider");
2078
+ const nextItem = values.find((v, i) => i > index && isItemSelectable(v));
2067
2079
  if (nextItem) {
2068
2080
  return nextItem.id;
2069
2081
  }
2070
- const lastNonDivider = values.slice().reverse().find((v) => v.type !== "divider");
2071
- if (lastNonDivider) {
2072
- return lastNonDivider.id;
2082
+ const lastSelectable = values.slice().reverse().find((v) => isItemSelectable(v));
2083
+ if (lastSelectable) {
2084
+ return lastSelectable.id;
2073
2085
  }
2074
2086
  throw new Error("could not find next item");
2075
2087
  });
2076
- }, [values]);
2088
+ }, [values, isItemSelectable]);
2077
2089
  const onEnter = useCallback9(() => {
2078
2090
  if (selectedItem === null) {
2079
2091
  return onHide();
@@ -2085,6 +2097,9 @@ var MenuContent = ({
2085
2097
  if (item.type === "divider") {
2086
2098
  throw new Error("cannot find divider");
2087
2099
  }
2100
+ if (item.disabled) {
2101
+ return;
2102
+ }
2088
2103
  if (item.subMenu) {
2089
2104
  return setSubMenuActivated("without-mouse");
2090
2105
  }
@@ -2262,7 +2277,8 @@ var MenuContent = ({
2262
2277
  onQuitMenu: onHide,
2263
2278
  onNextMenu,
2264
2279
  subMenuActivated,
2265
- setSubMenuActivated
2280
+ setSubMenuActivated,
2281
+ disabled: item.disabled
2266
2282
  }, item.id);
2267
2283
  })
2268
2284
  });
@@ -42315,8 +42331,12 @@ var RenderModalWithLoader = (props) => {
42315
42331
 
42316
42332
  // src/components/RenderModal/WebRenderModal.tsx
42317
42333
  import { getDefaultOutLocation as getDefaultOutLocation2 } from "@remotion/studio-shared";
42318
- import { renderMediaOnWeb, renderStillOnWeb } from "@remotion/web-renderer";
42319
- import { useCallback as useCallback130, useContext as useContext82, useMemo as useMemo133, useState as useState81 } from "react";
42334
+ import {
42335
+ getDefaultAudioCodecForContainer,
42336
+ renderMediaOnWeb,
42337
+ renderStillOnWeb
42338
+ } from "@remotion/web-renderer";
42339
+ import { useCallback as useCallback130, useContext as useContext82, useMemo as useMemo134, useState as useState83 } from "react";
42320
42340
 
42321
42341
  // src/icons/certificate.tsx
42322
42342
  import { jsx as jsx256 } from "react/jsx-runtime";
@@ -42330,6 +42350,90 @@ var CertificateIcon = (props) => /* @__PURE__ */ jsx256("svg", {
42330
42350
  })
42331
42351
  });
42332
42352
 
42353
+ // src/components/RenderModal/use-encodable-audio-codecs.ts
42354
+ import {
42355
+ getEncodableAudioCodecs,
42356
+ getSupportedAudioCodecsForContainer
42357
+ } from "@remotion/web-renderer";
42358
+ import { useEffect as useEffect79, useRef as useRef44, useState as useState81 } from "react";
42359
+ var useEncodableAudioCodecs = (container60) => {
42360
+ const cacheRef = useRef44({});
42361
+ const [codecsByContainer, setCodecsByContainer] = useState81(() => {
42362
+ return {
42363
+ [container60]: getSupportedAudioCodecsForContainer(container60)
42364
+ };
42365
+ });
42366
+ useEffect79(() => {
42367
+ const cached = cacheRef.current[container60];
42368
+ if (cached) {
42369
+ return;
42370
+ }
42371
+ const supported = getSupportedAudioCodecsForContainer(container60);
42372
+ cacheRef.current[container60] = {
42373
+ codecs: supported,
42374
+ status: "fetching"
42375
+ };
42376
+ getEncodableAudioCodecs(container60).then((encodable) => {
42377
+ cacheRef.current[container60] = {
42378
+ codecs: encodable,
42379
+ status: "done"
42380
+ };
42381
+ setCodecsByContainer((prev) => ({
42382
+ ...prev,
42383
+ [container60]: encodable
42384
+ }));
42385
+ }).catch(() => {
42386
+ cacheRef.current[container60] = {
42387
+ codecs: supported,
42388
+ status: "done"
42389
+ };
42390
+ });
42391
+ }, [container60]);
42392
+ return codecsByContainer[container60] ?? getSupportedAudioCodecsForContainer(container60);
42393
+ };
42394
+
42395
+ // src/components/RenderModal/use-encodable-video-codecs.ts
42396
+ import {
42397
+ getEncodableVideoCodecs,
42398
+ getSupportedVideoCodecsForContainer
42399
+ } from "@remotion/web-renderer";
42400
+ import { useEffect as useEffect80, useRef as useRef45, useState as useState82 } from "react";
42401
+ var useEncodableVideoCodecs = (container60) => {
42402
+ const cacheRef = useRef45({});
42403
+ const [codecsByContainer, setCodecsByContainer] = useState82(() => {
42404
+ return {
42405
+ [container60]: getSupportedVideoCodecsForContainer(container60)
42406
+ };
42407
+ });
42408
+ useEffect80(() => {
42409
+ const cached = cacheRef.current[container60];
42410
+ if (cached) {
42411
+ return;
42412
+ }
42413
+ const supported = getSupportedVideoCodecsForContainer(container60);
42414
+ cacheRef.current[container60] = {
42415
+ codecs: supported,
42416
+ status: "fetching"
42417
+ };
42418
+ getEncodableVideoCodecs(container60).then((encodable) => {
42419
+ cacheRef.current[container60] = {
42420
+ codecs: encodable,
42421
+ status: "done"
42422
+ };
42423
+ setCodecsByContainer((prev) => ({
42424
+ ...prev,
42425
+ [container60]: encodable
42426
+ }));
42427
+ }).catch(() => {
42428
+ cacheRef.current[container60] = {
42429
+ codecs: supported,
42430
+ status: "done"
42431
+ };
42432
+ });
42433
+ }, [container60]);
42434
+ return codecsByContainer[container60] ?? getSupportedVideoCodecsForContainer(container60);
42435
+ };
42436
+
42333
42437
  // src/components/RenderModal/WebRendererExperimentalBadge.tsx
42334
42438
  import { jsx as jsx257, jsxs as jsxs135 } from "react/jsx-runtime";
42335
42439
  var row8 = {
@@ -42533,26 +42637,165 @@ var WebRenderModalAdvanced = ({
42533
42637
  };
42534
42638
 
42535
42639
  // src/components/RenderModal/WebRenderModalAudio.tsx
42640
+ import { getSupportedAudioCodecsForContainer as getSupportedAudioCodecsForContainer2 } from "@remotion/web-renderer";
42641
+ import { useMemo as useMemo130 } from "react";
42642
+
42643
+ // src/components/RenderModal/quality-options.tsx
42536
42644
  import { jsx as jsx259 } from "react/jsx-runtime";
42645
+ var QUALITY_OPTIONS = [
42646
+ { value: "very-low", label: "Very Low" },
42647
+ { value: "low", label: "Low" },
42648
+ { value: "medium", label: "Medium" },
42649
+ { value: "high", label: "High" },
42650
+ { value: "very-high", label: "Very High" }
42651
+ ];
42652
+ var getQualityOptions = (selectedQuality, setQuality) => {
42653
+ return QUALITY_OPTIONS.map(({ value, label: label11 }) => ({
42654
+ label: label11,
42655
+ onClick: () => setQuality(value),
42656
+ leftItem: selectedQuality === value ? /* @__PURE__ */ jsx259(Checkmark, {}) : null,
42657
+ id: value,
42658
+ keyHint: null,
42659
+ quickSwitcherLabel: null,
42660
+ subMenu: null,
42661
+ type: "item",
42662
+ value
42663
+ }));
42664
+ };
42665
+
42666
+ // src/components/RenderModal/WebRenderModalAudio.tsx
42667
+ import { jsx as jsx260, jsxs as jsxs137, Fragment as Fragment45 } from "react/jsx-runtime";
42537
42668
  var container60 = {
42538
42669
  flex: 1,
42539
42670
  overflowY: "auto"
42540
42671
  };
42541
- var WebRenderModalAudio = ({ muted, setMuted }) => {
42542
- return /* @__PURE__ */ jsx259("div", {
42672
+ var fallbackNoticeStyle = {
42673
+ backgroundColor: "rgba(59, 130, 246, 0.15)",
42674
+ border: "1px solid rgba(59, 130, 246, 0.4)",
42675
+ borderRadius: 4,
42676
+ padding: "8px 12px",
42677
+ marginLeft: 16,
42678
+ marginRight: 16,
42679
+ marginTop: 8,
42680
+ fontSize: 13,
42681
+ lineHeight: 1.4,
42682
+ color: "#60a5fa"
42683
+ };
42684
+ var humanReadableWebAudioCodec = (audioCodec) => {
42685
+ switch (audioCodec) {
42686
+ case "aac":
42687
+ return "AAC";
42688
+ case "opus":
42689
+ return "Opus";
42690
+ default:
42691
+ return audioCodec;
42692
+ }
42693
+ };
42694
+ var WebRenderModalAudio = ({
42695
+ muted,
42696
+ setMuted,
42697
+ audioCodec,
42698
+ setAudioCodec,
42699
+ audioBitrate,
42700
+ setAudioBitrate,
42701
+ container: videoContainer,
42702
+ encodableCodecs,
42703
+ effectiveAudioCodec
42704
+ }) => {
42705
+ const containerSupported = useMemo130(() => getSupportedAudioCodecsForContainer2(videoContainer), [videoContainer]);
42706
+ const audioCodecOptions = useMemo130(() => {
42707
+ return containerSupported.map((codec) => {
42708
+ const isEncodable = encodableCodecs.includes(codec);
42709
+ return {
42710
+ label: humanReadableWebAudioCodec(codec),
42711
+ onClick: () => setAudioCodec(codec),
42712
+ leftItem: audioCodec === codec ? /* @__PURE__ */ jsx260(Checkmark, {}) : null,
42713
+ id: codec,
42714
+ keyHint: null,
42715
+ quickSwitcherLabel: null,
42716
+ subMenu: null,
42717
+ type: "item",
42718
+ value: codec,
42719
+ disabled: !isEncodable
42720
+ };
42721
+ });
42722
+ }, [containerSupported, encodableCodecs, audioCodec, setAudioCodec]);
42723
+ const audioBitrateOptions = useMemo130(() => getQualityOptions(audioBitrate, setAudioBitrate), [audioBitrate, setAudioBitrate]);
42724
+ return /* @__PURE__ */ jsxs137("div", {
42543
42725
  style: container60,
42544
42726
  className: VERTICAL_SCROLLBAR_CLASSNAME,
42545
- children: /* @__PURE__ */ jsx259(MutedSetting, {
42546
- enforceAudioTrack: false,
42547
- muted,
42548
- setMuted
42549
- })
42727
+ children: [
42728
+ /* @__PURE__ */ jsx260(MutedSetting, {
42729
+ enforceAudioTrack: false,
42730
+ muted,
42731
+ setMuted
42732
+ }),
42733
+ !muted ? /* @__PURE__ */ jsxs137(Fragment45, {
42734
+ children: [
42735
+ /* @__PURE__ */ jsx260(RenderModalHr, {}),
42736
+ /* @__PURE__ */ jsxs137("div", {
42737
+ style: optionRow,
42738
+ children: [
42739
+ /* @__PURE__ */ jsxs137("div", {
42740
+ style: label5,
42741
+ children: [
42742
+ "Audio Quality",
42743
+ /* @__PURE__ */ jsx260(Spacing, {
42744
+ x: 0.5
42745
+ })
42746
+ ]
42747
+ }),
42748
+ /* @__PURE__ */ jsx260("div", {
42749
+ style: rightRow,
42750
+ children: /* @__PURE__ */ jsx260(Combobox, {
42751
+ values: audioBitrateOptions,
42752
+ selectedId: audioBitrate,
42753
+ title: "Audio Quality"
42754
+ })
42755
+ })
42756
+ ]
42757
+ }),
42758
+ /* @__PURE__ */ jsxs137("div", {
42759
+ style: optionRow,
42760
+ children: [
42761
+ /* @__PURE__ */ jsxs137("div", {
42762
+ style: label5,
42763
+ children: [
42764
+ "Audio Codec",
42765
+ /* @__PURE__ */ jsx260(Spacing, {
42766
+ x: 0.5
42767
+ })
42768
+ ]
42769
+ }),
42770
+ /* @__PURE__ */ jsx260("div", {
42771
+ style: rightRow,
42772
+ children: /* @__PURE__ */ jsx260(Combobox, {
42773
+ values: audioCodecOptions,
42774
+ selectedId: audioCodec,
42775
+ title: "Audio Codec"
42776
+ })
42777
+ })
42778
+ ]
42779
+ }),
42780
+ effectiveAudioCodec !== audioCodec ? /* @__PURE__ */ jsxs137("div", {
42781
+ style: fallbackNoticeStyle,
42782
+ children: [
42783
+ humanReadableWebAudioCodec(audioCodec),
42784
+ " is not available in this browser. Using ",
42785
+ humanReadableWebAudioCodec(effectiveAudioCodec),
42786
+ " ",
42787
+ "instead."
42788
+ ]
42789
+ }) : null
42790
+ ]
42791
+ }) : null
42792
+ ]
42550
42793
  });
42551
42794
  };
42552
42795
 
42553
42796
  // src/components/RenderModal/WebRenderModalBasic.tsx
42554
- import { useMemo as useMemo130 } from "react";
42555
- import { jsx as jsx260, jsxs as jsxs137, Fragment as Fragment45 } from "react/jsx-runtime";
42797
+ import { useMemo as useMemo131 } from "react";
42798
+ import { jsx as jsx261, jsxs as jsxs138, Fragment as Fragment46 } from "react/jsx-runtime";
42556
42799
  var tabContainer2 = {
42557
42800
  flex: 1
42558
42801
  };
@@ -42566,8 +42809,9 @@ var WebRenderModalBasic = ({
42566
42809
  onFrameSetDirectly,
42567
42810
  container: container61,
42568
42811
  setContainerFormat,
42569
- codec,
42570
42812
  setCodec,
42813
+ encodableVideoCodecs,
42814
+ effectiveVideoCodec,
42571
42815
  startFrame,
42572
42816
  setStartFrame,
42573
42817
  endFrame,
@@ -42578,7 +42822,7 @@ var WebRenderModalBasic = ({
42578
42822
  logLevel,
42579
42823
  setLogLevel
42580
42824
  }) => {
42581
- const imageFormatOptions = useMemo130(() => {
42825
+ const imageFormatOptions = useMemo131(() => {
42582
42826
  return [
42583
42827
  {
42584
42828
  label: "PNG",
@@ -42600,12 +42844,12 @@ var WebRenderModalBasic = ({
42600
42844
  }
42601
42845
  ];
42602
42846
  }, [imageFormat, setStillFormat]);
42603
- const logLevelOptions = useMemo130(() => {
42847
+ const logLevelOptions = useMemo131(() => {
42604
42848
  return ["trace", "verbose", "info", "warn", "error"].map((level) => {
42605
42849
  return {
42606
42850
  label: humanReadableLogLevel(level),
42607
42851
  onClick: () => setLogLevel(level),
42608
- leftItem: logLevel === level ? /* @__PURE__ */ jsx260(Checkmark, {}) : null,
42852
+ leftItem: logLevel === level ? /* @__PURE__ */ jsx261(Checkmark, {}) : null,
42609
42853
  id: level,
42610
42854
  keyHint: null,
42611
42855
  quickSwitcherLabel: null,
@@ -42615,12 +42859,12 @@ var WebRenderModalBasic = ({
42615
42859
  };
42616
42860
  });
42617
42861
  }, [logLevel, setLogLevel]);
42618
- const containerOptions = useMemo130(() => {
42862
+ const containerOptions = useMemo131(() => {
42619
42863
  return [
42620
42864
  {
42621
42865
  label: "MP4",
42622
42866
  onClick: () => setContainerFormat("mp4"),
42623
- leftItem: container61 === "mp4" ? /* @__PURE__ */ jsx260(Checkmark, {}) : null,
42867
+ leftItem: container61 === "mp4" ? /* @__PURE__ */ jsx261(Checkmark, {}) : null,
42624
42868
  id: "mp4",
42625
42869
  keyHint: null,
42626
42870
  quickSwitcherLabel: null,
@@ -42631,7 +42875,7 @@ var WebRenderModalBasic = ({
42631
42875
  {
42632
42876
  label: "WebM",
42633
42877
  onClick: () => setContainerFormat("webm"),
42634
- leftItem: container61 === "webm" ? /* @__PURE__ */ jsx260(Checkmark, {}) : null,
42878
+ leftItem: container61 === "webm" ? /* @__PURE__ */ jsx261(Checkmark, {}) : null,
42635
42879
  id: "webm",
42636
42880
  keyHint: null,
42637
42881
  quickSwitcherLabel: null,
@@ -42641,97 +42885,58 @@ var WebRenderModalBasic = ({
42641
42885
  }
42642
42886
  ];
42643
42887
  }, [container61, setContainerFormat]);
42644
- const codecOptions = useMemo130(() => {
42645
- return [
42646
- {
42647
- label: "H.264",
42648
- onClick: () => setCodec("h264"),
42649
- leftItem: codec === "h264" ? /* @__PURE__ */ jsx260(Checkmark, {}) : null,
42650
- id: "h264",
42651
- keyHint: null,
42652
- quickSwitcherLabel: null,
42653
- subMenu: null,
42654
- type: "item",
42655
- value: "h264"
42656
- },
42657
- {
42658
- label: "H.265",
42659
- onClick: () => setCodec("h265"),
42660
- leftItem: codec === "h265" ? /* @__PURE__ */ jsx260(Checkmark, {}) : null,
42661
- id: "h265",
42662
- keyHint: null,
42663
- quickSwitcherLabel: null,
42664
- subMenu: null,
42665
- type: "item",
42666
- value: "h265"
42667
- },
42668
- {
42669
- label: "VP8",
42670
- onClick: () => setCodec("vp8"),
42671
- leftItem: codec === "vp8" ? /* @__PURE__ */ jsx260(Checkmark, {}) : null,
42672
- id: "vp8",
42673
- keyHint: null,
42674
- quickSwitcherLabel: null,
42675
- subMenu: null,
42676
- type: "item",
42677
- value: "vp8"
42678
- },
42679
- {
42680
- label: "VP9",
42681
- onClick: () => setCodec("vp9"),
42682
- leftItem: codec === "vp9" ? /* @__PURE__ */ jsx260(Checkmark, {}) : null,
42683
- id: "vp9",
42684
- keyHint: null,
42685
- quickSwitcherLabel: null,
42686
- subMenu: null,
42687
- type: "item",
42688
- value: "vp9"
42689
- },
42690
- {
42691
- label: "AV1",
42692
- onClick: () => setCodec("av1"),
42693
- leftItem: codec === "av1" ? /* @__PURE__ */ jsx260(Checkmark, {}) : null,
42694
- id: "av1",
42695
- keyHint: null,
42696
- quickSwitcherLabel: null,
42697
- subMenu: null,
42698
- type: "item",
42699
- value: "av1"
42700
- }
42701
- ];
42702
- }, [codec, setCodec]);
42703
- return /* @__PURE__ */ jsxs137("div", {
42888
+ const codecLabels = useMemo131(() => ({
42889
+ h264: "H.264",
42890
+ h265: "H.265",
42891
+ vp8: "VP8",
42892
+ vp9: "VP9",
42893
+ av1: "AV1"
42894
+ }), []);
42895
+ const codecOptions = useMemo131(() => {
42896
+ return encodableVideoCodecs.map((c) => ({
42897
+ label: codecLabels[c],
42898
+ onClick: () => setCodec(c),
42899
+ leftItem: effectiveVideoCodec === c ? /* @__PURE__ */ jsx261(Checkmark, {}) : null,
42900
+ id: c,
42901
+ keyHint: null,
42902
+ quickSwitcherLabel: null,
42903
+ subMenu: null,
42904
+ type: "item",
42905
+ value: c
42906
+ }));
42907
+ }, [encodableVideoCodecs, effectiveVideoCodec, setCodec, codecLabels]);
42908
+ return /* @__PURE__ */ jsxs138("div", {
42704
42909
  style: tabContainer2,
42705
42910
  children: [
42706
- renderMode === "still" ? /* @__PURE__ */ jsxs137(Fragment45, {
42911
+ renderMode === "still" ? /* @__PURE__ */ jsxs138(Fragment46, {
42707
42912
  children: [
42708
- /* @__PURE__ */ jsxs137("div", {
42913
+ /* @__PURE__ */ jsxs138("div", {
42709
42914
  style: optionRow,
42710
42915
  children: [
42711
- /* @__PURE__ */ jsx260("div", {
42916
+ /* @__PURE__ */ jsx261("div", {
42712
42917
  style: label5,
42713
42918
  children: "Format"
42714
42919
  }),
42715
- /* @__PURE__ */ jsx260("div", {
42920
+ /* @__PURE__ */ jsx261("div", {
42716
42921
  style: rightRow,
42717
- children: /* @__PURE__ */ jsx260(SegmentedControl, {
42922
+ children: /* @__PURE__ */ jsx261(SegmentedControl, {
42718
42923
  items: imageFormatOptions,
42719
42924
  needsWrapping: true
42720
42925
  })
42721
42926
  })
42722
42927
  ]
42723
42928
  }),
42724
- resolvedComposition.durationInFrames > 1 ? /* @__PURE__ */ jsxs137("div", {
42929
+ resolvedComposition.durationInFrames > 1 ? /* @__PURE__ */ jsxs138("div", {
42725
42930
  style: optionRow,
42726
42931
  children: [
42727
- /* @__PURE__ */ jsx260("div", {
42932
+ /* @__PURE__ */ jsx261("div", {
42728
42933
  style: label5,
42729
42934
  children: "Frame"
42730
42935
  }),
42731
- /* @__PURE__ */ jsx260("div", {
42936
+ /* @__PURE__ */ jsx261("div", {
42732
42937
  style: rightRow,
42733
- children: /* @__PURE__ */ jsx260(RightAlignInput, {
42734
- children: /* @__PURE__ */ jsx260(InputDragger, {
42938
+ children: /* @__PURE__ */ jsx261(RightAlignInput, {
42939
+ children: /* @__PURE__ */ jsx261(InputDragger, {
42735
42940
  value: frame2,
42736
42941
  onTextChange: onFrameChanged,
42737
42942
  placeholder: `0-${resolvedComposition.durationInFrames - 1}`,
@@ -42748,18 +42953,18 @@ var WebRenderModalBasic = ({
42748
42953
  ]
42749
42954
  }) : null
42750
42955
  ]
42751
- }) : /* @__PURE__ */ jsxs137(Fragment45, {
42956
+ }) : /* @__PURE__ */ jsxs138(Fragment46, {
42752
42957
  children: [
42753
- /* @__PURE__ */ jsxs137("div", {
42958
+ /* @__PURE__ */ jsxs138("div", {
42754
42959
  style: optionRow,
42755
42960
  children: [
42756
- /* @__PURE__ */ jsx260("div", {
42961
+ /* @__PURE__ */ jsx261("div", {
42757
42962
  style: label5,
42758
42963
  children: "Container"
42759
42964
  }),
42760
- /* @__PURE__ */ jsx260("div", {
42965
+ /* @__PURE__ */ jsx261("div", {
42761
42966
  style: rightRow,
42762
- children: /* @__PURE__ */ jsx260(Combobox, {
42967
+ children: /* @__PURE__ */ jsx261(Combobox, {
42763
42968
  values: containerOptions,
42764
42969
  selectedId: container61,
42765
42970
  title: "Container"
@@ -42767,32 +42972,32 @@ var WebRenderModalBasic = ({
42767
42972
  })
42768
42973
  ]
42769
42974
  }),
42770
- /* @__PURE__ */ jsxs137("div", {
42975
+ /* @__PURE__ */ jsxs138("div", {
42771
42976
  style: optionRow,
42772
42977
  children: [
42773
- /* @__PURE__ */ jsxs137("div", {
42978
+ /* @__PURE__ */ jsxs138("div", {
42774
42979
  style: label5,
42775
42980
  children: [
42776
42981
  "Codec",
42777
- /* @__PURE__ */ jsx260(Spacing, {
42982
+ /* @__PURE__ */ jsx261(Spacing, {
42778
42983
  x: 0.5
42779
42984
  }),
42780
- /* @__PURE__ */ jsx260(OptionExplainerBubble, {
42985
+ /* @__PURE__ */ jsx261(OptionExplainerBubble, {
42781
42986
  id: "videoCodecOption"
42782
42987
  })
42783
42988
  ]
42784
42989
  }),
42785
- /* @__PURE__ */ jsx260("div", {
42990
+ /* @__PURE__ */ jsx261("div", {
42786
42991
  style: rightRow,
42787
- children: /* @__PURE__ */ jsx260(Combobox, {
42992
+ children: /* @__PURE__ */ jsx261(Combobox, {
42788
42993
  values: codecOptions,
42789
- selectedId: codec,
42994
+ selectedId: effectiveVideoCodec,
42790
42995
  title: "Codec"
42791
42996
  })
42792
42997
  })
42793
42998
  ]
42794
42999
  }),
42795
- /* @__PURE__ */ jsx260(FrameRangeSetting, {
43000
+ /* @__PURE__ */ jsx261(FrameRangeSetting, {
42796
43001
  durationInFrames: resolvedComposition.durationInFrames,
42797
43002
  startFrame: startFrame ?? 0,
42798
43003
  endFrame: endFrame ?? resolvedComposition.durationInFrames - 1,
@@ -42801,7 +43006,7 @@ var WebRenderModalBasic = ({
42801
43006
  })
42802
43007
  ]
42803
43008
  }),
42804
- /* @__PURE__ */ jsx260(RenderModalOutputName, {
43009
+ /* @__PURE__ */ jsx261(RenderModalOutputName, {
42805
43010
  existence: false,
42806
43011
  inputStyle: input,
42807
43012
  outName,
@@ -42809,24 +43014,24 @@ var WebRenderModalBasic = ({
42809
43014
  validationMessage,
42810
43015
  label: "Download name"
42811
43016
  }),
42812
- /* @__PURE__ */ jsxs137("div", {
43017
+ /* @__PURE__ */ jsxs138("div", {
42813
43018
  style: optionRow,
42814
43019
  children: [
42815
- /* @__PURE__ */ jsxs137("div", {
43020
+ /* @__PURE__ */ jsxs138("div", {
42816
43021
  style: label5,
42817
43022
  children: [
42818
43023
  "Log Level ",
42819
- /* @__PURE__ */ jsx260(Spacing, {
43024
+ /* @__PURE__ */ jsx261(Spacing, {
42820
43025
  x: 0.5
42821
43026
  }),
42822
- /* @__PURE__ */ jsx260(OptionExplainerBubble, {
43027
+ /* @__PURE__ */ jsx261(OptionExplainerBubble, {
42823
43028
  id: "logLevelOption"
42824
43029
  })
42825
43030
  ]
42826
43031
  }),
42827
- /* @__PURE__ */ jsx260("div", {
43032
+ /* @__PURE__ */ jsx261("div", {
42828
43033
  style: rightRow,
42829
- children: /* @__PURE__ */ jsx260(Combobox, {
43034
+ children: /* @__PURE__ */ jsx261(Combobox, {
42830
43035
  values: logLevelOptions,
42831
43036
  selectedId: logLevel,
42832
43037
  title: "Log Level"
@@ -42839,8 +43044,8 @@ var WebRenderModalBasic = ({
42839
43044
  };
42840
43045
 
42841
43046
  // src/components/RenderModal/WebRenderModalLicense.tsx
42842
- import { useCallback as useCallback128, useMemo as useMemo131 } from "react";
42843
- import { jsx as jsx261, jsxs as jsxs138, Fragment as Fragment46 } from "react/jsx-runtime";
43047
+ import { useCallback as useCallback128, useMemo as useMemo132 } from "react";
43048
+ import { jsx as jsx262, jsxs as jsxs139, Fragment as Fragment47 } from "react/jsx-runtime";
42844
43049
  var row9 = {
42845
43050
  display: "flex",
42846
43051
  flexDirection: "row",
@@ -42954,21 +43159,21 @@ var WebRenderModalLicense = ({
42954
43159
  const onLicenseKeyChange = useCallback128((e) => {
42955
43160
  setLicenseKey(e.target.value);
42956
43161
  }, [setLicenseKey]);
42957
- const licenseValidation = useMemo131(() => {
43162
+ const licenseValidation = useMemo132(() => {
42958
43163
  if (licenseKey === null || licenseKey === "free-license") {
42959
43164
  return { valid: true, message: null };
42960
43165
  }
42961
43166
  return validateLicenseKey(licenseKey);
42962
43167
  }, [licenseKey]);
42963
- return /* @__PURE__ */ jsxs138("div", {
43168
+ return /* @__PURE__ */ jsxs139("div", {
42964
43169
  style: tabContainer3,
42965
43170
  children: [
42966
- /* @__PURE__ */ jsxs138("div", {
43171
+ /* @__PURE__ */ jsxs139("div", {
42967
43172
  style: descriptionStyle,
42968
43173
  children: [
42969
43174
  "Remotion is free if you are an individual or company with a headcount of 3 or less. See",
42970
43175
  " ",
42971
- /* @__PURE__ */ jsx261("a", {
43176
+ /* @__PURE__ */ jsx262("a", {
42972
43177
  style: descriptionLink,
42973
43178
  href: "https://remotion.dev/license",
42974
43179
  children: "LICENSE.md"
@@ -42976,18 +43181,18 @@ var WebRenderModalLicense = ({
42976
43181
  "."
42977
43182
  ]
42978
43183
  }),
42979
- /* @__PURE__ */ jsx261("div", {
43184
+ /* @__PURE__ */ jsx262("div", {
42980
43185
  style: row9,
42981
- children: /* @__PURE__ */ jsxs138("div", {
43186
+ children: /* @__PURE__ */ jsxs139("div", {
42982
43187
  style: justifyCenter,
42983
43188
  children: [
42984
- /* @__PURE__ */ jsx261(Checkbox, {
43189
+ /* @__PURE__ */ jsx262(Checkbox, {
42985
43190
  checked: licenseKey === "free-license",
42986
43191
  onChange: onFreeLicenseChange,
42987
43192
  name: "free-license",
42988
43193
  rounded: true
42989
43194
  }),
42990
- /* @__PURE__ */ jsxs138("div", {
43195
+ /* @__PURE__ */ jsxs139("div", {
42991
43196
  style: checkboxLabel,
42992
43197
  onClick: onFreeLicenseChange,
42993
43198
  children: [
@@ -42999,34 +43204,34 @@ var WebRenderModalLicense = ({
42999
43204
  ]
43000
43205
  })
43001
43206
  }),
43002
- licenseKey === "free-license" ? /* @__PURE__ */ jsxs138("div", {
43207
+ licenseKey === "free-license" ? /* @__PURE__ */ jsxs139("div", {
43003
43208
  style: paddedDescriptionStyle,
43004
43209
  children: [
43005
43210
  "Enjoy Remotion! Add the following to",
43006
43211
  " ",
43007
- /* @__PURE__ */ jsx261("code", {
43212
+ /* @__PURE__ */ jsx262("code", {
43008
43213
  style: codeStyle,
43009
43214
  children: "remotion.config.ts"
43010
43215
  }),
43011
43216
  " to persist this setting:",
43012
- /* @__PURE__ */ jsx261("div", {
43217
+ /* @__PURE__ */ jsx262("div", {
43013
43218
  style: codeLine,
43014
43219
  children: "Config.setPublicLicenseKey('free-license');"
43015
43220
  })
43016
43221
  ]
43017
43222
  }) : null,
43018
- /* @__PURE__ */ jsx261("div", {
43223
+ /* @__PURE__ */ jsx262("div", {
43019
43224
  style: row9,
43020
- children: /* @__PURE__ */ jsxs138("div", {
43225
+ children: /* @__PURE__ */ jsxs139("div", {
43021
43226
  style: justifyCenter,
43022
43227
  children: [
43023
- /* @__PURE__ */ jsx261(Checkbox, {
43228
+ /* @__PURE__ */ jsx262(Checkbox, {
43024
43229
  checked: licenseKey !== "free-license" && licenseKey !== null,
43025
43230
  onChange: onCompanyLicenseChange,
43026
43231
  name: "company-license",
43027
43232
  rounded: true
43028
43233
  }),
43029
- /* @__PURE__ */ jsx261("div", {
43234
+ /* @__PURE__ */ jsx262("div", {
43030
43235
  style: checkboxLabel,
43031
43236
  onClick: onCompanyLicenseChange,
43032
43237
  children: "I have a Company License"
@@ -43034,12 +43239,12 @@ var WebRenderModalLicense = ({
43034
43239
  ]
43035
43240
  })
43036
43241
  }),
43037
- licenseKey !== "free-license" && licenseKey !== null ? /* @__PURE__ */ jsxs138("div", {
43242
+ licenseKey !== "free-license" && licenseKey !== null ? /* @__PURE__ */ jsxs139("div", {
43038
43243
  style: paddedDescriptionStyle,
43039
43244
  children: [
43040
43245
  "Add your public license from",
43041
43246
  " ",
43042
- /* @__PURE__ */ jsx261("a", {
43247
+ /* @__PURE__ */ jsx262("a", {
43043
43248
  href: "https://remotion.pro/dashboard",
43044
43249
  target: "_blank",
43045
43250
  style: descriptionLink,
@@ -43047,11 +43252,11 @@ var WebRenderModalLicense = ({
43047
43252
  }),
43048
43253
  " ",
43049
43254
  "key below.",
43050
- /* @__PURE__ */ jsx261(Spacing, {
43255
+ /* @__PURE__ */ jsx262(Spacing, {
43051
43256
  y: 1,
43052
43257
  block: true
43053
43258
  }),
43054
- /* @__PURE__ */ jsx261(RemotionInput, {
43259
+ /* @__PURE__ */ jsx262(RemotionInput, {
43055
43260
  value: licenseKey,
43056
43261
  onChange: onLicenseKeyChange,
43057
43262
  placeholder: "remotion.pro public license key (starts with rm_pub_)",
@@ -43060,33 +43265,33 @@ var WebRenderModalLicense = ({
43060
43265
  style: inputStyle2,
43061
43266
  autoFocus: true
43062
43267
  }),
43063
- licenseValidation.message ? /* @__PURE__ */ jsxs138(Fragment46, {
43268
+ licenseValidation.message ? /* @__PURE__ */ jsxs139(Fragment47, {
43064
43269
  children: [
43065
- /* @__PURE__ */ jsx261(Spacing, {
43270
+ /* @__PURE__ */ jsx262(Spacing, {
43066
43271
  y: 1,
43067
43272
  block: true
43068
43273
  }),
43069
- /* @__PURE__ */ jsx261(ValidationMessage, {
43274
+ /* @__PURE__ */ jsx262(ValidationMessage, {
43070
43275
  message: licenseValidation.message,
43071
43276
  align: "flex-start",
43072
43277
  type: "error"
43073
43278
  })
43074
43279
  ]
43075
43280
  }) : null,
43076
- licenseValidation.valid && licenseKey.length > 0 ? /* @__PURE__ */ jsxs138(Fragment46, {
43281
+ licenseValidation.valid && licenseKey.length > 0 ? /* @__PURE__ */ jsxs139(Fragment47, {
43077
43282
  children: [
43078
- /* @__PURE__ */ jsx261(Spacing, {
43283
+ /* @__PURE__ */ jsx262(Spacing, {
43079
43284
  y: 1,
43080
43285
  block: true
43081
43286
  }),
43082
43287
  "Add the following to",
43083
43288
  " ",
43084
- /* @__PURE__ */ jsx261("code", {
43289
+ /* @__PURE__ */ jsx262("code", {
43085
43290
  style: codeStyle,
43086
43291
  children: "remotion.config.ts"
43087
43292
  }),
43088
43293
  " to persist this setting:",
43089
- /* @__PURE__ */ jsx261("div", {
43294
+ /* @__PURE__ */ jsx262("div", {
43090
43295
  style: codeLineSmall,
43091
43296
  children: "Config.setPublicLicenseKey('" + licenseKey + "');"
43092
43297
  })
@@ -43094,12 +43299,12 @@ var WebRenderModalLicense = ({
43094
43299
  }) : null
43095
43300
  ]
43096
43301
  }) : null,
43097
- licenseKey === null ? /* @__PURE__ */ jsxs138("div", {
43302
+ licenseKey === null ? /* @__PURE__ */ jsxs139("div", {
43098
43303
  style: descriptionStyle,
43099
43304
  children: [
43100
43305
  "If you are not eligible for the free license, you need to obtain a",
43101
43306
  " ",
43102
- /* @__PURE__ */ jsx261("a", {
43307
+ /* @__PURE__ */ jsx262("a", {
43103
43308
  style: descriptionLink,
43104
43309
  target: "_blank",
43105
43310
  href: "https://remotion.pro/license",
@@ -43113,8 +43318,8 @@ var WebRenderModalLicense = ({
43113
43318
  };
43114
43319
 
43115
43320
  // src/components/RenderModal/WebRenderModalPicture.tsx
43116
- import { useCallback as useCallback129, useMemo as useMemo132 } from "react";
43117
- import { jsx as jsx262, jsxs as jsxs139 } from "react/jsx-runtime";
43321
+ import { useCallback as useCallback129, useMemo as useMemo133 } from "react";
43322
+ import { jsx as jsx263, jsxs as jsxs140 } from "react/jsx-runtime";
43118
43323
  var tabContainer4 = {
43119
43324
  flex: 1
43120
43325
  };
@@ -43127,84 +43332,26 @@ var WebRenderModalPicture = ({
43127
43332
  transparent,
43128
43333
  setTransparent
43129
43334
  }) => {
43130
- const qualityOptions = useMemo132(() => {
43131
- return [
43132
- {
43133
- label: "Very Low",
43134
- onClick: () => setVideoBitrate("very-low"),
43135
- leftItem: videoBitrate === "very-low" ? /* @__PURE__ */ jsx262(Checkmark, {}) : null,
43136
- id: "very-low",
43137
- keyHint: null,
43138
- quickSwitcherLabel: null,
43139
- subMenu: null,
43140
- type: "item",
43141
- value: "very-low"
43142
- },
43143
- {
43144
- label: "Low",
43145
- onClick: () => setVideoBitrate("low"),
43146
- leftItem: videoBitrate === "low" ? /* @__PURE__ */ jsx262(Checkmark, {}) : null,
43147
- id: "low",
43148
- keyHint: null,
43149
- quickSwitcherLabel: null,
43150
- subMenu: null,
43151
- type: "item",
43152
- value: "low"
43153
- },
43154
- {
43155
- label: "Medium",
43156
- onClick: () => setVideoBitrate("medium"),
43157
- leftItem: videoBitrate === "medium" ? /* @__PURE__ */ jsx262(Checkmark, {}) : null,
43158
- id: "medium",
43159
- keyHint: null,
43160
- quickSwitcherLabel: null,
43161
- subMenu: null,
43162
- type: "item",
43163
- value: "medium"
43164
- },
43165
- {
43166
- label: "High",
43167
- onClick: () => setVideoBitrate("high"),
43168
- leftItem: videoBitrate === "high" ? /* @__PURE__ */ jsx262(Checkmark, {}) : null,
43169
- id: "high",
43170
- keyHint: null,
43171
- quickSwitcherLabel: null,
43172
- subMenu: null,
43173
- type: "item",
43174
- value: "high"
43175
- },
43176
- {
43177
- label: "Very High",
43178
- onClick: () => setVideoBitrate("very-high"),
43179
- leftItem: videoBitrate === "very-high" ? /* @__PURE__ */ jsx262(Checkmark, {}) : null,
43180
- id: "very-high",
43181
- keyHint: null,
43182
- quickSwitcherLabel: null,
43183
- subMenu: null,
43184
- type: "item",
43185
- value: "very-high"
43186
- }
43187
- ];
43188
- }, [videoBitrate, setVideoBitrate]);
43335
+ const qualityOptions = useMemo133(() => getQualityOptions(videoBitrate, setVideoBitrate), [videoBitrate, setVideoBitrate]);
43189
43336
  const onTransparentChanged = useCallback129((e) => {
43190
43337
  setTransparent(e.target.checked);
43191
43338
  }, [setTransparent]);
43192
43339
  if (renderMode !== "video") {
43193
43340
  return null;
43194
43341
  }
43195
- return /* @__PURE__ */ jsxs139("div", {
43342
+ return /* @__PURE__ */ jsxs140("div", {
43196
43343
  style: tabContainer4,
43197
43344
  children: [
43198
- /* @__PURE__ */ jsxs139("div", {
43345
+ /* @__PURE__ */ jsxs140("div", {
43199
43346
  style: optionRow,
43200
43347
  children: [
43201
- /* @__PURE__ */ jsx262("div", {
43348
+ /* @__PURE__ */ jsx263("div", {
43202
43349
  style: label5,
43203
43350
  children: "Quality"
43204
43351
  }),
43205
- /* @__PURE__ */ jsx262("div", {
43352
+ /* @__PURE__ */ jsx263("div", {
43206
43353
  style: rightRow,
43207
- children: /* @__PURE__ */ jsx262(Combobox, {
43354
+ children: /* @__PURE__ */ jsx263(Combobox, {
43208
43355
  values: qualityOptions,
43209
43356
  selectedId: videoBitrate,
43210
43357
  title: "Quality"
@@ -43212,7 +43359,7 @@ var WebRenderModalPicture = ({
43212
43359
  })
43213
43360
  ]
43214
43361
  }),
43215
- /* @__PURE__ */ jsx262(NumberSetting, {
43362
+ /* @__PURE__ */ jsx263(NumberSetting, {
43216
43363
  name: "Keyframe Interval",
43217
43364
  formatter: (v) => `${v}s`,
43218
43365
  min: 1,
@@ -43221,16 +43368,16 @@ var WebRenderModalPicture = ({
43221
43368
  value: keyframeIntervalInSeconds,
43222
43369
  onValueChanged: setKeyframeIntervalInSeconds
43223
43370
  }),
43224
- /* @__PURE__ */ jsxs139("div", {
43371
+ /* @__PURE__ */ jsxs140("div", {
43225
43372
  style: optionRow,
43226
43373
  children: [
43227
- /* @__PURE__ */ jsx262("div", {
43374
+ /* @__PURE__ */ jsx263("div", {
43228
43375
  style: label5,
43229
43376
  children: "Transparent"
43230
43377
  }),
43231
- /* @__PURE__ */ jsx262("div", {
43378
+ /* @__PURE__ */ jsx263("div", {
43232
43379
  style: rightRow,
43233
- children: /* @__PURE__ */ jsx262(Checkbox, {
43380
+ children: /* @__PURE__ */ jsx263(Checkbox, {
43234
43381
  checked: transparent,
43235
43382
  onChange: onTransparentChanged,
43236
43383
  name: "transparent"
@@ -43243,7 +43390,7 @@ var WebRenderModalPicture = ({
43243
43390
  };
43244
43391
 
43245
43392
  // src/components/RenderModal/WebRenderModal.tsx
43246
- import { jsx as jsx263, jsxs as jsxs140 } from "react/jsx-runtime";
43393
+ import { jsx as jsx264, jsxs as jsxs141 } from "react/jsx-runtime";
43247
43394
  var invalidCharacters2 = ["?", "*", "+", ":", "%"];
43248
43395
  var isValidStillExtension2 = (extension, stillImageFormat) => {
43249
43396
  if (stillImageFormat === "jpeg" && extension === "jpg") {
@@ -43303,48 +43450,64 @@ var WebRenderModal = ({
43303
43450
  resolved: { result: resolvedComposition },
43304
43451
  unresolved: unresolvedComposition
43305
43452
  } = context;
43306
- const [isVideo] = useState81(() => {
43453
+ const [isVideo] = useState83(() => {
43307
43454
  return typeof resolvedComposition.durationInFrames === "undefined" ? true : resolvedComposition.durationInFrames > 1;
43308
43455
  });
43309
- const [renderMode, setRenderMode] = useState81(isVideo ? "video" : "still");
43310
- const [tab, setTab] = useState81("general");
43311
- const [imageFormat, setImageFormat] = useState81("png");
43312
- const [frame2, setFrame] = useState81(() => initialFrame);
43313
- const [logLevel, setLogLevel] = useState81(() => initialLogLevel);
43314
- const [inputProps, setInputProps] = useState81(() => defaultProps);
43315
- const [delayRenderTimeout, setDelayRenderTimeout] = useState81(30000);
43316
- const [mediaCacheSizeInBytes, setMediaCacheSizeInBytes] = useState81(null);
43317
- const [saving, setSaving] = useState81(false);
43318
- const [codec, setCodec] = useState81("h264");
43319
- const [container61, setContainer] = useState81("mp4");
43320
- const [videoBitrate, setVideoBitrate] = useState81("high");
43321
- const [hardwareAcceleration, setHardwareAcceleration] = useState81("no-preference");
43322
- const [keyframeIntervalInSeconds, setKeyframeIntervalInSeconds] = useState81(5);
43323
- const [startFrame, setStartFrame] = useState81(() => inFrameMark ?? null);
43324
- const [endFrame, setEndFrame] = useState81(() => outFrameMark ?? null);
43325
- const [renderProgress, setRenderProgress] = useState81(null);
43326
- const [transparent, setTransparent] = useState81(false);
43327
- const [muted, setMuted] = useState81(false);
43328
- const [licenseKey, setLicenseKey] = useState81(initialLicenseKey);
43329
- const finalEndFrame = useMemo133(() => {
43456
+ const [renderMode, setRenderMode] = useState83(isVideo ? "video" : "still");
43457
+ const [tab, setTab] = useState83("general");
43458
+ const [imageFormat, setImageFormat] = useState83("png");
43459
+ const [frame2, setFrame] = useState83(() => initialFrame);
43460
+ const [logLevel, setLogLevel] = useState83(() => initialLogLevel);
43461
+ const [inputProps, setInputProps] = useState83(() => defaultProps);
43462
+ const [delayRenderTimeout, setDelayRenderTimeout] = useState83(30000);
43463
+ const [mediaCacheSizeInBytes, setMediaCacheSizeInBytes] = useState83(null);
43464
+ const [saving, setSaving] = useState83(false);
43465
+ const [codec, setCodec] = useState83("h264");
43466
+ const [container61, setContainer] = useState83("mp4");
43467
+ const [audioCodec, setAudioCodec] = useState83("aac");
43468
+ const [audioBitrate, setAudioBitrate] = useState83("medium");
43469
+ const [videoBitrate, setVideoBitrate] = useState83("high");
43470
+ const [hardwareAcceleration, setHardwareAcceleration] = useState83("no-preference");
43471
+ const [keyframeIntervalInSeconds, setKeyframeIntervalInSeconds] = useState83(5);
43472
+ const [startFrame, setStartFrame] = useState83(() => inFrameMark ?? null);
43473
+ const [endFrame, setEndFrame] = useState83(() => outFrameMark ?? null);
43474
+ const [renderProgress, setRenderProgress] = useState83(null);
43475
+ const [transparent, setTransparent] = useState83(false);
43476
+ const [muted, setMuted] = useState83(false);
43477
+ const [licenseKey, setLicenseKey] = useState83(initialLicenseKey);
43478
+ const encodableAudioCodecs = useEncodableAudioCodecs(container61);
43479
+ const encodableVideoCodecs = useEncodableVideoCodecs(container61);
43480
+ const effectiveAudioCodec = useMemo134(() => {
43481
+ if (encodableAudioCodecs.includes(audioCodec)) {
43482
+ return audioCodec;
43483
+ }
43484
+ return encodableAudioCodecs[0] ?? audioCodec;
43485
+ }, [audioCodec, encodableAudioCodecs]);
43486
+ const effectiveVideoCodec = useMemo134(() => {
43487
+ if (encodableVideoCodecs.includes(codec)) {
43488
+ return codec;
43489
+ }
43490
+ return encodableVideoCodecs[0] ?? codec;
43491
+ }, [codec, encodableVideoCodecs]);
43492
+ const finalEndFrame = useMemo134(() => {
43330
43493
  if (endFrame === null) {
43331
43494
  return resolvedComposition.durationInFrames - 1;
43332
43495
  }
43333
43496
  return Math.max(0, Math.min(resolvedComposition.durationInFrames - 1, endFrame));
43334
43497
  }, [endFrame, resolvedComposition.durationInFrames]);
43335
- const finalStartFrame = useMemo133(() => {
43498
+ const finalStartFrame = useMemo134(() => {
43336
43499
  if (startFrame === null) {
43337
43500
  return 0;
43338
43501
  }
43339
43502
  return Math.max(0, Math.min(finalEndFrame, startFrame));
43340
43503
  }, [finalEndFrame, startFrame]);
43341
- const frameRange = useMemo133(() => {
43504
+ const frameRange = useMemo134(() => {
43342
43505
  if (startFrame === null && endFrame === null) {
43343
43506
  return null;
43344
43507
  }
43345
43508
  return [finalStartFrame, finalEndFrame];
43346
43509
  }, [endFrame, finalEndFrame, finalStartFrame, startFrame]);
43347
- const [initialOutName] = useState81(() => {
43510
+ const [initialOutName] = useState83(() => {
43348
43511
  return getDefaultOutLocation2({
43349
43512
  compositionName: resolvedComposition.id,
43350
43513
  defaultExtension: renderMode === "still" ? imageFormat : isVideo ? container61 : imageFormat,
@@ -43353,7 +43516,7 @@ var WebRenderModal = ({
43353
43516
  clientSideRender: true
43354
43517
  });
43355
43518
  });
43356
- const [outName, setOutName] = useState81(() => initialOutName);
43519
+ const [outName, setOutName] = useState83(() => initialOutName);
43357
43520
  const setStillFormat = useCallback130((format) => {
43358
43521
  setImageFormat(format);
43359
43522
  setOutName((prev) => {
@@ -43363,6 +43526,7 @@ var WebRenderModal = ({
43363
43526
  }, []);
43364
43527
  const setContainerFormat = useCallback130((newContainer) => {
43365
43528
  setContainer(newContainer);
43529
+ setAudioCodec(getDefaultAudioCodecForContainer(newContainer));
43366
43530
  setOutName((prev) => {
43367
43531
  const newFileName = getStringBeforeSuffix(prev) + "." + newContainer;
43368
43532
  return newFileName;
@@ -43375,14 +43539,14 @@ var WebRenderModal = ({
43375
43539
  const newFileName = getStringBeforeSuffix(prev) + "." + container61;
43376
43540
  return newFileName;
43377
43541
  });
43378
- } else {
43542
+ } else if (newMode === "still") {
43379
43543
  setOutName((prev) => {
43380
43544
  const newFileName = getStringBeforeSuffix(prev) + "." + imageFormat;
43381
43545
  return newFileName;
43382
43546
  });
43383
43547
  }
43384
43548
  }, [container61, imageFormat]);
43385
- const renderTabOptions = useMemo133(() => {
43549
+ const renderTabOptions = useMemo134(() => {
43386
43550
  const options = [
43387
43551
  {
43388
43552
  label: "Still",
@@ -43420,7 +43584,7 @@ var WebRenderModal = ({
43420
43584
  const onOutNameChange = useCallback130((e) => {
43421
43585
  setOutName(e.target.value);
43422
43586
  }, []);
43423
- const outnameValidation = useMemo133(() => {
43587
+ const outnameValidation = useMemo134(() => {
43424
43588
  if (renderMode === "still") {
43425
43589
  return validateOutnameForStill({
43426
43590
  outName,
@@ -43521,7 +43685,9 @@ var WebRenderModal = ({
43521
43685
  delayRenderTimeoutInMilliseconds: delayRenderTimeout,
43522
43686
  mediaCacheSizeInBytes,
43523
43687
  logLevel,
43524
- videoCodec: codec,
43688
+ videoCodec: effectiveVideoCodec,
43689
+ audioCodec: effectiveAudioCodec,
43690
+ audioBitrate,
43525
43691
  container: container61,
43526
43692
  videoBitrate,
43527
43693
  hardwareAcceleration,
@@ -43550,7 +43716,9 @@ var WebRenderModal = ({
43550
43716
  delayRenderTimeout,
43551
43717
  mediaCacheSizeInBytes,
43552
43718
  logLevel,
43553
- codec,
43719
+ effectiveVideoCodec,
43720
+ effectiveAudioCodec,
43721
+ audioBitrate,
43554
43722
  container61,
43555
43723
  videoBitrate,
43556
43724
  hardwareAcceleration,
@@ -43575,30 +43743,30 @@ var WebRenderModal = ({
43575
43743
  await onRenderVideo();
43576
43744
  }
43577
43745
  }, [renderMode, onRenderStill, onRenderVideo]);
43578
- return /* @__PURE__ */ jsxs140("div", {
43746
+ return /* @__PURE__ */ jsxs141("div", {
43579
43747
  style: outerModalStyle,
43580
43748
  children: [
43581
- /* @__PURE__ */ jsx263(ModalHeader, {
43749
+ /* @__PURE__ */ jsx264(ModalHeader, {
43582
43750
  title: `Render ${resolvedComposition.id}`
43583
43751
  }),
43584
- /* @__PURE__ */ jsxs140("div", {
43752
+ /* @__PURE__ */ jsxs141("div", {
43585
43753
  style: container59,
43586
43754
  children: [
43587
- /* @__PURE__ */ jsx263(SegmentedControl, {
43755
+ /* @__PURE__ */ jsx264(SegmentedControl, {
43588
43756
  items: renderTabOptions,
43589
43757
  needsWrapping: false
43590
43758
  }),
43591
- /* @__PURE__ */ jsx263("div", {
43759
+ /* @__PURE__ */ jsx264("div", {
43592
43760
  style: flexer
43593
43761
  }),
43594
- /* @__PURE__ */ jsxs140(Button, {
43762
+ /* @__PURE__ */ jsxs141(Button, {
43595
43763
  autoFocus: true,
43596
43764
  onClick: onRender,
43597
43765
  style: buttonStyle7,
43598
43766
  disabled: !outnameValidation.valid,
43599
43767
  children: [
43600
43768
  renderProgress ? `Rendering... ${renderProgress.renderedFrames}/${finalEndFrame}` : `Render ${renderMode}`,
43601
- /* @__PURE__ */ jsx263(ShortcutHint, {
43769
+ /* @__PURE__ */ jsx264(ShortcutHint, {
43602
43770
  keyToPress: "↵",
43603
43771
  cmdOrCtrl: true
43604
43772
  })
@@ -43606,94 +43774,94 @@ var WebRenderModal = ({
43606
43774
  })
43607
43775
  ]
43608
43776
  }),
43609
- /* @__PURE__ */ jsx263("div", {
43777
+ /* @__PURE__ */ jsx264("div", {
43610
43778
  style: container59,
43611
- children: /* @__PURE__ */ jsx263(WebRendererExperimentalBadge, {})
43779
+ children: /* @__PURE__ */ jsx264(WebRendererExperimentalBadge, {})
43612
43780
  }),
43613
- /* @__PURE__ */ jsxs140("div", {
43781
+ /* @__PURE__ */ jsxs141("div", {
43614
43782
  style: horizontalLayout,
43615
43783
  children: [
43616
- /* @__PURE__ */ jsxs140("div", {
43784
+ /* @__PURE__ */ jsxs141("div", {
43617
43785
  style: leftSidebar,
43618
43786
  children: [
43619
- /* @__PURE__ */ jsxs140(VerticalTab, {
43787
+ /* @__PURE__ */ jsxs141(VerticalTab, {
43620
43788
  style: horizontalTab,
43621
43789
  selected: tab === "general",
43622
43790
  onClick: () => setTab("general"),
43623
43791
  children: [
43624
- /* @__PURE__ */ jsx263("div", {
43792
+ /* @__PURE__ */ jsx264("div", {
43625
43793
  style: iconContainer,
43626
- children: /* @__PURE__ */ jsx263(FileIcon, {
43794
+ children: /* @__PURE__ */ jsx264(FileIcon, {
43627
43795
  style: icon6
43628
43796
  })
43629
43797
  }),
43630
43798
  "General"
43631
43799
  ]
43632
43800
  }),
43633
- /* @__PURE__ */ jsxs140(VerticalTab, {
43801
+ /* @__PURE__ */ jsxs141(VerticalTab, {
43634
43802
  style: horizontalTab,
43635
43803
  selected: tab === "data",
43636
43804
  onClick: () => setTab("data"),
43637
43805
  children: [
43638
- /* @__PURE__ */ jsx263("div", {
43806
+ /* @__PURE__ */ jsx264("div", {
43639
43807
  style: iconContainer,
43640
- children: /* @__PURE__ */ jsx263(DataIcon, {
43808
+ children: /* @__PURE__ */ jsx264(DataIcon, {
43641
43809
  style: icon6
43642
43810
  })
43643
43811
  }),
43644
43812
  "Input Props"
43645
43813
  ]
43646
43814
  }),
43647
- renderMode === "video" ? /* @__PURE__ */ jsxs140(VerticalTab, {
43815
+ renderMode === "video" ? /* @__PURE__ */ jsxs141(VerticalTab, {
43648
43816
  style: horizontalTab,
43649
43817
  selected: tab === "picture",
43650
43818
  onClick: () => setTab("picture"),
43651
43819
  children: [
43652
- /* @__PURE__ */ jsx263("div", {
43820
+ /* @__PURE__ */ jsx264("div", {
43653
43821
  style: iconContainer,
43654
- children: /* @__PURE__ */ jsx263(PicIcon, {
43822
+ children: /* @__PURE__ */ jsx264(PicIcon, {
43655
43823
  style: icon6
43656
43824
  })
43657
43825
  }),
43658
43826
  "Picture"
43659
43827
  ]
43660
43828
  }) : null,
43661
- renderMode === "video" ? /* @__PURE__ */ jsxs140(VerticalTab, {
43829
+ renderMode === "video" ? /* @__PURE__ */ jsxs141(VerticalTab, {
43662
43830
  style: horizontalTab,
43663
43831
  selected: tab === "audio",
43664
43832
  onClick: () => setTab("audio"),
43665
43833
  children: [
43666
- /* @__PURE__ */ jsx263("div", {
43834
+ /* @__PURE__ */ jsx264("div", {
43667
43835
  style: iconContainer,
43668
- children: /* @__PURE__ */ jsx263(AudioIcon, {
43836
+ children: /* @__PURE__ */ jsx264(AudioIcon, {
43669
43837
  style: icon6
43670
43838
  })
43671
43839
  }),
43672
43840
  "Audio"
43673
43841
  ]
43674
43842
  }) : null,
43675
- /* @__PURE__ */ jsxs140(VerticalTab, {
43843
+ /* @__PURE__ */ jsxs141(VerticalTab, {
43676
43844
  style: horizontalTab,
43677
43845
  selected: tab === "advanced",
43678
43846
  onClick: () => setTab("advanced"),
43679
43847
  children: [
43680
- /* @__PURE__ */ jsx263("div", {
43848
+ /* @__PURE__ */ jsx264("div", {
43681
43849
  style: iconContainer,
43682
- children: /* @__PURE__ */ jsx263(GearIcon, {
43850
+ children: /* @__PURE__ */ jsx264(GearIcon, {
43683
43851
  style: icon6
43684
43852
  })
43685
43853
  }),
43686
43854
  "Other"
43687
43855
  ]
43688
43856
  }),
43689
- /* @__PURE__ */ jsxs140(VerticalTab, {
43857
+ /* @__PURE__ */ jsxs141(VerticalTab, {
43690
43858
  style: horizontalTab,
43691
43859
  selected: tab === "license",
43692
43860
  onClick: () => setTab("license"),
43693
43861
  children: [
43694
- /* @__PURE__ */ jsx263("div", {
43862
+ /* @__PURE__ */ jsx264("div", {
43695
43863
  style: iconContainer,
43696
- children: /* @__PURE__ */ jsx263(CertificateIcon, {
43864
+ children: /* @__PURE__ */ jsx264(CertificateIcon, {
43697
43865
  style: icon6
43698
43866
  })
43699
43867
  }),
@@ -43702,10 +43870,10 @@ var WebRenderModal = ({
43702
43870
  })
43703
43871
  ]
43704
43872
  }),
43705
- /* @__PURE__ */ jsx263("div", {
43873
+ /* @__PURE__ */ jsx264("div", {
43706
43874
  style: optionsPanel,
43707
43875
  className: VERTICAL_SCROLLBAR_CLASSNAME,
43708
- children: tab === "general" ? /* @__PURE__ */ jsx263(WebRenderModalBasic, {
43876
+ children: tab === "general" ? /* @__PURE__ */ jsx264(WebRenderModalBasic, {
43709
43877
  renderMode,
43710
43878
  resolvedComposition,
43711
43879
  imageFormat,
@@ -43715,8 +43883,9 @@ var WebRenderModal = ({
43715
43883
  onFrameSetDirectly,
43716
43884
  container: container61,
43717
43885
  setContainerFormat,
43718
- codec,
43719
43886
  setCodec,
43887
+ encodableVideoCodecs,
43888
+ effectiveVideoCodec,
43720
43889
  startFrame: finalStartFrame,
43721
43890
  setStartFrame,
43722
43891
  endFrame: finalEndFrame,
@@ -43726,7 +43895,7 @@ var WebRenderModal = ({
43726
43895
  validationMessage: outnameValidation.valid ? null : outnameValidation.error.message,
43727
43896
  logLevel,
43728
43897
  setLogLevel
43729
- }) : tab === "data" ? /* @__PURE__ */ jsx263(DataEditor, {
43898
+ }) : tab === "data" ? /* @__PURE__ */ jsx264(DataEditor, {
43730
43899
  defaultProps: inputProps,
43731
43900
  setDefaultProps: setInputProps,
43732
43901
  unresolvedComposition,
@@ -43735,7 +43904,7 @@ var WebRenderModal = ({
43735
43904
  saving,
43736
43905
  setSaving,
43737
43906
  readOnlyStudio: false
43738
- }) : tab === "picture" ? /* @__PURE__ */ jsx263(WebRenderModalPicture, {
43907
+ }) : tab === "picture" ? /* @__PURE__ */ jsx264(WebRenderModalPicture, {
43739
43908
  renderMode,
43740
43909
  videoBitrate,
43741
43910
  setVideoBitrate,
@@ -43743,10 +43912,17 @@ var WebRenderModal = ({
43743
43912
  setKeyframeIntervalInSeconds,
43744
43913
  transparent,
43745
43914
  setTransparent
43746
- }) : tab === "audio" ? /* @__PURE__ */ jsx263(WebRenderModalAudio, {
43915
+ }) : tab === "audio" ? /* @__PURE__ */ jsx264(WebRenderModalAudio, {
43747
43916
  muted,
43748
- setMuted
43749
- }) : tab === "advanced" ? /* @__PURE__ */ jsx263(WebRenderModalAdvanced, {
43917
+ setMuted,
43918
+ audioCodec,
43919
+ setAudioCodec,
43920
+ audioBitrate,
43921
+ setAudioBitrate,
43922
+ container: container61,
43923
+ encodableCodecs: encodableAudioCodecs,
43924
+ effectiveAudioCodec
43925
+ }) : tab === "advanced" ? /* @__PURE__ */ jsx264(WebRenderModalAdvanced, {
43750
43926
  renderMode,
43751
43927
  delayRenderTimeout,
43752
43928
  setDelayRenderTimeout,
@@ -43754,7 +43930,7 @@ var WebRenderModal = ({
43754
43930
  setMediaCacheSizeInBytes,
43755
43931
  hardwareAcceleration,
43756
43932
  setHardwareAcceleration
43757
- }) : /* @__PURE__ */ jsx263(WebRenderModalLicense, {
43933
+ }) : /* @__PURE__ */ jsx264(WebRenderModalLicense, {
43758
43934
  licenseKey,
43759
43935
  setLicenseKey,
43760
43936
  initialPublicLicenseKey: initialLicenseKey
@@ -43766,10 +43942,10 @@ var WebRenderModal = ({
43766
43942
  });
43767
43943
  };
43768
43944
  var WebRenderModalWithLoader = (props) => {
43769
- return /* @__PURE__ */ jsx263(DismissableModal, {
43770
- children: /* @__PURE__ */ jsx263(ResolveCompositionBeforeModal, {
43945
+ return /* @__PURE__ */ jsx264(DismissableModal, {
43946
+ children: /* @__PURE__ */ jsx264(ResolveCompositionBeforeModal, {
43771
43947
  compositionId: props.compositionId,
43772
- children: /* @__PURE__ */ jsx263(WebRenderModal, {
43948
+ children: /* @__PURE__ */ jsx264(WebRenderModal, {
43773
43949
  ...props
43774
43950
  })
43775
43951
  })
@@ -43777,11 +43953,11 @@ var WebRenderModalWithLoader = (props) => {
43777
43953
  };
43778
43954
 
43779
43955
  // src/components/UpdateModal/UpdateModal.tsx
43780
- import { useCallback as useCallback133, useMemo as useMemo135 } from "react";
43956
+ import { useCallback as useCallback133, useMemo as useMemo136 } from "react";
43781
43957
 
43782
43958
  // src/components/CopyButton.tsx
43783
- import { useCallback as useCallback131, useEffect as useEffect79, useState as useState82 } from "react";
43784
- import { jsx as jsx264, jsxs as jsxs141 } from "react/jsx-runtime";
43959
+ import { useCallback as useCallback131, useEffect as useEffect81, useState as useState84 } from "react";
43960
+ import { jsx as jsx265, jsxs as jsxs142 } from "react/jsx-runtime";
43785
43961
  var iconStyle8 = {
43786
43962
  width: 16,
43787
43963
  height: 16,
@@ -43791,7 +43967,7 @@ var buttonContainerStyle = {
43791
43967
  display: "flex",
43792
43968
  minWidth: "114px"
43793
43969
  };
43794
- var copyIcon = /* @__PURE__ */ jsx264("svg", {
43970
+ var copyIcon = /* @__PURE__ */ jsx265("svg", {
43795
43971
  "aria-hidden": "true",
43796
43972
  focusable: "false",
43797
43973
  "data-prefix": "far",
@@ -43801,7 +43977,7 @@ var copyIcon = /* @__PURE__ */ jsx264("svg", {
43801
43977
  xmlns: "http://www.w3.org/2000/svg",
43802
43978
  viewBox: "0 0 384 512",
43803
43979
  style: iconStyle8,
43804
- children: /* @__PURE__ */ jsx264("path", {
43980
+ children: /* @__PURE__ */ jsx265("path", {
43805
43981
  fill: "currentColor",
43806
43982
  d: "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm144 418c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h42v36c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-36h42c3.3 0 6 2.7 6 6z"
43807
43983
  })
@@ -43810,7 +43986,7 @@ var labelStyle5 = {
43810
43986
  fontSize: 14
43811
43987
  };
43812
43988
  var CopyButton = ({ textToCopy, label: label11, labelWhenCopied }) => {
43813
- const [copied, setCopied] = useState82(false);
43989
+ const [copied, setCopied] = useState84(false);
43814
43990
  const onClick = useCallback131(() => {
43815
43991
  copyText(textToCopy).then(() => {
43816
43992
  setCopied(Date.now());
@@ -43818,23 +43994,23 @@ var CopyButton = ({ textToCopy, label: label11, labelWhenCopied }) => {
43818
43994
  showNotification(`Could not copy: ${err.message}`, 2000);
43819
43995
  });
43820
43996
  }, [textToCopy]);
43821
- useEffect79(() => {
43997
+ useEffect81(() => {
43822
43998
  if (!copied) {
43823
43999
  return;
43824
44000
  }
43825
44001
  const to = setTimeout(() => setCopied(false), 2000);
43826
44002
  return () => clearTimeout(to);
43827
44003
  }, [copied]);
43828
- return /* @__PURE__ */ jsxs141(Button, {
44004
+ return /* @__PURE__ */ jsxs142(Button, {
43829
44005
  onClick,
43830
44006
  buttonContainerStyle,
43831
44007
  children: [
43832
44008
  copyIcon,
43833
- /* @__PURE__ */ jsx264(Spacing, {
44009
+ /* @__PURE__ */ jsx265(Spacing, {
43834
44010
  x: 1.5
43835
44011
  }),
43836
44012
  " ",
43837
- /* @__PURE__ */ jsx264("span", {
44013
+ /* @__PURE__ */ jsx265("span", {
43838
44014
  style: labelStyle5,
43839
44015
  children: copied ? labelWhenCopied : label11
43840
44016
  })
@@ -43843,8 +44019,8 @@ var CopyButton = ({ textToCopy, label: label11, labelWhenCopied }) => {
43843
44019
  };
43844
44020
 
43845
44021
  // src/components/UpdateModal/OpenIssueButton.tsx
43846
- import { useCallback as useCallback132, useMemo as useMemo134, useState as useState83 } from "react";
43847
- import { jsx as jsx265 } from "react/jsx-runtime";
44022
+ import { useCallback as useCallback132, useMemo as useMemo135, useState as useState85 } from "react";
44023
+ import { jsx as jsx266 } from "react/jsx-runtime";
43848
44024
  var svgStyle3 = {
43849
44025
  width: "11px",
43850
44026
  height: "11px"
@@ -43858,18 +44034,18 @@ var buttonStyle8 = {
43858
44034
  alignItems: "center"
43859
44035
  };
43860
44036
  var OpenIssueButton = ({ link: link4 }) => {
43861
- const [hovered, setHovered] = useState83(false);
44037
+ const [hovered, setHovered] = useState85(false);
43862
44038
  const buttonTooltip = `Open GitHub issue in new Tab`;
43863
44039
  const handleClick = useCallback132(() => {
43864
44040
  window.open(link4, "_blank");
43865
44041
  }, [link4]);
43866
- const svgFillColor = useMemo134(() => {
44042
+ const svgFillColor = useMemo135(() => {
43867
44043
  return hovered ? "white" : LIGHT_TEXT;
43868
44044
  }, [hovered]);
43869
- const openInEditorSvg = /* @__PURE__ */ jsx265("svg", {
44045
+ const openInEditorSvg = /* @__PURE__ */ jsx266("svg", {
43870
44046
  viewBox: "0 0 512 512",
43871
44047
  style: svgStyle3,
43872
- children: /* @__PURE__ */ jsx265("path", {
44048
+ children: /* @__PURE__ */ jsx266("path", {
43873
44049
  fill: svgFillColor,
43874
44050
  d: "M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h82.7L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3V192c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32H320zM80 32C35.8 32 0 67.8 0 112V432c0 44.2 35.8 80 80 80H400c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32V432c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z"
43875
44051
  })
@@ -43880,7 +44056,7 @@ var OpenIssueButton = ({ link: link4 }) => {
43880
44056
  const onPointerLeave = useCallback132(() => {
43881
44057
  setHovered(false);
43882
44058
  }, []);
43883
- return /* @__PURE__ */ jsx265("button", {
44059
+ return /* @__PURE__ */ jsx266("button", {
43884
44060
  title: buttonTooltip,
43885
44061
  type: "button",
43886
44062
  onPointerEnter,
@@ -43892,7 +44068,7 @@ var OpenIssueButton = ({ link: link4 }) => {
43892
44068
  };
43893
44069
 
43894
44070
  // src/components/KnownBugs.tsx
43895
- import { jsx as jsx266, jsxs as jsxs142 } from "react/jsx-runtime";
44071
+ import { jsx as jsx267, jsxs as jsxs143 } from "react/jsx-runtime";
43896
44072
  var container61 = {
43897
44073
  display: "flex",
43898
44074
  flexDirection: "row",
@@ -43904,29 +44080,29 @@ var text4 = {
43904
44080
  };
43905
44081
  var KnownBugs = ({ bugs }) => {
43906
44082
  const bugElements = bugs.map((bug) => {
43907
- return /* @__PURE__ */ jsxs142("div", {
44083
+ return /* @__PURE__ */ jsxs143("div", {
43908
44084
  style: container61,
43909
44085
  children: [
43910
- /* @__PURE__ */ jsxs142("div", {
44086
+ /* @__PURE__ */ jsxs143("div", {
43911
44087
  style: text4,
43912
44088
  children: [
43913
44089
  "\uD83E\uDEB2 ",
43914
44090
  bug.title
43915
44091
  ]
43916
44092
  }),
43917
- /* @__PURE__ */ jsx266(OpenIssueButton, {
44093
+ /* @__PURE__ */ jsx267(OpenIssueButton, {
43918
44094
  link: bug.link
43919
44095
  })
43920
44096
  ]
43921
44097
  }, bug.description + bug.link);
43922
44098
  });
43923
- return /* @__PURE__ */ jsx266("div", {
44099
+ return /* @__PURE__ */ jsx267("div", {
43924
44100
  children: bugElements
43925
44101
  });
43926
44102
  };
43927
44103
 
43928
44104
  // src/components/UpdateModal/UpdateModal.tsx
43929
- import { jsx as jsx267, jsxs as jsxs143, Fragment as Fragment47 } from "react/jsx-runtime";
44105
+ import { jsx as jsx268, jsxs as jsxs144, Fragment as Fragment48 } from "react/jsx-runtime";
43930
44106
  var container62 = {
43931
44107
  padding: 20,
43932
44108
  paddingTop: 0
@@ -43960,7 +44136,7 @@ var commands = {
43960
44136
  unknown: "npx remotion upgrade"
43961
44137
  };
43962
44138
  var UpdateModal = ({ info, knownBugs }) => {
43963
- const hasKnownBugs = useMemo135(() => {
44139
+ const hasKnownBugs = useMemo136(() => {
43964
44140
  return knownBugs && knownBugs?.length > 0;
43965
44141
  }, [knownBugs]);
43966
44142
  const command = commands[info.packageManager];
@@ -43969,17 +44145,17 @@ var UpdateModal = ({ info, knownBugs }) => {
43969
44145
  showNotification(`Could not copy: ${err.message}`, 2000);
43970
44146
  });
43971
44147
  }, [command]);
43972
- return /* @__PURE__ */ jsxs143(DismissableModal, {
44148
+ return /* @__PURE__ */ jsxs144(DismissableModal, {
43973
44149
  children: [
43974
- /* @__PURE__ */ jsx267(ModalHeader, {
44150
+ /* @__PURE__ */ jsx268(ModalHeader, {
43975
44151
  title: "Update available"
43976
44152
  }),
43977
- /* @__PURE__ */ jsxs143("div", {
44153
+ /* @__PURE__ */ jsxs144("div", {
43978
44154
  style: container62,
43979
44155
  children: [
43980
- hasKnownBugs ? /* @__PURE__ */ jsxs143(Fragment47, {
44156
+ hasKnownBugs ? /* @__PURE__ */ jsxs144(Fragment48, {
43981
44157
  children: [
43982
- /* @__PURE__ */ jsxs143("div", {
44158
+ /* @__PURE__ */ jsxs144("div", {
43983
44159
  style: title7,
43984
44160
  children: [
43985
44161
  "The currently installed version ",
@@ -43987,42 +44163,42 @@ var UpdateModal = ({ info, knownBugs }) => {
43987
44163
  " has the following known bugs:"
43988
44164
  ]
43989
44165
  }),
43990
- /* @__PURE__ */ jsx267(KnownBugs, {
44166
+ /* @__PURE__ */ jsx268(KnownBugs, {
43991
44167
  bugs: knownBugs
43992
44168
  }),
43993
- /* @__PURE__ */ jsx267("div", {
44169
+ /* @__PURE__ */ jsx268("div", {
43994
44170
  style: { height: "20px" }
43995
44171
  }),
43996
- /* @__PURE__ */ jsx267("div", {
44172
+ /* @__PURE__ */ jsx268("div", {
43997
44173
  style: text5,
43998
44174
  children: "To upgrade, run the following command:"
43999
44175
  })
44000
44176
  ]
44001
- }) : /* @__PURE__ */ jsx267("div", {
44177
+ }) : /* @__PURE__ */ jsx268("div", {
44002
44178
  style: title7,
44003
44179
  children: "A new update for Remotion is available! Run the following command:"
44004
44180
  }),
44005
- /* @__PURE__ */ jsxs143(Row, {
44181
+ /* @__PURE__ */ jsxs144(Row, {
44006
44182
  align: "center",
44007
44183
  children: [
44008
- /* @__PURE__ */ jsx267(Flex, {
44009
- children: /* @__PURE__ */ jsx267("pre", {
44184
+ /* @__PURE__ */ jsx268(Flex, {
44185
+ children: /* @__PURE__ */ jsx268("pre", {
44010
44186
  onClick,
44011
44187
  style: code,
44012
44188
  children: command
44013
44189
  })
44014
44190
  }),
44015
- /* @__PURE__ */ jsx267(Spacing, {
44191
+ /* @__PURE__ */ jsx268(Spacing, {
44016
44192
  x: 1
44017
44193
  }),
44018
- /* @__PURE__ */ jsx267(CopyButton, {
44194
+ /* @__PURE__ */ jsx268(CopyButton, {
44019
44195
  textToCopy: command,
44020
44196
  label: "Copy",
44021
44197
  labelWhenCopied: "Copied!"
44022
44198
  })
44023
44199
  ]
44024
44200
  }),
44025
- /* @__PURE__ */ jsxs143("div", {
44201
+ /* @__PURE__ */ jsxs144("div", {
44026
44202
  style: text5,
44027
44203
  children: [
44028
44204
  "This will upgrade Remotion from ",
@@ -44033,12 +44209,12 @@ var UpdateModal = ({ info, knownBugs }) => {
44033
44209
  "."
44034
44210
  ]
44035
44211
  }),
44036
- /* @__PURE__ */ jsxs143("div", {
44212
+ /* @__PURE__ */ jsxs144("div", {
44037
44213
  style: text5,
44038
44214
  children: [
44039
44215
  "Read the",
44040
44216
  " ",
44041
- /* @__PURE__ */ jsx267("a", {
44217
+ /* @__PURE__ */ jsx268("a", {
44042
44218
  style: link4,
44043
44219
  target: "_blank",
44044
44220
  href: "https://github.com/remotion-dev/remotion/releases",
@@ -44057,24 +44233,24 @@ var UpdateModal = ({ info, knownBugs }) => {
44057
44233
  };
44058
44234
 
44059
44235
  // src/components/Modals.tsx
44060
- import { jsx as jsx268, jsxs as jsxs144, Fragment as Fragment48 } from "react/jsx-runtime";
44236
+ import { jsx as jsx269, jsxs as jsxs145, Fragment as Fragment49 } from "react/jsx-runtime";
44061
44237
  var Modals = ({ readOnlyStudio }) => {
44062
44238
  const { selectedModal: modalContextType } = useContext83(ModalsContext);
44063
44239
  const canRender = useContext83(StudioServerConnectionCtx).previewServerState.type === "connected";
44064
- return /* @__PURE__ */ jsxs144(Fragment48, {
44240
+ return /* @__PURE__ */ jsxs145(Fragment49, {
44065
44241
  children: [
44066
- modalContextType && modalContextType.type === "duplicate-comp" && /* @__PURE__ */ jsx268(DuplicateComposition, {
44242
+ modalContextType && modalContextType.type === "duplicate-comp" && /* @__PURE__ */ jsx269(DuplicateComposition, {
44067
44243
  compositionType: modalContextType.compositionType,
44068
44244
  compositionId: modalContextType.compositionId
44069
44245
  }),
44070
- modalContextType && modalContextType.type === "delete-comp" && /* @__PURE__ */ jsx268(DeleteComposition, {
44246
+ modalContextType && modalContextType.type === "delete-comp" && /* @__PURE__ */ jsx269(DeleteComposition, {
44071
44247
  compositionId: modalContextType.compositionId
44072
44248
  }),
44073
- modalContextType && modalContextType.type === "rename-comp" && /* @__PURE__ */ jsx268(RenameComposition, {
44249
+ modalContextType && modalContextType.type === "rename-comp" && /* @__PURE__ */ jsx269(RenameComposition, {
44074
44250
  compositionId: modalContextType.compositionId
44075
44251
  }),
44076
- modalContextType && modalContextType.type === "input-props-override" && /* @__PURE__ */ jsx268(OverrideInputPropsModal, {}),
44077
- modalContextType && modalContextType.type === "web-render" && /* @__PURE__ */ jsx268(WebRenderModalWithLoader, {
44252
+ modalContextType && modalContextType.type === "input-props-override" && /* @__PURE__ */ jsx269(OverrideInputPropsModal, {}),
44253
+ modalContextType && modalContextType.type === "web-render" && /* @__PURE__ */ jsx269(WebRenderModalWithLoader, {
44078
44254
  type: "web-render",
44079
44255
  initialFrame: modalContextType.initialFrame,
44080
44256
  compositionId: modalContextType.compositionId,
@@ -44084,7 +44260,7 @@ var Modals = ({ readOnlyStudio }) => {
44084
44260
  initialLogLevel: modalContextType.initialLogLevel,
44085
44261
  initialLicenseKey: modalContextType.initialLicenseKey
44086
44262
  }),
44087
- modalContextType && canRender && modalContextType.type === "server-render" && /* @__PURE__ */ jsx268(RenderModalWithLoader, {
44263
+ modalContextType && canRender && modalContextType.type === "server-render" && /* @__PURE__ */ jsx269(RenderModalWithLoader, {
44088
44264
  initialFrame: modalContextType.initialFrame,
44089
44265
  initialDarkMode: modalContextType.initialDarkMode,
44090
44266
  compositionId: modalContextType.compositionId,
@@ -44133,28 +44309,28 @@ var Modals = ({ readOnlyStudio }) => {
44133
44309
  initialChromeMode: modalContextType.initialChromeMode,
44134
44310
  renderDefaults: modalContextType.renderDefaults
44135
44311
  }),
44136
- modalContextType && canRender && modalContextType.type === "render-progress" && /* @__PURE__ */ jsx268(RenderStatusModal, {
44312
+ modalContextType && canRender && modalContextType.type === "render-progress" && /* @__PURE__ */ jsx269(RenderStatusModal, {
44137
44313
  jobId: modalContextType.jobId
44138
44314
  }),
44139
- modalContextType && modalContextType.type === "update" && /* @__PURE__ */ jsx268(UpdateModal, {
44315
+ modalContextType && modalContextType.type === "update" && /* @__PURE__ */ jsx269(UpdateModal, {
44140
44316
  info: modalContextType.info,
44141
44317
  knownBugs: modalContextType.knownBugs
44142
44318
  }),
44143
- modalContextType && modalContextType.type === "install-packages" && /* @__PURE__ */ jsx268(InstallPackageModal, {
44319
+ modalContextType && modalContextType.type === "install-packages" && /* @__PURE__ */ jsx269(InstallPackageModal, {
44144
44320
  packageManager: modalContextType.packageManager
44145
44321
  }),
44146
- modalContextType && modalContextType.type === "quick-switcher" && /* @__PURE__ */ jsx268(QuickSwitcher_default, {
44322
+ modalContextType && modalContextType.type === "quick-switcher" && /* @__PURE__ */ jsx269(QuickSwitcher_default, {
44147
44323
  readOnlyStudio,
44148
44324
  invocationTimestamp: modalContextType.invocationTimestamp,
44149
44325
  initialMode: modalContextType.mode
44150
44326
  }),
44151
- /* @__PURE__ */ jsx268(AskAiModal, {})
44327
+ /* @__PURE__ */ jsx269(AskAiModal, {})
44152
44328
  ]
44153
44329
  });
44154
44330
  };
44155
44331
 
44156
44332
  // src/components/Editor.tsx
44157
- import { jsx as jsx269, jsxs as jsxs145 } from "react/jsx-runtime";
44333
+ import { jsx as jsx270, jsxs as jsxs146 } from "react/jsx-runtime";
44158
44334
  var background2 = {
44159
44335
  backgroundColor: BACKGROUND,
44160
44336
  display: "flex",
@@ -44170,7 +44346,7 @@ var Editor = ({ Root, readOnlyStudio }) => {
44170
44346
  triggerOnWindowResize: false,
44171
44347
  shouldApplyCssTransforms: true
44172
44348
  });
44173
- useEffect80(() => {
44349
+ useEffect82(() => {
44174
44350
  if (readOnlyStudio) {
44175
44351
  return;
44176
44352
  }
@@ -44184,11 +44360,11 @@ var Editor = ({ Root, readOnlyStudio }) => {
44184
44360
  window.removeEventListener("beforeunload", listenToChanges);
44185
44361
  };
44186
44362
  }, [readOnlyStudio]);
44187
- const [canvasMounted, setCanvasMounted] = React176.useState(false);
44363
+ const [canvasMounted, setCanvasMounted] = React177.useState(false);
44188
44364
  const onMounted = useCallback134(() => {
44189
44365
  setCanvasMounted(true);
44190
44366
  }, []);
44191
- const value = useMemo136(() => {
44367
+ const value = useMemo137(() => {
44192
44368
  if (!size4) {
44193
44369
  return null;
44194
44370
  }
@@ -44197,41 +44373,41 @@ var Editor = ({ Root, readOnlyStudio }) => {
44197
44373
  canvasSize: size4
44198
44374
  };
44199
44375
  }, [size4]);
44200
- const MemoRoot = useMemo136(() => {
44201
- return React176.memo(Root);
44376
+ const MemoRoot = useMemo137(() => {
44377
+ return React177.memo(Root);
44202
44378
  }, [Root]);
44203
- return /* @__PURE__ */ jsx269(HigherZIndex, {
44379
+ return /* @__PURE__ */ jsx270(HigherZIndex, {
44204
44380
  onEscape: noop,
44205
44381
  onOutsideClick: noop,
44206
- children: /* @__PURE__ */ jsxs145(TimelineZoomContext, {
44382
+ children: /* @__PURE__ */ jsxs146(TimelineZoomContext, {
44207
44383
  children: [
44208
- /* @__PURE__ */ jsx269(Internals61.CurrentScaleContext.Provider, {
44384
+ /* @__PURE__ */ jsx270(Internals61.CurrentScaleContext.Provider, {
44209
44385
  value,
44210
- children: /* @__PURE__ */ jsxs145("div", {
44386
+ children: /* @__PURE__ */ jsxs146("div", {
44211
44387
  style: background2,
44212
44388
  children: [
44213
- canvasMounted ? /* @__PURE__ */ jsx269(MemoRoot, {}) : null,
44214
- /* @__PURE__ */ jsxs145(Internals61.CanUseRemotionHooksProvider, {
44389
+ canvasMounted ? /* @__PURE__ */ jsx270(MemoRoot, {}) : null,
44390
+ /* @__PURE__ */ jsxs146(Internals61.CanUseRemotionHooksProvider, {
44215
44391
  children: [
44216
- /* @__PURE__ */ jsx269(EditorContent, {
44392
+ /* @__PURE__ */ jsx270(EditorContent, {
44217
44393
  readOnlyStudio,
44218
- children: /* @__PURE__ */ jsx269(TopPanel, {
44394
+ children: /* @__PURE__ */ jsx270(TopPanel, {
44219
44395
  drawRef,
44220
44396
  bufferStateDelayInMilliseconds: BUFFER_STATE_DELAY_IN_MILLISECONDS,
44221
44397
  onMounted,
44222
44398
  readOnlyStudio
44223
44399
  })
44224
44400
  }),
44225
- /* @__PURE__ */ jsx269(GlobalKeybindings, {})
44401
+ /* @__PURE__ */ jsx270(GlobalKeybindings, {})
44226
44402
  ]
44227
44403
  })
44228
44404
  ]
44229
44405
  })
44230
44406
  }),
44231
- /* @__PURE__ */ jsx269(Modals, {
44407
+ /* @__PURE__ */ jsx270(Modals, {
44232
44408
  readOnlyStudio
44233
44409
  }),
44234
- /* @__PURE__ */ jsx269(NotificationCenter, {})
44410
+ /* @__PURE__ */ jsx270(NotificationCenter, {})
44235
44411
  ]
44236
44412
  })
44237
44413
  });
@@ -44241,9 +44417,9 @@ var Editor = ({ Root, readOnlyStudio }) => {
44241
44417
  import { PlayerInternals as PlayerInternals20 } from "@remotion/player";
44242
44418
 
44243
44419
  // src/state/preview-size.tsx
44244
- import { useCallback as useCallback135, useContext as useContext84, useMemo as useMemo137, useState as useState84 } from "react";
44420
+ import { useCallback as useCallback135, useContext as useContext84, useMemo as useMemo138, useState as useState86 } from "react";
44245
44421
  import { Internals as Internals62 } from "remotion";
44246
- import { jsx as jsx270 } from "react/jsx-runtime";
44422
+ import { jsx as jsx271 } from "react/jsx-runtime";
44247
44423
  var key5 = "remotion.previewSize";
44248
44424
  var persistPreviewSizeOption = (option) => {
44249
44425
  localStorage.setItem(key5, JSON.stringify(option));
@@ -44262,8 +44438,8 @@ var loadPreviewSizeOption = () => {
44262
44438
  return JSON.parse(item2);
44263
44439
  };
44264
44440
  var PreviewSizeProvider = ({ children }) => {
44265
- const [size4, setSizeState] = useState84(() => loadPreviewSizeOption());
44266
- const [translation, setTranslation] = useState84(() => {
44441
+ const [size4, setSizeState] = useState86(() => loadPreviewSizeOption());
44442
+ const [translation, setTranslation] = useState86(() => {
44267
44443
  return {
44268
44444
  x: 0,
44269
44445
  y: 0
@@ -44277,7 +44453,7 @@ var PreviewSizeProvider = ({ children }) => {
44277
44453
  return newVal;
44278
44454
  });
44279
44455
  }, []);
44280
- const previewSizeCtx = useMemo137(() => {
44456
+ const previewSizeCtx = useMemo138(() => {
44281
44457
  return {
44282
44458
  size: editorZoomGestures ? size4 : {
44283
44459
  size: size4.size,
@@ -44291,17 +44467,17 @@ var PreviewSizeProvider = ({ children }) => {
44291
44467
  setTranslation
44292
44468
  };
44293
44469
  }, [editorZoomGestures, size4, setSize, translation]);
44294
- return /* @__PURE__ */ jsx270(Internals62.PreviewSizeContext.Provider, {
44470
+ return /* @__PURE__ */ jsx271(Internals62.PreviewSizeContext.Provider, {
44295
44471
  value: previewSizeCtx,
44296
44472
  children
44297
44473
  });
44298
44474
  };
44299
44475
 
44300
44476
  // src/components/CheckerboardProvider.tsx
44301
- import { useCallback as useCallback136, useMemo as useMemo138, useState as useState85 } from "react";
44302
- import { jsx as jsx271 } from "react/jsx-runtime";
44477
+ import { useCallback as useCallback136, useMemo as useMemo139, useState as useState87 } from "react";
44478
+ import { jsx as jsx272 } from "react/jsx-runtime";
44303
44479
  var CheckerboardProvider = ({ children }) => {
44304
- const [checkerboard, setCheckerboardState] = useState85(() => loadCheckerboardOption());
44480
+ const [checkerboard, setCheckerboardState] = useState87(() => loadCheckerboardOption());
44305
44481
  const setCheckerboard = useCallback136((newValue) => {
44306
44482
  setCheckerboardState((prevState) => {
44307
44483
  const newVal = newValue(prevState);
@@ -44309,40 +44485,40 @@ var CheckerboardProvider = ({ children }) => {
44309
44485
  return newVal;
44310
44486
  });
44311
44487
  }, []);
44312
- const checkerboardCtx = useMemo138(() => {
44488
+ const checkerboardCtx = useMemo139(() => {
44313
44489
  return {
44314
44490
  checkerboard,
44315
44491
  setCheckerboard
44316
44492
  };
44317
44493
  }, [checkerboard, setCheckerboard]);
44318
- return /* @__PURE__ */ jsx271(CheckerboardContext.Provider, {
44494
+ return /* @__PURE__ */ jsx272(CheckerboardContext.Provider, {
44319
44495
  value: checkerboardCtx,
44320
44496
  children
44321
44497
  });
44322
44498
  };
44323
44499
 
44324
44500
  // src/components/MediaVolumeProvider.tsx
44325
- import { useMemo as useMemo139, useState as useState86 } from "react";
44501
+ import { useMemo as useMemo140, useState as useState88 } from "react";
44326
44502
  import { Internals as Internals63 } from "remotion";
44327
- import { jsx as jsx272 } from "react/jsx-runtime";
44503
+ import { jsx as jsx273 } from "react/jsx-runtime";
44328
44504
  var MediaVolumeProvider = ({ children }) => {
44329
- const [mediaMuted, setMediaMuted] = useState86(() => loadMuteOption());
44330
- const [mediaVolume, setMediaVolume] = useState86(1);
44331
- const mediaVolumeContextValue = useMemo139(() => {
44505
+ const [mediaMuted, setMediaMuted] = useState88(() => loadMuteOption());
44506
+ const [mediaVolume, setMediaVolume] = useState88(1);
44507
+ const mediaVolumeContextValue = useMemo140(() => {
44332
44508
  return {
44333
44509
  mediaMuted,
44334
44510
  mediaVolume
44335
44511
  };
44336
44512
  }, [mediaMuted, mediaVolume]);
44337
- const setMediaVolumeContextValue = useMemo139(() => {
44513
+ const setMediaVolumeContextValue = useMemo140(() => {
44338
44514
  return {
44339
44515
  setMediaMuted,
44340
44516
  setMediaVolume
44341
44517
  };
44342
44518
  }, []);
44343
- return /* @__PURE__ */ jsx272(Internals63.MediaVolumeContext.Provider, {
44519
+ return /* @__PURE__ */ jsx273(Internals63.MediaVolumeContext.Provider, {
44344
44520
  value: mediaVolumeContextValue,
44345
- children: /* @__PURE__ */ jsx272(Internals63.SetMediaVolumeContext.Provider, {
44521
+ children: /* @__PURE__ */ jsx273(Internals63.SetMediaVolumeContext.Provider, {
44346
44522
  value: setMediaVolumeContextValue,
44347
44523
  children
44348
44524
  })
@@ -44350,24 +44526,24 @@ var MediaVolumeProvider = ({ children }) => {
44350
44526
  };
44351
44527
 
44352
44528
  // src/components/ModalsProvider.tsx
44353
- import { useMemo as useMemo140, useState as useState87 } from "react";
44354
- import { jsx as jsx273 } from "react/jsx-runtime";
44529
+ import { useMemo as useMemo141, useState as useState89 } from "react";
44530
+ import { jsx as jsx274 } from "react/jsx-runtime";
44355
44531
  var ModalsProvider = ({ children }) => {
44356
- const [modalContextType, setModalContextType] = useState87(null);
44357
- const modalsContext = useMemo140(() => {
44532
+ const [modalContextType, setModalContextType] = useState89(null);
44533
+ const modalsContext = useMemo141(() => {
44358
44534
  return {
44359
44535
  selectedModal: modalContextType,
44360
44536
  setSelectedModal: setModalContextType
44361
44537
  };
44362
44538
  }, [modalContextType]);
44363
- return /* @__PURE__ */ jsx273(ModalsContext.Provider, {
44539
+ return /* @__PURE__ */ jsx274(ModalsContext.Provider, {
44364
44540
  value: modalsContext,
44365
44541
  children
44366
44542
  });
44367
44543
  };
44368
44544
 
44369
44545
  // src/components/SetTimelineInOutProvider.tsx
44370
- import { useEffect as useEffect81, useMemo as useMemo141, useState as useState88 } from "react";
44546
+ import { useEffect as useEffect83, useMemo as useMemo142, useState as useState90 } from "react";
44371
44547
 
44372
44548
  // src/state/marks.ts
44373
44549
  var localStorageKey5 = () => `remotion.editor.marksv2`;
@@ -44383,20 +44559,20 @@ var loadMarks = () => {
44383
44559
  };
44384
44560
 
44385
44561
  // src/components/SetTimelineInOutProvider.tsx
44386
- import { jsx as jsx274 } from "react/jsx-runtime";
44562
+ import { jsx as jsx275 } from "react/jsx-runtime";
44387
44563
  var SetTimelineInOutProvider = ({ children }) => {
44388
- const [inAndOutFrames, setInAndOutFrames] = useState88(() => loadMarks());
44389
- const setTimelineInOutContextValue = useMemo141(() => {
44564
+ const [inAndOutFrames, setInAndOutFrames] = useState90(() => loadMarks());
44565
+ const setTimelineInOutContextValue = useMemo142(() => {
44390
44566
  return {
44391
44567
  setInAndOutFrames
44392
44568
  };
44393
44569
  }, []);
44394
- useEffect81(() => {
44570
+ useEffect83(() => {
44395
44571
  persistMarks(inAndOutFrames);
44396
44572
  }, [inAndOutFrames]);
44397
- return /* @__PURE__ */ jsx274(TimelineInOutContext.Provider, {
44573
+ return /* @__PURE__ */ jsx275(TimelineInOutContext.Provider, {
44398
44574
  value: inAndOutFrames,
44399
- children: /* @__PURE__ */ jsx274(SetTimelineInOutContext.Provider, {
44575
+ children: /* @__PURE__ */ jsx275(SetTimelineInOutContext.Provider, {
44400
44576
  value: setTimelineInOutContextValue,
44401
44577
  children
44402
44578
  })
@@ -44404,15 +44580,15 @@ var SetTimelineInOutProvider = ({ children }) => {
44404
44580
  };
44405
44581
 
44406
44582
  // src/components/ShowGuidesProvider.tsx
44407
- import { useCallback as useCallback137, useMemo as useMemo142, useRef as useRef44, useState as useState89 } from "react";
44408
- import { jsx as jsx275 } from "react/jsx-runtime";
44583
+ import { useCallback as useCallback137, useMemo as useMemo143, useRef as useRef46, useState as useState91 } from "react";
44584
+ import { jsx as jsx276 } from "react/jsx-runtime";
44409
44585
  var ShowGuidesProvider = ({ children }) => {
44410
- const [guidesList, setGuidesList] = useState89(() => loadGuidesList());
44411
- const [selectedGuideId, setSelectedGuideId] = useState89(null);
44412
- const [hoveredGuideId, setHoveredGuideId] = useState89(null);
44413
- const [editorShowGuides, setEditorShowGuidesState] = useState89(() => loadEditorShowGuidesOption());
44414
- const shouldCreateGuideRef = useRef44(false);
44415
- const shouldDeleteGuideRef = useRef44(false);
44586
+ const [guidesList, setGuidesList] = useState91(() => loadGuidesList());
44587
+ const [selectedGuideId, setSelectedGuideId] = useState91(null);
44588
+ const [hoveredGuideId, setHoveredGuideId] = useState91(null);
44589
+ const [editorShowGuides, setEditorShowGuidesState] = useState91(() => loadEditorShowGuidesOption());
44590
+ const shouldCreateGuideRef = useRef46(false);
44591
+ const shouldDeleteGuideRef = useRef46(false);
44416
44592
  const setEditorShowGuides = useCallback137((newValue) => {
44417
44593
  setEditorShowGuidesState((prevState) => {
44418
44594
  const newVal = newValue(prevState);
@@ -44420,7 +44596,7 @@ var ShowGuidesProvider = ({ children }) => {
44420
44596
  return newVal;
44421
44597
  });
44422
44598
  }, []);
44423
- const editorShowGuidesCtx = useMemo142(() => {
44599
+ const editorShowGuidesCtx = useMemo143(() => {
44424
44600
  return {
44425
44601
  editorShowGuides,
44426
44602
  setEditorShowGuides,
@@ -44440,17 +44616,17 @@ var ShowGuidesProvider = ({ children }) => {
44440
44616
  selectedGuideId,
44441
44617
  hoveredGuideId
44442
44618
  ]);
44443
- return /* @__PURE__ */ jsx275(EditorShowGuidesContext.Provider, {
44619
+ return /* @__PURE__ */ jsx276(EditorShowGuidesContext.Provider, {
44444
44620
  value: editorShowGuidesCtx,
44445
44621
  children
44446
44622
  });
44447
44623
  };
44448
44624
 
44449
44625
  // src/components/ShowRulersProvider.tsx
44450
- import { useCallback as useCallback138, useMemo as useMemo143, useState as useState90 } from "react";
44451
- import { jsx as jsx276 } from "react/jsx-runtime";
44626
+ import { useCallback as useCallback138, useMemo as useMemo144, useState as useState92 } from "react";
44627
+ import { jsx as jsx277 } from "react/jsx-runtime";
44452
44628
  var ShowRulersProvider = ({ children }) => {
44453
- const [editorShowRulers, setEditorShowRulersState] = useState90(() => loadEditorShowRulersOption());
44629
+ const [editorShowRulers, setEditorShowRulersState] = useState92(() => loadEditorShowRulersOption());
44454
44630
  const setEditorShowRulers = useCallback138((newValue) => {
44455
44631
  setEditorShowRulersState((prevState) => {
44456
44632
  const newVal = newValue(prevState);
@@ -44458,23 +44634,23 @@ var ShowRulersProvider = ({ children }) => {
44458
44634
  return newVal;
44459
44635
  });
44460
44636
  }, []);
44461
- const editorShowRulersCtx = useMemo143(() => {
44637
+ const editorShowRulersCtx = useMemo144(() => {
44462
44638
  return {
44463
44639
  editorShowRulers,
44464
44640
  setEditorShowRulers
44465
44641
  };
44466
44642
  }, [editorShowRulers, setEditorShowRulers]);
44467
- return /* @__PURE__ */ jsx276(EditorShowRulersContext.Provider, {
44643
+ return /* @__PURE__ */ jsx277(EditorShowRulersContext.Provider, {
44468
44644
  value: editorShowRulersCtx,
44469
44645
  children
44470
44646
  });
44471
44647
  };
44472
44648
 
44473
44649
  // src/components/ZoomGesturesProvider.tsx
44474
- import { useCallback as useCallback139, useMemo as useMemo144, useState as useState91 } from "react";
44475
- import { jsx as jsx277 } from "react/jsx-runtime";
44650
+ import { useCallback as useCallback139, useMemo as useMemo145, useState as useState93 } from "react";
44651
+ import { jsx as jsx278 } from "react/jsx-runtime";
44476
44652
  var ZoomGesturesProvider = ({ children }) => {
44477
- const [editorZoomGestures, setEditorZoomGesturesState] = useState91(() => loadEditorZoomGesturesOption());
44653
+ const [editorZoomGestures, setEditorZoomGesturesState] = useState93(() => loadEditorZoomGesturesOption());
44478
44654
  const setEditorZoomGestures = useCallback139((newValue) => {
44479
44655
  setEditorZoomGesturesState((prevState) => {
44480
44656
  const newVal = newValue(prevState);
@@ -44482,40 +44658,40 @@ var ZoomGesturesProvider = ({ children }) => {
44482
44658
  return newVal;
44483
44659
  });
44484
44660
  }, []);
44485
- const editorZoomGesturesCtx = useMemo144(() => {
44661
+ const editorZoomGesturesCtx = useMemo145(() => {
44486
44662
  return {
44487
44663
  editorZoomGestures,
44488
44664
  setEditorZoomGestures
44489
44665
  };
44490
44666
  }, [editorZoomGestures, setEditorZoomGestures]);
44491
- return /* @__PURE__ */ jsx277(EditorZoomGesturesContext.Provider, {
44667
+ return /* @__PURE__ */ jsx278(EditorZoomGesturesContext.Provider, {
44492
44668
  value: editorZoomGesturesCtx,
44493
44669
  children
44494
44670
  });
44495
44671
  };
44496
44672
 
44497
44673
  // src/components/EditorContexts.tsx
44498
- import { jsx as jsx278 } from "react/jsx-runtime";
44674
+ import { jsx as jsx279 } from "react/jsx-runtime";
44499
44675
  var EditorContexts = ({ children, readOnlyStudio }) => {
44500
- return /* @__PURE__ */ jsx278(ZodProvider, {
44501
- children: /* @__PURE__ */ jsx278(VisualControlsProvider, {
44502
- children: /* @__PURE__ */ jsx278(PreviewServerConnection, {
44676
+ return /* @__PURE__ */ jsx279(ZodProvider, {
44677
+ children: /* @__PURE__ */ jsx279(VisualControlsProvider, {
44678
+ children: /* @__PURE__ */ jsx279(PreviewServerConnection, {
44503
44679
  readOnlyStudio,
44504
- children: /* @__PURE__ */ jsx278(RenderQueueContextProvider, {
44505
- children: /* @__PURE__ */ jsx278(KeybindingContextProvider, {
44506
- children: /* @__PURE__ */ jsx278(CheckerboardProvider, {
44507
- children: /* @__PURE__ */ jsx278(ZoomGesturesProvider, {
44508
- children: /* @__PURE__ */ jsx278(ShowRulersProvider, {
44509
- children: /* @__PURE__ */ jsx278(ShowGuidesProvider, {
44510
- children: /* @__PURE__ */ jsx278(PreviewSizeProvider, {
44511
- children: /* @__PURE__ */ jsx278(ModalsProvider, {
44512
- children: /* @__PURE__ */ jsx278(MediaVolumeProvider, {
44513
- children: /* @__PURE__ */ jsx278(PlayerInternals20.PlayerEmitterProvider, {
44680
+ children: /* @__PURE__ */ jsx279(RenderQueueContextProvider, {
44681
+ children: /* @__PURE__ */ jsx279(KeybindingContextProvider, {
44682
+ children: /* @__PURE__ */ jsx279(CheckerboardProvider, {
44683
+ children: /* @__PURE__ */ jsx279(ZoomGesturesProvider, {
44684
+ children: /* @__PURE__ */ jsx279(ShowRulersProvider, {
44685
+ children: /* @__PURE__ */ jsx279(ShowGuidesProvider, {
44686
+ children: /* @__PURE__ */ jsx279(PreviewSizeProvider, {
44687
+ children: /* @__PURE__ */ jsx279(ModalsProvider, {
44688
+ children: /* @__PURE__ */ jsx279(MediaVolumeProvider, {
44689
+ children: /* @__PURE__ */ jsx279(PlayerInternals20.PlayerEmitterProvider, {
44514
44690
  currentPlaybackRate: null,
44515
- children: /* @__PURE__ */ jsx278(SidebarContextProvider, {
44516
- children: /* @__PURE__ */ jsx278(FolderContextProvider, {
44517
- children: /* @__PURE__ */ jsx278(HighestZIndexProvider, {
44518
- children: /* @__PURE__ */ jsx278(SetTimelineInOutProvider, {
44691
+ children: /* @__PURE__ */ jsx279(SidebarContextProvider, {
44692
+ children: /* @__PURE__ */ jsx279(FolderContextProvider, {
44693
+ children: /* @__PURE__ */ jsx279(HighestZIndexProvider, {
44694
+ children: /* @__PURE__ */ jsx279(SetTimelineInOutProvider, {
44519
44695
  children
44520
44696
  })
44521
44697
  })
@@ -44538,7 +44714,7 @@ var EditorContexts = ({ children, readOnlyStudio }) => {
44538
44714
 
44539
44715
  // src/components/Notifications/ServerDisconnected.tsx
44540
44716
  import { useContext as useContext85 } from "react";
44541
- import { jsx as jsx279, jsxs as jsxs146 } from "react/jsx-runtime";
44717
+ import { jsx as jsx280, jsxs as jsxs147 } from "react/jsx-runtime";
44542
44718
  var container63 = {
44543
44719
  position: "fixed",
44544
44720
  justifyContent: "flex-end",
@@ -44583,26 +44759,26 @@ var ServerDisconnected = () => {
44583
44759
  }
44584
44760
  const base64Favicon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARiSURBVHgB7d1NThRBFAfw/2tGgru5gXMD8QZ4AmVjAi6kN0TiAm8gnkBcGARNumcx4E48Ae0JaE9gewLHlQSZelaNgyHGL/RVd1X3+y10RQL58+rVx1QBKKWUUkoppZRSSimllFJKKVUjQs32stEiJcktZiwxzKL9Fvqzb6S0/44JVBKbtwa9aj29U6JjagtkJzsYzBEyBi9d5utsQIULCcxvelgo03R5jBarJZCXw/17E+bt82r4Hy4gtuEQekUbK8h7IHvDV5vMZht+VAlRfmYw3EhXKrSA10Ce2X7RIzpGDVzlgM1wPb2bI2JeA9nN99/b/waoV+XCmTAex1g13gLZyUZrdjjJ0CAbTB5bMN4C2ctHxwxaRABiCsZLIG6KmxC/R2BiCCaBBwn4NgJk10B2GOWj3Wz/IQLlpUL28oOjyy4AG1AZppuhVYt4hWRZ1o8gDGc6rL4YHjxCQMQDOcNCEI38bxnmLTc9d30PARAPZAITZP/4A1ctx3bjcw0NEw8koeQ64tRnu25qeggTb+q2/BmRcyv9K7yw3MTOsmiFuLMOtICblJzS5+Mm+opoIBOgFYHMuL5yVHcoooFQuwJxag9FNJCIG/rv1BqKaCDfzshbqbZQxAJxK3SJI9qATUPJstdef0axQGJbof+jwRc6eQ2PxAIx4DZXx3duSrybv3oCTyR7yACdYR762sIXDKQbFfId4ZGPJi8YCA3QLf05YvF+IhYIEV1Dx9hNu8XdbLQFQV6OcDuFaFNyKiwWiJ19DNBN/VN8XoMQrRABDFqCEJ32CiBisT08rRAZAwjRQAKjgcgQO+rVQARMb3gJ0UAkML+DEA1EwAQkdkNMcnOx1Zcxf8V9ol7y88GSm4tdDKRy1xsgSIes/0BM4ndN5HZ7OzZkMePperqSQ5jkkFWhO6r76WrYJ4b2N+YTumF60QeeSG6/d2DI4rHvW1eCPaT9Q9YZw/sVOMlZVoUWM8zpg/Su97dVJGdZFVrKhbFR05MdYoFcwWmF1rF9kbG8UeP7KaI3qBp628QTHrueUccwdZHw/ZDWNHY7tU1u1B2GIxqIYSO2Dd0Ud79wnq/eaOpBgR4EMVDW/oijINu87d7U6hYaJBrInA0k0iu4bvVtZ1KrBRrm4Vr06GNkF3cO7RCVhvK4pmiFOISkjOStk1lVrBQIiPh5SAyN3fWKWeMuEBjxCmEkh3bVvokAzd5idL2iQqDEA1nASXmK+XFIfeTCo5gFAudllvo8G20TUeNVElMQ58QrxLHD1jbB3GumSnhsz7qHE9BhTEGc87aOm16KJHi7rfqj8yfI53E1j/l9eK8L651stJUQeXx/iuzU1QztZLGIsRp+xvtOh3Qo3/qCedumEC6qZetpJztwz7O6UAa4FNsP7ELTfXbWbskUdjgq9M9VCJoFcwvTlfyPDd9t3XNJjA+2IZcGpmxi+7tpjW3OupurJziZhtKWPzWhlFJKKaWUUkoppZRSSiml/uwrgZ/Bfwo/wccAAAAASUVORK5CYII=";
44585
44761
  fav.setAttribute("href", base64Favicon);
44586
- return /* @__PURE__ */ jsx279("div", {
44762
+ return /* @__PURE__ */ jsx280("div", {
44587
44763
  style: container63,
44588
44764
  className: "css-reset",
44589
- children: /* @__PURE__ */ jsxs146("div", {
44765
+ children: /* @__PURE__ */ jsxs147("div", {
44590
44766
  style: message,
44591
44767
  children: [
44592
44768
  "The studio server has disconnected. ",
44593
- /* @__PURE__ */ jsx279("br", {}),
44594
- window.remotion_studioServerCommand ? /* @__PURE__ */ jsxs146("span", {
44769
+ /* @__PURE__ */ jsx280("br", {}),
44770
+ window.remotion_studioServerCommand ? /* @__PURE__ */ jsxs147("span", {
44595
44771
  children: [
44596
44772
  "Run",
44597
44773
  " ",
44598
- /* @__PURE__ */ jsx279("code", {
44774
+ /* @__PURE__ */ jsx280("code", {
44599
44775
  style: inlineCode,
44600
44776
  children: window.remotion_studioServerCommand
44601
44777
  }),
44602
44778
  " ",
44603
44779
  "to run it again."
44604
44780
  ]
44605
- }) : /* @__PURE__ */ jsx279("span", {
44781
+ }) : /* @__PURE__ */ jsx280("span", {
44606
44782
  children: "Fast refresh will not work."
44607
44783
  })
44608
44784
  ]
@@ -44767,7 +44943,7 @@ var injectCSS = () => {
44767
44943
  };
44768
44944
 
44769
44945
  // src/Studio.tsx
44770
- import { jsx as jsx280, jsxs as jsxs147 } from "react/jsx-runtime";
44946
+ import { jsx as jsx281, jsxs as jsxs148 } from "react/jsx-runtime";
44771
44947
  var getServerDisconnectedDomElement = () => {
44772
44948
  return document.getElementById("server-disconnected-overlay");
44773
44949
  };
@@ -44775,27 +44951,27 @@ var Studio = ({ rootComponent, readOnly }) => {
44775
44951
  useLayoutEffect2(() => {
44776
44952
  injectCSS();
44777
44953
  }, []);
44778
- return /* @__PURE__ */ jsx280(Internals65.CompositionManagerProvider, {
44954
+ return /* @__PURE__ */ jsx281(Internals65.CompositionManagerProvider, {
44779
44955
  onlyRenderComposition: null,
44780
44956
  currentCompositionMetadata: null,
44781
44957
  initialCompositions: [],
44782
44958
  initialCanvasContent: null,
44783
- children: /* @__PURE__ */ jsx280(Internals65.RemotionRootContexts, {
44959
+ children: /* @__PURE__ */ jsx281(Internals65.RemotionRootContexts, {
44784
44960
  frameState: null,
44785
44961
  audioEnabled: window.remotion_audioEnabled,
44786
44962
  videoEnabled: window.remotion_videoEnabled,
44787
44963
  logLevel: window.remotion_logLevel,
44788
44964
  numberOfAudioTags: window.remotion_numberOfAudioTags,
44789
44965
  audioLatencyHint: window.remotion_audioLatencyHint ?? "interactive",
44790
- children: /* @__PURE__ */ jsx280(Internals65.ResolveCompositionConfigInStudio, {
44791
- children: /* @__PURE__ */ jsxs147(EditorContexts, {
44966
+ children: /* @__PURE__ */ jsx281(Internals65.ResolveCompositionConfigInStudio, {
44967
+ children: /* @__PURE__ */ jsxs148(EditorContexts, {
44792
44968
  readOnlyStudio: readOnly,
44793
44969
  children: [
44794
- /* @__PURE__ */ jsx280(Editor, {
44970
+ /* @__PURE__ */ jsx281(Editor, {
44795
44971
  readOnlyStudio: readOnly,
44796
44972
  Root: rootComponent
44797
44973
  }),
44798
- readOnly ? null : createPortal(/* @__PURE__ */ jsx280(ServerDisconnected, {}), getServerDisconnectedDomElement())
44974
+ readOnly ? null : createPortal(/* @__PURE__ */ jsx281(ServerDisconnected, {}), getServerDisconnectedDomElement())
44799
44975
  ]
44800
44976
  })
44801
44977
  })