@remotion/studio 4.0.478 → 4.0.479

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 (171) hide show
  1. package/dist/components/AssetSelector.js +8 -14
  2. package/dist/components/Button.d.ts +1 -0
  3. package/dist/components/Button.js +8 -5
  4. package/dist/components/CompactExplanation.d.ts +12 -0
  5. package/dist/components/CompactExplanation.js +52 -0
  6. package/dist/components/CompositionSelector.js +2 -4
  7. package/dist/components/CurrentAsset.d.ts +3 -1
  8. package/dist/components/CurrentAsset.js +42 -34
  9. package/dist/components/CurrentComposition.d.ts +1 -1
  10. package/dist/components/CurrentComposition.js +38 -31
  11. package/dist/components/DefaultPropsEditor.d.ts +12 -2
  12. package/dist/components/DefaultPropsEditor.js +2 -2
  13. package/dist/components/EffectPickerModal.d.ts +5 -0
  14. package/dist/components/EffectPickerModal.js +179 -0
  15. package/dist/components/InspectorInfoHeader.d.ts +11 -0
  16. package/dist/components/InspectorInfoHeader.js +55 -0
  17. package/dist/components/InspectorPanel/DefaultInspector.d.ts +8 -0
  18. package/dist/components/InspectorPanel/DefaultInspector.js +93 -0
  19. package/dist/components/InspectorPanel/EasingInspector.d.ts +5 -0
  20. package/dist/components/InspectorPanel/EasingInspector.js +41 -0
  21. package/dist/components/InspectorPanel/GuideInspector.d.ts +7 -0
  22. package/dist/components/InspectorPanel/GuideInspector.js +55 -0
  23. package/dist/components/InspectorPanel/KeyframeInspector.d.ts +7 -0
  24. package/dist/components/InspectorPanel/KeyframeInspector.js +109 -0
  25. package/dist/components/InspectorPanel/SelectedInspector.d.ts +5 -0
  26. package/dist/components/InspectorPanel/SelectedInspector.js +26 -0
  27. package/dist/components/InspectorPanel/SequenceSelectionInspector.d.ts +5 -0
  28. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +116 -0
  29. package/dist/components/InspectorPanel/common.d.ts +15 -0
  30. package/dist/components/InspectorPanel/common.js +18 -0
  31. package/dist/components/InspectorPanel/inspector-selection.d.ts +10 -0
  32. package/dist/components/InspectorPanel/inspector-selection.js +34 -0
  33. package/dist/components/InspectorPanel/styles.d.ts +27 -0
  34. package/dist/components/InspectorPanel/styles.js +178 -0
  35. package/dist/components/InspectorPanel/use-track-for-selection.d.ts +2 -0
  36. package/dist/components/InspectorPanel/use-track-for-selection.js +22 -0
  37. package/dist/components/InspectorPanel.d.ts +8 -0
  38. package/dist/components/InspectorPanel.js +26 -0
  39. package/dist/components/InspectorPanelLayout.d.ts +1 -0
  40. package/dist/components/InspectorPanelLayout.js +4 -0
  41. package/dist/components/InspectorSequenceSection.d.ts +16 -0
  42. package/dist/components/InspectorSequenceSection.js +147 -0
  43. package/dist/components/InspectorSourceLocation.d.ts +7 -0
  44. package/dist/components/InspectorSourceLocation.js +71 -0
  45. package/dist/components/Modals.js +3 -3
  46. package/dist/components/NewComposition/InputDragger.js +1 -1
  47. package/dist/components/NewComposition/RemInput.d.ts +1 -0
  48. package/dist/components/NewComposition/RemInput.js +8 -2
  49. package/dist/components/NewComposition/RemTextarea.d.ts +1 -0
  50. package/dist/components/NewComposition/RemTextarea.js +8 -2
  51. package/dist/components/NewComposition/ValidationMessage.d.ts +3 -0
  52. package/dist/components/NewComposition/ValidationMessage.js +16 -5
  53. package/dist/components/OptionsPanel.d.ts +1 -1
  54. package/dist/components/OptionsPanel.js +8 -17
  55. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +2 -7
  56. package/dist/components/QuickSwitcher/QuickSwitcherResult.js +3 -10
  57. package/dist/components/QuickSwitcher/shared.d.ts +4 -0
  58. package/dist/components/QuickSwitcher/shared.js +24 -0
  59. package/dist/components/RenderModal/DataEditor.d.ts +29 -2
  60. package/dist/components/RenderModal/DataEditor.js +107 -56
  61. package/dist/components/RenderModal/RenderModalJSONPropsEditor.d.ts +1 -0
  62. package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +25 -7
  63. package/dist/components/RenderModal/SchemaEditor/Fieldset.d.ts +2 -1
  64. package/dist/components/RenderModal/SchemaEditor/Fieldset.js +10 -5
  65. package/dist/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +4 -0
  66. package/dist/components/RenderModal/SchemaEditor/SchemaEditor.js +27 -4
  67. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.d.ts +12 -4
  68. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +23 -9
  69. package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +3 -3
  70. package/dist/components/RenderModal/SchemaEditor/SchemaSeparationLine.js +8 -1
  71. package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
  72. package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
  73. package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +1 -1
  74. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
  75. package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.d.ts +1 -0
  76. package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.js +23 -6
  77. package/dist/components/RenderModal/SchemaEditor/ZodFieldValidation.js +2 -2
  78. package/dist/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +2 -1
  79. package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
  80. package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +9 -11
  81. package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +1 -1
  82. package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
  83. package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
  84. package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +1 -1
  85. package/dist/components/RenderModal/WarningIndicatorButton.d.ts +1 -0
  86. package/dist/components/RenderModal/WarningIndicatorButton.js +17 -4
  87. package/dist/components/RenderModal/get-render-modal-warnings.d.ts +2 -1
  88. package/dist/components/RenderModal/get-render-modal-warnings.js +6 -3
  89. package/dist/components/RendersTab.js +1 -1
  90. package/dist/components/SegmentedControl.d.ts +3 -0
  91. package/dist/components/SegmentedControl.js +11 -5
  92. package/dist/components/SelectedOutlineElement.js +57 -24
  93. package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
  94. package/dist/components/SelectedOutlineOverlay.js +41 -29
  95. package/dist/components/SelectedOutlineUvControls.d.ts +9 -0
  96. package/dist/components/SelectedOutlineUvControls.js +64 -10
  97. package/dist/components/Tabs/index.js +4 -4
  98. package/dist/components/Timeline/EasingEditorModal.d.ts +5 -4
  99. package/dist/components/Timeline/EasingEditorModal.js +597 -124
  100. package/dist/components/Timeline/KeyframeSettingsModal.d.ts +2 -2
  101. package/dist/components/Timeline/SubscribeToNodePaths.d.ts +2 -2
  102. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +15 -3
  103. package/dist/components/Timeline/TimelineClipboardKeybindings.js +85 -1
  104. package/dist/components/Timeline/TimelineDeleteKeybindings.js +10 -3
  105. package/dist/components/Timeline/TimelineEffectItem.d.ts +2 -2
  106. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +8 -0
  107. package/dist/components/Timeline/TimelineEffectPropItem.js +24 -20
  108. package/dist/components/Timeline/TimelineExpandedRow.d.ts +5 -2
  109. package/dist/components/Timeline/TimelineExpandedRow.js +4 -4
  110. package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -1
  111. package/dist/components/Timeline/TimelineExpandedSection.js +5 -19
  112. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +8 -2
  113. package/dist/components/Timeline/TimelineKeyframeControls.js +24 -3
  114. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +2 -47
  115. package/dist/components/Timeline/TimelineKeyframedValue.d.ts +1 -1
  116. package/dist/components/Timeline/TimelineKeyframedValue.js +8 -10
  117. package/dist/components/Timeline/TimelineNumberField.js +5 -11
  118. package/dist/components/Timeline/TimelineRotationField.js +5 -6
  119. package/dist/components/Timeline/TimelineScaleField.js +4 -8
  120. package/dist/components/Timeline/TimelineSelection.d.ts +6 -0
  121. package/dist/components/Timeline/TimelineSelection.js +109 -14
  122. package/dist/components/Timeline/TimelineSequence.js +19 -3
  123. package/dist/components/Timeline/TimelineSequenceItem.js +12 -67
  124. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +12 -2
  125. package/dist/components/Timeline/TimelineSequencePropItem.js +56 -52
  126. package/dist/components/Timeline/TimelineTransformOriginField.js +4 -5
  127. package/dist/components/Timeline/TimelineTranslateField.js +4 -5
  128. package/dist/components/Timeline/TimelineUvCoordinateField.js +4 -4
  129. package/dist/components/Timeline/call-add-keyframe.d.ts +4 -4
  130. package/dist/components/Timeline/call-delete-keyframe.d.ts +4 -4
  131. package/dist/components/Timeline/call-move-keyframe.d.ts +2 -2
  132. package/dist/components/Timeline/call-update-keyframe-settings.d.ts +3 -3
  133. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +2 -1
  134. package/dist/components/Timeline/delete-selected-timeline-item.js +27 -1
  135. package/dist/components/Timeline/parse-keyframe-field-from-node-path.js +2 -2
  136. package/dist/components/Timeline/reset-selected-timeline-props.d.ts +3 -3
  137. package/dist/components/Timeline/reset-selected-timeline-props.js +19 -5
  138. package/dist/components/Timeline/save-effect-prop.d.ts +2 -2
  139. package/dist/components/Timeline/save-sequence-prop.d.ts +2 -2
  140. package/dist/components/Timeline/sequence-props-subscription-store.d.ts +3 -3
  141. package/dist/components/Timeline/timeline-field-display-utils.d.ts +5 -0
  142. package/dist/components/Timeline/timeline-field-display-utils.js +244 -0
  143. package/dist/components/Timeline/update-selected-easing.d.ts +47 -4
  144. package/dist/components/Timeline/update-selected-easing.js +40 -9
  145. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +13 -0
  146. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +73 -0
  147. package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -3
  148. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +11 -0
  149. package/dist/components/Timeline/use-timeline-expanded-tree.js +33 -0
  150. package/dist/components/VisualControls/VisualControlsContent.d.ts +1 -1
  151. package/dist/components/VisualControls/VisualControlsContent.js +4 -5
  152. package/dist/components/effect-drag-and-drop.d.ts +10 -0
  153. package/dist/components/effect-drag-and-drop.js +17 -8
  154. package/dist/components/effect-picker-search.d.ts +5 -0
  155. package/dist/components/effect-picker-search.js +77 -0
  156. package/dist/components/selected-outline-drag.d.ts +21 -2
  157. package/dist/components/selected-outline-drag.js +31 -6
  158. package/dist/components/selected-outline-types.d.ts +7 -7
  159. package/dist/components/selected-outline-uv.d.ts +4 -3
  160. package/dist/components/selected-outline-uv.js +6 -2
  161. package/dist/esm/{chunk-hrw9799x.js → chunk-fge2mq5p.js} +16535 -13311
  162. package/dist/esm/internals.mjs +16535 -13311
  163. package/dist/esm/previewEntry.mjs +17141 -13917
  164. package/dist/esm/renderEntry.mjs +1 -1
  165. package/dist/helpers/render-codec-label.d.ts +2 -0
  166. package/dist/helpers/render-codec-label.js +49 -0
  167. package/dist/helpers/timeline-layout.d.ts +4 -4
  168. package/dist/helpers/use-media-metadata.d.ts +8 -2
  169. package/dist/helpers/use-media-metadata.js +17 -4
  170. package/dist/state/modals.d.ts +9 -4
  171. package/package.json +12 -12
