@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.
@@ -1105,9 +1105,46 @@ var SidebarContextProvider = ({ children }) => {
1105
1105
  };
1106
1106
 
1107
1107
  // src/components/CompositionSelector.tsx
1108
- import { useCallback as useCallback16, useContext as useContext9, useMemo as useMemo21 } from "react";
1108
+ import { useCallback as useCallback16, useContext as useContext9, useMemo as useMemo22 } from "react";
1109
1109
  import { Internals as Internals7 } from "remotion";
1110
1110
 
1111
+ // src/error-overlay/remotion-overlay/ShortcutHint.tsx
1112
+ import { useMemo as useMemo9 } from "react";
1113
+ import { jsx as jsx10, jsxs as jsxs3 } from "react/jsx-runtime";
1114
+ var cmdOrCtrlCharacter = window.navigator.platform.startsWith("Mac") ? "⌘" : "Ctrl";
1115
+ var container3 = {
1116
+ display: "inline-block",
1117
+ marginLeft: 6,
1118
+ opacity: 0.6,
1119
+ verticalAlign: "middle",
1120
+ fontSize: 14
1121
+ };
1122
+ var ShortcutHint = ({ keyToPress, cmdOrCtrl }) => {
1123
+ const style = useMemo9(() => {
1124
+ if (keyToPress === "↵") {
1125
+ return {
1126
+ display: "inline-block",
1127
+ transform: `translateY(2px)`,
1128
+ fontSize: 14
1129
+ };
1130
+ }
1131
+ return {};
1132
+ }, [keyToPress]);
1133
+ if (areKeyboardShortcutsDisabled()) {
1134
+ return null;
1135
+ }
1136
+ return /* @__PURE__ */ jsxs3("span", {
1137
+ style: container3,
1138
+ children: [
1139
+ cmdOrCtrl ? `${cmdOrCtrlCharacter}` : "",
1140
+ /* @__PURE__ */ jsx10("span", {
1141
+ style,
1142
+ children: keyToPress.toUpperCase()
1143
+ })
1144
+ ]
1145
+ });
1146
+ };
1147
+
1111
1148
  // src/helpers/create-folder-tree.ts
