@remotion/studio 4.0.523 → 4.0.524

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.
Files changed (98) hide show
  1. package/dist/components/ActionTooltip.d.ts +9 -0
  2. package/dist/components/ActionTooltip.js +143 -0
  3. package/dist/components/Canvas.js +3 -2
  4. package/dist/components/CheckboardToggle.js +7 -10
  5. package/dist/components/ElementInstallConfirmation.js +6 -41
  6. package/dist/components/FullscreenToggle.js +5 -8
  7. package/dist/components/GlobalKeybindings.js +57 -0
  8. package/dist/components/InspectorSequenceSection.js +5 -5
  9. package/dist/components/LazySyntaxHighlightedSource.d.ts +4 -0
  10. package/dist/components/LazySyntaxHighlightedSource.js +43 -0
  11. package/dist/components/LoopToggle.js +8 -2
  12. package/dist/components/MenuToolbar.js +6 -4
  13. package/dist/components/MuteToggle.d.ts +1 -0
  14. package/dist/components/MuteToggle.js +16 -6
  15. package/dist/components/NewComposition/NewComposition.d.ts +1 -0
  16. package/dist/components/NewComposition/NewComposition.js +5 -4
  17. package/dist/components/NewComposition/NewFolder.js +2 -4
  18. package/dist/components/NewComposition/RenameComposition.js +3 -2
  19. package/dist/components/NewComposition/RenameFolder.js +2 -4
  20. package/dist/components/NewComposition/SlugPreview.d.ts +7 -0
  21. package/dist/components/NewComposition/SlugPreview.js +18 -0
  22. package/dist/components/OutlineToggle.js +16 -10
  23. package/dist/components/PlayPause.js +7 -1
  24. package/dist/components/PlaybackKeyboardShortcutsManager.d.ts +2 -0
  25. package/dist/components/PlaybackKeyboardShortcutsManager.js +36 -1
  26. package/dist/components/PlaybackRateSelector.js +2 -2
  27. package/dist/components/PreviewToolbar.js +1 -1
  28. package/dist/components/PreviewToolbarOverflowButton.js +8 -2
  29. package/dist/components/RenderQueue/CaptionQueueItem.js +2 -1
  30. package/dist/components/RenderQueue/RenderQueueCopyToClipboard.js +2 -1
  31. package/dist/components/RenderQueue/RenderQueueDownloadItem.js +2 -1
  32. package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +2 -1
  33. package/dist/components/RenderQueue/RenderQueueOpenInFolder.js +2 -1
  34. package/dist/components/RenderQueue/RenderQueueRemoveItem.js +2 -1
  35. package/dist/components/RenderQueue/RenderQueueRepeat.js +2 -1
  36. package/dist/components/RenderQueue/VideoMattingQueueItem.js +2 -1
  37. package/dist/components/RulersAndGuidesToggle.js +7 -1
  38. package/dist/components/SettingsButton.js +8 -6
  39. package/dist/components/SettingsModal.js +1 -1
  40. package/dist/components/SidebarCollapserControls.js +13 -16
  41. package/dist/components/SizeSelector.js +2 -2
  42. package/dist/components/SnappingToggle.js +6 -8
  43. package/dist/components/StudioSettings.js +32 -18
  44. package/dist/components/SyntaxHighlightedSource.d.ts +5 -0
  45. package/dist/components/{HighlightedElementSource.js → SyntaxHighlightedSource.js} +2 -2
  46. package/dist/components/Timeline/Timeline.js +47 -39
  47. package/dist/components/Timeline/TimelineLayerChildren.js +12 -9
  48. package/dist/components/Timeline/TimelineZoomControls.js +2 -1
  49. package/dist/components/Timeline/timeline-field-display-utils.js +8 -5
  50. package/dist/components/TimelineCombobox.d.ts +1 -0
  51. package/dist/components/TimelineCombobox.js +8 -4
  52. package/dist/components/TimelineInOutToggle.js +8 -15
  53. package/dist/components/handle-drop.js +3 -2
  54. package/dist/components/keyboard-shortcuts.d.ts +4 -4
  55. package/dist/components/keyboard-shortcuts.js +23 -9
  56. package/dist/error-overlay/remotion-overlay/CodeFrame.js +29 -18
  57. package/dist/esm/LazyModels-hc33szyn.mjs +11 -0
  58. package/dist/esm/LazyModels-sg40rjw6.mjs +11 -0
  59. package/dist/esm/{HighlightedElementSource-jfc66k4p.mjs → SyntaxHighlightedSource-3xks91rz.mjs} +4 -4
  60. package/dist/esm/{TranscriptionModal-916jqhry.mjs → TranscriptionModal-3ctnxpt6.mjs} +7 -7
  61. package/dist/esm/{VideoMattingModal-2tm79s9b.mjs → VideoMattingModal-b0r7e60n.mjs} +7 -7
  62. package/dist/esm/{index-te66vvrp.mjs → index-1b9skrrd.mjs} +4 -4
  63. package/dist/esm/{index-1x7bsdh6.mjs → index-2j3d1g81.mjs} +2 -2
  64. package/dist/esm/{index-hy4xcgty.mjs → index-9qtvmwtx.mjs} +1 -1
  65. package/dist/esm/{index-6cvm9a65.mjs → index-c37kme2v.mjs} +842 -556
  66. package/dist/esm/{index-5qddp5h7.mjs → index-e3zwf3e7.mjs} +1 -1
  67. package/dist/esm/{index-x7t2y7ws.mjs → index-er3mh6em.mjs} +3584 -3090
  68. package/dist/esm/{index-jg13hf2g.mjs → index-k426ye99.mjs} +2 -1
  69. package/dist/esm/{index-sgtmgc4h.mjs → index-q2epbw93.mjs} +3 -3
  70. package/dist/esm/{index-3hgr6gjx.mjs → index-q5xv20xx.mjs} +1 -1
  71. package/dist/esm/{index-czwvnn9g.mjs → index-wbmp5srk.mjs} +1 -1
  72. package/dist/esm/{index-xhe2m2qr.mjs → index-yfrysr5f.mjs} +18 -10
  73. package/dist/esm/index.mjs +3 -3
  74. package/dist/esm/internals.mjs +8 -8
  75. package/dist/esm/previewEntry.mjs +8 -8
  76. package/dist/esm/renderEntry.mjs +3 -3
  77. package/dist/helpers/colors.d.ts +1 -0
  78. package/dist/helpers/colors.js +4 -3
  79. package/dist/helpers/inject-css.js +2 -2
  80. package/dist/helpers/prism-vsc-dark-plus.d.ts +1 -0
  81. package/dist/helpers/prism-vsc-dark-plus.js +305 -0
  82. package/dist/helpers/studio-runtime-config.d.ts +1 -1
  83. package/dist/helpers/use-create-composition.d.ts +1 -0
  84. package/dist/helpers/use-create-composition.js +12 -7
  85. package/dist/helpers/use-keybinding.d.ts +1 -1
  86. package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
  87. package/dist/helpers/use-menu-structure.js +1 -1
  88. package/dist/helpers/use-rename-composition.d.ts +1 -0
  89. package/dist/helpers/use-rename-composition.js +11 -5
  90. package/dist/icons/skills.js +1 -1
  91. package/dist/renderEntry.js +2 -2
  92. package/package.json +20 -20
  93. package/dist/components/HighlightedElementSource.d.ts +0 -5
  94. package/dist/esm/LazyModels-2trdm224.mjs +0 -11
  95. package/dist/esm/LazyModels-fjb5ckaq.mjs +0 -11
  96. package/dist/helpers/prism-tomorrow.d.ts +0 -1
  97. package/dist/helpers/prism-tomorrow.js +0 -151
  98. /package/dist/esm/{resolve-composition-component-location-14148845.mjs → resolve-composition-component-location-bt2d6qxq.mjs} +0 -0
@@ -58,7 +58,7 @@ import {
58
58
  useZodTypesIfPossible,
59
59
  watchPublicFolder,
60
60
  zodSafeParse
61
- } from "./index-hy4xcgty.mjs";
61
+ } from "./index-9qtvmwtx.mjs";
62
62
  import {
63
63
  BROWSER_STUDIO_OPERATIONS_READY_EVENT,
64
64
  canUseEffectOperations,
@@ -94,7 +94,7 @@ import {
94
94
  startCapturedPointerSession,
95
95
  useKeybinding,
96
96
  useZIndex
97
- } from "./index-xhe2m2qr.mjs";
97
+ } from "./index-yfrysr5f.mjs";
98
98
  import {
99
99
  getStudioKeyboardShortcutsEnabled
100
100
  } from "./index-5zrb1ft4.mjs";
