@remotion/studio 4.0.473 → 4.0.475

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 (123) hide show
  1. package/dist/components/AssetSelectorItem.js +30 -6
  2. package/dist/components/Canvas.js +77 -0
  3. package/dist/components/ColorPicker/ColorPicker.js +4 -31
  4. package/dist/components/CompositionSelectorItem.js +4 -4
  5. package/dist/components/Editor.js +4 -1
  6. package/dist/components/Modals.js +2 -2
  7. package/dist/components/NewComposition/ComboBox.js +1 -0
  8. package/dist/components/NewComposition/InputDragger.d.ts +1 -0
  9. package/dist/components/NewComposition/InputDragger.js +9 -6
  10. package/dist/components/PreviewToolbar.js +2 -2
  11. package/dist/components/SelectedOutlineOverlay.d.ts +61 -33
  12. package/dist/components/SelectedOutlineOverlay.js +813 -351
  13. package/dist/components/SelectedOutlineUvControls.d.ts +17 -0
  14. package/dist/components/SelectedOutlineUvControls.js +167 -0
  15. package/dist/components/StudioCanvasCapture.d.ts +5 -0
  16. package/dist/components/StudioCanvasCapture.js +40 -0
  17. package/dist/components/Timeline/EasingEditorModal.d.ts +11 -0
  18. package/dist/components/Timeline/EasingEditorModal.js +247 -0
  19. package/dist/components/Timeline/KeyframeSettingsModal.js +5 -4
  20. package/dist/components/Timeline/SequencePropsObserver.js +3 -3
  21. package/dist/components/Timeline/Timeline.js +10 -7
  22. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +7 -7
  23. package/dist/components/Timeline/TimelineClipboardKeybindings.js +19 -16
  24. package/dist/components/Timeline/TimelineDeleteKeybindings.js +71 -40
  25. package/dist/components/Timeline/TimelineDragHandler.js +2 -2
  26. package/dist/components/Timeline/TimelineEffectItem.js +8 -9
  27. package/dist/components/Timeline/TimelineEffectPropItem.js +18 -18
  28. package/dist/components/Timeline/TimelineExpandedKeyframeRow.d.ts +1 -0
  29. package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +7 -2
  30. package/dist/components/Timeline/TimelineExpandedSection.js +5 -5
  31. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +1 -1
  32. package/dist/components/Timeline/TimelineHeightContainer.js +2 -0
  33. package/dist/components/Timeline/TimelineItemStack.js +3 -56
  34. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +7 -0
  35. package/dist/components/Timeline/TimelineKeyframeControls.js +265 -68
  36. package/dist/components/Timeline/TimelineKeyframeDiamond.js +4 -3
  37. package/dist/components/Timeline/TimelineKeyframeEasingLine.d.ts +9 -0
  38. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +245 -0
  39. package/dist/components/Timeline/TimelineKeyframeTracksContext.d.ts +7 -0
  40. package/dist/components/Timeline/TimelineKeyframeTracksContext.js +17 -0
  41. package/dist/components/Timeline/TimelineKeyframedValue.js +1 -1
  42. package/dist/components/Timeline/TimelineMediaInfo.js +4 -24
  43. package/dist/components/Timeline/TimelineNumberField.js +15 -7
  44. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +4 -0
  45. package/dist/components/Timeline/TimelineRotationField.js +22 -34
  46. package/dist/components/Timeline/TimelineScaleField.js +16 -12
  47. package/dist/components/Timeline/TimelineScrollable.js +19 -3
  48. package/dist/components/Timeline/TimelineSelection.d.ts +82 -3
  49. package/dist/components/Timeline/TimelineSelection.js +312 -30
  50. package/dist/components/Timeline/TimelineSequence.js +23 -15
  51. package/dist/components/Timeline/TimelineSequenceItem.js +48 -73
  52. package/dist/components/Timeline/TimelineSequenceName.js +3 -17
  53. package/dist/components/Timeline/TimelineSequencePropItem.js +37 -37
  54. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +5 -5
  55. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +46 -44
  56. package/dist/components/Timeline/TimelineTimeIndicators.js +4 -2
  57. package/dist/components/Timeline/TimelineTransformOriginField.d.ts +11 -0
  58. package/dist/components/Timeline/TimelineTransformOriginField.js +138 -0
  59. package/dist/components/Timeline/TimelineTranslateField.js +24 -19
  60. package/dist/components/Timeline/TimelineUvCoordinateField.js +18 -12
  61. package/dist/components/Timeline/{apply-effect-response-to-code-values.d.ts → apply-effect-response-to-prop-statuses.d.ts} +1 -1
  62. package/dist/components/Timeline/{apply-effect-response-to-code-values.js → apply-effect-response-to-prop-statuses.js} +3 -3
  63. package/dist/components/Timeline/call-add-keyframe.d.ts +22 -5
  64. package/dist/components/Timeline/call-add-keyframe.js +71 -7
  65. package/dist/components/Timeline/call-delete-keyframe.d.ts +7 -7
  66. package/dist/components/Timeline/call-delete-keyframe.js +7 -7
  67. package/dist/components/Timeline/call-move-keyframe.d.ts +3 -3
  68. package/dist/components/Timeline/call-move-keyframe.js +3 -3
  69. package/dist/components/Timeline/call-update-keyframe-settings.d.ts +5 -5
  70. package/dist/components/Timeline/call-update-keyframe-settings.js +6 -6
  71. package/dist/components/Timeline/delete-selected-keyframe.d.ts +5 -5
  72. package/dist/components/Timeline/delete-selected-keyframe.js +5 -5
  73. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +5 -5
  74. package/dist/components/Timeline/delete-selected-timeline-item.js +28 -16
  75. package/dist/components/Timeline/get-node-keyframes.d.ts +3 -3
  76. package/dist/components/Timeline/get-node-keyframes.js +4 -4
  77. package/dist/components/Timeline/get-timeline-easing-segments.d.ts +9 -0
  78. package/dist/components/Timeline/get-timeline-easing-segments.js +19 -0
  79. package/dist/components/Timeline/reset-selected-timeline-props.d.ts +7 -7
  80. package/dist/components/Timeline/reset-selected-timeline-props.js +23 -15
  81. package/dist/components/Timeline/save-effect-prop.d.ts +2 -2
  82. package/dist/components/Timeline/save-effect-prop.js +5 -5
  83. package/dist/components/Timeline/save-prop-queue.d.ts +3 -3
  84. package/dist/components/Timeline/save-prop-queue.js +3 -3
  85. package/dist/components/Timeline/save-sequence-prop.d.ts +3 -3
  86. package/dist/components/Timeline/save-sequence-prop.js +4 -4
  87. package/dist/components/Timeline/timeline-field-utils.d.ts +10 -0
  88. package/dist/components/Timeline/timeline-field-utils.js +26 -5
  89. package/dist/components/Timeline/timeline-rotation-utils.d.ts +2 -0
  90. package/dist/components/Timeline/timeline-rotation-utils.js +32 -0
  91. package/dist/components/Timeline/timeline-translate-utils.d.ts +1 -1
  92. package/dist/components/Timeline/timeline-translate-utils.js +4 -5
  93. package/dist/components/Timeline/transform-origin-utils.d.ts +24 -0
  94. package/dist/components/Timeline/transform-origin-utils.js +170 -0
  95. package/dist/components/Timeline/update-selected-easing.d.ts +35 -0
  96. package/dist/components/Timeline/update-selected-easing.js +133 -0
  97. package/dist/components/Timeline/use-expanded-track-keyframe-rows.d.ts +1 -0
  98. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +35 -7
  99. package/dist/components/Timeline/use-sequence-props-subscription.js +3 -3
  100. package/dist/components/Timeline/use-timeline-height.js +3 -3
  101. package/dist/components/Timeline/use-timeline-keyframe-drag.js +13 -11
  102. package/dist/components/canvas-capture-enabled.d.ts +1 -0
  103. package/dist/components/canvas-capture-enabled.js +4 -0
  104. package/dist/components/effect-drag-and-drop.d.ts +11 -0
  105. package/dist/components/effect-drag-and-drop.js +73 -0
  106. package/dist/components/import-assets.d.ts +15 -0
  107. package/dist/components/import-assets.js +63 -1
  108. package/dist/components/selected-outline-geometry.d.ts +20 -0
  109. package/dist/components/selected-outline-geometry.js +18 -0
  110. package/dist/components/selected-outline-uv.d.ts +46 -0
  111. package/dist/components/selected-outline-uv.js +240 -0
  112. package/dist/esm/{chunk-q0jkt0zq.js → chunk-qaqqvw4q.js} +8096 -5307
  113. package/dist/esm/internals.mjs +8096 -5307
  114. package/dist/esm/previewEntry.mjs +8106 -5317
  115. package/dist/esm/renderEntry.mjs +1 -1
  116. package/dist/helpers/colors.d.ts +0 -1
  117. package/dist/helpers/colors.js +1 -2
  118. package/dist/helpers/timeline-layout.d.ts +6 -6
  119. package/dist/helpers/timeline-layout.js +5 -5
  120. package/dist/state/modals.d.ts +2 -4
  121. package/package.json +11 -10
  122. package/dist/components/NewComposition/DeleteStaticFile.d.ts +0 -4
  123. package/dist/components/NewComposition/DeleteStaticFile.js +0 -44