@@ -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
  };
@@ -303,7 +303,9 @@ const SelectedOutlineTransformOriginHandle = ({ outline, onDraggingChange, targe
303
303
  position === null) {
304
304
  return null;
305
305
  }
306
- return (jsx_runtime_1.jsxs("g", { pointerEvents: "all", cursor: "crosshair", onPointerDown: onPointerDown, "aria-hidden": "true", children: [
306
+ return (jsx_runtime_1.jsxs("g", { pointerEvents: "all", cursor: "crosshair", onPointerDown: onPointerDown, "aria-hidden": "true", style: {
307
+ filter: 'drop-shadow(0 0 1px rgba(255, 255, 255, 0.2))',
308
+ }, children: [
307
309
  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
310
  ] }));
309
311
  };
@@ -715,11 +717,14 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
715
717
  return;
716
718
  }
717
719
  const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
718
- const shouldUpdateSelection = !selected || interaction.shiftKey || interaction.toggleKey;
720
+ const shouldUpdateSelection = !selected || interaction.toggleKey;
719
721
  if (shouldUpdateSelection && target !== undefined) {
720
- onSelect(target.selection, interaction);
722
+ onSelect(target.selection, {
723
+ shiftKey: false,
724
+ toggleKey: interaction.toggleKey,
725
+ });
721
726
  }
722
- if (interaction.shiftKey || interaction.toggleKey) {
727
+ if (interaction.toggleKey) {
723
728
  return;
724
729
  }
725
730
  const startPointer = { x: event.clientX, y: event.clientY };
@@ -739,8 +744,38 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
739
744
  y: event.clientY,
740
745
  });
741
746
  let accumulatedDelta = 0;
747
+ let rotationLocked = event.shiftKey;
742
748
  let lastValues = new Map();
743
749
  let dragStarted = false;
750
+ const updateRotationDragOverrides = () => {
751
+ const rotationDeltaDegrees = rotationLocked
752
+ ? (0, selected_outline_drag_1.snapSelectedOutlineRotationDeltaDegrees)({
753
+ dragStates,
754
+ rotationDeltaDegrees: accumulatedDelta,
755
+ })
756
+ : accumulatedDelta;
757
+ lastValues = (0, selected_outline_drag_1.getSelectedOutlineRotationDragValues)({
758
+ dragStates,
759
+ rotationDeltaDegrees,
760
+ });
761
+ (0, ForceSpecificCursor_1.forceSpecificCursor)((0, selected_outline_measurement_1.getRotationCursor)(cornerInfo.cursorDegrees + rotationDeltaDegrees));
762
+ for (const dragState of dragStates) {
763
+ const value = lastValues.get(dragState.key);
764
+ if (value === undefined) {
765
+ throw new Error('Expected rotation drag value to be available');
766
+ }
767
+ if (dragState.target.propStatus.status === 'keyframed') {
768
+ setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
769
+ status: dragState.target.propStatus,
770
+ frame: dragState.sourceFrame,
771
+ value,
772
+ }));
773
+ }
774
+ else {
775
+ setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
776
+ }
777
+ }
778
+ };
744
779
  const onPointerMove = (moveEvent) => {
745
780
  moveEvent.preventDefault();
746
781
  const screenDeltaX = moveEvent.clientX - startPointer.x;
@@ -764,32 +799,28 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
764
799
  to: nextAngle,
765
800
  });