1112
1149
  var buildAssetFolderStructure = (files, parentFolderName, foldersExpanded) => {
1113
1150
  const notInFolder = files.filter((f) => !f.name.includes("/"));
@@ -1289,36 +1326,45 @@ var sortItemsByNonceHistory = (items) => {
1289
1326
  return result;
1290
1327
  };
1291
1328
 
1329
+ // src/state/modals.ts
1330
+ import { createContext as createContext9 } from "react";
1331
+ var ModalsContext = createContext9({
1332
+ selectedModal: null,
1333
+ setSelectedModal: () => {
1334
+ return;
1335
+ }
1336
+ });
1337
+
1292
1338
  // src/components/CompositionSelectorItem.tsx
1293
- import { useCallback as useCallback15, useContext as useContext8, useMemo as useMemo20, useState as useState14 } from "react";
1339
+ import { useCallback as useCallback15, useContext as useContext8, useMemo as useMemo21, useState as useState14 } from "react";
1294
1340
 
1295
1341
  // src/icons/folder.tsx
1296
- import { jsx as jsx10 } from "react/jsx-runtime";
1342
+ import { jsx as jsx11 } from "react/jsx-runtime";
1297
1343
  var CollapsedFolderIcon = ({ color, ...props }) => {
1298
- return /* @__PURE__ */ jsx10("svg", {
1344
+ return /* @__PURE__ */ jsx11("svg", {
1299
1345
  viewBox: "0 0 512 512",
1300
1346
  ...props,
1301
- children: /* @__PURE__ */ jsx10("path", {
1347
+ children: /* @__PURE__ */ jsx11("path", {
1302
1348
  fill: color,
1303
1349
  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"
1304
1350
  })
1305
1351
  });
1306
1352
  };
1307
1353
  var ExpandedFolderIcon = ({ color, ...props }) => {
1308
- return /* @__PURE__ */ jsx10("svg", {
1354
+ return /* @__PURE__ */ jsx11("svg", {
1309
1355
  viewBox: "0 0 576 512",
1310
1356
  ...props,
1311
- children: /* @__PURE__ */ jsx10("path", {
1357
+ children: /* @__PURE__ */ jsx11("path", {
1312
1358
  fill: color,
1313
1359
  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"
1314
1360
  })
1315
1361
  });
1316
1362
  };
1317
1363
  var ExpandedFolderIconSolid = ({ color, ...props }) => {
1318
- return /* @__PURE__ */ jsx10("svg", {
1364
+ return /* @__PURE__ */ jsx11("svg", {
1319
1365
  viewBox: "0 0 576 512",
1320
1366
  ...props,
1321
- children: /* @__PURE__ */ jsx10("path", {
1367
+ children: /* @__PURE__ */ jsx11("path", {
1322
1368
  fill: color,
1323
1369
  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"
1324
1370
  })
@@ -1326,12 +1372,12 @@ var ExpandedFolderIconSolid = ({ color, ...props }) => {
1326
1372
  };
1327
1373
 
1328
1374
  // src/icons/still.tsx
1329
- import { jsx as jsx11 } from "react/jsx-runtime";
1375
+ import { jsx as jsx12 } from "react/jsx-runtime";
1330
1376
  var StillIcon = ({ color, ...props }) => {
1331
- return /* @__PURE__ */ jsx11("svg", {
1377
+ return /* @__PURE__ */ jsx12("svg", {
1332
1378
  ...props,
1333
1379
  viewBox: "0 0 512 512",
1334
- children: /* @__PURE__ */ jsx11("path", {
1380
+ children: /* @__PURE__ */ jsx12("path", {
1335
1381
  fill: color,
1336
1382
  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"
1337
1383
  })
@@ -1339,33 +1385,24 @@ var StillIcon = ({ color, ...props }) => {
1339
1385
  };
1340
1386
 
1341
1387
  // src/icons/video.tsx
1342
- import { jsx as jsx12 } from "react/jsx-runtime";
1388
+ import { jsx as jsx13 } from "react/jsx-runtime";
1343
1389
  var FilmIcon = ({ color, ...props }) => {
1344
- return /* @__PURE__ */ jsx12("svg", {
1390
+ return /* @__PURE__ */ jsx13("svg", {
1345
1391
  ...props,
1346
1392
  xmlns: "http://www.w3.org/2000/svg",
1347
1393
  viewBox: "0 0 512 512",
1348
- children: /* @__PURE__ */ jsx12("path", {
1394
+ children: /* @__PURE__ */ jsx13("path", {
1349
1395
  fill: color,
1350
1396
  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"
1351
1397
  })
1352
1398
  });
1353
1399
  };
1354
1400
 
1355
- // src/state/modals.ts
1356
- import { createContext as createContext9 } from "react";
1357
- var ModalsContext = createContext9({
1358
- selectedModal: null,
1359
- setSelectedModal: () => {
1360
- return;
1361
- }
1362
- });
1363
-
1364
1401
  // src/components/CompositionContextButton.tsx
1365
- import { useCallback as useCallback12, useContext as useContext6, useMemo as useMemo17 } from "react";
1402
+ import { useCallback as useCallback12, useContext as useContext6, useMemo as useMemo18 } from "react";
1366
1403
 
1367
1404
  // src/helpers/client-id.tsx
1368
- import React12, { useCallback as useCallback6, useEffect as useEffect8, useMemo as useMemo10, useRef as useRef6 } from "react";
1405
+ import React13, { useCallback as useCallback6, useEffect as useEffect8, useMemo as useMemo11, useRef as useRef6 } from "react";
1369
1406
  import { Internals as Internals4 } from "remotion";
1370
1407
 
1371
1408
  // src/components/Notifications/NotificationCenter.tsx
@@ -1378,7 +1415,7 @@ import {
1378
1415
 
1379
1416
  // src/components/Notifications/Notification.tsx
1380
1417
  import { useEffect as useEffect6 } from "react";
1381
- import { jsx as jsx13 } from "react/jsx-runtime";
1418
+ import { jsx as jsx14 } from "react/jsx-runtime";
1382
1419
  var notification = {
1383
1420
  backgroundColor: "#111111",
1384
1421
  color: "white",
@@ -1405,7 +1442,7 @@ var Notification = ({ children, id, duration, created, onRemove }) => {
1405
1442
  clearTimeout(timeout);
1406
1443
  };
1407
1444
  }, [created, duration, id, onRemove]);
1408
- return /* @__PURE__ */ jsx13("div", {
1445
+ return /* @__PURE__ */ jsx14("div", {
1409
1446
  className: "css-reset",
1410
1447
  style: notification,
1411
1448
  children
@@ -1413,8 +1450,8 @@ var Notification = ({ children, id, duration, created, onRemove }) => {
1413
1450
  };
1414
1451
 
1415
1452
  // src/components/Notifications/NotificationCenter.tsx
1416
- import { jsx as jsx14 } from "react/jsx-runtime";
1417
- var container3 = {
1453
+ import { jsx as jsx15 } from "react/jsx-runtime";
1454
+ var container4 = {
1418
1455
  position: "absolute",
1419
1456
  justifyContent: "center",
1420
1457
  alignItems: "center",
@@ -1468,10 +1505,10 @@ var NotificationCenter = () => {
1468
1505
  addNotification
1469
1506
  };
1470
1507
  }, [addNotification]);
1471
- return /* @__PURE__ */ jsx14("div", {
1472
- style: container3,
1508
+ return /* @__PURE__ */ jsx15("div", {
1509
+ style: container4,
1473
1510
  children: notifications.map((n) => {
1474
- return /* @__PURE__ */ jsx14(Notification, {
1511
+ return /* @__PURE__ */ jsx15(Notification, {
1475
1512
  created: n.created,
1476
1513
  duration: n.duration,
1477
1514
  id: n.id,
@@ -1500,12 +1537,12 @@ var playBeepSound = async (renderId) => {
1500
1537
  var PlayBeepSound_default = playBeepSound;
1501
1538
 
1502
1539
  // src/components/RenderQueue/context.tsx
1503
- import React11, {
1540
+ import React12, {
1504
1541
  createRef as createRef4,
1505
1542
  useCallback as useCallback5,
1506
1543
  useEffect as useEffect7,
1507
1544
  useImperativeHandle as useImperativeHandle3,
1508
- useMemo as useMemo9,
1545
+ useMemo as useMemo10,
1509
1546
  useRef as useRef5,
1510
1547
  useState as useState8
1511
1548
  } from "react";
@@ -1544,7 +1581,7 @@ var cancelAbortController = (jobId) => {
1544
1581
  };
1545
1582
 
1546
1583
  // src/components/RenderQueue/context.tsx
1547
- import { jsx as jsx15 } from "react/jsx-runtime";
1584
+ import { jsx as jsx16 } from "react/jsx-runtime";
1548
1585
  var restorePersistedClientRenders = () => {
1549
1586
  const persisted = window.remotion_initialClientRenders ?? [];
1550
1587
  return persisted.map((r) => ({ ...r, status: "done" }));
@@ -1556,7 +1593,7 @@ var noopString = () => "";
1556
1593
  var noop2 = () => {
1557
1594
  return;
1558
1595
  };
1559
- var RenderQueueContext = React11.createContext({
1596
+ var RenderQueueContext = React12.createContext({
1560
1597
  jobs: [],
1561
1598
  serverJobs: [],
1562
1599
  clientJobs: [],
@@ -1593,7 +1630,13 @@ var RenderQueueContextProvider = ({ children }) => {
1593
1630
  setClientJobs((prev) => prev.map((job) => job.id === nextJob.id ? {
1594
1631
  ...job,
1595
1632
  status: "running",
1596
- progress: { encodedFrames: 0, totalFrames: 0 }
1633
+ progress: {
1634
+ encodedFrames: 0,
1635
+ totalFrames: 0,
1636
+ doneIn: null,
1637
+ renderEstimatedTime: 0,
1638
+ progress: 0
1639
+ }
1597
1640
  } : job));
1598
1641
  processJobCallbackRef.current(nextJob);
1599
1642
  }, [clientJobs, currentlyProcessing]);
@@ -1692,7 +1735,7 @@ var RenderQueueContextProvider = ({ children }) => {
1692
1735
  });
1693
1736
  }
1694
1737
  }), []);
1695
- const value = useMemo9(() => {
1738
+ const value = useMemo10(() => {
1696
1739
  return {
1697
1740
  jobs: [...serverJobs, ...clientJobs].sort((a, b) => a.startedAt - b.startedAt),
1698
1741
  serverJobs,
@@ -1724,15 +1767,15 @@ var RenderQueueContextProvider = ({ children }) => {
1724
1767
  cancelClientJob,
1725
1768
  setProcessJobCallback
1726
1769
  ]);
1727
- return /* @__PURE__ */ jsx15(RenderQueueContext.Provider, {
1770
+ return /* @__PURE__ */ jsx16(RenderQueueContext.Provider, {
1728
1771
  value,
1729
1772
  children
1730
1773
  });
1731
1774
  };
1732
1775
 
1733
1776
  // src/helpers/client-id.tsx
1734
- import { jsx as jsx16 } from "react/jsx-runtime";
1735
- var StudioServerConnectionCtx = React12.createContext({
1777
+ import { jsx as jsx17 } from "react/jsx-runtime";
1778
+ var StudioServerConnectionCtx = React13.createContext({
1736
1779
  previewServerState: {
1737
1780
  type: "init"
1738
1781
  },
@@ -1816,28 +1859,28 @@ var PreviewServerConnection = ({ children, readOnlyStudio }) => {
1816
1859
  close();
1817
1860
  };
1818
1861
  }, [openEventSource, readOnlyStudio]);
1819
- const [state, setState] = React12.useState({
1862
+ const [state, setState] = React13.useState({
1820
1863
  type: "init"
1821
1864
  });
1822
- const context = useMemo10(() => {
1865
+ const context = useMemo11(() => {
1823
1866
  return {
1824
1867
  previewServerState: state,
1825
1868
  subscribeToEvent
1826
1869
  };
1827
1870
  }, [state, subscribeToEvent]);
1828
- return /* @__PURE__ */ jsx16(StudioServerConnectionCtx.Provider, {
1871
+ return /* @__PURE__ */ jsx17(StudioServerConnectionCtx.Provider, {
1829
1872
  value: context,
1830
1873
  children
1831
1874
  });
1832
1875
  };
1833
1876
 
1834
1877
  // src/icons/ellipsis.tsx
1835
- import { jsx as jsx17 } from "react/jsx-runtime";
1878
+ import { jsx as jsx18 } from "react/jsx-runtime";
1836
1879
  var EllipsisIcon = (props) => {
1837
- return /* @__PURE__ */ jsx17("svg", {
1880
+ return /* @__PURE__ */ jsx18("svg", {
1838
1881
  ...props.svgProps,
1839
1882
  viewBox: "0 0 448 512",
1840
- children: /* @__PURE__ */ jsx17("path", {
1883
+ children: /* @__PURE__ */ jsx18("path", {
1841
1884
  fill: props.fill,
1842
1885
  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"
1843
1886
  })
@@ -1846,12 +1889,12 @@ var EllipsisIcon = (props) => {
1846
1889
 
1847
1890
  // src/components/InlineDropdown.tsx
1848
1891
  import { PlayerInternals as PlayerInternals3 } from "@remotion/player";
1849
- import { useCallback as useCallback11, useMemo as useMemo16, useRef as useRef9, useState as useState12 } from "react";
1892
+ import { useCallback as useCallback11, useMemo as useMemo17, useRef as useRef9, useState as useState12 } from "react";
1850
1893
  import ReactDOM2 from "react-dom";
1851
1894
 
1852
1895
  // src/components/InlineAction.tsx
1853
- import { useCallback as useCallback7, useMemo as useMemo11, useState as useState9 } from "react";
1854
- import { jsx as jsx18 } from "react/jsx-runtime";
1896
+ import { useCallback as useCallback7, useMemo as useMemo12, useState as useState9 } from "react";
1897
+ import { jsx as jsx19 } from "react/jsx-runtime";
1855
1898
  var InlineAction = ({
1856
1899
  renderAction,
1857
1900
  onClick,
@@ -1866,7 +1909,7 @@ var InlineAction = ({
1866
1909
  const onPointerLeave = useCallback7(() => {
1867
1910
  setHovered(false);
1868
1911
  }, []);
1869
- const style = useMemo11(() => {
1912
+ const style = useMemo12(() => {
1870
1913
  return {
1871
1914
  border: "none",
1872
1915
  background: disabled ? "transparent" : getBackgroundFromHoverState({ hovered, selected: false }),
@@ -1879,7 +1922,7 @@ var InlineAction = ({
1879
1922
  pointerEvents: disabled ? "none" : "auto"
1880
1923
  };
1881
1924
  }, [disabled, hovered]);
1882
- return /* @__PURE__ */ jsx18("button", {
1925
+ return /* @__PURE__ */ jsx19("button", {
1883
1926
  type: "button",
1884
1927
  onPointerEnter,
1885
1928
  onPointerLeave,
@@ -1943,7 +1986,7 @@ var inlineCodeSnippet = {
1943
1986
  };
1944
1987
 
1945
1988
  // src/components/NewComposition/MenuContent.tsx
1946
- import { useCallback as useCallback10, useEffect as useEffect10, useMemo as useMemo15, useRef as useRef8, useState as useState11 } from "react";
1989
+ import { useCallback as useCallback10, useEffect as useEffect10, useMemo as useMemo16, useRef as useRef8, useState as useState11 } from "react";
1947
1990
 
1948
1991
  // src/components/Menu/is-menu-item.tsx
1949
1992
  var MENU_INITIATOR_CLASSNAME = "__remotion-studio-menu-initiator";
@@ -1955,7 +1998,7 @@ var isMenuItem = (el) => {
1955
1998
  };
1956
1999
 
1957
2000
  // src/components/Menu/MenuDivider.tsx
1958
- import { jsx as jsx19 } from "react/jsx-runtime";
2001
+ import { jsx as jsx20 } from "react/jsx-runtime";
1959
2002
  var menuDivider = {
1960
2003
  marginTop: 4,
1961
2004
  marginBottom: 4,
@@ -1963,19 +2006,19 @@ var menuDivider = {
1963
2006
  backgroundColor: INPUT_BORDER_COLOR_HOVERED
1964
2007
  };
1965
2008
  var MenuDivider = () => {
1966
- return /* @__PURE__ */ jsx19("div", {
2009
+ return /* @__PURE__ */ jsx20("div", {
1967
2010
  style: menuDivider
1968
2011
  });
1969
2012
  };
1970
2013
 
1971
2014
  // src/components/Menu/MenuSubItem.tsx
1972
2015
  import { PlayerInternals as PlayerInternals2 } from "@remotion/player";
1973
- import { useCallback as useCallback9, useEffect as useEffect9, useMemo as useMemo14, useRef as useRef7, useState as useState10 } from "react";
2016
+ import { useCallback as useCallback9, useEffect as useEffect9, useMemo as useMemo15, useRef as useRef7, useState as useState10 } from "react";
1974
2017
  import ReactDOM from "react-dom";
1975
2018
 
1976
2019
  // src/icons/caret.tsx
1977
- import { useMemo as useMemo12 } from "react";
1978
- import { jsx as jsx20 } from "react/jsx-runtime";
2020
+ import { useMemo as useMemo13 } from "react";
2021
+ import { jsx as jsx21 } from "react/jsx-runtime";
1979
2022
  var caret = {
1980
2023
  height: 12
1981
2024
  };
@@ -1985,36 +2028,36 @@ var caretDown = {
1985
2028
  var angleDown = {
1986
2029
  width: 10
1987
2030
  };
1988
- var CaretRight = () => /* @__PURE__ */ jsx20("svg", {
2031
+ var CaretRight = () => /* @__PURE__ */ jsx21("svg", {
1989
2032
  viewBox: "0 0 192 512",
1990
2033
  style: caret,
1991
- children: /* @__PURE__ */ jsx20("path", {
2034
+ children: /* @__PURE__ */ jsx21("path", {
1992
2035
  fill: "currentColor",
1993
2036
  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"
1994
2037
  })
1995
2038
  });
1996
2039
  var CaretDown = () => {
1997
- return /* @__PURE__ */ jsx20("svg", {
2040
+ return /* @__PURE__ */ jsx21("svg", {
1998
2041
  viewBox: "0 0 320 512",
1999
2042
  style: caretDown,
2000
- children: /* @__PURE__ */ jsx20("path", {
2043
+ children: /* @__PURE__ */ jsx21("path", {
2001
2044
  fill: "currentColor",
2002
2045
  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"
2003
2046
  })
2004
2047
  });
2005
2048
  };
2006
2049
  var AngleDown = ({ down }) => {
2007
- const style = useMemo12(() => {
2050
+ const style = useMemo13(() => {
2008
2051
  return {
2009
2052
  ...angleDown,
2010
2053
  transform: down ? "rotate(180deg)" : "rotate(0deg)",
2011
2054
  marginTop: 1
2012
2055
  };
2013
2056
  }, [down]);
2014
- return /* @__PURE__ */ jsx20("svg", {
2057
+ return /* @__PURE__ */ jsx21("svg", {
2015
2058
  style,
2016
2059
  viewBox: "0 0 448 512",
2017
- children: /* @__PURE__ */ jsx20("path", {
2060
+ children: /* @__PURE__ */ jsx21("path", {
2018
2061
  fill: LIGHT_TEXT,
2019
2062
  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"
2020
2063
  })
@@ -2022,11 +2065,11 @@ var AngleDown = ({ down }) => {
2022
2065
  };
2023
2066
 
2024
2067
  // src/components/layout.tsx
2025
- import { useMemo as useMemo13 } from "react";
2026
- import { jsx as jsx21 } from "react/jsx-runtime";
2068
+ import { useMemo as useMemo14 } from "react";
2069
+ import { jsx as jsx22 } from "react/jsx-runtime";
2027
2070
  var SPACING_UNIT = 8;
2028
2071
  var Spacing = ({ x = 0, y = 0, block = false }) => {
2029
- const style = useMemo13(() => {
2072
+ const style = useMemo14(() => {
2030
2073
  return {
2031
2074
  display: block ? "block" : "inline-block",
2032
2075
  width: x * SPACING_UNIT,
@@ -2034,17 +2077,17 @@ var Spacing = ({ x = 0, y = 0, block = false }) => {
2034
2077
  flexShrink: 0
2035
2078
  };
2036
2079
  }, [block, x, y]);
2037
- return /* @__PURE__ */ jsx21("div", {
2080
+ return /* @__PURE__ */ jsx22("div", {
2038
2081
  style
2039
2082
  });
2040
2083
  };
2041
2084
  var flexCss = { flex: 1 };
2042
- var Flex = ({ children }) => /* @__PURE__ */ jsx21("div", {
2085
+ var Flex = ({ children }) => /* @__PURE__ */ jsx22("div", {
2043
2086
  style: flexCss,
2044
2087
  children
2045
2088
  });
2046
2089
  var Row = ({ children, justify, className, align, flex, style = {}, ...other }) => {
2047
- const finalStyle = useMemo13(() => {
2090
+ const finalStyle = useMemo14(() => {
2048
2091
  return {
2049
2092
  ...style,
2050
2093
  display: "flex",
@@ -2054,7 +2097,7 @@ var Row = ({ children, justify, className, align, flex, style = {}, ...other })
2054
2097
  flex: flex ?? undefined
2055
2098
  };
2056
2099
  }, [align, flex, justify, style]);
2057
- return /* @__PURE__ */ jsx21("div", {
2100
+ return /* @__PURE__ */ jsx22("div", {
2058
2101
  className,
2059
2102
  style: finalStyle,
2060
2103
  ...other,
@@ -2062,7 +2105,7 @@ var Row = ({ children, justify, className, align, flex, style = {}, ...other })
2062
2105
  });
2063
2106
  };
2064
2107
  var Column = ({ children, justify, className, align, style = {} }) => {
2065
- const finalStyle = useMemo13(() => {
2108
+ const finalStyle = useMemo14(() => {
2066
2109
  return {
2067
2110
  ...style,
2068
2111
  display: "flex",
@@ -2071,7 +2114,7 @@ var Column = ({ children, justify, className, align, style = {} }) => {
2071
2114
  alignItems: align ?? "flex-start"
2072
2115
  };
2073
2116
  }, [align, justify, style]);
2074
- return /* @__PURE__ */ jsx21("div", {
2117
+ return /* @__PURE__ */ jsx22("div", {
2075
2118
  className,
2076
2119
  style: finalStyle,
2077
2120
  children
@@ -2080,7 +2123,7 @@ var Column = ({ children, justify, className, align, style = {} }) => {
2080
2123
 
2081
2124
  // src/components/Menu/SubMenu.tsx
2082
2125
  import { useCallback as useCallback8 } from "react";
2083
- import { jsx as jsx22 } from "react/jsx-runtime";
2126
+ import { jsx as jsx23 } from "react/jsx-runtime";
2084
2127
  var SubMenuComponent = ({
2085
2128
  portalStyle,
2086
2129
  subMenuActivated,
@@ -2096,13 +2139,13 @@ var SubMenuComponent = ({
2096
2139
  onQuitFullMenu();
2097
2140
  }
2098
2141
  }, [mobileLayout, onQuitFullMenu, onQuitSubMenu]);
2099
- return /* @__PURE__ */ jsx22(HigherZIndex, {
2142
+ return /* @__PURE__ */ jsx23(HigherZIndex, {
2100
2143
  onEscape: onQuitFullMenu,
2101
2144
  onOutsideClick,
2102
- children: /* @__PURE__ */ jsx22("div", {
2145
+ children: /* @__PURE__ */ jsx23("div", {
2103
2146
  style: portalStyle,
2104
2147
  className: "css-reset",
2105
- children: /* @__PURE__ */ jsx22(MenuContent, {
2148
+ children: /* @__PURE__ */ jsx23(MenuContent, {
2106
2149
  onNextMenu: noop,
2107
2150
  onPreviousMenu: onQuitSubMenu,
2108
2151
  values: subMenu.items,
@@ -2117,8 +2160,8 @@ var SubMenuComponent = ({
2117
2160
  };
2118
2161
 
2119
2162
  // src/components/Menu/MenuSubItem.tsx
2120
- import { jsx as jsx23, jsxs as jsxs3, Fragment } from "react/jsx-runtime";
2121
- var container4 = {
2163
+ import { jsx as jsx24, jsxs as jsxs4, Fragment } from "react/jsx-runtime";
2164
+ var container5 = {
2122
2165
  paddingTop: 8,
2123
2166
  paddingBottom: 8,
2124
2167
  paddingLeft: 12,
@@ -2167,9 +2210,9 @@ var MenuSubItem = ({
2167
2210
  });
2168
2211
  const mobileLayout = useMobileLayout();
2169
2212
  const { currentZIndex } = useZIndex();
2170
- const style = useMemo14(() => {
2213
+ const style = useMemo15(() => {
2171
2214
  return {
2172
- ...container4,
2215
+ ...container5,
2173
2216
  backgroundColor: selected && !disabled ? CLEAR_HOVER : "transparent",
2174
2217
  opacity: disabled ? 0.5 : 1,
2175
2218
  cursor: disabled ? "not-allowed" : "default"
@@ -2199,7 +2242,7 @@ var MenuSubItem = ({
2199
2242
  const onQuitSubmenu = useCallback9(() => {
2200
2243
  setSubMenuActivated(false);
2201
2244
  }, [setSubMenuActivated]);
2202
- const portalStyle = useMemo14(() => {
2245
+ const portalStyle = useMemo15(() => {
2203
2246
  if (!selected || !size || !subMenu || !subMenuActivated) {
2204
2247
  return null;
2205
2248
  }
@@ -2226,7 +2269,7 @@ var MenuSubItem = ({
2226
2269
  });
2227
2270
  }
2228
2271
  }, [selected]);
2229
- return /* @__PURE__ */ jsx23("div", {
2272
+ return /* @__PURE__ */ jsx24("div", {
2230
2273
  ref,
2231
2274
  onPointerEnter,
2232
2275
  onPointerLeave,
@@ -2234,35 +2277,35 @@ var MenuSubItem = ({
2234
2277
  onPointerUp,
2235
2278
  role: "button",
2236
2279
  className: MENU_ITEM_CLASSNAME,
2237
- children: /* @__PURE__ */ jsxs3(Row, {
2280
+ children: /* @__PURE__ */ jsxs4(Row, {
2238
2281
  align: "center",
2239
2282
  children: [
2240
- leaveLeftSpace ? /* @__PURE__ */ jsxs3(Fragment, {
2283
+ leaveLeftSpace ? /* @__PURE__ */ jsxs4(Fragment, {
2241
2284
  children: [
2242
- /* @__PURE__ */ jsx23("div", {
2285
+ /* @__PURE__ */ jsx24("div", {
2243
2286
  style: leftSpace,
2244
2287
  children: leftItem
2245
2288
  }),
2246
- /* @__PURE__ */ jsx23(Spacing, {
2289
+ /* @__PURE__ */ jsx24(Spacing, {
2247
2290
  x: 1
2248
2291
  })
2249
2292
  ]
2250
2293
  }) : null,
2251
- /* @__PURE__ */ jsx23("div", {
2294
+ /* @__PURE__ */ jsx24("div", {
2252
2295
  style: labelStyle,
2253
2296
  ...{ title: typeof label === "string" ? label : undefined },
2254
2297
  children: label
2255
2298
  }),
2256
2299
  " ",
2257
- /* @__PURE__ */ jsx23(Spacing, {
2300
+ /* @__PURE__ */ jsx24(Spacing, {
2258
2301
  x: 2
2259
2302
  }),
2260
- subMenu ? /* @__PURE__ */ jsx23(CaretRight, {}) : null,
2261
- keyHint && !areKeyboardShortcutsDisabled() ? /* @__PURE__ */ jsx23("span", {
2303
+ subMenu ? /* @__PURE__ */ jsx24(CaretRight, {}) : null,
2304
+ keyHint && !areKeyboardShortcutsDisabled() ? /* @__PURE__ */ jsx24("span", {
2262
2305
  style: keyHintCss,
2263
2306
  children: keyHint
2264
2307
  }) : null,
2265
- portalStyle && subMenu ? ReactDOM.createPortal(/* @__PURE__ */ jsx23(SubMenuComponent, {
2308
+ portalStyle && subMenu ? ReactDOM.createPortal(/* @__PURE__ */ jsx24(SubMenuComponent, {
2266
2309
  onQuitFullMenu: onQuitMenu,
2267
2310
  subMenu,
2268
2311
  onQuitSubMenu: onQuitSubmenu,
@@ -2275,9 +2318,9 @@ var MenuSubItem = ({
2275
2318
  };
2276
2319
 
2277
2320
  // src/components/NewComposition/MenuContent.tsx
2278
- import { jsx as jsx24 } from "react/jsx-runtime";
2321
+ import { jsx as jsx25 } from "react/jsx-runtime";
2279
2322
  var BORDER_SIZE = 1;
2280
- var container5 = {
2323
+ var container6 = {
2281
2324
  paddingTop: MENU_VERTICAL_PADDING,
2282
2325
  paddingBottom: MENU_VERTICAL_PADDING,
2283
2326
  border: `${BORDER_SIZE}px solid ${INPUT_BORDER_COLOR_UNHOVERED}`,
@@ -2384,8 +2427,8 @@ var MenuContent = ({
2384
2427
  }
2385
2428
  setSubMenuActivated("without-mouse");
2386
2429
  }, [onNextMenu, selectedItem, values]);
2387
- const containerWithHeight = useMemo15(() => {
2388
- const containerStyles = { ...container5 };
2430
+ const containerWithHeight = useMemo16(() => {
2431
+ const containerStyles = { ...container6 };
2389
2432
  if (fixedHeight === null) {
2390
2433
  containerStyles.maxHeight = 600;
2391
2434
  } else {
@@ -2511,13 +2554,13 @@ var MenuContent = ({
2511
2554
  current.addEventListener("pointerleave", onPointerLeave);
2512
2555
  return () => current.removeEventListener("pointerleave", onPointerLeave);
2513
2556
  }, [onHide, subMenuActivated]);
2514
- return /* @__PURE__ */ jsx24("div", {
2557
+ return /* @__PURE__ */ jsx25("div", {
2515
2558
  ref: containerRef,
2516
2559
  style: containerWithHeight,
2517
2560
  className: VERTICAL_SCROLLBAR_CLASSNAME,
2518
2561
  children: values.map((item) => {
2519
2562
  if (item.type === "divider") {
2520
- return /* @__PURE__ */ jsx24(MenuDivider, {}, item.id);
2563
+ return /* @__PURE__ */ jsx25(MenuDivider, {}, item.id);
2521
2564
  }
2522
2565
  const onClick = (id, e) => {
2523
2566
  item.onClick(id, e);
@@ -2526,7 +2569,7 @@ var MenuContent = ({
2526
2569
  }
2527
2570
  onHide();
2528
2571
  };
2529
- return /* @__PURE__ */ jsx24(MenuSubItem, {
2572
+ return /* @__PURE__ */ jsx25(MenuSubItem, {
2530
2573
  selected: item.id === selectedItem,
2531
2574
  onActionChosen: onClick,
2532
2575
  onItemSelected,
@@ -2547,7 +2590,7 @@ var MenuContent = ({
2547
2590
  };
2548
2591
 
2549
2592
  // src/components/InlineDropdown.tsx
2550
- import { jsx as jsx25, jsxs as jsxs4, Fragment as Fragment2 } from "react/jsx-runtime";
2593
+ import { jsx as jsx26, jsxs as jsxs5, Fragment as Fragment2 } from "react/jsx-runtime";
2551
2594
  var InlineDropdown = ({
2552
2595
  values,
2553
2596
  ...props
@@ -2565,19 +2608,19 @@ var InlineDropdown = ({
2565
2608
  e.stopPropagation();
2566
2609
  setOpened({ type: "open", left: e.clientX, top: e.clientY });
2567
2610
  }, []);
2568
- const spaceToBottom = useMemo16(() => {
2611
+ const spaceToBottom = useMemo17(() => {
2569
2612
  if (size && opened.type === "open") {
2570
2613
  return size.windowSize.height - opened.top;
2571
2614
  }
2572
2615
  return 0;
2573
2616
  }, [opened, size]);
2574
- const spaceToTop = useMemo16(() => {
2617
+ const spaceToTop = useMemo17(() => {
2575
2618
  if (size && opened.type === "open") {
2576
2619
  return opened.top;
2577
2620
  }
2578
2621
  return 0;
2579
2622
  }, [opened, size]);
2580
- const portalStyle = useMemo16(() => {
2623
+ const portalStyle = useMemo17(() => {
2581
2624
  if (opened.type === "not-open") {
2582
2625
  return;
2583
2626
  }
@@ -2608,26 +2651,26 @@ var InlineDropdown = ({
2608
2651
  const onHide = useCallback11(() => {
2609
2652
  setOpened({ type: "not-open" });
2610
2653
  }, []);
2611
- return /* @__PURE__ */ jsxs4(Fragment2, {
2654
+ return /* @__PURE__ */ jsxs5(Fragment2, {
2612
2655
  children: [
2613
- /* @__PURE__ */ jsx25("div", {
2656
+ /* @__PURE__ */ jsx26("div", {
2614
2657
  ref,
2615
- children: /* @__PURE__ */ jsx25(InlineAction, {
2658
+ children: /* @__PURE__ */ jsx26(InlineAction, {
2616
2659
  onClick,
2617
2660
  ...props
2618
2661
  })
2619
2662
  }),
2620
- portalStyle ? ReactDOM2.createPortal(/* @__PURE__ */ jsx25("div", {
2663
+ portalStyle ? ReactDOM2.createPortal(/* @__PURE__ */ jsx26("div", {
2621
2664
  style: fullScreenOverlay,
2622
- children: /* @__PURE__ */ jsx25("div", {
2665
+ children: /* @__PURE__ */ jsx26("div", {
2623
2666
  style: outerPortal,
2624
2667
  className: "css-reset",
2625
- children: /* @__PURE__ */ jsx25(HigherZIndex, {
2668
+ children: /* @__PURE__ */ jsx26(HigherZIndex, {
2626
2669
  onOutsideClick: onHide,
2627
2670
  onEscape: onHide,
2628
- children: /* @__PURE__ */ jsx25("div", {
2671
+ children: /* @__PURE__ */ jsx26("div", {
2629
2672
  style: portalStyle,
2630
- children: /* @__PURE__ */ jsx25(MenuContent, {
2673
+ children: /* @__PURE__ */ jsx26(MenuContent, {
2631
2674
  onNextMenu: noop,
2632
2675
  onPreviousMenu: noop,
2633
2676
  values,
@@ -2646,9 +2689,9 @@ var InlineDropdown = ({
2646
2689
  };
2647
2690
 
2648
2691
  // src/components/CompositionContextButton.tsx
2649
- import { jsx as jsx26 } from "react/jsx-runtime";
2692
+ import { jsx as jsx27 } from "react/jsx-runtime";
2650
2693
  var CompositionContextButton = ({ visible, values }) => {
2651
- const iconStyle = useMemo17(() => {
2694
+ const iconStyle = useMemo18(() => {
2652
2695
  return {
2653
2696
  style: {
2654
2697
  height: 12
@@ -2657,7 +2700,7 @@ var CompositionContextButton = ({ visible, values }) => {
2657
2700
  }, []);
2658
2701
  const connectionStatus = useContext6(StudioServerConnectionCtx).previewServerState.type;
2659
2702
  const renderAction = useCallback12((color) => {
2660
- return /* @__PURE__ */ jsx26(EllipsisIcon, {
2703
+ return /* @__PURE__ */ jsx27(EllipsisIcon, {
2661
2704
  fill: color,
2662
2705
  svgProps: iconStyle
2663
2706
  });
@@ -2665,7 +2708,7 @@ var CompositionContextButton = ({ visible, values }) => {
2665
2708
  if (!visible || connectionStatus !== "connected") {
2666
2709
  return null;
2667
2710
  }
2668
- return /* @__PURE__ */ jsx26(InlineDropdown, {
2711
+ return /* @__PURE__ */ jsx27(InlineDropdown, {
2669
2712
  renderAction,
2670
2713
  values
2671
2714
  });
@@ -2673,14 +2716,14 @@ var CompositionContextButton = ({ visible, values }) => {
2673
2716
 
2674
2717
  // src/components/ContextMenu.tsx
2675
2718
  import { PlayerInternals as PlayerInternals4 } from "@remotion/player";
2676
- import { useCallback as useCallback13, useEffect as useEffect11, useMemo as useMemo18, useRef as useRef10, useState as useState13 } from "react";
2719
+ import { useCallback as useCallback13, useEffect as useEffect11, useMemo as useMemo19, useRef as useRef10, useState as useState13 } from "react";
2677
2720
  import ReactDOM3 from "react-dom";
2678
- import { jsx as jsx27, jsxs as jsxs5, Fragment as Fragment3 } from "react/jsx-runtime";
2721
+ import { jsx as jsx28, jsxs as jsxs6, Fragment as Fragment3 } from "react/jsx-runtime";
2679
2722
  var ContextMenu = ({ children, values }) => {
2680
2723
  const ref = useRef10(null);
2681
2724
  const [opened, setOpened] = useState13({ type: "not-open" });
2682
2725
  const { currentZIndex } = useZIndex();
2683
- const style = useMemo18(() => {
2726
+ const style = useMemo19(() => {
2684
2727
  return {};
2685
2728
  }, []);
2686
2729
  const size = PlayerInternals4.useElementSize(ref, {
@@ -2704,19 +2747,19 @@ var ContextMenu = ({ children, values }) => {
2704
2747
  current.removeEventListener("contextmenu", onClick);
2705
2748
  };
2706
2749
  }, [size]);
2707
- const spaceToBottom = useMemo18(() => {
2750
+ const spaceToBottom = useMemo19(() => {
2708
2751
  if (size && opened.type === "open") {
2709
2752
  return size.windowSize.height - opened.top;
2710
2753
  }
2711
2754
  return 0;
2712
2755
  }, [opened, size]);
2713
- const spaceToTop = useMemo18(() => {
2756
+ const spaceToTop = useMemo19(() => {
2714
2757
  if (size && opened.type === "open") {
2715
2758
  return opened.top;
2716
2759
  }
2717
2760
  return 0;
2718
2761
  }, [opened, size]);
2719
- const portalStyle = useMemo18(() => {
2762
+ const portalStyle = useMemo19(() => {
2720
2763
  if (opened.type === "not-open") {
2721
2764
  return;
2722
2765
  }
@@ -2747,25 +2790,25 @@ var ContextMenu = ({ children, values }) => {
2747
2790
  const onHide = useCallback13(() => {
2748
2791
  setOpened({ type: "not-open" });
2749
2792
  }, []);
2750
- return /* @__PURE__ */ jsxs5(Fragment3, {
2793
+ return /* @__PURE__ */ jsxs6(Fragment3, {
2751
2794
  children: [
2752
- /* @__PURE__ */ jsx27("div", {
2795
+ /* @__PURE__ */ jsx28("div", {
2753
2796
  ref,
2754
2797
  onContextMenu: () => false,
2755
2798
  style,
2756
2799
  children
2757
2800
  }),
2758
- portalStyle ? ReactDOM3.createPortal(/* @__PURE__ */ jsx27("div", {
2801
+ portalStyle ? ReactDOM3.createPortal(/* @__PURE__ */ jsx28("div", {
2759
2802
  style: fullScreenOverlay,
2760
- children: /* @__PURE__ */ jsx27("div", {
2803
+ children: /* @__PURE__ */ jsx28("div", {
2761
2804
  style: outerPortal,
2762
2805
  className: "css-reset",
2763
- children: /* @__PURE__ */ jsx27(HigherZIndex, {
2806
+ children: /* @__PURE__ */ jsx28(HigherZIndex, {
2764
2807
  onOutsideClick: onHide,
2765
2808
  onEscape: onHide,
2766
- children: /* @__PURE__ */ jsx27("div", {
2809
+ children: /* @__PURE__ */ jsx28("div", {
2767
2810
  style: portalStyle,
2768
- children: /* @__PURE__ */ jsx27(MenuContent, {
2811
+ children: /* @__PURE__ */ jsx28(MenuContent, {
2769
2812
  onNextMenu: noop,
2770
2813
  onPreviousMenu: noop,
2771
2814
  values,
@@ -2784,17 +2827,17 @@ var ContextMenu = ({ children, values }) => {
2784
2827
  };
2785
2828
 
2786
2829
  // src/components/SidebarRenderButton.tsx
2787
- import { useCallback as useCallback14, useContext as useContext7, useMemo as useMemo19 } from "react";
2830
+ import { useCallback as useCallback14, useContext as useContext7, useMemo as useMemo20 } from "react";
2788
2831
  import { Internals as Internals5 } from "remotion";
2789
2832
 
2790
2833
  // src/icons/render.tsx
2791
- import { jsx as jsx28 } from "react/jsx-runtime";
2834
+ import { jsx as jsx29 } from "react/jsx-runtime";
2792
2835
  var ThinRenderIcon = (props) => {
2793
- return /* @__PURE__ */ jsx28("svg", {
2836
+ return /* @__PURE__ */ jsx29("svg", {
2794
2837
  ...props.svgProps,
2795
2838
  xmlns: "http://www.w3.org/2000/svg",
2796
2839
  viewBox: "0 0 512 512",
2797
- children: /* @__PURE__ */ jsx28("path", {
2840
+ children: /* @__PURE__ */ jsx29("path", {
2798
2841
  fill: props.fill,
2799
2842
  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"
2800
2843
  })
@@ -2802,12 +2845,12 @@ var ThinRenderIcon = (props) => {
2802
2845
  };
2803
2846
 
2804
2847
  // src/components/SidebarRenderButton.tsx
2805
- import { jsx as jsx29 } from "react/jsx-runtime";
2848
+ import { jsx as jsx30 } from "react/jsx-runtime";
2806
2849
  var SidebarRenderButton = ({ composition, visible }) => {
2807
2850
  const { setSelectedModal } = useContext7(ModalsContext);
2808
2851
  const { setSidebarCollapsedState } = useContext7(SidebarContext);
2809
2852
  const isMobileLayout = useMobileLayout();
2810
- const iconStyle = useMemo19(() => {
2853
+ const iconStyle = useMemo20(() => {
2811
2854
  return {
2812
2855
  style: {
2813
2856
  height: 12
@@ -2885,7 +2928,7 @@ var SidebarRenderButton = ({ composition, visible }) => {
2885
2928
  setSidebarCollapsedState
2886
2929
  ]);
2887
2930
  const renderAction = useCallback14((color) => {
2888
- return /* @__PURE__ */ jsx29(ThinRenderIcon, {
2931
+ return /* @__PURE__ */ jsx30(ThinRenderIcon, {
2889
2932
  fill: color,
2890
2933
  svgProps: iconStyle
2891
2934
  });
@@ -2893,14 +2936,14 @@ var SidebarRenderButton = ({ composition, visible }) => {
2893
2936
  if (!visible || connectionStatus !== "connected") {
2894
2937
  return null;
2895
2938
  }
2896
- return /* @__PURE__ */ jsx29(InlineAction, {
2939
+ return /* @__PURE__ */ jsx30(InlineAction, {
2897
2940
  renderAction,
2898
2941
  onClick
2899
2942
  });
2900
2943
  };
2901
2944
 
2902
2945
  // src/components/CompositionSelectorItem.tsx
2903
- import { jsx as jsx30, jsxs as jsxs6, Fragment as Fragment4 } from "react/jsx-runtime";
2946
+ import { jsx as jsx31, jsxs as jsxs7, Fragment as Fragment4 } from "react/jsx-runtime";
2904
2947
  var COMPOSITION_ITEM_HEIGHT = 32;
2905
2948
  var itemStyle = {
2906
2949
  paddingRight: 10,
@@ -2917,7 +2960,8 @@ var itemStyle = {
2917
2960
  width: "100%",
2918
2961
  textAlign: "left",
2919
2962
  backgroundColor: BACKGROUND,
2920
- height: COMPOSITION_ITEM_HEIGHT
2963
+ height: COMPOSITION_ITEM_HEIGHT,
2964
+ userSelect: "none"
2921
2965
  };
2922
2966
  var labelStyle2 = {
2923
2967
  textAlign: "left",
@@ -2941,7 +2985,7 @@ var CompositionSelectorItem = ({
2941
2985
  selectComposition,
2942
2986
  toggleFolder
2943
2987
  }) => {
2944
- const selected = useMemo20(() => {
2988
+ const selected = useMemo21(() => {
2945
2989
  if (item.type === "composition") {
2946
2990
  return currentComposition === item.composition.id;
2947
2991
  }
@@ -2954,14 +2998,14 @@ var CompositionSelectorItem = ({
2954
2998
  const onPointerLeave = useCallback15(() => {
2955
2999
  setHovered(false);
2956
3000
  }, []);
2957
- const style = useMemo20(() => {
3001
+ const style = useMemo21(() => {
2958
3002
  return {
2959
3003
  ...itemStyle,
2960
3004
  backgroundColor: getBackgroundFromHoverState({ hovered, selected }),
2961
3005
  paddingLeft: 12 + level * 8
2962
3006
  };
2963
3007
  }, [hovered, level, selected]);
2964
- const label = useMemo20(() => {
3008
+ const label = useMemo21(() => {
2965
3009
  return {
2966
3010
  ...labelStyle2,
2967
3011
  color: selected || hovered ? "white" : LIGHT_TEXT
@@ -2981,7 +3025,7 @@ var CompositionSelectorItem = ({
2981
3025
  }
2982
3026
  }, [onClick]);
2983
3027
  const { setSelectedModal } = useContext8(ModalsContext);
2984
- const contextMenu = useMemo20(() => {
3028
+ const contextMenu = useMemo21(() => {
2985
3029
  if (item.type === "composition") {
2986
3030
  return [
2987
3031
  {
@@ -3059,9 +3103,9 @@ var CompositionSelectorItem = ({
3059
3103
  return [];
3060
3104
  }, [item, setSelectedModal]);
3061
3105
  if (item.type === "folder") {
3062
- return /* @__PURE__ */ jsxs6(Fragment4, {
3106
+ return /* @__PURE__ */ jsxs7(Fragment4, {
3063
3107
  children: [
3064
- /* @__PURE__ */ jsxs6("button", {
3108
+ /* @__PURE__ */ jsxs7("button", {
3065
3109
  style,
3066
3110
  onPointerEnter,
3067
3111
  onPointerLeave,
@@ -3070,24 +3114,24 @@ var CompositionSelectorItem = ({
3070
3114
  type: "button",
3071
3115
  title: item.folderName,
3072
3116
  children: [
3073
- item.expanded ? /* @__PURE__ */ jsx30(ExpandedFolderIcon, {
3117
+ item.expanded ? /* @__PURE__ */ jsx31(ExpandedFolderIcon, {
3074
3118
  style: iconStyle,
3075
3119
  color: hovered || selected ? "white" : LIGHT_TEXT
3076
- }) : /* @__PURE__ */ jsx30(CollapsedFolderIcon, {
3120
+ }) : /* @__PURE__ */ jsx31(CollapsedFolderIcon, {
3077
3121
  color: hovered || selected ? "white" : LIGHT_TEXT,
3078
3122
  style: iconStyle
3079
3123
  }),
3080
- /* @__PURE__ */ jsx30(Spacing, {
3124
+ /* @__PURE__ */ jsx31(Spacing, {
3081
3125
  x: 1
3082
3126
  }),
3083
- /* @__PURE__ */ jsx30("div", {
3127
+ /* @__PURE__ */ jsx31("div", {
3084
3128
  style: label,
3085
3129
  children: item.folderName
3086
3130
  })
3087
3131
  ]
3088
3132
  }),
3089
3133
  item.expanded ? item.items.map((childItem) => {
3090
- return /* @__PURE__ */ jsx30(CompositionSelectorItem, {
3134
+ return /* @__PURE__ */ jsx31(CompositionSelectorItem, {
3091
3135
  currentComposition,
3092
3136
  selectComposition,
3093
3137
  item: childItem,
@@ -3099,11 +3143,11 @@ var CompositionSelectorItem = ({
3099
3143
  ]
3100
3144
  });
3101
3145
  }
3102
- return /* @__PURE__ */ jsx30(ContextMenu, {
3146
+ return /* @__PURE__ */ jsx31(ContextMenu, {
3103
3147
  values: contextMenu,
3104
- children: /* @__PURE__ */ jsx30(Row, {
3148
+ children: /* @__PURE__ */ jsx31(Row, {
3105
3149
  align: "center",
3106
- children: /* @__PURE__ */ jsxs6("a", {
3150
+ children: /* @__PURE__ */ jsxs7("a", {
3107
3151
  style,
3108
3152
  onPointerEnter,
3109
3153
  onPointerLeave,
@@ -3115,28 +3159,28 @@ var CompositionSelectorItem = ({
3115
3159
  className: "__remotion-composition",
3116
3160
  "data-compname": item.composition.id,
3117
3161
  children: [
3118
- isCompositionStill(item.composition) ? /* @__PURE__ */ jsx30(StillIcon, {
3162
+ isCompositionStill(item.composition) ? /* @__PURE__ */ jsx31(StillIcon, {
3119
3163
  color: hovered || selected ? "white" : LIGHT_TEXT,
3120
3164
  style: iconStyle
3121
- }) : /* @__PURE__ */ jsx30(FilmIcon, {
3165
+ }) : /* @__PURE__ */ jsx31(FilmIcon, {
3122
3166
  color: hovered || selected ? "white" : LIGHT_TEXT,
3123
3167
  style: iconStyle
3124
3168
  }),
3125
- /* @__PURE__ */ jsx30(Spacing, {
3169
+ /* @__PURE__ */ jsx31(Spacing, {
3126
3170
  x: 1
3127
3171
  }),
3128
- /* @__PURE__ */ jsx30("div", {
3172
+ /* @__PURE__ */ jsx31("div", {
3129
3173
  style: label,
3130
3174
  children: item.composition.id
3131
3175
  }),
3132
- /* @__PURE__ */ jsx30(Spacing, {
3176
+ /* @__PURE__ */ jsx31(Spacing, {
3133
3177
  x: 0.5
3134
3178
  }),
3135
- /* @__PURE__ */ jsx30(CompositionContextButton, {
3179
+ /* @__PURE__ */ jsx31(CompositionContextButton, {
3136
3180
  values: contextMenu,
3137
3181
  visible: hovered
3138
3182
  }),
3139
- /* @__PURE__ */ jsx30(SidebarRenderButton, {
3183
+ /* @__PURE__ */ jsx31(SidebarRenderButton, {
3140
3184
  visible: hovered,
3141
3185
  composition: item.composition
3142
3186
  })
@@ -3168,13 +3212,12 @@ var renderFrame = (frame, fps) => {
3168
3212
  };
3169
3213
 
3170
3214
  // src/components/CurrentComposition.tsx
3171
- import { jsx as jsx31, jsxs as jsxs7 } from "react/jsx-runtime";
3172
- var CURRENT_COMPOSITION_HEIGHT = 80;
3173
- var container6 = {
3215
+ import { jsx as jsx32, jsxs as jsxs8 } from "react/jsx-runtime";
3216
+ var CURRENT_COMPOSITION_HEIGHT = 64;
3217
+ var container7 = {
3174
3218
  height: CURRENT_COMPOSITION_HEIGHT,
3175
3219
  display: "block",
3176
- borderBottom: `1px solid ${BORDER_COLOR}`,
3177
- padding: 12,
3220
+ padding: "6px 12px",
3178
3221
  color: "white",
3179
3222
  backgroundColor: BACKGROUND
3180
3223
  };
@@ -3200,17 +3243,17 @@ var row = {
3200
3243
  };
3201
3244
  var CurrentComposition = () => {
3202
3245
  const video = Internals6.useVideo();
3203
- return /* @__PURE__ */ jsx31("div", {
3204
- style: container6,
3205
- children: video ? /* @__PURE__ */ jsx31("div", {
3246
+ return /* @__PURE__ */ jsx32("div", {
3247
+ style: container7,
3248
+ children: video ? /* @__PURE__ */ jsx32("div", {
3206
3249
  style: row,
3207
- children: /* @__PURE__ */ jsxs7("div", {
3250
+ children: /* @__PURE__ */ jsxs8("div", {
3208
3251
  children: [
3209
- /* @__PURE__ */ jsx31("div", {
3252
+ /* @__PURE__ */ jsx32("div", {
3210
3253
  style: title,
3211
3254
  children: video.id
3212
3255
  }),
3213
- /* @__PURE__ */ jsxs7("div", {
3256
+ /* @__PURE__ */ jsxs8("div", {
3214
3257
  style: subtitle,
3215
3258
  children: [
3216
3259
  video.width,
@@ -3219,10 +3262,10 @@ var CurrentComposition = () => {
3219
3262
  isCompositionStill(video) ? null : `, ${video.fps} FPS`
3220
3263
  ]
3221
3264
  }),
3222
- isCompositionStill(video) ? /* @__PURE__ */ jsx31("div", {
3265
+ isCompositionStill(video) ? /* @__PURE__ */ jsx32("div", {
3223
3266
  style: subtitle,
3224
3267
  children: "Still"
3225
- }) : /* @__PURE__ */ jsxs7("div", {
3268
+ }) : /* @__PURE__ */ jsxs8("div", {
3226
3269
  style: subtitle,
3227
3270
  children: [
3228
3271
  "Duration ",
@@ -3236,7 +3279,7 @@ var CurrentComposition = () => {
3236
3279
  };
3237
3280
 
3238
3281
  // src/components/CompositionSelector.tsx
3239
- import { jsx as jsx32, jsxs as jsxs8 } from "react/jsx-runtime";
3282
+ import { jsx as jsx33, jsxs as jsxs9 } from "react/jsx-runtime";
3240
3283
  var useCompositionNavigation = () => {
3241
3284
  const { compositions, canvasContent } = useContext9(Internals7.CompositionManager);
3242
3285
  const selectComposition = useSelectComposition();
@@ -3264,18 +3307,41 @@ var useCompositionNavigation = () => {
3264
3307
  const previousComposition = compositions[previousIndex];
3265
3308
  selectComposition(previousComposition, true);
3266
3309
  }, [canvasContent, compositions, selectComposition]);
3267
- return useMemo21(() => ({
3310
+ return useMemo22(() => ({
3268
3311
  navigateToNextComposition,
3269
3312
  navigateToPreviousComposition
3270
3313
  }), [navigateToNextComposition, navigateToPreviousComposition]);
3271
3314
  };
3272
- var container7 = {
3315
+ var container8 = {
3273
3316
  display: "flex",
3274
3317
  flexDirection: "column",
3275
3318
  flex: 1,
3276
3319
  overflow: "hidden",
3277
3320
  backgroundColor: BACKGROUND
3278
3321
  };
3322
+ var QUICK_SWITCHER_TRIGGER_HEIGHT = 38;
3323
+ var quickSwitcherArea = {
3324
+ padding: "4px 12px",
3325
+ borderBottom: `1px solid ${BORDER_COLOR}`
3326
+ };
3327
+ var quickSwitcherTrigger = {
3328
+ backgroundColor: "rgba(255, 255, 255, 0.06)",
3329
+ borderRadius: 5,
3330
+ padding: "4px 10px",
3331
+ color: LIGHT_TEXT,
3332
+ fontSize: 12,
3333
+ cursor: "pointer",
3334
+ display: "flex",
3335
+ alignItems: "center",
3336
+ justifyContent: "space-between",
3337
+ border: "none",
3338
+ width: "100%",
3339
+ appearance: "none"
3340
+ };
3341
+ var shortcutLabel = {
3342
+ fontSize: 11,
3343
+ opacity: 0.6
3344
+ };
3279
3345
  var getKeysToExpand = (initialFolderName, parentFolderName, initial = []) => {
3280
3346
  initial.push(openFolderKey({
3281
3347
  folderName: initialFolderName,
@@ -3290,35 +3356,62 @@ var getKeysToExpand = (initialFolderName, parentFolderName, initial = []) => {
3290
3356
  var CompositionSelector = () => {
3291
3357
  const { compositions, canvasContent, folders } = useContext9(Internals7.CompositionManager);
3292
3358
  const { foldersExpanded } = useContext9(ExpandedFoldersContext);
3359
+ const { setSelectedModal } = useContext9(ModalsContext);
3293
3360
  const { tabIndex } = useZIndex();
3294
3361
  const selectComposition = useSelectComposition();
3295
- const sortedCompositions = useMemo21(() => {
3362
+ const sortedCompositions = useMemo22(() => {
3296
3363
  return sortItemsByNonceHistory(compositions);
3297
3364
  }, [compositions]);
3298
- const sortedFolders = useMemo21(() => {
3365
+ const sortedFolders = useMemo22(() => {
3299
3366
  return sortItemsByNonceHistory(folders);
3300
3367
  }, [folders]);
3301
- const items = useMemo21(() => {
3368
+ const items = useMemo22(() => {
3302
3369
  return createFolderTree(sortedCompositions, sortedFolders, foldersExpanded);
3303
3370
  }, [sortedCompositions, sortedFolders, foldersExpanded]);
3304
- const list = useMemo21(() => {
3371
+ const list = useMemo22(() => {
3305
3372
  return {
3306
- height: `calc(100% - ${CURRENT_COMPOSITION_HEIGHT}px)`,
3373
+ height: `calc(100% - ${CURRENT_COMPOSITION_HEIGHT}px - ${QUICK_SWITCHER_TRIGGER_HEIGHT}px)`,
3307
3374
  overflowY: "auto"
3308
3375
  };
3309
3376
  }, []);
3310
3377
  const toggleFolder = useCallback16((folderName, parentName) => {
3311
3378
  Internals7.compositionSelectorRef.current?.toggleFolder(folderName, parentName);
3312
3379
  }, []);
3313
- return /* @__PURE__ */ jsxs8("div", {
3314
- style: container7,
3380
+ const openQuickSwitcher = useCallback16(() => {
3381
+ setSelectedModal({
3382
+ type: "quick-switcher",
3383
+ mode: "compositions",
3384
+ invocationTimestamp: Date.now()
3385
+ });
3386
+ }, [setSelectedModal]);
3387
+ return /* @__PURE__ */ jsxs9("div", {
3388
+ style: container8,
3315
3389
  children: [
3316
- /* @__PURE__ */ jsx32(CurrentComposition, {}),
3317
- /* @__PURE__ */ jsx32("div", {
3390
+ /* @__PURE__ */ jsx33(CurrentComposition, {}),
3391
+ /* @__PURE__ */ jsx33("div", {
3392
+ style: quickSwitcherArea,
3393
+ children: /* @__PURE__ */ jsxs9("button", {
3394
+ type: "button",
3395
+ style: quickSwitcherTrigger,
3396
+ onClick: openQuickSwitcher,
3397
+ tabIndex,
3398
+ children: [
3399
+ "Search...",
3400
+ areKeyboardShortcutsDisabled() ? null : /* @__PURE__ */ jsxs9("span", {
3401
+ style: shortcutLabel,
3402
+ children: [
3403
+ cmdOrCtrlCharacter,
3404
+ "+K"
3405
+ ]
3406
+ })
3407
+ ]
3408
+ })
3409
+ }),
3410
+ /* @__PURE__ */ jsx33("div", {
3318
3411
  className: "__remotion-vertical-scrollbar",
3319
3412
  style: list,
3320
3413
  children: items.map((c) => {
3321
- return /* @__PURE__ */ jsx32(CompositionSelectorItem, {
3414
+ return /* @__PURE__ */ jsx33(CompositionSelectorItem, {
3322
3415
  level: 0,
3323
3416
  currentComposition: canvasContent && canvasContent.type === "composition" ? canvasContent.compositionId : null,
3324
3417
  selectComposition,
@@ -3336,7 +3429,7 @@ var CompositionSelector = () => {
3336
3429
  import { createRef as createRef5, useCallback as useCallback22, useImperativeHandle as useImperativeHandle5, useState as useState21 } from "react";
3337
3430
 
3338
3431
  // src/components/AssetSelector.tsx
3339
- import { useCallback as useCallback19, useContext as useContext13, useMemo as useMemo25, useState as useState18 } from "react";
3432
+ import { useCallback as useCallback19, useContext as useContext13, useMemo as useMemo26, useState as useState18 } from "react";
3340
3433
  import { Internals as Internals10 } from "remotion";
3341
3434
 
3342
3435
  // src/api/write-static-file.ts
@@ -3365,7 +3458,7 @@ var writeStaticFile = async ({
3365
3458
  };
3366
3459
 
3367
3460
  // src/helpers/use-asset-drag-events.ts
3368
- import { useCallback as useCallback17, useEffect as useEffect12, useMemo as useMemo22, useRef as useRef11 } from "react";
3461
+ import { useCallback as useCallback17, useEffect as useEffect12, useMemo as useMemo23, useRef as useRef11 } from "react";
3369
3462
  import { NoReactInternals } from "remotion/no-react";
3370
3463
  function useAssetDragEvents({
3371
3464
  name,
@@ -3374,10 +3467,10 @@ function useAssetDragEvents({
3374
3467
  setDropLocation
3375
3468
  }) {
3376
3469
  const dragDepthRef = useRef11(0);
3377
- const combinedParents = useMemo22(() => {
3470
+ const combinedParents = useMemo23(() => {
3378
3471
  return [parentFolder, name].filter(NoReactInternals.truthy).join("/");
3379
3472
  }, [name, parentFolder]);
3380
- const isDropDiv = useMemo22(() => {
3473
+ const isDropDiv = useMemo23(() => {
3381
3474
  return dropLocation === combinedParents;
3382
3475
  }, [combinedParents, dropLocation]);
3383
3476
  const onDragEnter = useCallback17(() => {
@@ -3406,7 +3499,7 @@ function useAssetDragEvents({
3406
3499
  var use_asset_drag_events_default = useAssetDragEvents;
3407
3500
 
3408
3501
  // src/components/AssetSelectorItem.tsx
3409
- import React24, { useCallback as useCallback18, useContext as useContext10, useMemo as useMemo23, useRef as useRef12, useState as useState15 } from "react";
3502
+ import React25, { useCallback as useCallback18, useContext as useContext10, useMemo as useMemo24, useRef as useRef12, useState as useState15 } from "react";
3410
3503
  import { Internals as Internals8 } from "remotion";
3411
3504
  import { NoReactInternals as NoReactInternals3 } from "remotion/no-react";
3412
3505
 
@@ -3428,26 +3521,26 @@ var copyText = (cmd) => {
3428
3521
  };
3429
3522
 
3430
3523
  // src/icons/clipboard.tsx
3431
- import { jsx as jsx33 } from "react/jsx-runtime";
3432
- var ClipboardIcon = ({ color, ...props }) => /* @__PURE__ */ jsx33("svg", {
3524
+ import { jsx as jsx34 } from "react/jsx-runtime";
3525
+ var ClipboardIcon = ({ color, ...props }) => /* @__PURE__ */ jsx34("svg", {
3433
3526
  viewBox: "0 0 384 512",
3434
3527
  ...props,
3435
- children: /* @__PURE__ */ jsx33("path", {
3528
+ children: /* @__PURE__ */ jsx34("path", {
3436
3529
  fill: color,
3437
3530
  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"
3438
3531
  })
3439
3532
  });
3440
3533
 
3441
3534
  // src/icons/file.tsx
3442
- import { jsx as jsx34 } from "react/jsx-runtime";
3535
+ import { jsx as jsx35 } from "react/jsx-runtime";
3443
3536
  var FileIcon = ({
3444
3537
  color,
3445
3538
  ...props
3446
- }) => /* @__PURE__ */ jsx34("svg", {
3539
+ }) => /* @__PURE__ */ jsx35("svg", {
3447
3540
  xmlns: "http://www.w3.org/2000/svg",
3448
3541
  viewBox: "0 0 384 512",
3449
3542
  ...props,
3450
- children: /* @__PURE__ */ jsx34("path", {
3543
+ children: /* @__PURE__ */ jsx35("path", {
3451
3544
  fill: color ?? "currentColor",
3452
3545
  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"
3453
3546
  })
@@ -3751,7 +3844,7 @@ var applyVisualControlChange = ({
3751
3844
  };
3752
3845
 
3753
3846
  // src/components/AssetSelectorItem.tsx
3754
- import { jsx as jsx35, jsxs as jsxs9, Fragment as Fragment5 } from "react/jsx-runtime";
3847
+ import { jsx as jsx36, jsxs as jsxs10, Fragment as Fragment5 } from "react/jsx-runtime";
3755
3848
  var ASSET_ITEM_HEIGHT = 32;
3756
3849
  var iconStyle2 = {
3757
3850
  width: 18,
@@ -3814,14 +3907,14 @@ var AssetFolderItem = ({
3814
3907
  const onPointerLeave = useCallback18(() => {
3815
3908
  setHovered(false);
3816
3909
  }, []);
3817
- const folderStyle = useMemo23(() => {
3910
+ const folderStyle = useMemo24(() => {
3818
3911
  return {
3819
3912
  ...itemStyle2,
3820
3913
  paddingLeft: 4 + level * 8,
3821
3914
  backgroundColor: hovered ? CLEAR_HOVER : "transparent"
3822
3915
  };
3823
3916
  }, [hovered, level]);
3824
- const label = useMemo23(() => {
3917
+ const label = useMemo24(() => {
3825
3918
  return {
3826
3919
  ...labelStyle3,
3827
3920
  color: hovered ? "white" : LIGHT_TEXT
@@ -3831,14 +3924,14 @@ var AssetFolderItem = ({
3831
3924
  toggleFolder(item.name, parentFolder);
3832
3925
  }, [item.name, parentFolder, toggleFolder]);
3833
3926
  const Icon = item.expanded ? ExpandedFolderIcon : CollapsedFolderIcon;
3834
- return /* @__PURE__ */ jsxs9("div", {
3927
+ return /* @__PURE__ */ jsxs10("div", {
3835
3928
  onDragEnter,
3836
3929
  onDragLeave,
3837
3930
  style: {
3838
3931
  backgroundColor: isDropDiv ? CLEAR_HOVER : BACKGROUND
3839
3932
  },
3840
3933
  children: [
3841
- /* @__PURE__ */ jsx35("div", {
3934
+ /* @__PURE__ */ jsx36("div", {
3842
3935
  style: folderStyle,
3843
3936
  onPointerEnter,
3844
3937
  onPointerLeave,
@@ -3857,23 +3950,23 @@ var AssetFolderItem = ({
3857
3950
  clearTimeout(openFolderTimerRef.current);
3858
3951
  }
3859
3952
  },
3860
- children: /* @__PURE__ */ jsxs9(Row, {
3953
+ children: /* @__PURE__ */ jsxs10(Row, {
3861
3954
  children: [
3862
- /* @__PURE__ */ jsx35(Icon, {
3955
+ /* @__PURE__ */ jsx36(Icon, {
3863
3956
  style: iconStyle2,
3864
3957
  color: hovered ? "white" : LIGHT_TEXT
3865
3958
  }),
3866
- /* @__PURE__ */ jsx35(Spacing, {
3959
+ /* @__PURE__ */ jsx36(Spacing, {
3867
3960
  x: 1
3868
3961
  }),
3869
- /* @__PURE__ */ jsx35("div", {
3962
+ /* @__PURE__ */ jsx36("div", {
3870
3963
  style: label,
3871
3964
  children: item.name
3872
3965
  })
3873
3966
  ]
3874
3967
  })
3875
3968
  }),
3876
- item.expanded ? /* @__PURE__ */ jsx35(AssetFolderTree, {
3969
+ item.expanded ? /* @__PURE__ */ jsx36(AssetFolderTree, {
3877
3970
  item: item.items,
3878
3971
  name: item.name,
3879
3972
  level,
@@ -3898,13 +3991,13 @@ var AssetFolderTree = ({
3898
3991
  setDropLocation,
3899
3992
  readOnlyStudio
3900
3993
  }) => {
3901
- const combinedParents = useMemo23(() => {
3994
+ const combinedParents = useMemo24(() => {
3902
3995
  return [parentFolder, name].filter(NoReactInternals3.truthy).join("/");
3903
3996
  }, [name, parentFolder]);
3904
- return /* @__PURE__ */ jsxs9("div", {
3997
+ return /* @__PURE__ */ jsxs10("div", {
3905
3998
  children: [
3906
3999
  item.folders.map((folder) => {
3907
- return /* @__PURE__ */ jsx35(AssetFolderItem, {
4000
+ return /* @__PURE__ */ jsx36(AssetFolderItem, {
3908
4001
  item: folder,
3909
4002
  tabIndex,
3910
4003
  level: level + 1,
@@ -3916,7 +4009,7 @@ var AssetFolderTree = ({
3916
4009
  }, folder.name);
3917
4010
  }),
3918
4011
  item.files.map((file) => {
3919
- return /* @__PURE__ */ jsx35(AssetSelectorItem, {
4012
+ return /* @__PURE__ */ jsx36(AssetSelectorItem, {
3920
4013
  item: file,
3921
4014
  tabIndex,
3922
4015
  level,
@@ -3936,10 +4029,10 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
3936
4029
  }, []);
3937
4030
  const { setCanvasContent } = useContext10(Internals8.CompositionSetters);
3938
4031
  const { canvasContent } = useContext10(Internals8.CompositionManager);
3939
- const relativePath = useMemo23(() => {
4032
+ const relativePath = useMemo24(() => {
3940
4033
  return parentFolder ? parentFolder + "/" + item.name : item.name;
3941
4034
  }, [parentFolder, item.name]);
3942
- const selected = useMemo23(() => {
4035
+ const selected = useMemo24(() => {
3943
4036
  if (canvasContent && canvasContent.type === "asset") {
3944
4037
  return canvasContent.asset === relativePath;
3945
4038
  }
@@ -3960,7 +4053,7 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
3960
4053
  setCanvasContent,
3961
4054
  setSidebarCollapsedState
3962
4055
  ]);
3963
- const style = useMemo23(() => {
4056
+ const style = useMemo24(() => {
3964
4057
  return {
3965
4058
  ...itemStyle2,
3966
4059
  color: hovered || selected ? "white" : LIGHT_TEXT,
@@ -3968,25 +4061,25 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
3968
4061
  paddingLeft: 12 + level * 8
3969
4062
  };
3970
4063
  }, [hovered, level, selected]);
3971
- const label = useMemo23(() => {
4064
+ const label = useMemo24(() => {
3972
4065
  return {
3973
4066
  ...labelStyle3,
3974
4067
  color: hovered || selected ? "white" : LIGHT_TEXT
3975
4068
  };
3976
4069
  }, [hovered, selected]);
3977
4070
  const renderFileExplorerAction = useCallback18((color) => {
3978
- return /* @__PURE__ */ jsx35(ExpandedFolderIcon, {
4071
+ return /* @__PURE__ */ jsx36(ExpandedFolderIcon, {
3979
4072
  style: revealIconStyle,
3980
4073
  color
3981
4074
  });
3982
4075
  }, []);
3983
4076
  const renderCopyAction = useCallback18((color) => {
3984
- return /* @__PURE__ */ jsx35(ClipboardIcon, {
4077
+ return /* @__PURE__ */ jsx36(ClipboardIcon, {
3985
4078
  style: revealIconStyle,
3986
4079
  color
3987
4080
  });
3988
4081
  }, []);
3989
- const revealInExplorer = React24.useCallback((e) => {
4082
+ const revealInExplorer = React25.useCallback((e) => {
3990
4083
  e.stopPropagation();
3991
4084
  openInFileExplorer({
3992
4085
  directory: window.remotion_publicFolderExists + "/" + parentFolder + "/" + item.name
@@ -4003,9 +4096,9 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
4003
4096
  showNotification(`Could not copy: ${err.message}`, 2000);
4004
4097
  });
4005
4098
  }, [item.name, parentFolder]);
4006
- return /* @__PURE__ */ jsx35(Row, {
4099
+ return /* @__PURE__ */ jsx36(Row, {
4007
4100
  align: "center",
4008
- children: /* @__PURE__ */ jsxs9("div", {
4101
+ children: /* @__PURE__ */ jsxs10("div", {
4009
4102
  style,
4010
4103
  onPointerEnter,
4011
4104
  onPointerLeave,
@@ -4013,33 +4106,33 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
4013
4106
  tabIndex,
4014
4107
  title: item.name,
4015
4108
  children: [
4016
- /* @__PURE__ */ jsx35(FileIcon, {
4109
+ /* @__PURE__ */ jsx36(FileIcon, {
4017
4110
  style: iconStyle2,
4018
4111
  color: LIGHT_TEXT
4019
4112
  }),
4020
- /* @__PURE__ */ jsx35(Spacing, {
4113
+ /* @__PURE__ */ jsx36(Spacing, {
4021
4114
  x: 1
4022
4115
  }),
4023
- /* @__PURE__ */ jsx35("div", {
4116
+ /* @__PURE__ */ jsx36("div", {
4024
4117
  style: label,
4025
4118
  children: item.name
4026
4119
  }),
4027
- hovered ? /* @__PURE__ */ jsxs9(Fragment5, {
4120
+ hovered ? /* @__PURE__ */ jsxs10(Fragment5, {
4028
4121
  children: [
4029
- /* @__PURE__ */ jsx35(Spacing, {
4122
+ /* @__PURE__ */ jsx36(Spacing, {
4030
4123
  x: 0.5
4031
4124
  }),
4032
- /* @__PURE__ */ jsx35(InlineAction, {
4125
+ /* @__PURE__ */ jsx36(InlineAction, {
4033
4126
  title: "Copy staticFile() name",
4034
4127
  renderAction: renderCopyAction,
4035
4128
  onClick: copyToClipboard
4036
4129
  }),
4037
- readOnlyStudio ? null : /* @__PURE__ */ jsxs9(Fragment5, {
4130
+ readOnlyStudio ? null : /* @__PURE__ */ jsxs10(Fragment5, {
4038
4131
  children: [
4039
- /* @__PURE__ */ jsx35(Spacing, {
4132
+ /* @__PURE__ */ jsx36(Spacing, {
4040
4133
  x: 0.5
4041
4134
  }),
4042
- /* @__PURE__ */ jsx35(InlineAction, {
4135
+ /* @__PURE__ */ jsx36(InlineAction, {
4043
4136
  title: "Open in Explorer",
4044
4137
  renderAction: renderFileExplorerAction,
4045
4138
  onClick: revealInExplorer
@@ -4056,11 +4149,11 @@ var AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }
4056
4149
  // src/components/CurrentAsset.tsx
4057
4150
  import { formatBytes } from "@remotion/studio-shared";
4058
4151
  import { ALL_FORMATS, Input, UrlSource } from "mediabunny";
4059
- import { useContext as useContext12, useEffect as useEffect14, useMemo as useMemo24, useState as useState17 } from "react";
4152
+ import { useContext as useContext12, useEffect as useEffect14, useMemo as useMemo25, useState as useState17 } from "react";
4060
4153
  import { Internals as Internals9, staticFile } from "remotion";
4061
4154
 
4062
4155
  // src/components/use-static-files.ts
4063
- import React25, { createContext as createContext10, useContext as useContext11, useEffect as useEffect13, useState as useState16 } from "react";
4156
+ import React26, { createContext as createContext10, useContext as useContext11, useEffect as useEffect13, useState as useState16 } from "react";
4064
4157
  import { useRemotionEnvironment } from "remotion";
4065
4158
 
4066
4159
  // src/api/get-static-files.ts
@@ -4132,16 +4225,16 @@ var StaticFilesProvider = ({ children }) => {
4132
4225
  });
4133
4226
  return cancel;
4134
4227
  }, [env.isStudio, env.isReadOnlyStudio]);
4135
- return React25.createElement(StaticFilesContext.Provider, { value: files }, children);
4228
+ return React26.createElement(StaticFilesContext.Provider, { value: files }, children);
4136
4229
  };
4137
4230
  var useStaticFiles = () => {
4138
4231
  return useContext11(StaticFilesContext);
4139
4232
  };
4140
4233
 
4141
4234
  // src/components/CurrentAsset.tsx
4142
- import { jsx as jsx36, jsxs as jsxs10 } from "react/jsx-runtime";
4235
+ import { jsx as jsx37, jsxs as jsxs11 } from "react/jsx-runtime";
4143
4236
  var CURRENT_ASSET_HEIGHT = 80;
4144
- var container8 = {
4237
+ var container9 = {
4145
4238
  height: CURRENT_ASSET_HEIGHT,
4146
4239
  display: "block",
4147
4240
  borderBottom: `1px solid ${BORDER_COLOR}`,
@@ -4183,7 +4276,7 @@ var CurrentAsset = () => {
4183
4276
  const { canvasContent } = useContext12(Internals9.CompositionManager);
4184
4277
  const assetName = canvasContent?.type === "asset" ? canvasContent.asset : null;
4185
4278
  const staticFiles = useStaticFiles();
4186
- const sizeInBytes = useMemo24(() => {
4279
+ const sizeInBytes = useMemo25(() => {
4187
4280
  if (!assetName) {
4188
4281
  return null;
4189
4282
  }
@@ -4218,8 +4311,8 @@ var CurrentAsset = () => {
4218
4311
  };
4219
4312
  }, [assetName]);
4220
4313
  if (!assetName) {
4221
- return /* @__PURE__ */ jsx36("div", {
4222
- style: container8
4314
+ return /* @__PURE__ */ jsx37("div", {
4315
+ style: container9
4223
4316
  });
4224
4317
  }
4225
4318
  const fileName = assetName.split("/").pop() ?? assetName;
@@ -4233,21 +4326,21 @@ var CurrentAsset = () => {
4233
4326
  subtitleParts.push(`${mediaMetadata.width}x${mediaMetadata.height}`);
4234
4327
  }
4235
4328
  }
4236
- return /* @__PURE__ */ jsx36("div", {
4237
- style: container8,
4238
- children: /* @__PURE__ */ jsx36("div", {
4329
+ return /* @__PURE__ */ jsx37("div", {
4330
+ style: container9,
4331
+ children: /* @__PURE__ */ jsx37("div", {
4239
4332
  style: row2,
4240
- children: /* @__PURE__ */ jsxs10("div", {
4333
+ children: /* @__PURE__ */ jsxs11("div", {
4241
4334
  children: [
4242
- /* @__PURE__ */ jsx36("div", {
4335
+ /* @__PURE__ */ jsx37("div", {
4243
4336
  style: title2,
4244
4337
  children: fileName
4245
4338
  }),
4246
- subtitleParts.length > 0 ? /* @__PURE__ */ jsx36("div", {
4339
+ subtitleParts.length > 0 ? /* @__PURE__ */ jsx37("div", {
4247
4340
  style: subtitle2,
4248
4341
  children: subtitleParts.join(" · ")
4249
4342
  }) : null,
4250
- mediaMetadata ? /* @__PURE__ */ jsx36("div", {
4343
+ mediaMetadata ? /* @__PURE__ */ jsx37("div", {
4251
4344
  style: subtitle2,
4252
4345
  children: formatDuration(mediaMetadata.duration)
4253
4346
  }) : null
@@ -4258,8 +4351,8 @@ var CurrentAsset = () => {
4258
4351
  };
4259
4352
 
4260
4353
  // src/components/AssetSelector.tsx
4261
- import { jsx as jsx37, jsxs as jsxs11 } from "react/jsx-runtime";
4262
- var container9 = {
4354
+ import { jsx as jsx38, jsxs as jsxs12 } from "react/jsx-runtime";
4355
+ var container10 = {
4263
4356
  display: "flex",
4264
4357
  flexDirection: "column",
4265
4358
  flex: 1,
@@ -4290,7 +4383,7 @@ var AssetSelector = ({ readOnlyStudio }) => {
4290
4383
  const connectionStatus = useContext13(StudioServerConnectionCtx).previewServerState.type;
4291
4384
  const shouldAllowUpload = connectionStatus === "connected" && !readOnlyStudio;
4292
4385
  const showCurrentAsset = canvasContent?.type === "asset";
4293
- const list = useMemo25(() => {
4386
+ const list = useMemo26(() => {
4294
4387
  return {
4295
4388
  ...baseList,
4296
4389
  height: showCurrentAsset ? `calc(100% - ${CURRENT_ASSET_HEIGHT}px)` : "100%"
@@ -4298,7 +4391,7 @@ var AssetSelector = ({ readOnlyStudio }) => {
4298
4391
  }, [showCurrentAsset]);
4299
4392
  const staticFiles = useStaticFiles();
4300
4393
  const publicFolderExists = window.remotion_publicFolderExists;
4301
- const assetTree = useMemo25(() => {
4394
+ const assetTree = useMemo26(() => {
4302
4395
  return buildAssetFolderStructure(staticFiles, null, assetFoldersExpanded);
4303
4396
  }, [assetFoldersExpanded, staticFiles]);
4304
4397
  const toggleFolder = useCallback19((folderName, parentName) => {
@@ -4349,41 +4442,41 @@ var AssetSelector = ({ readOnlyStudio }) => {
4349
4442
  setDropLocation(null);
4350
4443
  }
4351
4444
  }, [dropLocation]);
4352
- return /* @__PURE__ */ jsxs11("div", {
4353
- style: container9,
4445
+ return /* @__PURE__ */ jsxs12("div", {
4446
+ style: container10,
4354
4447
  onDragOver: shouldAllowUpload ? onDragOver : undefined,
4355
4448
  onDrop: shouldAllowUpload ? onDrop : undefined,
4356
4449
  children: [
4357
- showCurrentAsset ? /* @__PURE__ */ jsx37(CurrentAsset, {}) : null,
4358
- staticFiles.length === 0 ? publicFolderExists ? /* @__PURE__ */ jsx37("div", {
4450
+ showCurrentAsset ? /* @__PURE__ */ jsx38(CurrentAsset, {}) : null,
4451
+ staticFiles.length === 0 ? publicFolderExists ? /* @__PURE__ */ jsx38("div", {
4359
4452
  style: emptyState,
4360
- children: /* @__PURE__ */ jsxs11("div", {
4453
+ children: /* @__PURE__ */ jsxs12("div", {
4361
4454
  style: label,
4362
4455
  children: [
4363
4456
  "To add assets, place a file in the",
4364
4457
  " ",
4365
- /* @__PURE__ */ jsx37("code", {
4458
+ /* @__PURE__ */ jsx38("code", {
4366
4459
  style: inlineCodeSnippet,
4367
4460
  children: "public"
4368
4461
  }),
4369
4462
  " folder of your project or drag and drop a file here."
4370
4463
  ]
4371
4464
  })
4372
- }) : /* @__PURE__ */ jsx37("div", {
4465
+ }) : /* @__PURE__ */ jsx38("div", {
4373
4466
  style: emptyState,
4374
- children: /* @__PURE__ */ jsxs11("div", {
4467
+ children: /* @__PURE__ */ jsxs12("div", {
4375
4468
  style: label,
4376
4469
  children: [
4377
4470
  "To add assets, create a folder called",
4378
4471
  " ",
4379
- /* @__PURE__ */ jsx37("code", {
4472
+ /* @__PURE__ */ jsx38("code", {
4380
4473
  style: inlineCodeSnippet,
4381
4474
  children: "public"
4382
4475
  }),
4383
4476
  " in the root of your project and place a file in it."
4384
4477
  ]
4385
4478
  })
4386
- }) : /* @__PURE__ */ jsx37("div", {
4479
+ }) : /* @__PURE__ */ jsx38("div", {
4387
4480
  className: "__remotion-vertical-scrollbar",
4388
4481
  style: {
4389
4482
  ...list,
@@ -4391,7 +4484,7 @@ var AssetSelector = ({ readOnlyStudio }) => {
4391
4484
  },
4392
4485
  onDragEnter,
4393
4486
  onDragLeave,
4394
- children: /* @__PURE__ */ jsx37(AssetFolderTree, {
4487
+ children: /* @__PURE__ */ jsx38(AssetFolderTree, {
4395
4488
  item: assetTree,
4396
4489
  level: 0,
4397
4490
  parentFolder: null,
@@ -4412,11 +4505,11 @@ import {
4412
4505
  useCallback as useCallback20,
4413
4506
  useContext as useContext14,
4414
4507
  useImperativeHandle as useImperativeHandle4,
4415
- useMemo as useMemo26,
4508
+ useMemo as useMemo27,
4416
4509
  useState as useState19
4417
4510
  } from "react";
4418
4511
  import { Internals as Internals11 } from "remotion";
4419
- import { jsx as jsx38 } from "react/jsx-runtime";
4512
+ import { jsx as jsx39 } from "react/jsx-runtime";
4420
4513
  var CompSelectorRef = ({ children }) => {
4421
4514
  const { compositions } = useContext14(Internals11.CompositionManager);
4422
4515
  const [foldersExpanded, setFoldersExpanded] = useState19(loadExpandedFolders("compositions"));
@@ -4478,34 +4571,34 @@ var CompSelectorRef = ({ children }) => {
4478
4571
  }
4479
4572
  };
4480
4573
  }, [compositions, selectComposition, toggleFolder]);
4481
- const contextValue = useMemo26(() => {
4574
+ const contextValue = useMemo27(() => {
4482
4575
  return {
4483
4576
  foldersExpanded,
4484
4577
  setFoldersExpanded,
4485
4578
  toggleFolder
4486
4579
  };
4487
4580
  }, [foldersExpanded, setFoldersExpanded, toggleFolder]);
4488
- return /* @__PURE__ */ jsx38(ExpandedFoldersContext.Provider, {
4581
+ return /* @__PURE__ */ jsx39(ExpandedFoldersContext.Provider, {
4489
4582
  value: contextValue,
4490
4583
  children
4491
4584
  });
4492
4585
  };
4493
4586
 
4494
4587
  // src/components/Tabs/index.tsx
4495
- import { useCallback as useCallback21, useMemo as useMemo27, useState as useState20 } from "react";
4496
- import { jsx as jsx39 } from "react/jsx-runtime";
4588
+ import { useCallback as useCallback21, useMemo as useMemo28, useState as useState20 } from "react";
4589
+ import { jsx as jsx40 } from "react/jsx-runtime";
4497
4590
  var tabsContainer = {
4498
4591
  display: "flex",
4499
4592
  flexDirection: "row"
4500
4593
  };
4501
4594
  var Tabs = ({ children, style }) => {
4502
- const definiteStyle = useMemo27(() => {
4595
+ const definiteStyle = useMemo28(() => {
4503
4596
  return {
4504
4597
  ...tabsContainer,
4505
4598
  ...style
4506
4599
  };
4507
4600
  }, [style]);
4508
- return /* @__PURE__ */ jsx39("div", {
4601
+ return /* @__PURE__ */ jsx40("div", {
4509
4602
  style: definiteStyle,
4510
4603
  children
4511
4604
  });
@@ -4534,7 +4627,7 @@ var Tab = ({ children, onClick, style, selected }) => {
4534
4627
  const onPointerLeave = useCallback21(() => {
4535
4628
  setHovered(false);
4536
4629
  }, []);
4537
- const definiteStyle = useMemo27(() => ({
4630
+ const definiteStyle = useMemo28(() => ({
4538
4631
  ...selectorButton,
4539
4632
  backgroundColor: selected ? BACKGROUND : hovered ? CLEAR_HOVER : INPUT_BACKGROUND,
4540
4633
  color: selected ? "white" : LIGHT_TEXT,
@@ -4542,7 +4635,7 @@ var Tab = ({ children, onClick, style, selected }) => {
4542
4635
  boxShadow: selected ? "none" : undefined,
4543
4636
  ...style
4544
4637
  }), [hovered, selected, style]);
4545
- return /* @__PURE__ */ jsx39("div", {
4638
+ return /* @__PURE__ */ jsx40("div", {
4546
4639
  style: definiteStyle,
4547
4640
  role: "button",
4548
4641
  onClick,
@@ -4554,8 +4647,8 @@ var Tab = ({ children, onClick, style, selected }) => {
4554
4647
  };
4555
4648
 
4556
4649
  // src/components/ExplorerPanel.tsx
4557
- import { jsx as jsx40, jsxs as jsxs12 } from "react/jsx-runtime";
4558
- var container10 = {
4650
+ import { jsx as jsx41, jsxs as jsxs13 } from "react/jsx-runtime";
4651
+ var container11 = {
4559
4652
  height: "100%",
4560
4653
  width: "100%",
4561
4654
  maxWidth: "100%",
@@ -4600,21 +4693,21 @@ var ExplorerPanel = ({ readOnlyStudio }) => {
4600
4693
  }
4601
4694
  };
4602
4695
  }, []);
4603
- return /* @__PURE__ */ jsx40(CompSelectorRef, {
4604
- children: /* @__PURE__ */ jsxs12("div", {
4605
- style: container10,
4696
+ return /* @__PURE__ */ jsx41(CompSelectorRef, {
4697
+ children: /* @__PURE__ */ jsxs13("div", {
4698
+ style: container11,
4606
4699
  className: "css-reset",
4607
4700
  children: [
4608
- /* @__PURE__ */ jsx40("div", {
4701
+ /* @__PURE__ */ jsx41("div", {
4609
4702
  style: tabsContainer2,
4610
- children: /* @__PURE__ */ jsxs12(Tabs, {
4703
+ children: /* @__PURE__ */ jsxs13(Tabs, {
4611
4704
  children: [
4612
- /* @__PURE__ */ jsx40(Tab, {
4705
+ /* @__PURE__ */ jsx41(Tab, {
4613
4706
  selected: panel === "compositions",
4614
4707
  onClick: onCompositionsSelected,
4615
4708
  children: "Compositions"
4616
4709
  }),
4617
- /* @__PURE__ */ jsx40(Tab, {
4710
+ /* @__PURE__ */ jsx41(Tab, {
4618
4711
  selected: panel === "assets",
4619
4712
  onClick: onAssetsSelected,
4620
4713
  children: "Assets"
@@ -4622,7 +4715,7 @@ var ExplorerPanel = ({ readOnlyStudio }) => {
4622
4715
  ]
4623
4716
  })
4624
4717
  }),
4625
- panel === "compositions" ? /* @__PURE__ */ jsx40(CompositionSelector, {}) : /* @__PURE__ */ jsx40(AssetSelector, {
4718
+ panel === "compositions" ? /* @__PURE__ */ jsx41(CompositionSelector, {}) : /* @__PURE__ */ jsx41(AssetSelector, {
4626
4719
  readOnlyStudio
4627
4720
  })
4628
4721
  ]
@@ -4788,7 +4881,7 @@ import {
4788
4881
  import { AbsoluteFill } from "remotion";
4789
4882
 
4790
4883
  // src/components/ModalContainer.tsx
4791
- import { jsx as jsx41 } from "react/jsx-runtime";
4884
+ import { jsx as jsx42 } from "react/jsx-runtime";
4792
4885
  var padding = 20;
4793
4886
  var getMaxModalWidth = (width) => {
4794
4887
  return `min(calc(100vw - ${padding * 2}px), calc(${width}px - ${padding * 2}px))`;
@@ -4812,16 +4905,16 @@ var panel = {
4812
4905
  margin: "auto"
4813
4906
  };
4814
4907
  var ModalContainer = ({ children, onEscape, onOutsideClick, noZIndex }) => {
4815
- return /* @__PURE__ */ jsx41("div", {
4908
+ return /* @__PURE__ */ jsx42("div", {
4816
4909
  className: "css-reset",
4817
4910
  style: backgroundOverlay,
4818
4911
  role: "dialog",
4819
4912
  "aria-modal": "true",
4820
- children: /* @__PURE__ */ jsx41(HigherZIndex, {
4913
+ children: /* @__PURE__ */ jsx42(HigherZIndex, {
4821
4914
  disabled: noZIndex,
4822
4915
  onOutsideClick,
4823
4916
  onEscape,
4824
- children: /* @__PURE__ */ jsx41("div", {
4917
+ children: /* @__PURE__ */ jsx42("div", {
4825
4918
  style: panel,
4826
4919
  children
4827
4920
  })
@@ -4833,7 +4926,7 @@ var ModalContainer = ({ children, onEscape, onOutsideClick, noZIndex }) => {
4833
4926
  import { useCallback as useCallback24, useContext as useContext16 } from "react";
4834
4927
 
4835
4928
  // src/components/NewComposition/CancelButton.tsx
4836
- import { jsx as jsx42 } from "react/jsx-runtime";
4929
+ import { jsx as jsx43 } from "react/jsx-runtime";
4837
4930
  var style = {
4838
4931
  appearance: "none",
4839
4932
  border: "none",
@@ -4846,15 +4939,15 @@ var style = {
4846
4939
  };
4847
4940
  var CancelButton = ({ onPress, ...props }) => {
4848
4941
  const { tabIndex } = useZIndex();
4849
- return /* @__PURE__ */ jsx42("button", {
4942
+ return /* @__PURE__ */ jsx43("button", {
4850
4943
  tabIndex,
4851
4944
  style,
4852
4945
  type: "button",
4853
4946
  onClick: onPress,
4854
- children: /* @__PURE__ */ jsx42("svg", {
4947
+ children: /* @__PURE__ */ jsx43("svg", {
4855
4948
  viewBox: "0 0 320 512",
4856
4949
  ...props,
4857
- children: /* @__PURE__ */ jsx42("path", {
4950
+ children: /* @__PURE__ */ jsx43("path", {
4858
4951
  fill: "currentColor",
4859
4952
  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"
4860
4953
  })
@@ -4863,8 +4956,8 @@ var CancelButton = ({ onPress, ...props }) => {
4863
4956
  };
4864
4957
 
4865
4958
  // src/components/ModalHeader.tsx
4866
- import { jsx as jsx43, jsxs as jsxs13 } from "react/jsx-runtime";
4867
- var container11 = {
4959
+ import { jsx as jsx44, jsxs as jsxs14 } from "react/jsx-runtime";
4960
+ var container12 = {
4868
4961
  display: "flex",
4869
4962
  flexDirection: "row",
4870
4963
  alignItems: "center",
@@ -4885,15 +4978,15 @@ var ModalHeader = ({ title: title3, onClose }) => {
4885
4978
  const onPress = useCallback24(() => {
4886
4979
  setSelectedModal(null);
4887
4980
  }, [setSelectedModal]);
4888
- return /* @__PURE__ */ jsxs13("div", {
4889
- style: container11,
4981
+ return /* @__PURE__ */ jsxs14("div", {
4982
+ style: container12,
4890
4983
  children: [
4891
- /* @__PURE__ */ jsx43("div", {
4984
+ /* @__PURE__ */ jsx44("div", {
4892
4985
  style: titleStyle,
4893
4986
  children: title3
4894
4987
  }),
4895
- /* @__PURE__ */ jsx43(Flex, {}),
4896
- /* @__PURE__ */ jsx43(CancelButton, {
4988
+ /* @__PURE__ */ jsx44(Flex, {}),
4989
+ /* @__PURE__ */ jsx44(CancelButton, {
4897
4990
  style: icon,
4898
4991
  onPress: onClose ?? onPress
4899
4992
  })
@@ -4902,8 +4995,8 @@ var ModalHeader = ({ title: title3, onClose }) => {
4902
4995
  };
4903
4996
 
4904
4997
  // src/components/AskAiModal.tsx
4905
- import { jsx as jsx44, jsxs as jsxs14 } from "react/jsx-runtime";
4906
- var container12 = {
4998
+ import { jsx as jsx45, jsxs as jsxs15 } from "react/jsx-runtime";
4999
+ var container13 = {
4907
5000
  height: "calc(100vh - 100px)",
4908
5001
  width: "calc(100vw - 160px)",
4909
5002
  maxWidth: 800,
@@ -4955,21 +5048,21 @@ var AskAiModal = () => {
4955
5048
  if (state === "never-opened") {
4956
5049
  return null;
4957
5050
  }
4958
- return /* @__PURE__ */ jsx44(AbsoluteFill, {
5051
+ return /* @__PURE__ */ jsx45(AbsoluteFill, {
4959
5052
  style: { display: state === "visible" ? "block" : "none" },
4960
- children: /* @__PURE__ */ jsxs14(ModalContainer, {
5053
+ children: /* @__PURE__ */ jsxs15(ModalContainer, {
4961
5054
  noZIndex: state === "hidden",
4962
5055
  onOutsideClick: onQuit,
4963
5056
  onEscape: onQuit,
4964
5057
  children: [
4965
- /* @__PURE__ */ jsx44(ModalHeader, {
5058
+ /* @__PURE__ */ jsx45(ModalHeader, {
4966
5059
  title: "Ask AI",
4967
5060
  onClose: onQuit
4968
5061
  }),
4969
- /* @__PURE__ */ jsx44("iframe", {
5062
+ /* @__PURE__ */ jsx45("iframe", {
4970
5063
  ref: iframe,
4971
5064
  frameBorder: 0,
4972
- style: container12,
5065
+ style: container13,
4973
5066
  src: "https://www.remotion.dev/ai-embed",
4974
5067
  allow: "clipboard-read; clipboard-write"
4975
5068
  })
@@ -4979,32 +5072,32 @@ var AskAiModal = () => {
4979
5072
  };
4980
5073
 
4981
5074
  // src/components/SizeSelector.tsx
4982
- import { useContext as useContext20, useMemo as useMemo34 } from "react";
5075
+ import { useContext as useContext20, useMemo as useMemo35 } from "react";
4983
5076
  import { Internals as Internals14 } from "remotion";
4984
5077
 
4985
5078
  // src/icons/Checkmark.tsx
4986
- import { jsx as jsx45 } from "react/jsx-runtime";
5079
+ import { jsx as jsx46 } from "react/jsx-runtime";
4987
5080
  var style2 = {
4988
5081
  width: 14,
4989
5082
  height: 14
4990
5083
  };
4991
- var Checkmark = () => /* @__PURE__ */ jsx45("svg", {
5084
+ var Checkmark = () => /* @__PURE__ */ jsx46("svg", {
4992
5085
  focusable: "false",
4993
5086
  role: "img",
4994
5087
  viewBox: "0 0 512 512",
4995
5088
  style: style2,
4996
- children: /* @__PURE__ */ jsx45("path", {
5089
+ children: /* @__PURE__ */ jsx46("path", {
4997
5090
  fill: "currentColor",
4998
5091
  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"
4999
5092
  })
5000
5093
  });
5001
5094
 
5002
5095
  // src/components/ControlButton.tsx
5003
- import { useMemo as useMemo28 } from "react";
5004
- import { jsx as jsx46 } from "react/jsx-runtime";
5096
+ import { useMemo as useMemo29 } from "react";
5097
+ import { jsx as jsx47 } from "react/jsx-runtime";
5005
5098
  var CONTROL_BUTTON_PADDING = 6;
5006
5099
  var ControlButton = (props) => {
5007
- const style3 = useMemo28(() => {
5100
+ const style3 = useMemo29(() => {
5008
5101
  return {
5009
5102
  opacity: props.disabled ? 0.5 : 1,
5010
5103
  display: "inline-flex",
@@ -5014,7 +5107,7 @@ var ControlButton = (props) => {
5014
5107
  };
5015
5108
  }, [props.disabled]);
5016
5109
  const { tabIndex } = useZIndex();
5017
- return /* @__PURE__ */ jsx46("button", {
5110
+ return /* @__PURE__ */ jsx47("button", {
5018
5111
  type: "button",
5019
5112
  tabIndex,
5020
5113
  ...props,
@@ -5024,10 +5117,10 @@ var ControlButton = (props) => {
5024
5117
 
5025
5118
  // src/components/NewComposition/ComboBox.tsx
5026
5119
  import { PlayerInternals as PlayerInternals5 } from "@remotion/player";
5027
- import { useCallback as useCallback26, useEffect as useEffect17, useMemo as useMemo29, useRef as useRef14, useState as useState23 } from "react";
5120
+ import { useCallback as useCallback26, useEffect as useEffect17, useMemo as useMemo30, useRef as useRef14, useState as useState23 } from "react";
5028
5121
  import ReactDOM4 from "react-dom";
5029
- import { jsx as jsx47, jsxs as jsxs15, Fragment as Fragment6 } from "react/jsx-runtime";
5030
- var container13 = {
5122
+ import { jsx as jsx48, jsxs as jsxs16, Fragment as Fragment6 } from "react/jsx-runtime";
5123
+ var container14 = {
5031
5124
  padding: "8px 10px",
5032
5125
  display: "inline-block",
5033
5126
  backgroundColor: INPUT_BACKGROUND,
@@ -5101,25 +5194,25 @@ var Combobox = ({ values, selectedId, style: customStyle, title: title3 }) => {
5101
5194
  current.removeEventListener("click", onClick);
5102
5195
  };
5103
5196
  }, [refresh]);
5104
- const spaceToBottom = useMemo29(() => {
5197
+ const spaceToBottom = useMemo30(() => {
5105
5198
  const margin2 = 10;
5106
5199
  if (size && opened) {
5107
5200
  return size.windowSize.height - (size.top + size.height) - margin2;
5108
5201
  }
5109
5202
  return 0;
5110
5203
  }, [opened, size]);
5111
- const spaceToTop = useMemo29(() => {
5204
+ const spaceToTop = useMemo30(() => {
5112
5205
  const margin2 = 10;
5113
5206
  if (size && opened) {
5114
5207
  return size.top - margin2;
5115
5208
  }
5116
5209
  return 0;
5117
5210
  }, [opened, size]);
5118
- const derivedMaxHeight = useMemo29(() => {
5211
+ const derivedMaxHeight = useMemo30(() => {
5119
5212
  return spaceToTop > spaceToBottom ? spaceToTop : spaceToBottom;
5120
5213
  }, [spaceToBottom, spaceToTop]);
5121
5214
  const isMobileLayout = useMobileLayout();
5122
- const portalStyle = useMemo29(() => {
5215
+ const portalStyle = useMemo30(() => {
5123
5216
  if (!opened || !size) {
5124
5217
  return null;
5125
5218
  }
@@ -5146,9 +5239,9 @@ var Combobox = ({ values, selectedId, style: customStyle, title: title3 }) => {
5146
5239
  };
5147
5240
  }, [isMobileLayout, opened, size, spaceToBottom, spaceToTop]);
5148
5241
  const selected = values.find((v) => v.id === selectedId);
5149
- const style3 = useMemo29(() => {
5242
+ const style3 = useMemo30(() => {
5150
5243
  return {
5151
- ...container13,
5244
+ ...container14,
5152
5245
  ...customStyle ?? {},
5153
5246
  userSelect: "none",
5154
5247
  WebkitUserSelect: "none",
@@ -5159,9 +5252,9 @@ var Combobox = ({ values, selectedId, style: customStyle, title: title3 }) => {
5159
5252
  borderColor: opened ? SELECTED_BACKGROUND : hovered ? INPUT_BORDER_COLOR_HOVERED : INPUT_BORDER_COLOR_UNHOVERED
5160
5253
  };
5161
5254
  }, [customStyle, hovered, opened]);
5162
- return /* @__PURE__ */ jsxs15(Fragment6, {
5255
+ return /* @__PURE__ */ jsxs16(Fragment6, {
5163
5256
  children: [
5164
- /* @__PURE__ */ jsxs15("button", {
5257
+ /* @__PURE__ */ jsxs16("button", {
5165
5258
  ref,
5166
5259
  title: title3,
5167
5260
  tabIndex,
@@ -5169,29 +5262,29 @@ var Combobox = ({ values, selectedId, style: customStyle, title: title3 }) => {
5169
5262
  style: style3,
5170
5263
  className: MENU_INITIATOR_CLASSNAME,
5171
5264
  children: [
5172
- selected ? /* @__PURE__ */ jsx47("div", {
5265
+ selected ? /* @__PURE__ */ jsx48("div", {
5173
5266
  title: typeof selected.label === "string" ? selected.label : undefined,
5174
5267
  style: label2,
5175
5268
  children: selected?.label
5176
5269
  }) : null,
5177
- /* @__PURE__ */ jsx47(Spacing, {
5270
+ /* @__PURE__ */ jsx48(Spacing, {
5178
5271
  x: 1
5179
5272
  }),
5180
5273
  " ",
5181
- /* @__PURE__ */ jsx47(CaretDown, {})
5274
+ /* @__PURE__ */ jsx48(CaretDown, {})
5182
5275
  ]
5183
5276
  }),
5184
- portalStyle ? ReactDOM4.createPortal(/* @__PURE__ */ jsx47("div", {
5277
+ portalStyle ? ReactDOM4.createPortal(/* @__PURE__ */ jsx48("div", {
5185
5278
  style: fullScreenOverlay,
5186
- children: /* @__PURE__ */ jsx47("div", {
5279
+ children: /* @__PURE__ */ jsx48("div", {
5187
5280
  style: outerPortal,
5188
5281
  className: "css-reset",
5189
- children: /* @__PURE__ */ jsx47(HigherZIndex, {
5282
+ children: /* @__PURE__ */ jsx48(HigherZIndex, {
5190
5283
  onOutsideClick: onHide,
5191
5284
  onEscape: onHide,
5192
- children: /* @__PURE__ */ jsx47("div", {
5285
+ children: /* @__PURE__ */ jsx48("div", {
5193
5286
  style: portalStyle,
5194
- children: /* @__PURE__ */ jsx47(MenuContent, {
5287
+ children: /* @__PURE__ */ jsx48(MenuContent, {
5195
5288
  onNextMenu: noop,
5196
5289
  onPreviousMenu: noop,
5197
5290
  values,
@@ -5211,7 +5304,7 @@ var Combobox = ({ values, selectedId, style: customStyle, title: title3 }) => {
5211
5304
 
5212
5305
  // src/components/Preview.tsx
5213
5306
  import { PlayerInternals as PlayerInternals6 } from "@remotion/player";
5214
- import { useContext as useContext19, useEffect as useEffect23, useMemo as useMemo33, useRef as useRef17 } from "react";
5307
+ import { useContext as useContext19, useEffect as useEffect23, useMemo as useMemo34, useRef as useRef17 } from "react";
5215
5308
  import { Internals as Internals13 } from "remotion";
5216
5309
 
5217
5310
  // src/helpers/checkerboard-background.ts
@@ -5343,7 +5436,7 @@ import {
5343
5436
  forwardRef as forwardRef2,
5344
5437
  useEffect as useEffect19,
5345
5438
  useImperativeHandle as useImperativeHandle8,
5346
- useMemo as useMemo31,
5439
+ useMemo as useMemo32,
5347
5440
  useRef as useRef16,
5348
5441
  useState as useState25
5349
5442
  } from "react";
@@ -5353,17 +5446,17 @@ import {
5353
5446
  forwardRef,
5354
5447
  useEffect as useEffect18,
5355
5448
  useImperativeHandle as useImperativeHandle7,
5356
- useMemo as useMemo30,
5449
+ useMemo as useMemo31,
5357
5450
  useRef as useRef15,
5358
5451
  useState as useState24
5359
5452
  } from "react";
5360
- import { jsx as jsx48 } from "react/jsx-runtime";
5453
+ import { jsx as jsx49 } from "react/jsx-runtime";
5361
5454
  var INPUT_HORIZONTAL_PADDING = 8;
5362
5455
  var aligner = {
5363
5456
  marginRight: -INPUT_HORIZONTAL_PADDING
5364
5457
  };
5365
5458
  var RightAlignInput = ({ children }) => {
5366
- return /* @__PURE__ */ jsx48("div", {
5459
+ return /* @__PURE__ */ jsx49("div", {
5367
5460
  style: aligner,
5368
5461
  children
5369
5462
  });
@@ -5385,7 +5478,7 @@ var RemInputForwardRef = ({ status, rightAlign, ...props }, ref) => {
5385
5478
  const [isHovered, setIsHovered] = useState24(false);
5386
5479
  const inputRef = useRef15(null);
5387
5480
  const { tabIndex } = useZIndex();
5388
- const style3 = useMemo30(() => {
5481
+ const style3 = useMemo31(() => {
5389
5482
  return {
5390
5483
  backgroundColor: INPUT_BACKGROUND,
5391
5484
  ...inputBaseStyle,
@@ -5418,7 +5511,7 @@ var RemInputForwardRef = ({ status, rightAlign, ...props }, ref) => {
5418
5511
  current.removeEventListener("mouseleave", onMouseLeave);
5419
5512
  };
5420
5513
  }, [inputRef]);
5421
- return /* @__PURE__ */ jsx48("input", {
5514
+ return /* @__PURE__ */ jsx49("input", {
5422
5515
  ref: inputRef,
5423
5516
  tabIndex,
5424
5517
  ...props,
@@ -5428,7 +5521,7 @@ var RemInputForwardRef = ({ status, rightAlign, ...props }, ref) => {
5428
5521
  var RemotionInput = forwardRef(RemInputForwardRef);
5429
5522
 
5430
5523
  // src/components/NewComposition/RemTextarea.tsx
5431
- import { jsx as jsx49 } from "react/jsx-runtime";
5524
+ import { jsx as jsx50 } from "react/jsx-runtime";
5432
5525
  var inputBaseStyle2 = {
5433
5526
  padding: `${INPUT_HORIZONTAL_PADDING}px 10px`,
5434
5527
  color: "white",
@@ -5446,7 +5539,7 @@ var RemTextareaFRFunction = ({ status, ...props }, ref) => {
5446
5539
  useImperativeHandle8(ref, () => {
5447
5540
  return inputRef.current;
5448
5541
  }, []);
5449
- const style3 = useMemo31(() => {
5542
+ const style3 = useMemo32(() => {
5450
5543
  return {
5451
5544
  backgroundColor: INPUT_BACKGROUND,
5452
5545
  ...inputBaseStyle2,
@@ -5509,7 +5602,7 @@ var RemTextareaFRFunction = ({ status, ...props }, ref) => {
5509
5602
  current.removeEventListener("keydown", onKeyDown);
5510
5603
  };
5511
5604
  }, [inputRef]);
5512
- return /* @__PURE__ */ jsx49("textarea", {
5605
+ return /* @__PURE__ */ jsx50("textarea", {
5513
5606
  ref: inputRef,
5514
5607
  tabIndex,
5515
5608
  ...props,
@@ -5520,7 +5613,7 @@ var RemTextareaFRFunction = ({ status, ...props }, ref) => {
5520
5613
  var RemTextarea = forwardRef2(RemTextareaFRFunction);
5521
5614
 
5522
5615
  // src/components/JSONViewer.tsx
5523
- import { jsx as jsx50 } from "react/jsx-runtime";
5616
+ import { jsx as jsx51 } from "react/jsx-runtime";
5524
5617
  var jsonStyle = {
5525
5618
  marginTop: 14,
5526
5619
  marginBottom: 14,
@@ -5534,7 +5627,7 @@ var JSONViewer = ({ src }) => {
5534
5627
  setJson(JSON.stringify(jsonRes, null, 2));
5535
5628
  });
5536
5629
  }, [src]);
5537
- return /* @__PURE__ */ jsx50(RemTextarea, {
5630
+ return /* @__PURE__ */ jsx51(RemTextarea, {
5538
5631
  value: json ?? undefined,
5539
5632
  status: "ok",
5540
5633
  onChange: () => {
@@ -5546,7 +5639,7 @@ var JSONViewer = ({ src }) => {
5546
5639
 
5547
5640
  // src/components/TextViewer.tsx
5548
5641
  import { useEffect as useEffect21, useState as useState27 } from "react";
5549
- import { jsxs as jsxs16 } from "react/jsx-runtime";
5642
+ import { jsxs as jsxs17 } from "react/jsx-runtime";
5550
5643
  var textStyle = {
5551
5644
  margin: 14,
5552
5645
  fontFamily: "monospace",
@@ -5565,7 +5658,7 @@ var TextViewer = ({ src }) => {
5565
5658
  setTxt(text);
5566
5659
  });
5567
5660
  }, [src]);
5568
- return /* @__PURE__ */ jsxs16("div", {
5661
+ return /* @__PURE__ */ jsxs17("div", {
5569
5662
  style: textStyle,
5570
5663
  children: [
5571
5664
  txt,
@@ -5575,7 +5668,7 @@ var TextViewer = ({ src }) => {
5575
5668
  };
5576
5669
 
5577
5670
  // src/components/FilePreview.tsx
5578
- import { jsx as jsx51, jsxs as jsxs17, Fragment as Fragment7 } from "react/jsx-runtime";
5671
+ import { jsx as jsx52, jsxs as jsxs18, Fragment as Fragment7 } from "react/jsx-runtime";
5579
5672
  var msgStyle = {
5580
5673
  fontSize: 13,
5581
5674
  color: "white",
@@ -5591,42 +5684,42 @@ var FilePreview = ({ fileType, src, currentAsset, assetMetadata }) => {
5591
5684
  throw new Error('expected to have assetMetadata, got "not-found"');
5592
5685
  }
5593
5686
  if (fileType === "audio") {
5594
- return /* @__PURE__ */ jsx51("audio", {
5687
+ return /* @__PURE__ */ jsx52("audio", {
5595
5688
  src,
5596
5689
  controls: true
5597
5690
  });
5598
5691
  }
5599
5692
  if (fileType === "video") {
5600
- return /* @__PURE__ */ jsx51("video", {
5693
+ return /* @__PURE__ */ jsx52("video", {
5601
5694
  src,
5602
5695
  controls: true
5603
5696
  });
5604
5697
  }
5605
5698
  if (fileType === "image") {
5606
- return /* @__PURE__ */ jsx51("img", {
5699
+ return /* @__PURE__ */ jsx52("img", {
5607
5700
  src
5608
5701
  });
5609
5702
  }
5610
5703
  if (fileType === "json") {
5611
- return /* @__PURE__ */ jsx51(JSONViewer, {
5704
+ return /* @__PURE__ */ jsx52(JSONViewer, {
5612
5705
  src
5613
5706
  });
5614
5707
  }
5615
5708
  if (fileType === "txt") {
5616
- return /* @__PURE__ */ jsx51(TextViewer, {
5709
+ return /* @__PURE__ */ jsx52(TextViewer, {
5617
5710
  src
5618
5711
  });
5619
5712
  }
5620
- return /* @__PURE__ */ jsxs17(Fragment7, {
5713
+ return /* @__PURE__ */ jsxs18(Fragment7, {
5621
5714
  children: [
5622
- /* @__PURE__ */ jsx51("div", {
5715
+ /* @__PURE__ */ jsx52("div", {
5623
5716
  style: msgStyle,
5624
5717
  children: currentAsset
5625
5718
  }),
5626
- /* @__PURE__ */ jsx51(Spacing, {
5719
+ /* @__PURE__ */ jsx52(Spacing, {
5627
5720
  y: 0.5
5628
5721
  }),
5629
- /* @__PURE__ */ jsxs17("div", {
5722
+ /* @__PURE__ */ jsxs18("div", {
5630
5723
  style: msgStyle,
5631
5724
  children: [
5632
5725
  "Size: ",
@@ -5639,7 +5732,7 @@ var FilePreview = ({ fileType, src, currentAsset, assetMetadata }) => {
5639
5732
  };
5640
5733
 
5641
5734
  // src/components/RenderPreview.tsx
5642
- import { jsx as jsx52, jsxs as jsxs18 } from "react/jsx-runtime";
5735
+ import { jsx as jsx53, jsxs as jsxs19 } from "react/jsx-runtime";
5643
5736
  var msgStyle2 = {
5644
5737
  fontSize: 13,
5645
5738
  color: "white",
@@ -5688,13 +5781,13 @@ var RenderPreview = ({ path, assetMetadata, getBlob }) => {
5688
5781
  }, [getBlob]);
5689
5782
  const src = blobUrl ?? remotion_outputsBase + path;
5690
5783
  if (connectionStatus === "disconnected") {
5691
- return /* @__PURE__ */ jsx52("div", {
5784
+ return /* @__PURE__ */ jsx53("div", {
5692
5785
  style: errMsgStyle,
5693
5786
  children: "Studio server disconnected"
5694
5787
  });
5695
5788
  }
5696
5789
  if (getBlob && blobError) {
5697
- return /* @__PURE__ */ jsxs18("div", {
5790
+ return /* @__PURE__ */ jsxs19("div", {
5698
5791
  style: errMsgStyle,
5699
5792
  children: [
5700
5793
  "Failed to load preview: ",
@@ -5703,12 +5796,12 @@ var RenderPreview = ({ path, assetMetadata, getBlob }) => {
5703
5796
  });
5704
5797
  }
5705
5798
  if (getBlob && !blobUrl) {
5706
- return /* @__PURE__ */ jsx52("div", {
5799
+ return /* @__PURE__ */ jsx53("div", {
5707
5800
  style: msgStyle2,
5708
5801
  children: "Loading preview..."
5709
5802
  });
5710
5803
  }
5711
- return /* @__PURE__ */ jsx52(FilePreview, {
5804
+ return /* @__PURE__ */ jsx53(FilePreview, {
5712
5805
  assetMetadata,
5713
5806
  currentAsset: path,
5714
5807
  fileType,
@@ -5717,23 +5810,23 @@ var RenderPreview = ({ path, assetMetadata, getBlob }) => {
5717
5810
  };
5718
5811
 
5719
5812
  // src/components/Spinner.tsx
5720
- import { useMemo as useMemo32 } from "react";
5721
- import { jsx as jsx53, jsxs as jsxs19, Fragment as Fragment8 } from "react/jsx-runtime";
5813
+ import { useMemo as useMemo33 } from "react";
5814
+ import { jsx as jsx54, jsxs as jsxs20, Fragment as Fragment8 } from "react/jsx-runtime";
5722
5815
  var viewBox = 100;
5723
5816
  var lines = 8;
5724
5817
  var className = "__remotion_spinner_line";
5725
5818
  var remotionSpinnerAnimation = "__remotion_spinner_animation";
5726
5819
  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";
5727
5820
  var Spinner = ({ size, duration }) => {
5728
- const style3 = useMemo32(() => {
5821
+ const style3 = useMemo33(() => {
5729
5822
  return {
5730
5823
  width: size,
5731
5824
  height: size
5732
5825
  };
5733
5826
  }, [size]);
5734
- return /* @__PURE__ */ jsxs19(Fragment8, {
5827
+ return /* @__PURE__ */ jsxs20(Fragment8, {
5735
5828
  children: [
5736
- /* @__PURE__ */ jsx53("style", {
5829
+ /* @__PURE__ */ jsx54("style", {
5737
5830
  type: "text/css",
5738
5831
  children: `
5739
5832
  @keyframes ${remotionSpinnerAnimation} {
@@ -5750,11 +5843,11 @@ var Spinner = ({ size, duration }) => {
5750
5843
  }
5751
5844
  `
5752
5845
  }),
5753
- /* @__PURE__ */ jsx53("svg", {
5846
+ /* @__PURE__ */ jsx54("svg", {
5754
5847
  style: style3,
5755
5848
  viewBox: `0 0 ${viewBox} ${viewBox}`,
5756
5849
  children: new Array(lines).fill(true).map((_, index) => {
5757
- return /* @__PURE__ */ jsx53("path", {
5850
+ return /* @__PURE__ */ jsx54("path", {
5758
5851
  className,
5759
5852
  style: {
5760
5853
  rotate: `${index * Math.PI * 2 / lines}rad`,
@@ -5773,7 +5866,7 @@ var Spinner = ({ size, duration }) => {
5773
5866
  // src/components/StaticFilePreview.tsx
5774
5867
  import { useContext as useContext18 } from "react";
5775
5868
  import { staticFile as staticFile3 } from "remotion";
5776
- import { jsx as jsx54, jsxs as jsxs20 } from "react/jsx-runtime";
5869
+ import { jsx as jsx55, jsxs as jsxs21 } from "react/jsx-runtime";
5777
5870
  var msgStyle3 = {
5778
5871
  fontSize: 13,
5779
5872
  color: "white",
@@ -5792,13 +5885,13 @@ var StaticFilePreview = ({ currentAsset, assetMetadata }) => {
5792
5885
  const connectionStatus = useContext18(StudioServerConnectionCtx).previewServerState.type;
5793
5886
  const exists = staticFiles.find((file) => file.name === currentAsset);
5794
5887
  if (connectionStatus === "disconnected") {
5795
- return /* @__PURE__ */ jsx54("div", {
5888
+ return /* @__PURE__ */ jsx55("div", {
5796
5889
  style: errMsgStyle2,
5797
5890
  children: "Studio server disconnected"
5798
5891
  });
5799
5892
  }
5800
5893
  if (!exists) {
5801
- return /* @__PURE__ */ jsxs20("div", {
5894
+ return /* @__PURE__ */ jsxs21("div", {
5802
5895
  style: errMsgStyle2,
5803
5896
  children: [
5804
5897
  currentAsset,
@@ -5809,7 +5902,7 @@ var StaticFilePreview = ({ currentAsset, assetMetadata }) => {
5809
5902
  if (!currentAsset) {
5810
5903
  return null;
5811
5904
  }
5812
- return /* @__PURE__ */ jsx54(FilePreview, {
5905
+ return /* @__PURE__ */ jsx55(FilePreview, {
5813
5906
  currentAsset,
5814
5907
  fileType,
5815
5908
  src: `${staticFileSrc}?date=${assetMetadata && assetMetadata.type === "found" ? assetMetadata.fetchedAt : 0}`,
@@ -5818,7 +5911,7 @@ var StaticFilePreview = ({ currentAsset, assetMetadata }) => {
5818
5911
  };
5819
5912
 
5820
5913
  // src/components/Preview.tsx
5821
- import { jsx as jsx55 } from "react/jsx-runtime";
5914
+ import { jsx as jsx56 } from "react/jsx-runtime";
5822
5915
  var centeredContainer = {
5823
5916
  display: "flex",
5824
5917
  flex: 1,
@@ -5876,24 +5969,24 @@ var containerStyle = (options) => {
5876
5969
  };
5877
5970
  var VideoPreview = ({ canvasSize, contentDimensions, canvasContent, assetMetadata }) => {
5878
5971
  if (assetMetadata && assetMetadata.type === "not-found") {
5879
- return /* @__PURE__ */ jsx55("div", {
5972
+ return /* @__PURE__ */ jsx56("div", {
5880
5973
  style: centeredContainer,
5881
- children: /* @__PURE__ */ jsx55("div", {
5974
+ children: /* @__PURE__ */ jsx56("div", {
5882
5975
  style: label3,
5883
5976
  children: "File does not exist"
5884
5977
  })
5885
5978
  });
5886
5979
  }
5887
5980
  if (contentDimensions === null) {
5888
- return /* @__PURE__ */ jsx55("div", {
5981
+ return /* @__PURE__ */ jsx56("div", {
5889
5982
  style: centeredContainer,
5890
- children: /* @__PURE__ */ jsx55(Spinner, {
5983
+ children: /* @__PURE__ */ jsx56(Spinner, {
5891
5984
  duration: 0.5,
5892
5985
  size: 24
5893
5986
  })
5894
5987
  });
5895
5988
  }
5896
- return /* @__PURE__ */ jsx55(CompWhenItHasDimensions, {
5989
+ return /* @__PURE__ */ jsx56(CompWhenItHasDimensions, {
5897
5990
  contentDimensions,
5898
5991
  canvasSize,
5899
5992
  canvasContent,
@@ -5902,7 +5995,7 @@ var VideoPreview = ({ canvasSize, contentDimensions, canvasContent, assetMetadat
5902
5995
  };
5903
5996
  var CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent, assetMetadata }) => {
5904
5997
  const { size: previewSize } = useContext19(Internals13.PreviewSizeContext);
5905
- const { centerX, centerY, yCorrection, xCorrection, scale } = useMemo33(() => {
5998
+ const { centerX, centerY, yCorrection, xCorrection, scale } = useMemo34(() => {
5906
5999
  if (contentDimensions === "none") {
5907
6000
  return {
5908
6001
  centerX: 0,
@@ -5919,7 +6012,7 @@ var CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent, a
5919
6012
  previewSize: previewSize.size
5920
6013
  });
5921
6014
  }, [canvasSize, contentDimensions, previewSize.size]);
5922
- const outer = useMemo33(() => {
6015
+ const outer = useMemo34(() => {
5923
6016
  return {
5924
6017
  width: contentDimensions === "none" ? "100%" : contentDimensions.width * scale,
5925
6018
  height: contentDimensions === "none" ? "100%" : contentDimensions.height * scale,
@@ -5942,36 +6035,36 @@ var CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent, a
5942
6035
  canvasContent
5943
6036
  ]);
5944
6037
  if (canvasContent.type === "asset") {
5945
- return /* @__PURE__ */ jsx55("div", {
6038
+ return /* @__PURE__ */ jsx56("div", {
5946
6039
  style: outer,
5947
- children: /* @__PURE__ */ jsx55(StaticFilePreview, {
6040
+ children: /* @__PURE__ */ jsx56(StaticFilePreview, {
5948
6041
  assetMetadata,
5949
6042
  currentAsset: canvasContent.asset
5950
6043
  })
5951
6044
  });
5952
6045
  }
5953
6046
  if (canvasContent.type === "output") {
5954
- return /* @__PURE__ */ jsx55("div", {
6047
+ return /* @__PURE__ */ jsx56("div", {
5955
6048
  style: outer,
5956
- children: /* @__PURE__ */ jsx55(RenderPreview, {
6049
+ children: /* @__PURE__ */ jsx56(RenderPreview, {
5957
6050
  path: canvasContent.path,
5958
6051
  assetMetadata
5959
6052
  })
5960
6053
  });
5961
6054
  }
5962
6055
  if (canvasContent.type === "output-blob") {
5963
- return /* @__PURE__ */ jsx55("div", {
6056
+ return /* @__PURE__ */ jsx56("div", {
5964
6057
  style: outer,
5965
- children: /* @__PURE__ */ jsx55(RenderPreview, {
6058
+ children: /* @__PURE__ */ jsx56(RenderPreview, {
5966
6059
  path: canvasContent.displayName,
5967
6060
  assetMetadata,
5968
6061
  getBlob: canvasContent.getBlob
5969
6062
  })
5970
6063
  });
5971
6064
  }
5972
- return /* @__PURE__ */ jsx55("div", {
6065
+ return /* @__PURE__ */ jsx56("div", {
5973
6066
  style: outer,
5974
- children: /* @__PURE__ */ jsx55(PortalContainer, {
6067
+ children: /* @__PURE__ */ jsx56(PortalContainer, {
5975
6068
  contentDimensions,
5976
6069
  scale,
5977
6070
  xCorrection,
@@ -5981,7 +6074,7 @@ var CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent, a
5981
6074
  };
5982
6075
  var PortalContainer = ({ scale, xCorrection, yCorrection, contentDimensions }) => {
5983
6076
  const { checkerboard } = useContext19(CheckerboardContext);
5984
- const style3 = useMemo33(() => {
6077
+ const style3 = useMemo34(() => {
5985
6078
  return containerStyle({
5986
6079
  checkerboard,
5987
6080
  scale,
@@ -6006,14 +6099,14 @@ var PortalContainer = ({ scale, xCorrection, yCorrection, contentDimensions }) =
6006
6099
  };
6007
6100
  }, []);
6008
6101
  const portalContainer = useRef17(null);
6009
- return /* @__PURE__ */ jsx55("div", {
6102
+ return /* @__PURE__ */ jsx56("div", {
6010
6103
  ref: portalContainer,
6011
6104
  style: style3
6012
6105
  });
6013
6106
  };
6014
6107
 
6015
6108
  // src/components/SizeSelector.tsx
6016
- import { jsx as jsx56 } from "react/jsx-runtime";
6109
+ import { jsx as jsx57 } from "react/jsx-runtime";
6017
6110
  var commonPreviewSizes = [
6018
6111
  {
6019
6112
  size: "auto",
@@ -6074,12 +6167,12 @@ var zoomableFileTypes = ["video", "image"];
6074
6167
  var SizeSelector = () => {
6075
6168
  const { size, setSize } = useContext20(Internals14.PreviewSizeContext);
6076
6169
  const { canvasContent } = useContext20(Internals14.CompositionManager);
6077
- const style3 = useMemo34(() => {
6170
+ const style3 = useMemo35(() => {
6078
6171
  return {
6079
6172
  padding: CONTROL_BUTTON_PADDING
6080
6173
  };
6081
6174
  }, []);
6082
- const zoomable = useMemo34(() => {
6175
+ const zoomable = useMemo35(() => {
6083
6176
  if (!canvasContent) {
6084
6177
  return null;
6085
6178
  }
@@ -6094,7 +6187,7 @@ var SizeSelector = () => {
6094
6187
  }
6095
6188
  return false;
6096
6189
  }, [canvasContent]);
6097
- const items = useMemo34(() => {
6190
+ const items = useMemo35(() => {
6098
6191
  return getUniqueSizes(size).map((newSize) => {
6099
6192
  return {
6100
6193
  id: String(newSize.size),
@@ -6107,7 +6200,7 @@ var SizeSelector = () => {
6107
6200
  type: "item",
6108
6201
  value: newSize.size,
6109
6202
  keyHint: newSize.size === "auto" ? "0" : null,
6110
- leftItem: String(size.size) === String(newSize.size) ? /* @__PURE__ */ jsx56(Checkmark, {}) : null,
6203
+ leftItem: String(size.size) === String(newSize.size) ? /* @__PURE__ */ jsx57(Checkmark, {}) : null,
6111
6204
  subMenu: null,
6112
6205
  quickSwitcherLabel: null
6113
6206
  };
@@ -6116,10 +6209,10 @@ var SizeSelector = () => {
6116
6209
  if (!zoomable) {
6117
6210
  return null;
6118
6211
  }
6119
- return /* @__PURE__ */ jsx56("div", {
6212
+ return /* @__PURE__ */ jsx57("div", {
6120
6213
  style: style3,
6121
6214
  "aria-label": accessibilityLabel,
6122
- children: /* @__PURE__ */ jsx56(Combobox, {
6215
+ children: /* @__PURE__ */ jsx57(Combobox, {
6123
6216
  title: accessibilityLabel,
6124
6217
  style: comboStyle,
6125
6218
  selectedId: String(size.size),
@@ -6140,13 +6233,13 @@ import { Internals as Internals16 } from "remotion";
6140
6233
  import { NoReactInternals as NoReactInternals4 } from "remotion/no-react";
6141
6234
 
6142
6235
  // src/icons/timelineInOutPointer.tsx
6143
- import { jsx as jsx57 } from "react/jsx-runtime";
6236
+ import { jsx as jsx58 } from "react/jsx-runtime";
6144
6237
  var TimelineInPointer = (props) => {
6145
- return /* @__PURE__ */ jsx57("svg", {
6238
+ return /* @__PURE__ */ jsx58("svg", {
6146
6239
  viewBox: "0 0 256 256",
6147
6240
  fill: "none",
6148
6241
  ...props,
6149
- children: /* @__PURE__ */ jsx57("path", {
6242
+ children: /* @__PURE__ */ jsx58("path", {
6150
6243
  d: "M158 25H99V230.5H158",
6151
6244
  stroke: props.color,
6152
6245
  strokeWidth: "42",
@@ -6156,11 +6249,11 @@ var TimelineInPointer = (props) => {
6156
6249
  });
6157
6250
  };
6158
6251
  var TimelineOutPointer = (props) => {
6159
- return /* @__PURE__ */ jsx57("svg", {
6252
+ return /* @__PURE__ */ jsx58("svg", {
6160
6253
  viewBox: "0 0 256 256",
6161
6254
  fill: "none",
6162
6255
  ...props,
6163
- children: /* @__PURE__ */ jsx57("path", {
6256
+ children: /* @__PURE__ */ jsx58("path", {
6164
6257
  d: "M98 25H157V230.5H98",
6165
6258
  stroke: props.color,
6166
6259
  strokeWidth: "42",
@@ -6171,7 +6264,7 @@ var TimelineOutPointer = (props) => {
6171
6264
  };
6172
6265
 
6173
6266
  // src/state/in-out.ts
6174
- import { createContext as createContext12, useContext as useContext21, useMemo as useMemo35 } from "react";
6267
+ import { createContext as createContext12, useContext as useContext21, useMemo as useMemo36 } from "react";
6175
6268
  import { Internals as Internals15 } from "remotion";
6176
6269
  var TimelineInOutContext = createContext12({});
6177
6270
  var SetTimelineInOutContext = createContext12({
@@ -6184,7 +6277,7 @@ var useTimelineInOutFramePosition = () => {
6184
6277
  const state = useContext21(TimelineInOutContext);
6185
6278
  const id = videoConfig?.id;
6186
6279
  const durationInFrames = videoConfig?.durationInFrames;
6187
- return useMemo35(() => {
6280
+ return useMemo36(() => {
6188
6281
  if (!id || !durationInFrames) {
6189
6282
  return { inFrame: null, outFrame: null };
6190
6283
  }
@@ -6203,7 +6296,7 @@ var useTimelineSetInOutFramePosition = () => {
6203
6296
  };
6204
6297
 
6205
6298
  // src/components/TimelineInOutToggle.tsx
6206
- import { jsx as jsx58, jsxs as jsxs21, Fragment as Fragment9 } from "react/jsx-runtime";
6299
+ import { jsx as jsx59, jsxs as jsxs22, Fragment as Fragment9 } from "react/jsx-runtime";
6207
6300
  var getTooltipText = (pointType, key) => [
6208
6301
  `Mark ${pointType}`,
6209
6302
  areKeyboardShortcutsDisabled() ? null : `(${key})`,
@@ -6418,26 +6511,26 @@ var TimelineInOutPointToggle = () => {
6418
6511
  outMarkClick: onOutMark
6419
6512
  };
6420
6513
  }, [confId, onInMark, onInOutClear, onOutMark]);
6421
- return /* @__PURE__ */ jsxs21(Fragment9, {
6514
+ return /* @__PURE__ */ jsxs22(Fragment9, {
6422
6515
  children: [
6423
- /* @__PURE__ */ jsx58(ControlButton, {
6516
+ /* @__PURE__ */ jsx59(ControlButton, {
6424
6517
  title: getTooltipText("In", "I"),
6425
6518
  "aria-label": getTooltipText("In", "I"),
6426
6519
  onClick: onInMark,
6427
6520
  onContextMenu: clearInMark,
6428
6521
  disabled: !videoConfig || isFirstFrame,
6429
- children: /* @__PURE__ */ jsx58(TimelineInPointer, {
6522
+ children: /* @__PURE__ */ jsx59(TimelineInPointer, {
6430
6523
  color: inFrame === null ? "white" : BLUE,
6431
6524
  style: style3
6432
6525
  })
6433
6526
  }),
6434
- /* @__PURE__ */ jsx58(ControlButton, {
6527
+ /* @__PURE__ */ jsx59(ControlButton, {
6435
6528
  title: getTooltipText("Out", "O"),
6436
6529
  "aria-label": getTooltipText("Out", "O"),
6437
6530
  onClick: onOutMark,
6438
6531
  onContextMenu: clearOutMark,
6439
6532
  disabled: !videoConfig || isLastFrame,
6440
- children: /* @__PURE__ */ jsx58(TimelineOutPointer, {
6533
+ children: /* @__PURE__ */ jsx59(TimelineOutPointer, {
6441
6534
  color: outFrame === null ? "white" : BLUE,
6442
6535
  style: style3
6443
6536
  })
@@ -6446,43 +6539,6 @@ var TimelineInOutPointToggle = () => {
6446
6539
  });
6447
6540
  };
6448
6541
 
6449
- // src/error-overlay/remotion-overlay/ShortcutHint.tsx
6450
- import { useMemo as useMemo36 } from "react";
6451
- import { jsx as jsx59, jsxs as jsxs22 } from "react/jsx-runtime";
6452
- var cmdOrCtrlCharacter = window.navigator.platform.startsWith("Mac") ? "⌘" : "Ctrl";
6453
- var container14 = {
6454
- display: "inline-block",
6455
- marginLeft: 6,
6456
- opacity: 0.6,
6457
- verticalAlign: "middle",
6458
- fontSize: 14
6459
- };
6460
- var ShortcutHint = ({ keyToPress, cmdOrCtrl }) => {
6461
- const style4 = useMemo36(() => {
6462
- if (keyToPress === "↵") {
6463
- return {
6464
- display: "inline-block",
6465
- transform: `translateY(2px)`,
6466
- fontSize: 14
6467
- };
6468
- }
6469
- return {};
6470
- }, [keyToPress]);
6471
- if (areKeyboardShortcutsDisabled()) {
6472
- return null;
6473
- }
6474
- return /* @__PURE__ */ jsxs22("span", {
6475
- style: container14,
6476
- children: [
6477
- cmdOrCtrl ? `${cmdOrCtrlCharacter}` : "",
6478
- /* @__PURE__ */ jsx59("span", {
6479
- style: style4,
6480
- children: keyToPress.toUpperCase()
6481
- })
6482
- ]
6483
- });
6484
- };
6485
-
6486
6542
  // src/state/editor-guides.ts
6487
6543
  import { createContext as createContext13 } from "react";
6488
6544
  var persistEditorShowGuidesOption = (option) => {
@@ -16637,7 +16693,10 @@ var ClientRenderQueueProcessor = () => {
16637
16693
  onProgress: (progress) => {
16638
16694
  onProgress(job.id, {
16639
16695
  encodedFrames: progress.encodedFrames,
16640
- totalFrames
16696
+ totalFrames,
16697
+ doneIn: progress.doneIn,
16698
+ renderEstimatedTime: progress.renderEstimatedTime,
16699
+ progress: progress.progress
16641
16700
  });
16642
16701
  },
16643
16702
  outputTarget: "web-fs",
@@ -16928,8 +16987,7 @@ var RenderQueueItemStatus = ({ job }) => {
16928
16987
  if (job.status === "running") {
16929
16988
  let progressValue;
16930
16989
  if (isClientJob) {
16931
- const { encodedFrames, totalFrames } = job.progress;
16932
- progressValue = totalFrames > 0 ? encodedFrames / totalFrames : 0;
16990
+ progressValue = job.progress.progress;
16933
16991
  } else {
16934
16992
  progressValue = job.progress.value;
16935
16993
  }
@@ -17021,6 +17079,34 @@ var RenderQueueOutputName = ({ job }) => {
17021
17079
 
17022
17080
  // src/components/RenderQueue/RenderQueueProgressMessage.tsx
17023
17081
  import { useCallback as useCallback77, useContext as useContext43 } from "react";
17082
+
17083
+ // src/components/RenderQueue/client-render-progress.ts
17084
+ var formatEtaString = (timeRemainingInMilliseconds) => {
17085
+ const remainingTime = timeRemainingInMilliseconds / 1000;
17086
+ const remainingTimeHours = Math.floor(remainingTime / 3600);
17087
+ const remainingTimeMinutes = Math.floor(remainingTime % 3600 / 60);
17088
+ const remainingTimeSeconds = Math.floor(remainingTime % 60);
17089
+ return [
17090
+ remainingTimeHours ? `${remainingTimeHours}h` : null,
17091
+ remainingTimeMinutes ? `${remainingTimeMinutes}m` : null,
17092
+ `${remainingTimeSeconds}s`
17093
+ ].filter((value) => Boolean(value)).join(" ");
17094
+ };
17095
+ var getClientRenderProgressMessage = (progress) => {
17096
+ if (progress.totalFrames === 0) {
17097
+ return "Getting composition";
17098
+ }
17099
+ if (progress.doneIn !== null) {
17100
+ return `Encoded ${progress.totalFrames}/${progress.totalFrames}`;
17101
+ }
17102
+ if (progress.renderEstimatedTime > 0) {
17103
+ const etaString = `, time remaining: ${formatEtaString(progress.renderEstimatedTime)}`;
17104
+ return `Rendering ${progress.encodedFrames}/${progress.totalFrames}${etaString}`;
17105
+ }
17106
+ return `Encoded ${progress.encodedFrames}/${progress.totalFrames}`;
17107
+ };
17108
+
17109
+ // src/components/RenderQueue/RenderQueueProgressMessage.tsx
17024
17110
  import { jsx as jsx153 } from "react/jsx-runtime";
17025
17111
  var outputLocation2 = {
17026
17112
  ...renderQueueItemSubtitleStyle
@@ -17038,7 +17124,7 @@ var RenderQueueProgressMessage = ({ job }) => {
17038
17124
  jobId: job.id
17039
17125
  });
17040
17126
  }, [job.id, setSelectedModal]);
17041
- const message = isClientJob ? job.progress.totalFrames === 0 ? "Getting composition" : `Encoding frame ${job.progress.encodedFrames}/${job.progress.totalFrames}` : job.progress.message;
17127
+ const message = isClientJob ? getClientRenderProgressMessage(job.progress) : job.progress.message;
17042
17128
  return /* @__PURE__ */ jsx153("button", {
17043
17129
  onClick,
17044
17130
  type: "button",
@@ -26890,9 +26976,15 @@ var right3 = {
26890
26976
  textAlign: "right",
26891
26977
  flex: 1
26892
26978
  };
26893
- var EncodingProgress = ({ encodedFrames, totalFrames }) => {
26894
- const done = encodedFrames === totalFrames;
26895
- const progress = totalFrames > 0 ? encodedFrames / totalFrames : 0;
26979
+ var ProgressStatus = ({ encodedFrames, totalFrames, doneIn, renderEstimatedTime, progress }) => {
26980
+ const done = doneIn !== null;
26981
+ const message = getClientRenderProgressMessage({
26982
+ encodedFrames,
26983
+ totalFrames,
26984
+ doneIn,
26985
+ renderEstimatedTime,
26986
+ progress
26987
+ });
26896
26988
  return /* @__PURE__ */ jsxs120("div", {
26897
26989
  style: progressItem,
26898
26990
  children: [
@@ -26904,8 +26996,15 @@ var EncodingProgress = ({ encodedFrames, totalFrames }) => {
26904
26996
  }),
26905
26997
  /* @__PURE__ */ jsx237("div", {
26906
26998
  style: label10,
26907
- children: done ? `Encoded ${totalFrames} frames` : `Encoding ${encodedFrames} / ${totalFrames} frames`
26908
- })
26999
+ children: message
27000
+ }),
27001
+ doneIn !== null ? /* @__PURE__ */ jsxs120("div", {
27002
+ style: right3,
27003
+ children: [
27004
+ doneIn,
27005
+ "ms"
27006
+ ]
27007
+ }) : null
26909
27008
  ]
26910
27009
  });
26911
27010
  };
@@ -26963,15 +27062,18 @@ var ClientRenderProgress = ({ job }) => {
26963
27062
  ]
26964
27063
  });
26965
27064
  }
26966
- const { encodedFrames, totalFrames } = job.progress;
27065
+ const { encodedFrames, totalFrames, doneIn, renderEstimatedTime, progress } = job.progress;
26967
27066
  return /* @__PURE__ */ jsxs120("div", {
26968
27067
  children: [
26969
27068
  /* @__PURE__ */ jsx237(Spacing, {
26970
27069
  y: 0.5
26971
27070
  }),
26972
- job.type === "client-video" && /* @__PURE__ */ jsx237(EncodingProgress, {
27071
+ job.type === "client-video" && /* @__PURE__ */ jsx237(ProgressStatus, {
26973
27072
  encodedFrames,
26974
- totalFrames
27073
+ totalFrames,
27074
+ doneIn,
27075
+ renderEstimatedTime,
27076
+ progress
26975
27077
  }),
26976
27078
  /* @__PURE__ */ jsx237(Spacing, {
26977
27079
  y: 1
@@ -27392,7 +27494,7 @@ var addTrueBooleanFlagsIfChanged = (flags, mappings) => {
27392
27494
  }
27393
27495
  };
27394
27496
  var getNpmRemotionCommandPrefix = (version) => {
27395
- return version.trim() === "" ? "npx --yes --location=global -p @remotion/cli remotion" : `npx --yes --location=global -p @remotion/cli@${version} remotion`;
27497
+ return version.trim() === "" ? "bunx --yes --location=global -p @remotion/cli remotion" : `bunx --yes --location=global -p @remotion/cli@${version} remotion`;
27396
27498
  };
27397
27499
  var normalizeServeUrlForRenderCommand = ({
27398
27500
  locationHref,