@remotion/studio 4.0.305 → 4.0.308

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.
@@ -1,6 +1,6 @@
1
1
 
2
2
  
3
- > @remotion/studio@4.0.305 make /Users/jonathanburger/remotion/packages/studio
3
+ > @remotion/studio@4.0.308 make /Users/jonathanburger/remotion/packages/studio
4
4
  > tsc -d && bun --env-file=../.env.bundle bundle.ts
5
5
 
6
- [57.38ms] Generated.
6
+ [167.63ms] Generated.
@@ -0,0 +1,86 @@
1
+
2
+ 
3
+ > @remotion/studio@4.0.306 test /Users/jonathanburger/remotion/packages/studio
4
+ > bun test src
5
+
6
+ bun test v1.2.14 (6a363a38)
7
+ 
8
+ src/test/stringify-default-props.test.ts:
9
+ ✓ Should stringify default props correctly [0.56ms]
10
+ ✓ Should stringify default props correctly [0.51ms]
11
+ 
12
+ src/test/sequenced-timeline.test.ts:
13
+ ✓ Should calculate sequences correctly [0.93ms]
14
+ 
15
+ src/test/create-zod-values.test.ts:
16
+ ✓ Should be able to create a string [0.23ms]
17
+ ✓ Should be able to create a number [0.09ms]
18
+ ✓ Should be able to create an object [0.07ms]
19
+ ✓ Should be able to create an array [0.07ms]
20
+ ✓ Should be able to create a union [0.08ms]
21
+ ✓ Zod literal [0.05ms]
22
+ ✓ Should be able to create a discriminated union [0.26ms]
23
+ ✓ Zod instanceof [0.11ms]
24
+ ✓ Zod intersection [0.17ms]
25
+ ✓ Zod tuples [0.08ms]
26
+ ✓ Zod record [0.11ms]
27
+ ✓ Zod map [0.10ms]
28
+ ✓ Zod lazy [0.07ms]
29
+ ✓ Zod set [0.11ms]
30
+ ✓ Zod function [0.08ms]
31
+ ✓ Zod undefined [0.08ms]
32
+ ✓ Zod null [0.05ms]
33
+ ✓ Zod enum [0.03ms]
34
+ ✓ Zod nativeEnum [0.06ms]
35
+ ✓ Zod optional [0.06ms]
36
+ ✓ Zod nullable [0.05ms]
37
+ ✓ Zod undefined [0.05ms]
38
+ ✓ Zod catch [0.06ms]
39
+ ✓ Zod promise [0.11ms]
40
+ ✓ Zod transform [0.10ms]
41
+ ✓ Zod branded [0.08ms]
42
+ ✓ Zod lazy [0.13ms]
43
+ ✓ Zod coerce [0.07ms]
44
+ ✓ Zod strict [0.07ms]
45
+ ✓ Should create a color [0.08ms]
46
+ ✓ Should create a textarea [0.04ms]
47
+ 
48
+ src/test/folder-tree.test.ts:
49
+ ✓ Should create a good folder tree with 1 item inside and 1 item outside [0.16ms]
50
+ ✓ Should handle nested folders well [0.17ms]
51
+ ✓ Should throw if two folders with the same name [0.06ms]
52
+ 
53
+ src/test/big-timeline.test.ts:
54
+ ✓ Should calculate timeline as expected [1.09ms]
55
+ 
56
+ src/test/smooth-zoom.test.ts:
57
+ ✓ Smoothen zoom
58
+ ✓ Unsmoothen zoom [0.01ms]
59
+ 
60
+ src/test/validate-gui-output-filename.test.ts:
61
+ ✓ Should catch dot after slash [0.18ms]
62
+ ✓ Should catch dot in front  [0.02ms]
63
+ 
64
+ src/test/timeline-sequence-layout.test.ts:
65
+ ✓ Should test timeline sequence layout without max media duration [0.05ms]
66
+ ✓ Should test timeline sequence layout with max media duration [0.06ms]
67
+ 
68
+ src/test/extract-zod-enums.test.ts:
69
+ ✓ Extract Zod enums [0.08ms]
70
+ ✓ Extract Zod enums #2 [0.37ms]
71
+ 
72
+ src/test/color-math.test.ts:
73
+ ✓ Color math [0.21ms]
74
+ 
75
+ src/test/format-time.test.ts:
76
+ ✓ Format time [0.03ms]
77
+ 
78
+ src/test/timeline.test.ts:
79
+ ✓ Should calculate timeline with no sequences
80
+ ✓ Should calculate a basic timeline [0.16ms]
81
+ ✓ Should follow order of nesting [0.07ms]
82
+
83
+  51 pass
84
+  0 fail
85
+ 67 expect() calls
86
+ Ran 51 tests across 12 files. [37.00ms]
@@ -51,6 +51,6 @@ const copyWrapper = {
51
51
  justifyContent: 'flex-end',
52
52
  };