@@ -62,19 +62,28 @@ const TimelineSequenceFn = ({ s, nodePathInfo, sequenceFrameOffset }) => {
62
62
  };
63
63
  const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premountWidth, postmountWidth, style, children, nodePathInfo, sequenceFrameOffset, fromCanUpdate, onMoveDragPointerDown, }) => {
64
64
  var _a, _b;
65
- const { onSelect, selectable } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
65
+ const ref = (0, react_1.useRef)(null);
66
+ const { onSelect, selectable, selected, selectionItem } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
67
+ (0, TimelineSelection_1.useTimelineMarqueeSelectableItem)(selectionItem, ref);
66
68
  const onPointerDown = (0, react_1.useCallback)((e) => {
67
69
  if (e.button === 0) {
68
70
  e.stopPropagation();
69
- onSelect({
71
+ if ((0, TimelineSelection_1.shouldSelectTimelineRowOnPointerDown)({
72
+ selected,
70
73
  shiftKey: e.shiftKey,
71
- toggleKey: e.metaKey || e.ctrlKey,
72
- });
73
- if (TimelineSelection_1.TIMELINE_TOP_DRAG && fromCanUpdate) {
74
+ metaKey: e.metaKey,
75
+ ctrlKey: e.ctrlKey,
76
+ })) {
77
+ onSelect({
78
+ shiftKey: e.shiftKey,
79
+ toggleKey: e.metaKey || e.ctrlKey,
80
+ });
81
+ }
82
+ if (fromCanUpdate) {
74
83
  onMoveDragPointerDown(e);
75
84
  }
76
85
  }
77
- }, [fromCanUpdate, onMoveDragPointerDown, onSelect]);
86
+ }, [fromCanUpdate, onMoveDragPointerDown, onSelect, selected]);
78
87
  const frame = (0, remotion_1.useCurrentFrame)();
79
88
  const relativeFrame = frame - s.from;
80
89
  const sequenceFrame = relativeFrame + sequenceFrameOffset;
@@ -94,7 +103,7 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premountWidt
94
103
  opacity: isInRange ? 1 : 0.5,
95
104
  };
96
105
  }, [isInRange, style]);
