@remotion/studio 4.0.478 → 4.0.481

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 (201) hide show
  1. package/dist/components/AssetSelector.js +8 -14
  2. package/dist/components/AudioWaveform.js +19 -11
  3. package/dist/components/Button.d.ts +2 -0
  4. package/dist/components/Button.js +9 -6
  5. package/dist/components/CompactExplanation.d.ts +12 -0
  6. package/dist/components/CompactExplanation.js +52 -0
  7. package/dist/components/CompositionSelector.js +2 -4
  8. package/dist/components/CurrentAsset.d.ts +3 -1
  9. package/dist/components/CurrentAsset.js +42 -34
  10. package/dist/components/CurrentComposition.d.ts +1 -1
  11. package/dist/components/CurrentComposition.js +38 -31
  12. package/dist/components/CurrentCompositionSideEffects.d.ts +0 -3
  13. package/dist/components/CurrentCompositionSideEffects.js +1 -37
  14. package/dist/components/DefaultPropsEditor.d.ts +12 -2
  15. package/dist/components/DefaultPropsEditor.js +2 -2
  16. package/dist/components/Editor.js +2 -5
  17. package/dist/components/EditorContent.js +2 -1
  18. package/dist/components/EffectPickerModal.d.ts +5 -0
  19. package/dist/components/EffectPickerModal.js +179 -0
  20. package/dist/components/ExpandedTracksProvider.d.ts +1 -0
  21. package/dist/components/ExpandedTracksProvider.js +81 -7
  22. package/dist/components/GlobalKeybindings.d.ts +3 -1
  23. package/dist/components/GlobalKeybindings.js +104 -10
  24. package/dist/components/InspectorInfoHeader.d.ts +11 -0
  25. package/dist/components/InspectorInfoHeader.js +55 -0
  26. package/dist/components/InspectorPanel/DefaultInspector.d.ts +8 -0
  27. package/dist/components/InspectorPanel/DefaultInspector.js +93 -0
  28. package/dist/components/InspectorPanel/EasingInspector.d.ts +5 -0
  29. package/dist/components/InspectorPanel/EasingInspector.js +41 -0
  30. package/dist/components/InspectorPanel/GuideInspector.d.ts +7 -0
  31. package/dist/components/InspectorPanel/GuideInspector.js +55 -0
  32. package/dist/components/InspectorPanel/KeyframeInspector.d.ts +7 -0
  33. package/dist/components/InspectorPanel/KeyframeInspector.js +109 -0
  34. package/dist/components/InspectorPanel/SelectedInspector.d.ts +5 -0
  35. package/dist/components/InspectorPanel/SelectedInspector.js +26 -0
  36. package/dist/components/InspectorPanel/SequenceSelectionInspector.d.ts +5 -0
  37. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +117 -0
  38. package/dist/components/InspectorPanel/common.d.ts +15 -0
  39. package/dist/components/InspectorPanel/common.js +18 -0
  40. package/dist/components/InspectorPanel/inspector-selection.d.ts +10 -0
  41. package/dist/components/InspectorPanel/inspector-selection.js +35 -0
  42. package/dist/components/InspectorPanel/styles.d.ts +28 -0
  43. package/dist/components/InspectorPanel/styles.js +196 -0
  44. package/dist/components/InspectorPanel/use-track-for-selection.d.ts +2 -0
  45. package/dist/components/InspectorPanel/use-track-for-selection.js +22 -0
  46. package/dist/components/InspectorPanel.d.ts +8 -0
  47. package/dist/components/InspectorPanel.js +26 -0
  48. package/dist/components/InspectorPanelLayout.d.ts +1 -0
  49. package/dist/components/InspectorPanelLayout.js +4 -0
  50. package/dist/components/InspectorSequenceSection.d.ts +19 -0
  51. package/dist/components/InspectorSequenceSection.js +157 -0
  52. package/dist/components/InspectorSourceLocation.d.ts +7 -0
  53. package/dist/components/InspectorSourceLocation.js +71 -0
  54. package/dist/components/KeyboardShortcutsExplainer.js +10 -2
  55. package/dist/components/Modals.js +3 -3
  56. package/dist/components/NewComposition/InputDragger.js +1 -1
  57. package/dist/components/NewComposition/RemInput.d.ts +1 -0
  58. package/dist/components/NewComposition/RemInput.js +8 -2
  59. package/dist/components/NewComposition/RemTextarea.d.ts +1 -0
  60. package/dist/components/NewComposition/RemTextarea.js +8 -2
  61. package/dist/components/NewComposition/ValidationMessage.d.ts +3 -0
  62. package/dist/components/NewComposition/ValidationMessage.js +16 -5
  63. package/dist/components/OptionsPanel.d.ts +1 -1
  64. package/dist/components/OptionsPanel.js +8 -17
  65. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +2 -7
  66. package/dist/components/QuickSwitcher/QuickSwitcherResult.js +3 -10
  67. package/dist/components/QuickSwitcher/shared.d.ts +4 -0
  68. package/dist/components/QuickSwitcher/shared.js +24 -0
  69. package/dist/components/RenderModal/DataEditor.d.ts +29 -2
  70. package/dist/components/RenderModal/DataEditor.js +107 -56
  71. package/dist/components/RenderModal/RenderModalJSONPropsEditor.d.ts +1 -0
  72. package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +25 -7
  73. package/dist/components/RenderModal/SchemaEditor/Fieldset.d.ts +2 -1
  74. package/dist/components/RenderModal/SchemaEditor/Fieldset.js +10 -5
  75. package/dist/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +4 -0
  76. package/dist/components/RenderModal/SchemaEditor/SchemaEditor.js +27 -4
  77. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.d.ts +12 -4
  78. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +23 -9
  79. package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +3 -3
  80. package/dist/components/RenderModal/SchemaEditor/SchemaSeparationLine.js +8 -1
  81. package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
  82. package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
  83. package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +1 -1
  84. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
  85. package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.d.ts +1 -0
  86. package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.js +23 -6
  87. package/dist/components/RenderModal/SchemaEditor/ZodFieldValidation.js +2 -2
  88. package/dist/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +2 -1
  89. package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
  90. package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +9 -11
  91. package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +1 -1
  92. package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
  93. package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
  94. package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +1 -1
  95. package/dist/components/RenderModal/WarningIndicatorButton.d.ts +1 -0
  96. package/dist/components/RenderModal/WarningIndicatorButton.js +17 -4
  97. package/dist/components/RenderModal/get-render-modal-warnings.d.ts +2 -1
  98. package/dist/components/RenderModal/get-render-modal-warnings.js +6 -3
  99. package/dist/components/RendersTab.js +1 -1
  100. package/dist/components/ResetZoomButton.d.ts +2 -1
  101. package/dist/components/ResetZoomButton.js +5 -1
  102. package/dist/components/SegmentedControl.d.ts +3 -0
  103. package/dist/components/SegmentedControl.js +11 -5
  104. package/dist/components/SelectedOutlineElement.js +96 -24
  105. package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
  106. package/dist/components/SelectedOutlineOverlay.js +44 -30
  107. package/dist/components/SelectedOutlineUvControls.d.ts +9 -0
  108. package/dist/components/SelectedOutlineUvControls.js +64 -10
  109. package/dist/components/Tabs/index.js +4 -4
  110. package/dist/components/Timeline/EasingEditorModal.d.ts +5 -4
  111. package/dist/components/Timeline/EasingEditorModal.js +597 -124
  112. package/dist/components/Timeline/KeyframeSettingsModal.d.ts +2 -2
  113. package/dist/components/Timeline/SubscribeToNodePaths.d.ts +2 -2
  114. package/dist/components/Timeline/Timeline.js +9 -9
  115. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +15 -3
  116. package/dist/components/Timeline/TimelineClipboardKeybindings.js +85 -1
  117. package/dist/components/Timeline/TimelineDeleteKeybindings.js +10 -3
  118. package/dist/components/Timeline/TimelineEffectItem.d.ts +2 -2
  119. package/dist/components/Timeline/TimelineEffectItem.js +1 -1
  120. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +8 -0
  121. package/dist/components/Timeline/TimelineEffectPropItem.js +25 -21
  122. package/dist/components/Timeline/TimelineExpandArrowButton.js +42 -2
  123. package/dist/components/Timeline/TimelineExpandedRow.d.ts +5 -2
  124. package/dist/components/Timeline/TimelineExpandedRow.js +6 -6
  125. package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -1
  126. package/dist/components/Timeline/TimelineExpandedSection.js +10 -25
  127. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +8 -2
  128. package/dist/components/Timeline/TimelineKeyframeControls.js +24 -3
  129. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +2 -47
  130. package/dist/components/Timeline/TimelineKeyframedValue.d.ts +1 -1
  131. package/dist/components/Timeline/TimelineKeyframedValue.js +8 -10
  132. package/dist/components/Timeline/TimelineNumberField.js +5 -11
  133. package/dist/components/Timeline/TimelineRotationField.js +5 -6
  134. package/dist/components/Timeline/TimelineRowChrome.d.ts +2 -0
  135. package/dist/components/Timeline/TimelineRowChrome.js +5 -3
  136. package/dist/components/Timeline/TimelineScaleField.js +4 -8
  137. package/dist/components/Timeline/TimelineSelection.d.ts +28 -2
  138. package/dist/components/Timeline/TimelineSelection.js +342 -61
  139. package/dist/components/Timeline/TimelineSequence.js +19 -3
  140. package/dist/components/Timeline/TimelineSequenceItem.js +68 -64
  141. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +12 -2
  142. package/dist/components/Timeline/TimelineSequencePropItem.js +57 -53
  143. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +6 -4
  144. package/dist/components/Timeline/TimelineTransformOriginField.js +4 -5
  145. package/dist/components/Timeline/TimelineTranslateField.js +4 -5
  146. package/dist/components/Timeline/TimelineUvCoordinateField.js +4 -4
  147. package/dist/components/Timeline/call-add-keyframe.d.ts +4 -4
  148. package/dist/components/Timeline/call-delete-keyframe.d.ts +4 -4
  149. package/dist/components/Timeline/call-move-keyframe.d.ts +2 -2
  150. package/dist/components/Timeline/call-update-keyframe-settings.d.ts +3 -3
  151. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +2 -1
  152. package/dist/components/Timeline/delete-selected-timeline-item.js +27 -1
  153. package/dist/components/Timeline/find-track-for-node-path-info.js +2 -2
  154. package/dist/components/Timeline/get-node-keyframes.d.ts +7 -0
  155. package/dist/components/Timeline/get-node-keyframes.js +26 -1
  156. package/dist/components/Timeline/parse-keyframe-field-from-node-path.js +2 -2
  157. package/dist/components/Timeline/reset-selected-timeline-props.d.ts +3 -3
  158. package/dist/components/Timeline/reset-selected-timeline-props.js +34 -7
  159. package/dist/components/Timeline/save-effect-prop.d.ts +2 -2
  160. package/dist/components/Timeline/save-sequence-prop.d.ts +2 -2
  161. package/dist/components/Timeline/sequence-props-subscription-store.d.ts +3 -3
  162. package/dist/components/Timeline/timeline-expanded-filter.d.ts +12 -0
  163. package/dist/components/Timeline/timeline-expanded-filter.js +38 -0
  164. package/dist/components/Timeline/timeline-field-display-utils.d.ts +5 -0
  165. package/dist/components/Timeline/timeline-field-display-utils.js +244 -0
  166. package/dist/components/Timeline/update-selected-easing.d.ts +47 -4
  167. package/dist/components/Timeline/update-selected-easing.js +40 -9
  168. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +50 -18
  169. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +13 -0
  170. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +73 -0
  171. package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -3
  172. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +12 -0
  173. package/dist/components/Timeline/use-timeline-expanded-tree.js +60 -0
  174. package/dist/components/Timeline/use-timeline-height.js +51 -7
  175. package/dist/components/Timeline/use-timeline-keyframe-drag.js +12 -6
  176. package/dist/components/TopPanel.js +1 -1
  177. package/dist/components/VisualControls/VisualControlsContent.d.ts +1 -1
  178. package/dist/components/VisualControls/VisualControlsContent.js +4 -5
  179. package/dist/components/effect-drag-and-drop.d.ts +10 -0
  180. package/dist/components/effect-drag-and-drop.js +17 -8
  181. package/dist/components/effect-picker-search.d.ts +5 -0
  182. package/dist/components/effect-picker-search.js +77 -0
  183. package/dist/components/selected-outline-drag.d.ts +21 -2
  184. package/dist/components/selected-outline-drag.js +31 -6
  185. package/dist/components/selected-outline-measurement.js +48 -14
  186. package/dist/components/selected-outline-types.d.ts +7 -7
  187. package/dist/components/selected-outline-uv.d.ts +4 -3
  188. package/dist/components/selected-outline-uv.js +6 -2
  189. package/dist/error-overlay/remotion-overlay/ErrorLoader.js +8 -1
  190. package/dist/esm/{chunk-hrw9799x.js → chunk-4rq5gt8c.js} +30557 -26640
  191. package/dist/esm/internals.mjs +30557 -26640
  192. package/dist/esm/previewEntry.mjs +18584 -14665
  193. package/dist/esm/renderEntry.mjs +1 -1
  194. package/dist/helpers/migrate-expanded-tracks-for-subscription-key.js +3 -3
  195. package/dist/helpers/render-codec-label.d.ts +2 -0
  196. package/dist/helpers/render-codec-label.js +49 -0
  197. package/dist/helpers/timeline-layout.d.ts +4 -4
  198. package/dist/helpers/use-media-metadata.d.ts +8 -2
  199. package/dist/helpers/use-media-metadata.js +17 -4
  200. package/dist/state/modals.d.ts +9 -4
  201. package/package.json +12 -12