766
801
  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
- }
802
+ rotationLocked = moveEvent.shiftKey;
803
+ updateRotationDragOverrides();
804
+ };
805
+ const onKeyChange = (keyEvent) => {
806
+ if (keyEvent.key !== 'Shift') {
807
+ return;
808
+ }
809
+ const nextRotationLocked = keyEvent.type === 'keydown';
810
+ if (nextRotationLocked === rotationLocked) {
811
+ return;
812
+ }
813
+ rotationLocked = nextRotationLocked;
814
+ if (dragStarted) {
815
+ updateRotationDragOverrides();
787
816
  }
788
817
  };
789
818
  const onPointerUp = () => {
790
819
  window.removeEventListener('pointermove', onPointerMove);
791
820
  window.removeEventListener('pointerup', onPointerUp);
792
821
  window.removeEventListener('pointercancel', onPointerUp);
822
+ window.removeEventListener('keydown', onKeyChange);
823
+ window.removeEventListener('keyup', onKeyChange);
793
824
  if (dragStarted) {
794
825
  (0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
795
826
  onDraggingChange(false);
@@ -845,6 +876,8 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
845
876
  window.addEventListener('pointermove', onPointerMove);
846
877
  window.addEventListener('pointerup', onPointerUp);
847
878
  window.addEventListener('pointercancel', onPointerUp);
879
+ window.addEventListener('keydown', onKeyChange);
880
+ window.addEventListener('keyup', onKeyChange);
848
881
  }, [
849
882
  allRotationDragTargets,
850
883
  clearDragOverrides,
@@ -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
@@ -608,6 +620,6 @@ const SelectedOutlineOverlay = ({ scale }) => {
608
620
  if (outlineTargets.length === 0) {
609
621
  return null;
610
622
  }
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`)))] }));
623
+ 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
624
  };
613
625
  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
  }>;
@@ -33,11 +33,14 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SelectedOutlineUvHandleCircleLayer = exports.SelectedOutlineUvHandleConnectionLayer = void 0;
36
+ exports.SelectedOutlineUvHandleCircleLayer = exports.SelectedOutlineUvHandleConnectionLayer = exports.getSelectedOutlineUvHandleTimelineSelection = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
39
  const remotion_1 = require("remotion");
40
40
  const colors_1 = require("../helpers/colors");
41
+ const ForceSpecificCursor_1 = require("./ForceSpecificCursor");
42
+ const selected_outline_drag_1 = require("./selected-outline-drag");
43
+ const selected_outline_measurement_1 = require("./selected-outline-measurement");
41
44
  const selected_outline_uv_1 = require("./selected-outline-uv");
42
45
  const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
43
46
  const save_effect_prop_1 = require("./Timeline/save-effect-prop");
@@ -47,11 +50,28 @@ const getSvgPointFromPointerEvent = ({ event, rect, }) => {
47
50
  y: event.clientY - rect.top,
48
51
  };
49
52
  };
53
+ const uvHandleRadius = 4.25;
54
+ const selectedUvHandleRadius = 6.8;
55
+ const uvHandleStyle = {
56
+ filter: 'drop-shadow(0 1px 2px rgba(0, 0, 0, 0.28))',
57
+ };
58
+ const getSelectedOutlineUvHandleTimelineSelection = ({ effectIndex, fieldKey, nodePathInfo, }) => {
59
+ return {
60
+ type: 'sequence-effect-prop',
61
+ nodePathInfo: {
62
+ ...nodePathInfo,
63
+ auxiliaryKeys: ['effects', String(effectIndex), fieldKey],
64
+ },
65
+ i: effectIndex,
66
+ key: fieldKey,
67
+ };
68
+ };
69
+ exports.getSelectedOutlineUvHandleTimelineSelection = getSelectedOutlineUvHandleTimelineSelection;
50
70
  const SelectedUvHandleConnectionLines = ({ handles, outline }) => {
51
71
  const lines = (0, react_1.useMemo)(() => (0, selected_outline_uv_1.getUvHandleConnectionLines)({ handles, points: outline.points }), [handles, outline.points]);
52
72
  return (jsx_runtime_1.jsx(jsx_runtime_1.Fragment, { children: lines.map((line) => (jsx_runtime_1.jsx("line", { x1: line.from.x, y1: line.from.y, x2: line.to.x, y2: line.to.y, stroke: colors_1.BLUE, strokeWidth: 2, vectorEffect: "non-scaling-stroke", pointerEvents: "none" }, line.key))) }));
53
73
  };
54
- const SelectedUvHandleCircle = ({ handle, onDraggingChange, outline }) => {
74
+ const SelectedUvHandleCircle = ({ handle, nodePathInfo, onDraggingChange, onSelect, outline }) => {
55
75
  const { setEffectDragOverrides, clearEffectDragOverrides, setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
56
76
  const position = (0, react_1.useMemo)(() => (0, selected_outline_uv_1.getUvHandlePosition)(outline.points, handle.value), [handle.value, outline.points]);
57
77
  const onPointerDown = react_1.default.useCallback((event) => {
@@ -60,13 +80,24 @@ const SelectedUvHandleCircle = ({ handle, onDraggingChange, outline }) => {
60
80
  }
61
81
  event.preventDefault();
62
82
  event.stopPropagation();
83
+ const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
84
+ onSelect((0, exports.getSelectedOutlineUvHandleTimelineSelection)({
85
+ effectIndex: handle.effectIndex,
86
+ fieldKey: handle.fieldKey,
87
+ nodePathInfo,
88
+ }), interaction);
89
+ if (interaction.shiftKey || interaction.toggleKey) {
90
+ return;
91
+ }
63
92
  const svg = event.currentTarget.ownerSVGElement;
64
93
  if (svg === null) {
65
94
  return;
66
95
  }
67
96
  const svgRect = svg.getBoundingClientRect();
97
+ const startPointerX = event.clientX;
98
+ const startPointerY = event.clientY;
68
99
  let lastValue = null;
69
- onDraggingChange(true);
100
+ let dragging = false;
70
101
  const defaultValue = handle.fieldDefault !== undefined
71
102
  ? JSON.stringify(handle.fieldDefault)
72
103
  : null;
@@ -75,7 +106,13 @@ const SelectedUvHandleCircle = ({ handle, onDraggingChange, outline }) => {
75
106
  event: pointerEvent,
76
107
  rect: svgRect,
77
108
  });
78
- const nextValue = (0, selected_outline_uv_1.roundUvCoordinate)((0, selected_outline_uv_1.constrainUv)((0, selected_outline_uv_1.getUvCoordinateForPoint)(outline.points, point), handle.fieldSchema), handle.fieldSchema);
109
+ const rawUv = (0, selected_outline_uv_1.getUvCoordinateForPoint)(outline.points, point);
110
+ const snappedUv = (0, selected_outline_drag_1.snapSelectedOutlineUv)({
111
+ point,
112
+ points: outline.points,
113
+ uv: rawUv,
114
+ });
115
+ const nextValue = (0, selected_outline_uv_1.roundUvCoordinate)((0, selected_outline_uv_1.constrainUv)(snappedUv, handle.fieldSchema), handle.fieldSchema);
79
116
  lastValue = nextValue;
80
117
  setEffectDragOverrides(handle.nodePath, handle.effectIndex, handle.fieldKey, handle.propStatus.status === 'keyframed'
81
118
  ? remotion_1.Internals.makeKeyframedDragOverride({
@@ -85,16 +122,31 @@ const SelectedUvHandleCircle = ({ handle, onDraggingChange, outline }) => {
85
122
  })
86
123
  : remotion_1.Internals.makeStaticDragOverride(nextValue));
87
124
  };
88
- updateFromPointerEvent(event);
125
+ const updateDragFromPointerEvent = (pointerEvent) => {
126
+ if (!dragging) {
127
+ const deltaX = pointerEvent.clientX - startPointerX;
128
+ const deltaY = pointerEvent.clientY - startPointerY;
129
+ if (!(0, selected_outline_drag_1.isSelectedOutlineDragPastThreshold)({ deltaX, deltaY })) {
130
+ return;
131
+ }
132
+ dragging = true;
133
+ (0, ForceSpecificCursor_1.forceSpecificCursor)('default');
134
+ onDraggingChange(true);
135
+ }
136
+ updateFromPointerEvent(pointerEvent);
137
+ };
89
138
  const onPointerMove = (moveEvent) => {
90
139
  moveEvent.preventDefault();
91
- updateFromPointerEvent(moveEvent);
140
+ updateDragFromPointerEvent(moveEvent);
92
141
  };
93
142
  const onPointerUp = () => {
94
143
  window.removeEventListener('pointermove', onPointerMove);
95
144
  window.removeEventListener('pointerup', onPointerUp);
96
145
  window.removeEventListener('pointercancel', onPointerUp);
97
- onDraggingChange(false);
146
+ if (dragging) {
147
+ (0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
148
+ onDraggingChange(false);
149
+ }
98
150
  const stringifiedValue = lastValue === null ? null : JSON.stringify(lastValue);
99
151
  const shouldSave = (() => {
100
152
  if (lastValue === null) {
@@ -144,12 +196,14 @@ const SelectedUvHandleCircle = ({ handle, onDraggingChange, outline }) => {
144
196
  }, [
145
197
  clearEffectDragOverrides,
146
198
  handle,
199
+ nodePathInfo,
147
200
  onDraggingChange,
201
+ onSelect,
148
202
  outline.points,
149
203
  setPropStatuses,
150
204
  setEffectDragOverrides,
151
205
  ]);
152
- return (jsx_runtime_1.jsx("circle", { cx: position.x, cy: position.y, r: 6, fill: "white", stroke: colors_1.BLUE, strokeWidth: 2, vectorEffect: "non-scaling-stroke", pointerEvents: "all", cursor: "default", onPointerDown: onPointerDown }));
206
+ return (jsx_runtime_1.jsx("circle", { cx: position.x, cy: position.y, r: handle.isSelected ? selectedUvHandleRadius : uvHandleRadius, fill: "white", stroke: colors_1.BLUE, strokeWidth: 2, style: uvHandleStyle, vectorEffect: "non-scaling-stroke", pointerEvents: "all", cursor: "default", onPointerDown: onPointerDown }));
153
207
  };
154
208
  const SelectedOutlineUvHandleConnectionLayer = ({ outline, target }) => {
155
209
  if (!(target === null || target === void 0 ? void 0 : target.containsSelection) || target.uvHandles.length === 0) {
@@ -158,10 +212,10 @@ const SelectedOutlineUvHandleConnectionLayer = ({ outline, target }) => {
158
212
  return (jsx_runtime_1.jsx(SelectedUvHandleConnectionLines, { handles: target.uvHandles, outline: outline }));
159
213
  };
160
214
  exports.SelectedOutlineUvHandleConnectionLayer = SelectedOutlineUvHandleConnectionLayer;
161
- const SelectedOutlineUvHandleCircleLayer = ({ onDraggingChange, outline, target }) => {
215
+ const SelectedOutlineUvHandleCircleLayer = ({ onDraggingChange, onSelect, outline, target }) => {
162
216
  if (!(target === null || target === void 0 ? void 0 : target.containsSelection) || target.uvHandles.length === 0) {
163
217
  return null;
164
218
  }
165
- return (jsx_runtime_1.jsx(jsx_runtime_1.Fragment, { children: target.uvHandles.map((handle) => (jsx_runtime_1.jsx(SelectedUvHandleCircle, { handle: handle, onDraggingChange: onDraggingChange, outline: outline }, `${handle.effectIndex}-${handle.fieldKey}`))) }));
219
+ return (jsx_runtime_1.jsx(jsx_runtime_1.Fragment, { children: target.uvHandles.map((handle) => (jsx_runtime_1.jsx(SelectedUvHandleCircle, { handle: handle, nodePathInfo: target.nodePathInfo, onDraggingChange: onDraggingChange, onSelect: onSelect, outline: outline }, `${handle.effectIndex}-${handle.fieldKey}`))) }));
166
220
  };
167
221
  exports.SelectedOutlineUvHandleCircleLayer = SelectedOutlineUvHandleCircleLayer;
@@ -22,12 +22,12 @@ exports.Tabs = Tabs;
22
22
  const selectorButton = {
23
23
  border: 'none',
24
24
  flex: 1,
25
- padding: 4,
26
- height: 40,
27
- paddingLeft: 16,
25
+ padding: 3,
26
+ height: 34,
27
+ paddingLeft: 12,
28
28
  display: 'flex',
29
29
  flexDirection: 'row',
30
- fontSize: 14,
30
+ fontSize: 13,
31
31
  color: 'inherit',
32
32
  alignItems: 'center',
33
33
  cursor: 'default',
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
+ import type { SegmentedControlItem } from '../SegmentedControl';
2
3
  import type { TimelineSelection } from './TimelineSelection';
3
4
  import type { TimelineEasingValue } from './update-selected-easing';
4
- export type EasingEditorModalState = {
5
- type: 'easing-editor';
5
+ export type EasingEditorState = {
6
6
  initialEasing: TimelineEasingValue;
7
7
  selections: TimelineSelection[];
8
8
  };
9
- export declare const EasingEditorModal: React.FC<{
10
- readonly state: EasingEditorModalState;
9
+ export declare const EasingEditor: React.FC<{
10
+ readonly state: EasingEditorState;
11
+ readonly renderHeader?: (modeItems: SegmentedControlItem[]) => React.ReactNode;
11
12
  }>;