@remotion/studio 4.0.506 → 4.0.508
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.
- package/dist/FastRefreshProvider.js +13 -9
- package/dist/api/copy-render-output-to-asset.d.ts +4 -0
- package/dist/api/copy-render-output-to-asset.js +11 -0
- package/dist/components/AssetSelector.js +19 -4
- package/dist/components/AssetSelectorItem.js +2 -2
- package/dist/components/CodingAgentIcon.d.ts +6 -0
- package/dist/components/CodingAgentIcon.js +12 -0
- package/dist/components/ConfigureDefaultEditorModal.d.ts +1 -3
- package/dist/components/ConfigureDefaultEditorModal.js +67 -77
- package/dist/components/ConfigureLicenseModal.d.ts +1 -4
- package/dist/components/ConfigureLicenseModal.js +89 -81
- package/dist/components/ContextMenu.d.ts +1 -0
- package/dist/components/ContextMenu.js +42 -13
- package/dist/components/EditorContent.js +4 -3
- package/dist/components/EditorContexts.js +6 -5
- package/dist/components/ExpandedTracksProvider.js +10 -53
- package/dist/components/InlineAction.d.ts +2 -1
- package/dist/components/InlineAction.js +3 -3
- package/dist/components/InspectorLocationCopy.js +8 -8
- package/dist/components/InspectorOpenInEditor.d.ts +2 -0
- package/dist/components/InspectorOpenInEditor.js +81 -50
- package/dist/components/InspectorPanel/AlignmentControls.js +2 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +3 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -0
- package/dist/components/InspectorPanel/SequenceInspectorHeader.js +22 -4
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -1
- package/dist/components/InspectorPanel/styles.js +1 -1
- package/dist/components/InspectorSequenceSection.js +36 -4
- package/dist/components/Menu/MenuSectionHeader.d.ts +4 -0
- package/dist/components/Menu/MenuSectionHeader.js +20 -0
- package/dist/components/Menu/SubMenu.js +13 -2
- package/dist/components/Menu/menu-tree-context.d.ts +3 -0
- package/dist/components/Menu/menu-tree-context.js +13 -0
- package/dist/components/MenuBuildIndicator.js +1 -1
- package/dist/components/NewComposition/ComboBox.d.ts +6 -1
- package/dist/components/NewComposition/MenuContent.js +27 -19
- package/dist/components/NewComposition/menu-typeahead.js +2 -2
- package/dist/components/PlayPause.d.ts +1 -1
- package/dist/components/PlayPause.js +61 -12
- package/dist/components/Preview.js +29 -4
- package/dist/components/RenderButton.js +16 -12
- package/dist/components/RenderModal/GuiRenderStatus.js +23 -6
- package/dist/components/RenderModal/InfoBubble.d.ts +1 -0
- package/dist/components/RenderModal/InfoBubble.js +6 -4
- package/dist/components/RenderModal/InfoTooltip.d.ts +1 -0
- package/dist/components/RenderModal/InfoTooltip.js +12 -12
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.d.ts +5 -0
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +16 -3
- package/dist/components/RenderModal/SchemaEditor/ZodArrayEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodBooleanEditor.d.ts +2 -0
- package/dist/components/RenderModal/SchemaEditor/ZodBooleanEditor.js +3 -2
- package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +2 -1
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +3 -3
- package/dist/components/RenderModal/SchemaEditor/ZodMatrixEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +8 -3
- package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodSwitch.js +2 -2
- package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodTupleEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/zod-schema-type.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/zod-schema-type.js +12 -1
- package/dist/components/RenderModal/ServerRenderModal.js +4 -0
- package/dist/components/RenderQueue/RenderQueueItem.js +8 -2
- package/dist/components/RenderQueue/actions.d.ts +4 -2
- package/dist/components/RenderQueue/actions.js +4 -2
- package/dist/components/RenderQueue/index.js +3 -4
- package/dist/components/RenderQueue/use-render-output-file-drag.d.ts +8 -0
- package/dist/components/RenderQueue/use-render-output-file-drag.js +121 -0
- package/dist/components/SegmentedControl.js +0 -1
- package/dist/components/SelectedOutlineCanvasRotation.d.ts +9 -0
- package/dist/components/SelectedOutlineCanvasRotation.js +237 -0
- package/dist/components/SelectedOutlineElement.d.ts +16 -18
- package/dist/components/SelectedOutlineElement.js +144 -931
- package/dist/components/SelectedOutlineKeyboardControls.d.ts +7 -0
- package/dist/components/SelectedOutlineKeyboardControls.js +261 -0
- package/dist/components/SelectedOutlineOverlay.d.ts +7 -14
- package/dist/components/SelectedOutlineOverlay.js +378 -864
- package/dist/components/SelectedOutlinePolygon.d.ts +26 -0
- package/dist/components/SelectedOutlinePolygon.js +360 -0
- package/dist/components/SelectedOutlineRenderer.d.ts +19 -0
- package/dist/components/SelectedOutlineRenderer.js +225 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.d.ts +17 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.js +271 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.d.ts +17 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.js +215 -0
- package/dist/components/SelectedOutlineSnapIndicators.d.ts +9 -0
- package/dist/components/SelectedOutlineSnapIndicators.js +29 -0
- package/dist/components/SelectedOutlineTransformOriginHandle.d.ts +9 -0
- package/dist/components/SelectedOutlineTransformOriginHandle.js +312 -0
- package/dist/components/SelectedOutlineUvControls.d.ts +3 -9
- package/dist/components/SelectedOutlineUvControls.js +57 -12
- package/dist/components/SequencePropsSubscriptionProvider.js +8 -0
- package/dist/components/SettingsContext.d.ts +15 -0
- package/dist/components/SettingsContext.js +116 -0
- package/dist/components/SettingsModal.js +10 -4
- package/dist/components/SettingsModalFooter.d.ts +1 -3
- package/dist/components/SettingsModalFooter.js +4 -6
- package/dist/components/ShowOutlinesProvider.js +2 -3
- package/dist/components/Timeline/EasingEditorModal.js +66 -22
- package/dist/components/Timeline/SequencePropsObserver.js +97 -1
- package/dist/components/Timeline/SubscribeToNodePaths.js +4 -2
- package/dist/components/Timeline/Timeline.js +22 -5
- package/dist/components/Timeline/TimelineDuplicateCount.d.ts +4 -0
- package/dist/components/Timeline/TimelineDuplicateCount.js +28 -0
- package/dist/components/Timeline/TimelineEffectItem.js +1 -4
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +3 -23
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +4 -2
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +11 -1
- package/dist/components/Timeline/TimelineFieldRowContent.js +10 -3
- package/dist/components/Timeline/TimelineRotationField.js +84 -12
- package/dist/components/Timeline/TimelineScaleField.js +58 -4
- package/dist/components/Timeline/TimelineSelection.d.ts +4 -0
- package/dist/components/Timeline/TimelineSelection.js +45 -2
- package/dist/components/Timeline/TimelineSequence.js +28 -25
- package/dist/components/Timeline/TimelineSequenceItem.js +91 -28
- package/dist/components/Timeline/TimelineSequencePropItem.js +5 -2
- package/dist/components/Timeline/TimelineTrack.js +2 -1
- package/dist/components/Timeline/TimelineTransformOriginField.js +78 -4
- package/dist/components/Timeline/TimelineTranslateField.js +55 -15
- package/dist/components/Timeline/Transform3DModeContext.d.ts +1 -0
- package/dist/components/Timeline/Transform3DModeContext.js +5 -0
- package/dist/components/Timeline/delete-selected-timeline-item.js +0 -6
- package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +6 -3
- package/dist/components/Timeline/get-sequence-context-menu-items.js +69 -57
- package/dist/components/Timeline/sequence-props-subscription-store.d.ts +2 -1
- package/dist/components/Timeline/sequence-props-subscription-store.js +5 -2
- package/dist/components/Timeline/timeline-field-display-utils.js +2 -2
- package/dist/components/Timeline/timeline-field-row-layout.d.ts +6 -0
- package/dist/components/Timeline/timeline-field-row-layout.js +16 -1
- package/dist/components/Timeline/timeline-rotation-utils.d.ts +16 -0
- package/dist/components/Timeline/timeline-rotation-utils.js +145 -4
- package/dist/components/Timeline/timeline-translate-utils.d.ts +3 -2
- package/dist/components/Timeline/timeline-translate-utils.js +8 -4
- package/dist/components/Timeline/transform-3d-mode.d.ts +6 -0
- package/dist/components/Timeline/transform-3d-mode.js +36 -0
- package/dist/components/Timeline/transform-origin-utils.d.ts +4 -0
- package/dist/components/Timeline/transform-origin-utils.js +12 -6
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +36 -4
- package/dist/components/Timeline/{use-open-sequence-in-editor.d.ts → use-open-sequence-in-apps.d.ts} +4 -1
- package/dist/components/Timeline/{use-open-sequence-in-editor.js → use-open-sequence-in-apps.js} +21 -5
- package/dist/components/Timeline/use-resolved-stack-react-to-change.d.ts +5 -1
- package/dist/components/Timeline/use-resolved-stack-react-to-change.js +45 -9
- package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -1
- package/dist/components/Timeline/use-sequence-props-subscription.js +7 -2
- package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +4 -0
- package/dist/components/Timeline/use-timeline-expanded-tree.js +45 -1
- package/dist/components/call-api.js +2 -0
- package/dist/components/canvas-rotation-cursor.d.ts +1 -0
- package/dist/components/canvas-rotation-cursor.js +14 -0
- package/dist/components/get-open-in-menu-items.d.ts +17 -0
- package/dist/components/get-open-in-menu-items.js +144 -0
- package/dist/components/selected-outline-drag.d.ts +11 -5
- package/dist/components/selected-outline-drag.js +80 -42
- package/dist/components/selected-outline-measurement.d.ts +7 -2
- package/dist/components/selected-outline-measurement.js +28 -1
- package/dist/components/selected-outline-order.d.ts +12 -0
- package/dist/components/selected-outline-order.js +251 -0
- package/dist/components/selected-outline-types.d.ts +15 -10
- package/dist/components/svg-point-to-client-point.d.ts +2 -0
- package/dist/components/svg-point-to-client-point.js +10 -0
- package/dist/components/use-auto-save-config.d.ts +8 -0
- package/dist/components/use-auto-save-config.js +74 -0
- package/dist/components/use-default-editor-info.d.ts +1 -0
- package/dist/components/use-default-editor-info.js +10 -30
- package/dist/esm/{chunk-jefhcs5z.js → chunk-fgedsvhb.js} +1 -2
- package/dist/esm/{chunk-b49ec3nz.js → chunk-zpn4m49r.js} +12924 -10139
- package/dist/esm/index.mjs +357 -2
- package/dist/esm/internals.mjs +12923 -10138
- package/dist/esm/previewEntry.mjs +12771 -9986
- package/dist/esm/renderEntry.mjs +2 -2
- package/dist/helpers/are-sequence-node-path-infos-equal.d.ts +2 -0
- package/dist/helpers/are-sequence-node-path-infos-equal.js +27 -0
- package/dist/helpers/calculate-timeline.js +3 -3
- package/dist/helpers/client-id.js +8 -1
- package/dist/helpers/format-file-location.d.ts +1 -1
- package/dist/helpers/format-file-location.js +3 -3
- package/dist/helpers/get-box-quads-polyfill-internals.js +10 -2
- package/dist/helpers/migrate-expanded-tracks-for-subscription-key.js +3 -3
- package/dist/helpers/open-in-editor.d.ts +4 -1
- package/dist/helpers/open-in-editor.js +9 -1
- package/dist/helpers/preview-server-events.js +4 -0
- package/dist/helpers/sequence-node-path-mutations.d.ts +4 -0
- package/dist/helpers/sequence-node-path-mutations.js +31 -0
- package/dist/helpers/studio-runtime-config.js +3 -0
- package/dist/helpers/timeline-node-path-key.d.ts +2 -0
- package/dist/helpers/timeline-node-path-key.js +3 -1
- package/dist/helpers/use-asset-drag-events.d.ts +2 -1
- package/dist/helpers/use-asset-drag-events.js +14 -6
- package/dist/helpers/use-menu-structure.js +2 -2
- package/dist/helpers/use-runtime-values.d.ts +1 -3
- package/dist/icons/cube.d.ts +4 -0
- package/dist/icons/cube.js +6 -0
- package/dist/icons/finder.d.ts +4 -0
- package/dist/icons/finder.js +8 -0
- package/dist/icons/terminal.d.ts +6 -0
- package/dist/icons/terminal.js +46 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +8 -0
- package/dist/state/timeline-sequence-hover.d.ts +9 -3
- package/dist/state/timeline-sequence-hover.js +63 -12
- package/dist/state/transform-3d-mode.d.ts +10 -0
- package/dist/state/transform-3d-mode.js +27 -0
- package/dist/state/z-index.js +5 -8
- package/package.json +12 -12
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SelectedOutlineRotationCornerHandle = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
const remotion_1 = require("remotion");
|
|
40
|
+
const colors_1 = require("../helpers/colors");
|
|
41
|
+
const pointer_session_1 = require("../helpers/pointer-session");
|
|
42
|
+
const editor_snapping_1 = require("../state/editor-snapping");
|
|
43
|
+
const ContextMenu_1 = require("./ContextMenu");
|
|
44
|
+
const ForceSpecificCursor_1 = require("./ForceSpecificCursor");
|
|
45
|
+
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
46
|
+
const selected_outline_drag_1 = require("./selected-outline-drag");
|
|
47
|
+
const selected_outline_measurement_1 = require("./selected-outline-measurement");
|
|
48
|
+
const selected_outline_types_1 = require("./selected-outline-types");
|
|
49
|
+
const svg_point_to_client_point_1 = require("./svg-point-to-client-point");
|
|
50
|
+
const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
|
|
51
|
+
const focus_inspector_field_1 = require("./Timeline/focus-inspector-field");
|
|
52
|
+
const imperative_state_1 = require("./Timeline/imperative-state");
|
|
53
|
+
const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
|
|
54
|
+
const SelectedOutlineRotationCornerHandle = ({ getAllRotationDragTargets, corner, dragging, outline, onDraggingChange, onContextMenuOpen, onContextMenuOpenChange, onHoverChange, onSelect, target, }) => {
|
|
55
|
+
var _a, _b, _c;
|
|
56
|
+
const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
57
|
+
const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
58
|
+
const { editorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
|
|
59
|
+
const rotationDrag = (_a = target === null || target === void 0 ? void 0 : target.rotationDrag) !== null && _a !== void 0 ? _a : null;
|
|
60
|
+
const selected = (_b = target === null || target === void 0 ? void 0 : target.selected) !== null && _b !== void 0 ? _b : false;
|
|
61
|
+
const containsSelection = (_c = target === null || target === void 0 ? void 0 : target.containsSelection) !== null && _c !== void 0 ? _c : false;
|
|
62
|
+
const circleRef = (0, react_1.useRef)(null);
|
|
63
|
+
const cornerInfo = (0, react_1.useMemo)(() => (0, selected_outline_measurement_1.getSelectedOutlineRotationCornerInfo)(outline.points, corner), [corner, outline.points]);
|
|
64
|
+
const onPointerDown = react_1.default.useCallback((event) => {
|
|
65
|
+
var _a;
|
|
66
|
+
if (event.button !== 0 || rotationDrag === null) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
event.stopPropagation();
|
|
71
|
+
const svg = event.currentTarget.ownerSVGElement;
|
|
72
|
+
if (svg === null) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
|
|
76
|
+
const shouldUpdateSelection = (!selected && !containsSelection) || interaction.toggleKey;
|
|
77
|
+
if (shouldUpdateSelection && target !== undefined) {
|
|
78
|
+
onSelect(target.selection, {
|
|
79
|
+
shiftKey: false,
|
|
80
|
+
toggleKey: interaction.toggleKey,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (interaction.toggleKey) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const startPointer = { x: event.clientX, y: event.clientY };
|
|
90
|
+
const svgRect = svg.getBoundingClientRect();
|
|
91
|
+
const center = (0, svg_point_to_client_point_1.svgPointToClientPoint)((0, selected_outline_measurement_1.getSelectedOutlineRotationPivot)({
|
|
92
|
+
dimensions: outline.dimensions,
|
|
93
|
+
points: (_a = outline.uncroppedPoints) !== null && _a !== void 0 ? _a : outline.points,
|
|
94
|
+
transformOriginValue: rotationDrag.transformOriginValue,
|
|
95
|
+
}), svgRect);
|
|
96
|
+
const dragStates = (0, selected_outline_drag_1.getSelectedOutlineRotationDragStates)({
|
|
97
|
+
dragTargets: selected ? getAllRotationDragTargets() : [rotationDrag],
|
|
98
|
+
getDragOverrides,
|
|
99
|
+
timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
|
|
100
|
+
});
|
|
101
|
+
let previousAngle = (0, selected_outline_measurement_1.getAngleDegrees)(center, {
|
|
102
|
+
x: event.clientX,
|
|
103
|
+
y: event.clientY,
|
|
104
|
+
});
|
|
105
|
+
let accumulatedDelta = 0;
|
|
106
|
+
let rotationLocked = event.shiftKey;
|
|
107
|
+
let lastValues = new Map();
|
|
108
|
+
let dragStarted = false;
|
|
109
|
+
const updateRotationDragOverrides = () => {
|
|
110
|
+
const rotationDeltaDegrees = rotationLocked && editorSnapping
|
|
111
|
+
? (0, selected_outline_drag_1.snapSelectedOutlineRotationDeltaDegrees)({
|
|
112
|
+
dragStates,
|
|
113
|
+
rotationDeltaDegrees: accumulatedDelta,
|
|
114
|
+
})
|
|
115
|
+
: accumulatedDelta;
|
|
116
|
+
lastValues = (0, selected_outline_drag_1.getSelectedOutlineRotationDragValues)({
|
|
117
|
+
dragStates,
|
|
118
|
+
rotationDeltaDegrees,
|
|
119
|
+
});
|
|
120
|
+
(0, ForceSpecificCursor_1.forceSpecificCursor)((0, selected_outline_measurement_1.getRotationCursor)(cornerInfo.cursorDegrees + rotationDeltaDegrees));
|
|
121
|
+
for (const dragState of dragStates) {
|
|
122
|
+
const value = lastValues.get(dragState.key);
|
|
123
|
+
if (value === undefined) {
|
|
124
|
+
throw new Error('Expected rotation drag value to be available');
|
|
125
|
+
}
|
|
126
|
+
if (dragState.target.propStatus.status === 'keyframed') {
|
|
127
|
+
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
|
|
128
|
+
status: dragState.target.propStatus,
|
|
129
|
+
frame: dragState.sourceFrame,
|
|
130
|
+
value,
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
const onPointerMove = (moveEvent) => {
|
|
139
|
+
moveEvent.preventDefault();
|
|
140
|
+
const screenDeltaX = moveEvent.clientX - startPointer.x;
|
|
141
|
+
const screenDeltaY = moveEvent.clientY - startPointer.y;
|
|
142
|
+
if (!dragStarted) {
|
|
143
|
+
if (!(0, selected_outline_drag_1.isSelectedOutlineDragPastThreshold)({
|
|
144
|
+
deltaX: screenDeltaX,
|
|
145
|
+
deltaY: screenDeltaY,
|
|
146
|
+
})) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
dragStarted = true;
|
|
150
|
+
onDraggingChange(true);
|
|
151
|
+
}
|
|
152
|
+
const nextAngle = (0, selected_outline_measurement_1.getAngleDegrees)(center, {
|
|
153
|
+
x: moveEvent.clientX,
|
|
154
|
+
y: moveEvent.clientY,
|
|
155
|
+
});
|
|
156
|
+
accumulatedDelta += (0, selected_outline_measurement_1.getSelectedOutlineRotationDeltaDegrees)({
|
|
157
|
+
from: previousAngle,
|
|
158
|
+
to: nextAngle,
|
|
159
|
+
});
|
|
160
|
+
previousAngle = nextAngle;
|
|
161
|
+
rotationLocked = moveEvent.shiftKey;
|
|
162
|
+
updateRotationDragOverrides();
|
|
163
|
+
};
|
|
164
|
+
const onKeyChange = (keyEvent) => {
|
|
165
|
+
if (keyEvent.key !== 'Shift') {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const nextRotationLocked = keyEvent.type === 'keydown';
|
|
169
|
+
if (nextRotationLocked === rotationLocked) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
rotationLocked = nextRotationLocked;
|
|
173
|
+
if (dragStarted) {
|
|
174
|
+
updateRotationDragOverrides();
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
const onPointerUp = () => {
|
|
178
|
+
window.removeEventListener('keydown', onKeyChange);
|
|
179
|
+
window.removeEventListener('keyup', onKeyChange);
|
|
180
|
+
if (dragStarted) {
|
|
181
|
+
(0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
|
|
182
|
+
onDraggingChange(false);
|
|
183
|
+
}
|
|
184
|
+
const changes = (0, selected_outline_drag_1.getSelectedOutlineRotationDragChanges)({
|
|
185
|
+
dragStates,
|
|
186
|
+
lastValues,
|
|
187
|
+
});
|
|
188
|
+
if (changes.length === 0) {
|
|
189
|
+
(0, selected_outline_drag_1.clearSelectedOutlineRotationDragOverrides)({
|
|
190
|
+
clearDragOverrides,
|
|
191
|
+
dragStates,
|
|
192
|
+
});
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const staticChanges = changes.filter((change) => change.type === 'static');
|
|
196
|
+
const keyframedChanges = changes.filter((change) => change.type === 'keyframed');
|
|
197
|
+
Promise.all([
|
|
198
|
+
staticChanges.length > 0
|
|
199
|
+
? (0, save_sequence_prop_1.saveSequenceProps)({
|
|
200
|
+
changes: staticChanges,
|
|
201
|
+
addedKeyframes: null,
|
|
202
|
+
movedKeyframes: null,
|
|
203
|
+
setPropStatuses,
|
|
204
|
+
clientId: rotationDrag.clientId,
|
|
205
|
+
undoLabel: changes.length > 1
|
|
206
|
+
? 'Rotate selected sequences'
|
|
207
|
+
: 'Rotate sequence',
|
|
208
|
+
redoLabel: changes.length > 1
|
|
209
|
+
? 'Rotate selected sequences back'
|
|
210
|
+
: 'Rotate sequence back',
|
|
211
|
+
})
|
|
212
|
+
: Promise.resolve(),
|
|
213
|
+
(0, call_add_keyframe_1.callAddKeyframes)({
|
|
214
|
+
sequenceKeyframes: keyframedChanges,
|
|
215
|
+
effectKeyframes: [],
|
|
216
|
+
setPropStatuses,
|
|
217
|
+
clientId: rotationDrag.clientId,
|
|
218
|
+
}),
|
|
219
|
+
])
|
|
220
|
+
.catch((err) => {
|
|
221
|
+
(0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
|
|
222
|
+
})
|
|
223
|
+
.finally(() => {
|
|
224
|
+
(0, selected_outline_drag_1.clearSelectedOutlineRotationDragOverrides)({
|
|
225
|
+
clearDragOverrides,
|
|
226
|
+
dragStates,
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
(0, pointer_session_1.startPointerSession)({
|
|
231
|
+
event,
|
|
232
|
+
target: event.currentTarget,
|
|
233
|
+
onMove: onPointerMove,
|
|
234
|
+
onEnd: onPointerUp,
|
|
235
|
+
});
|
|
236
|
+
window.addEventListener('keydown', onKeyChange);
|
|
237
|
+
window.addEventListener('keyup', onKeyChange);
|
|
238
|
+
}, [
|
|
239
|
+
clearDragOverrides,
|
|
240
|
+
containsSelection,
|
|
241
|
+
cornerInfo,
|
|
242
|
+
editorSnapping,
|
|
243
|
+
getDragOverrides,
|
|
244
|
+
getAllRotationDragTargets,
|
|
245
|
+
onDraggingChange,
|
|
246
|
+
outline.dimensions,
|
|
247
|
+
outline.points,
|
|
248
|
+
outline.uncroppedPoints,
|
|
249
|
+
onSelect,
|
|
250
|
+
rotationDrag,
|
|
251
|
+
selected,
|
|
252
|
+
setPropStatuses,
|
|
253
|
+
setDragOverrides,
|
|
254
|
+
target,
|
|
255
|
+
]);
|
|
256
|
+
if (rotationDrag === null) {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
260
|
+
jsx_runtime_1.jsx("circle", { ref: circleRef, cx: cornerInfo.point.x, cy: cornerInfo.point.y, r: 12, fill: colors_1.TRANSPARENT, stroke: colors_1.TRANSPARENT, vectorEffect: "non-scaling-stroke", pointerEvents: "all", cursor: cornerInfo.cursor, "data-remotion-studio-rotation-corner": corner, "data-remotion-studio-rotation-corner-contains-selection": containsSelection, onPointerEnter: () => {
|
|
261
|
+
if (!dragging) {
|
|
262
|
+
onHoverChange(outline.key);
|
|
263
|
+
}
|
|
264
|
+
}, onPointerLeave: () => {
|
|
265
|
+
if (!dragging) {
|
|
266
|
+
onHoverChange(null);
|
|
267
|
+
}
|
|
268
|
+
}, onPointerDown: onPointerDown }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: circleRef, getItems: onContextMenuOpen, onOpenChange: onContextMenuOpenChange })
|
|
269
|
+
] }));
|
|
270
|
+
};
|
|
271
|
+
exports.SelectedOutlineRotationCornerHandle = SelectedOutlineRotationCornerHandle;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type SelectedOutlineScaleEdge } from './selected-outline-drag';
|
|
3
|
+
import type { SelectedOutline } from './selected-outline-geometry';
|
|
4
|
+
import { type SelectedOutlineContextMenuOpenHandler, type SelectedOutlineScaleDragTarget, type SelectedOutlineTarget } from './selected-outline-types';
|
|
5
|
+
import type { TimelineSelection, TimelineSelectionInteraction } from './Timeline/TimelineSelection';
|
|
6
|
+
export declare const SelectedOutlineScaleEdgeLine: React.FC<{
|
|
7
|
+
readonly getAllScaleDragTargets: () => readonly SelectedOutlineScaleDragTarget[];
|
|
8
|
+
readonly dragging: boolean;
|
|
9
|
+
readonly edge: SelectedOutlineScaleEdge;
|
|
10
|
+
readonly outline: SelectedOutline;
|
|
11
|
+
readonly onDraggingChange: (dragging: boolean) => void;
|
|
12
|
+
readonly onContextMenuOpen: SelectedOutlineContextMenuOpenHandler;
|
|
13
|
+
readonly onContextMenuOpenChange: (open: boolean) => void;
|
|
14
|
+
readonly onHoverChange: (key: string | null) => void;
|
|
15
|
+
readonly onSelect: (item: TimelineSelection, interaction: TimelineSelectionInteraction) => void;
|
|
16
|
+
readonly target: SelectedOutlineTarget | undefined;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SelectedOutlineScaleEdgeLine = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
const remotion_1 = require("remotion");
|
|
40
|
+
const colors_1 = require("../helpers/colors");
|
|
41
|
+
const pointer_session_1 = require("../helpers/pointer-session");
|
|
42
|
+
const ContextMenu_1 = require("./ContextMenu");
|
|
43
|
+
const ForceSpecificCursor_1 = require("./ForceSpecificCursor");
|
|
44
|
+
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
45
|
+
const selected_outline_drag_1 = require("./selected-outline-drag");
|
|
46
|
+
const selected_outline_measurement_1 = require("./selected-outline-measurement");
|
|
47
|
+
const selected_outline_types_1 = require("./selected-outline-types");
|
|
48
|
+
const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
|
|
49
|
+
const focus_inspector_field_1 = require("./Timeline/focus-inspector-field");
|
|
50
|
+
const imperative_state_1 = require("./Timeline/imperative-state");
|
|
51
|
+
const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
|
|
52
|
+
const SelectedOutlineScaleEdgeLine = ({ getAllScaleDragTargets, dragging, edge, outline, onDraggingChange, onContextMenuOpen, onContextMenuOpenChange, onHoverChange, onSelect, target, }) => {
|
|
53
|
+
var _a, _b, _c, _d;
|
|
54
|
+
const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
55
|
+
const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
56
|
+
const scaleDrag = (_a = target === null || target === void 0 ? void 0 : target.scaleDrag) !== null && _a !== void 0 ? _a : null;
|
|
57
|
+
const selected = (_b = target === null || target === void 0 ? void 0 : target.selected) !== null && _b !== void 0 ? _b : false;
|
|
58
|
+
const containsSelection = (_c = target === null || target === void 0 ? void 0 : target.containsSelection) !== null && _c !== void 0 ? _c : false;
|
|
59
|
+
const lineRef = (0, react_1.useRef)(null);
|
|
60
|
+
const edgeInfo = (0, react_1.useMemo)(() => (0, selected_outline_drag_1.getSelectedOutlineScaleEdgeInfo)(outline.points, edge), [edge, outline.points]);
|
|
61
|
+
const onPointerDown = react_1.default.useCallback((event) => {
|
|
62
|
+
if (event.button !== 0 || scaleDrag === null || edgeInfo === null) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
event.stopPropagation();
|
|
67
|
+
const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
|
|
68
|
+
const shouldUpdateSelection = (!selected && !containsSelection) ||
|
|
69
|
+
interaction.shiftKey ||
|
|
70
|
+
interaction.toggleKey;
|
|
71
|
+
if (shouldUpdateSelection && target !== undefined) {
|
|
72
|
+
onSelect(target.selection, interaction);
|
|
73
|
+
}
|
|
74
|
+
if (interaction.shiftKey || interaction.toggleKey) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const startPointer = { x: event.clientX, y: event.clientY };
|
|
81
|
+
const dragStates = (0, selected_outline_drag_1.getSelectedOutlineScaleDragStates)({
|
|
82
|
+
dragTargets: selected ? getAllScaleDragTargets() : [scaleDrag],
|
|
83
|
+
getDragOverrides,
|
|
84
|
+
timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
|
|
85
|
+
});
|
|
86
|
+
let lastValues = new Map();
|
|
87
|
+
let dragStarted = false;
|
|
88
|
+
const onPointerMove = (moveEvent) => {
|
|
89
|
+
moveEvent.preventDefault();
|
|
90
|
+
const delta = {
|
|
91
|
+
x: moveEvent.clientX - startPointer.x,
|
|
92
|
+
y: moveEvent.clientY - startPointer.y,
|
|
93
|
+
};
|
|
94
|
+
if (!dragStarted) {
|
|
95
|
+
if (!(0, selected_outline_drag_1.isSelectedOutlineDragPastThreshold)({
|
|
96
|
+
deltaX: delta.x,
|
|
97
|
+
deltaY: delta.y,
|
|
98
|
+
})) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
dragStarted = true;
|
|
102
|
+
onDraggingChange(true);
|
|
103
|
+
(0, ForceSpecificCursor_1.forceSpecificCursor)(edgeInfo.cursor);
|
|
104
|
+
}
|
|
105
|
+
const projectedDelta = (0, selected_outline_measurement_1.dot)(delta, edgeInfo.normal);
|
|
106
|
+
const scaleFactor = Math.max(0.001, 1 + projectedDelta / edgeInfo.extent);
|
|
107
|
+
lastValues = (0, selected_outline_drag_1.getSelectedOutlineScaleDragValues)({
|
|
108
|
+
dragStates,
|
|
109
|
+
axis: edgeInfo.axis,
|
|
110
|
+
scaleFactor,
|
|
111
|
+
});
|
|
112
|
+
for (const dragState of dragStates) {
|
|
113
|
+
const value = lastValues.get(dragState.key);
|
|
114
|
+
if (value === undefined) {
|
|
115
|
+
throw new Error('Expected scale drag value to be available');
|
|
116
|
+
}
|
|
117
|
+
if (dragState.target.propStatus.status === 'keyframed') {
|
|
118
|
+
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.scaleFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
|
|
119
|
+
status: dragState.target.propStatus,
|
|
120
|
+
frame: dragState.sourceFrame,
|
|
121
|
+
value,
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.scaleFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const onPointerUp = () => {
|
|
130
|
+
if (dragStarted) {
|
|
131
|
+
(0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
|
|
132
|
+
onDraggingChange(false);
|
|
133
|
+
}
|
|
134
|
+
const changes = (0, selected_outline_drag_1.getSelectedOutlineScaleDragChanges)({
|
|
135
|
+
dragStates,
|
|
136
|
+
lastValues,
|
|
137
|
+
});
|
|
138
|
+
if (changes.length === 0) {
|
|
139
|
+
(0, selected_outline_drag_1.clearSelectedOutlineScaleDragOverrides)({
|
|
140
|
+
clearDragOverrides,
|
|
141
|
+
dragStates,
|
|
142
|
+
});
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const staticChanges = changes.filter((change) => change.type === 'static');
|
|
146
|
+
const keyframedChanges = changes.filter((change) => change.type === 'keyframed');
|
|
147
|
+
Promise.all([
|
|
148
|
+
staticChanges.length > 0
|
|
149
|
+
? (0, save_sequence_prop_1.saveSequenceProps)({
|
|
150
|
+
changes: staticChanges,
|
|
151
|
+
addedKeyframes: null,
|
|
152
|
+
movedKeyframes: null,
|
|
153
|
+
setPropStatuses,
|
|
154
|
+
clientId: scaleDrag.clientId,
|
|
155
|
+
undoLabel: changes.length > 1
|
|
156
|
+
? 'Scale selected sequences'
|
|
157
|
+
: 'Scale sequence',
|
|
158
|
+
redoLabel: changes.length > 1
|
|
159
|
+
? 'Scale selected sequences back'
|
|
160
|
+
: 'Scale sequence back',
|
|
161
|
+
})
|
|
162
|
+
: Promise.resolve(),
|
|
163
|
+
(0, call_add_keyframe_1.callAddKeyframes)({
|
|
164
|
+
sequenceKeyframes: keyframedChanges,
|
|
165
|
+
effectKeyframes: [],
|
|
166
|
+
setPropStatuses,
|
|
167
|
+
clientId: scaleDrag.clientId,
|
|
168
|
+
}),
|
|
169
|
+
])
|
|
170
|
+
.catch((err) => {
|
|
171
|
+
(0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
|
|
172
|
+
})
|
|
173
|
+
.finally(() => {
|
|
174
|
+
(0, selected_outline_drag_1.clearSelectedOutlineScaleDragOverrides)({
|
|
175
|
+
clearDragOverrides,
|
|
176
|
+
dragStates,
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
};
|
|
180
|
+
(0, pointer_session_1.startPointerSession)({
|
|
181
|
+
event,
|
|
182
|
+
target: event.currentTarget,
|
|
183
|
+
onMove: onPointerMove,
|
|
184
|
+
onEnd: onPointerUp,
|
|
185
|
+
});
|
|
186
|
+
}, [
|
|
187
|
+
clearDragOverrides,
|
|
188
|
+
containsSelection,
|
|
189
|
+
getAllScaleDragTargets,
|
|
190
|
+
edgeInfo,
|
|
191
|
+
getDragOverrides,
|
|
192
|
+
onDraggingChange,
|
|
193
|
+
onSelect,
|
|
194
|
+
scaleDrag,
|
|
195
|
+
selected,
|
|
196
|
+
setPropStatuses,
|
|
197
|
+
setDragOverrides,
|
|
198
|
+
target,
|
|
199
|
+
]);
|
|
200
|
+
if (scaleDrag === null || edgeInfo === null) {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
204
|
+
jsx_runtime_1.jsx("line", { ref: lineRef, x1: edgeInfo.start.x, y1: edgeInfo.start.y, x2: edgeInfo.end.x, y2: edgeInfo.end.y, stroke: colors_1.TRANSPARENT, strokeWidth: 12, vectorEffect: "non-scaling-stroke", pointerEvents: "stroke", cursor: edgeInfo.cursor, "data-remotion-studio-scale-edge": edge, "data-remotion-studio-scale-edge-contains-selection": (_d = target === null || target === void 0 ? void 0 : target.containsSelection) !== null && _d !== void 0 ? _d : false, onPointerEnter: () => {
|
|
205
|
+
if (!dragging) {
|
|
206
|
+
onHoverChange(outline.key);
|
|
207
|
+
}
|
|
208
|
+
}, onPointerLeave: () => {
|
|
209
|
+
if (!dragging) {
|
|
210
|
+
onHoverChange(null);
|
|
211
|
+
}
|
|
212
|
+
}, onPointerDown: onPointerDown }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: lineRef, getItems: onContextMenuOpen, onOpenChange: onContextMenuOpenChange })
|
|
213
|
+
] }));
|
|
214
|
+
};
|
|
215
|
+
exports.SelectedOutlineScaleEdgeLine = SelectedOutlineScaleEdgeLine;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type SelectedOutlineSnapPoint } from './selected-outline-snap';
|
|
3
|
+
export type UpdateSelectedOutlineSnapPoints = (snapPoints: readonly SelectedOutlineSnapPoint[]) => void;
|
|
4
|
+
export declare const SelectedOutlineSnapIndicators: React.FC<{
|
|
5
|
+
readonly compositionHeight: number;
|
|
6
|
+
readonly compositionWidth: number;
|
|
7
|
+
readonly scale: number;
|
|
8
|
+
readonly updateSnapPointsRef: React.MutableRefObject<UpdateSelectedOutlineSnapPoints>;
|
|
9
|
+
}>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectedOutlineSnapIndicators = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const selected_outline_snap_1 = require("./selected-outline-snap");
|
|
7
|
+
const SelectedOutlineSnapIndicators = ({ compositionHeight, compositionWidth, scale, updateSnapPointsRef }) => {
|
|
8
|
+
const [activeSnapPoints, setActiveSnapPoints] = (0, react_1.useState)([]);
|
|
9
|
+
(0, react_1.useLayoutEffect)(() => {
|
|
10
|
+
updateSnapPointsRef.current = setActiveSnapPoints;
|
|
11
|
+
return () => {
|
|
12
|
+
if (updateSnapPointsRef.current === setActiveSnapPoints) {
|
|
13
|
+
updateSnapPointsRef.current = () => undefined;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}, [updateSnapPointsRef]);
|
|
17
|
+
if (activeSnapPoints.length === 0) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return (jsx_runtime_1.jsx("g", { pointerEvents: "none", children: activeSnapPoints.map((snapPoint) => {
|
|
21
|
+
if (snapPoint.target.axis === 'x') {
|
|
22
|
+
const x = snapPoint.target.position * scale;
|
|
23
|
+
return (jsx_runtime_1.jsx("line", { x1: x, x2: x, y1: 0, y2: compositionHeight * scale, stroke: selected_outline_snap_1.selectedOutlineSnapIndicatorColor, strokeWidth: 1, vectorEffect: "non-scaling-stroke" }, `${snapPoint.target.axis}-${snapPoint.target.type}-${snapPoint.target.position}-${snapPoint.edge}`));
|
|
24
|
+
}
|
|
25
|
+
const y = snapPoint.target.position * scale;
|
|
26
|
+
return (jsx_runtime_1.jsx("line", { x1: 0, x2: compositionWidth * scale, y1: y, y2: y, stroke: selected_outline_snap_1.selectedOutlineSnapIndicatorColor, strokeWidth: 1, vectorEffect: "non-scaling-stroke" }, `${snapPoint.target.axis}-${snapPoint.target.type}-${snapPoint.target.position}-${snapPoint.edge}`));
|
|
27
|
+
}) }));
|
|
28
|
+
};
|
|
29
|
+
exports.SelectedOutlineSnapIndicators = SelectedOutlineSnapIndicators;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SelectedOutline } from './selected-outline-geometry';
|
|
3
|
+
import { type SelectedOutlineLayoutTarget, type SelectedOutlineTarget } from './selected-outline-types';
|
|
4
|
+
export declare const SelectedOutlineTransformOriginHandle: React.FC<{
|
|
5
|
+
readonly getLatestTargetByKey: (key: string) => SelectedOutlineTarget | undefined;
|
|
6
|
+
readonly layoutTarget: SelectedOutlineLayoutTarget | undefined;
|
|
7
|
+
readonly outline: SelectedOutline;
|
|
8
|
+
readonly onDraggingChange: (dragging: boolean) => void;
|
|
9
|
+
}>;
|