97
- return (jsx_runtime_1.jsxs("div", { style: actualStyle, title: s.displayName, onPointerDown: selectable ? onPointerDown : undefined, children: [premountWidth ? (jsx_runtime_1.jsx("div", { style: {
106
+ return (jsx_runtime_1.jsxs("div", { ref: ref, [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, style: actualStyle, title: s.displayName, onPointerDown: selectable ? onPointerDown : undefined, children: [premountWidth ? (jsx_runtime_1.jsx("div", { style: {
98
107
  width: premountWidth,
99
108
  height: '100%',
100
109
  background: `repeating-linear-gradient(
@@ -151,15 +160,15 @@ const TimelineSequenceInner = ({ s, windowWidth, nodePathInfo, sequenceFrameOffs
151
160
  column: (_a = originalLocation.column) !== null && _a !== void 0 ? _a : 0,
152
161
  };
153
162
  }, [originalLocation]);
154
- const { codeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeCodeValuesContext);
163
+ const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
155
164
  const nodePath = (_d = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _d !== void 0 ? _d : null;
156
- const codeValuesForOverride = (0, react_1.useMemo)(() => {
165
+ const propStatusesForOverride = (0, react_1.useMemo)(() => {
157
166
  return nodePath
158
- ? remotion_1.Internals.getCodeValuesCtx(codeValues, nodePath)
167
+ ? remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath)
159
168
  : undefined;
160
- }, [codeValues, nodePath]);
161
- const durationCanUpdate = Boolean(((_a = codeValuesForOverride === null || codeValuesForOverride === void 0 ? void 0 : codeValuesForOverride.durationInFrames) === null || _a === void 0 ? void 0 : _a.status) === 'static');
162
- const fromCanUpdate = Boolean(((_b = codeValuesForOverride === null || codeValuesForOverride === void 0 ? void 0 : codeValuesForOverride.from) === null || _b === void 0 ? void 0 : _b.status) === 'static');
169
+ }, [propStatuses, nodePath]);
170
+ const durationCanUpdate = Boolean(((_a = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _a === void 0 ? void 0 : _a.status) === 'static');
171
+ const fromCanUpdate = Boolean(((_b = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.from) === null || _b === void 0 ? void 0 : _b.status) === 'static');
163
172
  const { onPointerDown: onMoveDragPointerDown } = (0, TimelineSequenceRightEdgeDragHandle_1.useTimelineSequenceFromDrag)({
164
173
  nodePathInfo,
165
174
  windowWidth,
@@ -208,8 +217,7 @@ const TimelineSequenceInner = ({ s, windowWidth, nodePathInfo, sequenceFrameOffs
208
217
  overflow: 'hidden',
209
218
  };
210
219
  }, [marginLeft, s.type, width]);
211
- const showRightEdgeDragHandle = TimelineSelection_1.TIMELINE_TOP_DRAG &&
212
- (s.type === 'sequence' || s.type === 'image') &&
220
+ const showRightEdgeDragHandle = (s.type === 'sequence' || s.type === 'image') &&
213
221
  !s.loopDisplay &&
214
222
  !s.isInsideSeries &&
215
223
  nodePath !== null &&
@@ -2,18 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TimelineSequenceItem = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const studio_shared_1 = require("@remotion/studio-shared");
6
5
  const react_1 = require("react");
7
6
  const remotion_1 = require("remotion");
8
7
  const no_react_1 = require("remotion/no-react");
9
8
  const client_id_1 = require("../../helpers/client-id");
10
9
  const format_file_location_1 = require("../../helpers/format-file-location");
11
- const install_required_package_1 = require("../../helpers/install-required-package");
12
10
  const timeline_layout_1 = require("../../helpers/timeline-layout");
13
11
  const call_api_1 = require("../call-api");
14
12
  const ConfirmationDialog_1 = require("../ConfirmationDialog");
15
13
  const ContextMenu_1 = require("../ContextMenu");
14
+ const effect_drag_and_drop_1 = require("../effect-drag-and-drop");
16
15
  const ExpandedTracksProvider_1 = require("../ExpandedTracksProvider");
16
+ const layout_1 = require("../layout");
17
17
  const NotificationCenter_1 = require("../Notifications/NotificationCenter");
18
18
  const use_select_asset_1 = require("../use-select-asset");
19
19
  const duplicate_selected_timeline_item_1 = require("./duplicate-selected-timeline-item");
@@ -34,7 +34,6 @@ const labelContainerStyle = {
34
34
  display: 'flex',
35
35
  flexDirection: 'row',
36
36
  minWidth: 0,
37
- gap: 4,
38
37
  };
39
38
  const effectDropHighlight = {
40
39
  backgroundColor: 'rgba(0, 155, 255, 0.16)',
@@ -73,6 +72,9 @@ const sequenceReorderRejectionStyle = {
73
72
  const hasSequenceReorderDragType = (dataTransfer) => {
74
73
  return Array.from(dataTransfer.types).includes(SEQUENCE_REORDER_MIME_TYPE);
75
74
  };
75
+ const isSequenceReorderDrag = (dataTransfer) => {
76
+ return (currentSequenceDrag !== null || hasSequenceReorderDragType(dataTransfer));
77
+ };
76
78
  const getSequenceReorderDragData = (dataTransfer) => {
77
79
  if (currentSequenceDrag) {
78
80
  return currentSequenceDrag;
@@ -100,28 +102,6 @@ const getSequenceReorderDragData = (dataTransfer) => {
100
102
  const getDestinationIndex = ({ fromIndex, insertionIndex, }) => {
101
103
  return insertionIndex > fromIndex ? insertionIndex - 1 : insertionIndex;
102
104
  };
103
- const hasEffectDragType = (dataTransfer) => {
104
- return Array.from(dataTransfer.types).some((type) => type === studio_shared_1.EFFECT_DRAG_MIME_TYPE ||
105
- type === 'application/json' ||
106
- type === 'text/plain');
107
- };
108
- const getEffectDragData = (dataTransfer) => {
109
- for (const type of [
110
- studio_shared_1.EFFECT_DRAG_MIME_TYPE,
111
- 'application/json',
112
- 'text/plain',
113
- ]) {
114
- const value = dataTransfer.getData(type);
115
- if (!value) {
116
- continue;
117
- }
118
- const parsed = (0, studio_shared_1.parseEffectDragData)(value);
119
- if (parsed) {
120
- return parsed;
121
- }
122
- }
123
- return null;
124
- };
125
105
  const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDisplayOffset, trackIndex, }) => {
126
106
  var _a, _b;
127
107
  var _c, _d;
@@ -130,8 +110,8 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
130
110
  const previewConnected = previewServerState.type === 'connected';
131
111
  const { getIsExpanded } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksGetterContext);
132
112
  const { toggleTrack } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
133
- const { codeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeCodeValuesContext);
134
- const { setCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
113
+ const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
114
+ const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
135
115
  const selectAsset = (0, use_select_asset_1.useSelectAsset)();
136
116
  const { onSelect, selectable, selected } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
137
117
  const containsSelection = (0, TimelineSelection_1.useTimelineRowContainsSelection)(nodePathInfo);
@@ -159,11 +139,10 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
159
139
  const canDeleteFromSource = Boolean(nodePath && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source));
160
140
  const nodePathKey = (0, react_1.useMemo)(() => nodePath ? remotion_1.Internals.makeSequencePropsSubscriptionKey(nodePath) : null, [nodePath]);
161
141
  const parentId = (_d = sequence.parent) !== null && _d !== void 0 ? _d : null;
162
- const canReorderSequence = TimelineSelection_1.SELECTION_ENABLED &&
163
- previewConnected &&
142
+ const canReorderSequence = previewConnected &&
164
143
  Boolean(nodePath && nodePathKey && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) &&
165
144
  (nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) === 1;
166
- const canHandleSequenceDrag = TimelineSelection_1.SELECTION_ENABLED && previewConnected;
145
+ const canHandleSequenceDrag = previewConnected;
167
146
  const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
168
147
  const deleteDisabled = (0, react_1.useMemo)(() => !previewConnected || !sequence.controls || !canDeleteFromSource, [previewConnected, sequence.controls, canDeleteFromSource]);
169
148
  const duplicateDisabled = deleteDisabled;
@@ -516,7 +495,7 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
516
495
  toggleTrack(nodePathInfo);
517
496
  }, [nodePathInfo, toggleTrack]);
518
497
  const onShowInEditorDoubleClick = (0, react_1.useCallback)((e) => {
519
- if (!TimelineSelection_1.SELECTION_ENABLED || !canOpenInEditor) {
498
+ if (!canOpenInEditor) {
520
499
  return;
521
500
  }
522
501
  if ((0, TimelineSelection_1.isTimelineSelectionModifierEvent)(e)) {
@@ -526,26 +505,26 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
526
505
  e.stopPropagation();
527
506
  openInEditor();
528
507
  }, [canOpenInEditor, openInEditor]);
529
- const codeValuesForOverride = (0, react_1.useMemo)(() => {
508
+ const propStatusesForOverride = (0, react_1.useMemo)(() => {
530
509
  return nodePath
531
- ? remotion_1.Internals.getCodeValuesCtx(codeValues, nodePath)
510
+ ? remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath)
532
511
  : undefined;
533
- }, [codeValues, nodePath]);
534
- const codeHiddenStatus = codeValuesForOverride === null || codeValuesForOverride === void 0 ? void 0 : codeValuesForOverride.hidden;
512
+ }, [propStatuses, nodePath]);
513
+ const codeHiddenStatus = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.hidden;
535
514
  const isItemHidden = (0, react_1.useMemo)(() => {
536
515
  var _a;
537
- const codeValue = codeHiddenStatus && codeHiddenStatus.status === 'static'
516
+ const propStatus = codeHiddenStatus && codeHiddenStatus.status === 'static'
538
517
  ? codeHiddenStatus.codeValue
539
518
  : undefined;
540
519
  const runtimeValue = (_a = sequence.controls) === null || _a === void 0 ? void 0 : _a.currentRuntimeValueDotNotation.hidden;
541
- const effective = (codeValue !== null && codeValue !== void 0 ? codeValue : runtimeValue);
520
+ const effective = (propStatus !== null && propStatus !== void 0 ? propStatus : runtimeValue);
542
521
  return effective !== null && effective !== void 0 ? effective : false;
543
522
  }, [codeHiddenStatus, (_a = sequence.controls) === null || _a === void 0 ? void 0 : _a.currentRuntimeValueDotNotation]);
544
523
  const onToggleVisibility = (0, react_1.useCallback)((type) => {
545
524
  if (!sequence.controls ||
546
525
  !nodePath ||
547
526
  !validatedLocation ||
548
- !codeValuesForOverride ||
527
+ !propStatusesForOverride ||
549
528
  !codeHiddenStatus ||
550
529
  codeHiddenStatus.status !== 'static' ||
551
530
  previewServerState.type !== 'connected') {
@@ -568,18 +547,18 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
568
547
  schema,
569
548
  },
570
549
  ],
571
- setCodeValues,
550
+ setPropStatuses,
572
551
  clientId: previewServerState.clientId,
573
552
  undoLabel: newValue ? 'Hide sequence' : 'Show sequence',
574
553
  redoLabel: newValue ? 'Hide sequence again' : 'Show sequence again',
575
554
  });
576
555
  }, [
577
556
  codeHiddenStatus,
578
- codeValuesForOverride,
557
+ propStatusesForOverride,
579
558
  nodePath,
580
559
  previewServerState,
581
560
  sequence.controls,
582
- setCodeValues,
561
+ setPropStatuses,
583
562
  validatedLocation,
584
563
  ]);
585
564
  const outerHeight = (0, react_1.useMemo)(() => (0, timeline_layout_1.getTimelineLayerHeight)(sequence.type) + timeline_layout_1.TIMELINE_ITEM_BORDER_BOTTOM, [sequence.type]);
@@ -623,7 +602,9 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
623
602
  };
624
603
  }, [sequenceDropIndicator]);
625
604
  const onEffectDragOver = (0, react_1.useCallback)((e) => {
626
- if (!canDropEffect || !hasEffectDragType(e.dataTransfer)) {
605
+ if (!canDropEffect ||
606
+ isSequenceReorderDrag(e.dataTransfer) ||
607
+ !(0, effect_drag_and_drop_1.hasEffectDragType)(e.dataTransfer)) {
627
608
  return;
628
609
  }
629
610
  e.preventDefault();
@@ -640,43 +621,37 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
640
621
  if (!canDropEffect ||
641
622
  previewServerState.type !== 'connected' ||
642
623
  nodePath === null ||
643
- validatedLocation === null) {
624
+ validatedLocation === null ||
625
+ isSequenceReorderDrag(e.dataTransfer) ||
626
+ !(0, effect_drag_and_drop_1.hasEffectDragType)(e.dataTransfer)) {
644
627
  return;
645
628
  }
646
- e.preventDefault();
647
- e.stopPropagation();
648
- setEffectDropHovered(false);
649
- const dragData = getEffectDragData(e.dataTransfer);
629
+ const dragData = (0, effect_drag_and_drop_1.getEffectDragData)(e.dataTransfer);
650
630
  if (!dragData) {
651
- (0, NotificationCenter_1.showNotification)('Could not read effect drag data', 3000);
652
- return;
653
- }
654
- try {
655
- const requiredPackage = (0, studio_shared_1.getRequiredPackageForEffectImportPath)(dragData.effect.importPath);
656
- await (0, install_required_package_1.installRequiredPackages)(requiredPackage ? [requiredPackage] : []);
657
- const result = await (0, call_api_1.callApi)('/api/add-effect', {
658
- fileName: validatedLocation.source,
659
- sequenceNodePath: nodePath,
660
- effectName: dragData.effect.name,
661
- effectImportPath: dragData.effect.importPath,
662
- effectConfig: dragData.effect.config,
663
- clientId: previewServerState.clientId,
664
- });
665
- if (result.success) {
666
- (0, NotificationCenter_1.showNotification)(`Added ${dragData.effect.name}()`, 2000);
667
- }
668
- else {
669
- (0, NotificationCenter_1.showNotification)(result.reason, 4000);
631
+ if ((0, effect_drag_and_drop_1.hasExplicitEffectDragType)(e.dataTransfer)) {
632
+ e.preventDefault();
633
+ e.stopPropagation();
634
+ setEffectDropHovered(false);
635
+ (0, NotificationCenter_1.showNotification)('Could not read effect drag data', 3000);
670
636
  }
637
+ return;
671
638
  }
672
- catch (err) {
673
- (0, NotificationCenter_1.showNotification)(err.message, 4000);
674
- }
639
+ e.preventDefault();
640
+ e.stopPropagation();
641
+ setEffectDropHovered(false);
642
+ await (0, effect_drag_and_drop_1.addEffectFromDragData)({
643
+ dragData,
644
+ fileName: validatedLocation.source,
645
+ nodePath,
646
+ clientId: previewServerState.clientId,
647
+ });
675
648
  }, [canDropEffect, nodePath, previewServerState, validatedLocation]);
676
- const trackRow = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: nestedDepth, eye: canToggleVisibility ? (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEye, { type: sequence.type === 'audio' ? 'speaker' : 'eye', hidden: isItemHidden, onInvoked: onToggleVisibility })) : (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {})), arrow: hasExpandableContent ? (jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowButton, { isExpanded: isExpanded, onClick: onToggleExpand, label: "track properties", disabled: !previewConnected || nodePathInfo === null })) : (jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {})), style: rowStyle, selected: selected, selectable: selectable, onSelect: onSelect, showSelectedBackground: true, containsSelection: containsSelection, outerHeight: outerHeight, onDragLeave: canDropEffect ? onEffectDragLeave : undefined, onDragOver: canDropEffect ? onEffectDragOver : undefined, onDrop: canDropEffect ? onEffectDrop : undefined, onDoubleClick: TimelineSelection_1.SELECTION_ENABLED && canOpenInEditor
677
- ? onShowInEditorDoubleClick
678
- : undefined, children: jsx_runtime_1.jsxs("div", { style: labelContainerStyle, children: [
679
- jsx_runtime_1.jsx(TimelineSequenceName_1.TimelineSequenceName, { sequence: sequence, selected: selected, containsSelection: containsSelection }), mediaSrc ? jsx_runtime_1.jsx(TimelineMediaInfo_1.TimelineMediaInfo, { src: mediaSrc }) : null, jsx_runtime_1.jsx(TimelineItemStack_1.TimelineItemStack, { originalLocation: originalLocation })
649
+ const trackRow = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: nestedDepth, eye: canToggleVisibility ? (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEye, { type: sequence.type === 'audio' ? 'speaker' : 'eye', hidden: isItemHidden, onInvoked: onToggleVisibility })) : (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {})), arrow: hasExpandableContent ? (jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowButton, { isExpanded: isExpanded, onClick: onToggleExpand, label: "track properties", disabled: !previewConnected || nodePathInfo === null })) : (jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {})), style: rowStyle, selected: selected, selectable: selectable, onSelect: onSelect, showSelectedBackground: true, containsSelection: containsSelection, outerHeight: outerHeight, onDragLeave: canDropEffect ? onEffectDragLeave : undefined, onDragOver: canDropEffect ? onEffectDragOver : undefined, onDrop: canDropEffect ? onEffectDrop : undefined, onDoubleClick: canOpenInEditor ? onShowInEditorDoubleClick : undefined, children: jsx_runtime_1.jsxs("div", { style: labelContainerStyle, children: [
650
+ jsx_runtime_1.jsx(TimelineSequenceName_1.TimelineSequenceName, { sequence: sequence, selected: selected, containsSelection: containsSelection }), mediaSrc ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
651
+ jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }),
652
+ " ",
653
+ jsx_runtime_1.jsx(TimelineMediaInfo_1.TimelineMediaInfo, { src: mediaSrc })
654
+ ] })) : null, jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(TimelineItemStack_1.TimelineItemStack, { originalLocation: originalLocation })
680
655
  ] }) }));
681
656
  const draggableTrackRow = canHandleSequenceDrag ? (jsx_runtime_1.jsxs("div", { draggable: canReorderSequence, onDragStart: onSequenceDragStart, onDragEnd: onSequenceDragEnd, onDragOver: onSequenceDragOver, onDragLeave: onSequenceDragLeave, onDrop: onSequenceDrop, style: sequenceReorderWrapper, children: [sequenceReorderLineStyle ? (jsx_runtime_1.jsx("div", { style: sequenceReorderLineStyle })) : null, sequenceDropRejection ? (jsx_runtime_1.jsx("div", { style: sequenceReorderRejectionStyle, children: sequenceDropRejection })) : null, trackRow] })) : (trackRow);
682
657
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [previewConnected ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: selectable ? onSelect : null, children: draggableTrackRow })) : (draggableTrackRow), previewConnected &&
@@ -12,19 +12,7 @@ const getTruncatedDisplayName = (displayName) => {
12
12
  return displayName;
13
13
  };
14
14
  const TimelineSequenceName = ({ sequence, selected, containsSelection }) => {
15
- const [hovered, setHovered] = (0, react_1.useState)(false);
16
- const { documentationLink } = sequence;
17
- const hoverable = !TimelineSelection_1.SELECTION_ENABLED && documentationLink !== null;
18
- const onClick = (0, react_1.useCallback)(() => {
19
- if (documentationLink === null) {
20
- return;
21
- }
22
- window.open(documentationLink, '_blank', 'noopener,noreferrer');
23
- }, [documentationLink]);
24
- const onPointerEnter = (0, react_1.useCallback)(() => setHovered(true), []);
25
- const onPointerLeave = (0, react_1.useCallback)(() => setHovered(false), []);
26
15
  const style = (0, react_1.useMemo)(() => {
27
- const hoverEffect = hovered && hoverable;
28
16
  return {
29
17
  alignItems: 'center',
30
18
  alignSelf: 'stretch',
@@ -33,18 +21,16 @@ const TimelineSequenceName = ({ sequence, selected, containsSelection }) => {
33
21
  fontSize: 12,
34
22
  whiteSpace: 'nowrap',
35
23
  textOverflow: 'ellipsis',
36
- overflow: 'hidden',
37
24
  color: (0, TimelineSelection_1.getTimelineColor)(selected, false),
38
25
  userSelect: 'none',
39
26
  WebkitUserSelect: 'none',
40
- textDecoration: hoverEffect ? 'underline' : 'none',
41
- cursor: hoverEffect ? 'pointer' : undefined,
27
+ textDecoration: 'none',
42
28
  boxShadow: containsSelection && !selected
43
29
  ? `inset 0 0 0 2px ${TimelineSelection_1.TIMELINE_SELECTED_LABEL_BACKGROUND}`
44
30
  : undefined,
45
31
  };
46
- }, [hovered, hoverable, selected, containsSelection]);
32
+ }, [selected, containsSelection]);
47
33
  const text = getTruncatedDisplayName(sequence.displayName) || '<Sequence>';
48
- return (jsx_runtime_1.jsx("div", { onPointerEnter: hoverable ? onPointerEnter : undefined, onPointerLeave: hoverable ? onPointerLeave : undefined, title: documentationLink ? `Open documentation: ${documentationLink}` : text, style: style, onClick: hoverable ? onClick : undefined, children: text }));
34
+ return (jsx_runtime_1.jsx("div", { title: text, style: style, children: text }));
49
35
  };
50
36
  exports.TimelineSequenceName = TimelineSequenceName;
@@ -37,7 +37,7 @@ const isResettableStatus = ({ status, defaultValue, }) => {
37
37
  const effectiveCodeValue = (_a = status.codeValue) !== null && _a !== void 0 ? _a : defaultValue;
38
38
  return JSON.stringify(effectiveCodeValue) !== JSON.stringify(defaultValue);
39
39
  };
40
- const Value = ({ field, nodePath, validatedLocation, schema, codeValue }) => {
40
+ const Value = ({ field, nodePath, validatedLocation, schema, propStatus }) => {
41
41
  const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
42
42
  const { setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
43
43
  const dragOverrideValue = (0, react_1.useMemo)(() => {
@@ -47,12 +47,12 @@ const Value = ({ field, nodePath, validatedLocation, schema, codeValue }) => {
47
47
  : ((_a = getDragOverrides(nodePath)) !== null && _a !== void 0 ? _a : {})[field.key];
48
48
  }, [getDragOverrides, nodePath, field.key]);
49
49
  const effectiveValue = remotion_1.Internals.getEffectiveVisualModeValue({
50
- codeValue,
50
+ propStatus,
51
51
  dragOverrideValue,
52
52
  defaultValue: field.fieldSchema.default,
53
53
  shouldResortToDefaultValueIfUndefined: true,
54
54
  });
55
- const { setCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
55
+ const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
56
56
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
57
57
  const clientId = previewServerState.type === 'connected'
58
58
  ? previewServerState.clientId
@@ -67,11 +67,11 @@ const Value = ({ field, nodePath, validatedLocation, schema, codeValue }) => {
67
67
  : null;
68
68
  const stringifiedValue = JSON.stringify(value);
69
69
  const fieldLabel = (_a = field.description) !== null && _a !== void 0 ? _a : field.key;
70
- if (value === codeValue.codeValue) {
70
+ if (value === propStatus.codeValue) {
71
71
  return Promise.resolve();
72
72
  }
73
73
  if (defaultValue === stringifiedValue &&
74
- codeValue.codeValue === undefined) {
74
+ propStatus.codeValue === undefined) {
75
75
  return Promise.resolve();
76
76
  }
77
77
  return (0, save_sequence_prop_1.saveSequenceProps)({
@@ -85,20 +85,20 @@ const Value = ({ field, nodePath, validatedLocation, schema, codeValue }) => {
85
85
  schema,
86
86
  },
87
87
  ],
88
- setCodeValues,
88
+ setPropStatuses,
89
89
  clientId,
90
90
  undoLabel: `Update ${fieldLabel}`,
91
91
  redoLabel: `Update ${fieldLabel} again`,
92
92
  });
93
93
  }, [
94
- codeValue,
94
+ propStatus,
95
95
  clientId,
96
96
  field.description,
97
97
  field.fieldSchema.default,
98
98
  field.key,
99
99
  nodePath,
100
100
  schema,
101
- setCodeValues,
101
+ setPropStatuses,
102
102
  validatedLocation,
103
103
  ]);
104
104
  const onDragValueChange = (0, react_1.useCallback)((value) => {
@@ -113,36 +113,36 @@ const Value = ({ field, nodePath, validatedLocation, schema, codeValue }) => {
113
113
  }
114
114
  clearDragOverrides(nodePath);
115
115
  }, [clearDragOverrides, nodePath]);
116
- return (jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineFieldValue, { field: field, propStatus: codeValue, onSave: onSave, onDragValueChange: onDragValueChange, onDragEnd: onDragEnd, effectiveValue: effectiveValue, scaleLockNodePath: nodePath }));
116
+ return (jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineFieldValue, { field: field, propStatus: propStatus, onSave: onSave, onDragValueChange: onDragValueChange, onDragEnd: onDragEnd, effectiveValue: effectiveValue, scaleLockNodePath: nodePath }));
117
117
  };
118
118
  const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath, nodePathInfo, schema, keyframeDisplayOffset, }) => {
119
119
  var _a, _b;
120
- const { codeValues: visualModeCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeCodeValuesContext);
120
+ const { propStatuses: visualModePropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
121
121
  const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
122
- const { setCodeValues, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
122
+ const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
123
123
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
124
124
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
125
125
  const selection = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
126
126
  const clientId = previewServerState.type === 'connected'
127
127
  ? previewServerState.clientId
128
128
  : null;
129
- const codeValuesForOverride = remotion_1.Internals.getCodeValuesCtx(visualModeCodeValues, nodePath);
130
- const codeValue = (_a = codeValuesForOverride === null || codeValuesForOverride === void 0 ? void 0 : codeValuesForOverride[field.key]) !== null && _a !== void 0 ? _a : null;
129
+ const propStatusesForOverride = remotion_1.Internals.getPropStatusesCtx(visualModePropStatuses, nodePath);
130
+ const propStatus = (_a = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride[field.key]) !== null && _a !== void 0 ? _a : null;
131
131
  const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
132
132
  const jsxFrame = timelinePosition - keyframeDisplayOffset;
133
133
  const dragOverrideValue = (0, react_1.useMemo)(() => {
134
134
  var _a;
135
135
  return ((_a = getDragOverrides(nodePath)) !== null && _a !== void 0 ? _a : {})[field.key];
136
136
  }, [getDragOverrides, nodePath, field.key]);
137
- const keyframeControls = codeValue !== null &&
137
+ const keyframeControls = propStatus !== null &&
138
138
  (0, TimelineKeyframeControls_1.shouldShowTimelineKeyframeControls)({
139
- propStatus: codeValue,
139
+ propStatus,
140
140
  selected: selection.selected,
141
141
  keyframable: (0, studio_shared_1.isSchemaFieldKeyframable)({
142
142
  schema,
143
143
  key: field.key,
144
144
  }),
145
- }) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: codeValue, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: schema, effectIndex: null })) : null;
145
+ }) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: propStatus, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: schema, effectIndex: null, nodePathInfo: nodePathInfo })) : null;
146
146
  const style = (0, react_1.useMemo)(() => {
147
147
  return {
148
148
  ...fieldRowBase,
@@ -150,24 +150,24 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
150
150
  };
151
151
  }, [field.rowHeight]);
152
152
  const canResetToDefault = (0, react_1.useMemo)(() => {
153
- if (!codeValue || codeValue.status === 'computed') {
153
+ if (!propStatus || propStatus.status === 'computed') {
154
154
  return false;
155
155
  }
156
156
  return isResettableStatus({
157
- status: codeValue,
157
+ status: propStatus,
158
158
  defaultValue: field.fieldSchema.default,
159
159
  });
160
- }, [codeValue, field.fieldSchema.default]);
160
+ }, [propStatus, field.fieldSchema.default]);
161
161
  const canPerformReset = previewServerState.type === 'connected' &&
162
- codeValue !== null &&
163
- codeValue.status !== 'computed';
162
+ propStatus !== null &&
163
+ propStatus.status !== 'computed';
164
164
  const canShowReset = canPerformReset && field.fieldSchema.default !== undefined;
165
165
  const onReset = (0, react_1.useCallback)(() => {
166
166
  var _a;
167
167
  if (!canShowReset ||
168
168
  !canResetToDefault ||
169
169
  previewServerState.type !== 'connected' ||
170
- codeValue === null) {
170
+ propStatus === null) {
171
171
  return;
172
172
  }
173
173
  const defaultValue = field.fieldSchema.default !== undefined
@@ -185,7 +185,7 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
185
185
  schema,
186
186
  },
187
187
  ],
188
- setCodeValues,
188
+ setPropStatuses,
189
189
  clientId: previewServerState.clientId,
190
190
  undoLabel: `Reset ${fieldLabel}`,
191
191
  redoLabel: `Reapply ${fieldLabel}`,
@@ -199,9 +199,9 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
199
199
  nodePath,
200
200
  previewServerState,
201
201
  schema,
202
- setCodeValues,
202
+ setPropStatuses,
203
203
  validatedLocation.source,
204
- codeValue,
204
+ propStatus,
205
205
  ]);
206
206
  const onSaveKeyframed = (0, react_1.useCallback)((value, sourceFrame) => {
207
207
  if (!clientId) {
@@ -214,7 +214,7 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
214
214
  sourceFrame,
215
215
  value,
216
216
  schema,
217
- setCodeValues,
217
+ setPropStatuses,
218
218
  clientId,
219
219
  });
220
220
  }, [
@@ -222,25 +222,25 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
222
222
  field.key,
223
223
  nodePath,
224
224
  schema,
225
- setCodeValues,
225
+ setPropStatuses,
226
226
  validatedLocation.source,
227
227
  ]);
228
228
  const onKeyframedDragValueChange = (0, react_1.useCallback)((value) => {
229
- if (codeValue === null || !isKeyframedStatus(codeValue)) {
229
+ if (propStatus === null || !isKeyframedStatus(propStatus)) {
230
230
  throw new Error('Expected keyframed status');
231
231
  }
232
232
  setDragOverrides(nodePath, field.key, remotion_1.Internals.makeKeyframedDragOverride({
233
- status: codeValue,
233
+ status: propStatus,
234
234
  frame: jsxFrame,
235
235
  value,
236
236
  }));
237
- }, [codeValue, field.key, jsxFrame, nodePath, setDragOverrides]);
237
+ }, [propStatus, field.key, jsxFrame, nodePath, setDragOverrides]);
238
238
  const onKeyframedDragEnd = (0, react_1.useCallback)(() => {
239
239
  clearDragOverrides(nodePath);
240
240
  }, [clearDragOverrides, nodePath]);
241
241
  const onOpenKeyframeSettings = (0, react_1.useCallback)(() => {
242
242
  var _a;
243
- if (codeValue === null || !isKeyframedStatus(codeValue)) {
243
+ if (propStatus === null || !isKeyframedStatus(propStatus)) {
244
244
  return;
245
245
  }
246
246
  setSelectedModal({
@@ -249,12 +249,12 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
249
249
  nodePath,
250
250
  fieldKey: field.key,
251
251
  fieldLabel: (_a = field.description) !== null && _a !== void 0 ? _a : field.key,
252
- status: codeValue,
252
+ status: propStatus,
253
253
  schema,
254
254
  effectIndex: null,
255
255
  });
256
256
  }, [
257
- codeValue,
257
+ propStatus,
258
258
  field.description,
259
259
  field.key,
260
260
  nodePath,
@@ -277,7 +277,7 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
277
277
  value: 'reset-sequence-field',
278
278
  },
279
279
  ];
280
- if (codeValue !== null && isKeyframedStatus(codeValue)) {
280
+ if (propStatus !== null && isKeyframedStatus(propStatus)) {
281
281
  values.push({
282
282
  type: 'item',
283
283
  id: 'keyframe-settings-sequence-field',
@@ -294,16 +294,16 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
294
294
  return values;
295
295
  }, [
296
296
  canShowReset,
297
- codeValue,
297
+ propStatus,
298
298
  onOpenKeyframeSettings,
299
299
  onReset,
300
300
  previewServerState,
301
301
  ]);
302
- if (codeValue === null) {
302
+ if (propStatus === null) {
303
303
  return null;
304
304
  }
305
305
  const row = (jsx_runtime_1.jsxs(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), keyframeControls: keyframeControls, arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: style, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: false, outerHeight: null, children: [
306
- jsx_runtime_1.jsx(TimelineFieldLabel_1.TimelineFieldLabel, { rowDepth: rowDepth, selected: selection.selected, label: (_b = field.description) !== null && _b !== void 0 ? _b : field.key }), isKeyframedStatus(codeValue) ? (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(TimelineKeyframedValue_1.TimelineKeyframedValue, { field: field, propStatus: codeValue, keyframeDisplayOffset: keyframeDisplayOffset, dragOverrideValue: dragOverrideValue, onSave: onSaveKeyframed, onDragValueChange: onKeyframedDragValueChange, onDragEnd: onKeyframedDragEnd, scaleLockNodePath: nodePath }) })) : codeValue.status === 'static' ? (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(Value, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, schema: schema, codeValue: codeValue }) })) : (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineNonEditableStatus, { propStatus: codeValue }) }))] }));
306
+ jsx_runtime_1.jsx(TimelineFieldLabel_1.TimelineFieldLabel, { rowDepth: rowDepth, selected: selection.selected, label: (_b = field.description) !== null && _b !== void 0 ? _b : field.key }), isKeyframedStatus(propStatus) ? (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(TimelineKeyframedValue_1.TimelineKeyframedValue, { field: field, propStatus: propStatus, keyframeDisplayOffset: keyframeDisplayOffset, dragOverrideValue: dragOverrideValue, onSave: onSaveKeyframed, onDragValueChange: onKeyframedDragValueChange, onDragEnd: onKeyframedDragEnd, scaleLockNodePath: nodePath }) })) : propStatus.status === 'static' ? (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(Value, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, schema: schema, propStatus: propStatus }) })) : (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineNonEditableStatus, { propStatus: propStatus }) }))] }));
307
307
  return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: selection.selectable ? selection.onSelect : null, children: row }));
308
308
  };
309
309
  exports.TimelineSequencePropItem = TimelineSequencePropItem;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { CodeValues, OverrideIdToNodePaths, SequencePropsSubscriptionKey, TSequence } from 'remotion';
2
+ import type { OverrideIdToNodePaths, PropStatuses, SequencePropsSubscriptionKey, TSequence } from 'remotion';
3
3
  import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
4
4
  import { type SaveSequencePropChange } from './save-sequence-prop';
5
5
  import { type TimelineSelection } from './TimelineSelection';
@@ -29,19 +29,19 @@ export declare const getTimelineSequenceFromDragChanges: ({ targets, deltaFrames
29
29
  readonly targets: readonly TimelineSequenceFromDragTarget[];
30
30
  readonly deltaFrames: number;
31
31
  }) => SaveSequencePropChange[];
32
- export declare const getTimelineSequenceDurationDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, codeValues, }: {
32
+ export declare const getTimelineSequenceDurationDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, }: {
33
33
  readonly draggedNodePathInfo: SequenceNodePathInfo;
34
34
  readonly selectedItems: readonly TimelineSelection[];
35
35
  readonly sequences: TSequence[];
36
36
  readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
37
- readonly codeValues: CodeValues;
37
+ readonly propStatuses: PropStatuses;
38
38
  }) => TimelineSequenceDurationDragTarget[] | null;
39
- export declare const getTimelineSequenceFromDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, codeValues, }: {
39
+ export declare const getTimelineSequenceFromDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, }: {
40
40
  readonly draggedNodePathInfo: SequenceNodePathInfo;
41
41
  readonly selectedItems: readonly TimelineSelection[];
42
42
  readonly sequences: TSequence[];
43
43
  readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
44
- readonly codeValues: CodeValues;
44
+ readonly propStatuses: PropStatuses;
45
45
  }) => TimelineSequenceFromDragTarget[] | null;
46
46
  export declare const useTimelineSequenceFromDrag: ({ nodePathInfo, windowWidth, timelineDurationInFrames, }: {
47
47
  readonly nodePathInfo: SequenceNodePathInfo | null;