53
53
  const OptionExplainer = ({ option }) => {
54
- return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "__remotion-info-button-container", children: [(0, jsx_runtime_1.jsxs)("div", { style: padding, children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { style: title, children: option.name }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsx)("a", { style: link, href: option.docLink, target: "_blank", children: "Docs" })] }), (0, jsx_runtime_1.jsx)("div", { style: description, children: option.description('ssr') })] }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { y: 0.5, block: true }), (0, jsx_runtime_1.jsx)(MenuDivider_1.MenuDivider, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { y: 0.5, block: true }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: infoRow, children: [(0, jsx_runtime_1.jsx)("div", { style: infoRowLabel, children: "CLI flag" }), (0, jsx_runtime_1.jsx)("div", { style: flexSpacer }), (0, jsx_runtime_1.jsxs)("code", { children: ["--", option.cliFlag] }), (0, jsx_runtime_1.jsx)("div", { style: copyWrapper, children: (0, jsx_runtime_1.jsx)(CliCopyButton_1.CliCopyButton, { valueToCopy: option.cliFlag }) })] }), option.ssrName ? ((0, jsx_runtime_1.jsxs)("div", { style: infoRow, children: [(0, jsx_runtime_1.jsx)("div", { style: infoRowLabel, children: "Node.JS option" }), (0, jsx_runtime_1.jsx)("div", { style: flexSpacer }), (0, jsx_runtime_1.jsx)("code", { children: option.ssrName }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 3.75 })] })) : null, (0, jsx_runtime_1.jsx)("div", { style: infoRow })] })] }));
54
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "__remotion-info-button-container", children: [(0, jsx_runtime_1.jsxs)("div", { style: padding, children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { style: title, children: option.name }), option.docLink ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsx)("a", { style: link, href: option.docLink, target: "_blank", children: "Docs" })] })) : null] }), (0, jsx_runtime_1.jsx)("div", { style: description, children: option.description('ssr') })] }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { y: 0.5, block: true }), (0, jsx_runtime_1.jsx)(MenuDivider_1.MenuDivider, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { y: 0.5, block: true }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: infoRow, children: [(0, jsx_runtime_1.jsx)("div", { style: infoRowLabel, children: "CLI flag" }), (0, jsx_runtime_1.jsx)("div", { style: flexSpacer }), (0, jsx_runtime_1.jsxs)("code", { children: ["--", option.cliFlag] }), (0, jsx_runtime_1.jsx)("div", { style: copyWrapper, children: (0, jsx_runtime_1.jsx)(CliCopyButton_1.CliCopyButton, { valueToCopy: option.cliFlag }) })] }), option.ssrName ? ((0, jsx_runtime_1.jsxs)("div", { style: infoRow, children: [(0, jsx_runtime_1.jsx)("div", { style: infoRowLabel, children: "Node.JS option" }), (0, jsx_runtime_1.jsx)("div", { style: flexSpacer }), (0, jsx_runtime_1.jsx)("code", { children: option.ssrName }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 3.75 })] })) : null, (0, jsx_runtime_1.jsx)("div", { style: infoRow })] })] }));
55
55
  };
56
56
  exports.OptionExplainer = OptionExplainer;