@@ -158,10 +158,11 @@ import {
158
158
  WHITE_ALPHA_50,
159
159
  WHITE_ALPHA_72,
160
160
  WHITE_ALPHA_80,
161
+ WHITE_ALPHA_90,
161
162
  WHITE_FULL_HEX,
162
163
  WHITE_HEX,
163
164
  getBackgroundFromHoverState
164
- } from "./index-jg13hf2g.mjs";
165
+ } from "./index-k426ye99.mjs";
165
166
  import {
166
167
  __require,
167
168
  __toESM
@@ -2362,17 +2363,17 @@ var Checkbox = ({ checked, onChange, disabled, inputId, name, variant = "default
2362
2363
 
2363
2364
  // src/components/OptionsPanel.tsx
2364
2365
  import {
2365
- useCallback as useCallback131,
2366
+ useCallback as useCallback132,
2366
2367
  useContext as useContext82,
2367
2368
  useImperativeHandle as useImperativeHandle5,
2368
2369
  useMemo as useMemo126,
2369
- useState as useState72
2370
+ useState as useState73
2370
2371
  } from "react";
2371
- import { Internals as Internals61 } from "remotion";
2372
+ import { Internals as Internals62 } from "remotion";
2372
2373
 
2373
2374
  // src/components/InspectorPanel.tsx
2374
2375
  import { useContext as useContext70, useMemo as useMemo112 } from "react";
2375
- import { Internals as Internals57 } from "remotion";
2376
+ import { Internals as Internals58 } from "remotion";
2376
2377
 
2377
2378
  // src/components/CurrentAsset.tsx
2378
2379
  import { formatBytes } from "@remotion/studio-shared";
@@ -10548,7 +10549,7 @@ var loadCompositionComponentInfo = async ({
10548
10549
  if (files === null) {
10549
10550
  throw new Error(`Could not find source map contents for ${compositionFile}`);
10550
10551
  }
10551
- const { resolveCompositionComponentLocation } = await import("./resolve-composition-component-location-14148845.mjs");
10552
+ const { resolveCompositionComponentLocation } = await import("./resolve-composition-component-location-bt2d6qxq.mjs");
10552
10553
  return {
10553
10554
  canAddSequence: false,
10554
10555
  location: resolveCompositionComponentLocation({
@@ -11105,7 +11106,7 @@ import {
11105
11106
  useEffect as useEffect28,
11106
11107
  useMemo as useMemo59
11107
11108
  } from "react";
11108
- import { Internals as Internals8 } from "remotion";
11109
+ import { Internals as Internals9 } from "remotion";
11109
11110
 
11110
11111
  // src/helpers/get-git-menu-item.ts
11111
11112
  var getGitSourceName = (gitSource) => {
@@ -11232,11 +11233,17 @@ var resolvedStackToSymbolicated = (location) => {
11232
11233
  // src/helpers/use-rename-composition.ts
11233
11234
  import { useCallback as useCallback48, useMemo as useMemo53 } from "react";
11234
11235
 
11235
- // src/helpers/validate-new-comp-data.ts
11236
+ // src/helpers/slugify-name.ts
11236
11237
  import { Internals as Internals6 } from "remotion";
11238
+ var slugifyName = (name) => {
11239
+ return Internals6.isFolderNameValid(name) ? name : name.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-zA-Z0-9\u4E00-\u9FFF-]+/g, "-").replace(/^-+|-+$/g, "");
11240
+ };
11241
+
11242
+ // src/helpers/validate-new-comp-data.ts
11243
+ import { Internals as Internals7 } from "remotion";
11237
11244
  var validateCompositionName = (compName, compositions) => {
11238
- if (!Internals6.isCompositionIdValid(compName)) {
11239
- return Internals6.invalidCompositionErrorMessage;
11245
+ if (!Internals7.isCompositionIdValid(compName)) {
11246
+ return Internals7.invalidCompositionErrorMessage;
11240
11247
  }
11241
11248
  if (compositions.find((c) => c.id === compName)) {
11242
11249
  return `A composition with that name already exists.`;
@@ -11275,25 +11282,27 @@ var useRenameComposition = ({
11275
11282
  newId
11276
11283
  }) => {
11277
11284
  const getValidationMessage = useCallback48((value) => {
11278
- if (value === currentId) {
11285
+ const slug = slugifyName(value);
11286
+ if (slug === currentId) {
11279
11287
  return null;
11280
11288
  }
11281
- return validateCompositionName(value, compositions);
11289
+ return slug ? validateCompositionName(slug, compositions) : "Enter an ID containing letters or numbers.";
11282
11290
  }, [compositions, currentId]);
11283
11291
  const getCodemod = useCallback48((value) => {
11284
11292
  return {
11285
11293
  type: "rename-composition",
11286
11294
  idToRename: currentId,
11287
- newId: value
11295
+ newId: slugifyName(value)
11288
11296
  };
11289
11297
  }, [currentId]);
11298
+ const compositionId = slugifyName(newId);
11290
11299
  const validationMessage = useMemo53(() => {
11291
11300
  return getValidationMessage(newId);
11292
11301
  }, [getValidationMessage, newId]);
11293
11302
  const codemod = useMemo53(() => {
11294
11303
  return getCodemod(newId);
11295
11304
  }, [getCodemod, newId]);
11296
- const valid = validationMessage === null && currentId !== newId;
11305
+ const valid = validationMessage === null && currentId !== compositionId;
11297
11306
  const renameComposition = useCallback48(async ({
11298
11307
  newCompositionId,
11299
11308
  signal,
@@ -11306,12 +11315,13 @@ var useRenameComposition = ({
11306
11315
  symbolicatedStack
11307
11316
  });
11308
11317
  if (result.success) {
11309
- pushUrl(`/${newCompositionId}`);
11318
+ pushUrl(`/${slugifyName(newCompositionId)}`);
11310
11319
  }
11311
11320
  return result;
11312
11321
  }, [getCodemod]);
11313
11322
  return {
11314
11323
  codemod,
11324
+ compositionId,
11315
11325
  getValidationMessage,
11316
11326
  renameComposition,
11317
11327
  valid,
@@ -11321,7 +11331,7 @@ var useRenameComposition = ({
11321
11331
 
11322
11332
  // src/components/Timeline/use-resolved-stack.ts
11323
11333
  import { useContext as useContext19, useEffect as useEffect26, useState as useState32 } from "react";
11324
- import { Internals as Internals7 } from "remotion";
11334
+ import { Internals as Internals8 } from "remotion";
11325
11335
  var resolvedCache = new Map;
11326
11336
  var hasResolvedStack = (stack) => {
11327
11337
  if (!stack) {
@@ -11332,7 +11342,7 @@ var hasResolvedStack = (stack) => {
11332
11342
  var inFlight = new Set;
11333
11343
  var subscribers = new Map;
11334
11344
  var useResolvedStack = (stack) => {
11335
- const updateResolvedStackTrace = useContext19(Internals7.SequenceStackTracesUpdateContext);
11345
+ const updateResolvedStackTrace = useContext19(Internals8.SequenceStackTracesUpdateContext);
11336
11346
  const [value, setValue] = useState32(() => {
11337
11347
  if (!stack) {
11338
11348
  return null;
@@ -12466,8 +12476,8 @@ var renderReactIcon = (color) => {
12466
12476
  });
12467
12477
  };
12468
12478
  var CompositionInspectorHeader = () => {
12469
- const video = Internals8.useVideo();
12470
- const { compositions } = useContext22(Internals8.CompositionManager);
12479
+ const video = Internals9.useVideo();
12480
+ const { compositions } = useContext22(Internals9.CompositionManager);
12471
12481
  const { previewServerState } = useContext22(StudioServerConnectionCtx);
12472
12482
  const { canOpenInEditor: canOpenInEditor2, defaultEditorId } = useEditorOpening(previewServerState.type === "connected");
12473
12483
  const canOpenInGitHub = hasReadOnlyGitSource();
@@ -12574,7 +12584,7 @@ var CompositionInspectorHeader = () => {
12574
12584
 
12575
12585
  // src/components/InspectorPanel/CompositionMetadata.tsx
12576
12586
  import { useCallback as useCallback58, useEffect as useEffect29, useMemo as useMemo61, useRef as useRef20, useState as useState38 } from "react";
12577
- import { Internals as Internals9 } from "remotion";
12587
+ import { Internals as Internals10 } from "remotion";
12578
12588
 
12579
12589
  // src/components/InlineDropdown.tsx
12580
12590
  import { PlayerInternals as PlayerInternals6 } from "@remotion/player";
@@ -12929,8 +12939,8 @@ var CompositionMetadataValue = ({ computed, disabled, field, onSave, pendingValu
12929
12939
  });
12930
12940
  };
12931
12941
  var CompositionMetadata = ({ compositionId, disabled, stack }) => {
12932
- const video = Internals9.useVideo();
12933
- const resolvedVideoConfig = Internals9.useResolvedVideoConfig(compositionId);
12942
+ const video = Internals10.useVideo();
12943
+ const resolvedVideoConfig = Internals10.useResolvedVideoConfig(compositionId);
12934
12944
  const resolvedConfig = resolvedVideoConfig?.type === "success" || resolvedVideoConfig?.type === "success-and-refreshing" ? resolvedVideoConfig.result : null;
12935
12945
  const resolvedConfigRef = useRef20(resolvedConfig);
12936
12946
  resolvedConfigRef.current = resolvedConfig;
@@ -13317,7 +13327,7 @@ var ElementLibraryButton = () => {
13317
13327
 
13318
13328
  // src/components/InspectorPanel/use-composition-actions.ts
13319
13329
  import { useCallback as useCallback60, useContext as useContext24, useMemo as useMemo63, useState as useState39 } from "react";
13320
- import { Internals as Internals11 } from "remotion";
13330
+ import { Internals as Internals12 } from "remotion";
13321
13331
 
13322
13332
  // src/components/import-assets.ts
13323
13333
  import {
@@ -13325,7 +13335,7 @@ import {
13325
13335
  getRequiredPackageForInsertableElement,
13326
13336
  isUrl
13327
13337
  } from "@remotion/studio-shared";
13328
- import { Internals as Internals10, staticFile as staticFile3 } from "remotion";
13338
+ import { Internals as Internals11, staticFile as staticFile3 } from "remotion";
13329
13339
  import { NoReactInternals as NoReactInternals8 } from "remotion/no-react";
13330
13340
 
13331
13341
  // src/helpers/clipboard-figma.ts
@@ -13715,7 +13725,7 @@ var getMediaAssetMetadata = async (src) => {
13715
13725
  };
13716
13726
  };
13717
13727
  var getAnimatedImageAssetDuration = (src, contentType) => {
13718
- return Internals10.getAnimatedImageDurationInSeconds({
13728
+ return Internals11.getAnimatedImageDurationInSeconds({
13719
13729
  resolvedSrc: src,
13720
13730
  signal: new AbortController().signal,
13721
13731
  contentType
@@ -14282,7 +14292,7 @@ var insertComposition = async ({
14282
14292
  return;
14283
14293
  }
14284
14294
  try {
14285
- const resolver = Internals10.resolveCompositionsRef.current;
14295
+ const resolver = Internals11.resolveCompositionsRef.current;
14286
14296
  if (!resolver) {
14287
14297
  throw new Error("No composition resolver available");
14288
14298
  }
@@ -14360,8 +14370,8 @@ var insertElement = async ({
14360
14370
 
14361
14371
  // src/components/InspectorPanel/use-composition-actions.ts
14362
14372
  var useCompositionActions = () => {
14363
- const { compositions, canvasContent } = useContext24(Internals11.CompositionManager);
14364
- const videoConfig = Internals11.useUnsafeVideoConfig();
14373
+ const { compositions, canvasContent } = useContext24(Internals12.CompositionManager);
14374
+ const videoConfig = Internals12.useUnsafeVideoConfig();
14365
14375
  const [isAddingSolid, setIsAddingSolid] = useState39(false);
14366
14376
  const [isAddingAsset, setIsAddingAsset] = useState39(false);
14367
14377
  const [isAddingComposition, setIsAddingComposition] = useState39(false);
@@ -14869,7 +14879,7 @@ import {
14869
14879
  useState as useState43
14870
14880
  } from "react";
14871
14881
  import {
14872
- Internals as Internals28
14882
+ Internals as Internals29
14873
14883
  } from "remotion";
14874
14884
 
14875
14885
  // src/helpers/timeline-node-path-key.ts
@@ -15042,7 +15052,7 @@ var ExpandedTracksProvider = ({ children }) => {
15042
15052
 
15043
15053
  // src/components/Timeline/get-node-keyframes.ts
15044
15054
  import {
15045
- Internals as Internals12
15055
+ Internals as Internals13
15046
15056
  } from "remotion";
15047
15057
 
15048
15058
  // src/components/Timeline/get-timeline-keyframes.ts
@@ -15114,14 +15124,14 @@ var getNodeKeyframes = ({
15114
15124
  if (node.field.kind === "sequence-field") {
15115
15125
  const dragOverrides = getDragOverrides(nodePath);
15116
15126
  return withDragOverrideKeyframe({
15117
- propStatus: Internals12.getPropStatusesCtx(propStatuses, nodePath)?.[node.field.key],
15127
+ propStatus: Internals13.getPropStatusesCtx(propStatuses, nodePath)?.[node.field.key],
15118
15128
  keyframeDisplayOffset,
15119
15129
  timelinePosition,
15120
15130
  dragOverrideValue: dragOverrides[node.field.key],
15121
15131
  hasDragOverride: hasOverride(dragOverrides, node.field.key)
15122
15132
  });
15123
15133
  }
15124
- const effectStatus = Internals12.getEffectPropStatusesCtx({
15134
+ const effectStatus = Internals13.getEffectPropStatusesCtx({
15125
15135
  propStatuses,
15126
15136
  nodePath,
15127
15137
  effectIndex: node.field.effectIndex
@@ -15150,13 +15160,13 @@ var getNodeHasKeyframes = ({
15150
15160
  if (dragOverrides[node.field.key]?.type === "keyframed") {
15151
15161
  return true;
15152
15162
  }
15153
- return Internals12.getPropStatusesCtx(propStatuses, nodePath)?.[node.field.key]?.status === "keyframed";
15163
+ return Internals13.getPropStatusesCtx(propStatuses, nodePath)?.[node.field.key]?.status === "keyframed";
15154
15164
  }
15155
15165
  const effectDragOverrides = getEffectDragOverrides(nodePath, node.field.effectIndex);
15156
15166
  if (effectDragOverrides[node.field.key]?.type === "keyframed") {
15157
15167
  return true;
15158
15168
  }
15159
- const effectStatus = Internals12.getEffectPropStatusesCtx({
15169
+ const effectStatus = Internals13.getEffectPropStatusesCtx({
15160
15170
  propStatuses,
15161
15171
  nodePath,
15162
15172
  effectIndex: node.field.effectIndex
@@ -15289,7 +15299,7 @@ import {
15289
15299
  useLayoutEffect,
15290
15300
  useRef as useRef21
15291
15301
  } from "react";
15292
- import { Internals as Internals15, useVideoConfig } from "remotion";
15302
+ import { Internals as Internals16, useVideoConfig } from "remotion";
15293
15303
 
15294
15304
  // src/helpers/get-left-of-timeline-slider.ts
15295
15305
  var getXPositionOfItemInTimelineImperatively = (frame, duration, width) => {
@@ -15303,7 +15313,7 @@ import { flushSync } from "react-dom";
15303
15313
 
15304
15314
  // src/components/ZoomPersistor.tsx
15305
15315
  import { useContext as useContext26, useEffect as useEffect31 } from "react";
15306
- import { Internals as Internals13 } from "remotion";
15316
+ import { Internals as Internals14 } from "remotion";
15307
15317
 
15308
15318
  // src/components/load-canvas-content-from-url.ts
15309
15319
  var deriveCanvasContentFromRoute = (route) => {
@@ -15348,9 +15358,9 @@ var getZoomFromLocalStorage = () => {
15348
15358
  return zoom ? JSON.parse(zoom) : {};
15349
15359
  };
15350
15360
  var ZoomPersistor = () => {
15351
- const playing = Internals13.usePlaying();
15361
+ const playing = Internals14.usePlaying();
15352
15362
  const { zoom } = useContext26(TimelineZoomCtx);
15353
- const { canvasContent } = useContext26(Internals13.CompositionManager);
15363
+ const { canvasContent } = useContext26(Internals14.CompositionManager);
15354
15364
  const urlState = deriveCanvasContentFromUrl();
15355
15365
  const isActive = urlState && canvasContent && (urlState.type === "composition" && canvasContent.type === "composition" && urlState.compositionId === canvasContent.compositionId || urlState.type === "asset" && canvasContent.type === "asset" && urlState.asset === canvasContent.asset);
15356
15366
  useEffect31(() => {
@@ -15435,7 +15445,7 @@ var TimelineSliderHandle = () => {
15435
15445
  // src/components/Timeline/TimelineWidthProvider.tsx
15436
15446
  import { PlayerInternals as PlayerInternals7 } from "@remotion/player";
15437
15447
  import { createContext as createContext12, useContext as useContext27, useMemo as useMemo67 } from "react";
15438
- import { Internals as Internals14 } from "remotion";
15448
+ import { Internals as Internals15 } from "remotion";
15439
15449
  import { jsx as jsx115 } from "react/jsx-runtime";
15440
15450
  var TimelineWidthContext = createContext12(null);
15441
15451
  var TimelineWidthProvider = ({ children }) => {
@@ -15444,7 +15454,7 @@ var TimelineWidthProvider = ({ children }) => {
15444
15454
  shouldApplyCssTransforms: true
15445
15455
  });
15446
15456
  const { zoom: zoomMap } = useContext27(TimelineZoomCtx);
15447
- const videoConfig = Internals14.useUnsafeVideoConfig();
15457
+ const videoConfig = Internals15.useUnsafeVideoConfig();
15448
15458
  const width = useMemo67(() => {
15449
15459
  const scrollableWidth = size?.width ?? scrollableRef.current?.clientWidth;
15450
15460
  if (scrollableWidth === undefined) {
@@ -15500,7 +15510,7 @@ var getTimelineSliderTransform = ({
15500
15510
  };
15501
15511
  var redrawTimelineSliderFast = createRef3();
15502
15512
  var TimelineSlider = () => {
15503
- const videoConfig = Internals15.useUnsafeVideoConfig();
15513
+ const videoConfig = Internals16.useUnsafeVideoConfig();
15504
15514
  const timelineWidth = useContext28(TimelineWidthContext);
15505
15515
  if (videoConfig === null || timelineWidth === null) {
15506
15516
  return null;
@@ -15509,7 +15519,7 @@ var TimelineSlider = () => {
15509
15519
  };
15510
15520
  var TimelineSliderInner = () => {
15511
15521
  const videoConfig = useVideoConfig();
15512
- const timelinePosition = Internals15.Timeline.useTimelinePosition();
15522
+ const timelinePosition = Internals16.Timeline.useTimelinePosition();
15513
15523
  const ref2 = useRef21(null);
15514
15524
  const timelineWidth = useContext28(TimelineWidthContext);
15515
15525
  const { zoom: zoomMap } = useContext28(TimelineZoomCtx);
@@ -15959,7 +15969,7 @@ import {
15959
15969
  } from "@remotion/studio-shared";
15960
15970
  import { useContext as useContext29, useEffect as useEffect32 } from "react";
15961
15971
  import {
15962
- Internals as Internals22
15972
+ Internals as Internals23
15963
15973
  } from "remotion";
15964
15974
 
15965
15975
  // src/helpers/clipboard-images.ts
@@ -16116,10 +16126,10 @@ var applyEffectResponseToPropStatuses = ({
16116
16126
  };
16117
16127
 
16118
16128
  // src/components/Timeline/save-prop-queue.ts
16119
- import { Internals as Internals16 } from "remotion";
16129
+ import { Internals as Internals17 } from "remotion";
16120
16130
  var queues = new Map;
16121
16131
  var getQueue = (nodePath) => {
16122
- const key = Internals16.makeSequencePropsSubscriptionKey(nodePath);
16132
+ const key = Internals17.makeSequencePropsSubscriptionKey(nodePath);
16123
16133
  let q = queues.get(key);
16124
16134
  if (!q) {
16125
16135
  q = { chain: Promise.resolve(), cancelled: false };
@@ -16128,7 +16138,7 @@ var getQueue = (nodePath) => {
16128
16138
  return q;
16129
16139
  };
16130
16140
  var dropQueue = (nodePath, q) => {
16131
- const key = Internals16.makeSequencePropsSubscriptionKey(nodePath);
16141
+ const key = Internals17.makeSequencePropsSubscriptionKey(nodePath);
16132
16142
  if (queues.get(key) === q) {
16133
16143
  queues.delete(key);
16134
16144
  }
@@ -16622,7 +16632,7 @@ var callBatchUpdateKeyframeSettings = ({
16622
16632
  };
16623
16633
 
16624
16634
  // src/components/Timeline/delete-selected-timeline-item.ts
16625
- import { Internals as Internals19 } from "remotion";
16635
+ import { Internals as Internals20 } from "remotion";
16626
16636
 
16627
16637
  // src/components/delete-jsx-node-api.ts
16628
16638
  var deleteJsxNode = (request) => {
@@ -16631,7 +16641,7 @@ var deleteJsxNode = (request) => {
16631
16641
  };
16632
16642
 
16633
16643
  // src/components/Timeline/delete-selected-keyframe.ts
16634
- import { Internals as Internals17 } from "remotion";
16644
+ import { Internals as Internals18 } from "remotion";
16635
16645
 
16636
16646
  // src/components/Timeline/find-track-for-node-path-info.ts
16637
16647
  import { stringifySequenceExpandedRowKey as stringifySequenceExpandedRowKey3 } from "@remotion/studio-shared";
@@ -16657,7 +16667,7 @@ var getValueWhenLastKeyframeDeleted = ({
16657
16667
  if (propStatus?.status !== "keyframed") {
16658
16668
  return null;
16659
16669
  }
16660
- return Internals17.interpolateKeyframedStatus({
16670
+ return Internals18.interpolateKeyframedStatus({
16661
16671
  forceSpringAllowTail: null,
16662
16672
  frame: playheadSourceFrame,
16663
16673
  status: propStatus
@@ -16691,7 +16701,7 @@ var getSelectedKeyframeDeletion = ({
16691
16701
  if (!effect) {
16692
16702
  return null;
16693
16703
  }
16694
- const effectStatus = Internals17.getEffectPropStatusesCtx({
16704
+ const effectStatus = Internals18.getEffectPropStatusesCtx({
16695
16705
  propStatuses,
16696
16706
  nodePath,
16697
16707
  effectIndex: field.effectIndex
@@ -16718,7 +16728,7 @@ var getSelectedKeyframeDeletion = ({
16718
16728
  valueWhenLastKeyframeDeleted: effectValueWhenLastKeyframeDeleted
16719
16729
  };
16720
16730
  }
16721
- const sequencePropStatus = Internals17.getPropStatusesCtx(propStatuses, nodePath)?.[field.fieldKey];
16731
+ const sequencePropStatus = Internals18.getPropStatusesCtx(propStatuses, nodePath)?.[field.fieldKey];
16722
16732
  const keyframeDisplayOffset = getKeyframeDisplayOffset({
16723
16733
  propStatus: sequencePropStatus,
16724
16734
  keyframeDisplayOffset: track?.keyframeDisplayOffset ?? 0
@@ -16808,7 +16818,7 @@ import {
16808
16818
  LINEAR_KEYFRAME_EASING
16809
16819
  } from "@remotion/studio-shared";
16810
16820
  import { canEditEasingForInterpolationFunction as canEditEasingForInterpolationFunction2 } from "@remotion/studio-shared";
16811
- import { Internals as Internals18 } from "remotion";
16821
+ import { Internals as Internals19 } from "remotion";
16812
16822
  var isEasingSelection = (selection) => selection.type === "easing";
16813
16823
  var getSelectedEasingUpdate = ({
16814
16824
  selection,
@@ -16835,7 +16845,7 @@ var getSelectedEasingUpdate = ({
16835
16845
  if (!sequence.controls) {
16836
16846
  return null;
16837
16847
  }
16838
- const sequencePropStatus = Internals18.getPropStatusesCtx(propStatuses, nodePath)?.[field.fieldKey];
16848
+ const sequencePropStatus = Internals19.getPropStatusesCtx(propStatuses, nodePath)?.[field.fieldKey];
16839
16849
  if (sequencePropStatus?.status !== "keyframed" || isSchemaFieldHoldOnly({
16840
16850
  schema: sequence.controls.schema,
16841
16851
  key: field.fieldKey
@@ -16857,7 +16867,7 @@ var getSelectedEasingUpdate = ({
16857
16867
  if (!effect) {
16858
16868
  return null;
16859
16869
  }
16860
- const effectStatus = Internals18.getEffectPropStatusesCtx({
16870
+ const effectStatus = Internals19.getEffectPropStatusesCtx({
16861
16871
  propStatuses,
16862
16872
  nodePath,
16863
16873
  effectIndex: field.effectIndex
@@ -17100,7 +17110,7 @@ var getEasingSelectionAfterDeletingKeyframes = ({
17100
17110
  }
17101
17111
  const nodePath = selection.nodePathInfo.sequenceSubscriptionKey;
17102
17112
  if (field.type === "sequence") {
17103
- const sequencePropStatus = Internals19.getPropStatusesCtx(propStatuses, nodePath)?.[field.fieldKey];
17113
+ const sequencePropStatus = Internals20.getPropStatusesCtx(propStatuses, nodePath)?.[field.fieldKey];
17104
17114
  if (sequencePropStatus?.status !== "keyframed" || !canEditEasingForInterpolationFunction2(sequencePropStatus.interpolationFunction)) {
17105
17115
  return null;
17106
17116
  }
@@ -17117,7 +17127,7 @@ var getEasingSelectionAfterDeletingKeyframes = ({
17117
17127
  timelinePosition
17118
17128
  });
17119
17129
  }
17120
- const effectStatus = Internals19.getEffectPropStatusesCtx({
17130
+ const effectStatus = Internals20.getEffectPropStatusesCtx({
17121
17131
  propStatuses,
17122
17132
  nodePath,
17123
17133
  effectIndex: field.effectIndex
@@ -17303,13 +17313,13 @@ import {
17303
17313
  LINEAR_KEYFRAME_EASING as LINEAR_KEYFRAME_EASING2
17304
17314
  } from "@remotion/studio-shared";
17305
17315
  import {
17306
- Internals as Internals20
17316
+ Internals as Internals21
17307
17317
  } from "remotion";
17308
17318
  var getKeyframeClipboardFieldType = ({
17309
17319
  schema,
17310
17320
  fieldKey
17311
17321
  }) => {
17312
- const field = Internals20.getFlatSchemaWithAllKeys(schema)[fieldKey];
17322
+ const field = Internals21.getFlatSchemaWithAllKeys(schema)[fieldKey];
17313
17323
  if (!field) {
17314
17324
  return null;
17315
17325
  }
@@ -17357,7 +17367,7 @@ var resolveKeyframeField = ({
17357
17367
  if (!track.sequence.controls) {
17358
17368
  return null;
17359
17369
  }
17360
- const sequencePropStatus = Internals20.getPropStatusesCtx(propStatuses, nodePath)?.[identity.fieldKey];
17370
+ const sequencePropStatus = Internals21.getPropStatusesCtx(propStatuses, nodePath)?.[identity.fieldKey];
17361
17371
  if (!sequencePropStatus || sequencePropStatus.status === "computed") {
17362
17372
  return null;
17363
17373
  }
@@ -17379,7 +17389,7 @@ var resolveKeyframeField = ({
17379
17389
  };
17380
17390
  }
17381
17391
  const effect = track.sequence.effects[identity.effectIndex];
17382
- const effectStatus = Internals20.getEffectPropStatusesCtx({
17392
+ const effectStatus = Internals21.getEffectPropStatusesCtx({
17383
17393
  propStatuses,
17384
17394
  nodePath,
17385
17395
  effectIndex: identity.effectIndex
@@ -17405,7 +17415,7 @@ var resolveKeyframeField = ({
17405
17415
  };
17406
17416
  };
17407
17417
  var areResolvedFieldsEqual = (first, second) => {
17408
- if (Internals20.makeSequencePropsSubscriptionKey(first.nodePath) !== Internals20.makeSequencePropsSubscriptionKey(second.nodePath)) {
17418
+ if (Internals21.makeSequencePropsSubscriptionKey(first.nodePath) !== Internals21.makeSequencePropsSubscriptionKey(second.nodePath)) {
17409
17419
  return false;
17410
17420
  }
17411
17421
  if (first.identity.type !== second.identity.type) {
@@ -18078,7 +18088,7 @@ import {
18078
18088
  isKeyframeInterpolationFunction
18079
18089
  } from "@remotion/studio-shared";
18080
18090
  import {
18081
- Internals as Internals21
18091
+ Internals as Internals22
18082
18092
  } from "remotion";
18083
18093
  var propStatusToClipboardParam = (prop) => {
18084
18094
  if (prop.status === "computed") {
@@ -18120,11 +18130,11 @@ var getSequencePropClipboardDataFromSelection = ({
18120
18130
  if (!track?.sequence.controls) {
18121
18131
  return null;
18122
18132
  }
18123
- const field = Internals21.getFlatSchemaWithAllKeys(track.sequence.controls.schema)[selection.key];
18133
+ const field = Internals22.getFlatSchemaWithAllKeys(track.sequence.controls.schema)[selection.key];
18124
18134
  if (!field || !isKeyframeClipboardFieldType2(field.type)) {
18125
18135
  return null;
18126
18136
  }
18127
- const propStatus = Internals21.getPropStatusesCtx(propStatuses, track.nodePathInfo?.sequenceSubscriptionKey ?? selection.nodePathInfo.sequenceSubscriptionKey)?.[selection.key];
18137
+ const propStatus = Internals22.getPropStatusesCtx(propStatuses, track.nodePathInfo?.sequenceSubscriptionKey ?? selection.nodePathInfo.sequenceSubscriptionKey)?.[selection.key];
18128
18138
  if (!propStatus) {
18129
18139
  return null;
18130
18140
  }
@@ -18164,12 +18174,12 @@ var getPasteTargetForSelection = ({
18164
18174
  return { type: "uncopyable" };
18165
18175
  }
18166
18176
  const { schema } = track.sequence.controls;
18167
- const field = Internals21.getFlatSchemaWithAllKeys(schema)[fieldKey];
18177
+ const field = Internals22.getFlatSchemaWithAllKeys(schema)[fieldKey];
18168
18178
  if (!field || field.type !== payload.fieldType) {
18169
18179
  return { type: "incompatible" };
18170
18180
  }
18171
18181
  const nodePath = track.nodePathInfo.sequenceSubscriptionKey;
18172
- const propStatus = Internals21.getPropStatusesCtx(propStatuses, nodePath)?.[fieldKey];
18182
+ const propStatus = Internals22.getPropStatusesCtx(propStatuses, nodePath)?.[fieldKey];
18173
18183
  if (!propStatus || propStatus.status === "computed") {
18174
18184
  return { type: "uncopyable" };
18175
18185
  }
@@ -18216,7 +18226,7 @@ var getPasteSequencePropTarget = ({
18216
18226
  type: "valid",
18217
18227
  targets: [
18218
18228
  ...new Map(targets.map((target) => [
18219
- Internals21.makeSequencePropsSubscriptionKey(target.nodePath),
18229
+ Internals22.makeSequencePropsSubscriptionKey(target.nodePath),
18220
18230
  target
18221
18231
  ])).values()
18222
18232
  ]
@@ -18299,7 +18309,7 @@ var getSnapshotsFromSelection = ({
18299
18309
  return null;
18300
18310
  }
18301
18311
  const { sequenceSubscriptionKey } = selection.nodePathInfo;
18302
- const sequenceStatus = propStatuses[Internals22.makeSequencePropsSubscriptionKey(sequenceSubscriptionKey)];
18312
+ const sequenceStatus = propStatuses[Internals23.makeSequencePropsSubscriptionKey(sequenceSubscriptionKey)];
18303
18313
  if (!sequenceStatus || !sequenceStatus.canUpdate) {
18304
18314
  return null;
18305
18315
  }
@@ -18404,7 +18414,7 @@ var getEffectPropClipboardDataFromSelection = ({
18404
18414
  if (selection.type !== "sequence-effect-prop") {
18405
18415
  return null;
18406
18416
  }
18407
- const sequenceStatus = propStatuses[Internals22.makeSequencePropsSubscriptionKey(selection.nodePathInfo.sequenceSubscriptionKey)];
18417
+ const sequenceStatus = propStatuses[Internals23.makeSequencePropsSubscriptionKey(selection.nodePathInfo.sequenceSubscriptionKey)];
18408
18418
  if (!sequenceStatus || !sequenceStatus.canUpdate) {
18409
18419
  return null;
18410
18420
  }
@@ -18491,7 +18501,7 @@ var getPasteEffectPropTargetForSelection = ({
18491
18501
  if (!effect || !isVisibleFieldSchema(fieldSchema)) {
18492
18502
  return { type: "prop-mismatch" };
18493
18503
  }
18494
- const sequenceStatus = propStatuses[Internals22.makeSequencePropsSubscriptionKey(selection.nodePathInfo.sequenceSubscriptionKey)];
18504
+ const sequenceStatus = propStatuses[Internals23.makeSequencePropsSubscriptionKey(selection.nodePathInfo.sequenceSubscriptionKey)];
18495
18505
  if (!sequenceStatus?.canUpdate) {
18496
18506
  return { type: "uncopyable" };
18497
18507
  }
@@ -18557,10 +18567,10 @@ var TimelineClipboardKeybindings = () => {
18557
18567
  const { previewServerState } = useContext29(StudioServerConnectionCtx);
18558
18568
  const { canSelect } = useTimelineSelection();
18559
18569
  const currentSelection = useCurrentTimelineSelectionStateAsRef();
18560
- const propStatusesRef = useContext29(Internals22.VisualModePropStatusesRefContext);
18561
- const { setPropStatuses } = useContext29(Internals22.VisualModeSettersContext);
18562
- const sequencesRef = useContext29(Internals22.SequenceManagerRefContext);
18563
- const { overrideIdToNodePathMappings } = useContext29(Internals22.OverrideIdsToNodePathsGettersContext);
18570
+ const propStatusesRef = useContext29(Internals23.VisualModePropStatusesRefContext);
18571
+ const { setPropStatuses } = useContext29(Internals23.VisualModeSettersContext);
18572
+ const sequencesRef = useContext29(Internals23.SequenceManagerRefContext);
18573
+ const { overrideIdToNodePathMappings } = useContext29(Internals23.OverrideIdsToNodePathsGettersContext);
18564
18574
  const confirm = useConfirmationDialog();
18565
18575
  useEffect32(() => {
18566
18576
  if (!canSelect || previewServerState.type !== "connected") {
@@ -19083,7 +19093,7 @@ var TimelineClipboardKeybindings = () => {
19083
19093
 
19084
19094
  // src/components/Timeline/TimelineDeleteKeybindings.tsx
19085
19095
  import { useContext as useContext31, useEffect as useEffect33 } from "react";
19086
- import { Internals as Internals27 } from "remotion";
19096
+ import { Internals as Internals28 } from "remotion";
19087
19097
 
19088
19098
  // src/components/duplicate-jsx-node-api.ts
19089
19099
  var duplicateJsxNode = (request) => {
@@ -19172,7 +19182,7 @@ var duplicateSelectedTimelineItems = ({
19172
19182
 
19173
19183
  // src/components/Timeline/split-selected-timeline-item.ts
19174
19184
  import { hasSequenceTimingTraits } from "@remotion/studio-shared";
19175
- import { Internals as Internals23 } from "remotion";
19185
+ import { Internals as Internals24 } from "remotion";
19176
19186
 
19177
19187
  // src/components/split-jsx-sequence-api.ts
19178
19188
  var splitJsxSequence = (request) => {
@@ -19305,7 +19315,7 @@ var splitSelectedTimelineItems = ({
19305
19315
  overrideIdsToNodePaths,
19306
19316
  nodePathInfo: selection.nodePathInfo
19307
19317
  });
19308
- const sequencePropStatuses = propStatuses ? Internals23.getPropStatusesCtx(propStatuses, selection.nodePathInfo.sequenceSubscriptionKey) : undefined;
19318
+ const sequencePropStatuses = propStatuses ? Internals24.getPropStatusesCtx(propStatuses, selection.nodePathInfo.sequenceSubscriptionKey) : undefined;
19309
19319
  const eligibility = getTimelineSequenceSplitEligibility({
19310
19320
  selection,
19311
19321
  sequence: track?.sequence ?? null,
@@ -19325,7 +19335,7 @@ var splitSelectedTimelineItems = ({
19325
19335
  // src/components/Timeline/use-delete-timeline-items.ts
19326
19336
  import { LINEAR_KEYFRAME_EASING as LINEAR_KEYFRAME_EASING3 } from "@remotion/studio-shared";
19327
19337
  import { useCallback as useCallback64, useContext as useContext30 } from "react";
19328
- import { Internals as Internals26 } from "remotion";
19338
+ import { Internals as Internals27 } from "remotion";
19329
19339
 
19330
19340
  // src/state/editor-guides.ts
19331
19341
  import { createContext as createContext13 } from "react";
@@ -19367,11 +19377,11 @@ var EditorShowGuidesContext = createContext13({
19367
19377
 
19368
19378
  // src/components/Timeline/reset-selected-timeline-props.ts
19369
19379
  import { getEffectFieldsToShow as getEffectFieldsToShow3 } from "@remotion/studio-shared";
19370
- import { Internals as Internals25 } from "remotion";
19380
+ import { Internals as Internals26 } from "remotion";
19371
19381
 
19372
19382
  // src/components/Timeline/get-sequence-prop-reset-changes.ts
19373
19383
  import { getStylePropertyLonghandKeys } from "@remotion/studio-shared";
19374
- import { Internals as Internals24 } from "remotion";
19384
+ import { Internals as Internals25 } from "remotion";
19375
19385
  var isVisibleFieldSchema2 = (fieldSchema) => fieldSchema !== undefined && fieldSchema.type !== "hidden";
19376
19386
  var getDefaultValue3 = (fieldSchema) => fieldSchema.default !== undefined ? JSON.stringify(fieldSchema.default) : null;
19377
19387
  var getSequencePropResetChanges = ({
@@ -19382,7 +19392,7 @@ var getSequencePropResetChanges = ({
19382
19392
  defaultValue,
19383
19393
  schema
19384
19394
  }) => {
19385
- const flatSchema = Internals24.getFlatSchemaWithAllKeys(schema);
19395
+ const flatSchema = Internals25.getFlatSchemaWithAllKeys(schema);
19386
19396
  const longhandChanges = getStylePropertyLonghandKeys(fieldKey).flatMap((longhandKey) => {
19387
19397
  const fieldSchema = flatSchema[longhandKey];
19388
19398
  if (!isVisibleFieldSchema2(fieldSchema)) {
@@ -19446,7 +19456,7 @@ var getActiveFieldSchema = ({
19446
19456
  key,
19447
19457
  resolveValue
19448
19458
  }) => {
19449
- return Internals25.flattenActiveSchema(schema, resolveValue)[key];
19459
+ return Internals26.flattenActiveSchema(schema, resolveValue)[key];
19450
19460
  };
19451
19461
  var getTimelinePropResetTargets = ({
19452
19462
  selections,
@@ -19478,8 +19488,8 @@ var getTimelinePropResetTargets = ({
19478
19488
  if (!sequence.controls) {
19479
19489
  continue;
19480
19490
  }
19481
- const sequencePropStatus = Internals25.getPropStatusesCtx(propStatuses, nodePath);
19482
- const { merged: sequenceValuesDotNotation } = Internals25.computeEffectiveSchemaValuesDotNotation({
19491
+ const sequencePropStatus = Internals26.getPropStatusesCtx(propStatuses, nodePath);
19492
+ const { merged: sequenceValuesDotNotation } = Internals26.computeEffectiveSchemaValuesDotNotation({
19483
19493
  schema: sequence.controls.schema,
19484
19494
  currentValue: sequence.controls.runtimeValues.getSnapshot(),
19485
19495
  overrideValues: {},
@@ -19518,7 +19528,7 @@ var getTimelinePropResetTargets = ({
19518
19528
  getEffectDragOverrides: () => ({})
19519
19529
  }).find((candidate) => candidate.key === selection.key) : null;
19520
19530
  const fieldSchema = field?.fieldSchema;
19521
- const effectStatus = Internals25.getEffectPropStatusesCtx({
19531
+ const effectStatus = Internals26.getEffectPropStatusesCtx({
19522
19532
  propStatuses,
19523
19533
  nodePath,
19524
19534
  effectIndex: selection.i
@@ -19600,10 +19610,10 @@ var resetSelectedTimelineProps = ({
19600
19610
  // src/components/Timeline/use-delete-timeline-items.ts
19601
19611
  var useDeleteTimelineItems = () => {
19602
19612
  const { previewServerState } = useContext30(StudioServerConnectionCtx);
19603
- const sequencesRef = useContext30(Internals26.SequenceManagerRefContext);
19604
- const { overrideIdToNodePathMappings } = useContext30(Internals26.OverrideIdsToNodePathsGettersContext);
19605
- const propStatusesRef = useContext30(Internals26.VisualModePropStatusesRefContext);
19606
- const { setPropStatuses } = useContext30(Internals26.VisualModeSettersContext);
19613
+ const sequencesRef = useContext30(Internals27.SequenceManagerRefContext);
19614
+ const { overrideIdToNodePathMappings } = useContext30(Internals27.OverrideIdsToNodePathsGettersContext);
19615
+ const propStatusesRef = useContext30(Internals27.VisualModePropStatusesRefContext);
19616
+ const { setPropStatuses } = useContext30(Internals27.VisualModeSettersContext);
19607
19617
  const { setGuidesList } = useContext30(EditorShowGuidesContext);
19608
19618
  const currentSelection = useCurrentTimelineSelectionStateAsRef();
19609
19619
  const confirm = useConfirmationDialog();
@@ -19713,9 +19723,9 @@ var useDeleteTimelineItems = () => {
19713
19723
  var TimelineDeleteKeybindings = () => {
19714
19724
  const keybindings = useKeybinding();
19715
19725
  const { previewServerState } = useContext31(StudioServerConnectionCtx);
19716
- const sequencesRef = useContext31(Internals27.SequenceManagerRefContext);
19717
- const { overrideIdToNodePathMappings } = useContext31(Internals27.OverrideIdsToNodePathsGettersContext);
19718
- const propStatusesRef = useContext31(Internals27.VisualModePropStatusesRefContext);
19726
+ const sequencesRef = useContext31(Internals28.SequenceManagerRefContext);
19727
+ const { overrideIdToNodePathMappings } = useContext31(Internals28.OverrideIdsToNodePathsGettersContext);
19728
+ const propStatusesRef = useContext31(Internals28.VisualModePropStatusesRefContext);
19719
19729
  const { canSelect } = useTimelineSelection();
19720
19730
  const currentSelection = useCurrentTimelineSelectionStateAsRef();
19721
19731
  const confirm = useConfirmationDialog();
@@ -20070,10 +20080,10 @@ var getTimelineTreeNodeCanEditEasing = ({
20070
20080
  return false;
20071
20081
  }
20072
20082
  if (node.field.kind === "sequence-field") {
20073
- const sequencePropStatus = Internals28.getPropStatusesCtx(propStatuses, nodePathInfo.sequenceSubscriptionKey)?.[node.field.key];
20083
+ const sequencePropStatus = Internals29.getPropStatusesCtx(propStatuses, nodePathInfo.sequenceSubscriptionKey)?.[node.field.key];
20074
20084
  return sequencePropStatus?.status === "keyframed" && canEditEasingForInterpolationFunction3(sequencePropStatus.interpolationFunction);
20075
20085
  }
20076
- const effectStatus = Internals28.getEffectPropStatusesCtx({
20086
+ const effectStatus = Internals29.getEffectPropStatusesCtx({
20077
20087
  propStatuses,
20078
20088
  nodePath: nodePathInfo.sequenceSubscriptionKey,
20079
20089
  effectIndex: node.field.effectIndex
@@ -20265,8 +20275,8 @@ var TimelineEscapeKeybindings = () => {
20265
20275
  };
20266
20276
  var TimelineSelectableItemsProvider = ({ children, timeline }) => {
20267
20277
  const { getIsExpanded } = useContext32(ExpandedTracksGetterContext);
20268
- const { propStatuses } = useContext32(Internals28.VisualModePropStatusesContext);
20269
- const { getDragOverrides, getEffectDragOverrides } = useContext32(Internals28.VisualModeDragOverridesContext);
20278
+ const { propStatuses } = useContext32(Internals29.VisualModePropStatusesContext);
20279
+ const { getDragOverrides, getEffectDragOverrides } = useContext32(Internals29.VisualModeDragOverridesContext);
20270
20280
  const { selectedItems } = useTimelineSelection();
20271
20281
  const selectableItems = useMemo68(() => getSelectableTimelineItems({
20272
20282
  getDragOverrides,
@@ -20291,7 +20301,7 @@ var TimelineSelectableItemsProvider = ({ children, timeline }) => {
20291
20301
  };
20292
20302
  var TimelineSelectionProvider = ({ children }) => {
20293
20303
  const { previewServerState } = useContext32(StudioServerConnectionCtx);
20294
- const { canvasContent } = useContext32(Internals28.CompositionManager);
20304
+ const { canvasContent } = useContext32(Internals29.CompositionManager);
20295
20305
  const timelineSelectionScope = canvasContent?.type === "composition" ? canvasContent.compositionId : null;
20296
20306
  const { expandParentTracks } = useContext32(ExpandedTracksSetterContext);
20297
20307
  const canSelect = isStudioSelectionEnabled() && (previewServerState.type === "connected" || window.remotion_isReadOnlyStudio);
@@ -20811,7 +20821,7 @@ var getSameSequenceInspectorSelection = (selections) => {
20811
20821
  // src/components/InspectorPanel/MultiSequenceInspector.tsx
20812
20822
  import { stringifySequenceExpandedRowKey as stringifySequenceExpandedRowKey5 } from "@remotion/studio-shared";
20813
20823
  import { useContext as useContext43, useMemo as useMemo84, useSyncExternalStore as useSyncExternalStore2 } from "react";
20814
- import { Internals as Internals31 } from "remotion";
20824
+ import { Internals as Internals32 } from "remotion";
20815
20825
 
20816
20826
  // src/components/Timeline/TimelineRowLayoutContext.ts
20817
20827
  import { createContext as createContext15 } from "react";
@@ -20859,7 +20869,7 @@ var TimelineRowLayoutContext = createContext15({
20859
20869
 
20860
20870
  // src/components/InspectorPanel/MultiSequenceField.tsx
20861
20871
  import { useCallback as useCallback84, useContext as useContext42, useEffect as useEffect36, useState as useState53 } from "react";
20862
- import { Internals as Internals30 } from "remotion";
20872
+ import { Internals as Internals31 } from "remotion";
20863
20873
 
20864
20874
  // src/components/Timeline/TimelineExpandArrowButton.tsx
20865
20875
  import React70, { useMemo as useMemo69 } from "react";
@@ -21881,11 +21891,8 @@ var formatNumberTimelineFieldValueForDisplay = ({
21881
21891
  const digits = getDecimalPlaces2(numericValue);
21882
21892
  return digits === 0 ? String(numericValue) : numericValue.toFixed(digits);
21883
21893
  }
21884
- return formatTimelineNumber({
21885
- decimalPlaces: stepDecimals,
21886
- fixed: true,
21887
- value: numericValue
21888
- });
21894
+ const normalizedValue = getDecimalPlaces2(numericValue) > stepDecimals ? Number(numericValue.toPrecision(15)) : numericValue;
21895
+ return getDecimalPlaces2(normalizedValue) > stepDecimals ? String(normalizedValue) : normalizedValue.toFixed(stepDecimals);
21889
21896
  };
21890
21897
  var formatRotationTimelineFieldValueForDisplay = ({
21891
21898
  fieldSchema,
@@ -24836,12 +24843,12 @@ import { NoReactInternals as NoReactInternals10 } from "remotion/no-react";
24836
24843
 
24837
24844
  // src/state/scale-lock.tsx
24838
24845
  import React84, { useCallback as useCallback76, useMemo as useMemo78, useState as useState47 } from "react";
24839
- import { Internals as Internals29 } from "remotion";
24846
+ import { Internals as Internals30 } from "remotion";
24840
24847
  import { jsx as jsx133 } from "react/jsx-runtime";
24841
24848
  var makeScaleLockKey = ({
24842
24849
  fieldKey,
24843
24850
  nodePath
24844
- }) => `${Internals29.makeSequencePropsSubscriptionKey(nodePath)}.${fieldKey}`;
24851
+ }) => `${Internals30.makeSequencePropsSubscriptionKey(nodePath)}.${fieldKey}`;
24845
24852
  var ScaleLockContext = React84.createContext({
24846
24853
  getScaleLockState: ({ defaultValue }) => defaultValue,
24847
24854
  setScaleLockState: () => {
@@ -26768,12 +26775,12 @@ var MultiSequenceNumberField = (props) => {
26768
26775
  // src/components/InspectorPanel/MultiSequenceField.tsx
26769
26776
  import { jsx as jsx143, jsxs as jsxs69, Fragment as Fragment23 } from "react/jsx-runtime";
26770
26777
  var MultiSequenceField = ({ field, targets, readOnlyStudio }) => {
26771
- const { propStatuses } = useContext42(Internals30.VisualModePropStatusesContext);
26772
- const { setPropStatuses, setDragOverrides, clearDragOverrides } = useContext42(Internals30.VisualModeSettersContext);
26778
+ const { propStatuses } = useContext42(Internals31.VisualModePropStatusesContext);
26779
+ const { setPropStatuses, setDragOverrides, clearDragOverrides } = useContext42(Internals31.VisualModeSettersContext);
26773
26780
  const { previewServerState } = useContext42(StudioServerConnectionCtx);
26774
26781
  const [editingMixed, setEditingMixed] = useState53(false);
26775
- const statuses = targets.map((target) => Internals30.getPropStatusesCtx(propStatuses, target.nodePath)?.[field.key]);
26776
- const values = statuses.map((status) => status?.status === "static" ? Internals30.getEffectiveVisualModeValue({
26782
+ const statuses = targets.map((target) => Internals31.getPropStatusesCtx(propStatuses, target.nodePath)?.[field.key]);
26783
+ const values = statuses.map((status) => status?.status === "static" ? Internals31.getEffectiveVisualModeValue({
26777
26784
  propStatus: status,
26778
26785
  dragOverrideValue: undefined,
26779
26786
  defaultValue: field.fieldSchema.default,
@@ -26793,7 +26800,7 @@ var MultiSequenceField = ({ field, targets, readOnlyStudio }) => {
26793
26800
  return;
26794
26801
  }
26795
26802
  for (const [index, target] of targets.entries()) {
26796
- setDragOverrides(target.nodePath, field.key, Internals30.makeStaticDragOverride(nextValues[index]));
26803
+ setDragOverrides(target.nodePath, field.key, Internals31.makeStaticDragOverride(nextValues[index]));
26797
26804
  }
26798
26805
  }, [editable, field.key, setDragOverrides, targets]);
26799
26806
  const save = useCallback84(async (nextValues, options) => {
@@ -26911,10 +26918,10 @@ var selectionCountStyle = {
26911
26918
  whiteSpace: "nowrap"
26912
26919
  };
26913
26920
  var MultiSequenceInspector = ({ selections, readOnlyStudio }) => {
26914
- const { sequences } = useContext43(Internals31.SequenceManager);
26915
- const { overrideIdToNodePathMappings } = useContext43(Internals31.OverrideIdsToNodePathsGettersContext);
26916
- const { propStatuses } = useContext43(Internals31.VisualModePropStatusesContext);
26917
- const { getDragOverrides } = useContext43(Internals31.VisualModeDragOverridesContext);
26921
+ const { sequences } = useContext43(Internals32.SequenceManager);
26922
+ const { overrideIdToNodePathMappings } = useContext43(Internals32.OverrideIdsToNodePathsGettersContext);
26923
+ const { propStatuses } = useContext43(Internals32.VisualModePropStatusesContext);
26924
+ const { getDragOverrides } = useContext43(Internals32.VisualModeDragOverridesContext);
26918
26925
  const targets = useMemo84(() => {
26919
26926
  const tracks = calculateTimeline({
26920
26927
  sequences,
@@ -27010,7 +27017,7 @@ var MultiSequenceInspector = ({ selections, readOnlyStudio }) => {
27010
27017
 
27011
27018
  // src/components/InspectorPanel/EasingInspector.tsx
27012
27019
  import { useCallback as useCallback100, useContext as useContext57, useMemo as useMemo99 } from "react";
27013
- import { Internals as Internals42, useVideoConfig as useVideoConfig5 } from "remotion";
27020
+ import { Internals as Internals43, useVideoConfig as useVideoConfig5 } from "remotion";
27014
27021
 
27015
27022
  // src/helpers/use-runtime-values.ts
27016
27023
  import { useCallback as useCallback85, useMemo as useMemo85 } from "react";
@@ -27120,7 +27127,7 @@ import {
27120
27127
  useRef as useRef28,
27121
27128
  useState as useState54
27122
27129
  } from "react";
27123
- import { Easing, Internals as Internals32 } from "remotion";
27130
+ import { Easing, Internals as Internals33 } from "remotion";
27124
27131
  import { jsx as jsx145, jsxs as jsxs71, Fragment as Fragment24 } from "react/jsx-runtime";
27125
27132
  var SVG_WIDTH = 560;
27126
27133
  var SVG_HEIGHT = 320;
@@ -27358,14 +27365,14 @@ var areEasingsEqual = (first, second) => {
27358
27365
  }
27359
27366
  };
27360
27367
  var getEasingUpdateTargetKey = (update) => {
27361
- const nodePathKey = Internals32.makeSequencePropsSubscriptionKey(update.nodePath);
27368
+ const nodePathKey = Internals33.makeSequencePropsSubscriptionKey(update.nodePath);
27362
27369
  if (update.type === "sequence") {
27363
27370
  return `sequence:${nodePathKey}:${update.fieldKey}:${update.segmentIndex}`;
27364
27371
  }
27365
27372
  return `effect:${nodePathKey}:${update.effectIndex}:${update.fieldKey}:${update.segmentIndex}`;
27366
27373
  };
27367
27374
  var getBuiltInVisualStyleFieldSchema = (fieldKey) => {
27368
- const transformSchema = Internals32.transformSchema;
27375
+ const transformSchema = Internals33.transformSchema;
27369
27376
  const directField = transformSchema[fieldKey];
27370
27377
  if (directField) {
27371
27378
  return directField;
@@ -27578,16 +27585,16 @@ var EasingPresetButton = ({ currentEasing, disabled, onClick, preset }) => {
27578
27585
  };
27579
27586
  var EasingEditor = ({ state, renderHeader }) => {
27580
27587
  const { previewServerState } = useContext44(StudioServerConnectionCtx);
27581
- const sequencesRef = useContext44(Internals32.SequenceManagerRefContext);
27582
- const propStatusesRef = useContext44(Internals32.VisualModePropStatusesRefContext);
27588
+ const sequencesRef = useContext44(Internals33.SequenceManagerRefContext);
27589
+ const propStatusesRef = useContext44(Internals33.VisualModePropStatusesRefContext);
27583
27590
  const {
27584
27591
  setDragOverrides,
27585
27592
  clearDragOverrides,
27586
27593
  setEffectDragOverrides,
27587
27594
  clearEffectDragOverrides,
27588
27595
  setPropStatuses
27589
- } = useContext44(Internals32.VisualModeSettersContext);
27590
- const { overrideIdToNodePathMappings } = useContext44(Internals32.OverrideIdsToNodePathsGettersContext);
27596
+ } = useContext44(Internals33.VisualModeSettersContext);
27597
+ const { overrideIdToNodePathMappings } = useContext44(Internals33.OverrideIdsToNodePathsGettersContext);
27591
27598
  const svgRef = useRef28(null);
27592
27599
  const [mode, setMode] = useState54(() => easingToMode(state.initialEasing));
27593
27600
  const [bezier, setBezier] = useState54(() => easingToBezier(state.initialEasing));
@@ -27622,7 +27629,7 @@ var EasingEditor = ({ state, renderHeader }) => {
27622
27629
  const sequenceTargets = new Set;
27623
27630
  const effectTargets = new Set;
27624
27631
  for (const update of updates) {
27625
- const key = Internals32.makeSequencePropsSubscriptionKey(update.nodePath);
27632
+ const key = Internals33.makeSequencePropsSubscriptionKey(update.nodePath);
27626
27633
  if (update.type === "sequence") {
27627
27634
  if (!sequenceTargets.has(key)) {
27628
27635
  sequenceTargets.add(key);
@@ -28402,7 +28409,7 @@ var getEasingSelectionFromCurrentKeyframes = ({
28402
28409
 
28403
28410
  // src/components/InspectorPanel/KeyframeEasingNavigator.tsx
28404
28411
  import { useCallback as useCallback91, useMemo as useMemo90 } from "react";
28405
- import { Internals as Internals35, useVideoConfig as useVideoConfig4 } from "remotion";
28412
+ import { Internals as Internals36, useVideoConfig as useVideoConfig4 } from "remotion";
28406
28413
 
28407
28414
  // src/components/Timeline/TimelineKeyframeDiamondIcon.tsx
28408
28415
  import { jsx as jsx146, jsxs as jsxs72 } from "react/jsx-runtime";
@@ -28443,7 +28450,7 @@ import {
28443
28450
  LINEAR_KEYFRAME_EASING as LINEAR_KEYFRAME_EASING5
28444
28451
  } from "@remotion/studio-shared";
28445
28452
  import React98, { useCallback as useCallback90, useContext as useContext47, useMemo as useMemo89, useRef as useRef30 } from "react";
28446
- import { Internals as Internals34, useVideoConfig as useVideoConfig3 } from "remotion";
28453
+ import { Internals as Internals35, useVideoConfig as useVideoConfig3 } from "remotion";
28447
28454
 
28448
28455
  // src/components/ContextMenu.tsx
28449
28456
  import { PlayerInternals as PlayerInternals9 } from "@remotion/player";
@@ -28782,7 +28789,7 @@ import {
28782
28789
  moveKeyframesInPropStatus
28783
28790
  } from "@remotion/studio-shared";
28784
28791
  import { useCallback as useCallback89, useContext as useContext46 } from "react";
28785
- import { Internals as Internals33, useVideoConfig as useVideoConfig2 } from "remotion";
28792
+ import { Internals as Internals34, useVideoConfig as useVideoConfig2 } from "remotion";
28786
28793
 
28787
28794
  // src/components/Timeline/get-bounded-keyframe-drag-delta.ts
28788
28795
  var getBoundedKeyframeDragDelta = ({
@@ -28938,7 +28945,7 @@ var getTimelineSelectionsAfterEasingKeyframeDrag = ({
28938
28945
  var getCodeValueForTarget = ({
28939
28946
  propStatuses,
28940
28947
  nodePath
28941
- }) => propStatuses[Internals33.makeSequencePropsSubscriptionKey(nodePath)];
28948
+ }) => propStatuses[Internals34.makeSequencePropsSubscriptionKey(nodePath)];
28942
28949
  var getTimelineKeyframeDragTarget = ({
28943
28950
  propStatuses,
28944
28951
  displayFrame,
@@ -29144,16 +29151,16 @@ var useTimelineKeyframeDrag = ({
29144
29151
  const videoConfig = useVideoConfig2();
29145
29152
  const timelineWidth = useContext46(TimelineWidthContext);
29146
29153
  const { previewServerState } = useContext46(StudioServerConnectionCtx);
29147
- const sequencesRef = useContext46(Internals33.SequenceManagerRefContext);
29148
- const { overrideIdToNodePathMappings } = useContext46(Internals33.OverrideIdsToNodePathsGettersContext);
29149
- const propStatusesRef = useContext46(Internals33.VisualModePropStatusesRefContext);
29154
+ const sequencesRef = useContext46(Internals34.SequenceManagerRefContext);
29155
+ const { overrideIdToNodePathMappings } = useContext46(Internals34.OverrideIdsToNodePathsGettersContext);
29156
+ const propStatusesRef = useContext46(Internals34.VisualModePropStatusesRefContext);
29150
29157
  const {
29151
29158
  clearDragOverrides,
29152
29159
  clearEffectDragOverrides,
29153
29160
  setPropStatuses,
29154
29161
  setDragOverrides,
29155
29162
  setEffectDragOverrides
29156
- } = useContext46(Internals33.VisualModeSettersContext);
29163
+ } = useContext46(Internals34.VisualModeSettersContext);
29157
29164
  const currentSelection = useCurrentTimelineSelectionStateAsRef();
29158
29165
  const { clearDraggedKeyframes, setDraggedKeyframes } = useTimelineKeyframeDragState();
29159
29166
  return useCallback89((e) => {
@@ -29352,16 +29359,16 @@ var useTimelineEasingKeyframeDrag = ({
29352
29359
  const videoConfig = useVideoConfig2();
29353
29360
  const timelineWidth = useContext46(TimelineWidthContext);
29354
29361
  const { previewServerState } = useContext46(StudioServerConnectionCtx);
29355
- const sequencesRef = useContext46(Internals33.SequenceManagerRefContext);
29356
- const { overrideIdToNodePathMappings } = useContext46(Internals33.OverrideIdsToNodePathsGettersContext);
29357
- const propStatusesRef = useContext46(Internals33.VisualModePropStatusesRefContext);
29362
+ const sequencesRef = useContext46(Internals34.SequenceManagerRefContext);
29363
+ const { overrideIdToNodePathMappings } = useContext46(Internals34.OverrideIdsToNodePathsGettersContext);
29364
+ const propStatusesRef = useContext46(Internals34.VisualModePropStatusesRefContext);
29358
29365
  const {
29359
29366
  clearDragOverrides,
29360
29367
  clearEffectDragOverrides,
29361
29368
  setPropStatuses,
29362
29369
  setDragOverrides,
29363
29370
  setEffectDragOverrides
29364
- } = useContext46(Internals33.VisualModeSettersContext);
29371
+ } = useContext46(Internals34.VisualModeSettersContext);
29365
29372
  const currentSelection = useCurrentTimelineSelectionStateAsRef();
29366
29373
  const { clearDraggedKeyframes } = useTimelineKeyframeDragState();
29367
29374
  return useCallback89((e) => {
@@ -29601,10 +29608,10 @@ var TimelineKeyframeEasingLineInteraction = ({ fromFrame, toFrame, nodePathInfo,
29601
29608
  pointerEvents: selectable ? "auto" : "none"
29602
29609
  }), [selectable, style4]);
29603
29610
  const { previewServerState } = useContext47(StudioServerConnectionCtx);
29604
- const sequencesRef = useContext47(Internals34.SequenceManagerRefContext);
29605
- const propStatusesRef = useContext47(Internals34.VisualModePropStatusesRefContext);
29606
- const { setPropStatuses } = useContext47(Internals34.VisualModeSettersContext);
29607
- const { overrideIdToNodePathMappings } = useContext47(Internals34.OverrideIdsToNodePathsGettersContext);
29611
+ const sequencesRef = useContext47(Internals35.SequenceManagerRefContext);
29612
+ const propStatusesRef = useContext47(Internals35.VisualModePropStatusesRefContext);
29613
+ const { setPropStatuses } = useContext47(Internals35.VisualModeSettersContext);
29614
+ const { overrideIdToNodePathMappings } = useContext47(Internals35.OverrideIdsToNodePathsGettersContext);
29608
29615
  const currentSelection = useCurrentTimelineSelectionStateAsRef();
29609
29616
  const getTargetSelections = useCallback90(() => {
29610
29617
  const selectedEasings = getEasingSelections(currentSelection.current.selectedItems);
@@ -29913,7 +29920,7 @@ var TimelineNavigatorItem = ({ extendLineLeft, extendLineRight, item: item2, onS
29913
29920
  };
29914
29921
  var KeyframeEasingNavigator = ({ currentSelection, includeEasings, keyframes, nodePathInfo }) => {
29915
29922
  const { isSelected, selectItems } = useTimelineSelection();
29916
- const setFrame = Internals35.useTimelineSetFrame();
29923
+ const setFrame = Internals36.useTimelineSetFrame();
29917
29924
  const videoConfig = useVideoConfig4();
29918
29925
  const items = useMemo90(() => getKeyframeEasingNavigatorItems({
29919
29926
  includeEasings,
@@ -29932,7 +29939,7 @@ var KeyframeEasingNavigator = ({ currentSelection, includeEasings, keyframes, no
29932
29939
  const frame = getNavigatorItemPlayheadFrame(item2);
29933
29940
  setFrame((current) => {
29934
29941
  const next = { ...current, [videoConfig.id]: frame };
29935
- Internals35.persistCurrentFrame(next);
29942
+ Internals36.persistCurrentFrame(next);
29936
29943
  return next;
29937
29944
  });
29938
29945
  ensureFrameIsInViewport({
@@ -30019,7 +30026,7 @@ import {
30019
30026
  useMemo as useMemo91,
30020
30027
  useState as useState57
30021
30028
  } from "react";
30022
- import { Internals as Internals36 } from "remotion";
30029
+ import { Internals as Internals37 } from "remotion";
30023
30030
  import { jsx as jsx151, jsxs as jsxs76, Fragment as Fragment27 } from "react/jsx-runtime";
30024
30031
  var comboStyle = {
30025
30032
  minWidth: 120
@@ -30071,7 +30078,7 @@ var getOutputValues = (onSelect, disabled) => {
30071
30078
  }));
30072
30079
  };
30073
30080
  var KeyframeSettings = ({ update }) => {
30074
- const { setPropStatuses } = useContext48(Internals36.VisualModeSettersContext);
30081
+ const { setPropStatuses } = useContext48(Internals37.VisualModeSettersContext);
30075
30082
  const { previewServerState } = useContext48(StudioServerConnectionCtx);
30076
30083
  const { propStatus } = update;
30077
30084
  const [posterize, setPosterize] = useState57(propStatus.posterize ?? 0);
@@ -30363,7 +30370,7 @@ var useOpenSequenceInApps = (sequence) => {
30363
30370
 
30364
30371
  // src/components/Timeline/use-rename-sequence.ts
30365
30372
  import { useCallback as useCallback94, useContext as useContext51, useMemo as useMemo93 } from "react";
30366
- import { Internals as Internals37 } from "remotion";
30373
+ import { Internals as Internals38 } from "remotion";
30367
30374
  var getSequenceNameSaveAction = ({
30368
30375
  editedName,
30369
30376
  currentDisplayName,
@@ -30387,11 +30394,11 @@ var useRenameSequence = ({
30387
30394
  sequence,
30388
30395
  validatedLocation
30389
30396
  }) => {
30390
- const { propStatuses } = useContext51(Internals37.VisualModePropStatusesContext);
30391
- const { setPropStatuses } = useContext51(Internals37.VisualModeSettersContext);
30397
+ const { propStatuses } = useContext51(Internals38.VisualModePropStatusesContext);
30398
+ const { setPropStatuses } = useContext51(Internals38.VisualModeSettersContext);
30392
30399
  const nodePath = nodePathInfo?.sequenceSubscriptionKey ?? null;
30393
30400
  const propStatusesForOverride = useMemo93(() => {
30394
- return nodePath ? Internals37.getPropStatusesCtx(propStatuses, nodePath) : undefined;
30401
+ return nodePath ? Internals38.getPropStatusesCtx(propStatuses, nodePath) : undefined;
30395
30402
  }, [propStatuses, nodePath]);
30396
30403
  const codeNameStatus = propStatusesForOverride?.name;
30397
30404
  const fallbackDisplayName = sequence.controls?.componentName ?? "<Sequence>";
@@ -30467,7 +30474,7 @@ var useRenameSequence = ({
30467
30474
 
30468
30475
  // src/components/InspectorPanel/ConnectedCompositionsSection.tsx
30469
30476
  import { useCallback as useCallback98, useContext as useContext54, useMemo as useMemo96 } from "react";
30470
- import { Internals as Internals40 } from "remotion";
30477
+ import { Internals as Internals41 } from "remotion";
30471
30478
 
30472
30479
  // src/helpers/get-connected-compositions.ts
30473
30480
  import { getConnectedCompositions } from "@remotion/canvas";
@@ -30742,7 +30749,7 @@ var CompositionOrStillIcon = ({ color, composition, style: style4 }) => {
30742
30749
 
30743
30750
  // src/components/InitialCompositionLoader.tsx
30744
30751
  import { useCallback as useCallback97, useContext as useContext53, useEffect as useEffect41 } from "react";
30745
- import { Internals as Internals39 } from "remotion";
30752
+ import { Internals as Internals40 } from "remotion";
30746
30753
 
30747
30754
  // src/helpers/create-folder-tree.ts
30748
30755
  import { sortItemsByCommitOrder } from "@remotion/canvas";
@@ -31026,9 +31033,9 @@ var explorerSidebarTabs = createRef4();
31026
31033
 
31027
31034
  // src/components/use-select-asset.ts
31028
31035
  import { useCallback as useCallback96, useContext as useContext52 } from "react";
31029
- import { Internals as Internals38 } from "remotion";
31036
+ import { Internals as Internals39 } from "remotion";
31030
31037
  var useSelectAsset = () => {
31031
- const { setCanvasContent } = useContext52(Internals38.CompositionSetters);
31038
+ const { setCanvasContent } = useContext52(Internals39.CompositionSetters);
31032
31039
  const { setAssetFoldersExpanded } = useContext52(FolderContext);
31033
31040
  return useCallback96((asset) => {
31034
31041
  setCanvasContent({ type: "asset", asset });
@@ -31052,8 +31059,8 @@ var useSelectAsset = () => {
31052
31059
  // src/components/InitialCompositionLoader.tsx
31053
31060
  var useSelectComposition = () => {
31054
31061
  const { setCompositionFoldersExpanded } = useContext53(FolderContext);
31055
- const { setCanvasContent } = useContext53(Internals39.CompositionSetters);
31056
- const setFrame = Internals39.useTimelineSetFrame();
31062
+ const { setCanvasContent } = useContext53(Internals40.CompositionSetters);
31063
+ const setFrame = Internals40.useTimelineSetFrame();
31057
31064
  return useCallback97((c, push, frame = null) => {
31058
31065
  if (push) {
31059
31066
  pushUrl(`/${c.id}`);
@@ -31080,8 +31087,8 @@ var useSelectComposition = () => {
31080
31087
  }, [setCanvasContent, setCompositionFoldersExpanded, setFrame]);
31081
31088
  };
31082
31089
  var InitialCompositionLoader = () => {
31083
- const { compositions, canvasContent } = useContext53(Internals39.CompositionManager);
31084
- const { setCanvasContent } = useContext53(Internals39.CompositionSetters);
31090
+ const { compositions, canvasContent } = useContext53(Internals40.CompositionManager);
31091
+ const { setCanvasContent } = useContext53(Internals40.CompositionSetters);
31085
31092
  const { setCompositionListState } = useContext53(CompositionListContext);
31086
31093
  const selectComposition = useSelectComposition();
31087
31094
  const selectAsset = useSelectAsset();
@@ -31188,7 +31195,7 @@ var compositionContextMenuStyle = {
31188
31195
  var useConnectedCompositions = ({
31189
31196
  track
31190
31197
  }) => {
31191
- const { compositions } = useContext54(Internals40.CompositionManager);
31198
+ const { compositions } = useContext54(Internals41.CompositionManager);
31192
31199
  return useMemo96(() => getConnectedCompositions({
31193
31200
  compositions,
31194
31201
  singleChildComponent: track.sequence.singleChildComponent
@@ -31434,10 +31441,10 @@ var SequenceInspectorSections = ({ track }) => {
31434
31441
 
31435
31442
  // src/components/InspectorPanel/use-track-for-selection.ts
31436
31443
  import { useContext as useContext56, useMemo as useMemo98 } from "react";
31437
- import { Internals as Internals41 } from "remotion";
31444
+ import { Internals as Internals42 } from "remotion";
31438
31445
  var useTrackForSelection = (selection) => {
31439
- const { sequences } = useContext56(Internals41.SequenceManager);
31440
- const { overrideIdToNodePathMappings } = useContext56(Internals41.OverrideIdsToNodePathsGettersContext);
31446
+ const { sequences } = useContext56(Internals42.SequenceManager);
31447
+ const { overrideIdToNodePathMappings } = useContext56(Internals42.OverrideIdsToNodePathsGettersContext);
31441
31448
  return useMemo98(() => {
31442
31449
  if (selection.type === "guide") {
31443
31450
  return null;
@@ -31461,12 +31468,12 @@ var EasingInspector = ({ selection }) => {
31461
31468
  const track = useTrackForSelection(selection);
31462
31469
  const runtimeValues = useRuntimeValues(track?.sequence.controls ?? null);
31463
31470
  const videoConfig = useVideoConfig5();
31464
- const timelinePosition = Internals42.Timeline.useTimelinePosition();
31465
- const { sequences } = useContext57(Internals42.SequenceManager);
31466
- const { overrideIdToNodePathMappings } = useContext57(Internals42.OverrideIdsToNodePathsGettersContext);
31467
- const { propStatuses } = useContext57(Internals42.VisualModePropStatusesContext);
31468
- const { getDragOverrides, getEffectDragOverrides } = useContext57(Internals42.VisualModeDragOverridesContext);
31469
- const { setPropStatuses } = useContext57(Internals42.VisualModeSettersContext);
31471
+ const timelinePosition = Internals43.Timeline.useTimelinePosition();
31472
+ const { sequences } = useContext57(Internals43.SequenceManager);
31473
+ const { overrideIdToNodePathMappings } = useContext57(Internals43.OverrideIdsToNodePathsGettersContext);
31474
+ const { propStatuses } = useContext57(Internals43.VisualModePropStatusesContext);
31475
+ const { getDragOverrides, getEffectDragOverrides } = useContext57(Internals43.VisualModeDragOverridesContext);
31476
+ const { setPropStatuses } = useContext57(Internals43.VisualModeSettersContext);
31470
31477
  const { previewServerState } = useContext57(StudioServerConnectionCtx);
31471
31478
  const { selectItems } = useTimelineSelection();
31472
31479
  const parentSelection = useMemo99(() => getTimelineSelectionFromNodePathInfo(selection.nodePathInfo), [selection.nodePathInfo]);
@@ -31575,7 +31582,7 @@ var EasingInspector = ({ selection }) => {
31575
31582
  return;
31576
31583
  }
31577
31584
  const sourceFrame = timelinePosition - easingKeyframeDisplayOffset;
31578
- const value = Internals42.getEffectiveVisualModeValue({
31585
+ const value = Internals43.getEffectiveVisualModeValue({
31579
31586
  propStatus: easingUpdate.propStatus,
31580
31587
  dragOverrideValue: easingDetails.dragOverrideValue,
31581
31588
  defaultValue: easingDetails.defaultValue,
@@ -31786,7 +31793,7 @@ import {
31786
31793
  useMemo as useMemo104,
31787
31794
  useState as useState61
31788
31795
  } from "react";
31789
- import { Internals as Internals47, useVideoConfig as useVideoConfig7 } from "remotion";
31796
+ import { Internals as Internals48, useVideoConfig as useVideoConfig7 } from "remotion";
31790
31797
 
31791
31798
  // src/components/Timeline/TimelineEffectPropItem.tsx
31792
31799
  import {
@@ -31795,7 +31802,7 @@ import {
31795
31802
  optimisticUpdateForEffectPropStatuses as optimisticUpdateForEffectPropStatuses2
31796
31803
  } from "@remotion/studio-shared";
31797
31804
  import { useCallback as useCallback104, useContext as useContext61, useMemo as useMemo102 } from "react";
31798
- import { Internals as Internals45 } from "remotion";
31805
+ import { Internals as Internals46 } from "remotion";
31799
31806
 
31800
31807
  // src/components/Timeline/get-copy-context-for-agents-menu-item.ts
31801
31808
  var getCopyContextForAgentsMenuItem = ({
@@ -31825,7 +31832,7 @@ var getCopyContextForAgentsMenuItem = ({
31825
31832
  // src/components/Timeline/TimelineKeyframeControls.tsx
31826
31833
  import { isSchemaFieldKeyframable } from "@remotion/studio-shared";
31827
31834
  import { useCallback as useCallback102, useContext as useContext60, useMemo as useMemo100 } from "react";
31828
- import { Internals as Internals43, useVideoConfig as useVideoConfig6 } from "remotion";
31835
+ import { Internals as Internals44, useVideoConfig as useVideoConfig6 } from "remotion";
31829
31836
 
31830
31837
  // src/components/Timeline/get-keyframe-navigation.ts
31831
31838
  var isKeyframeInTimelineRange = (frame, durationInFrames) => {
@@ -31992,7 +31999,7 @@ var resolveKeyframeControlTarget = ({
31992
31999
  }
31993
32000
  const nodePath = nodePathInfo.sequenceSubscriptionKey;
31994
32001
  if (fieldNode.field.kind === "sequence-field") {
31995
- const sequencePropStatuses = Internals43.getPropStatusesCtx(propStatuses, nodePath);
32002
+ const sequencePropStatuses = Internals44.getPropStatusesCtx(propStatuses, nodePath);
31996
32003
  const sequenceSelectedPropStatus = sequencePropStatuses?.[fieldNode.field.key] ?? null;
31997
32004
  if (sequenceSelectedPropStatus === null) {
31998
32005
  return null;
@@ -32017,7 +32024,7 @@ var resolveKeyframeControlTarget = ({
32017
32024
  effectIndex: null
32018
32025
  };
32019
32026
  }
32020
- const effectStatus = Internals43.getEffectPropStatusesCtx({
32027
+ const effectStatus = Internals44.getEffectPropStatusesCtx({
32021
32028
  propStatuses,
32022
32029
  nodePath,
32023
32030
  effectIndex: fieldNode.field.effectIndex
@@ -32111,7 +32118,7 @@ function getCurrentKeyframeValue({
32111
32118
  dragOverrideValue
32112
32119
  }) {
32113
32120
  if (isKeyframedStatus(propStatus)) {
32114
- return Internals43.getEffectiveVisualModeValue({
32121
+ return Internals44.getEffectiveVisualModeValue({
32115
32122
  propStatus,
32116
32123
  dragOverrideValue,
32117
32124
  frame: jsxFrame,
@@ -32120,7 +32127,7 @@ function getCurrentKeyframeValue({
32120
32127
  });
32121
32128
  }
32122
32129
  if (propStatus.status === "static") {
32123
- return Internals43.getEffectiveVisualModeValue({
32130
+ return Internals44.getEffectiveVisualModeValue({
32124
32131
  propStatus,
32125
32132
  dragOverrideValue,
32126
32133
  frame: jsxFrame,
@@ -32172,11 +32179,11 @@ var TimelineKeyframeControls = ({
32172
32179
  mode = "timeline"
32173
32180
  }) => {
32174
32181
  const videoConfig = useVideoConfig6();
32175
- const timelinePosition = Internals43.Timeline.useTimelinePosition();
32176
- const setFrame = Internals43.useTimelineSetFrame();
32177
- const { setPropStatuses } = useContext60(Internals43.VisualModeSettersContext);
32178
- const { propStatuses } = useContext60(Internals43.VisualModePropStatusesContext);
32179
- const { getDragOverrides, getEffectDragOverrides } = useContext60(Internals43.VisualModeDragOverridesContext);
32182
+ const timelinePosition = Internals44.Timeline.useTimelinePosition();
32183
+ const setFrame = Internals44.useTimelineSetFrame();
32184
+ const { setPropStatuses } = useContext60(Internals44.VisualModeSettersContext);
32185
+ const { propStatuses } = useContext60(Internals44.VisualModePropStatusesContext);
32186
+ const { getDragOverrides, getEffectDragOverrides } = useContext60(Internals44.VisualModeDragOverridesContext);
32180
32187
  const { previewServerState } = useContext60(StudioServerConnectionCtx);
32181
32188
  const { selectedItems, selectItems } = useTimelineSelection();
32182
32189
  const tracks = useTimelineKeyframeTracks();
@@ -32271,7 +32278,7 @@ var TimelineKeyframeControls = ({
32271
32278
  const seekToDisplayFrame = useCallback102((frame, direction) => {
32272
32279
  setFrame((current) => {
32273
32280
  const next = { ...current, [videoConfig.id]: frame };
32274
- Internals43.persistCurrentFrame(next);
32281
+ Internals44.persistCurrentFrame(next);
32275
32282
  return next;
32276
32283
  });
32277
32284
  ensureFrameIsInViewport({
@@ -32432,7 +32439,7 @@ var TimelineKeyframeControls = ({
32432
32439
 
32433
32440
  // src/components/Timeline/TimelineKeyframedValue.tsx
32434
32441
  import { useCallback as useCallback103, useMemo as useMemo101 } from "react";
32435
- import { Internals as Internals44 } from "remotion";
32442
+ import { Internals as Internals45 } from "remotion";
32436
32443
  import { jsx as jsx161 } from "react/jsx-runtime";
32437
32444
  var valuesEqual2 = (left, right) => {
32438
32445
  return JSON.stringify(left) === JSON.stringify(right);
@@ -32448,7 +32455,7 @@ var TimelineKeyframedValue = ({
32448
32455
  scaleLockNodePath
32449
32456
  }) => {
32450
32457
  const computedValue2 = useMemo101(() => {
32451
- const raw = Internals44.interpolateKeyframedStatus({
32458
+ const raw = Internals45.interpolateKeyframedStatus({
32452
32459
  forceSpringAllowTail: false,
32453
32460
  frame: sourceFrame,
32454
32461
  status: propStatus
@@ -32464,7 +32471,7 @@ var TimelineKeyframedValue = ({
32464
32471
  codeValue: computedValue2
32465
32472
  }), [computedValue2]);
32466
32473
  const effectiveValue = useMemo101(() => {
32467
- return Internals44.getEffectiveVisualModeValue({
32474
+ return Internals45.getEffectiveVisualModeValue({
32468
32475
  propStatus: fakeStatus,
32469
32476
  dragOverrideValue,
32470
32477
  frame: sourceFrame,
@@ -32525,19 +32532,19 @@ var TimelineComputedEffectPropValue = ({ field, propStatus, runtimeValueStore, v
32525
32532
  });
32526
32533
  };
32527
32534
  var TimelineEffectPropValue = ({ field, nodePath, validatedLocation, sourceFrame, runtimeValueStore }) => {
32528
- const { setEffectDragOverrides, clearEffectDragOverrides, setPropStatuses } = useContext61(Internals45.VisualModeSettersContext);
32529
- const { getEffectDragOverrides } = useContext61(Internals45.VisualModeDragOverridesContext);
32530
- const { propStatuses: visualModePropStatuses } = useContext61(Internals45.VisualModePropStatusesContext);
32535
+ const { setEffectDragOverrides, clearEffectDragOverrides, setPropStatuses } = useContext61(Internals46.VisualModeSettersContext);
32536
+ const { getEffectDragOverrides } = useContext61(Internals46.VisualModeDragOverridesContext);
32537
+ const { propStatuses: visualModePropStatuses } = useContext61(Internals46.VisualModePropStatusesContext);
32531
32538
  const { previewServerState } = useContext61(StudioServerConnectionCtx);
32532
32539
  const clientId = previewServerState.type === "connected" ? previewServerState.clientId : null;
32533
- const effectStatus = Internals45.getEffectPropStatusesCtx({
32540
+ const effectStatus = Internals46.getEffectPropStatusesCtx({
32534
32541
  propStatuses: visualModePropStatuses,
32535
32542
  nodePath,
32536
32543
  effectIndex: field.effectIndex
32537
32544
  });
32538
32545
  const propStatus = effectStatus.type === "can-update-effect" ? effectStatus.props?.[field.key] ?? null : null;
32539
32546
  const onDragValueChange = useCallback104((value) => {
32540
- const nextDragOverrideValue = propStatus !== null && isKeyframedStatus2(propStatus) ? Internals45.makeKeyframedDragOverride({
32547
+ const nextDragOverrideValue = propStatus !== null && isKeyframedStatus2(propStatus) ? Internals46.makeKeyframedDragOverride({
32541
32548
  status: propStatus,
32542
32549
  frame: sourceFrame,
32543
32550
  value,
@@ -32545,7 +32552,7 @@ var TimelineEffectPropValue = ({ field, nodePath, validatedLocation, sourceFrame
32545
32552
  schema: field.effectSchema,
32546
32553
  key: field.key
32547
32554
  }) ? { type: "step1" } : undefined
32548
- }) : Internals45.makeStaticDragOverride(value);
32555
+ }) : Internals46.makeStaticDragOverride(value);
32549
32556
  setEffectDragOverrides(nodePath, field.effectIndex, field.key, nextDragOverrideValue);
32550
32557
  }, [
32551
32558
  field.effectIndex,
@@ -32715,7 +32722,7 @@ var TimelineEffectPropValue = ({ field, nodePath, validatedLocation, sourceFrame
32715
32722
  validatedLocation
32716
32723
  });
32717
32724
  }
32718
- const effectiveValue = Internals45.getEffectiveVisualModeValue({
32725
+ const effectiveValue = Internals46.getEffectiveVisualModeValue({
32719
32726
  propStatus,
32720
32727
  dragOverrideValue,
32721
32728
  defaultValue: field.fieldSchema.default,
@@ -32739,7 +32746,7 @@ var TimelineEffectPropValueAtCurrentFrame = ({
32739
32746
  keyframeDisplayOffset,
32740
32747
  runtimeValueStore
32741
32748
  }) => {
32742
- const timelinePosition = Internals45.Timeline.useTimelinePosition();
32749
+ const timelinePosition = Internals46.Timeline.useTimelinePosition();
32743
32750
  return /* @__PURE__ */ jsx162(TimelineEffectPropValue, {
32744
32751
  field,
32745
32752
  nodePath,
@@ -32760,14 +32767,14 @@ var TimelineEffectPropItem = ({
32760
32767
  }) => {
32761
32768
  const { previewServerState } = useContext61(StudioServerConnectionCtx);
32762
32769
  const { canOpenInEditor: canOpenInEditor2, defaultEditorId } = useEditorOpening(previewServerState.type === "connected");
32763
- const { setPropStatuses } = useContext61(Internals45.VisualModeSettersContext);
32764
- const { propStatuses } = useContext61(Internals45.VisualModePropStatusesContext);
32765
- const { getEffectDragOverrides } = useContext61(Internals45.VisualModeDragOverridesContext);
32770
+ const { setPropStatuses } = useContext61(Internals46.VisualModeSettersContext);
32771
+ const { propStatuses } = useContext61(Internals46.VisualModePropStatusesContext);
32772
+ const { getEffectDragOverrides } = useContext61(Internals46.VisualModeDragOverridesContext);
32766
32773
  const selection = useTimelineRowSelection(nodePathInfo);
32767
32774
  const style4 = useMemo102(() => {
32768
32775
  return field.typeName === "text-content" ? fieldRowBase : { ...fieldRowBase, height: field.rowHeight };
32769
32776
  }, [field.rowHeight, field.typeName]);
32770
- const effectStatus = useMemo102(() => Internals45.getEffectPropStatusesCtx({
32777
+ const effectStatus = useMemo102(() => Internals46.getEffectPropStatusesCtx({
32771
32778
  propStatuses,
32772
32779
  nodePath,
32773
32780
  effectIndex: field.effectIndex
@@ -32923,7 +32930,7 @@ import {
32923
32930
  isSchemaFieldKeyframable as isSchemaFieldKeyframable3
32924
32931
  } from "@remotion/studio-shared";
32925
32932
  import React111, { useCallback as useCallback105, useContext as useContext62, useMemo as useMemo103 } from "react";
32926
- import { Internals as Internals46 } from "remotion";
32933
+ import { Internals as Internals47 } from "remotion";
32927
32934
  import { jsx as jsx163 } from "react/jsx-runtime";
32928
32935
  var fieldRowBase2 = {};
32929
32936
  var inlineSourceFieldRow = {
@@ -32956,18 +32963,18 @@ var isResettableStatus2 = ({
32956
32963
  return JSON.stringify(effectiveCodeValue) !== JSON.stringify(defaultValue);
32957
32964
  };
32958
32965
  var Value = ({ field, nodePath, validatedLocation, schema, propStatus }) => {
32959
- const { getDragOverrides } = useContext62(Internals46.VisualModeDragOverridesContext);
32960
- const { setDragOverrides, clearDragOverrides } = useContext62(Internals46.VisualModeSettersContext);
32966
+ const { getDragOverrides } = useContext62(Internals47.VisualModeDragOverridesContext);
32967
+ const { setDragOverrides, clearDragOverrides } = useContext62(Internals47.VisualModeSettersContext);
32961
32968
  const dragOverrideValue = useMemo103(() => {
32962
32969
  return nodePath === null ? undefined : (getDragOverrides(nodePath) ?? {})[field.key];
32963
32970
  }, [getDragOverrides, nodePath, field.key]);
32964
- const effectiveValue = Internals46.getEffectiveVisualModeValue({
32971
+ const effectiveValue = Internals47.getEffectiveVisualModeValue({
32965
32972
  propStatus,
32966
32973
  dragOverrideValue,
32967
32974
  defaultValue: field.fieldSchema.default,
32968
32975
  shouldResortToDefaultValueIfUndefined: true
32969
32976
  });
32970
- const { setPropStatuses } = useContext62(Internals46.VisualModeSettersContext);
32977
+ const { setPropStatuses } = useContext62(Internals47.VisualModeSettersContext);
32971
32978
  const { previewServerState } = useContext62(StudioServerConnectionCtx);
32972
32979
  const clientId = previewServerState.type === "connected" ? previewServerState.clientId : null;
32973
32980
  const onSave = useCallback105((value, options) => {
@@ -33018,7 +33025,7 @@ var Value = ({ field, nodePath, validatedLocation, schema, propStatus }) => {
33018
33025
  if (nodePath === null) {
33019
33026
  throw new Error("Cannot drag value");
33020
33027
  }
33021
- setDragOverrides(nodePath, field.key, Internals46.makeStaticDragOverride(value));
33028
+ setDragOverrides(nodePath, field.key, Internals47.makeStaticDragOverride(value));
33022
33029
  }, [setDragOverrides, nodePath, field.key]);
33023
33030
  const onDragEnd = useCallback105(() => {
33024
33031
  if (nodePath === null) {
@@ -33059,7 +33066,7 @@ var TimelineSequenceKeyframedValueAtSourceFrame = ({
33059
33066
  });
33060
33067
  };
33061
33068
  var TimelineSequenceKeyframedValueAtCurrentFrame = ({ keyframeDisplayOffset, ...props }) => {
33062
- const timelinePosition = Internals46.Timeline.useTimelinePosition();
33069
+ const timelinePosition = Internals47.Timeline.useTimelinePosition();
33063
33070
  const resolvedKeyframeDisplayOffset = getKeyframeDisplayOffset({
33064
33071
  propStatus: props.propStatus,
33065
33072
  keyframeDisplayOffset
@@ -33071,8 +33078,8 @@ var TimelineSequenceKeyframedValueAtCurrentFrame = ({ keyframeDisplayOffset, ...
33071
33078
  };
33072
33079
  var TimelineSequenceKeyframedValueUnmemoized = (props) => {
33073
33080
  const { field, fileName, nodePath, schema, propStatus } = props;
33074
- const { getDragOverrides } = useContext62(Internals46.VisualModeDragOverridesContext);
33075
- const { setPropStatuses, setDragOverrides, clearDragOverrides } = useContext62(Internals46.VisualModeSettersContext);
33081
+ const { getDragOverrides } = useContext62(Internals47.VisualModeDragOverridesContext);
33082
+ const { setPropStatuses, setDragOverrides, clearDragOverrides } = useContext62(Internals47.VisualModeSettersContext);
33076
33083
  const { previewServerState } = useContext62(StudioServerConnectionCtx);
33077
33084
  const clientId = previewServerState.type === "connected" ? previewServerState.clientId : null;
33078
33085
  const dragOverrideValue = useMemo103(() => {
@@ -33094,7 +33101,7 @@ var TimelineSequenceKeyframedValueUnmemoized = (props) => {
33094
33101
  });
33095
33102
  }, [clientId, field.key, fileName, nodePath, schema, setPropStatuses]);
33096
33103
  const onKeyframedDragValueChangeAtFrame = useCallback105((value, sourceFrame) => {
33097
- setDragOverrides(nodePath, field.key, Internals46.makeKeyframedDragOverride({
33104
+ setDragOverrides(nodePath, field.key, Internals47.makeKeyframedDragOverride({
33098
33105
  status: propStatus,
33099
33106
  frame: sourceFrame,
33100
33107
  value,
@@ -33136,14 +33143,14 @@ var TimelineSequencePropItem = ({
33136
33143
  keyframeControlsMode,
33137
33144
  runtimeValue
33138
33145
  }) => {
33139
- const { propStatuses: visualModePropStatuses } = useContext62(Internals46.VisualModePropStatusesContext);
33140
- const { getDragOverrides } = useContext62(Internals46.VisualModeDragOverridesContext);
33141
- const { setPropStatuses } = useContext62(Internals46.VisualModeSettersContext);
33146
+ const { propStatuses: visualModePropStatuses } = useContext62(Internals47.VisualModePropStatusesContext);
33147
+ const { getDragOverrides } = useContext62(Internals47.VisualModeDragOverridesContext);
33148
+ const { setPropStatuses } = useContext62(Internals47.VisualModeSettersContext);
33142
33149
  const { previewServerState } = useContext62(StudioServerConnectionCtx);
33143
33150
  const { canOpenInEditor: canOpenInEditor2, defaultEditorId } = useEditorOpening(previewServerState.type === "connected");
33144
33151
  const selection = useTimelineRowSelection(nodePathInfo);
33145
33152
  const transform3DMode = useContext62(Transform3DModeContext);
33146
- const propStatusesForOverride = Internals46.getPropStatusesCtx(visualModePropStatuses, nodePath);
33153
+ const propStatusesForOverride = Internals47.getPropStatusesCtx(visualModePropStatuses, nodePath);
33147
33154
  const propStatus = propStatusesForOverride?.[field.key] ?? null;
33148
33155
  const dragOverrideValue = useMemo103(() => {
33149
33156
  return (getDragOverrides(nodePath) ?? {})[field.key];
@@ -33380,15 +33387,15 @@ var KeyframeInspector = ({ selection }) => {
33380
33387
  const track = useTrackForSelection(selection);
33381
33388
  const runtimeValues = useRuntimeValues(track?.sequence.controls ?? null);
33382
33389
  const videoConfig = useVideoConfig7();
33383
- const { propStatuses } = useContext63(Internals47.VisualModePropStatusesContext);
33390
+ const { propStatuses } = useContext63(Internals48.VisualModePropStatusesContext);
33384
33391
  const {
33385
33392
  clearDragOverrides,
33386
33393
  clearEffectDragOverrides,
33387
33394
  setDragOverrides,
33388
33395
  setEffectDragOverrides,
33389
33396
  setPropStatuses
33390
- } = useContext63(Internals47.VisualModeSettersContext);
33391
- const { getDragOverrides, getEffectDragOverrides } = useContext63(Internals47.VisualModeDragOverridesContext);
33397
+ } = useContext63(Internals48.VisualModeSettersContext);
33398
+ const { getDragOverrides, getEffectDragOverrides } = useContext63(Internals48.VisualModeDragOverridesContext);
33392
33399
  const { previewServerState } = useContext63(StudioServerConnectionCtx);
33393
33400
  const { selectItems } = useTimelineSelection();
33394
33401
  const [draftFrame, setDraftFrame] = useState61(selection.frame);
@@ -33416,7 +33423,7 @@ var KeyframeInspector = ({ selection }) => {
33416
33423
  includeTextContent: false
33417
33424
  });
33418
33425
  const sequenceField = sequenceFields?.find((candidate) => candidate.key === keyframeField.fieldKey) ?? null;
33419
- const sequencePropStatus = Internals47.getPropStatusesCtx(propStatuses, nodePath)?.[keyframeField.fieldKey] ?? null;
33426
+ const sequencePropStatus = Internals48.getPropStatusesCtx(propStatuses, nodePath)?.[keyframeField.fieldKey] ?? null;
33420
33427
  if (!sequenceField || sequencePropStatus?.status !== "keyframed") {
33421
33428
  return null;
33422
33429
  }
@@ -33450,7 +33457,7 @@ var KeyframeInspector = ({ selection }) => {
33450
33457
  getEffectDragOverrides
33451
33458
  });
33452
33459
  const effectField = effectFields.find((candidate) => candidate.key === keyframeField.fieldKey) ?? null;
33453
- const effectStatus = Internals47.getEffectPropStatusesCtx({
33460
+ const effectStatus = Internals48.getEffectPropStatusesCtx({
33454
33461
  propStatuses,
33455
33462
  nodePath,
33456
33463
  effectIndex: keyframeField.effectIndex
@@ -33751,7 +33758,7 @@ var KeyframeInspector = ({ selection }) => {
33751
33758
 
33752
33759
  // src/components/InspectorPanel/SequenceSelectionInspector.tsx
33753
33760
  import { useCallback as useCallback115, useContext as useContext69, useMemo as useMemo111 } from "react";
33754
- import { Internals as Internals56 } from "remotion";
33761
+ import { Internals as Internals57 } from "remotion";
33755
33762
 
33756
33763
  // src/icons/audio.tsx
33757
33764
  import { jsx as jsx165 } from "react/jsx-runtime";
@@ -33828,7 +33835,7 @@ import {
33828
33835
  useRef as useRef35,
33829
33836
  useState as useState66
33830
33837
  } from "react";
33831
- import { Internals as Internals52 } from "remotion";
33838
+ import { Internals as Internals53 } from "remotion";
33832
33839
 
33833
33840
  // src/icons/border-radius.tsx
33834
33841
  import { jsx as jsx169 } from "react/jsx-runtime";
@@ -33985,7 +33992,7 @@ import {
33985
33992
  useRef as useRef34,
33986
33993
  useState as useState64
33987
33994
  } from "react";
33988
- import { Internals as Internals48 } from "remotion";
33995
+ import { Internals as Internals49 } from "remotion";
33989
33996
 
33990
33997
  // src/components/CaptionInspector.tsx
33991
33998
  import React115, { useCallback as useCallback109, useRef as useRef33, useState as useState63 } from "react";
@@ -34501,9 +34508,9 @@ var InlineCaptionInspector = ({
34501
34508
  validatedLocation
34502
34509
  }) => {
34503
34510
  const { previewServerState } = useContext64(StudioServerConnectionCtx);
34504
- const { propStatuses } = useContext64(Internals48.VisualModePropStatusesContext);
34505
- const { setPropStatuses, setDragOverrides, clearDragOverrides } = useContext64(Internals48.VisualModeSettersContext);
34506
- const captionStatus = Internals48.getPropStatusesCtx(propStatuses, nodePath)?.captions;
34511
+ const { propStatuses } = useContext64(Internals49.VisualModePropStatusesContext);
34512
+ const { setPropStatuses, setDragOverrides, clearDragOverrides } = useContext64(Internals49.VisualModeSettersContext);
34513
+ const captionStatus = Internals49.getPropStatusesCtx(propStatuses, nodePath)?.captions;
34507
34514
  const clientId = previewServerState.type === "connected" ? previewServerState.clientId : null;
34508
34515
  const canSave = !readOnlyStudio && clientId !== null && captionStatus?.status === "static";
34509
34516
  const [draftCaptions, setDraftCaptions] = useState64(captions);
@@ -34521,7 +34528,7 @@ var InlineCaptionInspector = ({
34521
34528
  }, [captions, clearDragOverrides, nodePath, runtimeSignature]);
34522
34529
  const updateCaptions = useCallback110((nextCaptions) => {
34523
34530
  setDraftCaptions(nextCaptions);
34524
- setDragOverrides(nodePath, "captions", Internals48.makeStaticDragOverride(nextCaptions));
34531
+ setDragOverrides(nodePath, "captions", Internals49.makeStaticDragOverride(nextCaptions));
34525
34532
  }, [nodePath, setDragOverrides]);
34526
34533
  const cancelCaptions = useCallback110(() => {
34527
34534
  setDraftCaptions(savedCaptions.current);
@@ -34564,7 +34571,7 @@ var InlineCaptionInspector = ({
34564
34571
  return;
34565
34572
  }
34566
34573
  setDraftCaptions(nextCaptions);
34567
- setDragOverrides(nodePath, "captions", Internals48.makeStaticDragOverride(nextCaptions));
34574
+ setDragOverrides(nodePath, "captions", Internals49.makeStaticDragOverride(nextCaptions));
34568
34575
  savedCaptions.current = nextCaptions;
34569
34576
  saveSequenceProps2({
34570
34577
  changes: [
@@ -34610,7 +34617,7 @@ var InlineCaptionInspector = ({
34610
34617
  };
34611
34618
 
34612
34619
  // src/components/InspectorPanel/inspector-section-collapse.ts
34613
- import { Internals as Internals49 } from "remotion";
34620
+ import { Internals as Internals50 } from "remotion";
34614
34621
  var BORDER_KEYS = [
34615
34622
  "style.borderWidth",
34616
34623
  "style.borderStyle",
@@ -34696,7 +34703,7 @@ var isLayoutInactive = ({
34696
34703
  if (!schema) {
34697
34704
  return false;
34698
34705
  }
34699
- const flatSchema = Internals49.getFlatSchemaWithAllKeys(schema);
34706
+ const flatSchema = Internals50.getFlatSchemaWithAllKeys(schema);
34700
34707
  const layoutKeys = LAYOUT_KEYS.filter((key) => flatSchema[key] !== undefined);
34701
34708
  if (layoutKeys.length === 0) {
34702
34709
  return false;
@@ -34760,7 +34767,7 @@ var getInspectorSectionActivity = ({
34760
34767
  } else if (group === "crop") {
34761
34768
  resolved = hasEveryStatus({ keys: CROP_KEYS, propStatuses });
34762
34769
  } else if (group === "layout") {
34763
- const flatSchema = schema ? Internals49.getFlatSchemaWithAllKeys(schema) : undefined;
34770
+ const flatSchema = schema ? Internals50.getFlatSchemaWithAllKeys(schema) : undefined;
34764
34771
  const layoutKeys = LAYOUT_KEYS.filter((key) => flatSchema?.[key] !== undefined);
34765
34772
  resolved = layoutKeys.length > 0 && hasEveryStatus({ keys: layoutKeys, propStatuses });
34766
34773
  } else {
@@ -34900,7 +34907,7 @@ import React118 from "react";
34900
34907
 
34901
34908
  // src/components/Timeline/TimelineEffectItem.tsx
34902
34909
  import { useCallback as useCallback111, useContext as useContext65, useMemo as useMemo107, useState as useState65 } from "react";
34903
- import { Internals as Internals50 } from "remotion";
34910
+ import { Internals as Internals51 } from "remotion";
34904
34911
  import { jsx as jsx183, jsxs as jsxs86 } from "react/jsx-runtime";
34905
34912
  var EFFECT_REORDER_MIME_TYPE = "application/remotion-effect-reorder";
34906
34913
  var currentEffectDrag = null;
@@ -34976,12 +34983,12 @@ var TimelineEffectItem = ({
34976
34983
  const { previewServerState } = useContext65(StudioServerConnectionCtx);
34977
34984
  const previewConnected = previewServerState.type === "connected";
34978
34985
  const canMutateEffects = canUseEffectOperations();
34979
- const { propStatuses } = useContext65(Internals50.VisualModePropStatusesContext);
34980
- const { setPropStatuses } = useContext65(Internals50.VisualModeSettersContext);
34986
+ const { propStatuses } = useContext65(Internals51.VisualModePropStatusesContext);
34987
+ const { setPropStatuses } = useContext65(Internals51.VisualModeSettersContext);
34981
34988
  const selection = useTimelineRowSelection(nodePathInfo);
34982
34989
  const containsSelection = useTimelineRowContainsSelection(nodePathInfo);
34983
34990
  const [dropIndicator, setDropIndicator] = useState65(null);
34984
- const effectStatus = useMemo107(() => Internals50.getEffectPropStatusesCtx({
34991
+ const effectStatus = useMemo107(() => Internals51.getEffectPropStatusesCtx({
34985
34992
  propStatuses,
34986
34993
  nodePath,
34987
34994
  effectIndex
@@ -34996,7 +35003,7 @@ var TimelineEffectItem = ({
34996
35003
  const canToggle = previewConnected && canMutateEffects && disabledStatus?.status === "static";
34997
35004
  const deleteDisabled = !previewConnected || !canMutateEffects || effectStatus.type !== "can-update-effect" || !validatedLocation.source;
34998
35005
  const canReorder = previewConnected && canMutateEffects && effectStatus.type === "can-update-effect" && Boolean(validatedLocation.source);
34999
- const nodePathKey = useMemo107(() => Internals50.makeSequencePropsSubscriptionKey(nodePath), [nodePath]);
35006
+ const nodePathKey = useMemo107(() => Internals51.makeSequencePropsSubscriptionKey(nodePath), [nodePath]);
35000
35007
  const onDeleteEffectFromSource = useCallback111(async () => {
35001
35008
  if (deleteDisabled) {
35002
35009
  return;
@@ -35445,13 +35452,13 @@ var propStatusHas3DTransformValue = ({
35445
35452
 
35446
35453
  // src/components/Timeline/use-timeline-expanded-tree.ts
35447
35454
  import { useCallback as useCallback112, useContext as useContext66, useMemo as useMemo108 } from "react";
35448
- import { Internals as Internals51 } from "remotion";
35455
+ import { Internals as Internals52 } from "remotion";
35449
35456
  var useTimelineSequenceHasExpandableContent = ({
35450
35457
  sequence,
35451
35458
  nodePathInfo
35452
35459
  }) => {
35453
- const { propStatuses: visualModePropStatuses } = useContext66(Internals51.VisualModePropStatusesContext);
35454
- const { getDragOverrides, getEffectDragOverrides } = useContext66(Internals51.VisualModeDragOverridesContext);
35460
+ const { propStatuses: visualModePropStatuses } = useContext66(Internals52.VisualModePropStatusesContext);
35461
+ const { getDragOverrides, getEffectDragOverrides } = useContext66(Internals52.VisualModeDragOverridesContext);
35455
35462
  const { selectedItems } = useTimelineSelection();
35456
35463
  const selectedRowKeys = useMemo108(() => getSelectedTimelineExpandedRowKeys(selectedItems), [selectedItems]);
35457
35464
  const selectHasExpandableContent = useCallback112((runtimeValues) => {
@@ -35499,8 +35506,8 @@ var useTimelineExpandedTree = ({
35499
35506
  }) => {
35500
35507
  const { getIsExpanded } = useContext66(ExpandedTracksGetterContext);
35501
35508
  const { toggleTrack } = useContext66(ExpandedTracksSetterContext);
35502
- const { propStatuses: visualModePropStatuses } = useContext66(Internals51.VisualModePropStatusesContext);
35503
- const { getDragOverrides, getEffectDragOverrides } = useContext66(Internals51.VisualModeDragOverridesContext);
35509
+ const { propStatuses: visualModePropStatuses } = useContext66(Internals52.VisualModePropStatusesContext);
35510
+ const { getDragOverrides, getEffectDragOverrides } = useContext66(Internals52.VisualModeDragOverridesContext);
35504
35511
  const { selectedItems } = useTimelineSelection();
35505
35512
  const runtimeValues = useRuntimeValues(sequence.controls);
35506
35513
  const tree = useMemo108(() => buildTimelineTree({
@@ -35743,8 +35750,8 @@ var InspectorSequenceSection = ({
35743
35750
  const sequenceKey = getTimelineSequenceSelectionKey(nodePathInfo);
35744
35751
  const manuallyEnabled3DTransform = manuallyEnabledSequenceKeys.has(sequenceKey);
35745
35752
  const { previewServerState } = useContext67(StudioServerConnectionCtx);
35746
- const { getDragOverrides } = useContext67(Internals52.VisualModeDragOverridesContext);
35747
- const { setPropStatuses } = useContext67(Internals52.VisualModeSettersContext);
35753
+ const { getDragOverrides } = useContext67(Internals53.VisualModeDragOverridesContext);
35754
+ const { setPropStatuses } = useContext67(Internals53.VisualModeSettersContext);
35748
35755
  const { setSelectedModal } = useContext67(SetSelectedModalContext);
35749
35756
  const selectAsset = useSelectAsset();
35750
35757
  const mediaSrc = getTimelineAssetSrcFromSchema(sequence.controls, runtimeValues);
@@ -35881,7 +35888,7 @@ var InspectorSequenceSection = ({
35881
35888
  const controlGroups = useMemo109(() => getInspectorControlGroups(controlRows), [controlRows]);
35882
35889
  const layoutGroup = controlGroups.find((group) => group.id === "layout");
35883
35890
  const controlGroupsWithoutLayout = controlGroups.filter((group) => group.id !== "layout");
35884
- const sequencePropStatuses = Internals52.getPropStatusesCtx(propStatuses, nodePathInfo.sequenceSubscriptionKey);
35891
+ const sequencePropStatuses = Internals53.getPropStatusesCtx(propStatuses, nodePathInfo.sequenceSubscriptionKey);
35885
35892
  const automaticallyEnabled3DTransform = useMemo109(() => {
35886
35893
  return [
35887
35894
  "style.translate",
@@ -35995,8 +36002,8 @@ var InspectorSequenceSection = ({
35995
36002
  const borderRadiusGroup = controlGroups.find((group) => group.id === "border-radius");
35996
36003
  const borderRadiusUsesShorthand = borderRadiusGroup?.rows.some(({ node }) => node.kind === "field" && node.field?.key === BORDER_RADIUS_SHORTHAND_KEY2);
35997
36004
  const borderRadiusConversion = getBorderRadiusConversion(sequencePropStatuses, getDragOverrides(nodePathInfo.sequenceSubscriptionKey));
35998
- const inlineCaptionValue = schema.captions?.type === "remotion-captions" ? runtimeValues.captions : null;
35999
- const inlineCaptions = Array.isArray(inlineCaptionValue) ? inlineCaptionValue : null;
36005
+ const hasCaptionsSchema = schema.captions?.type === "remotion-captions";
36006
+ const inlineCaptions = hasCaptionsSchema ? Array.isArray(runtimeValues.captions) ? runtimeValues.captions : [] : null;
36000
36007
  const showEffectsSection = nodePathInfo.supportsEffects || effectRows.length > 0;
36001
36008
  const canAddEffect = nodePathInfo.supportsEffects && previewServerState.type === "connected" && isStudioInteractivityEnabled() && Boolean(validatedLocation.source);
36002
36009
  const onAddEffect = useCallback113(() => {
@@ -36264,7 +36271,7 @@ var getSequenceFreezeFrameMenuItem = ({
36264
36271
 
36265
36272
  // src/components/InspectorPanel/AlignmentControls.tsx
36266
36273
  import { useCallback as useCallback114, useContext as useContext68, useMemo as useMemo110 } from "react";
36267
- import { Internals as Internals55 } from "remotion";
36274
+ import { Internals as Internals56 } from "remotion";
36268
36275
 
36269
36276
  // src/icons/align-right.tsx
36270
36277
  import { jsx as jsx186, jsxs as jsxs88 } from "react/jsx-runtime";
@@ -36406,7 +36413,7 @@ var AlignTopIcon = (props) => {
36406
36413
  };
36407
36414
 
36408
36415
  // src/components/selected-outline-drag.ts
36409
- import { Internals as Internals54 } from "remotion";
36416
+ import { Internals as Internals55 } from "remotion";
36410
36417
  import { NoReactInternals as NoReactInternals14 } from "remotion/no-react";
36411
36418
 
36412
36419
  // src/components/selected-outline-geometry.ts
@@ -38061,7 +38068,7 @@ var transformOriginFieldKey = "style.transformOrigin";
38061
38068
  var selectedOutlineDragThresholdPx = 4;
38062
38069
 
38063
38070
  // src/components/selected-outline-uv.ts
38064
- import { Internals as Internals53 } from "remotion";
38071
+ import { Internals as Internals54 } from "remotion";
38065
38072
  var parseUvCoordinate2 = (value) => {
38066
38073
  if (Array.isArray(value) && value.length === 2 && value.every((item2) => typeof item2 === "number" && Number.isFinite(item2))) {
38067
38074
  return [value[0], value[1]];
@@ -38542,7 +38549,7 @@ var getSelectedUvHandles = ({
38542
38549
  if (!effect) {
38543
38550
  continue;
38544
38551
  }
38545
- const effectStatus = Internals53.getEffectPropStatusesCtx({
38552
+ const effectStatus = Internals54.getEffectPropStatusesCtx({
38546
38553
  propStatuses,
38547
38554
  nodePath,
38548
38555
  effectIndex
@@ -38555,12 +38562,12 @@ var getSelectedUvHandles = ({
38555
38562
  continue;
38556
38563
  }
38557
38564
  const dragOverrides = getEffectDragOverrides(nodePath, effectIndex);
38558
- const activeSchema = Internals53.flattenActiveSchema(effect.schema, (key) => {
38565
+ const activeSchema = Internals54.flattenActiveSchema(effect.schema, (key) => {
38559
38566
  const propStatus = effectStatus.props[key];
38560
38567
  if (propStatus?.status !== "static" && propStatus?.status !== "keyframed") {
38561
38568
  return;
38562
38569
  }
38563
- return Internals53.getEffectiveVisualModeValue({
38570
+ return Internals54.getEffectiveVisualModeValue({
38564
38571
  propStatus,
38565
38572
  dragOverrideValue: dragOverrides[key],
38566
38573
  defaultValue: undefined,
@@ -38577,7 +38584,7 @@ var getSelectedUvHandles = ({
38577
38584
  if (propStatus?.status !== "static" && propStatus?.status !== "keyframed") {
38578
38585
  continue;
38579
38586
  }
38580
- effectValues[fieldKey] = Internals53.getEffectiveVisualModeValue({
38587
+ effectValues[fieldKey] = Internals54.getEffectiveVisualModeValue({
38581
38588
  propStatus,
38582
38589
  dragOverrideValue: dragOverrides[fieldKey],
38583
38590
  defaultValue: fieldSchema.default,
@@ -39068,14 +39075,14 @@ var getSelectedOutlineActiveSchema = ({
39068
39075
  propStatus,
39069
39076
  frame
39070
39077
  }) => {
39071
- const { merged: valuesDotNotation } = Internals54.computeEffectiveSchemaValuesDotNotation({
39078
+ const { merged: valuesDotNotation } = Internals55.computeEffectiveSchemaValuesDotNotation({
39072
39079
  schema,
39073
39080
  currentValue: currentRuntimeValueDotNotation,
39074
39081
  overrideValues: dragOverrides,
39075
39082
  propStatus,
39076
39083
  frame
39077
39084
  });
39078
- return Internals54.flattenActiveSchema(schema, (key) => valuesDotNotation[key]);
39085
+ return Internals55.flattenActiveSchema(schema, (key) => valuesDotNotation[key]);
39079
39086
  };
39080
39087
  var getSelectedOutlineDragStates = ({
39081
39088
  dragTargets,
@@ -39085,7 +39092,7 @@ var getSelectedOutlineDragStates = ({
39085
39092
  return dragTargets.map((target) => {
39086
39093
  const dragOverrideValue = (getDragOverrides(target.nodePath) ?? {})[translateFieldKey];
39087
39094
  const sourceFrame = timelinePosition - target.keyframeDisplayOffset;
39088
- const effectiveValue = Internals54.getEffectiveVisualModeValue({
39095
+ const effectiveValue = Internals55.getEffectiveVisualModeValue({
39089
39096
  propStatus: target.propStatus,
39090
39097
  dragOverrideValue,
39091
39098
  defaultValue: target.fieldDefault,
@@ -39095,7 +39102,7 @@ var getSelectedOutlineDragStates = ({
39095
39102
  const [startX, startY, startZ] = parseTranslate(String(effectiveValue ?? "0px 0px"));
39096
39103
  return {
39097
39104
  defaultValue: target.fieldDefault !== undefined ? JSON.stringify(target.fieldDefault) : null,
39098
- key: Internals54.makeSequencePropsSubscriptionKey(target.nodePath),
39105
+ key: Internals55.makeSequencePropsSubscriptionKey(target.nodePath),
39099
39106
  sourceFrame,
39100
39107
  startX,
39101
39108
  startY,
@@ -39387,7 +39394,7 @@ var getSelectedOutlineScaleDragStates = ({
39387
39394
  return dragTargets.map((target) => {
39388
39395
  const dragOverrideValue = (getDragOverrides(target.nodePath) ?? {})[scaleFieldKey];
39389
39396
  const sourceFrame = timelinePosition - target.keyframeDisplayOffset;
39390
- const effectiveValue = Internals54.getEffectiveVisualModeValue({
39397
+ const effectiveValue = Internals55.getEffectiveVisualModeValue({
39391
39398
  propStatus: target.propStatus,
39392
39399
  dragOverrideValue,
39393
39400
  defaultValue: target.fieldDefault,
@@ -39397,7 +39404,7 @@ var getSelectedOutlineScaleDragStates = ({
39397
39404
  const [startX, startY, startZ] = NoReactInternals14.parseScaleValue(effectiveValue);
39398
39405
  return {
39399
39406
  defaultValue: target.fieldDefault !== undefined ? JSON.stringify(target.fieldDefault) : null,
39400
- key: Internals54.makeSequencePropsSubscriptionKey(target.nodePath),
39407
+ key: Internals55.makeSequencePropsSubscriptionKey(target.nodePath),
39401
39408
  sourceFrame,
39402
39409
  startX,
39403
39410
  startY,
@@ -39493,7 +39500,7 @@ var getSelectedOutlineRotationDragStates = ({
39493
39500
  return dragTargets.map((target) => {
39494
39501
  const dragOverrideValue = (getDragOverrides(target.nodePath) ?? {})[rotateFieldKey];
39495
39502
  const sourceFrame = timelinePosition - target.keyframeDisplayOffset;
39496
- const effectiveValue = Internals54.getEffectiveVisualModeValue({
39503
+ const effectiveValue = Internals55.getEffectiveVisualModeValue({
39497
39504
  propStatus: target.propStatus,
39498
39505
  dragOverrideValue,
39499
39506
  defaultValue: target.fieldDefault,
@@ -39503,7 +39510,7 @@ var getSelectedOutlineRotationDragStates = ({
39503
39510
  const startValue = String(effectiveValue ?? "0deg");
39504
39511
  return {
39505
39512
  defaultValue: target.fieldDefault !== undefined ? JSON.stringify(target.fieldDefault) : null,
39506
- key: Internals54.makeSequencePropsSubscriptionKey(target.nodePath),
39513
+ key: Internals55.makeSequencePropsSubscriptionKey(target.nodePath),
39507
39514
  sourceFrame,
39508
39515
  startDegrees: parseCssRotationToDegrees(startValue),
39509
39516
  startRotation: parseCssRotationToEuler(startValue),
@@ -39954,16 +39961,16 @@ var AlignmentButton = ({ onClick, title, Icon, disabled }) => {
39954
39961
  var AlignmentControls = ({ track }) => {
39955
39962
  const runtimeValues = useRuntimeValues(track.sequence.controls);
39956
39963
  const { previewServerState } = useContext68(StudioServerConnectionCtx);
39957
- const { propStatuses } = useContext68(Internals55.VisualModePropStatusesContext);
39958
- const { getDragOverrides } = useContext68(Internals55.VisualModeDragOverridesContext);
39959
- const { setPropStatuses } = useContext68(Internals55.VisualModeSettersContext);
39960
- const { canvasContent, compositions } = useContext68(Internals55.CompositionManager);
39964
+ const { propStatuses } = useContext68(Internals56.VisualModePropStatusesContext);
39965
+ const { getDragOverrides } = useContext68(Internals56.VisualModeDragOverridesContext);
39966
+ const { setPropStatuses } = useContext68(Internals56.VisualModeSettersContext);
39967
+ const { canvasContent, compositions } = useContext68(Internals56.CompositionManager);
39961
39968
  const currentCompositionMetadata = useMemo110(() => {
39962
39969
  if (canvasContent?.type !== "composition")
39963
39970
  return null;
39964
39971
  return compositions.find((c) => c.id === canvasContent.compositionId) ?? null;
39965
39972
  }, [canvasContent, compositions]);
39966
- const timelinePosition = Internals55.Timeline.useTimelinePosition();
39973
+ const timelinePosition = Internals56.Timeline.useTimelinePosition();
39967
39974
  const handleAlign = useCallback114((direction) => {
39968
39975
  if (!isStudioInteractivityEnabled() || previewServerState.type !== "connected" || !track.nodePathInfo || !track.sequence.controls) {
39969
39976
  return;
@@ -39973,7 +39980,7 @@ var AlignmentControls = ({ track }) => {
39973
39980
  return;
39974
39981
  }
39975
39982
  const nodePath = track.nodePathInfo.sequenceSubscriptionKey;
39976
- const nodePropStatuses = Internals55.getPropStatusesCtx(propStatuses, nodePath);
39983
+ const nodePropStatuses = Internals56.getPropStatusesCtx(propStatuses, nodePath);
39977
39984
  const firstKeyframedStatus = Object.values(nodePropStatuses ?? {}).find((status) => status.status === "keyframed");
39978
39985
  const sourceFrame = timelinePosition - getKeyframeDisplayOffset({
39979
39986
  propStatus: firstKeyframedStatus,
@@ -40004,12 +40011,12 @@ var AlignmentControls = ({ track }) => {
40004
40011
  if (!currentCompositionMetadata?.width) {
40005
40012
  return;
40006
40013
  }
40007
- const compositionRect = Internals55.portalNode().getBoundingClientRect();
40014
+ const compositionRect = Internals56.portalNode().getBoundingClientRect();
40008
40015
  if (compositionRect.width === 0 || compositionRect.height === 0) {
40009
40016
  return;
40010
40017
  }
40011
40018
  const scale = compositionRect.width / currentCompositionMetadata.width;
40012
- const currentTranslate = propStatus ? String(Internals55.getEffectiveVisualModeValue({
40019
+ const currentTranslate = propStatus ? String(Internals56.getEffectiveVisualModeValue({
40013
40020
  propStatus,
40014
40021
  dragOverrideValue: dragOverrides[translateFieldKey],
40015
40022
  defaultValue: fieldSchema.default,
@@ -40080,7 +40087,7 @@ var AlignmentControls = ({ track }) => {
40080
40087
  return null;
40081
40088
  }
40082
40089
  const renderNodePath = track.nodePathInfo.sequenceSubscriptionKey;
40083
- const renderNodePropStatuses = Internals55.getPropStatusesCtx(propStatuses, renderNodePath);
40090
+ const renderNodePropStatuses = Internals56.getPropStatusesCtx(propStatuses, renderNodePath);
40084
40091
  const firstRenderKeyframedStatus = Object.values(renderNodePropStatuses ?? {}).find((status) => status.status === "keyframed");
40085
40092
  const renderSourceFrame = timelinePosition - getKeyframeDisplayOffset({
40086
40093
  propStatus: firstRenderKeyframedStatus,
@@ -40159,9 +40166,9 @@ var largeActionIconStyle = {
40159
40166
  width: 20
40160
40167
  };
40161
40168
  var SplitSequenceQuickAction = ({ selection, track }) => {
40162
- const timelinePosition = Internals56.Timeline.useTimelinePosition();
40163
- const { propStatuses } = useContext69(Internals56.VisualModePropStatusesContext);
40164
- const sequencePropStatuses = useMemo111(() => Internals56.getPropStatusesCtx(propStatuses, selection.nodePathInfo.sequenceSubscriptionKey), [propStatuses, selection]);
40169
+ const timelinePosition = Internals57.Timeline.useTimelinePosition();
40170
+ const { propStatuses } = useContext69(Internals57.VisualModePropStatusesContext);
40171
+ const sequencePropStatuses = useMemo111(() => Internals57.getPropStatusesCtx(propStatuses, selection.nodePathInfo.sequenceSubscriptionKey), [propStatuses, selection]);
40165
40172
  const eligibility = useMemo111(() => getTimelineSequenceSplitEligibility({
40166
40173
  selection,
40167
40174
  sequence: track.sequence,
@@ -40193,13 +40200,13 @@ var SplitSequenceQuickAction = ({ selection, track }) => {
40193
40200
  });
40194
40201
  };
40195
40202
  var SequenceSourceQuickActions = ({ selection, track, validatedSource }) => {
40196
- const timelinePosition = Internals56.Timeline.useTimelinePosition();
40203
+ const timelinePosition = Internals57.Timeline.useTimelinePosition();
40197
40204
  const { previewServerState } = useContext69(StudioServerConnectionCtx);
40198
- const { propStatuses } = useContext69(Internals56.VisualModePropStatusesContext);
40199
- const { setPropStatuses } = useContext69(Internals56.VisualModeSettersContext);
40205
+ const { propStatuses } = useContext69(Internals57.VisualModePropStatusesContext);
40206
+ const { setPropStatuses } = useContext69(Internals57.VisualModeSettersContext);
40200
40207
  const confirm = useConfirmationDialog();
40201
40208
  const deleteTimelineItems = useDeleteTimelineItems();
40202
- const propStatusesForOverride = useMemo111(() => Internals56.getPropStatusesCtx(propStatuses, selection.nodePathInfo.sequenceSubscriptionKey), [propStatuses, selection.nodePathInfo.sequenceSubscriptionKey]);
40209
+ const propStatusesForOverride = useMemo111(() => Internals57.getPropStatusesCtx(propStatuses, selection.nodePathInfo.sequenceSubscriptionKey), [propStatuses, selection.nodePathInfo.sequenceSubscriptionKey]);
40203
40210
  const freezeFrameMenuItem = getSequenceFreezeFrameMenuItem({
40204
40211
  clientId: previewServerState.type === "connected" && isStudioInteractivityEnabled() ? previewServerState.clientId : null,
40205
40212
  nodePath: selection.nodePathInfo.sequenceSubscriptionKey,
@@ -40421,7 +40428,7 @@ var SelectedInspector = ({ selection, readOnlyStudio }) => {
40421
40428
  // src/components/InspectorPanel.tsx
40422
40429
  import { jsx as jsx195, jsxs as jsxs93 } from "react/jsx-runtime";
40423
40430
  var InspectorPanel = ({ composition, currentDefaultProps, readOnlyStudio, setDefaultProps }) => {
40424
- const { canvasContent } = useContext70(Internals57.CompositionManager);
40431
+ const { canvasContent } = useContext70(Internals58.CompositionManager);
40425
40432
  const { selectedItems } = useTimelineSelection();
40426
40433
  const sameSequenceInspectorSelection = useMemo112(() => getSameSequenceInspectorSelection(selectedItems), [selectedItems]);
40427
40434
  if (selectedItems.length === 0) {
@@ -40503,8 +40510,8 @@ var SchemaResetButton = ({ onClick }) => {
40503
40510
  };
40504
40511
 
40505
40512
  // src/components/RenderQueue/index.tsx
40506
- import React136, { useContext as useContext80, useEffect as useEffect49, useMemo as useMemo123 } from "react";
40507
- import { Internals as Internals60 } from "remotion";
40513
+ import React137, { useContext as useContext80, useEffect as useEffect50, useMemo as useMemo123 } from "react";
40514
+ import { Internals as Internals61 } from "remotion";
40508
40515
 
40509
40516
  // src/components/RenderQueue/caption-job-types.ts
40510
40517
  var isCaptionJob = (job) => {
@@ -40513,15 +40520,177 @@ var isCaptionJob = (job) => {
40513
40520
 
40514
40521
  // src/components/RenderQueue/CaptionQueueItem.tsx
40515
40522
  import {
40516
- useCallback as useCallback117,
40523
+ useCallback as useCallback118,
40517
40524
  useContext as useContext71,
40518
- useEffect as useEffect46,
40525
+ useEffect as useEffect47,
40519
40526
  useMemo as useMemo113,
40527
+ useState as useState68
40528
+ } from "react";
40529
+
40530
+ // src/components/ActionTooltip.tsx
40531
+ import {
40532
+ useCallback as useCallback117,
40533
+ useEffect as useEffect46,
40534
+ useLayoutEffect as useLayoutEffect2,
40535
+ useRef as useRef36,
40520
40536
  useState as useState67
40521
40537
  } from "react";
40538
+ import { createPortal } from "react-dom";
40539
+ import { jsx as jsx197, jsxs as jsxs94, Fragment as Fragment33 } from "react/jsx-runtime";
40540
+ var triggerStyle2 = { display: "inline-flex" };
40541
+ var tooltipStyle = {
40542
+ position: "fixed",
40543
+ display: "flex",
40544
+ alignItems: "center",
40545
+ gap: 6,
40546
+ backgroundColor: TIMELINE_BACKGROUND_COLOR,
40547
+ color: WHITE_ALPHA_90,
40548
+ borderRadius: 6,
40549
+ padding: "6px 8px",
40550
+ fontSize: 12,
40551
+ lineHeight: "16px",
40552
+ whiteSpace: "pre-wrap",
40553
+ overflowWrap: "anywhere",
40554
+ maxWidth: "calc(100vw - 16px)",
40555
+ boxShadow: SHADOW_TOWARDS_TOP,
40556
+ pointerEvents: "none"
40557
+ };
40558
+ var labelStyle4 = {
40559
+ font: "inherit",
40560
+ color: "inherit",
40561
+ minWidth: 0
40562
+ };
40563
+ var shortcutStyle = {
40564
+ ...labelStyle4,
40565
+ backgroundColor: WHITE_ALPHA_10,
40566
+ borderRadius: 3,
40567
+ padding: "0 4px",
40568
+ minWidth: 16,
40569
+ textAlign: "center",
40570
+ whiteSpace: "nowrap",
40571
+ flexShrink: 0
40572
+ };
40573
+ var visibleTooltipCount = 0;
40574
+ var lastTooltipHiddenAt = null;
40575
+ var TOOLTIP_SKIP_DELAY_WINDOW = 300;
40576
+ var ActionTooltip = ({ label: label3, shortcut, delay, dismissOnClick, children }) => {
40577
+ const triggerRef = useRef36(null);
40578
+ const tooltipRef = useRef36(null);
40579
+ const timer = useRef36(null);
40580
+ const [visible, setVisible] = useState67(false);
40581
+ const [position, setPosition] = useState67(null);
40582
+ const { currentZIndex } = useZIndex();
40583
+ useLayoutEffect2(() => {
40584
+ if (!visible) {
40585
+ return;
40586
+ }
40587
+ visibleTooltipCount++;
40588
+ return () => {
40589
+ visibleTooltipCount--;
40590
+ lastTooltipHiddenAt = Date.now();
40591
+ };
40592
+ }, [visible]);
40593
+ const hide = useCallback117(() => {
40594
+ if (timer.current !== null) {
40595
+ clearTimeout(timer.current);
40596
+ timer.current = null;
40597
+ }
40598
+ setVisible(false);
40599
+ setPosition(null);
40600
+ }, []);
40601
+ const show = useCallback117(() => {
40602
+ if (timer.current !== null) {
40603
+ clearTimeout(timer.current);
40604
+ timer.current = null;
40605
+ }
40606
+ setVisible(true);
40607
+ }, []);
40608
+ const onPointerEnter = useCallback117((event) => {
40609
+ if (event.pointerType === "touch" || timer.current !== null || !event.currentTarget.contains(event.target)) {
40610
+ return;
40611
+ }
40612
+ if (!delay || visibleTooltipCount > 0 || lastTooltipHiddenAt !== null && Date.now() - lastTooltipHiddenAt < TOOLTIP_SKIP_DELAY_WINDOW) {
40613
+ show();
40614
+ return;
40615
+ }
40616
+ timer.current = setTimeout(show, delay);
40617
+ }, [delay, show]);
40618
+ useEffect46(() => {
40619
+ const onKeyDown = (event) => {
40620
+ if (event.key === "Escape") {
40621
+ hide();
40622
+ }
40623
+ };
40624
+ window.addEventListener("keydown", onKeyDown);
40625
+ window.addEventListener("blur", hide);
40626
+ window.addEventListener("resize", hide);
40627
+ window.addEventListener("scroll", hide, true);
40628
+ return () => {
40629
+ if (timer.current !== null) {
40630
+ clearTimeout(timer.current);
40631
+ }
40632
+ window.removeEventListener("keydown", onKeyDown);
40633
+ window.removeEventListener("blur", hide);
40634
+ window.removeEventListener("resize", hide);
40635
+ window.removeEventListener("scroll", hide, true);
40636
+ };
40637
+ }, [hide]);
40638
+ useLayoutEffect2(() => {
40639
+ if (!visible || !triggerRef.current || !tooltipRef.current) {
40640
+ return;
40641
+ }
40642
+ const trigger = triggerRef.current.getBoundingClientRect();
40643
+ const tooltip = tooltipRef.current.getBoundingClientRect();
40644
+ const above = trigger.top - tooltip.height - 4;
40645
+ setPosition({
40646
+ left: Math.max(8, Math.min(trigger.left + (trigger.width - tooltip.width) / 2, window.innerWidth - tooltip.width - 8)),
40647
+ top: Math.max(8, Math.min(above >= 8 ? above : trigger.bottom + 4, window.innerHeight - tooltip.height - 8))
40648
+ });
40649
+ }, [label3, shortcut, visible]);
40650
+ return /* @__PURE__ */ jsxs94(Fragment33, {
40651
+ children: [
40652
+ /* @__PURE__ */ jsx197("span", {
40653
+ ref: triggerRef,
40654
+ style: triggerStyle2,
40655
+ onPointerEnter,
40656
+ onPointerLeave: hide,
40657
+ onPointerDownCapture: dismissOnClick ? hide : undefined,
40658
+ onClickCapture: dismissOnClick ? hide : undefined,
40659
+ onFocus: (event) => {
40660
+ if (event.currentTarget.contains(event.target)) {
40661
+ show();
40662
+ }
40663
+ },
40664
+ onBlur: hide,
40665
+ children
40666
+ }),
40667
+ visible ? createPortal(/* @__PURE__ */ jsxs94("div", {
40668
+ ref: tooltipRef,
40669
+ role: "tooltip",
40670
+ className: "css-reset",
40671
+ style: {
40672
+ ...tooltipStyle,
40673
+ left: position?.left ?? 0,
40674
+ top: position?.top ?? 0,
40675
+ visibility: position ? "visible" : "hidden"
40676
+ },
40677
+ children: [
40678
+ /* @__PURE__ */ jsx197("span", {
40679
+ style: labelStyle4,
40680
+ children: label3
40681
+ }),
40682
+ shortcut ? /* @__PURE__ */ jsx197("kbd", {
40683
+ style: shortcutStyle,
40684
+ children: shortcut
40685
+ }) : null
40686
+ ]
40687
+ }), getPortal(currentZIndex)) : null
40688
+ ]
40689
+ });
40690
+ };
40522
40691
 
40523
40692
  // src/components/RenderQueue/CircularProgress.tsx
40524
- import { jsx as jsx197 } from "react/jsx-runtime";
40693
+ import { jsx as jsx198 } from "react/jsx-runtime";
40525
40694
  var RENDER_STATUS_INDICATOR_SIZE = 16;
40526
40695
  var STROKE_WIDTH = 3;
40527
40696
  var container21 = {
@@ -40532,10 +40701,10 @@ var container21 = {
40532
40701
  var CircularProgress = ({ progress }) => {
40533
40702
  const r = RENDER_STATUS_INDICATOR_SIZE / 2 - STROKE_WIDTH;
40534
40703
  const circumference = r * Math.PI * 2;
40535
- return /* @__PURE__ */ jsx197("svg", {
40704
+ return /* @__PURE__ */ jsx198("svg", {
40536
40705
  style: container21,
40537
40706
  viewBox: `0 0 ${RENDER_STATUS_INDICATOR_SIZE} ${RENDER_STATUS_INDICATOR_SIZE}`,
40538
- children: /* @__PURE__ */ jsx197("circle", {
40707
+ children: /* @__PURE__ */ jsx198("circle", {
40539
40708
  r: RENDER_STATUS_INDICATOR_SIZE / 2 - STROKE_WIDTH,
40540
40709
  stroke: LIGHT_TEXT,
40541
40710
  fill: "none",
@@ -40568,16 +40737,16 @@ var renderQueueItemSubtitleStyle = {
40568
40737
  };
40569
40738
 
40570
40739
  // src/components/RenderQueue/SuccessIcon.tsx
40571
- import { jsx as jsx198 } from "react/jsx-runtime";
40740
+ import { jsx as jsx199 } from "react/jsx-runtime";
40572
40741
  var iconStyle2 = {
40573
40742
  height: RENDER_STATUS_INDICATOR_SIZE,
40574
40743
  width: RENDER_STATUS_INDICATOR_SIZE
40575
40744
  };
40576
40745
  var SuccessIcon = () => {
40577
- return /* @__PURE__ */ jsx198("svg", {
40746
+ return /* @__PURE__ */ jsx199("svg", {
40578
40747
  style: iconStyle2,
40579
40748
  viewBox: "0 0 512 512",
40580
- children: /* @__PURE__ */ jsx198("path", {
40749
+ children: /* @__PURE__ */ jsx199("path", {
40581
40750
  fill: LIGHT_TEXT,
40582
40751
  d: "M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zM369 209L241 337l-17 17-17-17-64-64-17-17L160 222.1l17 17 47 47L335 175l17-17L385.9 192l-17 17z"
40583
40752
  })
@@ -40585,7 +40754,7 @@ var SuccessIcon = () => {
40585
40754
  };
40586
40755
 
40587
40756
  // src/components/RenderQueue/CaptionQueueItem.tsx
40588
- import { jsx as jsx199, jsxs as jsxs94 } from "react/jsx-runtime";
40757
+ import { jsx as jsx200, jsxs as jsxs95 } from "react/jsx-runtime";
40589
40758
  var container22 = {
40590
40759
  padding: 12,
40591
40760
  display: "flex",
@@ -40627,7 +40796,7 @@ var removeIcon = {
40627
40796
  };
40628
40797
  var CaptionJobStatus = ({ job }) => {
40629
40798
  if (job.status === "running") {
40630
- return /* @__PURE__ */ jsx199("div", {
40799
+ return /* @__PURE__ */ jsx200("div", {
40631
40800
  style: statusIcon,
40632
40801
  role: "progressbar",
40633
40802
  "aria-label": "Caption job progress",
@@ -40635,35 +40804,35 @@ var CaptionJobStatus = ({ job }) => {
40635
40804
  "aria-valuemin": 0,
40636
40805
  "aria-valuemax": 100,
40637
40806
  "aria-valuenow": Math.round(job.progress.value * 100),
40638
- children: /* @__PURE__ */ jsx199(CircularProgress, {
40807
+ children: /* @__PURE__ */ jsx200(CircularProgress, {
40639
40808
  progress: Math.max(0.07, job.progress.value)
40640
40809
  })
40641
40810
  });
40642
40811
  }
40643
40812
  if (job.status === "done") {
40644
- return /* @__PURE__ */ jsx199(SuccessIcon, {});
40813
+ return /* @__PURE__ */ jsx200(SuccessIcon, {});
40645
40814
  }
40646
40815
  if (job.status === "failed") {
40647
- return /* @__PURE__ */ jsx199("svg", {
40816
+ return /* @__PURE__ */ jsx200("svg", {
40648
40817
  style: statusIcon,
40649
40818
  viewBox: "0 0 512 512",
40650
- children: /* @__PURE__ */ jsx199("path", {
40819
+ children: /* @__PURE__ */ jsx200("path", {
40651
40820
  fill: FAIL_COLOR,
40652
40821
  d: "M0 160V352L160 512H352L512 352V160L352 0H160L0 160zm353.9 32l-17 17-47 47 47 47 17 17L320 353.9l-17-17-47-47-47 47-17 17L158.1 320l17-17 47-47-47-47-17-17L192 158.1l17 17 47 47 47-47 17-17L353.9 192z"
40653
40822
  })
40654
40823
  });
40655
40824
  }
40656
- return /* @__PURE__ */ jsx199("svg", {
40825
+ return /* @__PURE__ */ jsx200("svg", {
40657
40826
  style: statusIcon,
40658
40827
  viewBox: "0 0 512 512",
40659
- children: /* @__PURE__ */ jsx199("path", {
40828
+ children: /* @__PURE__ */ jsx200("path", {
40660
40829
  fill: LIGHT_TEXT,
40661
40830
  d: "M256 512C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256s-114.6 256-256 256zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"
40662
40831
  })
40663
40832
  });
40664
40833
  };
40665
40834
  var CaptionQueueItem = ({ job, selected }) => {
40666
- const [hovered, setHovered] = useState67(false);
40835
+ const [hovered, setHovered] = useState68(false);
40667
40836
  const { removeCaptionJob } = useContext71(RenderQueueContext);
40668
40837
  const selectAsset = useSelectAsset();
40669
40838
  const isHoverable = job.status === "done";
@@ -40678,36 +40847,36 @@ var CaptionQueueItem = ({ job, selected }) => {
40678
40847
  WebkitUserSelect: "none"
40679
40848
  };
40680
40849
  }, [hovered, isHoverable, selected]);
40681
- const onPointerEnter = useCallback117(() => {
40850
+ const onPointerEnter = useCallback118(() => {
40682
40851
  setHovered(true);
40683
40852
  }, []);
40684
- const onPointerLeave = useCallback117(() => {
40853
+ const onPointerLeave = useCallback118(() => {
40685
40854
  setHovered(false);
40686
40855
  }, []);
40687
- const scrollCurrentIntoView = useCallback117(() => {
40856
+ const scrollCurrentIntoView = useCallback118(() => {
40688
40857
  document.querySelector(`.${RENDER_QUEUE_ITEM_SELECTED_CLASSNAME}`)?.scrollIntoView({ behavior: "smooth" });
40689
40858
  }, []);
40690
- const onClick = useCallback117(() => {
40859
+ const onClick = useCallback118(() => {
40691
40860
  if (job.status !== "done") {
40692
40861
  return;
40693
40862
  }
40694
40863
  selectAsset(job.outName);
40695
40864
  pushUrl(`/assets/${job.outName}`);
40696
40865
  }, [job, selectAsset]);
40697
- useEffect46(() => {
40866
+ useEffect47(() => {
40698
40867
  if (selected) {
40699
40868
  scrollCurrentIntoView();
40700
40869
  }
40701
40870
  }, [scrollCurrentIntoView, selected]);
40702
- const onRemove = useCallback117((event) => {
40871
+ const onRemove = useCallback118((event) => {
40703
40872
  event.stopPropagation();
40704
40873
  removeCaptionJob(job.id);
40705
40874
  }, [job.id, removeCaptionJob]);
40706
- const renderRemoveAction = useCallback117((color) => {
40707
- return /* @__PURE__ */ jsx199("svg", {
40875
+ const renderRemoveAction = useCallback118((color) => {
40876
+ return /* @__PURE__ */ jsx200("svg", {
40708
40877
  style: removeIcon,
40709
40878
  viewBox: "0 0 320 512",
40710
- children: /* @__PURE__ */ jsx199("path", {
40879
+ children: /* @__PURE__ */ jsx200("path", {
40711
40880
  fill: color,
40712
40881
  d: "M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z"
40713
40882
  })
@@ -40725,7 +40894,7 @@ var CaptionQueueItem = ({ job, selected }) => {
40725
40894
  }
40726
40895
  return job.outName;
40727
40896
  }, [job]);
40728
- return /* @__PURE__ */ jsxs94(Row, {
40897
+ return /* @__PURE__ */ jsxs95(Row, {
40729
40898
  "data-render-queue-item": job.id,
40730
40899
  style: containerStyle10,
40731
40900
  align: "center",
@@ -40734,22 +40903,22 @@ var CaptionQueueItem = ({ job, selected }) => {
40734
40903
  onPointerLeave,
40735
40904
  className: selected ? RENDER_QUEUE_ITEM_SELECTED_CLASSNAME : undefined,
40736
40905
  children: [
40737
- /* @__PURE__ */ jsx199(CaptionJobStatus, {
40906
+ /* @__PURE__ */ jsx200(CaptionJobStatus, {
40738
40907
  job
40739
40908
  }),
40740
- /* @__PURE__ */ jsx199(Spacing, {
40909
+ /* @__PURE__ */ jsx200(Spacing, {
40741
40910
  x: 1
40742
40911
  }),
40743
- /* @__PURE__ */ jsxs94("div", {
40912
+ /* @__PURE__ */ jsxs95("div", {
40744
40913
  style: right,
40745
40914
  children: [
40746
- /* @__PURE__ */ jsx199("div", {
40915
+ /* @__PURE__ */ jsx200("div", {
40747
40916
  style: title,
40748
40917
  children: job.displayName
40749
40918
  }),
40750
- /* @__PURE__ */ jsx199("div", {
40919
+ /* @__PURE__ */ jsx200("div", {
40751
40920
  style: subtitleContainer,
40752
- children: /* @__PURE__ */ jsx199("span", {
40921
+ children: /* @__PURE__ */ jsx200("span", {
40753
40922
  style: subtitle2,
40754
40923
  title: message,
40755
40924
  children: message
@@ -40757,14 +40926,20 @@ var CaptionQueueItem = ({ job, selected }) => {
40757
40926
  })
40758
40927
  ]
40759
40928
  }),
40760
- /* @__PURE__ */ jsx199(Spacing, {
40929
+ /* @__PURE__ */ jsx200(Spacing, {
40761
40930
  x: 1
40762
40931
  }),
40763
- job.status === "running" ? null : /* @__PURE__ */ jsx199(InlineAction, {
40764
- renderAction: renderRemoveAction,
40765
- onClick: onRemove,
40766
- title: "Remove",
40767
- variant: null
40932
+ job.status === "running" ? null : /* @__PURE__ */ jsx200(ActionTooltip, {
40933
+ label: "Clear",
40934
+ shortcut: null,
40935
+ delay: 800,
40936
+ dismissOnClick: true,
40937
+ children: /* @__PURE__ */ jsx200(InlineAction, {
40938
+ renderAction: renderRemoveAction,
40939
+ onClick: onRemove,
40940
+ "aria-label": "Clear",
40941
+ variant: null
40942
+ })
40768
40943
  })
40769
40944
  ]
40770
40945
  });
@@ -40772,13 +40947,13 @@ var CaptionQueueItem = ({ job, selected }) => {
40772
40947
 
40773
40948
  // src/components/RenderQueue/RenderQueueItem.tsx
40774
40949
  import {
40775
- useCallback as useCallback128,
40950
+ useCallback as useCallback129,
40776
40951
  useContext as useContext78,
40777
- useEffect as useEffect48,
40952
+ useEffect as useEffect49,
40778
40953
  useMemo as useMemo121,
40779
- useState as useState69
40954
+ useState as useState70
40780
40955
  } from "react";
40781
- import { Internals as Internals59 } from "remotion";
40956
+ import { Internals as Internals60 } from "remotion";
40782
40957
 
40783
40958
  // src/components/RenderQueue/client-side-render-types.ts
40784
40959
  var isRestoredClientJob = (job) => {
@@ -40786,21 +40961,21 @@ var isRestoredClientJob = (job) => {
40786
40961
  };
40787
40962
 
40788
40963
  // src/components/RenderQueue/RenderQueueCancelledMessage.tsx
40789
- import { jsx as jsx200 } from "react/jsx-runtime";
40964
+ import { jsx as jsx201 } from "react/jsx-runtime";
40790
40965
  var cancelledStyle = {
40791
40966
  ...renderQueueItemSubtitleStyle,
40792
40967
  color: LIGHT_TEXT,
40793
40968
  cursor: "default"
40794
40969
  };
40795
40970
  var RenderQueueCancelledMessage = () => {
40796
- return /* @__PURE__ */ jsx200("span", {
40971
+ return /* @__PURE__ */ jsx201("span", {
40797
40972
  style: cancelledStyle,
40798
40973
  children: "Cancelled"
40799
40974
  });
40800
40975
  };
40801
40976
 
40802
40977
  // src/components/RenderQueue/RenderQueueCopyToClipboard.tsx
40803
- import { useCallback as useCallback118 } from "react";
40978
+ import { useCallback as useCallback119 } from "react";
40804
40979
 
40805
40980
  // src/helpers/get-asset-metadata.ts
40806
40981
  import { staticFile as staticFile5 } from "remotion";
@@ -40946,7 +41121,7 @@ var getAssetMetadata = async (canvasContent, addTime) => {
40946
41121
  };
40947
41122
 
40948
41123
  // src/components/RenderQueue/RenderQueueCopyToClipboard.tsx
40949
- import { jsx as jsx201 } from "react/jsx-runtime";
41124
+ import { jsx as jsx202 } from "react/jsx-runtime";
40950
41125
  var revealIconStyle = {
40951
41126
  height: 12,
40952
41127
  color: CURRENT_COLOR
@@ -40968,14 +41143,14 @@ var supportsCopyingToClipboard = (job) => {
40968
41143
  };
40969
41144
  var RenderQueueCopyToClipboard = ({ job }) => {
40970
41145
  const { copied, markCopied } = useCopyFeedback();
40971
- const renderCopyAction = useCallback118((color) => {
40972
- return /* @__PURE__ */ jsx201(CopyIcon, {
41146
+ const renderCopyAction = useCallback119((color) => {
41147
+ return /* @__PURE__ */ jsx202(CopyIcon, {
40973
41148
  copied,
40974
41149
  style: revealIconStyle,
40975
41150
  color
40976
41151
  });
40977
41152
  }, [copied]);
40978
- const onClick = useCallback118(async (e) => {
41153
+ const onClick = useCallback119(async (e) => {
40979
41154
  e.stopPropagation();
40980
41155
  try {
40981
41156
  const src = `${remotion_outputsBase}/${job.outName}`;
@@ -40996,19 +41171,25 @@ var RenderQueueCopyToClipboard = ({ job }) => {
40996
41171
  showNotification(`Could not copy to clipboard: ${err.message}`, 2000);
40997
41172
  }
40998
41173
  }, [job.outName, markCopied]);
40999
- return /* @__PURE__ */ jsx201(InlineAction, {
41000
- variant: null,
41001
- title: "Copy to clipboard",
41002
- renderAction: renderCopyAction,
41003
- onClick
41174
+ return /* @__PURE__ */ jsx202(ActionTooltip, {
41175
+ label: "Copy to clipboard",
41176
+ shortcut: null,
41177
+ delay: 800,
41178
+ dismissOnClick: true,
41179
+ children: /* @__PURE__ */ jsx202(InlineAction, {
41180
+ "aria-label": "Copy to clipboard",
41181
+ variant: null,
41182
+ renderAction: renderCopyAction,
41183
+ onClick
41184
+ })
41004
41185
  });
41005
41186
  };
41006
41187
 
41007
41188
  // src/components/RenderQueue/RenderQueueDownloadItem.tsx
41008
- import { useCallback as useCallback119, useMemo as useMemo114 } from "react";
41009
- import { jsx as jsx202 } from "react/jsx-runtime";
41189
+ import { useCallback as useCallback120, useMemo as useMemo114 } from "react";
41190
+ import { jsx as jsx203 } from "react/jsx-runtime";
41010
41191
  var RenderQueueDownloadItem = ({ job }) => {
41011
- const onClick = useCallback119((e) => {
41192
+ const onClick = useCallback120((e) => {
41012
41193
  e.stopPropagation();
41013
41194
  if (job.status !== "done" || !job.getBlob) {
41014
41195
  return;
@@ -41025,35 +41206,41 @@ var RenderQueueDownloadItem = ({ job }) => {
41025
41206
  color: CURRENT_COLOR
41026
41207
  };
41027
41208
  }, []);
41028
- const renderAction = useCallback119((color) => {
41029
- return /* @__PURE__ */ jsx202("svg", {
41209
+ const renderAction = useCallback120((color) => {
41210
+ return /* @__PURE__ */ jsx203("svg", {
41030
41211
  style: icon5,
41031
41212
  xmlns: "http://www.w3.org/2000/svg",
41032
41213
  viewBox: "0 0 512 512",
41033
- children: /* @__PURE__ */ jsx202("path", {
41214
+ children: /* @__PURE__ */ jsx203("path", {
41034
41215
  fill: color,
41035
41216
  d: "M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 242.7-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7 288 32zM64 352c-35.3 0-64 28.7-64 64l0 32c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-32c0-35.3-28.7-64-64-64l-101.5 0-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352 64 352zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"
41036
41217
  })
41037
41218
  });
41038
41219
  }, [icon5]);
41039
- return /* @__PURE__ */ jsx202(InlineAction, {
41040
- variant: null,
41041
- renderAction,
41042
- onClick,
41043
- title: "Download"
41220
+ return /* @__PURE__ */ jsx203(ActionTooltip, {
41221
+ label: "Download",
41222
+ shortcut: null,
41223
+ delay: 800,
41224
+ dismissOnClick: true,
41225
+ children: /* @__PURE__ */ jsx203(InlineAction, {
41226
+ "aria-label": "Download",
41227
+ variant: null,
41228
+ renderAction,
41229
+ onClick
41230
+ })
41044
41231
  });
41045
41232
  };
41046
41233
 
41047
41234
  // src/components/RenderQueue/RenderQueueError.tsx
41048
- import { useCallback as useCallback120, useContext as useContext72 } from "react";
41049
- import { jsx as jsx203 } from "react/jsx-runtime";
41235
+ import { useCallback as useCallback121, useContext as useContext72 } from "react";
41236
+ import { jsx as jsx204 } from "react/jsx-runtime";
41050
41237
  var outputLocation = {
41051
41238
  ...renderQueueItemSubtitleStyle
41052
41239
  };
41053
41240
  var RenderQueueError = ({ job }) => {
41054
41241
  const { setSelectedModal } = useContext72(SetSelectedModalContext);
41055
41242
  const { tabIndex } = useZIndex();
41056
- const onClick = useCallback120(() => {
41243
+ const onClick = useCallback121(() => {
41057
41244
  setSelectedModal({
41058
41245
  type: "render-progress",
41059
41246
  jobId: job.id
@@ -41062,7 +41249,7 @@ var RenderQueueError = ({ job }) => {
41062
41249
  if (job.status !== "failed") {
41063
41250
  throw new Error("should not have rendered this component");
41064
41251
  }
41065
- return /* @__PURE__ */ jsx203("button", {
41252
+ return /* @__PURE__ */ jsx204("button", {
41066
41253
  onClick,
41067
41254
  type: "button",
41068
41255
  style: outputLocation,
@@ -41073,12 +41260,12 @@ var RenderQueueError = ({ job }) => {
41073
41260
  };
41074
41261
 
41075
41262
  // src/components/RenderQueue/RenderQueueItemCancelButton.tsx
41076
- import { useCallback as useCallback121, useContext as useContext73, useMemo as useMemo115 } from "react";
41077
- import { jsx as jsx204 } from "react/jsx-runtime";
41263
+ import { useCallback as useCallback122, useContext as useContext73, useMemo as useMemo115 } from "react";
41264
+ import { jsx as jsx205 } from "react/jsx-runtime";
41078
41265
  var RenderQueueCancelButton = ({ job }) => {
41079
41266
  const isClientJob = isClientRenderJob(job);
41080
41267
  const { cancelClientJob } = useContext73(RenderQueueContext);
41081
- const onClick = useCallback121((e) => {
41268
+ const onClick = useCallback122((e) => {
41082
41269
  e.stopPropagation();
41083
41270
  if (isClientJob) {
41084
41271
  cancelClientJob(job.id);
@@ -41094,27 +41281,34 @@ var RenderQueueCancelButton = ({ job }) => {
41094
41281
  color: CURRENT_COLOR
41095
41282
  };
41096
41283
  }, []);
41097
- const renderAction = useCallback121((color) => {
41098
- return /* @__PURE__ */ jsx204("svg", {
41284
+ const renderAction = useCallback122((color) => {
41285
+ return /* @__PURE__ */ jsx205("svg", {
41099
41286
  style: icon5,
41100
41287
  xmlns: "http://www.w3.org/2000/svg",
41101
41288
  viewBox: "0 0 512 512",
41102
- children: /* @__PURE__ */ jsx204("path", {
41289
+ children: /* @__PURE__ */ jsx205("path", {
41103
41290
  fill: color,
41104
41291
  d: "M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM512 256c0 141.4-114.6 256-256 256S0 397.4 0 256S114.6 0 256 0S512 114.6 512 256z"
41105
41292
  })
41106
41293
  });
41107
41294
  }, [icon5]);
41108
- return /* @__PURE__ */ jsx204(InlineAction, {
41109
- renderAction,
41110
- onClick,
41111
- variant: null
41295
+ return /* @__PURE__ */ jsx205(ActionTooltip, {
41296
+ label: "Cancel render",
41297
+ shortcut: null,
41298
+ delay: 800,
41299
+ dismissOnClick: true,
41300
+ children: /* @__PURE__ */ jsx205(InlineAction, {
41301
+ "aria-label": "Cancel render",
41302
+ renderAction,
41303
+ onClick,
41304
+ variant: null
41305
+ })
41112
41306
  });
41113
41307
  };
41114
41308
 
41115
41309
  // src/components/RenderQueue/RenderQueueItemStatus.tsx
41116
- import React128, { useCallback as useCallback122, useContext as useContext74 } from "react";
41117
- import { jsx as jsx205 } from "react/jsx-runtime";
41310
+ import React129, { useCallback as useCallback123, useContext as useContext74 } from "react";
41311
+ import { jsx as jsx206 } from "react/jsx-runtime";
41118
41312
  var iconStyle3 = {
41119
41313
  height: RENDER_STATUS_INDICATOR_SIZE,
41120
41314
  width: RENDER_STATUS_INDICATOR_SIZE
@@ -41128,15 +41322,15 @@ var invisibleStyle = {
41128
41322
  };
41129
41323
  var RenderQueueItemStatus = ({ job }) => {
41130
41324
  const { setSelectedModal } = useContext74(SetSelectedModalContext);
41131
- const [hovered, setHovered] = React128.useState(false);
41325
+ const [hovered, setHovered] = React129.useState(false);
41132
41326
  const isClientJob = isClientRenderJob(job);
41133
- const onPointerEnter = useCallback122(() => {
41327
+ const onPointerEnter = useCallback123(() => {
41134
41328
  setHovered(true);
41135
41329
  }, []);
41136
- const onPointerLeave = useCallback122(() => {
41330
+ const onPointerLeave = useCallback123(() => {
41137
41331
  setHovered(false);
41138
41332
  }, []);
41139
- const onClick = useCallback122((e) => {
41333
+ const onClick = useCallback123((e) => {
41140
41334
  e.stopPropagation();
41141
41335
  setSelectedModal({
41142
41336
  type: "render-progress",
@@ -41144,14 +41338,14 @@ var RenderQueueItemStatus = ({ job }) => {
41144
41338
  });
41145
41339
  }, [job.id, setSelectedModal]);
41146
41340
  if (job.status === "failed") {
41147
- return /* @__PURE__ */ jsx205("button", {
41341
+ return /* @__PURE__ */ jsx206("button", {
41148
41342
  type: "button",
41149
41343
  style: invisibleStyle,
41150
41344
  onClick,
41151
- children: /* @__PURE__ */ jsx205("svg", {
41345
+ children: /* @__PURE__ */ jsx206("svg", {
41152
41346
  style: iconStyle3,
41153
41347
  viewBox: "0 0 512 512",
41154
- children: /* @__PURE__ */ jsx205("path", {
41348
+ children: /* @__PURE__ */ jsx206("path", {
41155
41349
  fill: FAIL_COLOR,
41156
41350
  d: "M0 160V352L160 512H352L512 352V160L352 0H160L0 160zm353.9 32l-17 17-47 47 47 47 17 17L320 353.9l-17-17-47-47-47 47-17 17L158.1 320l17-17 47-47-47-47-17-17L192 158.1l17 17 47 47 47-47 17-17L353.9 192z"
41157
41351
  })
@@ -41159,26 +41353,26 @@ var RenderQueueItemStatus = ({ job }) => {
41159
41353
  });
41160
41354
  }
41161
41355
  if (job.status === "idle") {
41162
- return /* @__PURE__ */ jsx205("svg", {
41356
+ return /* @__PURE__ */ jsx206("svg", {
41163
41357
  style: iconStyle3,
41164
41358
  viewBox: "0 0 512 512",
41165
- children: /* @__PURE__ */ jsx205("path", {
41359
+ children: /* @__PURE__ */ jsx206("path", {
41166
41360
  fill: LIGHT_TEXT,
41167
41361
  d: "M256 512C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256s-114.6 256-256 256zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"
41168
41362
  })
41169
41363
  });
41170
41364
  }
41171
41365
  if (job.status === "done") {
41172
- return /* @__PURE__ */ jsx205("button", {
41366
+ return /* @__PURE__ */ jsx206("button", {
41173
41367
  type: "button",
41174
41368
  style: invisibleStyle,
41175
41369
  onPointerEnter,
41176
41370
  onPointerLeave,
41177
41371
  onClick,
41178
- children: /* @__PURE__ */ jsx205("svg", {
41372
+ children: /* @__PURE__ */ jsx206("svg", {
41179
41373
  style: iconStyle3,
41180
41374
  viewBox: "0 0 512 512",
41181
- children: /* @__PURE__ */ jsx205("path", {
41375
+ children: /* @__PURE__ */ jsx206("path", {
41182
41376
  fill: hovered ? WHITE : LIGHT_TEXT,
41183
41377
  d: "M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zM369 209L241 337l-17 17-17-17-64-64-17-17L160 222.1l17 17 47 47L335 175l17-17L385.9 192l-17 17z"
41184
41378
  })
@@ -41192,30 +41386,30 @@ var RenderQueueItemStatus = ({ job }) => {
41192
41386
  } else {
41193
41387
  progressValue = job.progress.value;
41194
41388
  }
41195
- return /* @__PURE__ */ jsx205("button", {
41389
+ return /* @__PURE__ */ jsx206("button", {
41196
41390
  type: "button",
41197
41391
  style: invisibleStyle,
41198
41392
  onClick,
41199
- children: /* @__PURE__ */ jsx205(CircularProgress, {
41393
+ children: /* @__PURE__ */ jsx206(CircularProgress, {
41200
41394
  progress: Math.max(0.07, progressValue)
41201
41395
  })
41202
41396
  });
41203
41397
  }
41204
41398
  if (job.status === "saving") {
41205
- return /* @__PURE__ */ jsx205("button", {
41399
+ return /* @__PURE__ */ jsx206("button", {
41206
41400
  type: "button",
41207
41401
  style: invisibleStyle,
41208
41402
  onClick,
41209
- children: /* @__PURE__ */ jsx205(CircularProgress, {
41403
+ children: /* @__PURE__ */ jsx206(CircularProgress, {
41210
41404
  progress: 0.95
41211
41405
  })
41212
41406
  });
41213
41407
  }
41214
41408
  if (job.status === "cancelled") {
41215
- return /* @__PURE__ */ jsx205("svg", {
41409
+ return /* @__PURE__ */ jsx206("svg", {
41216
41410
  style: iconStyle3,
41217
41411
  viewBox: "0 0 512 512",
41218
- children: /* @__PURE__ */ jsx205("path", {
41412
+ children: /* @__PURE__ */ jsx206("path", {
41219
41413
  fill: FAIL_COLOR,
41220
41414
  d: "M0 160V352L160 512H352L512 352V160L352 0H160L0 160zm353.9 32l-17 17-47 47 47 47 17 17L320 353.9l-17-17-47-47-47 47-17 17L158.1 320l17-17 47-47-47-47-17-17L192 158.1l17 17 47 47 47-47 17-17L353.9 192z"
41221
41415
  })
@@ -41225,11 +41419,11 @@ var RenderQueueItemStatus = ({ job }) => {
41225
41419
  };
41226
41420
 
41227
41421
  // src/components/RenderQueue/RenderQueueOpenInFolder.tsx
41228
- import { useCallback as useCallback123, useMemo as useMemo116 } from "react";
41229
- import { jsx as jsx206 } from "react/jsx-runtime";
41422
+ import { useCallback as useCallback124, useMemo as useMemo116 } from "react";
41423
+ import { jsx as jsx207 } from "react/jsx-runtime";
41230
41424
  var RenderQueueOpenInFinderItem = ({ job }) => {
41231
41425
  const isBrowserStudio = getBrowserStudioOperations() !== null;
41232
- const onClick = useCallback123((e) => {
41426
+ const onClick = useCallback124((e) => {
41233
41427
  e.stopPropagation();
41234
41428
  openInFileExplorer({ directory: job.outName }).catch((err) => {
41235
41429
  showNotification(`Could not open file: ${err.message}`, 2000);
@@ -41241,22 +41435,29 @@ var RenderQueueOpenInFinderItem = ({ job }) => {
41241
41435
  color: CURRENT_COLOR
41242
41436
  };
41243
41437
  }, []);
41244
- const renderAction = useCallback123((color) => {
41245
- return /* @__PURE__ */ jsx206(ExpandedFolderIconSolid, {
41438
+ const renderAction = useCallback124((color) => {
41439
+ return /* @__PURE__ */ jsx207(ExpandedFolderIconSolid, {
41246
41440
  style: icon5,
41247
41441
  color
41248
41442
  });
41249
41443
  }, [icon5]);
41250
- return isBrowserStudio ? null : /* @__PURE__ */ jsx206(InlineAction, {
41251
- renderAction,
41252
- onClick,
41253
- variant: null
41444
+ return isBrowserStudio ? null : /* @__PURE__ */ jsx207(ActionTooltip, {
41445
+ label: "Open in Folder",
41446
+ shortcut: null,
41447
+ delay: 800,
41448
+ dismissOnClick: true,
41449
+ children: /* @__PURE__ */ jsx207(InlineAction, {
41450
+ "aria-label": "Open in Folder",
41451
+ renderAction,
41452
+ onClick,
41453
+ variant: null
41454
+ })
41254
41455
  });
41255
41456
  };
41256
41457
 
41257
41458
  // src/components/RenderQueue/RenderQueueOutputName.tsx
41258
41459
  import { useMemo as useMemo117 } from "react";
41259
- import { jsx as jsx207 } from "react/jsx-runtime";
41460
+ import { jsx as jsx208 } from "react/jsx-runtime";
41260
41461
  var RenderQueueOutputName = ({ job }) => {
41261
41462
  const deletedOutputLocation = "deletedOutputLocation" in job && job.deletedOutputLocation;
41262
41463
  const style4 = useMemo117(() => {
@@ -41273,7 +41474,7 @@ var RenderQueueOutputName = ({ job }) => {
41273
41474
  }
41274
41475
  return job.outName;
41275
41476
  };
41276
- return /* @__PURE__ */ jsx207("span", {
41477
+ return /* @__PURE__ */ jsx208("span", {
41277
41478
  style: style4,
41278
41479
  title: getTitle(),
41279
41480
  children: job.outName
@@ -41281,7 +41482,7 @@ var RenderQueueOutputName = ({ job }) => {
41281
41482
  };
41282
41483
 
41283
41484
  // src/components/RenderQueue/RenderQueueProgressMessage.tsx
41284
- import { useCallback as useCallback124, useContext as useContext75 } from "react";
41485
+ import { useCallback as useCallback125, useContext as useContext75 } from "react";
41285
41486
 
41286
41487
  // src/components/RenderQueue/client-render-progress.ts
41287
41488
  var formatEtaString = (timeRemainingInMilliseconds) => {
@@ -41310,7 +41511,7 @@ var getClientRenderProgressMessage = (progress) => {
41310
41511
  };
41311
41512
 
41312
41513
  // src/components/RenderQueue/RenderQueueProgressMessage.tsx
41313
- import { jsx as jsx208 } from "react/jsx-runtime";
41514
+ import { jsx as jsx209 } from "react/jsx-runtime";
41314
41515
  var outputLocation2 = {
41315
41516
  ...renderQueueItemSubtitleStyle
41316
41517
  };
@@ -41321,14 +41522,14 @@ var RenderQueueProgressMessage = ({ job }) => {
41321
41522
  const { setSelectedModal } = useContext75(SetSelectedModalContext);
41322
41523
  const { tabIndex } = useZIndex();
41323
41524
  const isClientJob = isClientRenderJob(job);
41324
- const onClick = useCallback124(() => {
41525
+ const onClick = useCallback125(() => {
41325
41526
  setSelectedModal({
41326
41527
  type: "render-progress",
41327
41528
  jobId: job.id
41328
41529
  });
41329
41530
  }, [job.id, setSelectedModal]);
41330
41531
  const message = isClientJob ? getClientRenderProgressMessage(job.progress) : job.progress.message;
41331
- return /* @__PURE__ */ jsx208("button", {
41532
+ return /* @__PURE__ */ jsx209("button", {
41332
41533
  onClick,
41333
41534
  type: "button",
41334
41535
  style: outputLocation2,
@@ -41339,8 +41540,8 @@ var RenderQueueProgressMessage = ({ job }) => {
41339
41540
  };
41340
41541
 
41341
41542
  // src/components/RenderQueue/RenderQueueRemoveItem.tsx
41342
- import { useCallback as useCallback125, useContext as useContext76, useMemo as useMemo118 } from "react";
41343
- import { Internals as Internals58 } from "remotion";
41543
+ import { useCallback as useCallback126, useContext as useContext76, useMemo as useMemo118 } from "react";
41544
+ import { Internals as Internals59 } from "remotion";
41344
41545
 
41345
41546
  // src/api/save-render-output.ts
41346
41547
  var throwIfNotOk = async (response) => {
@@ -41376,13 +41577,13 @@ var unregisterClientRender = async (id) => {
41376
41577
  };
41377
41578
 
41378
41579
  // src/components/RenderQueue/RenderQueueRemoveItem.tsx
41379
- import { jsx as jsx209 } from "react/jsx-runtime";
41580
+ import { jsx as jsx210 } from "react/jsx-runtime";
41380
41581
  var RenderQueueRemoveItem = ({ job }) => {
41381
41582
  const isClientJob = isClientRenderJob(job);
41382
41583
  const { removeClientJob } = useContext76(RenderQueueContext);
41383
- const { canvasContent } = useContext76(Internals58.CompositionManager);
41384
- const { setCanvasContent } = useContext76(Internals58.CompositionSetters);
41385
- const onClick = useCallback125((e) => {
41584
+ const { canvasContent } = useContext76(Internals59.CompositionManager);
41585
+ const { setCanvasContent } = useContext76(Internals59.CompositionSetters);
41586
+ const onClick = useCallback126((e) => {
41386
41587
  e.stopPropagation();
41387
41588
  if (isClientJob) {
41388
41589
  if (canvasContent && canvasContent.type === "output" && job.status === "done" && canvasContent.path === `/${job.outName}`) {
@@ -41402,27 +41603,33 @@ var RenderQueueRemoveItem = ({ job }) => {
41402
41603
  color: CURRENT_COLOR
41403
41604
  };
41404
41605
  }, []);
41405
- const renderAction = useCallback125((color) => {
41406
- return /* @__PURE__ */ jsx209("svg", {
41606
+ const renderAction = useCallback126((color) => {
41607
+ return /* @__PURE__ */ jsx210("svg", {
41407
41608
  style: icon5,
41408
41609
  xmlns: "http://www.w3.org/2000/svg",
41409
41610
  viewBox: "0 0 320 512",
41410
- children: /* @__PURE__ */ jsx209("path", {
41611
+ children: /* @__PURE__ */ jsx210("path", {
41411
41612
  fill: color,
41412
41613
  d: "M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z"
41413
41614
  })
41414
41615
  });
41415
41616
  }, [icon5]);
41416
- return /* @__PURE__ */ jsx209(InlineAction, {
41417
- renderAction,
41418
- onClick,
41419
- title: "Remove",
41420
- variant: null
41617
+ return /* @__PURE__ */ jsx210(ActionTooltip, {
41618
+ label: "Clear",
41619
+ shortcut: null,
41620
+ delay: 800,
41621
+ dismissOnClick: true,
41622
+ children: /* @__PURE__ */ jsx210(InlineAction, {
41623
+ "aria-label": "Clear",
41624
+ renderAction,
41625
+ onClick,
41626
+ variant: null
41627
+ })
41421
41628
  });
41422
41629
  };
41423
41630
 
41424
41631
  // src/components/RenderQueue/RenderQueueRepeat.tsx
41425
- import { useCallback as useCallback126, useContext as useContext77, useMemo as useMemo119 } from "react";
41632
+ import { useCallback as useCallback127, useContext as useContext77, useMemo as useMemo119 } from "react";
41426
41633
 
41427
41634
  // src/helpers/retry-payload.ts
41428
41635
  import { NoReactInternals as NoReactInternals15 } from "remotion/no-react";
@@ -41627,11 +41834,11 @@ var makeClientRetryPayload = (job) => {
41627
41834
  };
41628
41835
 
41629
41836
  // src/components/RenderQueue/RenderQueueRepeat.tsx
41630
- import { jsx as jsx210 } from "react/jsx-runtime";
41837
+ import { jsx as jsx211 } from "react/jsx-runtime";
41631
41838
  var RenderQueueRepeatItem = ({ job }) => {
41632
41839
  const { setSelectedModal } = useContext77(SetSelectedModalContext);
41633
41840
  const isClientJob = isClientRenderJob(job);
41634
- const onClick = useCallback126((e) => {
41841
+ const onClick = useCallback127((e) => {
41635
41842
  e.stopPropagation();
41636
41843
  if (isClientJob) {
41637
41844
  const retryPayload = makeClientRetryPayload(job);
@@ -41647,31 +41854,38 @@ var RenderQueueRepeatItem = ({ job }) => {
41647
41854
  color: CURRENT_COLOR
41648
41855
  };
41649
41856
  }, []);
41650
- const renderAction = useCallback126((color) => {
41651
- return /* @__PURE__ */ jsx210("svg", {
41857
+ const renderAction = useCallback127((color) => {
41858
+ return /* @__PURE__ */ jsx211("svg", {
41652
41859
  style: icon5,
41653
41860
  viewBox: "0 0 512 512",
41654
- children: /* @__PURE__ */ jsx210("path", {
41861
+ children: /* @__PURE__ */ jsx211("path", {
41655
41862
  fill: color,
41656
41863
  d: "M386.3 160H336c-17.7 0-32 14.3-32 32s14.3 32 32 32H464c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0s-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3s163.8-62.5 226.3 0L386.3 160z"
41657
41864
  })
41658
41865
  });
41659
41866
  }, [icon5]);
41660
- return /* @__PURE__ */ jsx210(InlineAction, {
41661
- onClick,
41662
- renderAction,
41663
- variant: null
41867
+ return /* @__PURE__ */ jsx211(ActionTooltip, {
41868
+ label: "Retry",
41869
+ shortcut: null,
41870
+ delay: 800,
41871
+ dismissOnClick: true,
41872
+ children: /* @__PURE__ */ jsx211(InlineAction, {
41873
+ "aria-label": "Retry",
41874
+ onClick,
41875
+ renderAction,
41876
+ variant: null
41877
+ })
41664
41878
  });
41665
41879
  };
41666
41880
 
41667
41881
  // src/components/RenderQueue/RenderQueueSavingMessage.tsx
41668
- import { jsx as jsx211 } from "react/jsx-runtime";
41882
+ import { jsx as jsx212 } from "react/jsx-runtime";
41669
41883
  var savingStyle = {
41670
41884
  ...renderQueueItemSubtitleStyle,
41671
41885
  cursor: "default"
41672
41886
  };
41673
41887
  var RenderQueueSavingMessage = () => {
41674
- return /* @__PURE__ */ jsx211("span", {
41888
+ return /* @__PURE__ */ jsx212("span", {
41675
41889
  style: savingStyle,
41676
41890
  children: "Saving to out/..."
41677
41891
  });
@@ -41995,17 +42209,17 @@ function newError(Definition) {
41995
42209
  }
41996
42210
  function $constructor(name, initializer, proto, params) {
41997
42211
  const zodProto = {};
41998
- function Internals59(def) {
42212
+ function Internals60(def) {
41999
42213
  this.def = def;
42000
42214
  this.constr = _;
42001
42215
  this.traits = new Set;
42002
42216
  }
42003
- Internals59.prototype = zodProto;
42217
+ Internals60.prototype = zodProto;
42004
42218
  const protoMembers = proto;
42005
42219
  const initialized = protoMembers && new WeakSet;
42006
42220
  function init(inst, def) {
42007
42221
  if (!inst._zod) {
42008
- _zodDesc.value = new Internals59(def);
42222
+ _zodDesc.value = new Internals60(def);
42009
42223
  try {
42010
42224
  Object.defineProperty(inst, "_zod", _zodDesc);
42011
42225
  } finally {
@@ -43907,6 +44121,7 @@ var makeElementDragData = ({
43907
44121
  dimensions,
43908
44122
  displayName,
43909
44123
  durationInFrames,
44124
+ initialProps,
43910
44125
  slug,
43911
44126
  sourceCode,
43912
44127
  installationMode
@@ -43922,6 +44137,7 @@ var makeElementDragData = ({
43922
44137
  dimensions,
43923
44138
  displayName,
43924
44139
  ...durationInFrames === undefined ? {} : { durationInFrames },
44140
+ initialProps,
43925
44141
  ...installationMode === undefined ? {} : { installationMode },
43926
44142
  slug,
43927
44143
  sourceCode
@@ -43937,12 +44153,48 @@ var elementInstallationModeSchema = union([
43937
44153
  literal("component-owned-sequence")
43938
44154
  ]);
43939
44155
  var durationSchema = number2().check(int(), _positive(), _lte(1e8));
44156
+ var elementInitialPropsSchema = record(string2(), unknown());
44157
+ var initialPropNameRegex = /^[A-Za-z_$][0-9A-Za-z_$]*$/;
44158
+ var componentOwnedInstallationProps = new Set([
44159
+ "durationInFrames",
44160
+ "from",
44161
+ "name"
44162
+ ]);
44163
+ var isJsonCompatibleValue = (value, seen) => {
44164
+ if (value === null || typeof value === "string" || typeof value === "boolean") {
44165
+ return true;
44166
+ }
44167
+ if (typeof value === "number") {
44168
+ return Number.isFinite(value);
44169
+ }
44170
+ if (typeof value !== "object" || seen.has(value)) {
44171
+ return false;
44172
+ }
44173
+ seen.add(value);
44174
+ const valid = Array.isArray(value) ? value.every((item2) => isJsonCompatibleValue(item2, seen)) : Object.getPrototypeOf(value) === Object.prototype && Object.values(value).every((item2) => isJsonCompatibleValue(item2, seen));
44175
+ seen.delete(value);
44176
+ return valid;
44177
+ };
44178
+ var isElementInitialProps = (value) => value === null || !Array.isArray(value) && typeof value === "object" && value !== null && Object.keys(value).every((key) => initialPropNameRegex.test(key)) && isJsonCompatibleValue(value, new Set);
44179
+ var hasValidElementInitialPropsForInstallationMode = ({
44180
+ initialProps,
44181
+ installationMode
44182
+ }) => {
44183
+ if (installationMode !== "component-owned-sequence" || initialProps === null) {
44184
+ return true;
44185
+ }
44186
+ if (Object.keys(initialProps).some((name) => componentOwnedInstallationProps.has(name))) {
44187
+ return false;
44188
+ }
44189
+ return initialProps.style === undefined || initialProps.style !== null && typeof initialProps.style === "object" && !Array.isArray(initialProps.style);
44190
+ };
43940
44191
  var elementDragDataSchema = object({
43941
44192
  type: literal("remotion-element"),
43942
44193
  version: literal(1),
43943
44194
  element: object({
43944
44195
  dependencies: array(unknown()).check(_maxLength(100)),
43945
44196
  durationInFrames: optional(durationSchema),
44197
+ initialProps: optional(nullable(elementInitialPropsSchema)),
43946
44198
  installationMode: optional(elementInstallationModeSchema),
43947
44199
  slug: slugSchema,
43948
44200
  displayName: string2().check(_minLength(1), _maxLength(119)),
@@ -43963,11 +44215,19 @@ var parseElementDragData = (value) => {
43963
44215
  }
43964
44216
  dependencies.push(dependency);
43965
44217
  }
44218
+ const initialProps = parsed.data.element.initialProps ?? null;
44219
+ if (!isElementInitialProps(initialProps) || !hasValidElementInitialPropsForInstallationMode({
44220
+ initialProps,
44221
+ installationMode: parsed.data.element.installationMode
44222
+ })) {
44223
+ return null;
44224
+ }
43966
44225
  return makeElementDragData({
43967
44226
  dependencies,
43968
44227
  dimensions: parsed.data.element.dimensions ?? null,
43969
44228
  displayName: parsed.data.element.displayName,
43970
44229
  durationInFrames: parsed.data.element.durationInFrames,
44230
+ initialProps,
43971
44231
  slug: parsed.data.element.slug,
43972
44232
  sourceCode: parsed.data.element.sourceCode,
43973
44233
  installationMode: parsed.data.element.installationMode
@@ -44081,6 +44341,7 @@ var makeDragData = (input2) => {
44081
44341
  dimensions: input2.dimensions,
44082
44342
  displayName: input2.displayName,
44083
44343
  durationInFrames: input2.durationInFrames,
44344
+ initialProps: input2.initialProps ?? null,
44084
44345
  slug: input2.slug,
44085
44346
  sourceCode: input2.sourceCode,
44086
44347
  installationMode: input2.installationMode
@@ -44171,11 +44432,24 @@ var parseStudioElementPayload = (value) => {
44171
44432
  if (!parsed.success) {
44172
44433
  return null;
44173
44434
  }
44174
- const element = parseElementDragData(JSON.stringify({
44175
- type: parsed.data.type,
44176
- version: parsed.data.version,
44177
- element: parsed.data.element
44178
- }));
44435
+ if (typeof parsed.data.element !== "object" || parsed.data.element === null || Array.isArray(parsed.data.element)) {
44436
+ return null;
44437
+ }
44438
+ const rawInitialProps = Object.hasOwn(parsed.data.element, "initialProps") ? parsed.data.element.initialProps : null;
44439
+ if (!isElementInitialProps(rawInitialProps)) {
44440
+ return null;
44441
+ }
44442
+ let serializedElement;
44443
+ try {
44444
+ serializedElement = JSON.stringify({
44445
+ type: parsed.data.type,
44446
+ version: parsed.data.version,
44447
+ element: parsed.data.element
44448
+ });
44449
+ } catch {
44450
+ return null;
44451
+ }
44452
+ const element = parseElementDragData(serializedElement);
44179
44453
  if (element === null)
44180
44454
  return null;
44181
44455
  const payload = {
@@ -44885,7 +45159,7 @@ var StudioProtocolInternals = {
44885
45159
  };
44886
45160
 
44887
45161
  // src/components/RenderQueue/use-render-output-file-drag.ts
44888
- import { useCallback as useCallback127, useEffect as useEffect47, useMemo as useMemo120, useState as useState68 } from "react";
45162
+ import { useCallback as useCallback128, useEffect as useEffect48, useMemo as useMemo120, useState as useState69 } from "react";
44889
45163
  var MAXIMUM_SAFE_FILE_DRAG_SIZE = 500 * 1024 * 1024;
44890
45164
  var getFilename = (outName) => {
44891
45165
  return outName.split(/[/\\]/).at(-1) ?? outName;
@@ -44895,8 +45169,8 @@ var isChrome = () => {
44895
45169
  };
44896
45170
  var useRenderOutputFileDrag = (job) => {
44897
45171
  const deletedOutputLocation = "deletedOutputLocation" in job && job.deletedOutputLocation;
44898
- const [isDragging, setIsDragging] = useState68(false);
44899
- const [clientFile, setClientFile] = useState68(null);
45172
+ const [isDragging, setIsDragging] = useState69(false);
45173
+ const [clientFile, setClientFile] = useState69(null);
44900
45174
  const clientBlobInfo = useMemo120(() => {
44901
45175
  if (!isClientRenderJob(job) || job.status !== "done" || job.getBlob === undefined) {
44902
45176
  return null;
@@ -44907,7 +45181,7 @@ var useRenderOutputFileDrag = (job) => {
44907
45181
  };
44908
45182
  }, [job]);
44909
45183
  const clientJobWithBlob = clientBlobInfo !== null;
44910
- useEffect47(() => {
45184
+ useEffect48(() => {
44911
45185
  if (!clientBlobInfo || clientBlobInfo.sizeInBytes <= 0 || clientBlobInfo.sizeInBytes > MAXIMUM_SAFE_FILE_DRAG_SIZE || typeof File === "undefined" || typeof URL.createObjectURL !== "function") {
44912
45186
  setClientFile(null);
44913
45187
  return;
@@ -44939,7 +45213,7 @@ var useRenderOutputFileDrag = (job) => {
44939
45213
  }, [clientBlobInfo, job.outName]);
44940
45214
  const canUseFileDrag = typeof DataTransfer !== "undefined" && typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(any-pointer: fine)").matches && navigator.maxTouchPoints === 0 && isChrome();
44941
45215
  const canDrag = canUseFileDrag && job.status === "done" && job.type !== "sequence" && !deletedOutputLocation && (clientJobWithBlob ? clientFile !== null : true);
44942
- const onDragStart = useCallback127((event) => {
45216
+ const onDragStart = useCallback128((event) => {
44943
45217
  if (!canDrag) {
44944
45218
  event.preventDefault();
44945
45219
  return;
@@ -44970,14 +45244,14 @@ var useRenderOutputFileDrag = (job) => {
44970
45244
  event.preventDefault();
44971
45245
  }
44972
45246
  }, [canDrag, clientFile, job.outName]);
44973
- const onDragEnd = useCallback127(() => {
45247
+ const onDragEnd = useCallback128(() => {
44974
45248
  setIsDragging(false);
44975
45249
  }, []);
44976
45250
  return { canDrag, isDragging, onDragEnd, onDragStart };
44977
45251
  };
44978
45252
 
44979
45253
  // src/components/RenderQueue/RenderQueueItem.tsx
44980
- import { jsx as jsx212, jsxs as jsxs95, Fragment as Fragment33 } from "react/jsx-runtime";
45254
+ import { jsx as jsx213, jsxs as jsxs96, Fragment as Fragment34 } from "react/jsx-runtime";
44981
45255
  var container23 = {
44982
45256
  padding: 12,
44983
45257
  display: "flex",
@@ -45006,15 +45280,15 @@ var subtitle3 = {
45006
45280
  overflow: "hidden"
45007
45281
  };
45008
45282
  var RenderQueueItem = ({ job, selected }) => {
45009
- const [hovered, setHovered] = useState69(false);
45010
- const { setCanvasContent } = useContext78(Internals59.CompositionSetters);
45283
+ const [hovered, setHovered] = useState70(false);
45284
+ const { setCanvasContent } = useContext78(Internals60.CompositionSetters);
45011
45285
  const isClientJob = isClientRenderJob(job);
45012
45286
  const isBrowserStudio = getBrowserStudioOperations() !== null;
45013
45287
  const { canDrag, isDragging, onDragEnd, onDragStart } = useRenderOutputFileDrag(job);
45014
- const onPointerEnter = useCallback128(() => {
45288
+ const onPointerEnter = useCallback129(() => {
45015
45289
  setHovered(true);
45016
45290
  }, []);
45017
- const onPointerLeave = useCallback128(() => {
45291
+ const onPointerLeave = useCallback129(() => {
45018
45292
  setHovered(false);
45019
45293
  }, []);
45020
45294
  const isHoverable = job.status === "done" && (isClientJob || job.type !== "sequence");
@@ -45029,7 +45303,7 @@ var RenderQueueItem = ({ job, selected }) => {
45029
45303
  WebkitUserSelect: "none"
45030
45304
  };
45031
45305
  }, [hovered, isHoverable, selected]);
45032
- const scrollCurrentIntoView = useCallback128(() => {
45306
+ const scrollCurrentIntoView = useCallback129(() => {
45033
45307
  document.querySelector(`.${RENDER_QUEUE_ITEM_SELECTED_CLASSNAME}`)?.scrollIntoView({ behavior: "smooth" });
45034
45308
  }, []);
45035
45309
  const clientBlobInfo = useMemo121(() => {
@@ -45043,7 +45317,7 @@ var RenderQueueItem = ({ job, selected }) => {
45043
45317
  sizeInBytes: job.metadata.sizeInBytes
45044
45318
  };
45045
45319
  }, [isClientJob, job]);
45046
- const onClick = useCallback128(() => {
45320
+ const onClick = useCallback129(() => {
45047
45321
  if (job.status !== "done") {
45048
45322
  return;
45049
45323
  }
@@ -45085,14 +45359,14 @@ var RenderQueueItem = ({ job, selected }) => {
45085
45359
  selected,
45086
45360
  setCanvasContent
45087
45361
  ]);
45088
- useEffect48(() => {
45362
+ useEffect49(() => {
45089
45363
  if (selected) {
45090
45364
  scrollCurrentIntoView();
45091
45365
  }
45092
45366
  }, [scrollCurrentIntoView, selected]);
45093
45367
  const canCopyToClipboard = job.status === "done" && !isClientJob && supportsCopyingToClipboard(job);
45094
45368
  const canRepeat = (job.status === "done" || job.status === "failed" || job.status === "cancelled") && !(isClientRenderJob(job) && isRestoredClientJob(job));
45095
- return /* @__PURE__ */ jsxs95(Row, {
45369
+ return /* @__PURE__ */ jsxs96(Row, {
45096
45370
  "data-render-queue-item": job.id,
45097
45371
  onPointerEnter,
45098
45372
  onPointerLeave,
@@ -45104,50 +45378,50 @@ var RenderQueueItem = ({ job, selected }) => {
45104
45378
  onDragEnd,
45105
45379
  className: selected ? RENDER_QUEUE_ITEM_SELECTED_CLASSNAME : undefined,
45106
45380
  children: [
45107
- /* @__PURE__ */ jsx212(RenderQueueItemStatus, {
45381
+ /* @__PURE__ */ jsx213(RenderQueueItemStatus, {
45108
45382
  job
45109
45383
  }),
45110
- /* @__PURE__ */ jsx212(Spacing, {
45384
+ /* @__PURE__ */ jsx213(Spacing, {
45111
45385
  x: 1
45112
45386
  }),
45113
- /* @__PURE__ */ jsxs95("div", {
45387
+ /* @__PURE__ */ jsxs96("div", {
45114
45388
  style: right2,
45115
45389
  children: [
45116
- /* @__PURE__ */ jsx212("div", {
45390
+ /* @__PURE__ */ jsx213("div", {
45117
45391
  style: title2,
45118
45392
  children: job.compositionId
45119
45393
  }),
45120
- /* @__PURE__ */ jsx212("div", {
45394
+ /* @__PURE__ */ jsx213("div", {
45121
45395
  style: subtitle3,
45122
- children: job.status === "done" ? /* @__PURE__ */ jsx212(RenderQueueOutputName, {
45396
+ children: job.status === "done" ? /* @__PURE__ */ jsx213(RenderQueueOutputName, {
45123
45397
  job
45124
- }) : job.status === "failed" ? /* @__PURE__ */ jsx212(RenderQueueError, {
45398
+ }) : job.status === "failed" ? /* @__PURE__ */ jsx213(RenderQueueError, {
45125
45399
  job
45126
- }) : job.status === "running" ? /* @__PURE__ */ jsx212(RenderQueueProgressMessage, {
45400
+ }) : job.status === "running" ? /* @__PURE__ */ jsx213(RenderQueueProgressMessage, {
45127
45401
  job
45128
- }) : job.status === "saving" ? /* @__PURE__ */ jsx212(RenderQueueSavingMessage, {}) : job.status === "cancelled" ? /* @__PURE__ */ jsx212(RenderQueueCancelledMessage, {}) : null
45402
+ }) : job.status === "saving" ? /* @__PURE__ */ jsx213(RenderQueueSavingMessage, {}) : job.status === "cancelled" ? /* @__PURE__ */ jsx213(RenderQueueCancelledMessage, {}) : null
45129
45403
  })
45130
45404
  ]
45131
45405
  }),
45132
- /* @__PURE__ */ jsx212(Spacing, {
45406
+ /* @__PURE__ */ jsx213(Spacing, {
45133
45407
  x: 1
45134
45408
  }),
45135
- !isDragging ? /* @__PURE__ */ jsxs95(Fragment33, {
45409
+ !isDragging ? /* @__PURE__ */ jsxs96(Fragment34, {
45136
45410
  children: [
45137
- canCopyToClipboard ? /* @__PURE__ */ jsx212(RenderQueueCopyToClipboard, {
45411
+ canCopyToClipboard ? /* @__PURE__ */ jsx213(RenderQueueCopyToClipboard, {
45138
45412
  job
45139
45413
  }) : null,
45140
- canRepeat ? /* @__PURE__ */ jsx212(RenderQueueRepeatItem, {
45414
+ canRepeat ? /* @__PURE__ */ jsx213(RenderQueueRepeatItem, {
45141
45415
  job
45142
45416
  }) : null,
45143
- job.status === "running" ? /* @__PURE__ */ jsx212(RenderQueueCancelButton, {
45417
+ job.status === "running" ? /* @__PURE__ */ jsx213(RenderQueueCancelButton, {
45144
45418
  job
45145
- }) : isBrowserStudio ? null : /* @__PURE__ */ jsx212(RenderQueueRemoveItem, {
45419
+ }) : isBrowserStudio ? null : /* @__PURE__ */ jsx213(RenderQueueRemoveItem, {
45146
45420
  job
45147
45421
  }),
45148
- job.status === "done" ? clientBlobInfo ? /* @__PURE__ */ jsx212(RenderQueueDownloadItem, {
45422
+ job.status === "done" ? clientBlobInfo ? /* @__PURE__ */ jsx213(RenderQueueDownloadItem, {
45149
45423
  job
45150
- }) : isBrowserStudio ? null : /* @__PURE__ */ jsx212(RenderQueueOpenInFinderItem, {
45424
+ }) : isBrowserStudio ? null : /* @__PURE__ */ jsx213(RenderQueueOpenInFinderItem, {
45151
45425
  job
45152
45426
  }) : null
45153
45427
  ]
@@ -45160,15 +45434,15 @@ var RenderQueueItem = ({ job, selected }) => {
45160
45434
  var isVideoMattingJob = (job) => job.type === "video-matting";
45161
45435
 
45162
45436
  // src/components/RenderQueue/VideoMattingQueueItem.tsx
45163
- import { useCallback as useCallback129, useContext as useContext79, useMemo as useMemo122, useState as useState70 } from "react";
45437
+ import { useCallback as useCallback130, useContext as useContext79, useMemo as useMemo122, useState as useState71 } from "react";
45164
45438
 
45165
45439
  // src/icons/ellipsis.tsx
45166
- import { jsx as jsx213 } from "react/jsx-runtime";
45440
+ import { jsx as jsx214 } from "react/jsx-runtime";
45167
45441
  var EllipsisIcon = (props) => {
45168
- return /* @__PURE__ */ jsx213("svg", {
45442
+ return /* @__PURE__ */ jsx214("svg", {
45169
45443
  ...props.svgProps,
45170
45444
  viewBox: "0 0 448 512",
45171
- children: /* @__PURE__ */ jsx213("path", {
45445
+ children: /* @__PURE__ */ jsx214("path", {
45172
45446
  fill: props.fill,
45173
45447
  d: "M448 256a48 48 0 1 1-96 0 48 48 0 1 1 96 0zm-176 0a48 48 0 1 1-96 0 48 48 0 1 1 96 0zM48 304a48 48 0 1 1 0-96 48 48 0 1 1 0 96z"
45174
45448
  })
@@ -45176,7 +45450,7 @@ var EllipsisIcon = (props) => {
45176
45450
  };
45177
45451
 
45178
45452
  // src/components/RenderQueue/VideoMattingQueueItem.tsx
45179
- import { jsx as jsx214, jsxs as jsxs96 } from "react/jsx-runtime";
45453
+ import { jsx as jsx215, jsxs as jsxs97 } from "react/jsx-runtime";
45180
45454
  var container24 = {
45181
45455
  borderRadius: 4,
45182
45456
  display: "flex",
@@ -45213,7 +45487,7 @@ var ellipsisIconStyle = {
45213
45487
  };
45214
45488
  var Status = ({ job }) => {
45215
45489
  if (job.status === "running") {
45216
- return /* @__PURE__ */ jsx214("div", {
45490
+ return /* @__PURE__ */ jsx215("div", {
45217
45491
  style: statusIcon2,
45218
45492
  role: "progressbar",
45219
45493
  "aria-label": "Video matting progress",
@@ -45221,33 +45495,33 @@ var Status = ({ job }) => {
45221
45495
  "aria-valuemax": 100,
45222
45496
  "aria-valuenow": Math.round(job.progress.value * 100),
45223
45497
  "aria-valuetext": job.progress.message,
45224
- children: /* @__PURE__ */ jsx214(CircularProgress, {
45498
+ children: /* @__PURE__ */ jsx215(CircularProgress, {
45225
45499
  progress: Math.max(0.07, job.progress.value)
45226
45500
  })
45227
45501
  });
45228
45502
  }
45229
45503
  if (job.status === "done")
45230
- return /* @__PURE__ */ jsx214(SuccessIcon, {});
45504
+ return /* @__PURE__ */ jsx215(SuccessIcon, {});
45231
45505
  if (job.status === "failed")
45232
- return /* @__PURE__ */ jsx214("svg", {
45506
+ return /* @__PURE__ */ jsx215("svg", {
45233
45507
  style: statusIcon2,
45234
45508
  viewBox: "0 0 512 512",
45235
- children: /* @__PURE__ */ jsx214("path", {
45509
+ children: /* @__PURE__ */ jsx215("path", {
45236
45510
  fill: FAIL_COLOR,
45237
45511
  d: "M0 160V352L160 512H352L512 352V160L352 0H160L0 160zm353.9 32-64 64 64 64L320 353.9l-64-64-64 64L158.1 320l64-64-64-64L192 158.1l64 64 64-64z"
45238
45512
  })
45239
45513
  });
45240
- return /* @__PURE__ */ jsx214("svg", {
45514
+ return /* @__PURE__ */ jsx215("svg", {
45241
45515
  style: statusIcon2,
45242
45516
  viewBox: "0 0 512 512",
45243
- children: /* @__PURE__ */ jsx214("path", {
45517
+ children: /* @__PURE__ */ jsx215("path", {
45244
45518
  fill: LIGHT_TEXT,
45245
45519
  d: "M256 512C114.6 512 0 397.4 0 256S114.6 0 256 0s256 114.6 256 256-114.6 256-256 256zM232 120v136c0 8 4 15.5 10.7 20l96 64 26.6-39.9-85.3-56.9V120z"
45246
45520
  })
45247
45521
  });
45248
45522
  };
45249
45523
  var VideoMattingQueueItem = ({ job, selected }) => {
45250
- const [hovered, setHovered] = useState70(false);
45524
+ const [hovered, setHovered] = useState71(false);
45251
45525
  const { removeVideoMattingJob } = useContext79(RenderQueueContext);
45252
45526
  const selectAsset = useSelectAsset();
45253
45527
  const done = job.status === "done";
@@ -45262,11 +45536,11 @@ var VideoMattingQueueItem = ({ job, selected }) => {
45262
45536
  const messages = job.status === "idle" ? ["Queued for video matting"] : job.status === "running" ? [job.progress.message, job.progress.detail].filter((message) => message !== null) : job.status === "failed" ? [job.error.message] : [job.baseOutName, job.foregroundOutName];
45263
45537
  const tooltip = messages.join(`
45264
45538
  `);
45265
- const revealAsset = useCallback129((assetName) => {
45539
+ const revealAsset = useCallback130((assetName) => {
45266
45540
  selectAsset(assetName);
45267
45541
  pushUrl(`/assets/${assetName}`);
45268
45542
  }, [selectAsset]);
45269
- const onClick = useCallback129(() => {
45543
+ const onClick = useCallback130(() => {
45270
45544
  if (!done)
45271
45545
  return;
45272
45546
  revealAsset(job.foregroundOutName);
@@ -45299,19 +45573,19 @@ var VideoMattingQueueItem = ({ job, selected }) => {
45299
45573
  }
45300
45574
  ];
45301
45575
  }, [job.baseOutName, job.foregroundOutName, revealAsset]);
45302
- const onRemove = useCallback129((event) => {
45576
+ const onRemove = useCallback130((event) => {
45303
45577
  event.stopPropagation();
45304
45578
  removeVideoMattingJob(job.id);
45305
45579
  }, [job.id, removeVideoMattingJob]);
45306
- const renderRemove = useCallback129((color) => /* @__PURE__ */ jsx214("svg", {
45580
+ const renderRemove = useCallback130((color) => /* @__PURE__ */ jsx215("svg", {
45307
45581
  style: removeIcon2,
45308
45582
  viewBox: "0 0 320 512",
45309
- children: /* @__PURE__ */ jsx214("path", {
45583
+ children: /* @__PURE__ */ jsx215("path", {
45310
45584
  fill: color,
45311
45585
  d: "M310.6 150.6 205.3 256l105.3 105.4-45.3 45.3L160 301.3 54.6 406.6 9.4 361.4 114.7 256 9.4 150.6l45.2-45.2L160 210.7l105.3-105.3z"
45312
45586
  })
45313
45587
  }), []);
45314
- return /* @__PURE__ */ jsxs96(Row, {
45588
+ return /* @__PURE__ */ jsxs97(Row, {
45315
45589
  "data-render-queue-item": job.id,
45316
45590
  style: style4,
45317
45591
  align: "center",
@@ -45319,53 +45593,65 @@ var VideoMattingQueueItem = ({ job, selected }) => {
45319
45593
  onPointerEnter: () => setHovered(true),
45320
45594
  onPointerLeave: () => setHovered(false),
45321
45595
  children: [
45322
- /* @__PURE__ */ jsx214(Status, {
45596
+ /* @__PURE__ */ jsx215(Status, {
45323
45597
  job
45324
45598
  }),
45325
- /* @__PURE__ */ jsx214(Spacing, {
45599
+ /* @__PURE__ */ jsx215(Spacing, {
45326
45600
  x: 1
45327
45601
  }),
45328
- /* @__PURE__ */ jsxs96("div", {
45602
+ /* @__PURE__ */ jsxs97("div", {
45329
45603
  style: right3,
45330
45604
  children: [
45331
- /* @__PURE__ */ jsx214("div", {
45605
+ /* @__PURE__ */ jsx215("div", {
45332
45606
  style: title3,
45333
45607
  children: job.displayName
45334
45608
  }),
45335
- /* @__PURE__ */ jsx214("div", {
45609
+ /* @__PURE__ */ jsx215("div", {
45336
45610
  style: subtitles,
45337
45611
  title: tooltip,
45338
- children: messages.map((message) => /* @__PURE__ */ jsx214("span", {
45612
+ children: messages.map((message) => /* @__PURE__ */ jsx215("span", {
45339
45613
  style: subtitle4,
45340
45614
  children: message
45341
45615
  }, message))
45342
45616
  })
45343
45617
  ]
45344
45618
  }),
45345
- /* @__PURE__ */ jsx214(Spacing, {
45619
+ /* @__PURE__ */ jsx215(Spacing, {
45346
45620
  x: 1
45347
45621
  }),
45348
- done ? /* @__PURE__ */ jsx214(InlineDropdown, {
45349
- renderAction: (color) => /* @__PURE__ */ jsx214(EllipsisIcon, {
45350
- fill: color,
45351
- svgProps: ellipsisIconStyle
45352
- }),
45353
- title: "Reveal video layer",
45354
- values: revealItems,
45355
- variant: null
45622
+ done ? /* @__PURE__ */ jsx215(ActionTooltip, {
45623
+ label: "Reveal video layer",
45624
+ shortcut: null,
45625
+ delay: 800,
45626
+ dismissOnClick: true,
45627
+ children: /* @__PURE__ */ jsx215(InlineDropdown, {
45628
+ renderAction: (color) => /* @__PURE__ */ jsx215(EllipsisIcon, {
45629
+ fill: color,
45630
+ svgProps: ellipsisIconStyle
45631
+ }),
45632
+ "aria-label": "Reveal video layer",
45633
+ values: revealItems,
45634
+ variant: null
45635
+ })
45356
45636
  }) : null,
45357
- job.status === "running" ? null : /* @__PURE__ */ jsx214(InlineAction, {
45358
- renderAction: renderRemove,
45359
- onClick: onRemove,
45360
- title: "Remove",
45361
- variant: null
45637
+ job.status === "running" ? null : /* @__PURE__ */ jsx215(ActionTooltip, {
45638
+ label: "Clear",
45639
+ shortcut: null,
45640
+ delay: 800,
45641
+ dismissOnClick: true,
45642
+ children: /* @__PURE__ */ jsx215(InlineAction, {
45643
+ renderAction: renderRemove,
45644
+ onClick: onRemove,
45645
+ "aria-label": "Clear",
45646
+ variant: null
45647
+ })
45362
45648
  })
45363
45649
  ]
45364
45650
  });
45365
45651
  };
45366
45652
 
45367
45653
  // src/components/RenderQueue/index.tsx
45368
- import { jsx as jsx215, jsxs as jsxs97 } from "react/jsx-runtime";
45654
+ import { jsx as jsx216, jsxs as jsxs98 } from "react/jsx-runtime";
45369
45655
  var errorExplanation3 = {
45370
45656
  fontSize: 13,
45371
45657
  color: LIGHT_TEXT,
@@ -45391,12 +45677,12 @@ var renderQueue = {
45391
45677
  };
45392
45678
  var RenderQueue = () => {
45393
45679
  const { jobs, captionJobs, videoMattingJobs } = useContext80(RenderQueueContext);
45394
- const { canvasContent } = useContext80(Internals60.CompositionManager);
45680
+ const { canvasContent } = useContext80(Internals61.CompositionManager);
45395
45681
  const allJobs = useMemo123(() => [...jobs, ...captionJobs, ...videoMattingJobs].sort((a, b) => a.startedAt - b.startedAt), [jobs, captionJobs, videoMattingJobs]);
45396
- const previousJobCount = React136.useRef(allJobs.length);
45682
+ const previousJobCount = React137.useRef(allJobs.length);
45397
45683
  const jobCount = allJobs.length;
45398
- const divRef = React136.useRef(null);
45399
- useEffect49(() => {
45684
+ const divRef = React137.useRef(null);
45685
+ useEffect50(() => {
45400
45686
  if (!divRef.current) {
45401
45687
  return;
45402
45688
  }
@@ -45437,35 +45723,35 @@ var RenderQueue = () => {
45437
45723
  return -1;
45438
45724
  }, [allJobs, canvasContent]);
45439
45725
  if (jobCount === 0) {
45440
- return /* @__PURE__ */ jsxs97("div", {
45726
+ return /* @__PURE__ */ jsxs98("div", {
45441
45727
  style: explainer4,
45442
45728
  children: [
45443
- /* @__PURE__ */ jsx215(Spacing, {
45729
+ /* @__PURE__ */ jsx216(Spacing, {
45444
45730
  y: 5
45445
45731
  }),
45446
- /* @__PURE__ */ jsx215("div", {
45732
+ /* @__PURE__ */ jsx216("div", {
45447
45733
  style: errorExplanation3,
45448
45734
  children: "Renders, transcriptions and video matting jobs will show up here."
45449
45735
  }),
45450
- /* @__PURE__ */ jsx215(Spacing, {
45736
+ /* @__PURE__ */ jsx216(Spacing, {
45451
45737
  y: 2,
45452
45738
  block: true
45453
45739
  })
45454
45740
  ]
45455
45741
  });
45456
45742
  }
45457
- return /* @__PURE__ */ jsx215("div", {
45743
+ return /* @__PURE__ */ jsx216("div", {
45458
45744
  ref: divRef,
45459
45745
  style: renderQueue,
45460
45746
  className: ["css-reset", VERTICAL_SCROLLBAR_CLASSNAME].join(" "),
45461
45747
  children: allJobs.map((job, index) => {
45462
- return isCaptionJob(job) ? /* @__PURE__ */ jsx215(CaptionQueueItem, {
45748
+ return isCaptionJob(job) ? /* @__PURE__ */ jsx216(CaptionQueueItem, {
45463
45749
  job,
45464
45750
  selected: selectedJob === index
45465
- }, job.id) : isVideoMattingJob(job) ? /* @__PURE__ */ jsx215(VideoMattingQueueItem, {
45751
+ }, job.id) : isVideoMattingJob(job) ? /* @__PURE__ */ jsx216(VideoMattingQueueItem, {
45466
45752
  job,
45467
45753
  selected: selectedJob === index
45468
- }, job.id) : /* @__PURE__ */ jsx215(RenderQueueItem, {
45754
+ }, job.id) : /* @__PURE__ */ jsx216(RenderQueueItem, {
45469
45755
  selected: selectedJob === index,
45470
45756
  job
45471
45757
  }, job.id);
@@ -45477,8 +45763,8 @@ var RenderQueue = () => {
45477
45763
  import { useContext as useContext81, useMemo as useMemo125 } from "react";
45478
45764
 
45479
45765
  // src/components/Tabs/index.tsx
45480
- import { useCallback as useCallback130, useMemo as useMemo124, useState as useState71 } from "react";
45481
- import { jsx as jsx216 } from "react/jsx-runtime";
45766
+ import { useCallback as useCallback131, useMemo as useMemo124, useState as useState72 } from "react";
45767
+ import { jsx as jsx217 } from "react/jsx-runtime";
45482
45768
  var tabsContainer = {
45483
45769
  display: "flex",
45484
45770
  flexDirection: "row"
@@ -45490,7 +45776,7 @@ var Tabs = ({ children, style: style4 }) => {
45490
45776
  ...style4
45491
45777
  };
45492
45778
  }, [style4]);
45493
- return /* @__PURE__ */ jsx216("div", {
45779
+ return /* @__PURE__ */ jsx217("div", {
45494
45780
  style: definiteStyle,
45495
45781
  children
45496
45782
  });
@@ -45511,12 +45797,12 @@ var selectorButton = {
45511
45797
  WebkitUserSelect: "none"
45512
45798
  };
45513
45799
  var Tab = ({ children, onClick, onDragEnter, onDragLeave, style: style4, selected }) => {
45514
- const [hovered, setHovered] = useState71(false);
45800
+ const [hovered, setHovered] = useState72(false);
45515
45801
  const { tabIndex } = useZIndex();
45516
- const onPointerEnter = useCallback130(() => {
45802
+ const onPointerEnter = useCallback131(() => {
45517
45803
  setHovered(true);
45518
45804
  }, []);
45519
- const onPointerLeave = useCallback130(() => {
45805
+ const onPointerLeave = useCallback131(() => {
45520
45806
  setHovered(false);
45521
45807
  }, []);
45522
45808
  const definiteStyle = useMemo124(() => ({
@@ -45527,7 +45813,7 @@ var Tab = ({ children, onClick, onDragEnter, onDragLeave, style: style4, selecte
45527
45813
  boxShadow: selected ? "none" : undefined,
45528
45814
  ...style4
45529
45815
  }), [hovered, selected, style4]);
45530
- return /* @__PURE__ */ jsx216("div", {
45816
+ return /* @__PURE__ */ jsx217("div", {
45531
45817
  style: definiteStyle,
45532
45818
  role: "button",
45533
45819
  onClick,
@@ -45541,7 +45827,7 @@ var Tab = ({ children, onClick, onDragEnter, onDragLeave, style: style4, selecte
45541
45827
  };
45542
45828
 
45543
45829
  // src/components/RendersTab.tsx
45544
- import { jsx as jsx217, jsxs as jsxs98, Fragment as Fragment34 } from "react/jsx-runtime";
45830
+ import { jsx as jsx218, jsxs as jsxs99, Fragment as Fragment35 } from "react/jsx-runtime";
45545
45831
  var row4 = {
45546
45832
  display: "flex",
45547
45833
  flexDirection: "row",
@@ -45573,17 +45859,17 @@ var RendersTab = ({ selected, onClick }) => {
45573
45859
  borderColor: LIGHT_TEXT
45574
45860
  };
45575
45861
  }, [failedJobs]);
45576
- return /* @__PURE__ */ jsx217(Tab, {
45862
+ return /* @__PURE__ */ jsx218(Tab, {
45577
45863
  selected,
45578
45864
  onClick,
45579
- children: /* @__PURE__ */ jsxs98("div", {
45865
+ children: /* @__PURE__ */ jsxs99("div", {
45580
45866
  style: row4,
45581
45867
  children: [
45582
45868
  "Jobs",
45583
- jobCount > 0 ? /* @__PURE__ */ jsxs98(Fragment34, {
45869
+ jobCount > 0 ? /* @__PURE__ */ jsxs99(Fragment35, {
45584
45870
  children: [
45585
- /* @__PURE__ */ jsx217(Flex, {}),
45586
- /* @__PURE__ */ jsx217("div", {
45871
+ /* @__PURE__ */ jsx218(Flex, {}),
45872
+ /* @__PURE__ */ jsx218("div", {
45587
45873
  style: badgeStyle,
45588
45874
  children: jobCount
45589
45875
  })
@@ -45595,7 +45881,7 @@ var RendersTab = ({ selected, onClick }) => {
45595
45881
  };
45596
45882
 
45597
45883
  // src/components/OptionsPanel.tsx
45598
- import { jsx as jsx218, jsxs as jsxs99 } from "react/jsx-runtime";
45884
+ import { jsx as jsx219, jsxs as jsxs100 } from "react/jsx-runtime";
45599
45885
  var localStorageKey = "remotion.sidebarPanel";
45600
45886
  var getSelectedPanel = () => {
45601
45887
  const panel = localStorage.getItem(localStorageKey);
@@ -45611,7 +45897,7 @@ var persistSelectedOptionsSidebarPanel = (panel) => {
45611
45897
  localStorage.setItem(localStorageKey, panel);
45612
45898
  };
45613
45899
  var OptionsPanel = ({ readOnlyStudio }) => {
45614
- const { props, updateProps } = useContext82(Internals61.EditorPropsContext);
45900
+ const { props, updateProps } = useContext82(Internals62.EditorPropsContext);
45615
45901
  const isMobileLayout = useMobileLayout();
45616
45902
  const container25 = useMemo126(() => ({
45617
45903
  height: "100%",
@@ -45621,12 +45907,12 @@ var OptionsPanel = ({ readOnlyStudio }) => {
45621
45907
  flexDirection: "column",
45622
45908
  flex: 1
45623
45909
  }), [isMobileLayout]);
45624
- const [panel, setPanel] = useState72(getSelectedPanel);
45625
- const onInspectorSelected = useCallback131(() => {
45910
+ const [panel, setPanel] = useState73(getSelectedPanel);
45911
+ const onInspectorSelected = useCallback132(() => {
45626
45912
  setPanel("inspector");
45627
45913
  persistSelectedOptionsSidebarPanel("inspector");
45628
45914
  }, []);
45629
- const onRendersSelected = useCallback131(() => {
45915
+ const onRendersSelected = useCallback132(() => {
45630
45916
  setPanel("renders");
45631
45917
  persistSelectedOptionsSidebarPanel("renders");
45632
45918
  }, []);
@@ -45642,7 +45928,7 @@ var OptionsPanel = ({ readOnlyStudio }) => {
45642
45928
  }
45643
45929
  };
45644
45930
  }, []);
45645
- const { compositions, canvasContent } = useContext82(Internals61.CompositionManager);
45931
+ const { compositions, canvasContent } = useContext82(Internals62.CompositionManager);
45646
45932
  const composition = useMemo126(() => {
45647
45933
  if (canvasContent === null || canvasContent.type !== "composition") {
45648
45934
  return null;
@@ -45674,7 +45960,7 @@ var OptionsPanel = ({ readOnlyStudio }) => {
45674
45960
  }
45675
45961
  return props[composition.id] ?? composition.defaultProps ?? {};
45676
45962
  }, [composition, props]);
45677
- const saveToFile = useCallback131((updater) => {
45963
+ const saveToFile = useCallback132((updater) => {
45678
45964
  if (readOnlyStudio) {
45679
45965
  return;
45680
45966
  }
@@ -45713,7 +45999,7 @@ var OptionsPanel = ({ readOnlyStudio }) => {
45713
45999
  }
45714
46000
  return !deepEqual(composition.defaultProps, currentDefaultProps);
45715
46001
  }, [readOnlyStudio, composition, currentDefaultProps]);
45716
- const resetToOriginal = useCallback131(() => {
46002
+ const resetToOriginal = useCallback132(() => {
45717
46003
  if (!composition) {
45718
46004
  return;
45719
46005
  }
@@ -45723,7 +46009,7 @@ var OptionsPanel = ({ readOnlyStudio }) => {
45723
46009
  newProps: composition.defaultProps ?? {}
45724
46010
  });
45725
46011
  }, [composition, updateProps]);
45726
- const setDefaultProps = useCallback131((updater, { shouldSave }) => {
46012
+ const setDefaultProps = useCallback132((updater, { shouldSave }) => {
45727
46013
  updateProps({
45728
46014
  id: compositionId,
45729
46015
  defaultProps: compositionDefaultProps,
@@ -45733,42 +46019,42 @@ var OptionsPanel = ({ readOnlyStudio }) => {
45733
46019
  saveToFile(updater);
45734
46020
  }
45735
46021
  }, [compositionId, compositionDefaultProps, saveToFile, updateProps]);
45736
- const onPointerDown = useCallback131((e) => {
46022
+ const onPointerDown = useCallback132((e) => {
45737
46023
  e.stopPropagation();
45738
46024
  }, []);
45739
- return /* @__PURE__ */ jsxs99("div", {
46025
+ return /* @__PURE__ */ jsxs100("div", {
45740
46026
  style: container25,
45741
46027
  className: "css-reset",
45742
46028
  onPointerDown,
45743
46029
  children: [
45744
- /* @__PURE__ */ jsx218("div", {
46030
+ /* @__PURE__ */ jsx219("div", {
45745
46031
  style: tabsContainer2,
45746
- children: /* @__PURE__ */ jsxs99(Tabs, {
46032
+ children: /* @__PURE__ */ jsxs100(Tabs, {
45747
46033
  children: [
45748
- /* @__PURE__ */ jsxs99(Tab, {
46034
+ /* @__PURE__ */ jsxs100(Tab, {
45749
46035
  selected: panel === "inspector",
45750
46036
  onClick: onInspectorSelected,
45751
46037
  style: { justifyContent: "space-between" },
45752
46038
  children: [
45753
46039
  "Inspector",
45754
- hasLocalModifications ? /* @__PURE__ */ jsx218(SchemaResetButton, {
46040
+ hasLocalModifications ? /* @__PURE__ */ jsx219(SchemaResetButton, {
45755
46041
  onClick: resetToOriginal
45756
46042
  }) : null
45757
46043
  ]
45758
46044
  }),
45759
- /* @__PURE__ */ jsx218(RendersTab, {
46045
+ /* @__PURE__ */ jsx219(RendersTab, {
45760
46046
  onClick: onRendersSelected,
45761
46047
  selected: panel === "renders"
45762
46048
  })
45763
46049
  ]
45764
46050
  })
45765
46051
  }),
45766
- panel === "inspector" ? /* @__PURE__ */ jsx218(InspectorPanel, {
46052
+ panel === "inspector" ? /* @__PURE__ */ jsx219(InspectorPanel, {
45767
46053
  composition,
45768
46054
  currentDefaultProps,
45769
46055
  readOnlyStudio,
45770
46056
  setDefaultProps
45771
- }) : /* @__PURE__ */ jsx218(RenderQueue, {})
46057
+ }) : /* @__PURE__ */ jsx219(RenderQueue, {})
45772
46058
  ]
45773
46059
  });
45774
46060
  };
@@ -45820,14 +46106,14 @@ var validatePublicOutputName = ({
45820
46106
  };
45821
46107
 
45822
46108
  // src/components/NewComposition/DismissableModal.tsx
45823
- import { useCallback as useCallback132, useContext as useContext83 } from "react";
45824
- import { jsx as jsx219 } from "react/jsx-runtime";
46109
+ import { useCallback as useCallback133, useContext as useContext83 } from "react";
46110
+ import { jsx as jsx220 } from "react/jsx-runtime";
45825
46111
  var DismissableModal = ({ children, panelStyle, ariaLabel }) => {
45826
46112
  const { setSelectedModal } = useContext83(SetSelectedModalContext);
45827
- const onQuit = useCallback132(() => {
46113
+ const onQuit = useCallback133(() => {
45828
46114
  setSelectedModal(null);
45829
46115
  }, [setSelectedModal]);
45830
- return /* @__PURE__ */ jsx219(ModalContainer, {
46116
+ return /* @__PURE__ */ jsx220(ModalContainer, {
45831
46117
  ariaLabel,
45832
46118
  onOutsideClick: onQuit,
45833
46119
  onEscape: onQuit,
@@ -45837,8 +46123,8 @@ var DismissableModal = ({ children, panelStyle, ariaLabel }) => {
45837
46123
  };
45838
46124
 
45839
46125
  // src/components/Tabs/vertical.tsx
45840
- import { useCallback as useCallback133, useMemo as useMemo127, useState as useState73 } from "react";
45841
- import { jsxs as jsxs100 } from "react/jsx-runtime";
46126
+ import { useCallback as useCallback134, useMemo as useMemo127, useState as useState74 } from "react";
46127
+ import { jsxs as jsxs101 } from "react/jsx-runtime";
45842
46128
  var selectorButton2 = {
45843
46129
  border: "none",
45844
46130
  flex: 1,
@@ -45854,12 +46140,12 @@ var selectorButton2 = {
45854
46140
  WebkitUserSelect: "none"
45855
46141
  };
45856
46142
  var VerticalTab = ({ children, onClick, renderIcon, style: style4, selected, autoFocus }) => {
45857
- const [hovered, setHovered] = useState73(false);
46143
+ const [hovered, setHovered] = useState74(false);
45858
46144
  const { tabIndex } = useZIndex();
45859
- const onPointerEnter = useCallback133(() => {
46145
+ const onPointerEnter = useCallback134(() => {
45860
46146
  setHovered(true);
45861
46147
  }, []);
45862
- const onPointerLeave = useCallback133(() => {
46148
+ const onPointerLeave = useCallback134(() => {
45863
46149
  setHovered(false);
45864
46150
  }, []);
45865
46151
  const color = selected || hovered ? WHITE : LIGHT_TEXT;
@@ -45872,7 +46158,7 @@ var VerticalTab = ({ children, onClick, renderIcon, style: style4, selected, aut
45872
46158
  ...style4
45873
46159
  };
45874
46160
  }, [color, hovered, selected, style4]);
45875
- return /* @__PURE__ */ jsxs100("button", {
46161
+ return /* @__PURE__ */ jsxs101("button", {
45876
46162
  autoFocus,
45877
46163
  style: definiteStyle,
45878
46164
  type: "button",
@@ -45888,7 +46174,7 @@ var VerticalTab = ({ children, onClick, renderIcon, style: style4, selected, aut
45888
46174
  };
45889
46175
 
45890
46176
  // src/components/RenderModal/RenderModalHr.tsx
45891
- import { jsx as jsx220 } from "react/jsx-runtime";
46177
+ import { jsx as jsx221 } from "react/jsx-runtime";
45892
46178
  var hrStyle = {
45893
46179
  margin: "0 0 0 0",
45894
46180
  padding: "0 0 0 0",
@@ -45900,24 +46186,24 @@ var hrStyle = {
45900
46186
  marginBottom: 8
45901
46187
  };
45902
46188
  var RenderModalHr = () => {
45903
- return /* @__PURE__ */ jsx220("div", {
46189
+ return /* @__PURE__ */ jsx221("div", {
45904
46190
  style: hrStyle
45905
46191
  });
45906
46192
  };
45907
46193
 
45908
46194
  // src/icons/models.tsx
45909
- import { jsx as jsx221 } from "react/jsx-runtime";
46195
+ import { jsx as jsx222 } from "react/jsx-runtime";
45910
46196
  var ModelsIcon = ({
45911
46197
  color,
45912
46198
  ...props
45913
- }) => /* @__PURE__ */ jsx221("svg", {
46199
+ }) => /* @__PURE__ */ jsx222("svg", {
45914
46200
  xmlns: "http://www.w3.org/2000/svg",
45915
46201
  viewBox: "0 0 512 512",
45916
46202
  ...props,
45917
- children: /* @__PURE__ */ jsx221("path", {
46203
+ children: /* @__PURE__ */ jsx222("path", {
45918
46204
  d: "M176 16c0-8.8-7.2-16-16-16s-16 7.2-16 16v48h-16c-35.3 0-64 28.7-64 64v16H16c-8.8 0-16 7.2-16 16s7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16s7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16s7.2 16 16 16h48v16c0 35.3 28.7 64 64 64h16v48c0 8.8 7.2 16 16 16s16-7.2 16-16v-48h64v48c0 8.8 7.2 16 16 16s16-7.2 16-16v-48h64v48c0 8.8 7.2 16 16 16s16-7.2 16-16v-48h16c35.3 0 64-28.7 64-64v-16h48c8.8 0 16-7.2 16-16s-7.2-16-16-16h-48v-64h48c8.8 0 16-7.2 16-16s-7.2-16-16-16h-48v-64h48c8.8 0 16-7.2 16-16s-7.2-16-16-16h-48v-16c0-35.3-28.7-64-64-64h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v48h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v48h-64V16ZM416 128v256c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V128c0-17.7 14.3-32 32-32h256c17.7 0 32 14.3 32 32ZM192 160c-17.7 0-32 14.3-32 32v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32H192Zm128 32v128H192V192h128Z",
45919
46205
  fill: color ?? CURRENT_COLOR_LOWERCASE
45920
46206
  })
45921
46207
  });
45922
46208
 
45923
- export { getPortal, showNotification, NotificationCenter, subscribeToPreviewServerEvents, getNavigationWindow, pushUrl, clearUrl, reloadUrl, StudioServerConnectionCtx, PreviewServerConnection, useStudioConfigRevision, noop, compositionListRenderedRef, CompositionListContext, CompositionListProvider, ScaleLockContext, ScaleLockProvider, getCurrentZoom, setCurrentZoom, getCurrentFrame, setCurrentFrame, getCurrentDuration, setCurrentDuration, getCurrentFps, setCurrentFps, sliderAreaRef, scrollableRef, timelineVerticalScroll, TIMELINE_PADDING, TIMELINE_BORDER, TIMELINE_ITEM_BORDER_BOTTOM, buildTimelineTree, flattenVisibleTreeNodes, getTreeRowHeight, TIMELINE_LAYER_FILMSTRIP_HEIGHT, TIMELINE_VIDEO_INFO_WAVEFORM_HEIGHT, TIMELINE_LAYER_HEIGHT_AUDIO, TIMELINE_LIST_ITEM_ROW_HEIGHT, getTimelineLayerHeight, getXPositionOfItemInTimelineImperatively, TIMELINE_FRAME_WIDTH_AT_MAX_ZOOM, getTimelineMinZoom, clampTimelineZoom, getTimelineZoom, getTimelineWidth, timelineZoomToNormalized, timelineZoomToSliderValue, normalizedToTimelineZoom, sliderValueToTimelineZoom, TIMELINE_ZOOM_SLIDER_PROPS, TimelineWidthContext, TimelineWidthProvider, redrawTimelineSliderFast, TimelineSlider, getTimelineContentWidth, EDGE_SCROLL_VERTICAL_INCREMENT, startTimelineEdgeAutoScroll, getFrameWhileScrollingLeft, isCursorInViewport, ensureFrameIsInViewport, scrollToTimelineXOffset, getScrollPositionForCursorOnLeftEdge, getScrollPositionForCursorOnRightEdge, getFrameIncrementFromWidth, getFrameWhileScrollingRight, getFrameFromX, getFrameFromTimelineDrop, viewportClientXToScrollContentX, ZoomPersistor, TimelineZoomCtx, TimelineZoomContext, SelectedModalContext, SetSelectedModalContext, StudioProtocolInternals, Transform3DModeStateContext, Transform3DModeStateProvider, calculateTimeline, timelineNodePathInfoToKey, timelineSequenceNodePathToKey, ModalHeader, toggleBooleanMapKey, openFolderKey, persistExpandedFolders, ExpandedFoldersContext, buildAssetFolderStructure, getKeysToExpand, createFolderTree, sortFolderTreeAlphabetically, FolderContext, FolderContextProvider, CollapsedFolderIcon, ExpandedFolderIcon, ExpandedFolderIconSolid, getRelativeFileLocation, formatFileLocation, formatContextForAgents, getOriginalPosition, getSourceMap, parseError, getOriginalLocationFromStack, openInEditor, openInCodingAgent, openOriginalPositionInEditor, useCachedCompositionComponentInfo, preloadCompositionComponentInfo, getOpenInNewWindowMenuItem, getCompositionMenuItems, getCompositionContextMenuItems, EllipsisIcon, useMobileLayout, menuContainerTowardsBottom, outerPortal, inlineCodeSnippet, MenuDivider, CaretDown, MenuContent, InlineDropdown, isCompositionStill, StillIcon, FilmIcon, CompositionOrStillIcon, ContextMenu, ContextMenuForTarget, hasResolvedStack, useResolvedStack, canShowUpdates, useUpdateStatus, SettingsProvider, useSettings, getPreferredEditorId, useEditorOpening, useDefaultCodingAgentInfo, explorerSidebarTabs, useSelectAsset, StaticFilesProvider, useStaticFiles, useSelectComposition, InitialCompositionLoader, Checkmark, ExpandedTracksGetterContext, ExpandedTracksSetterContext, ExpandedTracksProvider, optionsSidebarTabs, getKeyframeDisplayOffset, getNodeKeyframes, getNodeHasKeyframes, getTimelineEasingSegments, parseKeyframeFieldFromNodePath, filterTimelineExpandedTree, getSelectedTimelineExpandedRowKeys, isTimelineExpandedNodeSelected, getClipboardFigmaHtml, getClipboardImageFiles, getClipboardSvgMarkup, ShortcutHint, Button, ModalButton, ModalFooterContainer, useConfirmationDialog, ConfirmationDialog, addEffect, callAddKeyframes, callAddEffectKeyframe, findTrackForNodePathInfo, saveEffectProp, subscribeToSequenceProps, unsubscribeFromSequenceProps, saveSequenceProps2 as saveSequenceProps, duplicateSequencesFromSource, getTimelineSequenceSplitEligibility, splitTimelineSequenceFromSource, persistEditorShowGuidesOption, loadEditorShowGuidesOption, persistGuidesList, loadGuidesList, EditorShowGuidesContext, useDeleteTimelineItems, TIMELINE_SELECTED_BACKGROUND, TIMELINE_EXPANDED_SELECTED_BACKGROUND, TIMELINE_SELECTED_LABEL_BACKGROUND, getTimelineSelectedLabelStyle, getTimelineColor, getTimelineSelectedTrackHighlightStyle, TIMELINE_BACKGROUND, TIMELINE_TICKS_BACKGROUND, isTimelineSelectionModifierEvent, shouldSelectTimelineRowOnPointerDown, getTimelineSelectionFromNodePathInfo, getTimelineSequenceSelectionKey, TimelineSelectAllKeybindings, TimelineSelectableItemsProvider, TimelineSelectionProvider, useTimelineSelection, TIMELINE_MARQUEE_ITEM_ATTR, TIMELINE_SCRUBBER_ATTR, useCurrentTimelineSelectionStateAsRef, useTimelineMarqueeSelection, useTimelineMarqueeSelectableItem, useTimelineRowSelection, useTimelineKeyframeSelection, useTimelineGuideSelection, useTimelineRowContainsSelection, useTimelineRowHighlightBackground, getPreviewFileType, SegmentedButton, SidebarContext, SidebarContextProvider, getFileManagerName, getGitMenuItem, getConfigureDefaultAppsMenuItems, getOpenInMenuItems, useConfigureDefaultApps, InspectorOpenInEditor, addAssetCacheBust, getCachedMediaMetadata, useMediaMetadata, remotion_outputsBase, getAssetPreviewMetadata, getAssetMetadata, TRANSFORMERS_PACKAGE, withRequiredAuxiliaryPackages, installPackages, getMissingPackages, installRequiredPackages, prepareElementInstall, getFromForDrop, getAssetElementFromPath, hasSvgFile, getElementPositionForDrop, getCompositionPositionForDrop, pickFilesToImport, importAssets, importFigmaClipboard, insertSvgMarkup, importRemoteAsset, insertRemoteAudio, insertExistingAssets, insertComponent, insertComposition, insertElement, forceSpecificCursor, stopForcingSpecificCursor, ForceSpecificCursor, AudioIcon, AudioFileIcon, RightAlignInput, RemotionInput, RemTextarea, useRuntimeValue, useRuntimeValueSelector, useRuntimeValueSnapshots, cropFieldKeys, canEditSelectedOutlineCrop, translateFieldKey, scaleFieldKey, rotateFieldKey, transformOriginFieldKey, tuplesEqual2 as tuplesEqual, getUvHandlePosition, getUvHandleConnectionLines, getUvHandleConnectionEllipses, getUvEllipseInteractiveControls, getUvCoordinateForPoint, constrainUv, roundUvCoordinate, roundNumericUvEllipseValue, getSelectedUvHandles, parseTransformOrigin, parsedTransformOriginToUv, serializeTransformOrigin, pointToString, midpoint, dot, vectorLength, vectorBetween2 as vectorBetween, getAngleDegrees, getSelectedOutlineRotationDeltaDegrees, getRotationCursor, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationPivot, getSelectedSequenceKeys, getSequenceKeysContainingSelection, getOutlineSelectionInteraction, getSelectedEffectFieldsBySequenceKey, getSelectedCropInfo, getSelectedTransformOriginInfo, getSelectedRotationInfo, getSequencesWithSelectableOutlines, measureOutlines, measureOutlineTargets, outlinesAreEqual, parseCssRotation, parseTranslate, serializeTranslate, InputDragger, TimelineLayerEye, TimelineLayerEyeSpacer, getSelectedOutlineActiveSchema, getSelectedOutlineDragStates, getSelectedOutlineDragValues, applySelectedOutlineDragAxisLock, isSelectedOutlineDragPastThreshold, getSelectedOutlineDragChanges, getSelectedOutlineCropFollowingTransformOrigin, getSelectedOutlineCropDragValues, getSelectedOutlineCropDragChanges, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutline3DRotationDragValues, getSelectedOutlineRotationDragValues, selectedOutlineRotationSnapStepDegrees, snapSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationDragChanges, clearSelectedOutlineDragOverrides, getSelectedOutlineKeyboardNudgeDirection, clearSelectedOutlineScaleDragOverrides, clearSelectedOutlineRotationDragOverrides, compensateTranslateForTransformOrigin, getSelectedOutlineTransformOriginDragChanges, uvsEqual, getSelectedOutlineTransformOriginLockedAxis, applySelectedOutlineTransformOriginAxisLock, snapSelectedOutlineUv, snapSelectedOutlineTransformOriginUv, commitPendingInspectorFields, getConnectedCompositions, createDragAwareDoubleClickTracker, getCopyContextForAgentsMenuItem, getTimelineAssetLinkInfo, openTimelineAssetLink, propStatusHas3DTransformValue, openInRemotionConvert, getCachedImageMetadata, FileIcon, PicIcon, AssetFileIcon, useDeleteAsset, Tabs, Tab, ObserveDefaultProps, SeparationIcon, TranscriptionIcon, sectionHeader2 as sectionHeader, InspectorQuickAction, getStaticFileBaseName, getStaticFileRenameSelection, getRenamedStaticFilePath, validateStaticFileRename, useRenameStaticFile, downloadBlob, SegmentedControl, Combobox, InfoBubble, InlineRemoveButton, optionRow, label2 as label, rightRow, input, Checkbox, DataEditor, LicenseExplanation, FastRefreshContext, resolvedStackToSymbolicated, validateCompositionName, validateCompositionDimension, validateCompositionDuration, useRenameComposition, useCopyFeedback, CopyIcon, TimelineExpandArrowButton, TimelineExpandArrowSpacer, TimelineRowSelectedBackgroundContext, TimelineRowChrome, renderFrame, TimelineKeyframeDiamondIcon, TimelineKeyframeDragStateProvider, useTimelineKeyframeDragState, useTimelineKeyframeDrag, TimelineKeyframeEasingLine, useResolveStackAndReactToChange, useOpenSequenceInApps, useRenameSequence, TimelineKeyframeTracksProvider, SnowflakeIcon, FullscreenIcon, UploadIcon, TimelineExpandedRow, useTimelineSequenceHasExpandableContent, useTimelineExpandedTree, getSequenceFreezeFrameMenuItem, CircularProgress, SuccessIcon, isRestoredClientJob, RenderQueueOpenInFinderItem, getClientRenderProgressMessage, saveOutputFile, registerClientRender, makeRetryPayload, makeClientRetryPayload, persistSelectedOptionsSidebarPanel, OptionsPanel, getDefaultOutputBaseName, validatePublicOutputName, DismissableModal, VerticalTab, RenderModalHr, ModelsIcon };
46209
+ export { getPortal, showNotification, NotificationCenter, subscribeToPreviewServerEvents, getNavigationWindow, pushUrl, clearUrl, reloadUrl, StudioServerConnectionCtx, PreviewServerConnection, useStudioConfigRevision, noop, compositionListRenderedRef, CompositionListContext, CompositionListProvider, ScaleLockContext, ScaleLockProvider, getCurrentZoom, setCurrentZoom, getCurrentFrame, setCurrentFrame, getCurrentDuration, setCurrentDuration, getCurrentFps, setCurrentFps, sliderAreaRef, scrollableRef, timelineVerticalScroll, TIMELINE_PADDING, TIMELINE_BORDER, TIMELINE_ITEM_BORDER_BOTTOM, buildTimelineTree, flattenVisibleTreeNodes, getTreeRowHeight, TIMELINE_LAYER_FILMSTRIP_HEIGHT, TIMELINE_VIDEO_INFO_WAVEFORM_HEIGHT, TIMELINE_LAYER_HEIGHT_AUDIO, TIMELINE_LIST_ITEM_ROW_HEIGHT, getTimelineLayerHeight, getXPositionOfItemInTimelineImperatively, TIMELINE_FRAME_WIDTH_AT_MAX_ZOOM, getTimelineMinZoom, clampTimelineZoom, getTimelineZoom, getTimelineWidth, timelineZoomToNormalized, timelineZoomToSliderValue, normalizedToTimelineZoom, sliderValueToTimelineZoom, TIMELINE_ZOOM_SLIDER_PROPS, TimelineWidthContext, TimelineWidthProvider, redrawTimelineSliderFast, TimelineSlider, getTimelineContentWidth, EDGE_SCROLL_VERTICAL_INCREMENT, startTimelineEdgeAutoScroll, getFrameWhileScrollingLeft, isCursorInViewport, ensureFrameIsInViewport, scrollToTimelineXOffset, getScrollPositionForCursorOnLeftEdge, getScrollPositionForCursorOnRightEdge, getFrameIncrementFromWidth, getFrameWhileScrollingRight, getFrameFromX, getFrameFromTimelineDrop, viewportClientXToScrollContentX, ZoomPersistor, TimelineZoomCtx, TimelineZoomContext, SelectedModalContext, SetSelectedModalContext, StudioProtocolInternals, Transform3DModeStateContext, Transform3DModeStateProvider, calculateTimeline, getPreviewFileType, timelineNodePathInfoToKey, timelineSequenceNodePathToKey, persistEditorShowGuidesOption, loadEditorShowGuidesOption, persistGuidesList, loadGuidesList, EditorShowGuidesContext, ModalHeader, toggleBooleanMapKey, openFolderKey, persistExpandedFolders, ExpandedFoldersContext, buildAssetFolderStructure, getKeysToExpand, createFolderTree, sortFolderTreeAlphabetically, FolderContext, FolderContextProvider, CollapsedFolderIcon, ExpandedFolderIcon, ExpandedFolderIconSolid, getRelativeFileLocation, formatFileLocation, formatContextForAgents, getOriginalPosition, getSourceMap, parseError, getOriginalLocationFromStack, openInEditor, openInCodingAgent, openOriginalPositionInEditor, useCachedCompositionComponentInfo, preloadCompositionComponentInfo, getOpenInNewWindowMenuItem, getCompositionMenuItems, getCompositionContextMenuItems, EllipsisIcon, useMobileLayout, menuContainerTowardsBottom, outerPortal, inlineCodeSnippet, MenuDivider, CaretDown, MenuContent, InlineDropdown, isCompositionStill, StillIcon, FilmIcon, CompositionOrStillIcon, ContextMenu, ContextMenuForTarget, hasResolvedStack, useResolvedStack, canShowUpdates, useUpdateStatus, SettingsProvider, useSettings, getPreferredEditorId, useEditorOpening, useDefaultCodingAgentInfo, explorerSidebarTabs, useSelectAsset, StaticFilesProvider, useStaticFiles, useSelectComposition, InitialCompositionLoader, Checkmark, ExpandedTracksGetterContext, ExpandedTracksSetterContext, ExpandedTracksProvider, optionsSidebarTabs, getKeyframeDisplayOffset, getNodeKeyframes, getNodeHasKeyframes, getTimelineEasingSegments, parseKeyframeFieldFromNodePath, filterTimelineExpandedTree, getSelectedTimelineExpandedRowKeys, isTimelineExpandedNodeSelected, getClipboardFigmaHtml, getClipboardImageFiles, getClipboardSvgMarkup, ShortcutHint, Button, ModalButton, ModalFooterContainer, useConfirmationDialog, ConfirmationDialog, addEffect, callAddKeyframes, callAddEffectKeyframe, findTrackForNodePathInfo, saveEffectProp, subscribeToSequenceProps, unsubscribeFromSequenceProps, saveSequenceProps2 as saveSequenceProps, duplicateSequencesFromSource, getTimelineSequenceSplitEligibility, splitTimelineSequenceFromSource, useDeleteTimelineItems, TIMELINE_SELECTED_BACKGROUND, TIMELINE_EXPANDED_SELECTED_BACKGROUND, TIMELINE_SELECTED_LABEL_BACKGROUND, getTimelineSelectedLabelStyle, getTimelineColor, getTimelineSelectedTrackHighlightStyle, TIMELINE_BACKGROUND, TIMELINE_TICKS_BACKGROUND, isTimelineSelectionModifierEvent, shouldSelectTimelineRowOnPointerDown, getTimelineSelectionFromNodePathInfo, getTimelineSequenceSelectionKey, TimelineSelectAllKeybindings, TimelineSelectableItemsProvider, TimelineSelectionProvider, useTimelineSelection, TIMELINE_MARQUEE_ITEM_ATTR, TIMELINE_SCRUBBER_ATTR, useCurrentTimelineSelectionStateAsRef, useTimelineMarqueeSelection, useTimelineMarqueeSelectableItem, useTimelineRowSelection, useTimelineKeyframeSelection, useTimelineGuideSelection, useTimelineRowContainsSelection, useTimelineRowHighlightBackground, ActionTooltip, SegmentedButton, SidebarContext, SidebarContextProvider, getFileManagerName, getGitMenuItem, getConfigureDefaultAppsMenuItems, getOpenInMenuItems, useConfigureDefaultApps, InspectorOpenInEditor, addAssetCacheBust, getCachedMediaMetadata, useMediaMetadata, remotion_outputsBase, getAssetPreviewMetadata, getAssetMetadata, TRANSFORMERS_PACKAGE, withRequiredAuxiliaryPackages, installPackages, getMissingPackages, installRequiredPackages, prepareElementInstall, getFromForDrop, getAssetElementFromPath, hasSvgFile, getElementPositionForDrop, getCompositionPositionForDrop, pickFilesToImport, importAssets, importFigmaClipboard, insertSvgMarkup, importRemoteAsset, insertRemoteAudio, insertExistingAssets, insertComponent, insertComposition, insertElement, forceSpecificCursor, stopForcingSpecificCursor, ForceSpecificCursor, AudioIcon, AudioFileIcon, RightAlignInput, RemotionInput, RemTextarea, useRuntimeValue, useRuntimeValueSelector, useRuntimeValueSnapshots, cropFieldKeys, canEditSelectedOutlineCrop, translateFieldKey, scaleFieldKey, rotateFieldKey, transformOriginFieldKey, tuplesEqual2 as tuplesEqual, getUvHandlePosition, getUvHandleConnectionLines, getUvHandleConnectionEllipses, getUvEllipseInteractiveControls, getUvCoordinateForPoint, constrainUv, roundUvCoordinate, roundNumericUvEllipseValue, getSelectedUvHandles, parseTransformOrigin, parsedTransformOriginToUv, serializeTransformOrigin, pointToString, midpoint, dot, vectorLength, vectorBetween2 as vectorBetween, getAngleDegrees, getSelectedOutlineRotationDeltaDegrees, getRotationCursor, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationPivot, getSelectedSequenceKeys, getSequenceKeysContainingSelection, getOutlineSelectionInteraction, getSelectedEffectFieldsBySequenceKey, getSelectedCropInfo, getSelectedTransformOriginInfo, getSelectedRotationInfo, getSequencesWithSelectableOutlines, measureOutlines, measureOutlineTargets, outlinesAreEqual, parseCssRotation, parseTranslate, serializeTranslate, InputDragger, TimelineLayerEye, TimelineLayerEyeSpacer, getSelectedOutlineActiveSchema, getSelectedOutlineDragStates, getSelectedOutlineDragValues, applySelectedOutlineDragAxisLock, isSelectedOutlineDragPastThreshold, getSelectedOutlineDragChanges, getSelectedOutlineCropFollowingTransformOrigin, getSelectedOutlineCropDragValues, getSelectedOutlineCropDragChanges, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutline3DRotationDragValues, getSelectedOutlineRotationDragValues, selectedOutlineRotationSnapStepDegrees, snapSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationDragChanges, clearSelectedOutlineDragOverrides, getSelectedOutlineKeyboardNudgeDirection, clearSelectedOutlineScaleDragOverrides, clearSelectedOutlineRotationDragOverrides, compensateTranslateForTransformOrigin, getSelectedOutlineTransformOriginDragChanges, uvsEqual, getSelectedOutlineTransformOriginLockedAxis, applySelectedOutlineTransformOriginAxisLock, snapSelectedOutlineUv, snapSelectedOutlineTransformOriginUv, commitPendingInspectorFields, getConnectedCompositions, createDragAwareDoubleClickTracker, getCopyContextForAgentsMenuItem, getTimelineAssetLinkInfo, openTimelineAssetLink, propStatusHas3DTransformValue, openInRemotionConvert, getCachedImageMetadata, FileIcon, PicIcon, AssetFileIcon, useDeleteAsset, Tabs, Tab, ObserveDefaultProps, SeparationIcon, TranscriptionIcon, sectionHeader2 as sectionHeader, InspectorQuickAction, getStaticFileBaseName, getStaticFileRenameSelection, getRenamedStaticFilePath, validateStaticFileRename, useRenameStaticFile, downloadBlob, SegmentedControl, Combobox, InfoBubble, InlineRemoveButton, optionRow, label2 as label, rightRow, input, Checkbox, DataEditor, LicenseExplanation, FastRefreshContext, resolvedStackToSymbolicated, slugifyName, validateCompositionName, validateCompositionDimension, validateCompositionDuration, useRenameComposition, useCopyFeedback, CopyIcon, TimelineExpandArrowButton, TimelineExpandArrowSpacer, TimelineRowSelectedBackgroundContext, TimelineRowChrome, renderFrame, TimelineKeyframeDiamondIcon, TimelineKeyframeDragStateProvider, useTimelineKeyframeDragState, useTimelineKeyframeDrag, TimelineKeyframeEasingLine, useResolveStackAndReactToChange, useOpenSequenceInApps, useRenameSequence, TimelineKeyframeTracksProvider, SnowflakeIcon, FullscreenIcon, UploadIcon, TimelineExpandedRow, useTimelineSequenceHasExpandableContent, useTimelineExpandedTree, getSequenceFreezeFrameMenuItem, CircularProgress, SuccessIcon, isRestoredClientJob, RenderQueueOpenInFinderItem, getClientRenderProgressMessage, saveOutputFile, registerClientRender, makeRetryPayload, makeClientRetryPayload, persistSelectedOptionsSidebarPanel, OptionsPanel, getDefaultOutputBaseName, validatePublicOutputName, DismissableModal, VerticalTab, RenderModalHr, ModelsIcon };