@remotion/studio 4.0.434 → 4.0.436

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.
@@ -1086,9 +1086,46 @@ var SidebarContextProvider = ({ children }) => {
1086
1086
  };
1087
1087
 
1088
1088
  // src/components/CompositionSelector.tsx
1089
- import { useCallback as useCallback16, useContext as useContext9, useMemo as useMemo21 } from "react";
1089
+ import { useCallback as useCallback16, useContext as useContext9, useMemo as useMemo22 } from "react";
1090
1090
  import { Internals as Internals7 } from "remotion";
1091
1091
 
1092
+ // src/error-overlay/remotion-overlay/ShortcutHint.tsx
1093
+ import { useMemo as useMemo9 } from "react";
1094
+ import { jsx as jsx10, jsxs as jsxs3 } from "react/jsx-runtime";
1095
+ var cmdOrCtrlCharacter = window.navigator.platform.startsWith("Mac") ? "⌘" : "Ctrl";
1096
+ var container3 = {
1097
+ display: "inline-block",
1098
+ marginLeft: 6,
1099
+ opacity: 0.6,
1100
+ verticalAlign: "middle",
1101
+ fontSize: 14
1102
+ };
1103
+ var ShortcutHint = ({ keyToPress, cmdOrCtrl }) => {
1104
+ const style = useMemo9(() => {
1105
+ if (keyToPress === "↵") {
1106
+ return {
1107
+ display: "inline-block",
1108
+ transform: `translateY(2px)`,
1109
+ fontSize: 14
1110
+ };
1111
+ }
1112
+ return {};
1113
+ }, [keyToPress]);
1114
+ if (areKeyboardShortcutsDisabled()) {
1115
+ return null;
1116
+ }
1117
+ return /* @__PURE__ */ jsxs3("span", {
1118
+ style: container3,
1119
+ children: [
1120
+ cmdOrCtrl ? `${cmdOrCtrlCharacter}` : "",
1121
+ /* @__PURE__ */ jsx10("span", {
1122
+ style,
1123
+ children: keyToPress.toUpperCase()
1124
+ })
1125
+ ]
1126
+ });
1127
+ };
1128
+
1092
1129
  // src/helpers/create-folder-tree.ts