@@ -12,7 +12,7 @@ export type TypeCanSaveState = {
12
12
  reason: string;
13
13
  determined: boolean;
14
14
  };
15
- export declare const getRenderModalWarnings: ({ cliProps, canSaveDefaultProps, isCustomDateUsed, customFileUsed, jsMapUsed, jsSetUsed, inJSONEditor, propsEditType, }: {
15
+ export declare const getRenderModalWarnings: ({ cliProps, canSaveDefaultProps, isCustomDateUsed, customFileUsed, jsMapUsed, jsSetUsed, inJSONEditor, propsEditType, showCannotSaveDefaultPropsWarning, }: {
16
16
  cliProps: unknown;
17
17
  canSaveDefaultProps: TypeCanSaveState | null;
18
18
  isCustomDateUsed: boolean;
@@ -21,4 +21,5 @@ export declare const getRenderModalWarnings: ({ cliProps, canSaveDefaultProps, i
21
21
  jsSetUsed: boolean;
22
22
  inJSONEditor: boolean;
23
23
  propsEditType: PropsEditType;
24
+ showCannotSaveDefaultPropsWarning: boolean;
24
25
  }) => RenderModalWarning[];
@@ -19,7 +19,10 @@ const getInputPropsWarning = ({ cliProps, propsEditType, }) => {
19
19
  }
20
20
  return null;
21
21
  };
22
- const getCannotSaveDefaultProps = (canSaveDefaultProps) => {
22
+ const getCannotSaveDefaultProps = (canSaveDefaultProps, showCannotSaveDefaultPropsWarning) => {
23
+ if (!showCannotSaveDefaultPropsWarning) {
24
+ return null;
25
+ }
23
26
  if (canSaveDefaultProps === null) {
24
27
  return null;
25
28
  }
@@ -59,10 +62,10 @@ const setUsed = (used, inJSONEditor) => {
59
62
  }
60
63
  return null;
61
64
  };
62
- const getRenderModalWarnings = ({ cliProps, canSaveDefaultProps, isCustomDateUsed, customFileUsed, jsMapUsed, jsSetUsed, inJSONEditor, propsEditType, }) => {
65
+ const getRenderModalWarnings = ({ cliProps, canSaveDefaultProps, isCustomDateUsed, customFileUsed, jsMapUsed, jsSetUsed, inJSONEditor, propsEditType, showCannotSaveDefaultPropsWarning, }) => {
63
66
  return [
64
67
  warningOrNull('input-props-override', getInputPropsWarning({ cliProps, propsEditType })),
65
- getCannotSaveDefaultProps(canSaveDefaultProps),
68
+ getCannotSaveDefaultProps(canSaveDefaultProps, showCannotSaveDefaultPropsWarning),
66
69
  warningOrNull('custom-date-used', customDateUsed(isCustomDateUsed, inJSONEditor)),
67
70
  warningOrNull('static-file-used', staticFileUsed(customFileUsed, inJSONEditor)),
68
71
  warningOrNull('map-used', mapUsed(jsMapUsed, inJSONEditor)),
@@ -10,7 +10,7 @@ const Tabs_1 = require("./Tabs");
10
10
  const row = {
11
11
  display: 'flex',
12
12
  flexDirection: 'row',
13
- fontSize: 14,
13
+ fontSize: 'inherit',
14
14
  color: 'inherit',
15
15
  alignItems: 'center',
16
16
  flex: 1,
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  export declare const ResetZoomButton: React.FC<{
2
- onClick: () => void;
3
+ readonly onClick: () => void;
3
4
  }>;
@@ -2,8 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ResetZoomButton = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
5
6
  const Button_1 = require("./Button");
6
7
  const ResetZoomButton = ({ onClick }) => {
7
- return jsx_runtime_1.jsx(Button_1.Button, { onClick: onClick, children: "Reset zoom" });
8
+ const onPointerDown = (0, react_1.useCallback)((event) => {
9
+ event.stopPropagation();
10
+ }, []);
11
+ return (jsx_runtime_1.jsx(Button_1.Button, { onClick: onClick, onPointerDown: onPointerDown, children: "Reset zoom" }));
8
12
  };
9
13
  exports.ResetZoomButton = ResetZoomButton;
@@ -5,7 +5,10 @@ export type SegmentedControlItem = {
5
5
  key: string;
6
6
  selected: boolean;
7
7
  };
8
+ type SegmentedControlSize = 'default' | 'compact';
8
9
  export declare const SegmentedControl: React.FC<{
9
10
  readonly items: SegmentedControlItem[];
10
11
  readonly needsWrapping: boolean;
12
+ readonly size?: SegmentedControlSize;
11
13
  }>;
14
+ export {};
@@ -25,7 +25,13 @@ const item = {
25
25
  justifyContent: 'center',
26
26
  whiteSpace: 'nowrap',
27
27
  };
28
- const SegmentedControl = ({ items, needsWrapping }) => {
28
+ const compactItem = {
29
+ ...item,
30
+ fontSize: 11,
31
+ fontWeight: 400,
32
+ padding: '2px 7px',
33
+ };
34
+ const SegmentedControl = ({ items, needsWrapping, size = 'default' }) => {
29
35
  const controlStyle = (0, react_1.useMemo)(() => {
30
36
  if (needsWrapping) {
31
37
  return {
@@ -41,11 +47,11 @@ const SegmentedControl = ({ items, needsWrapping }) => {
41
47
  };
42
48
  }, [needsWrapping]);
43
49
  return (jsx_runtime_1.jsx("div", { style: controlStyle, children: items.map((i) => {
44
- return (jsx_runtime_1.jsx(Item, { onClick: i.onClick, selected: i.selected, children: i.label }, i.key));
50
+ return (jsx_runtime_1.jsx(Item, { onClick: i.onClick, selected: i.selected, size: size, children: i.label }, i.key));
45
51
  }) }));
46
52
  };
47
53
  exports.SegmentedControl = SegmentedControl;
48
- const Item = ({ selected, onClick, children }) => {
54
+ const Item = ({ selected, onClick, children, size }) => {
49
55
  const [hovered, setHovered] = (0, react_1.useState)(false);
50
56
  const { tabIndex } = (0, z_index_1.useZIndex)();
51
57
  const onPointerEnter = (0, react_1.useCallback)(() => {
@@ -56,10 +62,10 @@ const Item = ({ selected, onClick, children }) => {
56
62
  }, []);
57
63
  const itemStyle = (0, react_1.useMemo)(() => {
58
64
  return {
59
- ...item,
65
+ ...(size === 'compact' ? compactItem : item),
60
66
  backgroundColor: selected ? colors_1.INPUT_BACKGROUND : 'transparent',
61
67
  color: selected ? 'white' : hovered ? 'white' : colors_1.LIGHT_TEXT,
62
68
  };
63
- }, [hovered, selected]);
69
+ }, [hovered, selected, size]);
64
70
  return (jsx_runtime_1.jsx("button", { type: "button", onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, style: itemStyle, tabIndex: tabIndex, onClick: onClick, children: children }));
65
71
  };
@@ -42,6 +42,7 @@ const client_id_1 = require("../helpers/client-id");
42
42
  const colors_1 = require("../helpers/colors");
43
43
  const format_file_location_1 = require("../helpers/format-file-location");
44
44
  const open_in_editor_1 = require("../helpers/open-in-editor");
45
+ const modals_1 = require("../state/modals");
45
46
  const call_api_1 = require("./call-api");
46
47
  const ConfirmationDialog_1 = require("./ConfirmationDialog");
47
48
  const ContextMenu_1 = require("./ContextMenu");
@@ -303,7 +304,9 @@ const SelectedOutlineTransformOriginHandle = ({ outline, onDraggingChange, targe
303
304
  position === null) {
304
305
  return null;
305
306
  }
306
- return (jsx_runtime_1.jsxs("g", { pointerEvents: "all", cursor: "crosshair", onPointerDown: onPointerDown, "aria-hidden": "true", children: [
307
+ return (jsx_runtime_1.jsxs("g", { pointerEvents: "all", cursor: "crosshair", onPointerDown: onPointerDown, "aria-hidden": "true", style: {
308
+ filter: 'drop-shadow(0 0 1px rgba(255, 255, 255, 0.2))',
309
+ }, children: [
307
310
  jsx_runtime_1.jsx("circle", { cx: position.x, cy: position.y, r: 4, stroke: colors_1.BLUE, fill: "none", strokeWidth: 2, vectorEffect: "non-scaling-stroke" }), jsx_runtime_1.jsx("line", { x1: position.x - 8, y1: position.y, x2: position.x + 8, y2: position.y, stroke: colors_1.BLUE, strokeWidth: 2, vectorEffect: "non-scaling-stroke" }), jsx_runtime_1.jsx("line", { x1: position.x, y1: position.y - 8, x2: position.x, y2: position.y + 8, stroke: colors_1.BLUE, strokeWidth: 2, vectorEffect: "non-scaling-stroke" })
308
311
  ] }));
309
312
  };
@@ -715,11 +718,14 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
715
718
  return;
716
719
  }
717
720
  const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
718
- const shouldUpdateSelection = !selected || interaction.shiftKey || interaction.toggleKey;
721
+ const shouldUpdateSelection = !selected || interaction.toggleKey;
719
722
  if (shouldUpdateSelection && target !== undefined) {
720
- onSelect(target.selection, interaction);
723
+ onSelect(target.selection, {
724
+ shiftKey: false,
725
+ toggleKey: interaction.toggleKey,
726
+ });
721
727
  }
722
- if (interaction.shiftKey || interaction.toggleKey) {
728
+ if (interaction.toggleKey) {
723
729
  return;
724
730
  }
725
731
  const startPointer = { x: event.clientX, y: event.clientY };
@@ -739,8 +745,38 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
739
745
  y: event.clientY,
740
746
  });
741
747
  let accumulatedDelta = 0;
748
+ let rotationLocked = event.shiftKey;
742
749
  let lastValues = new Map();
743
750
  let dragStarted = false;
751
+ const updateRotationDragOverrides = () => {
752
+ const rotationDeltaDegrees = rotationLocked
753
+ ? (0, selected_outline_drag_1.snapSelectedOutlineRotationDeltaDegrees)({
754
+ dragStates,
755
+ rotationDeltaDegrees: accumulatedDelta,
756
+ })
757
+ : accumulatedDelta;
758
+ lastValues = (0, selected_outline_drag_1.getSelectedOutlineRotationDragValues)({
759
+ dragStates,
760
+ rotationDeltaDegrees,
761
+ });
762
+ (0, ForceSpecificCursor_1.forceSpecificCursor)((0, selected_outline_measurement_1.getRotationCursor)(cornerInfo.cursorDegrees + rotationDeltaDegrees));
763
+ for (const dragState of dragStates) {
764
+ const value = lastValues.get(dragState.key);
765
+ if (value === undefined) {
766
+ throw new Error('Expected rotation drag value to be available');
767
+ }
768
+ if (dragState.target.propStatus.status === 'keyframed') {
769
+ setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
770
+ status: dragState.target.propStatus,
771
+ frame: dragState.sourceFrame,
772
+ value,
773
+ }));
774
+ }
775
+ else {
776
+ setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
777
+ }
778
+ }
779
+ };
744
780
  const onPointerMove = (moveEvent) => {
745
781
  moveEvent.preventDefault();
746
782
  const screenDeltaX = moveEvent.clientX - startPointer.x;
@@ -764,32 +800,28 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
764
800
  to: nextAngle,
765
801
  });
766
802
  previousAngle = nextAngle;
767
- lastValues = (0, selected_outline_drag_1.getSelectedOutlineRotationDragValues)({
768
- dragStates,
769
- rotationDeltaDegrees: accumulatedDelta,
770
- });
771
- (0, ForceSpecificCursor_1.forceSpecificCursor)((0, selected_outline_measurement_1.getRotationCursor)(cornerInfo.cursorDegrees + accumulatedDelta));
772
- for (const dragState of dragStates) {
773
- const value = lastValues.get(dragState.key);
774
- if (value === undefined) {
775
- throw new Error('Expected rotation drag value to be available');
776
- }
777
- if (dragState.target.propStatus.status === 'keyframed') {
778
- setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
779
- status: dragState.target.propStatus,
780
- frame: dragState.sourceFrame,
781
- value,
782
- }));
783
- }
784
- else {
785
- setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
786
- }
803
+ rotationLocked = moveEvent.shiftKey;
804
+ updateRotationDragOverrides();
805
+ };
806
+ const onKeyChange = (keyEvent) => {
807
+ if (keyEvent.key !== 'Shift') {
808
+ return;
809
+ }
810
+ const nextRotationLocked = keyEvent.type === 'keydown';
811
+ if (nextRotationLocked === rotationLocked) {
812
+ return;
813
+ }
814
+ rotationLocked = nextRotationLocked;
815
+ if (dragStarted) {
816
+ updateRotationDragOverrides();
787
817
  }
788
818
  };
789
819
  const onPointerUp = () => {
790
820
  window.removeEventListener('pointermove', onPointerMove);
791
821
  window.removeEventListener('pointerup', onPointerUp);
792
822
  window.removeEventListener('pointercancel', onPointerUp);
823
+ window.removeEventListener('keydown', onKeyChange);
824
+ window.removeEventListener('keyup', onKeyChange);
793
825
  if (dragStarted) {
794
826
  (0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
795
827
  onDraggingChange(false);
@@ -845,6 +877,8 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
845
877
  window.addEventListener('pointermove', onPointerMove);
846
878
  window.addEventListener('pointerup', onPointerUp);
847
879
  window.addEventListener('pointercancel', onPointerUp);
880
+ window.addEventListener('keydown', onKeyChange);
881
+ window.addEventListener('keyup', onKeyChange);
848
882
  }, [
849
883
  allRotationDragTargets,
850
884
  clearDragOverrides,
@@ -881,6 +915,7 @@ const SelectedOutlineElement = ({ allDragTargets, allRotationDragTargets, allSca
881
915
  const updateResolvedStackTrace = (0, react_1.useContext)(remotion_1.Internals.SequenceStackTracesUpdateContext);
882
916
  const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
883
917
  const selectAsset = (0, use_select_asset_1.useSelectAsset)();
918
+ const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
884
919
  const onContextMenuOpen = react_1.default.useCallback(async () => {
885
920
  if (target === undefined || previewServerState.type !== 'connected') {
886
921
  return false;
@@ -915,6 +950,9 @@ const SelectedOutlineElement = ({ allDragTargets, allRotationDragTargets, allSca
915
950
  const canOpenInEditor = Boolean(window.remotion_editorName && originalLocation);
916
951
  const disableInteractivityDisabled = !target.sequence.showInTimeline;
917
952
  const sourceEditDisabled = !target.sequence.controls || !nodePath.absolutePath;
953
+ const canAddEffect = target.nodePathInfo.supportsEffects &&
954
+ !sourceEditDisabled &&
955
+ previewServerState.type === 'connected';
918
956
  return (0, get_sequence_context_menu_items_1.getSequenceContextMenuItems)({
919
957
  assetLinkInfo,
920
958
  canOpenInEditor,
@@ -988,12 +1026,46 @@ const SelectedOutlineElement = ({ allDragTargets, allRotationDragTargets, allSca
988
1026
  originalLocation,
989
1027
  selectAsset,
990
1028
  sequence: target.sequence,
1029
+ sourceActions: [
1030
+ ...(target.nodePathInfo.supportsEffects
1031
+ ? [
1032
+ {
1033
+ type: 'item',
1034
+ id: 'add-effect',
1035
+ keyHint: null,
1036
+ label: 'Add effect...',
1037
+ leftItem: null,
1038
+ disabled: !canAddEffect,
1039
+ onClick: () => {
1040
+ if (!canAddEffect ||
1041
+ previewServerState.type !== 'connected') {
1042
+ return;
1043
+ }
1044
+ setSelectedModal({
1045
+ type: 'add-effect',
1046
+ clientId: previewServerState.clientId,
1047
+ fileName: nodePath.absolutePath,
1048
+ nodePath,
1049
+ });
1050
+ },
1051
+ quickSwitcherLabel: null,
1052
+ subMenu: null,
1053
+ value: 'add-effect',
1054
+ },
1055
+ {
1056
+ type: 'divider',
1057
+ id: 'add-effect-divider',
1058
+ },
1059
+ ]
1060
+ : []),
1061
+ ],
991
1062
  });
992
1063
  }, [
993
1064
  confirm,
994
1065
  onSelect,
995
1066
  previewServerState,
996
1067
  selectAsset,
1068
+ setSelectedModal,
997
1069
  setPropStatuses,
998
1070
  target,
999
1071
  updateResolvedStackTrace,
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- export { applySelectedOutlineDragAxisLock, applySelectedOutlineTransformOriginAxisLock, compensateTranslateForTransformOrigin, getSelectedOutlineDragChanges, getSelectedOutlineDragValues, getSelectedOutlineKeyboardNudgeDelta, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineRotationDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutlineRotationDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineTransformOriginLockedAxis, isSelectedOutlineDragPastThreshold, selectedOutlineTransformOriginSnapThresholdPx, snapSelectedOutlineTransformOriginUv, } from './selected-outline-drag';
2
+ export { applySelectedOutlineDragAxisLock, applySelectedOutlineTransformOriginAxisLock, compensateTranslateForTransformOrigin, getSelectedOutlineActiveSchema, getSelectedOutlineDragChanges, getSelectedOutlineDragValues, getSelectedOutlineKeyboardNudgeDelta, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineRotationDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutlineRotationDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineTransformOriginLockedAxis, isSelectedOutlineDragPastThreshold, selectedOutlineUvSnapThresholdPx, selectedOutlineTransformOriginSnapThresholdPx, snapSelectedOutlineRotationDeltaDegrees, snapSelectedOutlineUv, snapSelectedOutlineTransformOriginUv, } from './selected-outline-drag';
3
3
  export { getOutlineSelectionInteraction, getSelectedEffectFieldsBySequenceKey, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationPivot, getSelectedSequenceKeys, getSequencesWithSelectableOutlines, getTransformedSvgViewportPoints, } from './selected-outline-measurement';
4
4
  export { selectedOutlineDragThresholdPx } from './selected-outline-types';
5
5
  export type { SelectedOutlineDragState, SelectedOutlineRotationDragState, SelectedOutlineScaleDragState, } from './selected-outline-types';
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SelectedOutlineOverlay = exports.selectedOutlineDragThresholdPx = exports.getTransformedSvgViewportPoints = exports.getSequencesWithSelectableOutlines = exports.getSelectedSequenceKeys = exports.getSelectedOutlineRotationPivot = exports.getSelectedOutlineRotationDeltaDegrees = exports.getSelectedOutlineRotationCornerInfo = exports.getSelectedEffectFieldsBySequenceKey = exports.getOutlineSelectionInteraction = exports.snapSelectedOutlineTransformOriginUv = exports.selectedOutlineTransformOriginSnapThresholdPx = exports.isSelectedOutlineDragPastThreshold = exports.getSelectedOutlineTransformOriginLockedAxis = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragChanges = exports.compensateTranslateForTransformOrigin = exports.applySelectedOutlineTransformOriginAxisLock = exports.applySelectedOutlineDragAxisLock = void 0;
36
+ exports.SelectedOutlineOverlay = exports.selectedOutlineDragThresholdPx = exports.getTransformedSvgViewportPoints = exports.getSequencesWithSelectableOutlines = exports.getSelectedSequenceKeys = exports.getSelectedOutlineRotationPivot = exports.getSelectedOutlineRotationDeltaDegrees = exports.getSelectedOutlineRotationCornerInfo = exports.getSelectedEffectFieldsBySequenceKey = exports.getOutlineSelectionInteraction = exports.snapSelectedOutlineTransformOriginUv = exports.snapSelectedOutlineUv = exports.snapSelectedOutlineRotationDeltaDegrees = exports.selectedOutlineTransformOriginSnapThresholdPx = exports.selectedOutlineUvSnapThresholdPx = exports.isSelectedOutlineDragPastThreshold = exports.getSelectedOutlineTransformOriginLockedAxis = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragChanges = exports.getSelectedOutlineActiveSchema = exports.compensateTranslateForTransformOrigin = exports.applySelectedOutlineTransformOriginAxisLock = exports.applySelectedOutlineDragAxisLock = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const player_1 = require("@remotion/player");
39
39
  const react_1 = __importStar(require("react"));
@@ -59,6 +59,7 @@ const selected_outline_drag_2 = require("./selected-outline-drag");
59
59
  Object.defineProperty(exports, "applySelectedOutlineDragAxisLock", { enumerable: true, get: function () { return selected_outline_drag_2.applySelectedOutlineDragAxisLock; } });
60
60
  Object.defineProperty(exports, "applySelectedOutlineTransformOriginAxisLock", { enumerable: true, get: function () { return selected_outline_drag_2.applySelectedOutlineTransformOriginAxisLock; } });
61
61
  Object.defineProperty(exports, "compensateTranslateForTransformOrigin", { enumerable: true, get: function () { return selected_outline_drag_2.compensateTranslateForTransformOrigin; } });
62
+ Object.defineProperty(exports, "getSelectedOutlineActiveSchema", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineActiveSchema; } });
62
63
  Object.defineProperty(exports, "getSelectedOutlineDragChanges", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineDragChanges; } });
63
64
  Object.defineProperty(exports, "getSelectedOutlineDragValues", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineDragValues; } });
64
65
  Object.defineProperty(exports, "getSelectedOutlineKeyboardNudgeDelta", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineKeyboardNudgeDelta; } });
@@ -72,7 +73,10 @@ Object.defineProperty(exports, "getSelectedOutlineScaleDragValues", { enumerable
72
73
  Object.defineProperty(exports, "getSelectedOutlineScaleEdgeInfo", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineScaleEdgeInfo; } });
73
74
  Object.defineProperty(exports, "getSelectedOutlineTransformOriginLockedAxis", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineTransformOriginLockedAxis; } });
74
75
  Object.defineProperty(exports, "isSelectedOutlineDragPastThreshold", { enumerable: true, get: function () { return selected_outline_drag_2.isSelectedOutlineDragPastThreshold; } });
76
+ Object.defineProperty(exports, "selectedOutlineUvSnapThresholdPx", { enumerable: true, get: function () { return selected_outline_drag_2.selectedOutlineUvSnapThresholdPx; } });
75
77
  Object.defineProperty(exports, "selectedOutlineTransformOriginSnapThresholdPx", { enumerable: true, get: function () { return selected_outline_drag_2.selectedOutlineTransformOriginSnapThresholdPx; } });
78
+ Object.defineProperty(exports, "snapSelectedOutlineRotationDeltaDegrees", { enumerable: true, get: function () { return selected_outline_drag_2.snapSelectedOutlineRotationDeltaDegrees; } });
79
+ Object.defineProperty(exports, "snapSelectedOutlineUv", { enumerable: true, get: function () { return selected_outline_drag_2.snapSelectedOutlineUv; } });
76
80
  Object.defineProperty(exports, "snapSelectedOutlineTransformOriginUv", { enumerable: true, get: function () { return selected_outline_drag_2.snapSelectedOutlineTransformOriginUv; } });
77
81
  const selected_outline_measurement_2 = require("./selected-outline-measurement");
78
82
  Object.defineProperty(exports, "getOutlineSelectionInteraction", { enumerable: true, get: function () { return selected_outline_measurement_2.getOutlineSelectionInteraction; } });
@@ -131,8 +135,7 @@ const SelectedOutlineOverlay = ({ scale }) => {
131
135
  sequences,
132
136
  overrideIdsToNodePaths: overrideIdToNodePathMappings,
133
137
  }).map(({ key, keyframeDisplayOffset, nodePathInfo, sequence }) => {
134
- var _a;
135
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
138
+ var _a, _b, _c, _d, _e, _f;
136
139
  if (sequence.refForOutline === null) {
137
140
  throw new Error('Expected sequence to have a ref for outline');
138
141
  }
@@ -140,26 +143,36 @@ const SelectedOutlineOverlay = ({ scale }) => {
140
143
  const containsSelection = sequenceKeysContainingSelection.has(key);
141
144
  const nodePath = nodePathInfo.sequenceSubscriptionKey;
142
145
  const { controls } = sequence;
143
- const fieldSchema = controls === null || controls === void 0 ? void 0 : controls.schema[selected_outline_types_1.translateFieldKey];
144
146
  const nodePropStatuses = remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath);
147
+ const sourceFrame = timelinePosition - keyframeDisplayOffset;
148
+ const dragOverrides = (_a = getDragOverrides(nodePath)) !== null && _a !== void 0 ? _a : {};
149
+ const activeSchema = controls
150
+ ? (0, selected_outline_drag_1.getSelectedOutlineActiveSchema)({
151
+ schema: controls.schema,
152
+ currentRuntimeValueDotNotation: controls.currentRuntimeValueDotNotation,
153
+ dragOverrides,
154
+ propStatus: nodePropStatuses,
155
+ frame: sourceFrame,
156
+ })
157
+ : null;
158
+ const fieldSchema = activeSchema === null || activeSchema === void 0 ? void 0 : activeSchema[selected_outline_types_1.translateFieldKey];
145
159
  const propStatus = nodePropStatuses === null || nodePropStatuses === void 0 ? void 0 : nodePropStatuses[selected_outline_types_1.translateFieldKey];
146
- const scaleFieldSchema = controls === null || controls === void 0 ? void 0 : controls.schema[selected_outline_types_1.scaleFieldKey];
160
+ const scaleFieldSchema = activeSchema === null || activeSchema === void 0 ? void 0 : activeSchema[selected_outline_types_1.scaleFieldKey];
147
161
  const scalePropStatus = nodePropStatuses === null || nodePropStatuses === void 0 ? void 0 : nodePropStatuses[selected_outline_types_1.scaleFieldKey];
148
- const rotationFieldSchema = controls === null || controls === void 0 ? void 0 : controls.schema[selected_outline_types_1.rotateFieldKey];
149
- const rotationPropStatus = (_a = remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath)) === null || _a === void 0 ? void 0 : _a[selected_outline_types_1.rotateFieldKey];
150
- const transformOriginFieldSchema = controls === null || controls === void 0 ? void 0 : controls.schema[selected_outline_types_1.transformOriginFieldKey];
162
+ const rotationFieldSchema = activeSchema === null || activeSchema === void 0 ? void 0 : activeSchema[selected_outline_types_1.rotateFieldKey];
163
+ const rotationPropStatus = nodePropStatuses === null || nodePropStatuses === void 0 ? void 0 : nodePropStatuses[selected_outline_types_1.rotateFieldKey];
164
+ const transformOriginFieldSchema = activeSchema === null || activeSchema === void 0 ? void 0 : activeSchema[selected_outline_types_1.transformOriginFieldKey];
151
165
  const transformOriginPropStatus = nodePropStatuses === null || nodePropStatuses === void 0 ? void 0 : nodePropStatuses[selected_outline_types_1.transformOriginFieldKey];
152
- const rotationSourceFrame = timelinePosition - keyframeDisplayOffset;
153
166
  const transformOriginValueForRotation = (transformOriginFieldSchema === null || transformOriginFieldSchema === void 0 ? void 0 : transformOriginFieldSchema.type) === 'transform-origin' &&
154
167
  ((transformOriginPropStatus === null || transformOriginPropStatus === void 0 ? void 0 : transformOriginPropStatus.status) === 'static' ||
155
168
  (transformOriginPropStatus === null || transformOriginPropStatus === void 0 ? void 0 : transformOriginPropStatus.status) === 'keyframed')
156
- ? String((_c = remotion_1.Internals.getEffectiveVisualModeValue({
169
+ ? String((_b = remotion_1.Internals.getEffectiveVisualModeValue({
157
170
  propStatus: transformOriginPropStatus,
158
- dragOverrideValue: ((_b = getDragOverrides(nodePath)) !== null && _b !== void 0 ? _b : {})[selected_outline_types_1.transformOriginFieldKey],
171
+ dragOverrideValue: dragOverrides[selected_outline_types_1.transformOriginFieldKey],
159
172
  defaultValue: transformOriginFieldSchema.default,
160
- frame: rotationSourceFrame,
173
+ frame: sourceFrame,
161
174
  shouldResortToDefaultValueIfUndefined: true,
162
- })) !== null && _c !== void 0 ? _c : transformOriginFieldSchema.default)
175
+ })) !== null && _b !== void 0 ? _b : transformOriginFieldSchema.default)
163
176
  : '50% 50%';
164
177
  const canDragStatus = (propStatus === null || propStatus === void 0 ? void 0 : propStatus.status) === 'static' ||
165
178
  ((propStatus === null || propStatus === void 0 ? void 0 : propStatus.status) === 'keyframed' &&
@@ -185,7 +198,7 @@ const SelectedOutlineOverlay = ({ scale }) => {
185
198
  const selectedForTransformOrigin = (selectedTransformOriginInfo === null || selectedTransformOriginInfo === void 0 ? void 0 : selectedTransformOriginInfo.sequenceKey) === key;
186
199
  const transformOriginSourceFrame = (selectedTransformOriginInfo === null || selectedTransformOriginInfo === void 0 ? void 0 : selectedTransformOriginInfo.displayFrame) === null ||
187
200
  (selectedTransformOriginInfo === null || selectedTransformOriginInfo === void 0 ? void 0 : selectedTransformOriginInfo.displayFrame) === undefined
188
- ? timelinePosition - keyframeDisplayOffset
201
+ ? sourceFrame
189
202
  : selectedTransformOriginInfo.displayFrame - keyframeDisplayOffset;
190
203
  const canTransformOriginStatus = (transformOriginPropStatus === null || transformOriginPropStatus === void 0 ? void 0 : transformOriginPropStatus.status) === 'static' ||
191
204
  ((transformOriginPropStatus === null || transformOriginPropStatus === void 0 ? void 0 : transformOriginPropStatus.status) === 'keyframed' &&
@@ -238,8 +251,7 @@ const SelectedOutlineOverlay = ({ scale }) => {
238
251
  nodePath,
239
252
  fieldKey: selected_outline_types_1.scaleFieldKey,
240
253
  defaultValue: (() => {
241
- var _a;
242
- const dragOverrideValue = ((_a = getDragOverrides(nodePath)) !== null && _a !== void 0 ? _a : {})[selected_outline_types_1.scaleFieldKey];
254
+ const dragOverrideValue = dragOverrides[selected_outline_types_1.scaleFieldKey];
243
255
  const effectiveValue = remotion_1.Internals.getEffectiveVisualModeValue({
244
256
  propStatus: scalePropStatus,
245
257
  dragOverrideValue,
@@ -273,48 +285,48 @@ const SelectedOutlineOverlay = ({ scale }) => {
273
285
  nodePath,
274
286
  originDefault: transformOriginFieldSchema.default,
275
287
  originPropStatus: transformOriginPropStatus,
276
- originValue: String((_e = remotion_1.Internals.getEffectiveVisualModeValue({
288
+ originValue: String((_c = remotion_1.Internals.getEffectiveVisualModeValue({
277
289
  propStatus: transformOriginPropStatus,
278
- dragOverrideValue: ((_d = getDragOverrides(nodePath)) !== null && _d !== void 0 ? _d : {})[selected_outline_types_1.transformOriginFieldKey],
290
+ dragOverrideValue: dragOverrides[selected_outline_types_1.transformOriginFieldKey],
279
291
  defaultValue: transformOriginFieldSchema.default,
280
292
  frame: transformOriginSourceFrame,
281
293
  shouldResortToDefaultValueIfUndefined: true,
282
- })) !== null && _e !== void 0 ? _e : transformOriginFieldSchema.default),
294
+ })) !== null && _c !== void 0 ? _c : transformOriginFieldSchema.default),
283
295
  rotateValue: String((rotationPropStatus === null || rotationPropStatus === void 0 ? void 0 : rotationPropStatus.status) === 'static' ||
284
296
  (rotationPropStatus === null || rotationPropStatus === void 0 ? void 0 : rotationPropStatus.status) === 'keyframed'
285
- ? ((_g = remotion_1.Internals.getEffectiveVisualModeValue({
297
+ ? ((_d = remotion_1.Internals.getEffectiveVisualModeValue({
286
298
  propStatus: rotationPropStatus,
287
- dragOverrideValue: ((_f = getDragOverrides(nodePath)) !== null && _f !== void 0 ? _f : {})[selected_outline_types_1.rotateFieldKey],
299
+ dragOverrideValue: dragOverrides[selected_outline_types_1.rotateFieldKey],
288
300
  defaultValue: (rotationFieldSchema === null || rotationFieldSchema === void 0 ? void 0 : rotationFieldSchema.type) === 'rotation-css'
289
301
  ? rotationFieldSchema.default
290
302
  : '0deg',
291
303
  frame: transformOriginSourceFrame,
292
304
  shouldResortToDefaultValueIfUndefined: true,
293
- })) !== null && _g !== void 0 ? _g : '0deg')
305
+ })) !== null && _d !== void 0 ? _d : '0deg')
294
306
  : '0deg'),
295
307
  scaleValue: (scalePropStatus === null || scalePropStatus === void 0 ? void 0 : scalePropStatus.status) === 'static' ||
296
308
  (scalePropStatus === null || scalePropStatus === void 0 ? void 0 : scalePropStatus.status) === 'keyframed'
297
- ? String((_j = remotion_1.Internals.getEffectiveVisualModeValue({
309
+ ? String((_e = remotion_1.Internals.getEffectiveVisualModeValue({
298
310
  propStatus: scalePropStatus,
299
- dragOverrideValue: ((_h = getDragOverrides(nodePath)) !== null && _h !== void 0 ? _h : {})[selected_outline_types_1.scaleFieldKey],
311
+ dragOverrideValue: dragOverrides[selected_outline_types_1.scaleFieldKey],
300
312
  defaultValue: (scaleFieldSchema === null || scaleFieldSchema === void 0 ? void 0 : scaleFieldSchema.type) === 'scale'
301
313
  ? scaleFieldSchema.default
302
314
  : 1,
303
315
  frame: transformOriginSourceFrame,
304
316
  shouldResortToDefaultValueIfUndefined: true,
305
- })) !== null && _j !== void 0 ? _j : 1)
317
+ })) !== null && _e !== void 0 ? _e : 1)
306
318
  : '1',
307
319
  schema: controls.schema,
308
320
  sourceFrame: transformOriginSourceFrame,
309
321
  translateDefault: fieldSchema.default,
310
322
  translatePropStatus: propStatus,
311
- translateValue: String((_l = remotion_1.Internals.getEffectiveVisualModeValue({
323
+ translateValue: String((_f = remotion_1.Internals.getEffectiveVisualModeValue({
312
324
  propStatus,
313
- dragOverrideValue: ((_k = getDragOverrides(nodePath)) !== null && _k !== void 0 ? _k : {})[selected_outline_types_1.translateFieldKey],
325
+ dragOverrideValue: dragOverrides[selected_outline_types_1.translateFieldKey],
314
326
  defaultValue: fieldSchema.default,
315
327
  frame: transformOriginSourceFrame,
316
328
  shouldResortToDefaultValueIfUndefined: true,
317
- })) !== null && _l !== void 0 ? _l : fieldSchema.default),
329
+ })) !== null && _f !== void 0 ? _f : fieldSchema.default),
318
330
  }
319
331
  : null,
320
332
  uvHandles: containsSelection
@@ -352,7 +364,9 @@ const SelectedOutlineOverlay = ({ scale }) => {
352
364
  return new Map(outlineTargets.map((target) => [target.key, target]));
353
365
  }, [outlineTargets]);
354
366
  const allDragTargets = (0, react_1.useMemo)(() => {
355
- return outlineTargets.flatMap((target) => target.selected && target.drag !== null ? [target.drag] : []);
367
+ return outlineTargets.flatMap((target) => (target.selected || target.containsSelection) && target.drag !== null
368
+ ? [target.drag]
369
+ : []);
356
370
  }, [outlineTargets]);
357
371
  const allScaleDragTargets = (0, react_1.useMemo)(() => {
358
372
  return outlineTargets.flatMap((target) => target.selected && target.scaleDrag !== null ? [target.scaleDrag] : []);
@@ -608,6 +622,6 @@ const SelectedOutlineOverlay = ({ scale }) => {
608
622
  if (outlineTargets.length === 0) {
609
623
  return null;
610
624
  }
611
- return (jsx_runtime_1.jsxs("svg", { ref: overlayRef, style: outlineContainer, width: "100%", height: "100%", "aria-hidden": "true", children: [outlines.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineElement_1.SelectedOutlineElement, { allDragTargets: allDragTargets, allRotationDragTargets: allRotationDragTargets, allScaleDragTargets: allScaleDragTargets, dragging: draggingOutline, hovered: hoveredOutlineKey === outline.key, outline: outline, onDraggingChange: onDraggingChange, onHoverChange: setHoveredOutlineKey, onSelect: selectItem, scale: scale, target: targetsByKey.get(outline.key) }, outline.key))), outlines.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineUvControls_1.SelectedOutlineUvHandleConnectionLayer, { outline: outline, target: targetsByKey.get(outline.key) }, `${outline.key}-uv-connection-lines`))), outlines.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineUvControls_1.SelectedOutlineUvHandleCircleLayer, { onDraggingChange: onDraggingChange, outline: outline, target: targetsByKey.get(outline.key) }, `${outline.key}-uv-handles`)))] }));
625
+ return (jsx_runtime_1.jsxs("svg", { ref: overlayRef, style: outlineContainer, width: "100%", height: "100%", "aria-hidden": "true", children: [outlines.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineElement_1.SelectedOutlineElement, { allDragTargets: allDragTargets, allRotationDragTargets: allRotationDragTargets, allScaleDragTargets: allScaleDragTargets, dragging: draggingOutline, hovered: hoveredOutlineKey === outline.key, outline: outline, onDraggingChange: onDraggingChange, onHoverChange: setHoveredOutlineKey, onSelect: selectItem, scale: scale, target: targetsByKey.get(outline.key) }, outline.key))), outlines.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineUvControls_1.SelectedOutlineUvHandleConnectionLayer, { outline: outline, target: targetsByKey.get(outline.key) }, `${outline.key}-uv-connection-lines`))), outlines.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineUvControls_1.SelectedOutlineUvHandleCircleLayer, { onDraggingChange: onDraggingChange, onSelect: selectItem, outline: outline, target: targetsByKey.get(outline.key) }, `${outline.key}-uv-handles`)))] }));
612
626
  };