@@ -23678,7 +23678,7 @@ var CliCopyButton = ({
23678
23678
  };
23679
23679
 
23680
23680
  // src/components/RenderModal/OptionExplainer.tsx
23681
- import { jsx as jsx227, jsxs as jsxs113 } from "react/jsx-runtime";
23681
+ import { jsx as jsx227, jsxs as jsxs113, Fragment as Fragment35 } from "react/jsx-runtime";
23682
23682
  var container50 = {
23683
23683
  fontSize: 14,
23684
23684
  paddingTop: 10,
@@ -23737,15 +23737,19 @@ var OptionExplainer = ({ option }) => {
23737
23737
  style: title5,
23738
23738
  children: option.name
23739
23739
  }),
23740
- /* @__PURE__ */ jsx227(Spacing, {
23741
- x: 1
23742
- }),
23743
- /* @__PURE__ */ jsx227("a", {
23744
- style: link2,
23745
- href: option.docLink,
23746
- target: "_blank",
23747
- children: "Docs"
23748
- })
23740
+ option.docLink ? /* @__PURE__ */ jsxs113(Fragment35, {
23741
+ children: [
23742
+ /* @__PURE__ */ jsx227(Spacing, {
23743
+ x: 1
23744
+ }),
23745
+ /* @__PURE__ */ jsx227("a", {
23746
+ style: link2,
23747
+ href: option.docLink,
23748
+ target: "_blank",
23749
+ children: "Docs"
23750
+ })
23751
+ ]
23752
+ }) : null
23749
23753
  ]
23750
23754
  }),