1093
1130
  var buildAssetFolderStructure = (files, parentFolderName, foldersExpanded) => {
1094
1131
  const notInFolder = files.filter((f) => !f.name.includes("/"));
@@ -1270,36 +1307,45 @@ var sortItemsByNonceHistory = (items) => {
1270
1307
  return result;
1271
1308
  };
1272
1309
 
1310
+ // src/state/modals.ts
1311
+ import { createContext as createContext9 } from "react";
1312
+ var ModalsContext = createContext9({
1313
+ selectedModal: null,
1314
+ setSelectedModal: () => {
1315
+ return;
1316
+ }
1317
+ });
1318
+
1273
1319
  // src/components/CompositionSelectorItem.tsx
1274
- import { useCallback as useCallback15, useContext as useContext8, useMemo as useMemo20, useState as useState14 } from "react";
1320
+ import { useCallback as useCallback15, useContext as useContext8, useMemo as useMemo21, useState as useState14 } from "react";
1275
1321
 
1276
1322
  // src/icons/folder.tsx
1277
- import { jsx as jsx10 } from "react/jsx-runtime";
1323
+ import { jsx as jsx11 } from "react/jsx-runtime";
1278
1324
  var CollapsedFolderIcon = ({ color, ...props }) => {
1279
- return /* @__PURE__ */ jsx10("svg", {
1325
+ return /* @__PURE__ */ jsx11("svg", {
1280
1326
  viewBox: "0 0 512 512",
1281
1327
  ...props,
1282
- children: /* @__PURE__ */ jsx10("path", {
1328
+ children: /* @__PURE__ */ jsx11("path", {
1283
1329
  fill: color,
1284
1330
  d: "M447.1 96H272L226.7 50.75C214.7 38.74 198.5 32 181.5 32H63.1c-35.35 0-64 28.65-64 64v320c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V160C511.1 124.7 483.3 96 447.1 96zM480 416c0 17.64-14.36 32-32 32H64c-17.64 0-32-14.36-32-32V96c0-17.64 14.36-32 32-32h117.5c8.549 0 16.58 3.328 22.63 9.375L258.7 128H448c17.64 0 32 14.36 32 32V416z"
1285
1331
  })
1286
1332
  });
1287
1333
  };
1288
1334
  var ExpandedFolderIcon = ({ color, ...props }) => {
1289
- return /* @__PURE__ */ jsx10("svg", {
1335
+ return /* @__PURE__ */ jsx11("svg", {
1290
1336
  viewBox: "0 0 576 512",
1291
1337
  ...props,
1292
- children: /* @__PURE__ */ jsx10("path", {
1338
+ children: /* @__PURE__ */ jsx11("path", {
1293
1339
  fill: color,
1294
1340
  d: "M566.6 211.6C557.5 199.1 543.4 192 527.1 192H134.2C114.3 192 96.2 204.5 89.23 223.1L32 375.8V96c0-17.64 14.36-32 32-32h117.5c8.549 0 16.58 3.328 22.63 9.375L258.7 128H448c17.64 0 32 14.36 32 32h32c0-35.35-28.65-64-64-64H272L226.7 50.75C214.7 38.74 198.5 32 181.5 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h403.1c21.11 0 39.53-13.53 45.81-33.69l60-192C578.4 239.6 575.8 224 566.6 211.6zM543.2 244.8l-60 192C481.1 443.5 475 448 467.1 448H64c-3.322 0-6.357-.9551-9.373-1.898c-2.184-1.17-4.109-2.832-5.596-4.977c-3.031-4.375-3.703-9.75-1.828-14.73l72-192C121.5 228.2 127.5 224 134.2 224h393.8c5.141 0 9.844 2.375 12.89 6.516C543.9 234.7 544.8 239.9 543.2 244.8z"
1295
1341
  })
1296
1342
  });
1297
1343
  };
1298
1344
  var ExpandedFolderIconSolid = ({ color, ...props }) => {
1299
- return /* @__PURE__ */ jsx10("svg", {
1345
+ return /* @__PURE__ */ jsx11("svg", {
1300
1346
  viewBox: "0 0 576 512",
1301
1347
  ...props,
1302
- children: /* @__PURE__ */ jsx10("path", {
1348
+ children: /* @__PURE__ */ jsx11("path", {
1303
1349
  fill: color,
1304
1350
  d: "M384 480h48c11.4 0 21.9-6 27.6-15.9l112-192c5.8-9.9 5.8-22.1 .1-32.1S555.5 224 544 224H144c-11.4 0-21.9 6-27.6 15.9L48 357.1V96c0-8.8 7.2-16 16-16H181.5c4.2 0 8.3 1.7 11.3 4.7l26.5 26.5c21 21 49.5 32.8 79.2 32.8H416c8.8 0 16 7.2 16 16v32h48V160c0-35.3-28.7-64-64-64H298.5c-17 0-33.3-6.7-45.3-18.7L226.7 50.7c-12-12-28.3-18.7-45.3-18.7H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H87.7 384z"
1305
1351
  })
@@ -1307,12 +1353,12 @@ var ExpandedFolderIconSolid = ({ color, ...props }) => {
1307
1353
  };
1308
1354
 
1309
1355
  // src/icons/still.tsx
1310
- import { jsx as jsx11 } from "react/jsx-runtime";
1356
+ import { jsx as jsx12 } from "react/jsx-runtime";
1311
1357
  var StillIcon = ({ color, ...props }) => {
1312
- return /* @__PURE__ */ jsx11("svg", {
1358
+ return /* @__PURE__ */ jsx12("svg", {
1313
1359
  ...props,
1314
1360
  viewBox: "0 0 512 512",
1315
- children: /* @__PURE__ */ jsx11("path", {
1361
+ children: /* @__PURE__ */ jsx12("path", {
1316
1362
  fill: color,
1317
1363
  d: "M144 288C144 226.1 194.1 176 256 176C317.9 176 368 226.1 368 288C368 349.9 317.9 400 256 400C194.1 400 144 349.9 144 288zM256 208C211.8 208 176 243.8 176 288C176 332.2 211.8 368 256 368C300.2 368 336 332.2 336 288C336 243.8 300.2 208 256 208zM362.9 64.82L373.3 96H448C483.3 96 512 124.7 512 160V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V160C0 124.7 28.65 96 64 96H138.7L149.1 64.82C155.6 45.22 173.9 32 194.6 32H317.4C338.1 32 356.4 45.22 362.9 64.82H362.9zM64 128C46.33 128 32 142.3 32 160V416C32 433.7 46.33 448 64 448H448C465.7 448 480 433.7 480 416V160C480 142.3 465.7 128 448 128H350.3L332.6 74.94C330.4 68.41 324.3 64 317.4 64H194.6C187.7 64 181.6 68.41 179.4 74.94L161.7 128H64z"
1318
1364
  })
@@ -1320,33 +1366,24 @@ var StillIcon = ({ color, ...props }) => {
1320
1366
  };
1321
1367
 
1322
1368
  // src/icons/video.tsx
1323
- import { jsx as jsx12 } from "react/jsx-runtime";
1369
+ import { jsx as jsx13 } from "react/jsx-runtime";
1324
1370
  var FilmIcon = ({ color, ...props }) => {
1325
- return /* @__PURE__ */ jsx12("svg", {
1371
+ return /* @__PURE__ */ jsx13("svg", {
1326
1372
  ...props,
1327
1373
  xmlns: "http://www.w3.org/2000/svg",
1328
1374
  viewBox: "0 0 512 512",
1329
- children: /* @__PURE__ */ jsx12("path", {
1375
+ children: /* @__PURE__ */ jsx13("path", {
1330
1376
  fill: color,
1331
1377
  d: "M448 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V96C512 60.65 483.3 32 448 32zM384 64v176H128V64H384zM32 96c0-17.64 14.36-32 32-32h32v80H32V96zM32 176h64v64H32V176zM32 272h64v64H32V272zM64 448c-17.64 0-32-14.36-32-32v-48h64V448H64zM128 448V272h256V448H128zM480 416c0 17.64-14.36 32-32 32h-32v-80h64V416zM480 336h-64v-64h64V336zM480 240h-64v-64h64V240zM480 144h-64V64h32c17.64 0 32 14.36 32 32V144z"
1332
1378
  })
1333
1379
  });
1334
1380
  };
1335
1381
 
1336
- // src/state/modals.ts
1337
- import { createContext as createContext9 } from "react";
1338
- var ModalsContext = createContext9({
1339
- selectedModal: null,
1340
- setSelectedModal: () => {
1341
- return;
1342
- }
1343
- });
1344
-
1345
1382
  // src/components/CompositionContextButton.tsx
1346
- import { useCallback as useCallback12, useContext as useContext6, useMemo as useMemo17 } from "react";
1383
+ import { useCallback as useCallback12, useContext as useContext6, useMemo as useMemo18 } from "react";
1347
1384
 
1348
1385
  // src/helpers/client-id.tsx
1349
- import React12, { useCallback as useCallback6, useEffect as useEffect8, useMemo as useMemo10, useRef as useRef6 } from "react";
1386
+ import React13, { useCallback as useCallback6, useEffect as useEffect8, useMemo as useMemo11, useRef as useRef6 } from "react";
1350
1387
  import { Internals as Internals4 } from "remotion";
1351
1388
 
1352
1389
  // src/components/Notifications/NotificationCenter.tsx
@@ -1359,7 +1396,7 @@ import {
1359
1396
 
1360
1397
  // src/components/Notifications/Notification.tsx
1361
1398
  import { useEffect as useEffect6 } from "react";
1362
- import { jsx as jsx13 } from "react/jsx-runtime";
1399
+ import { jsx as jsx14 } from "react/jsx-runtime";
1363
1400
  var notification = {
1364
1401
  backgroundColor: "#111111",
1365
1402
  color: "white",
@@ -1386,7 +1423,7 @@ var Notification = ({ children, id, duration, created, onRemove }) => {
1386
1423
  clearTimeout(timeout);
1387
1424
  };
1388
1425
  }, [created, duration, id, onRemove]);
1389
- return /* @__PURE__ */ jsx13("div", {
1426
+ return /* @__PURE__ */ jsx14("div", {
1390
1427
  className: "css-reset",
1391
1428
  style: notification,
1392
1429
  children
@@ -1394,8 +1431,8 @@ var Notification = ({ children, id, duration, created, onRemove }) => {
1394
1431
  };
1395
1432
 
1396
1433
  // src/components/Notifications/NotificationCenter.tsx
1397
- import { jsx as jsx14 } from "react/jsx-runtime";
1398
- var container3 = {
1434
+ import { jsx as jsx15 } from "react/jsx-runtime";
1435
+ var container4 = {
1399
1436
  position: "absolute",
1400
1437
  justifyContent: "center",
1401
1438
  alignItems: "center",
@@ -1449,10 +1486,10 @@ var NotificationCenter = () => {
1449
1486
  addNotification
1450
1487
  };
1451
1488
  }, [addNotification]);
1452
- return /* @__PURE__ */ jsx14("div", {
1453
- style: container3,
1489
+ return /* @__PURE__ */ jsx15("div", {
1490
+ style: container4,
1454
1491
  children: notifications.map((n) => {
1455
- return /* @__PURE__ */ jsx14(Notification, {
1492
+ return /* @__PURE__ */ jsx15(Notification, {
1456
1493
  created: n.created,
1457
1494
  duration: n.duration,
1458
1495
  id: n.id,
@@ -1481,12 +1518,12 @@ var playBeepSound = async (renderId) => {
1481
1518
  var PlayBeepSound_default = playBeepSound;
1482
1519
 
1483
1520
  // src/components/RenderQueue/context.tsx
1484
- import React11, {
1521
+ import React12, {
1485
1522
  createRef as createRef4,
1486
1523
  useCallback as useCallback5,
1487
1524
  useEffect as useEffect7,
1488
1525
  useImperativeHandle as useImperativeHandle3,
1489
- useMemo as useMemo9,
1526
+ useMemo as useMemo10,
1490
1527
  useRef as useRef5,
1491
1528
  useState as useState8
1492
1529
  } from "react";
@@ -1525,7 +1562,7 @@ var cancelAbortController = (jobId) => {
1525
1562
  };
1526
1563
 
1527
1564
  // src/components/RenderQueue/context.tsx
1528
- import { jsx as jsx15 } from "react/jsx-runtime";
1565
+ import { jsx as jsx16 } from "react/jsx-runtime";
1529
1566
  var restorePersistedClientRenders = () => {
1530
1567
  const persisted = window.remotion_initialClientRenders ?? [];
1531
1568
  return persisted.map((r) => ({ ...r, status: "done" }));
@@ -1537,7 +1574,7 @@ var noopString = () => "";
1537
1574
  var noop2 = () => {
1538
1575
  return;
1539
1576
  };
1540
- var RenderQueueContext = React11.createContext({
1577
+ var RenderQueueContext = React12.createContext({
1541
1578
  jobs: [],
1542
1579
  serverJobs: [],
1543
1580
  clientJobs: [],
@@ -1574,7 +1611,13 @@ var RenderQueueContextProvider = ({ children }) => {
1574
1611
  setClientJobs((prev) => prev.map((job) => job.id === nextJob.id ? {
1575
1612
  ...job,
1576
1613
  status: "running",
1577
- progress: { encodedFrames: 0, totalFrames: 0 }
1614
+ progress: {
1615
+ encodedFrames: 0,
1616
+ totalFrames: 0,
1617
+ doneIn: null,
1618
+ renderEstimatedTime: 0,
1619
+ progress: 0
1620
+ }
1578
1621
  } : job));
1579
1622
  processJobCallbackRef.current(nextJob);
1580
1623
  }, [clientJobs, currentlyProcessing]);
@@ -1673,7 +1716,7 @@ var RenderQueueContextProvider = ({ children }) => {
1673
1716
  });
1674
1717
  }
1675
1718
  }), []);
1676
- const value = useMemo9(() => {
1719
+ const value = useMemo10(() => {
1677
1720
  return {
1678
1721
  jobs: [...serverJobs, ...clientJobs].sort((a, b) => a.startedAt - b.startedAt),
1679
1722
  serverJobs,
@@ -1705,15 +1748,15 @@ var RenderQueueContextProvider = ({ children }) => {
1705
1748
  cancelClientJob,
1706
1749
  setProcessJobCallback
1707
1750
  ]);
1708
- return /* @__PURE__ */ jsx15(RenderQueueContext.Provider, {
1751
+ return /* @__PURE__ */ jsx16(RenderQueueContext.Provider, {
1709
1752
  value,
1710
1753
  children
1711
1754
  });
1712
1755
  };
1713
1756
 
1714
1757
  // src/helpers/client-id.tsx
1715
- import { jsx as jsx16 } from "react/jsx-runtime";
1716
- var StudioServerConnectionCtx = React12.createContext({
1758
+ import { jsx as jsx17 } from "react/jsx-runtime";
1759
+ var StudioServerConnectionCtx = React13.createContext({
1717
1760
  previewServerState: {
1718
1761
  type: "init"
1719
1762
  },
@@ -1797,28 +1840,28 @@ var PreviewServerConnection = ({ children, readOnlyStudio }) => {
1797
1840
  close();
1798
1841
  };
1799
1842
  }, [openEventSource, readOnlyStudio]);
1800
- const [state, setState] = React12.useState({
1843
+ const [state, setState] = React13.useState({
1801
1844
  type: "init"
1802
1845
  });
1803
- const context = useMemo10(() => {
1846
+ const context = useMemo11(() => {
1804
1847
  return {
1805
1848
  previewServerState: state,
1806
1849
  subscribeToEvent
1807
1850
  };
1808
1851
  }, [state, subscribeToEvent]);
1809
- return /* @__PURE__ */ jsx16(StudioServerConnectionCtx.Provider, {
1852
+ return /* @__PURE__ */ jsx17(StudioServerConnectionCtx.Provider, {
1810
1853
  value: context,
1811
1854
  children
1812
1855
  });
1813
1856
  };
1814
1857
 
1815
1858
  // src/icons/ellipsis.tsx
1816
- import { jsx as jsx17 } from "react/jsx-runtime";
1859
+ import { jsx as jsx18 } from "react/jsx-runtime";
1817
1860
  var EllipsisIcon = (props) => {
1818
- return /* @__PURE__ */ jsx17("svg", {
1861
+ return /* @__PURE__ */ jsx18("svg", {
1819
1862
  ...props.svgProps,
1820
1863
  viewBox: "0 0 448 512",
1821
- children: /* @__PURE__ */ jsx17("path", {
1864
+ children: /* @__PURE__ */ jsx18("path", {
1822
1865
  fill: props.fill,
1823
1866
  d: "M8 256a56 56 0 1 1 112 0A56 56 0 1 1 8 256zm160 0a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm216-56a56 56 0 1 1 0 112 56 56 0 1 1 0-112z"
1824
1867
  })
@@ -1827,12 +1870,12 @@ var EllipsisIcon = (props) => {
1827
1870
 
1828
1871
  // src/components/InlineDropdown.tsx
1829
1872
  import { PlayerInternals as PlayerInternals3 } from "@remotion/player";
1830
- import { useCallback as useCallback11, useMemo as useMemo16, useRef as useRef9, useState as useState12 } from "react";
1873
+ import { useCallback as useCallback11, useMemo as useMemo17, useRef as useRef9, useState as useState12 } from "react";
1831
1874
  import ReactDOM2 from "react-dom";
1832
1875
 
1833
1876
  // src/components/InlineAction.tsx
1834
- import { useCallback as useCallback7, useMemo as useMemo11, useState as useState9 } from "react";
1835
- import { jsx as jsx18 } from "react/jsx-runtime";
1877
+ import { useCallback as useCallback7, useMemo as useMemo12, useState as useState9 } from "react";
1878
+ import { jsx as jsx19 } from "react/jsx-runtime";
1836
1879
  var InlineAction = ({
1837
1880
  renderAction,
1838
1881
  onClick,
@@ -1847,7 +1890,7 @@ var InlineAction = ({
1847
1890
  const onPointerLeave = useCallback7(() => {
1848
1891
  setHovered(false);
1849
1892
  }, []);
1850
- const style = useMemo11(() => {
1893
+ const style = useMemo12(() => {
1851
1894
  return {
1852
1895
  border: "none",
1853
1896
  background: disabled ? "transparent" : getBackgroundFromHoverState({ hovered, selected: false }),
@@ -1860,7 +1903,7 @@ var InlineAction = ({
1860
1903
  pointerEvents: disabled ? "none" : "auto"
1861
1904
  };
1862
1905
  }, [disabled, hovered]);
1863
- return /* @__PURE__ */ jsx18("button", {
1906
+ return /* @__PURE__ */ jsx19("button", {
1864
1907
  type: "button",
1865
1908
  onPointerEnter,
1866
1909
  onPointerLeave,
@@ -1924,7 +1967,7 @@ var inlineCodeSnippet = {
1924
1967
  };
1925
1968
 
1926
1969
  // src/components/NewComposition/MenuContent.tsx
1927
- import { useCallback as useCallback10, useEffect as useEffect10, useMemo as useMemo15, useRef as useRef8, useState as useState11 } from "react";
1970
+ import { useCallback as useCallback10, useEffect as useEffect10, useMemo as useMemo16, useRef as useRef8, useState as useState11 } from "react";
1928
1971
 
1929
1972
  // src/components/Menu/is-menu-item.tsx
1930
1973
  var MENU_INITIATOR_CLASSNAME = "__remotion-studio-menu-initiator";
@@ -1936,7 +1979,7 @@ var isMenuItem = (el) => {
1936
1979
  };
1937
1980
 
1938
1981
  // src/components/Menu/MenuDivider.tsx
1939
- import { jsx as jsx19 } from "react/jsx-runtime";
1982
+ import { jsx as jsx20 } from "react/jsx-runtime";
1940
1983
  var menuDivider = {
1941
1984
  marginTop: 4,
1942
1985
  marginBottom: 4,
@@ -1944,19 +1987,19 @@ var menuDivider = {
1944
1987
  backgroundColor: INPUT_BORDER_COLOR_HOVERED
1945
1988
  };
1946
1989
  var MenuDivider = () => {
1947
- return /* @__PURE__ */ jsx19("div", {
1990
+ return /* @__PURE__ */ jsx20("div", {
1948
1991
  style: menuDivider
1949
1992
  });
1950
1993
  };
1951
1994
 
1952
1995
  // src/components/Menu/MenuSubItem.tsx
1953
1996
  import { PlayerInternals as PlayerInternals2 } from "@remotion/player";
1954
- import { useCallback as useCallback9, useEffect as useEffect9, useMemo as useMemo14, useRef as useRef7, useState as useState10 } from "react";
1997
+ import { useCallback as useCallback9, useEffect as useEffect9, useMemo as useMemo15, useRef as useRef7, useState as useState10 } from "react";
1955
1998
  import ReactDOM from "react-dom";
1956
1999
 
1957
2000
  // src/icons/caret.tsx
1958
- import { useMemo as useMemo12 } from "react";
1959
- import { jsx as jsx20 } from "react/jsx-runtime";
2001
+ import { useMemo as useMemo13 } from "react";
2002
+ import { jsx as jsx21 } from "react/jsx-runtime";
1960
2003
  var caret = {
1961
2004
  height: 12
1962
2005
  };
@@ -1966,36 +2009,36 @@ var caretDown = {
1966
2009
  var angleDown = {
1967
2010
  width: 10
1968
2011
  };
1969
- var CaretRight = () => /* @__PURE__ */ jsx20("svg", {
2012
+ var CaretRight = () => /* @__PURE__ */ jsx21("svg", {
1970
2013
  viewBox: "0 0 192 512",
1971
2014
  style: caret,
1972
- children: /* @__PURE__ */ jsx20("path", {
2015
+ children: /* @__PURE__ */ jsx21("path", {
1973
2016
  fill: "currentColor",
1974
2017
  d: "M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"
1975
2018
  })
1976
2019
  });
1977
2020
  var CaretDown = () => {
1978
- return /* @__PURE__ */ jsx20("svg", {
2021
+ return /* @__PURE__ */ jsx21("svg", {
1979
2022
  viewBox: "0 0 320 512",
1980
2023
  style: caretDown,
1981
- children: /* @__PURE__ */ jsx20("path", {
2024
+ children: /* @__PURE__ */ jsx21("path", {
1982
2025
  fill: "currentColor",
1983
2026
  d: "M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"
1984
2027
  })
1985
2028
  });
1986
2029
  };
1987
2030
  var AngleDown = ({ down }) => {
1988
- const style = useMemo12(() => {
2031
+ const style = useMemo13(() => {
1989
2032
  return {
1990
2033
  ...angleDown,
1991
2034
  transform: down ? "rotate(180deg)" : "rotate(0deg)",
1992
2035
  marginTop: 1
1993
2036
  };
1994
2037
  }, [down]);
1995
- return /* @__PURE__ */ jsx20("svg", {
2038
+ return /* @__PURE__ */ jsx21("svg", {
1996
2039
  style,
1997
2040
  viewBox: "0 0 448 512",
1998
- children: /* @__PURE__ */ jsx20("path", {
2041
+ children: /* @__PURE__ */ jsx21("path", {
1999
2042
  fill: LIGHT_TEXT,
2000
2043
  d: "M201.4 342.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 274.7 86.6 137.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"
2001
2044
  })
@@ -2003,11 +2046,11 @@ var AngleDown = ({ down }) => {
2003
2046
  };
2004
2047
 
2005
2048
  // src/components/layout.tsx
2006
- import { useMemo as useMemo13 } from "react";
2007
- import { jsx as jsx21 } from "react/jsx-runtime";
2049
+ import { useMemo as useMemo14 } from "react";
2050
+ import { jsx as jsx22 } from "react/jsx-runtime";
2008
2051
  var SPACING_UNIT = 8;
2009
2052
  var Spacing = ({ x = 0, y = 0, block = false }) => {
2010
- const style = useMemo13(() => {
2053
+ const style = useMemo14(() => {
2011
2054
  return {
2012
2055
  display: block ? "block" : "inline-block",
2013
2056
  width: x * SPACING_UNIT,
@@ -2015,17 +2058,17 @@ var Spacing = ({ x = 0, y = 0, block = false }) => {
2015
2058
  flexShrink: 0
2016
2059
  };
2017
2060
  }, [block, x, y]);
2018
- return /* @__PURE__ */ jsx21("div", {
2061
+ return /* @__PURE__ */ jsx22("div", {
2019
2062
  style
2020
2063
  });
2021
2064
  };
2022
2065
  var flexCss = { flex: 1 };
2023
- var Flex = ({ children }) => /* @__PURE__ */ jsx21("div", {
2066
+ var Flex = ({ children }) => /* @__PURE__ */ jsx22("div", {
2024
2067
  style: flexCss,
2025
2068
  children
2026
2069
  });
2027
2070
  var Row = ({ children, justify, className, align, flex, style = {}, ...other }) => {
2028
- const finalStyle = useMemo13(() => {
2071
+ const finalStyle = useMemo14(() => {
2029
2072
  return {
2030
2073
  ...style,
2031
2074
  display: "flex",
@@ -2035,7 +2078,7 @@ var Row = ({ children, justify, className, align, flex, style = {}, ...other })
2035
2078
  flex: flex ?? undefined
2036
2079
  };
2037
2080
  }, [align, flex, justify, style]);
2038
- return /* @__PURE__ */ jsx21("div", {
2081
+ return /* @__PURE__ */ jsx22("div", {
2039
2082
  className,
2040
2083
  style: finalStyle,
2041
2084
  ...other,
@@ -2043,7 +2086,7 @@ var Row = ({ children, justify, className, align, flex, style = {}, ...other })
2043
2086
  });
2044
2087
  };
2045
2088
  var Column = ({ children, justify, className, align, style = {} }) => {
2046
- const finalStyle = useMemo13(() => {
2089
+ const finalStyle = useMemo14(() => {
2047
2090
  return {
2048
2091
  ...style,
2049
2092
  display: "flex",
@@ -2052,7 +2095,7 @@ var Column = ({ children, justify, className, align, style = {} }) => {
2052
2095
  alignItems: align ?? "flex-start"
2053
2096
  };
2054
2097
  }, [align, justify, style]);
2055
- return /* @__PURE__ */ jsx21("div", {
2098
+ return /* @__PURE__ */ jsx22("div", {
2056
2099
  className,
2057
2100
  style: finalStyle,
2058
2101
  children
@@ -2061,7 +2104,7 @@ var Column = ({ children, justify, className, align, style = {} }) => {
2061
2104
 
2062
2105
  // src/components/Menu/SubMenu.tsx
2063
2106
  import { useCallback as useCallback8 } from "react";
2064
- import { jsx as jsx22 } from "react/jsx-runtime";
2107
+ import { jsx as jsx23 } from "react/jsx-runtime";
2065
2108
  var SubMenuComponent = ({
2066
2109
  portalStyle,
2067
2110
  subMenuActivated,
@@ -2077,13 +2120,13 @@ var SubMenuComponent = ({
2077
2120
  onQuitFullMenu();
2078
2121
  }
2079
2122
  }, [mobileLayout, onQuitFullMenu, onQuitSubMenu]);
2080
- return /* @__PURE__ */ jsx22(HigherZIndex, {
2123
+ return /* @__PURE__ */ jsx23(HigherZIndex, {
2081
2124
  onEscape: onQuitFullMenu,
2082
2125
  onOutsideClick,
2083
- children: /* @__PURE__ */ jsx22("div", {
2126
+ children: /* @__PURE__ */ jsx23("div", {
2084
2127
  style: portalStyle,
2085
2128
  className: "css-reset",
2086
- children: /* @__PURE__ */ jsx22(MenuContent, {
2129
+ children: /* @__PURE__ */ jsx23(MenuContent, {
2087
2130
  onNextMenu: noop,
2088
2131
  onPreviousMenu: onQuitSubMenu,
2089
2132
  values: subMenu.items,
@@ -2098,8 +2141,8 @@ var SubMenuComponent = ({
2098
2141
  };
2099
2142
 
2100
2143
  // src/components/Menu/MenuSubItem.tsx
2101
- import { jsx as jsx23, jsxs as jsxs3, Fragment } from "react/jsx-runtime";
2102
- var container4 = {
2144
+ import { jsx as jsx24, jsxs as jsxs4, Fragment } from "react/jsx-runtime";
2145
+ var container5 = {
2103
2146
  paddingTop: 8,
2104
2147
  paddingBottom: 8,
2105
2148
  paddingLeft: 12,
@@ -2148,9 +2191,9 @@ var MenuSubItem = ({
2148
2191
  });
2149
2192
  const mobileLayout = useMobileLayout();
2150
2193
  const { currentZIndex } = useZIndex();
2151
- const style = useMemo14(() => {
2194
+ const style = useMemo15(() => {
2152
2195
  return {
2153
- ...container4,
2196
+ ...container5,
2154
2197
  backgroundColor: selected && !disabled ? CLEAR_HOVER : "transparent",
2155
2198
  opacity: disabled ? 0.5 : 1,
2156
2199
  cursor: disabled ? "not-allowed" : "default"
@@ -2180,7 +2223,7 @@ var MenuSubItem = ({
2180
2223
  const onQuitSubmenu = useCallback9(() => {
2181
2224
  setSubMenuActivated(false);
2182
2225
  }, [setSubMenuActivated]);
2183
- const portalStyle = useMemo14(() => {
2226
+ const portalStyle = useMemo15(() => {
2184
2227
  if (!selected || !size || !subMenu || !subMenuActivated) {
2185
2228
  return null;
2186
2229
  }
@@ -2207,7 +2250,7 @@ var MenuSubItem = ({
2207
2250
  });
2208
2251
  }
2209
2252
  }, [selected]);
2210
- return /* @__PURE__ */ jsx23("div", {
2253
+ return /* @__PURE__ */ jsx24("div", {
2211
2254
  ref,
2212
2255
  onPointerEnter,
2213
2256
  onPointerLeave,
@@ -2215,35 +2258,35 @@ var MenuSubItem = ({
2215
2258
  onPointerUp,
2216
2259
  role: "button",
2217
2260
  className: MENU_ITEM_CLASSNAME,
2218
- children: /* @__PURE__ */ jsxs3(Row, {
2261
+ children: /* @__PURE__ */ jsxs4(Row, {
2219
2262
  align: "center",
2220
2263
  children: [
2221
- leaveLeftSpace ? /* @__PURE__ */ jsxs3(Fragment, {
2264
+ leaveLeftSpace ? /* @__PURE__ */ jsxs4(Fragment, {
2222
2265
  children: [
2223
- /* @__PURE__ */ jsx23("div", {
2266
+ /* @__PURE__ */ jsx24("div", {
2224
2267
  style: leftSpace,
2225
2268
  children: leftItem
2226
2269
  }),
2227
- /* @__PURE__ */ jsx23(Spacing, {
2270
+ /* @__PURE__ */ jsx24(Spacing, {
2228
2271
  x: 1
2229
2272
  })
2230
2273
  ]
2231
2274
  }) : null,
2232
- /* @__PURE__ */ jsx23("div", {
2275
+ /* @__PURE__ */ jsx24("div", {
2233
2276
  style: labelStyle,
2234
2277
  ...{ title: typeof label === "string" ? label : undefined },
2235
2278
  children: label
2236
2279
  }),
2237
2280
  " ",
2238
- /* @__PURE__ */ jsx23(Spacing, {
2281
+ /* @__PURE__ */ jsx24(Spacing, {
2239
2282
  x: 2
2240
2283
  }),
2241
- subMenu ? /* @__PURE__ */ jsx23(CaretRight, {}) : null,
2242
- keyHint && !areKeyboardShortcutsDisabled() ? /* @__PURE__ */ jsx23("span", {
2284
+ subMenu ? /* @__PURE__ */ jsx24(CaretRight, {}) : null,
2285
+ keyHint && !areKeyboardShortcutsDisabled() ? /* @__PURE__ */ jsx24("span", {
2243
2286
  style: keyHintCss,
2244
2287
  children: keyHint
2245
2288
  }) : null,
2246
- portalStyle && subMenu ? ReactDOM.createPortal(/* @__PURE__ */ jsx23(SubMenuComponent, {
2289
+ portalStyle && subMenu ? ReactDOM.createPortal(/* @__PURE__ */ jsx24(SubMenuComponent, {
2247
2290
  onQuitFullMenu: onQuitMenu,
2248
2291
  subMenu,
2249
2292
  onQuitSubMenu: onQuitSubmenu,
@@ -2256,9 +2299,9 @@ var MenuSubItem = ({
2256
2299
  };
2257
2300
 
2258
2301
  // src/components/NewComposition/MenuContent.tsx
2259
- import { jsx as jsx24 } from "react/jsx-runtime";
2302
+ import { jsx as jsx25 } from "react/jsx-runtime";
2260
2303
  var BORDER_SIZE = 1;
2261
- var container5 = {
2304
+ var container6 = {
2262
2305
  paddingTop: MENU_VERTICAL_PADDING,
2263
2306
  paddingBottom: MENU_VERTICAL_PADDING,
2264
2307
  border: `${BORDER_SIZE}px solid ${INPUT_BORDER_COLOR_UNHOVERED}`,
@@ -2365,8 +2408,8 @@ var MenuContent = ({
2365
2408
  }
2366
2409
  setSubMenuActivated("without-mouse");
2367
2410
  }, [onNextMenu, selectedItem, values]);
2368
- const containerWithHeight = useMemo15(() => {
2369
- const containerStyles = { ...container5 };
2411
+ const containerWithHeight = useMemo16(() => {
2412
+ const containerStyles = { ...container6 };
2370
2413
  if (fixedHeight === null) {
2371
2414
  containerStyles.maxHeight = 600;
2372
2415
  } else {
@@ -2492,13 +2535,13 @@ var MenuContent = ({
2492
2535
  current.addEventListener("pointerleave", onPointerLeave);
2493
2536
  return () => current.removeEventListener("pointerleave", onPointerLeave);
2494
2537
  }, [onHide, subMenuActivated]);
2495
- return /* @__PURE__ */ jsx24("div", {
2538
+ return /* @__PURE__ */ jsx25("div", {
2496
2539
  ref: containerRef,
2497
2540
  style: containerWithHeight,
2498
2541
  className: VERTICAL_SCROLLBAR_CLASSNAME,
2499
2542
  children: values.map((item) => {
2500
2543
  if (item.type === "divider") {
2501
- return /* @__PURE__ */ jsx24(MenuDivider, {}, item.id);
2544
+ return /* @__PURE__ */ jsx25(MenuDivider, {}, item.id);
2502
2545
  }
2503
2546
  const onClick = (id, e) => {
2504
2547
  item.onClick(id, e);
@@ -2507,7 +2550,7 @@ var MenuContent = ({
2507
2550
  }
2508
2551
  onHide();
2509
2552
  };
2510
- return /* @__PURE__ */ jsx24(MenuSubItem, {
2553
+ return /* @__PURE__ */ jsx25(MenuSubItem, {
2511
2554
  selected: item.id === selectedItem,
2512
2555
  onActionChosen: onClick,
2513
2556
  onItemSelected,
@@ -2528,7 +2571,7 @@ var MenuContent = ({
2528
2571
  };
2529
2572
 
2530
2573
  // src/components/InlineDropdown.tsx
2531
- import { jsx as jsx25, jsxs as jsxs4, Fragment as Fragment2 } from "react/jsx-runtime";
2574
+ import { jsx as jsx26, jsxs as jsxs5, Fragment as Fragment2 } from "react/jsx-runtime";
2532
2575
  var InlineDropdown = ({
2533
2576
  values,
2534
2577
  ...props
@@ -2546,19 +2589,19 @@ var InlineDropdown = ({
2546
2589
  e.stopPropagation();
2547
2590
  setOpened({ type: "open", left: e.clientX, top: e.clientY });
2548
2591
  }, []);
2549
- const spaceToBottom = useMemo16(() => {
2592
+ const spaceToBottom = useMemo17(() => {
2550
2593
  if (size && opened.type === "open") {
2551
2594
  return size.windowSize.height - opened.top;
2552
2595
  }
2553
2596
  return 0;
2554
2597
  }, [opened, size]);
2555
- const spaceToTop = useMemo16(() => {
2598
+ const spaceToTop = useMemo17(() => {
2556
2599
  if (size && opened.type === "open") {
2557
2600
  return opened.top;
2558
2601
  }
2559
2602
  return 0;
2560
2603
  }, [opened, size]);
2561
- const portalStyle = useMemo16(() => {
2604
+ const portalStyle = useMemo17(() => {
2562
2605
  if (opened.type === "not-open") {
2563
2606
  return;
2564
2607
  }
@@ -2589,26 +2632,26 @@ var InlineDropdown = ({
2589
2632
  const onHide = useCallback11(() => {
2590
2633
  setOpened({ type: "not-open" });
2591
2634
  }, []);
2592
- return /* @__PURE__ */ jsxs4(Fragment2, {
2635
+ return /* @__PURE__ */ jsxs5(Fragment2, {
2593
2636
  children: [
2594
- /* @__PURE__ */ jsx25("div", {
2637
+ /* @__PURE__ */ jsx26("div", {
2595
2638
  ref,
2596
- children: /* @__PURE__ */ jsx25(InlineAction, {
2639
+ children: /* @__PURE__ */ jsx26(InlineAction, {
2597
2640
  onClick,
2598
2641
  ...props
2599
2642
  })
2600
2643
  }),
2601
- portalStyle ? ReactDOM2.createPortal(/* @__PURE__ */ jsx25("div", {
2644
+ portalStyle ? ReactDOM2.createPortal(/* @__PURE__ */ jsx26("div", {
2602
2645
  style: fullScreenOverlay,
2603
- children: /* @__PURE__ */ jsx25("div", {
2646
+ children: /* @__PURE__ */ jsx26("div", {
2604
2647
  style: outerPortal,
2605
2648
  className: "css-reset",
2606
- children: /* @__PURE__ */ jsx25(HigherZIndex, {
2649
+ children: /* @__PURE__ */ jsx26(HigherZIndex, {
2607
2650
  onOutsideClick: onHide,
2608
2651
  onEscape: onHide,
2609
- children: /* @__PURE__ */ jsx25("div", {
2652
+ children: /* @__PURE__ */ jsx26("div", {
2610
2653
  style: portalStyle,
2611
- children: /* @__PURE__ */ jsx25(MenuContent, {
2654
+ children: /* @__PURE__ */ jsx26(MenuContent, {
2612
2655
  onNextMenu: noop,
2613
2656
  onPreviousMenu: noop,
2614
2657
  values,
@@ -2627,9 +2670,9 @@ var InlineDropdown = ({
2627
2670
  };
2628
2671
 
2629
2672
  // src/components/CompositionContextButton.tsx
2630
- import { jsx as jsx26 } from "react/jsx-runtime";
2673
+ import { jsx as jsx27 } from "react/jsx-runtime";
2631
2674
  var CompositionContextButton = ({ visible, values }) => {
2632
- const iconStyle = useMemo17(() => {
2675
+ const iconStyle = useMemo18(() => {
2633
2676
  return {
2634
2677
  style: {
2635
2678
  height: 12
@@ -2638,7 +2681,7 @@ var CompositionContextButton = ({ visible, values }) => {
2638
2681
  }, []);
2639
2682
  const connectionStatus = useContext6(StudioServerConnectionCtx).previewServerState.type;
2640
2683
  const renderAction = useCallback12((color) => {
2641
- return /* @__PURE__ */ jsx26(EllipsisIcon, {
2684
+ return /* @__PURE__ */ jsx27(EllipsisIcon, {
2642
2685
  fill: color,
2643
2686
  svgProps: iconStyle
2644
2687
  });
@@ -2646,7 +2689,7 @@ var CompositionContextButton = ({ visible, values }) => {
2646
2689
  if (!visible || connectionStatus !== "connected") {
2647
2690
  return null;
2648
2691
  }
2649
- return /* @__PURE__ */ jsx26(InlineDropdown, {
2692
+ return /* @__PURE__ */ jsx27(InlineDropdown, {
2650
2693
  renderAction,
2651
2694
  values
2652
2695
  });
@@ -2654,14 +2697,14 @@ var CompositionContextButton = ({ visible, values }) => {
2654
2697
 
2655
2698
  // src/components/ContextMenu.tsx
2656
2699
  import { PlayerInternals as PlayerInternals4 } from "@remotion/player";
2657
- import { useCallback as useCallback13, useEffect as useEffect11, useMemo as useMemo18, useRef as useRef10, useState as useState13 } from "react";
2700
+ import { useCallback as useCallback13, useEffect as useEffect11, useMemo as useMemo19, useRef as useRef10, useState as useState13 } from "react";
2658
2701
  import ReactDOM3 from "react-dom";
2659
- import { jsx as jsx27, jsxs as jsxs5, Fragment as Fragment3 } from "react/jsx-runtime";
2702
+ import { jsx as jsx28, jsxs as jsxs6, Fragment as Fragment3 } from "react/jsx-runtime";
2660
2703
  var ContextMenu = ({ children, values }) => {
2661
2704
  const ref = useRef10(null);
2662
2705
  const [opened, setOpened] = useState13({ type: "not-open" });
2663
2706
  const { currentZIndex } = useZIndex();
2664
- const style = useMemo18(() => {
2707
+ const style = useMemo19(() => {
2665
2708
  return {};
2666
2709
  }, []);
2667
2710
  const size = PlayerInternals4.useElementSize(ref, {
@@ -2685,19 +2728,19 @@ var ContextMenu = ({ children, values }) => {
2685
2728
  current.removeEventListener("contextmenu", onClick);
2686
2729
  };
2687
2730
  }, [size]);
2688
- const spaceToBottom = useMemo18(() => {
2731
+ const spaceToBottom = useMemo19(() => {
2689
2732
  if (size && opened.type === "open") {
2690
2733
  return size.windowSize.height - opened.top;
2691
2734
  }
2692
2735
  return 0;
2693
2736
  }, [opened, size]);
2694
- const spaceToTop = useMemo18(() => {
2737
+ const spaceToTop = useMemo19(() => {
2695
2738
  if (size && opened.type === "open") {
2696
2739
  return opened.top;
2697
2740
  }
2698
2741
  return 0;
2699
2742
  }, [opened, size]);
2700
- const portalStyle = useMemo18(() => {
2743
+ const portalStyle = useMemo19(() => {
2701
2744
  if (opened.type === "not-open") {
2702
2745
  return;
2703
2746
  }
@@ -2728,25 +2771,25 @@ var ContextMenu = ({ children, values }) => {
2728
2771
  const onHide = useCallback13(() => {
2729
2772
  setOpened({ type: "not-open" });
2730
2773
  }, []);
2731
- return /* @__PURE__ */ jsxs5(Fragment3, {
2774
+ return /* @__PURE__ */ jsxs6(Fragment3, {
2732
2775
  children: [
2733
- /* @__PURE__ */ jsx27("div", {
2776
+ /* @__PURE__ */ jsx28("div", {
2734
2777
  ref,
2735
2778
  onContextMenu: () => false,
2736
2779
  style,
2737
2780
  children
2738
2781
  }),
2739
- portalStyle ? ReactDOM3.createPortal(/* @__PURE__ */ jsx27("div", {
2782
+ portalStyle ? ReactDOM3.createPortal(/* @__PURE__ */ jsx28("div", {
2740
2783
  style: fullScreenOverlay,
2741
- children: /* @__PURE__ */ jsx27("div", {
2784
+ children: /* @__PURE__ */ jsx28("div", {
2742
2785
  style: outerPortal,
2743
2786
  className: "css-reset",
2744
- children: /* @__PURE__ */ jsx27(HigherZIndex, {
2787
+ children: /* @__PURE__ */ jsx28(HigherZIndex, {
2745
2788
  onOutsideClick: onHide,
2746
2789
  onEscape: onHide,
2747
- children: /* @__PURE__ */ jsx27("div", {
2790
+ children: /* @__PURE__ */ jsx28("div", {
2748
2791
  style: portalStyle,
2749
- children: /* @__PURE__ */ jsx27(MenuContent, {
2792
+ children: /* @__PURE__ */ jsx28(MenuContent, {
2750
2793
  onNextMenu: noop,
2751
2794
  onPreviousMenu: noop,
2752
2795
  values,
@@ -2765,17 +2808,17 @@ var ContextMenu = ({ children, values }) => {
2765
2808
  };
2766
2809
 
2767
2810
  // src/components/SidebarRenderButton.tsx
2768
- import { useCallback as useCallback14, useContext as useContext7, useMemo as useMemo19 } from "react";
2811
+ import { useCallback as useCallback14, useContext as useContext7, useMemo as useMemo20 } from "react";
2769
2812
  import { Internals as Internals5 } from "remotion";
2770
2813
 
2771
2814
  // src/icons/render.tsx
2772
- import { jsx as jsx28 } from "react/jsx-runtime";
2815
+ import { jsx as jsx29 } from "react/jsx-runtime";
2773
2816
  var ThinRenderIcon = (props) => {
2774
- return /* @__PURE__ */ jsx28("svg", {
2817
+ return /* @__PURE__ */ jsx29("svg", {
2775
2818
  ...props.svgProps,
2776
2819
  xmlns: "http://www.w3.org/2000/svg",
2777
2820
  viewBox: "0 0 512 512",
2778
- children: /* @__PURE__ */ jsx28("path", {
2821
+ children: /* @__PURE__ */ jsx29("path", {
2779
2822
  fill: props.fill,
2780
2823
  d: "M188.9 372l-50.4-50.4c18.6-42.6 61.7-137.7 95.1-187C304.6 30.1 409 24.6 475.7 36.3c11.7 66.7 6.2 171.1-98.4 242c-49.4 33.5-145.5 75.6-188.4 93.7zm-79.9-62.8c-5.2 11.9-2.5 25.7 6.7 34.9l50.7 50.7c9.1 9.1 22.7 11.9 34.5 6.9c6.5-2.7 14.3-6 23-9.8L224 496c0 5.5 2.9 10.7 7.6 13.6s10.6 3.2 15.6 .7l101.5-50.7c21.7-10.8 35.4-33 35.4-57.2V312.1c4-2.5 7.7-4.9 11.3-7.3C516.1 222.9 520.1 100.9 506.7 28.1c-2.1-11.6-11.2-20.6-22.8-22.8C411.1-8.1 289.1-4.1 207.2 116.7c-2.4 3.6-4.9 7.3-7.3 11.3l-90.2 0c-24.2 0-46.4 13.7-57.2 35.4L1.7 264.8c-2.5 5-2.2 10.8 .7 15.6s8.1 7.6 13.6 7.6H118.5c-3.6 8-6.8 15.2-9.4 21.2zM256 470.1l0-92.5c30.3-13.7 65.4-30.3 96-47v71.7c0 12.1-6.8 23.2-17.7 28.6L256 470.1zM109.7 160h71.5c-16.9 30.7-34 65.8-48.1 96H41.9L81 177.7c5.4-10.8 16.5-17.7 28.6-17.7zM392 144a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM368 88a56 56 0 1 0 0 112 56 56 0 1 0 0-112z"
2781
2824
  })
@@ -2783,12 +2826,12 @@ var ThinRenderIcon = (props) => {
2783
2826
  };
2784
2827
 
2785
2828
  // src/components/SidebarRenderButton.tsx
2786
- import { jsx as jsx29 } from "react/jsx-runtime";
2829
+ import { jsx as jsx30 } from "react/jsx-runtime";
2787
2830
  var SidebarRenderButton = ({ composition, visible }) => {
2788
2831
  const { setSelectedModal } = useContext7(ModalsContext);
2789
2832
  const { setSidebarCollapsedState } = useContext7(SidebarContext);
2790
2833
  const isMobileLayout = useMobileLayout();
2791
- const iconStyle = useMemo19(() => {
2834
+ const iconStyle = useMemo20(() => {
2792
2835
  return {
2793
2836
  style: {
2794
2837
  height: 12
@@ -2866,7 +2909,7 @@ var SidebarRenderButton = ({ composition, visible }) => {
2866
2909
  setSidebarCollapsedState
2867
2910
  ]);
2868
2911
  const renderAction = useCallback14((color) => {
2869
- return /* @__PURE__ */ jsx29(ThinRenderIcon, {
2912
+ return /* @__PURE__ */ jsx30(ThinRenderIcon, {
2870
2913
  fill: color,
2871
2914
  svgProps: iconStyle
2872
2915
  });
@@ -2874,14 +2917,14 @@ var SidebarRenderButton = ({ composition, visible }) => {
2874
2917
  if (!visible || connectionStatus !== "connected") {
2875
2918
  return null;
2876
2919
  }
2877
- return /* @__PURE__ */ jsx29(InlineAction, {
2920
+ return /* @__PURE__ */ jsx30(InlineAction, {
2878
2921
  renderAction,
2879
2922
  onClick
2880
2923
  });
2881
2924
  };
2882
2925
 
2883
2926
  // src/components/CompositionSelectorItem.tsx
2884
- import { jsx as jsx30, jsxs as jsxs6, Fragment as Fragment4 } from "react/jsx-runtime";
2927
+ import { jsx as jsx31, jsxs as jsxs7, Fragment as Fragment4 } from "react/jsx-runtime";
2885
2928
  var COMPOSITION_ITEM_HEIGHT = 32;
2886
2929
  var itemStyle = {
2887
2930
  paddingRight: 10,
@@ -2898,7 +2941,8 @@ var itemStyle = {
2898
2941
  width: "100%",
2899
2942
  textAlign: "left",
2900
2943
  backgroundColor: BACKGROUND,
2901
- height: COMPOSITION_ITEM_HEIGHT
2944
+ height: COMPOSITION_ITEM_HEIGHT,
2945
+ userSelect: "none"
2902
2946
  };
2903
2947
  var labelStyle2 = {
2904
2948
  textAlign: "left",
@@ -2922,7 +2966,7 @@ var CompositionSelectorItem = ({
2922
2966
  selectComposition,
2923
2967
  toggleFolder
2924
2968
  }) => {
2925
- const selected = useMemo20(() => {
2969
+ const selected = useMemo21(() => {
2926
2970
  if (item.type === "composition") {
2927
2971
  return currentComposition === item.composition.id;
2928
2972
  }
@@ -2935,14 +2979,14 @@ var CompositionSelectorItem = ({
2935
2979
  const onPointerLeave = useCallback15(() => {
2936
2980
  setHovered(false);
2937
2981
  }, []);
2938
- const style = useMemo20(() => {
2982
+ const style = useMemo21(() => {
2939
2983
  return {
2940
2984
  ...itemStyle,
2941
2985
  backgroundColor: getBackgroundFromHoverState({ hovered, selected }),
2942
2986
  paddingLeft: 12 + level * 8
2943
2987
  };
2944
2988
  }, [hovered, level, selected]);
2945
- const label = useMemo20(() => {
2989
+ const label = useMemo21(() => {
2946
2990
  return {
2947
2991
  ...labelStyle2,
2948
2992
  color: selected || hovered ? "white" : LIGHT_TEXT
@@ -2962,7 +3006,7 @@ var CompositionSelectorItem = ({
2962
3006
  }
2963
3007
  }, [onClick]);
2964
3008
  const { setSelectedModal } = useContext8(ModalsContext);
2965
- const contextMenu = useMemo20(() => {
3009
+ const contextMenu = useMemo21(() => {
2966
3010
  if (item.type === "composition") {
2967
3011
  return [
2968
3012
  {
@@ -3040,9 +3084,9 @@ var CompositionSelectorItem = ({
3040
3084
  return [];
3041
3085
  }, [item, setSelectedModal]);
3042
3086
  if (item.type === "folder") {
3043
- return /* @__PURE__ */ jsxs6(Fragment4, {
3087
+ return /* @__PURE__ */ jsxs7(Fragment4, {
3044
3088
  children: [
3045
- /* @__PURE__ */ jsxs6("button", {
3089
+ /* @__PURE__ */ jsxs7("button", {
3046
3090
  style,
3047
3091
  onPointerEnter,
3048
3092
  onPointerLeave,
@@ -3051,24 +3095,24 @@ var CompositionSelectorItem = ({
3051
3095
  type: "button",
3052
3096
  title: item.folderName,
3053
3097
  children: [
3054
- item.expanded ? /* @__PURE__ */ jsx30(ExpandedFolderIcon, {
3098
+ item.expanded ? /* @__PURE__ */ jsx31(ExpandedFolderIcon, {
3055
3099
  style: iconStyle,
3056
3100
  color: hovered || selected ? "white" : LIGHT_TEXT
3057
- }) : /* @__PURE__ */ jsx30(CollapsedFolderIcon, {
3101
+ }) : /* @__PURE__ */ jsx31(CollapsedFolderIcon, {
3058
3102
  color: hovered || selected ? "white" : LIGHT_TEXT,
3059
3103
  style: iconStyle
3060
3104
  }),
3061
- /* @__PURE__ */ jsx30(Spacing, {
3105
+ /* @__PURE__ */ jsx31(Spacing, {
3062
3106
  x: 1
3063
3107
  }),
3064
- /* @__PURE__ */ jsx30("div", {
3108
+ /* @__PURE__ */ jsx31("div", {
3065
3109
  style: label,
3066
3110
  children: item.folderName
3067
3111
  })
3068
3112
  ]
3069
3113
  }),
3070
3114
  item.expanded ? item.items.map((childItem) => {
3071
- return /* @__PURE__ */ jsx30(CompositionSelectorItem, {
3115
+ return /* @__PURE__ */ jsx31(CompositionSelectorItem, {
3072
3116
  currentComposition,
3073
3117
  selectComposition,
3074
3118
  item: childItem,
@@ -3080,11 +3124,11 @@ var CompositionSelectorItem = ({
3080
3124
  ]
3081
3125
  });
3082
3126
  }
3083
- return /* @__PURE__ */ jsx30(ContextMenu, {
3127
+ return /* @__PURE__ */ jsx31(ContextMenu, {
3084
3128
  values: contextMenu,
3085
- children: /* @__PURE__ */ jsx30(Row, {
3129
+ children: /* @__PURE__ */ jsx31(Row, {
3086
3130
  align: "center",
3087
- children: /* @__PURE__ */ jsxs6("a", {
3131
+ children: /* @__PURE__ */ jsxs7("a", {
3088
3132
  style,
3089
3133
  onPointerEnter,
3090
3134
  onPointerLeave,
@@ -3096,28 +3140,28 @@ var CompositionSelectorItem = ({
3096
3140
  className: "__remotion-composition",
3097
3141
  "data-compname": item.composition.id,
3098
3142
  children: [
3099
- isCompositionStill(item.composition) ? /* @__PURE__ */ jsx30(StillIcon, {
3143
+ isCompositionStill(item.composition) ? /* @__PURE__ */ jsx31(StillIcon, {
3100
3144
  color: hovered || selected ? "white" : LIGHT_TEXT,
3101
3145
  style: iconStyle
3102
- }) : /* @__PURE__ */ jsx30(FilmIcon, {
3146
+ }) : /* @__PURE__ */ jsx31(FilmIcon, {
3103
3147
  color: hovered || selected ? "white" : LIGHT_TEXT,
3104
3148
  style: iconStyle
3105
3149
  }),
3106
- /* @__PURE__ */ jsx30(Spacing, {
3150
+ /* @__PURE__ */ jsx31(Spacing, {
3107
3151
  x: 1
3108
3152
  }),
3109
- /* @__PURE__ */ jsx30("div", {
3153
+ /* @__PURE__ */ jsx31("div", {
3110
3154
  style: label,
3111
3155
  children: item.composition.id
3112
3156
  }),
3113
- /* @__PURE__ */ jsx30(Spacing, {
3157
+ /* @__PURE__ */ jsx31(Spacing, {
3114
3158
  x: 0.5
3115
3159
  }),
3116
- /* @__PURE__ */ jsx30(CompositionContextButton, {
3160
+ /* @__PURE__ */ jsx31(CompositionContextButton, {
3117
3161
  values: contextMenu,
3118
3162
  visible: hovered
3119
3163
  }),
3120
- /* @__PURE__ */ jsx30(SidebarRenderButton, {
3164
+ /* @__PURE__ */ jsx31(SidebarRenderButton, {
3121
3165
  visible: hovered,
3122
3166
  composition: item.composition
3123
3167
  })
@@ -3149,13 +3193,12 @@ var renderFrame = (frame, fps) => {
3149
3193
  };
3150
3194
 
3151
3195
  // src/components/CurrentComposition.tsx
3152
- import { jsx as jsx31, jsxs as jsxs7 } from "react/jsx-runtime";
3153
- var CURRENT_COMPOSITION_HEIGHT = 80;
3154
- var container6 = {
3196
+ import { jsx as jsx32, jsxs as jsxs8 } from "react/jsx-runtime";
3197
+ var CURRENT_COMPOSITION_HEIGHT = 64;
3198
+ var container7 = {
3155
3199
  height: CURRENT_COMPOSITION_HEIGHT,
3156
3200
  display: "block",
3157
- borderBottom: `1px solid ${BORDER_COLOR}`,
3158
- padding: 12,
3201
+ padding: "6px 12px",
3159
3202
  color: "white",
3160
3203
  backgroundColor: BACKGROUND
3161
3204
  };
@@ -3181,17 +3224,17 @@ var row = {
3181
3224
  };
3182
3225
  var CurrentComposition = () => {
3183
3226
  const video = Internals6.useVideo();
3184
- return /* @__PURE__ */ jsx31("div", {
3185
- style: container6,
3186
- children: video ? /* @__PURE__ */ jsx31("div", {
3227
+ return /* @__PURE__ */ jsx32("div", {
3228
+ style: container7,
3229
+ children: video ? /* @__PURE__ */ jsx32("div", {
3187
3230
  style: row,
3188
- children: /* @__PURE__ */ jsxs7("div", {
3231
+ children: /* @__PURE__ */ jsxs8("div", {
3189
3232
  children: [
3190
- /* @__PURE__ */ jsx31("div", {
3233
+ /* @__PURE__ */ jsx32("div", {
3191
3234
  style: title,
3192
3235
  children: video.id
3193
3236
  }),
3194
- /* @__PURE__ */ jsxs7("div", {
3237
+ /* @__PURE__ */ jsxs8("div", {
3195
3238
  style: subtitle,
3196
3239
  children: [
3197
3240
  video.width,
@@ -3200,10 +3243,10 @@ var CurrentComposition = () => {
3200
3243
  isCompositionStill(video) ? null : `, ${video.fps} FPS`
3201
3244
  ]
3202
3245
  }),
3203
- isCompositionStill(video) ? /* @__PURE__ */ jsx31("div", {
3246
+ isCompositionStill(video) ? /* @__PURE__ */ jsx32("div", {
3204
3247
  style: subtitle,
3205
3248
  children: "Still"
3206
- }) : /* @__PURE__ */ jsxs7("div", {
3249
+ }) : /* @__PURE__ */ jsxs8("div", {
3207
3250
  style: subtitle,
3208
3251
  children: [
3209
3252
  "Duration ",
@@ -3217,7 +3260,7 @@ var CurrentComposition = () => {
3217
3260
  };
3218
3261
 
3219
3262
  // src/components/CompositionSelector.tsx
3220
- import { jsx as jsx32, jsxs as jsxs8 } from "react/jsx-runtime";
3263
+ import { jsx as jsx33, jsxs as jsxs9 } from "react/jsx-runtime";
3221
3264
  var useCompositionNavigation = () => {
3222
3265
  const { compositions, canvasContent } = useContext9(Internals7.CompositionManager);
3223
3266
  const selectComposition = useSelectComposition();
@@ -3245,18 +3288,41 @@ var useCompositionNavigation = () => {
3245
3288
  const previousComposition = compositions[previousIndex];
3246
3289
  selectComposition(previousComposition, true);
3247
3290
  }, [canvasContent, compositions, selectComposition]);
3248
- return useMemo21(() => ({
3291
+ return useMemo22(() => ({
3249
3292
  navigateToNextComposition,
3250
3293
  navigateToPreviousComposition
3251
3294
  }), [navigateToNextComposition, navigateToPreviousComposition]);
3252
3295
  };
3253
- var container7 = {
3296
+ var container8 = {
3254
3297
  display: "flex",
3255
3298
  flexDirection: "column",
3256
3299
  flex: 1,
3257
3300
  overflow: "hidden",
3258
3301
  backgroundColor: BACKGROUND
3259
3302
  };
3303
+ var QUICK_SWITCHER_TRIGGER_HEIGHT = 38;
3304
+ var quickSwitcherArea = {
3305
+ padding: "4px 12px",
3306
+ borderBottom: `1px solid ${BORDER_COLOR}`
3307
+ };
3308
+ var quickSwitcherTrigger = {
3309
+ backgroundColor: "rgba(255, 255, 255, 0.06)",
3310
+ borderRadius: 5,
3311
+ padding: "4px 10px",
3312
+ color: LIGHT_TEXT,
3313
+ fontSize: 12,
3314
+ cursor: "pointer",
3315
+ display: "flex",
3316
+ alignItems: "center",
3317
+ justifyContent: "space-between",
3318
+ border: "none",
3319
+ width: "100%",
3320
+ appearance: "none"
3321
+ };
3322
+ var shortcutLabel = {
3323
+ fontSize: 11,
3324
+ opacity: 0.6
3325
+ };
3260
3326
  var getKeysToExpand = (initialFolderName, parentFolderName, initial = []) => {
3261
3327
  initial.push(openFolderKey({
3262
3328
  folderName: initialFolderName,
@@ -3271,35 +3337,62 @@ var getKeysToExpand = (initialFolderName, parentFolderName, initial = []) => {
3271
3337
  var CompositionSelector = () => {
3272
3338
  const { compositions, canvasContent, folders } = useContext9(Internals7.CompositionManager);
3273
3339
  const { foldersExpanded } = useContext9(ExpandedFoldersContext);
3340
+ const { setSelectedModal } = useContext9(ModalsContext);
3274
3341
  const { tabIndex } = useZIndex();
3275
3342
  const selectComposition = useSelectComposition();
3276
- const sortedCompositions = useMemo21(() => {
3343
+ const sortedCompositions = useMemo22(() => {
3277
3344
  return sortItemsByNonceHistory(compositions);
3278
3345
  }, [compositions]);
3279
- const sortedFolders = useMemo21(() => {
3346
+ const sortedFolders = useMemo22(() => {
3280
3347
  return sortItemsByNonceHistory(folders);
3281
3348
  }, [folders]);
3282
- const items = useMemo21(() => {
3349
+ const items = useMemo22(() => {
3283
3350
  return createFolderTree(sortedCompositions, sortedFolders, foldersExpanded);
3284
3351
  }, [sortedCompositions, sortedFolders, foldersExpanded]);
3285
- const list = useMemo21(() => {
3352
+ const list = useMemo22(() => {
3286
3353
  return {
3287
- height: `calc(100% - ${CURRENT_COMPOSITION_HEIGHT}px)`,
3354
+ height: `calc(100% - ${CURRENT_COMPOSITION_HEIGHT}px - ${QUICK_SWITCHER_TRIGGER_HEIGHT}px)`,
3288
3355
  overflowY: "auto"
3289
3356
  };
3290
3357
  }, []);
3291
3358
  const toggleFolder = useCallback16((folderName, parentName) => {
3292
3359
  Internals7.compositionSelectorRef.current?.toggleFolder(folderName, parentName);
3293
3360
  }, []);
3294
- return /* @__PURE__ */ jsxs8("div", {
3295
- style: container7,
3361
+ const openQuickSwitcher = useCallback16(() => {
3362
+ setSelectedModal({
3363
+ type: "quick-switcher",
3364
+ mode: "compositions",
3365
+ invocationTimestamp: Date.now()
3366
+ });
3367
+ }, [setSelectedModal]);
3368
+ return /* @__PURE__ */ jsxs9("div", {
3369
+ style: container8,
3296
3370
  children: [
3297
- /* @__PURE__ */ jsx32(CurrentComposition, {}),
3298
- /* @__PURE__ */ jsx32("div", {
3371
+ /* @__PURE__ */ jsx33(CurrentComposition, {}),
3372
+ /* @__PURE__ */ jsx33("div", {
3373
+ style: quickSwitcherArea,
3374
+ children: /* @__PURE__ */ jsxs9("button", {
3375
+ type: "button",
3376
+ style: quickSwitcherTrigger,
3377
+ onClick: openQuickSwitcher,
3378
+ tabIndex,
3379
+ children: [
3380
+ "Search...",
3381
+ areKeyboardShortcutsDisabled() ? null : /* @__PURE__ */ jsxs9("span", {
3382
+ style: shortcutLabel,
3383
+ children: [
3384
+ cmdOrCtrlCharacter,
3385
+ "+K"
3386
+ ]
3387
+ })
3388
+ ]
3389
+ })
3390
+ }),
3391
+ /* @__PURE__ */ jsx33("div", {
3299
3392
  className: "__remotion-vertical-scrollbar",
3300
3393
  style: list,
3301
3394
  children: items.map((c) => {
3302
- return /* @__PURE__ */ jsx32(CompositionSelectorItem, {
3395
+ return /* @__PURE__ */ jsx33(CompositionSelectorItem, {
3303
3396
  level: 0,
3304
3397
  currentComposition: canvasContent && canvasContent.type === "composition" ? canvasContent.compositionId : null,
3305
3398
  selectComposition,
@@ -3317,7 +3410,7 @@ var CompositionSelector = () => {
3317
3410
  import { createRef as createRef5, useCallback as useCallback22, useImperativeHandle as useImperativeHandle5, useState as useState21 } from "react";
3318
3411
 
3319
3412
  // src/components/AssetSelector.tsx
3320
- import { useCallback as useCallback19, useContext as useContext13, useMemo as useMemo25, useState as useState18 } from "react";
3413
+ import { useCallback as useCallback19, useContext as useContext13, useMemo as useMemo26, useState as useState18 } from "react";
3321
3414
  import { Internals as Internals10 } from "remotion";
3322
3415
 
3323
3416
  // src/api/write-static-file.ts
@@ -3346,7 +3439,7 @@ var writeStaticFile = async ({
3346
3439
  };
3347
3440
 
3348
3441
  // src/helpers/use-asset-drag-events.ts
3349
- import { useCallback as useCallback17, useEffect as useEffect12, useMemo as useMemo22, useRef as useRef11 } from "react";
3442
+ import { useCallback as useCallback17, useEffect as useEffect12, useMemo as useMemo23, useRef as useRef11 } from "react";
3350
3443
  import { NoReactInternals } from "remotion/no-react";
3351
3444
  function useAssetDragEvents({
3352
3445
  name,
@@ -3355,10 +3448,10 @@ function useAssetDragEvents({
3355
3448
  setDropLocation
3356
3449
  }) {
3357
3450
  const dragDepthRef = useRef11(0);
3358
- const combinedParents = useMemo22(() => {
3451
+ const combinedParents = useMemo23(() => {
3359
3452
  return [parentFolder, name].filter(NoReactInternals.truthy).join("/");
3360
3453
  }, [name, parentFolder]);
3361
- const isDropDiv = useMemo22(() => {
3454
+ const isDropDiv = useMemo23(() => {
3362
3455
  return dropLocation === combinedParents;
3363
3456
  }, [combinedParents, dropLocation]);
3364
3457
  const onDragEnter = useCallback17(() => {
@@ -3387,7 +3480,7 @@ function useAssetDragEvents({
3387
3480
  var use_asset_drag_events_default = useAssetDragEvents;
3388
3481
 
3389
3482
  // src/components/AssetSelectorItem.tsx
3390
- import React24, { useCallback as useCallback18, useContext as useContext10, useMemo as useMemo23, useRef as useRef12, useState as useState15 } from "react";
3483
+ import React25, { useCallback as useCallback18, useContext as useContext10, useMemo as useMemo24, useRef as useRef12, useState as useState15 } from "react";
3391
3484
  import { Internals as Internals8 } from "remotion";
3392
3485
  import { NoReactInternals as NoReactInternals3 } from "remotion/no-react";
3393
3486
 
@@ -3409,26 +3502,26 @@ var copyText = (cmd) => {
3409
3502
  };
3410
3503
 
3411
3504
  // src/icons/clipboard.tsx
3412
- import { jsx as jsx33 } from "react/jsx-runtime";
3413
- var ClipboardIcon = ({ color, ...props }) => /* @__PURE__ */ jsx33("svg", {
3505
+ import { jsx as jsx34 } from "react/jsx-runtime";
3506
+ var ClipboardIcon = ({ color, ...props }) => /* @__PURE__ */ jsx34("svg", {
3414
3507
  viewBox: "0 0 384 512",
3415
3508
  ...props,
3416
- children: /* @__PURE__ */ jsx33("path", {
3509
+ children: /* @__PURE__ */ jsx34("path", {
3417
3510
  fill: color,
3418
3511
  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"
3419
3512
  })
3420
3513
  });
3421
3514
 
3422
3515
  // src/icons/file.tsx
3423
- import { jsx as jsx34 } from "react/jsx-runtime";
3516
+ import { jsx as jsx35 } from "react/jsx-runtime";
3424
3517
  var FileIcon = ({
3425
3518
  color,
3426
3519
  ...props
3427
- }) => /* @__PURE__ */ jsx34("svg", {
3520
+ }) => /* @__PURE__ */ jsx35("svg", {
3428
3521
  xmlns: "http://www.w3.org/2000/svg",
3429
3522
  viewBox: "0 0 384 512",
3430
3523
  ...props,
3431
- children: /* @__PURE__ */ jsx34("path", {
3524
+ children: /* @__PURE__ */ jsx35("path", {
3432
3525
  fill: color ?? "currentColor",
3433
3526
  d: "M0 64C0 28.65 28.65 0 64 0h156.1c12.7 0 25 5.057 34 14.06L369.9 129.9c9 9 14.1 21.3 14.1 34V448c0 35.3-28.7 64-64 64H64c-35.35 0-64-28.7-64-64V64zm352 128H240c-26.5 0-48-21.5-48-48V32H64c-17.67 0-32 14.33-32 32v384c0 17.7 14.33 32 32 32h256c17.7 0 32-14.3 32-32V192zm-4.7-39.4L231.4 36.69c-2-2.07-4.6-3.51-7.4-4.21V144c0 8.8 7.2 16 16 16h111.5c-.7-2.8-2.1-5.4-4.2-7.4z"
3434
3527
  })
@@ -3732,7 +3825,7 @@ var applyVisualControlChange = ({
3732
3825
  };
3733
3826
 
3734
3827
  // src/components/AssetSelectorItem.tsx
3735
- import { jsx as jsx35, jsxs as jsxs9, Fragment as Fragment5 } from "react/jsx-runtime";
3828
+ import { jsx as jsx36, jsxs as jsxs10, Fragment as Fragment5 } from "react/jsx-runtime";
3736
3829
  var ASSET_ITEM_HEIGHT = 32;
3737
3830
  var iconStyle2 = {
3738
3831
  width: 18,
@@ -3795,14 +3888,14 @@ var AssetFolderItem = ({
3795
3888
  const onPointerLeave = useCallback18(() => {
3796
3889
  setHovered(false);
3797
3890
  }, []);
3798
- const folderStyle = useMemo23(() => {
3891
+ const folderStyle = useMemo24(() => {
3799
3892
  return {
3800
3893
  ...itemStyle2,
3801
3894
  paddingLeft: 4 + level * 8,
3802
3895
  backgroundColor: hovered ? CLEAR_HOVER : "transparent"
3803
3896
  };
3804
3897
  }, [hovered, level]);
3805
- const label = useMemo23(() => {
3898
+ const label = useMemo24(() => {
3806
3899
  return {
3807
3900
  ...labelStyle3,
3808
3901
  color: hovered ? "white" : LIGHT_TEXT
@@ -3812,14 +3905,14 @@ var AssetFolderItem = ({
3812
3905
  toggleFolder(item.name, parentFolder);
3813
3906
  }, [item.name, parentFolder, toggleFolder]);
3814
3907
  const Icon = item.expanded ? ExpandedFolderIcon : CollapsedFolderIcon;
3815
- return /* @__PURE__ */ jsxs9("div", {
3908
+ return /* @__PURE__ */ jsxs10("div", {
3816
3909
  onDragEnter,
3817
3910
  onDragLeave,
3818
3911
  style: {
3819
3912
  backgroundColor: isDropDiv ? CLEAR_HOVER : BACKGROUND
3820
3913
  },
3821
3914
  children: [
3822
- /* @__PURE__ */ jsx35("div", {
3915
+ /* @__PURE__ */ jsx36("div", {
3823
3916
  style: folderStyle,
3824
3917
  onPointerEnter,
3825
3918
  onPointerLeave,
@@ -3838,23 +3931,23 @@ var AssetFolderItem = ({
3838
3931
  clearTimeout(openFolderTimerRef.current);
3839
3932
  }
3840
3933
  },
3841
- children: /* @__PURE__ */ jsxs9(Row, {
3934
+ children: /* @__PURE__ */ jsxs10(Row, {
3842
3935
  children: [
3843
- /* @__PURE__ */ jsx35(Icon, {
3936
+ /* @__PURE__ */ jsx36(Icon, {
3844
3937
  style: iconStyle2,
3845
3938
  color: hovered ? "white" : LIGHT_TEXT
3846
3939
  }),
3847
- /* @__PURE__ */ jsx35(Spacing, {
3940
+ /* @__PURE__ */ jsx36(Spacing, {
3848
3941
  x: 1
3849
3942
  }),
3850
- /* @__PURE__ */ jsx35("div", {
3943
+ /* @__PURE__ */ jsx36("div", {
3851
3944
  style: label,
3852
3945
  children: item.name
3853
3946
  })
3854
3947
  ]
3855
3948
  })
3856
3949
  }),
3857
- item.expanded ? /* @__PURE__ */ jsx35(AssetFolderTree, {
3950
+ item.expanded ? /* @__PURE__ */ jsx36(AssetFolderTree, {
3858
3951
  item: item.items,
3859
3952
  name: item.name,
3860
3953
  level,
@@ -3879,13 +3972,13 @@ var AssetFolderTree = ({
3879
3972
  setDropLocation,
3880
3973
  readOnlyStudio
3881
3974
  }) => {
3882
- const combinedParents = useMemo23(() => {
3975
+ const combinedParents = useMemo24(() => {
3883
3976
  return [parentFolder, name].filter(NoReactInternals3.truthy).join("/");
3884
3977
  }, [name, parentFolder]);
3885
- return /* @__PURE__ */ jsxs9("div", {
3978
+ return /* @__PURE__ */ jsxs10("div", {
3886
3979
  children: [
3887
3980
  item.folders.map((folder) => {
3888
- return /* @__PURE__ */ jsx35(AssetFolderItem, {
3981
+ return /* @__PURE__ */ jsx36(AssetFolderItem, {
3889
3982
  item: folder,
3890
3983
  tabIndex,
3891
3984
  level: level + 1,
@@ -3897,7 +3990,7 @@ var AssetFolderTree = ({
3897
3990
  }, folder.name);
3898
3991
  }),
3899
3992
  item.files.map((file) => {
3900
- return /* @__PURE__ */ jsx35(AssetSelectorItem, {
3993
+ return /* @__PURE__ */ jsx36(AssetSelectorItem, {
3901
3994
  item: file,
3902
3995
  tabIndex,
3903
3996
  level,
@@ -3917,10 +4010,10 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
3917
4010
  }, []);
3918
4011
  const { setCanvasContent } = useContext10(Internals8.CompositionSetters);
3919
4012
  const { canvasContent } = useContext10(Internals8.CompositionManager);
3920
- const relativePath = useMemo23(() => {
4013
+ const relativePath = useMemo24(() => {
3921
4014
  return parentFolder ? parentFolder + "/" + item.name : item.name;
3922
4015
  }, [parentFolder, item.name]);
3923
- const selected = useMemo23(() => {
4016
+ const selected = useMemo24(() => {
3924
4017
  if (canvasContent && canvasContent.type === "asset") {
3925
4018
  return canvasContent.asset === relativePath;
3926
4019
  }
@@ -3941,7 +4034,7 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
3941
4034
  setCanvasContent,
3942
4035
  setSidebarCollapsedState
3943
4036
  ]);
3944
- const style = useMemo23(() => {
4037
+ const style = useMemo24(() => {
3945
4038
  return {
3946
4039
  ...itemStyle2,
3947
4040
  color: hovered || selected ? "white" : LIGHT_TEXT,
@@ -3949,25 +4042,25 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
3949
4042
  paddingLeft: 12 + level * 8
3950
4043
  };
3951
4044
  }, [hovered, level, selected]);
3952
- const label = useMemo23(() => {
4045
+ const label = useMemo24(() => {
3953
4046
  return {
3954
4047
  ...labelStyle3,
3955
4048
  color: hovered || selected ? "white" : LIGHT_TEXT
3956
4049
  };
3957
4050
  }, [hovered, selected]);
3958
4051
  const renderFileExplorerAction = useCallback18((color) => {
3959
- return /* @__PURE__ */ jsx35(ExpandedFolderIcon, {
4052
+ return /* @__PURE__ */ jsx36(ExpandedFolderIcon, {
3960
4053
  style: revealIconStyle,
3961
4054
  color
3962
4055
  });
3963
4056
  }, []);
3964
4057
  const renderCopyAction = useCallback18((color) => {
3965
- return /* @__PURE__ */ jsx35(ClipboardIcon, {
4058
+ return /* @__PURE__ */ jsx36(ClipboardIcon, {
3966
4059
  style: revealIconStyle,
3967
4060
  color
3968
4061
  });
3969
4062
  }, []);
3970
- const revealInExplorer = React24.useCallback((e) => {
4063
+ const revealInExplorer = React25.useCallback((e) => {
3971
4064
  e.stopPropagation();
3972
4065
  openInFileExplorer({
3973
4066
  directory: window.remotion_publicFolderExists + "/" + parentFolder + "/" + item.name
@@ -3984,9 +4077,9 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
3984
4077
  showNotification(`Could not copy: ${err.message}`, 2000);
3985
4078
  });
3986
4079
  }, [item.name, parentFolder]);
3987
- return /* @__PURE__ */ jsx35(Row, {
4080
+ return /* @__PURE__ */ jsx36(Row, {
3988
4081
  align: "center",
3989
- children: /* @__PURE__ */ jsxs9("div", {
4082
+ children: /* @__PURE__ */ jsxs10("div", {
3990
4083
  style,
3991
4084
  onPointerEnter,
3992
4085
  onPointerLeave,
@@ -3994,33 +4087,33 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
3994
4087
  tabIndex,
3995
4088
  title: item.name,
3996
4089
  children: [
3997
- /* @__PURE__ */ jsx35(FileIcon, {
4090
+ /* @__PURE__ */ jsx36(FileIcon, {
3998
4091
  style: iconStyle2,
3999
4092
  color: LIGHT_TEXT
4000
4093
  }),
4001
- /* @__PURE__ */ jsx35(Spacing, {
4094
+ /* @__PURE__ */ jsx36(Spacing, {
4002
4095
  x: 1
4003
4096
  }),
4004
- /* @__PURE__ */ jsx35("div", {
4097
+ /* @__PURE__ */ jsx36("div", {
4005
4098
  style: label,
4006
4099
  children: item.name
4007
4100
  }),
4008
- hovered ? /* @__PURE__ */ jsxs9(Fragment5, {
4101
+ hovered ? /* @__PURE__ */ jsxs10(Fragment5, {
4009
4102
  children: [
4010
- /* @__PURE__ */ jsx35(Spacing, {
4103
+ /* @__PURE__ */ jsx36(Spacing, {
4011
4104
  x: 0.5
4012
4105
  }),
4013
- /* @__PURE__ */ jsx35(InlineAction, {
4106
+ /* @__PURE__ */ jsx36(InlineAction, {
4014
4107
  title: "Copy staticFile() name",
4015
4108
  renderAction: renderCopyAction,
4016
4109
  onClick: copyToClipboard
4017
4110
  }),
4018
- readOnlyStudio ? null : /* @__PURE__ */ jsxs9(Fragment5, {
4111
+ readOnlyStudio ? null : /* @__PURE__ */ jsxs10(Fragment5, {
4019
4112
  children: [
4020
- /* @__PURE__ */ jsx35(Spacing, {
4113
+ /* @__PURE__ */ jsx36(Spacing, {
4021
4114
  x: 0.5
4022
4115
  }),
4023
- /* @__PURE__ */ jsx35(InlineAction, {
4116
+ /* @__PURE__ */ jsx36(InlineAction, {
4024
4117
  title: "Open in Explorer",
4025
4118
  renderAction: renderFileExplorerAction,
4026
4119
  onClick: revealInExplorer
@@ -4037,11 +4130,11 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
4037
4130
  // src/components/CurrentAsset.tsx
4038
4131
  import { formatBytes } from "@remotion/studio-shared";
4039
4132
  import { ALL_FORMATS, Input, UrlSource } from "mediabunny";
4040
- import { useContext as useContext12, useEffect as useEffect14, useMemo as useMemo24, useState as useState17 } from "react";
4133
+ import { useContext as useContext12, useEffect as useEffect14, useMemo as useMemo25, useState as useState17 } from "react";
4041
4134
  import { Internals as Internals9, staticFile } from "remotion";
4042
4135
 
4043
4136
  // src/components/use-static-files.ts
4044
- import React25, { createContext as createContext10, useContext as useContext11, useEffect as useEffect13, useState as useState16 } from "react";
4137
+ import React26, { createContext as createContext10, useContext as useContext11, useEffect as useEffect13, useState as useState16 } from "react";
4045
4138
  import { useRemotionEnvironment } from "remotion";
4046
4139
 
4047
4140
  // src/api/get-static-files.ts
@@ -4113,16 +4206,16 @@ var StaticFilesProvider = ({ children }) => {
4113
4206
  });
4114
4207
  return cancel;
4115
4208
  }, [env.isStudio, env.isReadOnlyStudio]);
4116
- return React25.createElement(StaticFilesContext.Provider, { value: files }, children);
4209
+ return React26.createElement(StaticFilesContext.Provider, { value: files }, children);
4117
4210
  };
4118
4211
  var useStaticFiles = () => {
4119
4212
  return useContext11(StaticFilesContext);
4120
4213
  };
4121
4214
 
4122
4215
  // src/components/CurrentAsset.tsx
4123
- import { jsx as jsx36, jsxs as jsxs10 } from "react/jsx-runtime";
4216
+ import { jsx as jsx37, jsxs as jsxs11 } from "react/jsx-runtime";
4124
4217
  var CURRENT_ASSET_HEIGHT = 80;
4125
- var container8 = {
4218
+ var container9 = {
4126
4219
  height: CURRENT_ASSET_HEIGHT,
4127
4220
  display: "block",
4128
4221
  borderBottom: `1px solid ${BORDER_COLOR}`,
@@ -4164,7 +4257,7 @@ var CurrentAsset = () => {
4164
4257
  const { canvasContent } = useContext12(Internals9.CompositionManager);
4165
4258
  const assetName = canvasContent?.type === "asset" ? canvasContent.asset : null;
4166
4259
  const staticFiles = useStaticFiles();
4167
- const sizeInBytes = useMemo24(() => {
4260
+ const sizeInBytes = useMemo25(() => {
4168
4261
  if (!assetName) {
4169
4262
  return null;
4170
4263
  }
@@ -4199,8 +4292,8 @@ var CurrentAsset = () => {
4199
4292
  };
4200
4293
  }, [assetName]);
4201
4294
  if (!assetName) {
4202
- return /* @__PURE__ */ jsx36("div", {
4203
- style: container8
4295
+ return /* @__PURE__ */ jsx37("div", {
4296
+ style: container9
4204
4297
  });
4205
4298
  }
4206
4299
  const fileName = assetName.split("/").pop() ?? assetName;
@@ -4214,21 +4307,21 @@ var CurrentAsset = () => {
4214
4307
  subtitleParts.push(`${mediaMetadata.width}x${mediaMetadata.height}`);
4215
4308
  }
4216
4309
  }
4217
- return /* @__PURE__ */ jsx36("div", {
4218
- style: container8,
4219
- children: /* @__PURE__ */ jsx36("div", {
4310
+ return /* @__PURE__ */ jsx37("div", {
4311
+ style: container9,
4312
+ children: /* @__PURE__ */ jsx37("div", {
4220
4313
  style: row2,
4221
- children: /* @__PURE__ */ jsxs10("div", {
4314
+ children: /* @__PURE__ */ jsxs11("div", {
4222
4315
  children: [
4223
- /* @__PURE__ */ jsx36("div", {
4316
+ /* @__PURE__ */ jsx37("div", {
4224
4317
  style: title2,
4225
4318
  children: fileName
4226
4319
  }),
4227
- subtitleParts.length > 0 ? /* @__PURE__ */ jsx36("div", {
4320
+ subtitleParts.length > 0 ? /* @__PURE__ */ jsx37("div", {
4228
4321
  style: subtitle2,
4229
4322
  children: subtitleParts.join(" · ")
4230
4323
  }) : null,
4231
- mediaMetadata ? /* @__PURE__ */ jsx36("div", {
4324
+ mediaMetadata ? /* @__PURE__ */ jsx37("div", {
4232
4325
  style: subtitle2,
4233
4326
  children: formatDuration(mediaMetadata.duration)
4234
4327
  }) : null
@@ -4239,8 +4332,8 @@ var CurrentAsset = () => {
4239
4332
  };
4240
4333
 
4241
4334
  // src/components/AssetSelector.tsx
4242
- import { jsx as jsx37, jsxs as jsxs11 } from "react/jsx-runtime";
4243
- var container9 = {
4335
+ import { jsx as jsx38, jsxs as jsxs12 } from "react/jsx-runtime";
4336
+ var container10 = {
4244
4337
  display: "flex",
4245
4338
  flexDirection: "column",
4246
4339
  flex: 1,
@@ -4271,7 +4364,7 @@ var AssetSelector = ({ readOnlyStudio }) => {
4271
4364
  const connectionStatus = useContext13(StudioServerConnectionCtx).previewServerState.type;
4272
4365
  const shouldAllowUpload = connectionStatus === "connected" && !readOnlyStudio;
4273
4366
  const showCurrentAsset = canvasContent?.type === "asset";
4274
- const list = useMemo25(() => {
4367
+ const list = useMemo26(() => {
4275
4368
  return {
4276
4369
  ...baseList,
4277
4370
  height: showCurrentAsset ? `calc(100% - ${CURRENT_ASSET_HEIGHT}px)` : "100%"
@@ -4279,7 +4372,7 @@ var AssetSelector = ({ readOnlyStudio }) => {
4279
4372
  }, [showCurrentAsset]);
4280
4373
  const staticFiles = useStaticFiles();
4281
4374
  const publicFolderExists = window.remotion_publicFolderExists;
4282
- const assetTree = useMemo25(() => {
4375
+ const assetTree = useMemo26(() => {
4283
4376
  return buildAssetFolderStructure(staticFiles, null, assetFoldersExpanded);
4284
4377
  }, [assetFoldersExpanded, staticFiles]);
4285
4378
  const toggleFolder = useCallback19((folderName, parentName) => {
@@ -4330,41 +4423,41 @@ var AssetSelector = ({ readOnlyStudio }) => {
4330
4423
  setDropLocation(null);
4331
4424
  }
4332
4425
  }, [dropLocation]);
4333
- return /* @__PURE__ */ jsxs11("div", {
4334
- style: container9,
4426
+ return /* @__PURE__ */ jsxs12("div", {
4427
+ style: container10,
4335
4428
  onDragOver: shouldAllowUpload ? onDragOver : undefined,
4336
4429
  onDrop: shouldAllowUpload ? onDrop : undefined,
4337
4430
  children: [
4338
- showCurrentAsset ? /* @__PURE__ */ jsx37(CurrentAsset, {}) : null,
4339
- staticFiles.length === 0 ? publicFolderExists ? /* @__PURE__ */ jsx37("div", {
4431
+ showCurrentAsset ? /* @__PURE__ */ jsx38(CurrentAsset, {}) : null,
4432
+ staticFiles.length === 0 ? publicFolderExists ? /* @__PURE__ */ jsx38("div", {
4340
4433
  style: emptyState,
4341
- children: /* @__PURE__ */ jsxs11("div", {
4434
+ children: /* @__PURE__ */ jsxs12("div", {
4342
4435
  style: label,
4343
4436
  children: [
4344
4437
  "To add assets, place a file in the",
4345
4438
  " ",
4346
- /* @__PURE__ */ jsx37("code", {
4439
+ /* @__PURE__ */ jsx38("code", {
4347
4440
  style: inlineCodeSnippet,
4348
4441
  children: "public"
4349
4442
  }),
4350
4443
  " folder of your project or drag and drop a file here."
4351
4444
  ]
4352
4445
  })
4353
- }) : /* @__PURE__ */ jsx37("div", {
4446
+ }) : /* @__PURE__ */ jsx38("div", {
4354
4447
  style: emptyState,
4355
- children: /* @__PURE__ */ jsxs11("div", {
4448
+ children: /* @__PURE__ */ jsxs12("div", {
4356
4449
  style: label,
4357
4450
  children: [
4358
4451
  "To add assets, create a folder called",
4359
4452
  " ",
4360
- /* @__PURE__ */ jsx37("code", {
4453
+ /* @__PURE__ */ jsx38("code", {
4361
4454
  style: inlineCodeSnippet,
4362
4455
  children: "public"
4363
4456
  }),
4364
4457
  " in the root of your project and place a file in it."
4365
4458
  ]
4366
4459
  })
4367
- }) : /* @__PURE__ */ jsx37("div", {
4460
+ }) : /* @__PURE__ */ jsx38("div", {
4368
4461
  className: "__remotion-vertical-scrollbar",
4369
4462
  style: {
4370
4463
  ...list,
@@ -4372,7 +4465,7 @@ var AssetSelector = ({ readOnlyStudio }) => {
4372
4465
  },
4373
4466
  onDragEnter,
4374
4467
  onDragLeave,
4375
- children: /* @__PURE__ */ jsx37(AssetFolderTree, {
4468
+ children: /* @__PURE__ */ jsx38(AssetFolderTree, {
4376
4469
  item: assetTree,
4377
4470
  level: 0,
4378
4471
  parentFolder: null,
@@ -4393,11 +4486,11 @@ import {
4393
4486
  useCallback as useCallback20,
4394
4487
  useContext as useContext14,
4395
4488
  useImperativeHandle as useImperativeHandle4,
4396
- useMemo as useMemo26,
4489
+ useMemo as useMemo27,
4397
4490
  useState as useState19
4398
4491
  } from "react";
4399
4492
  import { Internals as Internals11 } from "remotion";
4400
- import { jsx as jsx38 } from "react/jsx-runtime";
4493
+ import { jsx as jsx39 } from "react/jsx-runtime";
4401
4494
  var CompSelectorRef = ({ children }) => {
4402
4495
  const { compositions } = useContext14(Internals11.CompositionManager);
4403
4496
  const [foldersExpanded, setFoldersExpanded] = useState19(loadExpandedFolders("compositions"));
@@ -4459,34 +4552,34 @@ var CompSelectorRef = ({ children }) => {
4459
4552
  }
4460
4553
  };
4461
4554
  }, [compositions, selectComposition, toggleFolder]);
4462
- const contextValue = useMemo26(() => {
4555
+ const contextValue = useMemo27(() => {
4463
4556
  return {
4464
4557
  foldersExpanded,
4465
4558
  setFoldersExpanded,
4466
4559
  toggleFolder
4467
4560
  };
4468
4561
  }, [foldersExpanded, setFoldersExpanded, toggleFolder]);
4469
- return /* @__PURE__ */ jsx38(ExpandedFoldersContext.Provider, {
4562
+ return /* @__PURE__ */ jsx39(ExpandedFoldersContext.Provider, {
4470
4563
  value: contextValue,
4471
4564
  children
4472
4565
  });
4473
4566
  };
4474
4567
 
4475
4568
  // src/components/Tabs/index.tsx
4476
- import { useCallback as useCallback21, useMemo as useMemo27, useState as useState20 } from "react";
4477
- import { jsx as jsx39 } from "react/jsx-runtime";
4569
+ import { useCallback as useCallback21, useMemo as useMemo28, useState as useState20 } from "react";
4570
+ import { jsx as jsx40 } from "react/jsx-runtime";
4478
4571
  var tabsContainer = {
4479
4572
  display: "flex",
4480
4573
  flexDirection: "row"
4481
4574
  };
4482
4575
  var Tabs = ({ children, style }) => {
4483
- const definiteStyle = useMemo27(() => {
4576
+ const definiteStyle = useMemo28(() => {
4484
4577
  return {
4485
4578
  ...tabsContainer,
4486
4579
  ...style
4487
4580
  };
4488
4581
  }, [style]);
4489
- return /* @__PURE__ */ jsx39("div", {
4582
+ return /* @__PURE__ */ jsx40("div", {
4490
4583
  style: definiteStyle,
4491
4584
  children
4492
4585
  });
@@ -4515,7 +4608,7 @@ var Tab = ({ children, onClick, style, selected }) => {
4515
4608
  const onPointerLeave = useCallback21(() => {
4516
4609
  setHovered(false);
4517
4610
  }, []);
4518
- const definiteStyle = useMemo27(() => ({
4611
+ const definiteStyle = useMemo28(() => ({
4519
4612
  ...selectorButton,
4520
4613
  backgroundColor: selected ? BACKGROUND : hovered ? CLEAR_HOVER : INPUT_BACKGROUND,
4521
4614
  color: selected ? "white" : LIGHT_TEXT,
@@ -4523,7 +4616,7 @@ var Tab = ({ children, onClick, style, selected }) => {
4523
4616
  boxShadow: selected ? "none" : undefined,
4524
4617
  ...style
4525
4618
  }), [hovered, selected, style]);
4526
- return /* @__PURE__ */ jsx39("div", {
4619
+ return /* @__PURE__ */ jsx40("div", {
4527
4620
  style: definiteStyle,
4528
4621
  role: "button",
4529
4622
  onClick,
@@ -4535,8 +4628,8 @@ var Tab = ({ children, onClick, style, selected }) => {
4535
4628
  };
4536
4629
 
4537
4630
  // src/components/ExplorerPanel.tsx
4538
- import { jsx as jsx40, jsxs as jsxs12 } from "react/jsx-runtime";
4539
- var container10 = {
4631
+ import { jsx as jsx41, jsxs as jsxs13 } from "react/jsx-runtime";
4632
+ var container11 = {
4540
4633
  height: "100%",
4541
4634
  width: "100%",
4542
4635
  maxWidth: "100%",
@@ -4581,21 +4674,21 @@ var ExplorerPanel = ({ readOnlyStudio }) => {
4581
4674
  }
4582
4675
  };
4583
4676
  }, []);
4584
- return /* @__PURE__ */ jsx40(CompSelectorRef, {
4585
- children: /* @__PURE__ */ jsxs12("div", {
4586
- style: container10,
4677
+ return /* @__PURE__ */ jsx41(CompSelectorRef, {
4678
+ children: /* @__PURE__ */ jsxs13("div", {
4679
+ style: container11,
4587
4680
  className: "css-reset",
4588
4681
  children: [
4589
- /* @__PURE__ */ jsx40("div", {
4682
+ /* @__PURE__ */ jsx41("div", {
4590
4683
  style: tabsContainer2,
4591
- children: /* @__PURE__ */ jsxs12(Tabs, {
4684
+ children: /* @__PURE__ */ jsxs13(Tabs, {
4592
4685
  children: [
4593
- /* @__PURE__ */ jsx40(Tab, {
4686
+ /* @__PURE__ */ jsx41(Tab, {
4594
4687
  selected: panel === "compositions",
4595
4688
  onClick: onCompositionsSelected,
4596
4689
  children: "Compositions"
4597
4690
  }),
4598
- /* @__PURE__ */ jsx40(Tab, {
4691
+ /* @__PURE__ */ jsx41(Tab, {
4599
4692
  selected: panel === "assets",
4600
4693
  onClick: onAssetsSelected,
4601
4694
  children: "Assets"
@@ -4603,7 +4696,7 @@ var ExplorerPanel = ({ readOnlyStudio }) => {
4603
4696
  ]
4604
4697
  })
4605
4698
  }),
4606
- panel === "compositions" ? /* @__PURE__ */ jsx40(CompositionSelector, {}) : /* @__PURE__ */ jsx40(AssetSelector, {
4699
+ panel === "compositions" ? /* @__PURE__ */ jsx41(CompositionSelector, {}) : /* @__PURE__ */ jsx41(AssetSelector, {
4607
4700
  readOnlyStudio
4608
4701
  })
4609
4702
  ]
@@ -4769,7 +4862,7 @@ import {
4769
4862
  import { AbsoluteFill } from "remotion";
4770
4863
 
4771
4864
  // src/components/ModalContainer.tsx
4772
- import { jsx as jsx41 } from "react/jsx-runtime";
4865
+ import { jsx as jsx42 } from "react/jsx-runtime";
4773
4866
  var padding = 20;
4774
4867
  var getMaxModalWidth = (width) => {
4775
4868
  return `min(calc(100vw - ${padding * 2}px), calc(${width}px - ${padding * 2}px))`;
@@ -4793,16 +4886,16 @@ var panel = {
4793
4886
  margin: "auto"
4794
4887
  };
4795
4888
  var ModalContainer = ({ children, onEscape, onOutsideClick, noZIndex }) => {
4796
- return /* @__PURE__ */ jsx41("div", {
4889
+ return /* @__PURE__ */ jsx42("div", {
4797
4890
  className: "css-reset",
4798
4891
  style: backgroundOverlay,
4799
4892
  role: "dialog",
4800
4893
  "aria-modal": "true",
4801
- children: /* @__PURE__ */ jsx41(HigherZIndex, {
4894
+ children: /* @__PURE__ */ jsx42(HigherZIndex, {
4802
4895
  disabled: noZIndex,
4803
4896
  onOutsideClick,
4804
4897
  onEscape,
4805
- children: /* @__PURE__ */ jsx41("div", {
4898
+ children: /* @__PURE__ */ jsx42("div", {
4806
4899
  style: panel,
4807
4900
  children
4808
4901
  })
@@ -4814,7 +4907,7 @@ var ModalContainer = ({ children, onEscape, onOutsideClick, noZIndex }) => {
4814
4907
  import { useCallback as useCallback24, useContext as useContext16 } from "react";
4815
4908
 
4816
4909
  // src/components/NewComposition/CancelButton.tsx
4817
- import { jsx as jsx42 } from "react/jsx-runtime";
4910
+ import { jsx as jsx43 } from "react/jsx-runtime";
4818
4911
  var style = {
4819
4912
  appearance: "none",
4820
4913
  border: "none",
@@ -4827,15 +4920,15 @@ var style = {
4827
4920
  };
4828
4921
  var CancelButton = ({ onPress, ...props }) => {
4829
4922
  const { tabIndex } = useZIndex();
4830
- return /* @__PURE__ */ jsx42("button", {
4923
+ return /* @__PURE__ */ jsx43("button", {
4831
4924
  tabIndex,
4832
4925
  style,
4833
4926
  type: "button",
4834
4927
  onClick: onPress,
4835
- children: /* @__PURE__ */ jsx42("svg", {
4928
+ children: /* @__PURE__ */ jsx43("svg", {
4836
4929
  viewBox: "0 0 320 512",
4837
4930
  ...props,
4838
- children: /* @__PURE__ */ jsx42("path", {
4931
+ children: /* @__PURE__ */ jsx43("path", {
4839
4932
  fill: "currentColor",
4840
4933
  d: "M207.6 256l107.72-107.72c6.23-6.23 6.23-16.34 0-22.58l-25.03-25.03c-6.23-6.23-16.34-6.23-22.58 0L160 208.4 52.28 100.68c-6.23-6.23-16.34-6.23-22.58 0L4.68 125.7c-6.23 6.23-6.23 16.34 0 22.58L112.4 256 4.68 363.72c-6.23 6.23-6.23 16.34 0 22.58l25.03 25.03c6.23 6.23 16.34 6.23 22.58 0L160 303.6l107.72 107.72c6.23 6.23 16.34 6.23 22.58 0l25.03-25.03c6.23-6.23 6.23-16.34 0-22.58L207.6 256z"
4841
4934
  })
@@ -4844,8 +4937,8 @@ var CancelButton = ({ onPress, ...props }) => {
4844
4937
  };
4845
4938
 
4846
4939
  // src/components/ModalHeader.tsx
4847
- import { jsx as jsx43, jsxs as jsxs13 } from "react/jsx-runtime";
4848
- var container11 = {
4940
+ import { jsx as jsx44, jsxs as jsxs14 } from "react/jsx-runtime";
4941
+ var container12 = {
4849
4942
  display: "flex",
4850
4943
  flexDirection: "row",
4851
4944
  alignItems: "center",
@@ -4866,15 +4959,15 @@ var ModalHeader = ({ title: title3, onClose }) => {
4866
4959
  const onPress = useCallback24(() => {
4867
4960
  setSelectedModal(null);
4868
4961
  }, [setSelectedModal]);
4869
- return /* @__PURE__ */ jsxs13("div", {
4870
- style: container11,
4962
+ return /* @__PURE__ */ jsxs14("div", {
4963
+ style: container12,
4871
4964
  children: [
4872
- /* @__PURE__ */ jsx43("div", {
4965
+ /* @__PURE__ */ jsx44("div", {
4873
4966
  style: titleStyle,
4874
4967
  children: title3
4875
4968
  }),
4876
- /* @__PURE__ */ jsx43(Flex, {}),
4877
- /* @__PURE__ */ jsx43(CancelButton, {
4969
+ /* @__PURE__ */ jsx44(Flex, {}),
4970
+ /* @__PURE__ */ jsx44(CancelButton, {
4878
4971
  style: icon,
4879
4972
  onPress: onClose ?? onPress
4880
4973
  })
@@ -4883,8 +4976,8 @@ var ModalHeader = ({ title: title3, onClose }) => {
4883
4976
  };
4884
4977
 
4885
4978
  // src/components/AskAiModal.tsx
4886
- import { jsx as jsx44, jsxs as jsxs14 } from "react/jsx-runtime";
4887
- var container12 = {
4979
+ import { jsx as jsx45, jsxs as jsxs15 } from "react/jsx-runtime";
4980
+ var container13 = {
4888
4981
  height: "calc(100vh - 100px)",
4889
4982
  width: "calc(100vw - 160px)",
4890
4983
  maxWidth: 800,
@@ -4936,21 +5029,21 @@ var AskAiModal = () => {
4936
5029
  if (state === "never-opened") {
4937
5030
  return null;
4938
5031
  }
4939
- return /* @__PURE__ */ jsx44(AbsoluteFill, {
5032
+ return /* @__PURE__ */ jsx45(AbsoluteFill, {
4940
5033
  style: { display: state === "visible" ? "block" : "none" },
4941
- children: /* @__PURE__ */ jsxs14(ModalContainer, {
5034
+ children: /* @__PURE__ */ jsxs15(ModalContainer, {
4942
5035
  noZIndex: state === "hidden",
4943
5036
  onOutsideClick: onQuit,
4944
5037
  onEscape: onQuit,
4945
5038
  children: [
4946
- /* @__PURE__ */ jsx44(ModalHeader, {
5039
+ /* @__PURE__ */ jsx45(ModalHeader, {
4947
5040
  title: "Ask AI",
4948
5041
  onClose: onQuit
4949
5042
  }),
4950
- /* @__PURE__ */ jsx44("iframe", {
5043
+ /* @__PURE__ */ jsx45("iframe", {
4951
5044
  ref: iframe,
4952
5045
  frameBorder: 0,
4953
- style: container12,
5046
+ style: container13,
4954
5047
  src: "https://www.remotion.dev/ai-embed",
4955
5048
  allow: "clipboard-read; clipboard-write"
4956
5049
  })
@@ -4960,32 +5053,32 @@ var AskAiModal = () => {
4960
5053
  };
4961
5054
 
4962
5055
  // src/components/SizeSelector.tsx
4963
- import { useContext as useContext20, useMemo as useMemo34 } from "react";
5056
+ import { useContext as useContext20, useMemo as useMemo35 } from "react";
4964
5057
  import { Internals as Internals14 } from "remotion";
4965
5058
 
4966
5059
  // src/icons/Checkmark.tsx
4967
- import { jsx as jsx45 } from "react/jsx-runtime";
5060
+ import { jsx as jsx46 } from "react/jsx-runtime";
4968
5061
  var style2 = {
4969
5062
  width: 14,
4970
5063
  height: 14
4971
5064
  };
4972
- var Checkmark = () => /* @__PURE__ */ jsx45("svg", {
5065
+ var Checkmark = () => /* @__PURE__ */ jsx46("svg", {
4973
5066
  focusable: "false",
4974
5067
  role: "img",
4975
5068
  viewBox: "0 0 512 512",
4976
5069
  style: style2,
4977
- children: /* @__PURE__ */ jsx45("path", {
5070
+ children: /* @__PURE__ */ jsx46("path", {
4978
5071
  fill: "currentColor",
4979
5072
  d: "M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z"
4980
5073
  })
4981
5074
  });
4982
5075
 
4983
5076
  // src/components/ControlButton.tsx
4984
- import { useMemo as useMemo28 } from "react";
4985
- import { jsx as jsx46 } from "react/jsx-runtime";
5077
+ import { useMemo as useMemo29 } from "react";
5078
+ import { jsx as jsx47 } from "react/jsx-runtime";
4986
5079
  var CONTROL_BUTTON_PADDING = 6;
4987
5080
  var ControlButton = (props) => {
4988
- const style3 = useMemo28(() => {
5081
+ const style3 = useMemo29(() => {
4989
5082
  return {
4990
5083
  opacity: props.disabled ? 0.5 : 1,
4991
5084
  display: "inline-flex",
@@ -4995,7 +5088,7 @@ var ControlButton = (props) => {
4995
5088
  };
4996
5089
  }, [props.disabled]);
4997
5090
  const { tabIndex } = useZIndex();
4998
- return /* @__PURE__ */ jsx46("button", {
5091
+ return /* @__PURE__ */ jsx47("button", {
4999
5092
  type: "button",
5000
5093
  tabIndex,
5001
5094
  ...props,
@@ -5005,10 +5098,10 @@ var ControlButton = (props) => {
5005
5098
 
5006
5099
  // src/components/NewComposition/ComboBox.tsx
5007
5100
  import { PlayerInternals as PlayerInternals5 } from "@remotion/player";
5008
- import { useCallback as useCallback26, useEffect as useEffect17, useMemo as useMemo29, useRef as useRef14, useState as useState23 } from "react";
5101
+ import { useCallback as useCallback26, useEffect as useEffect17, useMemo as useMemo30, useRef as useRef14, useState as useState23 } from "react";
5009
5102
  import ReactDOM4 from "react-dom";
5010
- import { jsx as jsx47, jsxs as jsxs15, Fragment as Fragment6 } from "react/jsx-runtime";
5011
- var container13 = {
5103
+ import { jsx as jsx48, jsxs as jsxs16, Fragment as Fragment6 } from "react/jsx-runtime";
5104
+ var container14 = {
5012
5105
  padding: "8px 10px",
5013
5106
  display: "inline-block",
5014
5107
  backgroundColor: INPUT_BACKGROUND,
@@ -5082,25 +5175,25 @@ var Combobox = ({ values, selectedId, style: customStyle, title: title3 }) => {
5082
5175
  current.removeEventListener("click", onClick);
5083
5176
  };
5084
5177
  }, [refresh]);
5085
- const spaceToBottom = useMemo29(() => {
5178
+ const spaceToBottom = useMemo30(() => {
5086
5179
  const margin2 = 10;
5087
5180
  if (size && opened) {
5088
5181
  return size.windowSize.height - (size.top + size.height) - margin2;
5089
5182
  }
5090
5183
  return 0;
5091
5184
  }, [opened, size]);
5092
- const spaceToTop = useMemo29(() => {
5185
+ const spaceToTop = useMemo30(() => {
5093
5186
  const margin2 = 10;
5094
5187
  if (size && opened) {
5095
5188
  return size.top - margin2;
5096
5189
  }
5097
5190
  return 0;
5098
5191
  }, [opened, size]);
5099
- const derivedMaxHeight = useMemo29(() => {
5192
+ const derivedMaxHeight = useMemo30(() => {
5100
5193
  return spaceToTop > spaceToBottom ? spaceToTop : spaceToBottom;
5101
5194
  }, [spaceToBottom, spaceToTop]);
5102
5195
  const isMobileLayout = useMobileLayout();
5103
- const portalStyle = useMemo29(() => {
5196
+ const portalStyle = useMemo30(() => {
5104
5197
  if (!opened || !size) {
5105
5198
  return null;
5106
5199
  }
@@ -5127,9 +5220,9 @@ var Combobox = ({ values, selectedId, style: customStyle, title: title3 }) => {
5127
5220
  };
5128
5221
  }, [isMobileLayout, opened, size, spaceToBottom, spaceToTop]);
5129
5222
  const selected = values.find((v) => v.id === selectedId);
5130
- const style3 = useMemo29(() => {
5223
+ const style3 = useMemo30(() => {
5131
5224
  return {
5132
- ...container13,
5225
+ ...container14,
5133
5226
  ...customStyle ?? {},
5134
5227
  userSelect: "none",
5135
5228
  WebkitUserSelect: "none",
@@ -5140,9 +5233,9 @@ var Combobox = ({ values, selectedId, style: customStyle, title: title3 }) => {
5140
5233
  borderColor: opened ? SELECTED_BACKGROUND : hovered ? INPUT_BORDER_COLOR_HOVERED : INPUT_BORDER_COLOR_UNHOVERED
5141
5234
  };
5142
5235
  }, [customStyle, hovered, opened]);
5143
- return /* @__PURE__ */ jsxs15(Fragment6, {
5236
+ return /* @__PURE__ */ jsxs16(Fragment6, {
5144
5237
  children: [
5145
- /* @__PURE__ */ jsxs15("button", {
5238
+ /* @__PURE__ */ jsxs16("button", {
5146
5239
  ref,
5147
5240
  title: title3,
5148
5241
  tabIndex,
@@ -5150,29 +5243,29 @@ var Combobox = ({ values, selectedId, style: customStyle, title: title3 }) => {
5150
5243
  style: style3,
5151
5244
  className: MENU_INITIATOR_CLASSNAME,
5152
5245
  children: [
5153
- selected ? /* @__PURE__ */ jsx47("div", {
5246
+ selected ? /* @__PURE__ */ jsx48("div", {
5154
5247
  title: typeof selected.label === "string" ? selected.label : undefined,
5155
5248
  style: label2,
5156
5249
  children: selected?.label
5157
5250
  }) : null,
5158
- /* @__PURE__ */ jsx47(Spacing, {
5251
+ /* @__PURE__ */ jsx48(Spacing, {
5159
5252
  x: 1
5160
5253
  }),
5161
5254
  " ",
5162
- /* @__PURE__ */ jsx47(CaretDown, {})
5255
+ /* @__PURE__ */ jsx48(CaretDown, {})
5163
5256
  ]
5164
5257
  }),
5165
- portalStyle ? ReactDOM4.createPortal(/* @__PURE__ */ jsx47("div", {
5258
+ portalStyle ? ReactDOM4.createPortal(/* @__PURE__ */ jsx48("div", {
5166
5259
  style: fullScreenOverlay,
5167
- children: /* @__PURE__ */ jsx47("div", {
5260
+ children: /* @__PURE__ */ jsx48("div", {
5168
5261
  style: outerPortal,
5169
5262
  className: "css-reset",
5170
- children: /* @__PURE__ */ jsx47(HigherZIndex, {
5263
+ children: /* @__PURE__ */ jsx48(HigherZIndex, {
5171
5264
  onOutsideClick: onHide,
5172
5265
  onEscape: onHide,
5173
- children: /* @__PURE__ */ jsx47("div", {
5266
+ children: /* @__PURE__ */ jsx48("div", {
5174
5267
  style: portalStyle,
5175
- children: /* @__PURE__ */ jsx47(MenuContent, {
5268
+ children: /* @__PURE__ */ jsx48(MenuContent, {
5176
5269
  onNextMenu: noop,
5177
5270
  onPreviousMenu: noop,
5178
5271
  values,
@@ -5192,7 +5285,7 @@ var Combobox = ({ values, selectedId, style: customStyle, title: title3 }) => {
5192
5285
 
5193
5286
  // src/components/Preview.tsx
5194
5287
  import { PlayerInternals as PlayerInternals6 } from "@remotion/player";
5195
- import { useContext as useContext19, useEffect as useEffect23, useMemo as useMemo33, useRef as useRef17 } from "react";
5288
+ import { useContext as useContext19, useEffect as useEffect23, useMemo as useMemo34, useRef as useRef17 } from "react";
5196
5289
  import { Internals as Internals13 } from "remotion";
5197
5290
 
5198
5291
  // src/helpers/checkerboard-background.ts
@@ -5324,7 +5417,7 @@ import {
5324
5417
  forwardRef as forwardRef2,
5325
5418
  useEffect as useEffect19,
5326
5419
  useImperativeHandle as useImperativeHandle8,
5327
- useMemo as useMemo31,
5420
+ useMemo as useMemo32,
5328
5421
  useRef as useRef16,
5329
5422
  useState as useState25
5330
5423
  } from "react";
@@ -5334,17 +5427,17 @@ import {
5334
5427
  forwardRef,
5335
5428
  useEffect as useEffect18,
5336
5429
  useImperativeHandle as useImperativeHandle7,
5337
- useMemo as useMemo30,
5430
+ useMemo as useMemo31,
5338
5431
  useRef as useRef15,
5339
5432
  useState as useState24
5340
5433
  } from "react";
5341
- import { jsx as jsx48 } from "react/jsx-runtime";
5434
+ import { jsx as jsx49 } from "react/jsx-runtime";
5342
5435
  var INPUT_HORIZONTAL_PADDING = 8;
5343
5436
  var aligner = {
5344
5437
  marginRight: -INPUT_HORIZONTAL_PADDING
5345
5438
  };
5346
5439
  var RightAlignInput = ({ children }) => {
5347
- return /* @__PURE__ */ jsx48("div", {
5440
+ return /* @__PURE__ */ jsx49("div", {
5348
5441
  style: aligner,
5349
5442
  children
5350
5443
  });
@@ -5366,7 +5459,7 @@ var RemInputForwardRef = ({ status, rightAlign, ...props }, ref) => {
5366
5459
  const [isHovered, setIsHovered] = useState24(false);
5367
5460
  const inputRef = useRef15(null);
5368
5461
  const { tabIndex } = useZIndex();
5369
- const style3 = useMemo30(() => {
5462
+ const style3 = useMemo31(() => {
5370
5463
  return {
5371
5464
  backgroundColor: INPUT_BACKGROUND,
5372
5465
  ...inputBaseStyle,
@@ -5399,7 +5492,7 @@ var RemInputForwardRef = ({ status, rightAlign, ...props }, ref) => {
5399
5492
  current.removeEventListener("mouseleave", onMouseLeave);
5400
5493
  };
5401
5494
  }, [inputRef]);
5402
- return /* @__PURE__ */ jsx48("input", {
5495
+ return /* @__PURE__ */ jsx49("input", {
5403
5496
  ref: inputRef,
5404
5497
  tabIndex,
5405
5498
  ...props,
@@ -5409,7 +5502,7 @@ var RemInputForwardRef = ({ status, rightAlign, ...props }, ref) => {
5409
5502
  var RemotionInput = forwardRef(RemInputForwardRef);
5410
5503
 
5411
5504
  // src/components/NewComposition/RemTextarea.tsx
5412
- import { jsx as jsx49 } from "react/jsx-runtime";
5505
+ import { jsx as jsx50 } from "react/jsx-runtime";
5413
5506
  var inputBaseStyle2 = {
5414
5507
  padding: `${INPUT_HORIZONTAL_PADDING}px 10px`,
5415
5508
  color: "white",
@@ -5427,7 +5520,7 @@ var RemTextareaFRFunction = ({ status, ...props }, ref) => {
5427
5520
  useImperativeHandle8(ref, () => {
5428
5521
  return inputRef.current;
5429
5522
  }, []);
5430
- const style3 = useMemo31(() => {
5523
+ const style3 = useMemo32(() => {
5431
5524
  return {
5432
5525
  backgroundColor: INPUT_BACKGROUND,
5433
5526
  ...inputBaseStyle2,
@@ -5490,7 +5583,7 @@ var RemTextareaFRFunction = ({ status, ...props }, ref) => {
5490
5583
  current.removeEventListener("keydown", onKeyDown);
5491
5584
  };
5492
5585
  }, [inputRef]);
5493
- return /* @__PURE__ */ jsx49("textarea", {
5586
+ return /* @__PURE__ */ jsx50("textarea", {
5494
5587
  ref: inputRef,
5495
5588
  tabIndex,
5496
5589
  ...props,
@@ -5501,7 +5594,7 @@ var RemTextareaFRFunction = ({ status, ...props }, ref) => {
5501
5594
  var RemTextarea = forwardRef2(RemTextareaFRFunction);
5502
5595
 
5503
5596
  // src/components/JSONViewer.tsx
5504
- import { jsx as jsx50 } from "react/jsx-runtime";
5597
+ import { jsx as jsx51 } from "react/jsx-runtime";
5505
5598
  var jsonStyle = {
5506
5599
  marginTop: 14,
5507
5600
  marginBottom: 14,
@@ -5515,7 +5608,7 @@ var JSONViewer = ({ src }) => {
5515
5608
  setJson(JSON.stringify(jsonRes, null, 2));
5516
5609
  });
5517
5610
  }, [src]);
5518
- return /* @__PURE__ */ jsx50(RemTextarea, {
5611
+ return /* @__PURE__ */ jsx51(RemTextarea, {
5519
5612
  value: json ?? undefined,
5520
5613
  status: "ok",
5521
5614
  onChange: () => {
@@ -5527,7 +5620,7 @@ var JSONViewer = ({ src }) => {
5527
5620
 
5528
5621
  // src/components/TextViewer.tsx
5529
5622
  import { useEffect as useEffect21, useState as useState27 } from "react";
5530
- import { jsxs as jsxs16 } from "react/jsx-runtime";
5623
+ import { jsxs as jsxs17 } from "react/jsx-runtime";
5531
5624
  var textStyle = {
5532
5625
  margin: 14,
5533
5626
  fontFamily: "monospace",
@@ -5546,7 +5639,7 @@ var TextViewer = ({ src }) => {
5546
5639
  setTxt(text);
5547
5640
  });
5548
5641
  }, [src]);
5549
- return /* @__PURE__ */ jsxs16("div", {
5642
+ return /* @__PURE__ */ jsxs17("div", {
5550
5643
  style: textStyle,
5551
5644
  children: [
5552
5645
  txt,
@@ -5556,7 +5649,7 @@ var TextViewer = ({ src }) => {
5556
5649
  };
5557
5650
 
5558
5651
  // src/components/FilePreview.tsx
5559
- import { jsx as jsx51, jsxs as jsxs17, Fragment as Fragment7 } from "react/jsx-runtime";
5652
+ import { jsx as jsx52, jsxs as jsxs18, Fragment as Fragment7 } from "react/jsx-runtime";
5560
5653
  var msgStyle = {
5561
5654
  fontSize: 13,
5562
5655
  color: "white",
@@ -5572,42 +5665,42 @@ var FilePreview = ({ fileType, src, currentAsset, assetMetadata }) => {
5572
5665
  throw new Error('expected to have assetMetadata, got "not-found"');
5573
5666
  }
5574
5667
  if (fileType === "audio") {
5575
- return /* @__PURE__ */ jsx51("audio", {
5668
+ return /* @__PURE__ */ jsx52("audio", {
5576
5669
  src,
5577
5670
  controls: true
5578
5671
  });
5579
5672
  }
5580
5673
  if (fileType === "video") {
5581
- return /* @__PURE__ */ jsx51("video", {
5674
+ return /* @__PURE__ */ jsx52("video", {
5582
5675
  src,
5583
5676
  controls: true
5584
5677
  });
5585
5678
  }
5586
5679
  if (fileType === "image") {
5587
- return /* @__PURE__ */ jsx51("img", {
5680
+ return /* @__PURE__ */ jsx52("img", {
5588
5681
  src
5589
5682
  });
5590
5683
  }
5591
5684
  if (fileType === "json") {
5592
- return /* @__PURE__ */ jsx51(JSONViewer, {
5685
+ return /* @__PURE__ */ jsx52(JSONViewer, {
5593
5686
  src
5594
5687
  });
5595
5688
  }
5596
5689
  if (fileType === "txt") {
5597
- return /* @__PURE__ */ jsx51(TextViewer, {
5690
+ return /* @__PURE__ */ jsx52(TextViewer, {
5598
5691
  src
5599
5692
  });
5600
5693
  }
5601
- return /* @__PURE__ */ jsxs17(Fragment7, {
5694
+ return /* @__PURE__ */ jsxs18(Fragment7, {
5602
5695
  children: [
5603
- /* @__PURE__ */ jsx51("div", {
5696
+ /* @__PURE__ */ jsx52("div", {
5604
5697
  style: msgStyle,
5605
5698
  children: currentAsset
5606
5699
  }),
5607
- /* @__PURE__ */ jsx51(Spacing, {
5700
+ /* @__PURE__ */ jsx52(Spacing, {
5608
5701
  y: 0.5
5609
5702
  }),
5610
- /* @__PURE__ */ jsxs17("div", {
5703
+ /* @__PURE__ */ jsxs18("div", {
5611
5704
  style: msgStyle,
5612
5705
  children: [
5613
5706
  "Size: ",
@@ -5620,7 +5713,7 @@ var FilePreview = ({ fileType, src, currentAsset, assetMetadata }) => {
5620
5713
  };
5621
5714
 
5622
5715
  // src/components/RenderPreview.tsx
5623
- import { jsx as jsx52, jsxs as jsxs18 } from "react/jsx-runtime";
5716
+ import { jsx as jsx53, jsxs as jsxs19 } from "react/jsx-runtime";
5624
5717
  var msgStyle2 = {
5625
5718
  fontSize: 13,
5626
5719
  color: "white",
@@ -5669,13 +5762,13 @@ var RenderPreview = ({ path, assetMetadata, getBlob }) => {
5669
5762
  }, [getBlob]);
5670
5763
  const src = blobUrl ?? remotion_outputsBase + path;
5671
5764
  if (connectionStatus === "disconnected") {
5672
- return /* @__PURE__ */ jsx52("div", {
5765
+ return /* @__PURE__ */ jsx53("div", {
5673
5766
  style: errMsgStyle,
5674
5767
  children: "Studio server disconnected"
5675
5768
  });
5676
5769
  }
5677
5770
  if (getBlob && blobError) {
5678
- return /* @__PURE__ */ jsxs18("div", {
5771
+ return /* @__PURE__ */ jsxs19("div", {
5679
5772
  style: errMsgStyle,
5680
5773
  children: [
5681
5774
  "Failed to load preview: ",
@@ -5684,12 +5777,12 @@ var RenderPreview = ({ path, assetMetadata, getBlob }) => {
5684
5777
  });
5685
5778
  }
5686
5779
  if (getBlob && !blobUrl) {
5687
- return /* @__PURE__ */ jsx52("div", {
5780
+ return /* @__PURE__ */ jsx53("div", {
5688
5781
  style: msgStyle2,
5689
5782
  children: "Loading preview..."
5690
5783
  });
5691
5784
  }
5692
- return /* @__PURE__ */ jsx52(FilePreview, {
5785
+ return /* @__PURE__ */ jsx53(FilePreview, {
5693
5786
  assetMetadata,
5694
5787
  currentAsset: path,
5695
5788
  fileType,
@@ -5698,23 +5791,23 @@ var RenderPreview = ({ path, assetMetadata, getBlob }) => {
5698
5791
  };
5699
5792
 
5700
5793
  // src/components/Spinner.tsx
5701
- import { useMemo as useMemo32 } from "react";
5702
- import { jsx as jsx53, jsxs as jsxs19, Fragment as Fragment8 } from "react/jsx-runtime";
5794
+ import { useMemo as useMemo33 } from "react";
5795
+ import { jsx as jsx54, jsxs as jsxs20, Fragment as Fragment8 } from "react/jsx-runtime";
5703
5796
  var viewBox = 100;
5704
5797
  var lines = 8;
5705
5798
  var className = "__remotion_spinner_line";
5706
5799
  var remotionSpinnerAnimation = "__remotion_spinner_animation";
5707
5800
  var translated = "M 44 0 L 50 0 a 6 6 0 0 1 6 6 L 56 26 a 6 6 0 0 1 -6 6 L 50 32 a 6 6 0 0 1 -6 -6 L 44 6 a 6 6 0 0 1 6 -6 Z";
5708
5801
  var Spinner = ({ size, duration }) => {
5709
- const style3 = useMemo32(() => {
5802
+ const style3 = useMemo33(() => {
5710
5803
  return {
5711
5804
  width: size,
5712
5805
  height: size
5713
5806
  };
5714
5807
  }, [size]);
5715
- return /* @__PURE__ */ jsxs19(Fragment8, {
5808
+ return /* @__PURE__ */ jsxs20(Fragment8, {
5716
5809
  children: [
5717
- /* @__PURE__ */ jsx53("style", {
5810
+ /* @__PURE__ */ jsx54("style", {
5718
5811
  type: "text/css",
5719
5812
  children: `
5720
5813
  @keyframes ${remotionSpinnerAnimation} {
@@ -5731,11 +5824,11 @@ var Spinner = ({ size, duration }) => {
5731
5824
  }
5732
5825
  `
5733
5826
  }),
5734
- /* @__PURE__ */ jsx53("svg", {
5827
+ /* @__PURE__ */ jsx54("svg", {
5735
5828
  style: style3,
5736
5829
  viewBox: `0 0 ${viewBox} ${viewBox}`,
5737
5830
  children: new Array(lines).fill(true).map((_, index) => {
5738
- return /* @__PURE__ */ jsx53("path", {
5831
+ return /* @__PURE__ */ jsx54("path", {
5739
5832
  className,
5740
5833
  style: {
5741
5834
  rotate: `${index * Math.PI * 2 / lines}rad`,
@@ -5754,7 +5847,7 @@ var Spinner = ({ size, duration }) => {
5754
5847
  // src/components/StaticFilePreview.tsx
5755
5848
  import { useContext as useContext18 } from "react";
5756
5849
  import { staticFile as staticFile3 } from "remotion";
5757
- import { jsx as jsx54, jsxs as jsxs20 } from "react/jsx-runtime";
5850
+ import { jsx as jsx55, jsxs as jsxs21 } from "react/jsx-runtime";
5758
5851
  var msgStyle3 = {
5759
5852
  fontSize: 13,
5760
5853
  color: "white",
@@ -5773,13 +5866,13 @@ var StaticFilePreview = ({ currentAsset, assetMetadata }) => {
5773
5866
  const connectionStatus = useContext18(StudioServerConnectionCtx).previewServerState.type;
5774
5867
  const exists = staticFiles.find((file) => file.name === currentAsset);
5775
5868
  if (connectionStatus === "disconnected") {
5776
- return /* @__PURE__ */ jsx54("div", {
5869
+ return /* @__PURE__ */ jsx55("div", {
5777
5870
  style: errMsgStyle2,
5778
5871
  children: "Studio server disconnected"
5779
5872
  });
5780
5873
  }
5781
5874
  if (!exists) {
5782
- return /* @__PURE__ */ jsxs20("div", {
5875
+ return /* @__PURE__ */ jsxs21("div", {
5783
5876
  style: errMsgStyle2,
5784
5877
  children: [
5785
5878
  currentAsset,
@@ -5790,7 +5883,7 @@ var StaticFilePreview = ({ currentAsset, assetMetadata }) => {
5790
5883
  if (!currentAsset) {
5791
5884
  return null;
5792
5885
  }
5793
- return /* @__PURE__ */ jsx54(FilePreview, {
5886
+ return /* @__PURE__ */ jsx55(FilePreview, {
5794
5887
  currentAsset,
5795
5888
  fileType,
5796
5889
  src: `${staticFileSrc}?date=${assetMetadata && assetMetadata.type === "found" ? assetMetadata.fetchedAt : 0}`,
@@ -5799,7 +5892,7 @@ var StaticFilePreview = ({ currentAsset, assetMetadata }) => {
5799
5892
  };
5800
5893
 
5801
5894
  // src/components/Preview.tsx
5802
- import { jsx as jsx55 } from "react/jsx-runtime";
5895
+ import { jsx as jsx56 } from "react/jsx-runtime";
5803
5896
  var centeredContainer = {
5804
5897
  display: "flex",
5805
5898
  flex: 1,
@@ -5857,24 +5950,24 @@ var containerStyle = (options) => {
5857
5950
  };
5858
5951
  var VideoPreview = ({ canvasSize, contentDimensions, canvasContent, assetMetadata }) => {
5859
5952
  if (assetMetadata && assetMetadata.type === "not-found") {
5860
- return /* @__PURE__ */ jsx55("div", {
5953
+ return /* @__PURE__ */ jsx56("div", {
5861
5954
  style: centeredContainer,
5862
- children: /* @__PURE__ */ jsx55("div", {
5955
+ children: /* @__PURE__ */ jsx56("div", {
5863
5956
  style: label3,
5864
5957
  children: "File does not exist"
5865
5958
  })
5866
5959
  });
5867
5960
  }
5868
5961
  if (contentDimensions === null) {
5869
- return /* @__PURE__ */ jsx55("div", {
5962
+ return /* @__PURE__ */ jsx56("div", {
5870
5963
  style: centeredContainer,
5871
- children: /* @__PURE__ */ jsx55(Spinner, {
5964
+ children: /* @__PURE__ */ jsx56(Spinner, {
5872
5965
  duration: 0.5,
5873
5966
  size: 24
5874
5967
  })
5875
5968
  });
5876
5969
  }
5877
- return /* @__PURE__ */ jsx55(CompWhenItHasDimensions, {
5970
+ return /* @__PURE__ */ jsx56(CompWhenItHasDimensions, {
5878
5971
  contentDimensions,
5879
5972
  canvasSize,
5880
5973
  canvasContent,
@@ -5883,7 +5976,7 @@ var VideoPreview = ({ canvasSize, contentDimensions, canvasContent, assetMetadat
5883
5976
  };
5884
5977
  var CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent, assetMetadata }) => {
5885
5978
  const { size: previewSize } = useContext19(Internals13.PreviewSizeContext);
5886
- const { centerX, centerY, yCorrection, xCorrection, scale } = useMemo33(() => {
5979
+ const { centerX, centerY, yCorrection, xCorrection, scale } = useMemo34(() => {
5887
5980
  if (contentDimensions === "none") {
5888
5981
  return {
5889
5982
  centerX: 0,
@@ -5900,7 +5993,7 @@ var CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent, a
5900
5993
  previewSize: previewSize.size
5901
5994
  });
5902
5995
  }, [canvasSize, contentDimensions, previewSize.size]);
5903
- const outer = useMemo33(() => {
5996
+ const outer = useMemo34(() => {
5904
5997
  return {
5905
5998
  width: contentDimensions === "none" ? "100%" : contentDimensions.width * scale,
5906
5999
  height: contentDimensions === "none" ? "100%" : contentDimensions.height * scale,
@@ -5923,36 +6016,36 @@ var CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent, a
5923
6016
  canvasContent
5924
6017
  ]);
5925
6018
  if (canvasContent.type === "asset") {
5926
- return /* @__PURE__ */ jsx55("div", {
6019
+ return /* @__PURE__ */ jsx56("div", {
5927
6020
  style: outer,
5928
- children: /* @__PURE__ */ jsx55(StaticFilePreview, {
6021
+ children: /* @__PURE__ */ jsx56(StaticFilePreview, {
5929
6022
  assetMetadata,
5930
6023
  currentAsset: canvasContent.asset
5931
6024
  })
5932
6025
  });
5933
6026
  }
5934
6027
  if (canvasContent.type === "output") {
5935
- return /* @__PURE__ */ jsx55("div", {
6028
+ return /* @__PURE__ */ jsx56("div", {
5936
6029
  style: outer,
5937
- children: /* @__PURE__ */ jsx55(RenderPreview, {
6030
+ children: /* @__PURE__ */ jsx56(RenderPreview, {
5938
6031
  path: canvasContent.path,
5939
6032
  assetMetadata
5940
6033
  })
5941
6034
  });
5942
6035
  }
5943
6036
  if (canvasContent.type === "output-blob") {
5944
- return /* @__PURE__ */ jsx55("div", {
6037
+ return /* @__PURE__ */ jsx56("div", {
5945
6038
  style: outer,
5946
- children: /* @__PURE__ */ jsx55(RenderPreview, {
6039
+ children: /* @__PURE__ */ jsx56(RenderPreview, {
5947
6040
  path: canvasContent.displayName,
5948
6041
  assetMetadata,
5949
6042
  getBlob: canvasContent.getBlob
5950
6043
  })
5951
6044
  });
5952
6045
  }
5953
- return /* @__PURE__ */ jsx55("div", {
6046
+ return /* @__PURE__ */ jsx56("div", {
5954
6047
  style: outer,
5955
- children: /* @__PURE__ */ jsx55(PortalContainer, {
6048
+ children: /* @__PURE__ */ jsx56(PortalContainer, {
5956
6049
  contentDimensions,
5957
6050
  scale,
5958
6051
  xCorrection,
@@ -5962,7 +6055,7 @@ var CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent, a
5962
6055
  };
5963
6056
  var PortalContainer = ({ scale, xCorrection, yCorrection, contentDimensions }) => {
5964
6057
  const { checkerboard } = useContext19(CheckerboardContext);
5965
- const style3 = useMemo33(() => {
6058
+ const style3 = useMemo34(() => {
5966
6059
  return containerStyle({
5967
6060
  checkerboard,
5968
6061
  scale,
@@ -5987,14 +6080,14 @@ var PortalContainer = ({ scale, xCorrection, yCorrection, contentDimensions }) =
5987
6080
  };
5988
6081
  }, []);
5989
6082
  const portalContainer = useRef17(null);
5990
- return /* @__PURE__ */ jsx55("div", {
6083
+ return /* @__PURE__ */ jsx56("div", {
5991
6084
  ref: portalContainer,
5992
6085
  style: style3
5993
6086
  });
5994
6087
  };
5995
6088
 
5996
6089
  // src/components/SizeSelector.tsx
5997
- import { jsx as jsx56 } from "react/jsx-runtime";
6090
+ import { jsx as jsx57 } from "react/jsx-runtime";
5998
6091
  var commonPreviewSizes = [
5999
6092
  {
6000
6093
  size: "auto",
@@ -6055,12 +6148,12 @@ var zoomableFileTypes = ["video", "image"];
6055
6148
  var SizeSelector = () => {
6056
6149
  const { size, setSize } = useContext20(Internals14.PreviewSizeContext);
6057
6150
  const { canvasContent } = useContext20(Internals14.CompositionManager);
6058
- const style3 = useMemo34(() => {
6151
+ const style3 = useMemo35(() => {
6059
6152
  return {
6060
6153
  padding: CONTROL_BUTTON_PADDING
6061
6154
  };
6062
6155
  }, []);
6063
- const zoomable = useMemo34(() => {
6156
+ const zoomable = useMemo35(() => {
6064
6157
  if (!canvasContent) {
6065
6158
  return null;
6066
6159
  }
@@ -6075,7 +6168,7 @@ var SizeSelector = () => {
6075
6168
  }
6076
6169
  return false;
6077
6170
  }, [canvasContent]);
6078
- const items = useMemo34(() => {
6171
+ const items = useMemo35(() => {
6079
6172
  return getUniqueSizes(size).map((newSize) => {
6080
6173
  return {
6081
6174
  id: String(newSize.size),
@@ -6088,7 +6181,7 @@ var SizeSelector = () => {
6088
6181
  type: "item",
6089
6182
  value: newSize.size,
6090
6183
  keyHint: newSize.size === "auto" ? "0" : null,
6091
- leftItem: String(size.size) === String(newSize.size) ? /* @__PURE__ */ jsx56(Checkmark, {}) : null,
6184
+ leftItem: String(size.size) === String(newSize.size) ? /* @__PURE__ */ jsx57(Checkmark, {}) : null,
6092
6185
  subMenu: null,
6093
6186
  quickSwitcherLabel: null
6094
6187
  };
@@ -6097,10 +6190,10 @@ var SizeSelector = () => {
6097
6190
  if (!zoomable) {
6098
6191
  return null;
6099
6192
  }
6100
- return /* @__PURE__ */ jsx56("div", {
6193
+ return /* @__PURE__ */ jsx57("div", {
6101
6194
  style: style3,
6102
6195
  "aria-label": accessibilityLabel,
6103
- children: /* @__PURE__ */ jsx56(Combobox, {
6196
+ children: /* @__PURE__ */ jsx57(Combobox, {
6104
6197
  title: accessibilityLabel,
6105
6198
  style: comboStyle,
6106
6199
  selectedId: String(size.size),
@@ -6121,13 +6214,13 @@ import { Internals as Internals16 } from "remotion";
6121
6214
  import { NoReactInternals as NoReactInternals4 } from "remotion/no-react";
6122
6215
 
6123
6216
  // src/icons/timelineInOutPointer.tsx
6124
- import { jsx as jsx57 } from "react/jsx-runtime";
6217
+ import { jsx as jsx58 } from "react/jsx-runtime";
6125
6218
  var TimelineInPointer = (props) => {
6126
- return /* @__PURE__ */ jsx57("svg", {
6219
+ return /* @__PURE__ */ jsx58("svg", {
6127
6220
  viewBox: "0 0 256 256",
6128
6221
  fill: "none",
6129
6222
  ...props,
6130
- children: /* @__PURE__ */ jsx57("path", {
6223
+ children: /* @__PURE__ */ jsx58("path", {
6131
6224
  d: "M158 25H99V230.5H158",
6132
6225
  stroke: props.color,
6133
6226
  strokeWidth: "42",
@@ -6137,11 +6230,11 @@ var TimelineInPointer = (props) => {
6137
6230
  });
6138
6231
  };
6139
6232
  var TimelineOutPointer = (props) => {
6140
- return /* @__PURE__ */ jsx57("svg", {
6233
+ return /* @__PURE__ */ jsx58("svg", {
6141
6234
  viewBox: "0 0 256 256",
6142
6235
  fill: "none",
6143
6236
  ...props,
6144
- children: /* @__PURE__ */ jsx57("path", {
6237
+ children: /* @__PURE__ */ jsx58("path", {
6145
6238
  d: "M98 25H157V230.5H98",
6146
6239
  stroke: props.color,
6147
6240
  strokeWidth: "42",
@@ -6152,7 +6245,7 @@ var TimelineOutPointer = (props) => {
6152
6245
  };
6153
6246
 
6154
6247
  // src/state/in-out.ts
6155
- import { createContext as createContext12, useContext as useContext21, useMemo as useMemo35 } from "react";
6248
+ import { createContext as createContext12, useContext as useContext21, useMemo as useMemo36 } from "react";
6156
6249
  import { Internals as Internals15 } from "remotion";
6157
6250
  var TimelineInOutContext = createContext12({});
6158
6251
  var SetTimelineInOutContext = createContext12({
@@ -6165,7 +6258,7 @@ var useTimelineInOutFramePosition = () => {
6165
6258
  const state = useContext21(TimelineInOutContext);
6166
6259
  const id = videoConfig?.id;
6167
6260
  const durationInFrames = videoConfig?.durationInFrames;
6168
- return useMemo35(() => {
6261
+ return useMemo36(() => {
6169
6262
  if (!id || !durationInFrames) {
6170
6263
  return { inFrame: null, outFrame: null };
6171
6264
  }
@@ -6184,7 +6277,7 @@ var useTimelineSetInOutFramePosition = () => {
6184
6277
  };
6185
6278
 
6186
6279
  // src/components/TimelineInOutToggle.tsx
6187
- import { jsx as jsx58, jsxs as jsxs21, Fragment as Fragment9 } from "react/jsx-runtime";
6280
+ import { jsx as jsx59, jsxs as jsxs22, Fragment as Fragment9 } from "react/jsx-runtime";
6188
6281
  var getTooltipText = (pointType, key) => [
6189
6282
  `Mark ${pointType}`,
6190
6283
  areKeyboardShortcutsDisabled() ? null : `(${key})`,
@@ -6399,26 +6492,26 @@ var TimelineInOutPointToggle = () => {
6399
6492
  outMarkClick: onOutMark
6400
6493
  };
6401
6494
  }, [confId, onInMark, onInOutClear, onOutMark]);
6402
- return /* @__PURE__ */ jsxs21(Fragment9, {
6495
+ return /* @__PURE__ */ jsxs22(Fragment9, {
6403
6496
  children: [
6404
- /* @__PURE__ */ jsx58(ControlButton, {
6497
+ /* @__PURE__ */ jsx59(ControlButton, {
6405
6498
  title: getTooltipText("In", "I"),
6406
6499
  "aria-label": getTooltipText("In", "I"),
6407
6500
  onClick: onInMark,
6408
6501
  onContextMenu: clearInMark,
6409
6502
  disabled: !videoConfig || isFirstFrame,
6410
- children: /* @__PURE__ */ jsx58(TimelineInPointer, {
6503
+ children: /* @__PURE__ */ jsx59(TimelineInPointer, {
6411
6504
  color: inFrame === null ? "white" : BLUE,
6412
6505
  style: style3
6413
6506
  })
6414
6507
  }),
6415
- /* @__PURE__ */ jsx58(ControlButton, {
6508
+ /* @__PURE__ */ jsx59(ControlButton, {
6416
6509
  title: getTooltipText("Out", "O"),
6417
6510
  "aria-label": getTooltipText("Out", "O"),
6418
6511
  onClick: onOutMark,
6419
6512
  onContextMenu: clearOutMark,
6420
6513
  disabled: !videoConfig || isLastFrame,
6421
- children: /* @__PURE__ */ jsx58(TimelineOutPointer, {
6514
+ children: /* @__PURE__ */ jsx59(TimelineOutPointer, {
6422
6515
  color: outFrame === null ? "white" : BLUE,
6423
6516
  style: style3
6424
6517
  })
@@ -6427,43 +6520,6 @@ var TimelineInOutPointToggle = () => {
6427
6520
  });
6428
6521
  };
6429
6522
 
6430
- // src/error-overlay/remotion-overlay/ShortcutHint.tsx
6431
- import { useMemo as useMemo36 } from "react";
6432
- import { jsx as jsx59, jsxs as jsxs22 } from "react/jsx-runtime";
6433
- var cmdOrCtrlCharacter = window.navigator.platform.startsWith("Mac") ? "⌘" : "Ctrl";
6434
- var container14 = {
6435
- display: "inline-block",
6436
- marginLeft: 6,
6437
- opacity: 0.6,
6438
- verticalAlign: "middle",
6439
- fontSize: 14
6440
- };
6441
- var ShortcutHint = ({ keyToPress, cmdOrCtrl }) => {
6442
- const style4 = useMemo36(() => {
6443
- if (keyToPress === "↵") {
6444
- return {
6445
- display: "inline-block",
6446
- transform: `translateY(2px)`,
6447
- fontSize: 14
6448
- };
6449
- }
6450
- return {};
6451
- }, [keyToPress]);
6452
- if (areKeyboardShortcutsDisabled()) {
6453
- return null;
6454
- }
6455
- return /* @__PURE__ */ jsxs22("span", {
6456
- style: container14,
6457
- children: [
6458
- cmdOrCtrl ? `${cmdOrCtrlCharacter}` : "",
6459
- /* @__PURE__ */ jsx59("span", {
6460
- style: style4,
6461
- children: keyToPress.toUpperCase()
6462
- })
6463
- ]
6464
- });
6465
- };
6466
-
6467
6523
  // src/state/editor-guides.ts
6468
6524
  import { createContext as createContext13 } from "react";
6469
6525
  var persistEditorShowGuidesOption = (option) => {
@@ -16618,7 +16674,10 @@ var ClientRenderQueueProcessor = () => {
16618
16674
  onProgress: (progress) => {
16619
16675
  onProgress(job.id, {
16620
16676
  encodedFrames: progress.encodedFrames,
16621
- totalFrames
16677
+ totalFrames,
16678
+ doneIn: progress.doneIn,
16679
+ renderEstimatedTime: progress.renderEstimatedTime,
16680
+ progress: progress.progress
16622
16681
  });
16623
16682
  },
16624
16683
  outputTarget: "web-fs",
@@ -16909,8 +16968,7 @@ var RenderQueueItemStatus = ({ job }) => {
16909
16968
  if (job.status === "running") {
16910
16969
  let progressValue;
16911
16970
  if (isClientJob) {
16912
- const { encodedFrames, totalFrames } = job.progress;
16913
- progressValue = totalFrames > 0 ? encodedFrames / totalFrames : 0;
16971
+ progressValue = job.progress.progress;
16914
16972
  } else {
16915
16973
  progressValue = job.progress.value;
16916
16974
  }
@@ -17002,6 +17060,34 @@ var RenderQueueOutputName = ({ job }) => {
17002
17060
 
17003
17061
  // src/components/RenderQueue/RenderQueueProgressMessage.tsx
17004
17062
  import { useCallback as useCallback77, useContext as useContext43 } from "react";
17063
+
17064
+ // src/components/RenderQueue/client-render-progress.ts
17065
+ var formatEtaString = (timeRemainingInMilliseconds) => {
17066
+ const remainingTime = timeRemainingInMilliseconds / 1000;
17067
+ const remainingTimeHours = Math.floor(remainingTime / 3600);
17068
+ const remainingTimeMinutes = Math.floor(remainingTime % 3600 / 60);
17069
+ const remainingTimeSeconds = Math.floor(remainingTime % 60);
17070
+ return [
17071
+ remainingTimeHours ? `${remainingTimeHours}h` : null,
17072
+ remainingTimeMinutes ? `${remainingTimeMinutes}m` : null,
17073
+ `${remainingTimeSeconds}s`
17074
+ ].filter((value) => Boolean(value)).join(" ");
17075
+ };
17076
+ var getClientRenderProgressMessage = (progress) => {
17077
+ if (progress.totalFrames === 0) {
17078
+ return "Getting composition";
17079
+ }
17080
+ if (progress.doneIn !== null) {
17081
+ return `Encoded ${progress.totalFrames}/${progress.totalFrames}`;
17082
+ }
17083
+ if (progress.renderEstimatedTime > 0) {
17084
+ const etaString = `, time remaining: ${formatEtaString(progress.renderEstimatedTime)}`;
17085
+ return `Rendering ${progress.encodedFrames}/${progress.totalFrames}${etaString}`;
17086
+ }
17087
+ return `Encoded ${progress.encodedFrames}/${progress.totalFrames}`;
17088
+ };
17089
+
17090
+ // src/components/RenderQueue/RenderQueueProgressMessage.tsx
17005
17091
  import { jsx as jsx153 } from "react/jsx-runtime";
17006
17092
  var outputLocation2 = {
17007
17093
  ...renderQueueItemSubtitleStyle
@@ -17019,7 +17105,7 @@ var RenderQueueProgressMessage = ({ job }) => {
17019
17105
  jobId: job.id
17020
17106
  });
17021
17107
  }, [job.id, setSelectedModal]);
17022
- const message = isClientJob ? job.progress.totalFrames === 0 ? "Getting composition" : `Encoding frame ${job.progress.encodedFrames}/${job.progress.totalFrames}` : job.progress.message;
17108
+ const message = isClientJob ? getClientRenderProgressMessage(job.progress) : job.progress.message;
17023
17109
  return /* @__PURE__ */ jsx153("button", {
17024
17110
  onClick,
17025
17111
  type: "button",
@@ -26871,9 +26957,15 @@ var right3 = {
26871
26957
  textAlign: "right",
26872
26958
  flex: 1
26873
26959
  };
26874
- var EncodingProgress = ({ encodedFrames, totalFrames }) => {
26875
- const done = encodedFrames === totalFrames;
26876
- const progress = totalFrames > 0 ? encodedFrames / totalFrames : 0;
26960
+ var ProgressStatus = ({ encodedFrames, totalFrames, doneIn, renderEstimatedTime, progress }) => {
26961
+ const done = doneIn !== null;
26962
+ const message = getClientRenderProgressMessage({
26963
+ encodedFrames,
26964
+ totalFrames,
26965
+ doneIn,
26966
+ renderEstimatedTime,
26967
+ progress
26968
+ });
26877
26969
  return /* @__PURE__ */ jsxs120("div", {
26878
26970
  style: progressItem,
26879
26971
  children: [
@@ -26885,8 +26977,15 @@ var EncodingProgress = ({ encodedFrames, totalFrames }) => {
26885
26977
  }),
26886
26978
  /* @__PURE__ */ jsx237("div", {
26887
26979
  style: label10,
26888
- children: done ? `Encoded ${totalFrames} frames` : `Encoding ${encodedFrames} / ${totalFrames} frames`
26889
- })
26980
+ children: message
26981
+ }),
26982
+ doneIn !== null ? /* @__PURE__ */ jsxs120("div", {
26983
+ style: right3,
26984
+ children: [
26985
+ doneIn,
26986
+ "ms"
26987
+ ]
26988
+ }) : null
26890
26989
  ]
26891
26990
  });
26892
26991
  };
@@ -26944,15 +27043,18 @@ var ClientRenderProgress = ({ job }) => {
26944
27043
  ]
26945
27044
  });
26946
27045
  }
26947
- const { encodedFrames, totalFrames } = job.progress;
27046
+ const { encodedFrames, totalFrames, doneIn, renderEstimatedTime, progress } = job.progress;
26948
27047
  return /* @__PURE__ */ jsxs120("div", {
26949
27048
  children: [
26950
27049
  /* @__PURE__ */ jsx237(Spacing, {
26951
27050
  y: 0.5
26952
27051
  }),
26953
- job.type === "client-video" && /* @__PURE__ */ jsx237(EncodingProgress, {
27052
+ job.type === "client-video" && /* @__PURE__ */ jsx237(ProgressStatus, {
26954
27053
  encodedFrames,
26955
- totalFrames
27054
+ totalFrames,
27055
+ doneIn,
27056
+ renderEstimatedTime,
27057
+ progress
26956
27058
  }),
26957
27059
  /* @__PURE__ */ jsx237(Spacing, {
26958
27060
  y: 1
@@ -27373,7 +27475,7 @@ var addTrueBooleanFlagsIfChanged = (flags, mappings) => {
27373
27475
  }
27374
27476
  };
27375
27477
  var getNpmRemotionCommandPrefix = (version) => {
27376
- return version.trim() === "" ? "npx --yes --location=global -p @remotion/cli remotion" : `npx --yes --location=global -p @remotion/cli@${version} remotion`;
27478
+ return version.trim() === "" ? "bunx --yes --location=global -p @remotion/cli remotion" : `bunx --yes --location=global -p @remotion/cli@${version} remotion`;
27377
27479
  };
27378
27480
  var normalizeServeUrlForRenderCommand = ({
27379
27481
  locationHref,