613
627
  exports.SelectedOutlineOverlay = SelectedOutlineOverlay;
@@ -1,8 +1,16 @@
1
1
  import React from 'react';
2
+ import type { SequenceNodePathInfo } from '../helpers/get-timeline-sequence-sort-key';
2
3
  import type { SelectedOutline } from './selected-outline-geometry';
3
4
  import { type SelectedOutlineUvHandle } from './selected-outline-uv';
5
+ import type { TimelineSelection, TimelineSelectionInteraction } from './Timeline/TimelineSelection';
6
+ export declare const getSelectedOutlineUvHandleTimelineSelection: ({ effectIndex, fieldKey, nodePathInfo, }: {
7
+ readonly effectIndex: number;
8
+ readonly fieldKey: string;
9
+ readonly nodePathInfo: SequenceNodePathInfo;
10
+ }) => TimelineSelection;
4
11
  type UvTarget = {
5
12
  readonly containsSelection: boolean;
13
+ readonly nodePathInfo: SequenceNodePathInfo;
6
14
  readonly uvHandles: readonly SelectedOutlineUvHandle[];
7
15
  };
8
16
  export declare const SelectedOutlineUvHandleConnectionLayer: React.FC<{
@@ -11,6 +19,7 @@ export declare const SelectedOutlineUvHandleConnectionLayer: React.FC<{
11
19
  }>;
12
20
  export declare const SelectedOutlineUvHandleCircleLayer: React.FC<{
13
21
  readonly onDraggingChange: (dragging: boolean) => void;
22
+ readonly onSelect: (item: TimelineSelection, interaction?: TimelineSelectionInteraction) => void;
14
23
  readonly outline: SelectedOutline;
15
24
  readonly target: UvTarget | undefined;
16
25
  }>;