23751
23755
  /* @__PURE__ */ jsx227("div", {
@@ -23829,7 +23833,7 @@ var OptionExplainerBubble = ({ id }) => {
23829
23833
  };
23830
23834
 
23831
23835
  // src/components/RenderModal/NumberSetting.tsx
23832
- import { jsx as jsx229, jsxs as jsxs114, Fragment as Fragment35 } from "react/jsx-runtime";
23836
+ import { jsx as jsx229, jsxs as jsxs114, Fragment as Fragment36 } from "react/jsx-runtime";
23833
23837
  var NumberSetting = ({ name, value, step, hint, onValueChanged, max, min, formatter }) => {
23834
23838
  const onTextChanged = useCallback108((e) => {
23835
23839
  onValueChanged((q) => {
@@ -23850,7 +23854,7 @@ var NumberSetting = ({ name, value, step, hint, onValueChanged, max, min, format
23850
23854
  style: label5,
23851
23855
  children: [
23852
23856
  name,
23853
- hint ? /* @__PURE__ */ jsxs114(Fragment35, {
23857
+ hint ? /* @__PURE__ */ jsxs114(Fragment36, {
23854
23858
  children: [
23855
23859
  /* @__PURE__ */ jsx229(Spacing, {
23856
23860
  x: 0.5
@@ -24007,7 +24011,7 @@ var InlineEyeButton = ({ onClick, enabled }) => {
24007
24011
  };
24008
24012
 
24009
24013
  // src/components/RenderModal/EnvInput.tsx
24010
- import { jsx as jsx232, jsxs as jsxs115, Fragment as Fragment36 } from "react/jsx-runtime";
24014
+ import { jsx as jsx232, jsxs as jsxs115, Fragment as Fragment37 } from "react/jsx-runtime";
24011
24015
  var input3 = {
24012
24016
  flex: 1,
24013
24017
  width: "100%"
@@ -24054,7 +24058,7 @@ var EnvInput = ({
24054
24058
  setValueWarningEligible(true);
24055
24059
  }, []);
24056
24060
  const isNodeEnvKey = envKey.trim() === "NODE_ENV";
24057
- return /* @__PURE__ */ jsxs115(Fragment36, {
24061
+ return /* @__PURE__ */ jsxs115(Fragment37, {
24058
24062
  children: [
24059
24063
  /* @__PURE__ */ jsxs115(Row, {
24060
24064
  align: "center",
@@ -24938,7 +24942,7 @@ var useFileExistence = (outName) => {
24938
24942
  };
24939
24943
 
24940
24944
  // src/components/RenderModal/RenderModalOutputName.tsx
24941
- import { jsx as jsx238, jsxs as jsxs120, Fragment as Fragment37 } from "react/jsx-runtime";
24945
+ import { jsx as jsx238, jsxs as jsxs120, Fragment as Fragment38 } from "react/jsx-runtime";
24942
24946
  var RenderModalOutputName = ({
24943
24947
  existence,
24944
24948
  inputStyle: inputStyle2,
@@ -24968,7 +24972,7 @@ var RenderModalOutputName = ({
24968
24972
  onChange: onValueChange,
24969
24973
  rightAlign: true
24970
24974
  }),
24971
- validationMessage ? /* @__PURE__ */ jsxs120(Fragment37, {
24975
+ validationMessage ? /* @__PURE__ */ jsxs120(Fragment38, {
24972
24976
  children: [
24973
24977
  /* @__PURE__ */ jsx238(Spacing, {
24974
24978
  y: 1,
@@ -24980,7 +24984,7 @@ var RenderModalOutputName = ({
24980
24984
  type: "error"
24981
24985
  })
24982
24986
  ]
24983
- }) : existence ? /* @__PURE__ */ jsxs120(Fragment37, {
24987
+ }) : existence ? /* @__PURE__ */ jsxs120(Fragment38, {
24984
24988
  children: [
24985
24989
  /* @__PURE__ */ jsx238(Spacing, {
24986
24990
  y: 1,
@@ -25010,7 +25014,7 @@ var getStringBeforeSuffix = (fileName) => {
25010
25014
  };
25011
25015
 
25012
25016
  // src/components/RenderModal/SeparateAudioOption.tsx
25013
- import { jsx as jsx239, jsxs as jsxs121, Fragment as Fragment38 } from "react/jsx-runtime";
25017
+ import { jsx as jsx239, jsxs as jsxs121, Fragment as Fragment39 } from "react/jsx-runtime";
25014
25018
  var SeparateAudioOptionInput = ({ separateAudioTo, setSeparateAudioTo, audioCodec }) => {
25015
25019
  const existence = useFileExistence(separateAudioTo);
25016
25020
  const onValueChange = useCallback115((e) => {
@@ -25042,7 +25046,7 @@ var SeparateAudioOption = ({ separateAudioTo, setSeparateAudioTo, audioCodec, ou
25042
25046
  setSeparateAudioTo(null);
25043
25047
  }
25044
25048
  }, [audioCodec, outName, setSeparateAudioTo]);
25045
- return /* @__PURE__ */ jsxs121(Fragment38, {
25049
+ return /* @__PURE__ */ jsxs121(Fragment39, {
25046
25050
  children: [
25047
25051
  /* @__PURE__ */ jsxs121("div", {
25048
25052
  style: optionRow,
@@ -25096,7 +25100,7 @@ var humanReadableAudioCodec = (audioCodec) => {
25096
25100
  };
25097
25101
 
25098
25102
  // src/components/RenderModal/RenderModalAudio.tsx
25099
- import { jsx as jsx240, jsxs as jsxs122, Fragment as Fragment39 } from "react/jsx-runtime";
25103
+ import { jsx as jsx240, jsxs as jsxs122, Fragment as Fragment40 } from "react/jsx-runtime";
25100
25104
  var container53 = {
25101
25105
  flex: 1,
25102
25106
  overflowY: "auto"
@@ -25149,7 +25153,7 @@ var RenderModalAudio = ({
25149
25153
  style: container53,
25150
25154
  className: VERTICAL_SCROLLBAR_CLASSNAME,
25151
25155
  children: [
25152
- renderMode === "video" ? /* @__PURE__ */ jsxs122(Fragment39, {
25156
+ renderMode === "video" ? /* @__PURE__ */ jsxs122(Fragment40, {
25153
25157
  children: [
25154
25158
  /* @__PURE__ */ jsx240(MutedSetting, {
25155
25159
  enforceAudioTrack,
@@ -25184,7 +25188,7 @@ var RenderModalAudio = ({
25184
25188
  })
25185
25189
  ]
25186
25190
  }) : null,
25187
- (renderMode === "video" || renderMode === "audio") && !muted && /* @__PURE__ */ jsxs122(Fragment39, {
25191
+ (renderMode === "video" || renderMode === "audio") && !muted && /* @__PURE__ */ jsxs122(Fragment40, {
25188
25192
  children: [
25189
25193
  /* @__PURE__ */ jsx240(EnforceAudioTrackSetting, {
25190
25194
  muted,
@@ -25852,7 +25856,7 @@ var ScaleSetting = ({ scale, setScale }) => {
25852
25856
  };
25853
25857
 
25854
25858
  // src/components/RenderModal/RenderModalPicture.tsx
25855
- import { jsx as jsx248, jsxs as jsxs128, Fragment as Fragment40 } from "react/jsx-runtime";
25859
+ import { jsx as jsx248, jsxs as jsxs128, Fragment as Fragment41 } from "react/jsx-runtime";
25856
25860
  var qualityControlModes = ["crf", "bitrate"];
25857
25861
  var container57 = {
25858
25862
  flex: 1,
@@ -26007,7 +26011,7 @@ var RenderModalPicture = ({
26007
26011
  })
26008
26012
  ]
26009
26013
  }) : null,
26010
- renderMode === "video" ? /* @__PURE__ */ jsxs128(Fragment40, {
26014
+ renderMode === "video" ? /* @__PURE__ */ jsxs128(Fragment41, {
26011
26015
  children: [
26012
26016
  /* @__PURE__ */ jsxs128("div", {
26013
26017
  style: optionRow,
@@ -27563,7 +27567,7 @@ var GuiRenderStatus = ({ job }) => {
27563
27567
  };
27564
27568
 
27565
27569
  // src/components/RenderModal/RenderStatusModal.tsx
27566
- import { jsx as jsx252, jsxs as jsxs131, Fragment as Fragment41 } from "react/jsx-runtime";
27570
+ import { jsx as jsx252, jsxs as jsxs131, Fragment as Fragment42 } from "react/jsx-runtime";
27567
27571
  var container59 = {
27568
27572
  padding: 20,
27569
27573
  maxWidth: 900,
@@ -27627,7 +27631,7 @@ var RenderStatusModal = ({
27627
27631
  /* @__PURE__ */ jsxs131("div", {
27628
27632
  style: container59,
27629
27633
  children: [
27630
- job.status === "failed" ? /* @__PURE__ */ jsxs131(Fragment41, {
27634
+ job.status === "failed" ? /* @__PURE__ */ jsxs131(Fragment42, {
27631
27635
  children: [
27632
27636
  /* @__PURE__ */ jsx252("p", {
27633
27637
  children: "The render failed because of the following error:"
@@ -27825,7 +27829,7 @@ var KnownBugs = ({ bugs }) => {
27825
27829
  };
27826
27830
 
27827
27831
  // src/components/UpdateModal/UpdateModal.tsx
27828
- import { jsx as jsx256, jsxs as jsxs134, Fragment as Fragment42 } from "react/jsx-runtime";
27832
+ import { jsx as jsx256, jsxs as jsxs134, Fragment as Fragment43 } from "react/jsx-runtime";
27829
27833
  var container61 = {
27830
27834
  padding: 20,
27831
27835
  paddingTop: 0
@@ -27876,7 +27880,7 @@ var UpdateModal = ({ info, knownBugs }) => {
27876
27880
  /* @__PURE__ */ jsxs134("div", {
27877
27881
  style: container61,
27878
27882
  children: [
27879
- hasKnownBugs ? /* @__PURE__ */ jsxs134(Fragment42, {
27883
+ hasKnownBugs ? /* @__PURE__ */ jsxs134(Fragment43, {
27880
27884
  children: [
27881
27885
  /* @__PURE__ */ jsxs134("div", {
27882
27886
  style: title7,
@@ -27956,11 +27960,11 @@ var UpdateModal = ({ info, knownBugs }) => {
27956
27960
  };
27957
27961
 
27958
27962
  // src/components/Modals.tsx
27959
- import { jsx as jsx257, jsxs as jsxs135, Fragment as Fragment43 } from "react/jsx-runtime";
27963
+ import { jsx as jsx257, jsxs as jsxs135, Fragment as Fragment44 } from "react/jsx-runtime";
27960
27964
  var Modals = ({ readOnlyStudio }) => {
27961
27965
  const { selectedModal: modalContextType } = useContext81(ModalsContext);
27962
27966
  const canRender = useContext81(StudioServerConnectionCtx).previewServerState.type === "connected";
27963
- return /* @__PURE__ */ jsxs135(Fragment43, {
27967
+ return /* @__PURE__ */ jsxs135(Fragment44, {
27964
27968
  children: [
27965
27969
  modalContextType && modalContextType.type === "duplicate-comp" && /* @__PURE__ */ jsx257(DuplicateComposition, {
27966
27970
  compositionType: modalContextType.compositionType,
@@ -23697,7 +23697,7 @@ var CliCopyButton = ({
23697
23697
  };
23698
23698
 
23699
23699
  // src/components/RenderModal/OptionExplainer.tsx
23700
- import { jsx as jsx227, jsxs as jsxs113 } from "react/jsx-runtime";
23700
+ import { jsx as jsx227, jsxs as jsxs113, Fragment as Fragment35 } from "react/jsx-runtime";
23701
23701
  var container50 = {
23702
23702
  fontSize: 14,
23703
23703
  paddingTop: 10,
@@ -23756,15 +23756,19 @@ var OptionExplainer = ({ option }) => {
23756
23756
  style: title5,
23757
23757
  children: option.name
23758
23758
  }),
23759
- /* @__PURE__ */ jsx227(Spacing, {
23760
- x: 1
23761
- }),
23762
- /* @__PURE__ */ jsx227("a", {
23763
- style: link2,
23764
- href: option.docLink,
23765
- target: "_blank",
23766
- children: "Docs"
23767
- })
23759
+ option.docLink ? /* @__PURE__ */ jsxs113(Fragment35, {
23760
+ children: [
23761
+ /* @__PURE__ */ jsx227(Spacing, {
23762
+ x: 1
23763
+ }),
23764
+ /* @__PURE__ */ jsx227("a", {
23765
+ style: link2,
23766
+ href: option.docLink,
23767
+ target: "_blank",
23768
+ children: "Docs"
23769
+ })
23770
+ ]
23771
+ }) : null
23768
23772
  ]
23769
23773
  }),
23770
23774
  /* @__PURE__ */ jsx227("div", {
@@ -23848,7 +23852,7 @@ var OptionExplainerBubble = ({ id }) => {
23848
23852
  };
23849
23853
 
23850
23854
  // src/components/RenderModal/NumberSetting.tsx
23851
- import { jsx as jsx229, jsxs as jsxs114, Fragment as Fragment35 } from "react/jsx-runtime";
23855
+ import { jsx as jsx229, jsxs as jsxs114, Fragment as Fragment36 } from "react/jsx-runtime";
23852
23856
  var NumberSetting = ({ name, value, step, hint, onValueChanged, max, min, formatter }) => {
23853
23857
  const onTextChanged = useCallback108((e) => {
23854
23858
  onValueChanged((q) => {
@@ -23869,7 +23873,7 @@ var NumberSetting = ({ name, value, step, hint, onValueChanged, max, min, format
23869
23873
  style: label5,
23870
23874
  children: [
23871
23875
  name,
23872
- hint ? /* @__PURE__ */ jsxs114(Fragment35, {
23876
+ hint ? /* @__PURE__ */ jsxs114(Fragment36, {
23873
23877
  children: [
23874
23878
  /* @__PURE__ */ jsx229(Spacing, {
23875
23879
  x: 0.5
@@ -24026,7 +24030,7 @@ var InlineEyeButton = ({ onClick, enabled }) => {
24026
24030
  };
24027
24031
 
24028
24032
  // src/components/RenderModal/EnvInput.tsx
24029
- import { jsx as jsx232, jsxs as jsxs115, Fragment as Fragment36 } from "react/jsx-runtime";
24033
+ import { jsx as jsx232, jsxs as jsxs115, Fragment as Fragment37 } from "react/jsx-runtime";
24030
24034
  var input3 = {
24031
24035
  flex: 1,
24032
24036
  width: "100%"
@@ -24073,7 +24077,7 @@ var EnvInput = ({
24073
24077
  setValueWarningEligible(true);
24074
24078
  }, []);
24075
24079
  const isNodeEnvKey = envKey.trim() === "NODE_ENV";
24076
- return /* @__PURE__ */ jsxs115(Fragment36, {
24080
+ return /* @__PURE__ */ jsxs115(Fragment37, {
24077
24081
  children: [
24078
24082
  /* @__PURE__ */ jsxs115(Row, {
24079
24083
  align: "center",
@@ -24957,7 +24961,7 @@ var useFileExistence = (outName) => {
24957
24961
  };
24958
24962
 
24959
24963
  // src/components/RenderModal/RenderModalOutputName.tsx
24960
- import { jsx as jsx238, jsxs as jsxs120, Fragment as Fragment37 } from "react/jsx-runtime";
24964
+ import { jsx as jsx238, jsxs as jsxs120, Fragment as Fragment38 } from "react/jsx-runtime";
24961
24965
  var RenderModalOutputName = ({
24962
24966
  existence,
24963
24967
  inputStyle: inputStyle2,
@@ -24987,7 +24991,7 @@ var RenderModalOutputName = ({
24987
24991
  onChange: onValueChange,
24988
24992
  rightAlign: true
24989
24993
  }),
24990
- validationMessage ? /* @__PURE__ */ jsxs120(Fragment37, {
24994
+ validationMessage ? /* @__PURE__ */ jsxs120(Fragment38, {
24991
24995
  children: [
24992
24996
  /* @__PURE__ */ jsx238(Spacing, {
24993
24997
  y: 1,
@@ -24999,7 +25003,7 @@ var RenderModalOutputName = ({
24999
25003
  type: "error"
25000
25004
  })
25001
25005
  ]
25002
- }) : existence ? /* @__PURE__ */ jsxs120(Fragment37, {
25006
+ }) : existence ? /* @__PURE__ */ jsxs120(Fragment38, {
25003
25007
  children: [
25004
25008
  /* @__PURE__ */ jsx238(Spacing, {
25005
25009
  y: 1,
@@ -25029,7 +25033,7 @@ var getStringBeforeSuffix = (fileName) => {
25029
25033
  };
25030
25034
 
25031
25035
  // src/components/RenderModal/SeparateAudioOption.tsx
25032
- import { jsx as jsx239, jsxs as jsxs121, Fragment as Fragment38 } from "react/jsx-runtime";
25036
+ import { jsx as jsx239, jsxs as jsxs121, Fragment as Fragment39 } from "react/jsx-runtime";
25033
25037
  var SeparateAudioOptionInput = ({ separateAudioTo, setSeparateAudioTo, audioCodec }) => {
25034
25038
  const existence = useFileExistence(separateAudioTo);
25035
25039
  const onValueChange = useCallback115((e) => {
@@ -25061,7 +25065,7 @@ var SeparateAudioOption = ({ separateAudioTo, setSeparateAudioTo, audioCodec, ou
25061
25065
  setSeparateAudioTo(null);
25062
25066
  }
25063
25067
  }, [audioCodec, outName, setSeparateAudioTo]);
25064
- return /* @__PURE__ */ jsxs121(Fragment38, {
25068
+ return /* @__PURE__ */ jsxs121(Fragment39, {
25065
25069
  children: [
25066
25070
  /* @__PURE__ */ jsxs121("div", {
25067
25071
  style: optionRow,
@@ -25115,7 +25119,7 @@ var humanReadableAudioCodec = (audioCodec) => {
25115
25119
  };
25116
25120
 
25117
25121
  // src/components/RenderModal/RenderModalAudio.tsx
25118
- import { jsx as jsx240, jsxs as jsxs122, Fragment as Fragment39 } from "react/jsx-runtime";
25122
+ import { jsx as jsx240, jsxs as jsxs122, Fragment as Fragment40 } from "react/jsx-runtime";
25119
25123
  var container53 = {
25120
25124
  flex: 1,
25121
25125
  overflowY: "auto"
@@ -25168,7 +25172,7 @@ var RenderModalAudio = ({
25168
25172
  style: container53,
25169
25173
  className: VERTICAL_SCROLLBAR_CLASSNAME,
25170
25174
  children: [
25171
- renderMode === "video" ? /* @__PURE__ */ jsxs122(Fragment39, {
25175
+ renderMode === "video" ? /* @__PURE__ */ jsxs122(Fragment40, {
25172
25176
  children: [
25173
25177
  /* @__PURE__ */ jsx240(MutedSetting, {
25174
25178
  enforceAudioTrack,
@@ -25203,7 +25207,7 @@ var RenderModalAudio = ({
25203
25207
  })
25204
25208
  ]
25205
25209
  }) : null,
25206
- (renderMode === "video" || renderMode === "audio") && !muted && /* @__PURE__ */ jsxs122(Fragment39, {
25210
+ (renderMode === "video" || renderMode === "audio") && !muted && /* @__PURE__ */ jsxs122(Fragment40, {
25207
25211
  children: [
25208
25212
  /* @__PURE__ */ jsx240(EnforceAudioTrackSetting, {
25209
25213
  muted,
@@ -25871,7 +25875,7 @@ var ScaleSetting = ({ scale, setScale }) => {
25871
25875
  };
25872
25876
 
25873
25877
  // src/components/RenderModal/RenderModalPicture.tsx
25874
- import { jsx as jsx248, jsxs as jsxs128, Fragment as Fragment40 } from "react/jsx-runtime";
25878
+ import { jsx as jsx248, jsxs as jsxs128, Fragment as Fragment41 } from "react/jsx-runtime";
25875
25879
  var qualityControlModes = ["crf", "bitrate"];
25876
25880
  var container57 = {
25877
25881
  flex: 1,
@@ -26026,7 +26030,7 @@ var RenderModalPicture = ({
26026
26030
  })
26027
26031
  ]
26028
26032
  }) : null,
26029
- renderMode === "video" ? /* @__PURE__ */ jsxs128(Fragment40, {
26033
+ renderMode === "video" ? /* @__PURE__ */ jsxs128(Fragment41, {
26030
26034
  children: [
26031
26035
  /* @__PURE__ */ jsxs128("div", {
26032
26036
  style: optionRow,
@@ -27582,7 +27586,7 @@ var GuiRenderStatus = ({ job }) => {
27582
27586
  };
27583
27587
 
27584
27588
  // src/components/RenderModal/RenderStatusModal.tsx
27585
- import { jsx as jsx252, jsxs as jsxs131, Fragment as Fragment41 } from "react/jsx-runtime";
27589
+ import { jsx as jsx252, jsxs as jsxs131, Fragment as Fragment42 } from "react/jsx-runtime";
27586
27590
  var container59 = {
27587
27591
  padding: 20,
27588
27592
  maxWidth: 900,
@@ -27646,7 +27650,7 @@ var RenderStatusModal = ({
27646
27650
  /* @__PURE__ */ jsxs131("div", {
27647
27651
  style: container59,
27648
27652
  children: [
27649
- job.status === "failed" ? /* @__PURE__ */ jsxs131(Fragment41, {
27653
+ job.status === "failed" ? /* @__PURE__ */ jsxs131(Fragment42, {
27650
27654
  children: [
27651
27655
  /* @__PURE__ */ jsx252("p", {
27652
27656
  children: "The render failed because of the following error:"
@@ -27844,7 +27848,7 @@ var KnownBugs = ({ bugs }) => {
27844
27848
  };
27845
27849
 
27846
27850
  // src/components/UpdateModal/UpdateModal.tsx
27847
- import { jsx as jsx256, jsxs as jsxs134, Fragment as Fragment42 } from "react/jsx-runtime";
27851
+ import { jsx as jsx256, jsxs as jsxs134, Fragment as Fragment43 } from "react/jsx-runtime";
27848
27852
  var container61 = {
27849
27853
  padding: 20,
27850
27854
  paddingTop: 0
@@ -27895,7 +27899,7 @@ var UpdateModal = ({ info, knownBugs }) => {
27895
27899
  /* @__PURE__ */ jsxs134("div", {
27896
27900
  style: container61,
27897
27901
  children: [
27898
- hasKnownBugs ? /* @__PURE__ */ jsxs134(Fragment42, {
27902
+ hasKnownBugs ? /* @__PURE__ */ jsxs134(Fragment43, {
27899
27903
  children: [
27900
27904
  /* @__PURE__ */ jsxs134("div", {
27901
27905
  style: title7,
@@ -27975,11 +27979,11 @@ var UpdateModal = ({ info, knownBugs }) => {
27975
27979
  };
27976
27980
 
27977
27981
  // src/components/Modals.tsx
27978
- import { jsx as jsx257, jsxs as jsxs135, Fragment as Fragment43 } from "react/jsx-runtime";
27982
+ import { jsx as jsx257, jsxs as jsxs135, Fragment as Fragment44 } from "react/jsx-runtime";
27979
27983
  var Modals = ({ readOnlyStudio }) => {
27980
27984
  const { selectedModal: modalContextType } = useContext81(ModalsContext);
27981
27985
  const canRender = useContext81(StudioServerConnectionCtx).previewServerState.type === "connected";
27982
- return /* @__PURE__ */ jsxs135(Fragment43, {
27986
+ return /* @__PURE__ */ jsxs135(Fragment44, {
27983
27987
  children: [
27984
27988
  modalContextType && modalContextType.type === "duplicate-comp" && /* @__PURE__ */ jsx257(DuplicateComposition, {
27985
27989
  compositionType: modalContextType.compositionType,