@remotion/studio 4.0.474 → 4.0.476

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 (94) hide show
  1. package/dist/components/Canvas.js +6 -0
  2. package/dist/components/ColorPicker/ColorPicker.js +4 -31
  3. package/dist/components/ColorPicker/ColorPickerPopup.d.ts +6 -0
  4. package/dist/components/ColorPicker/ColorPickerPopup.js +11 -6
  5. package/dist/components/CompositionSelectorItem.js +4 -4
  6. package/dist/components/Editor.js +4 -1
  7. package/dist/components/GlobalKeybindings.js +12 -0
  8. package/dist/components/KeyboardShortcutsExplainer.js +24 -0
  9. package/dist/components/Modals.js +2 -1
  10. package/dist/components/NewComposition/ComboBox.js +1 -0
  11. package/dist/components/NewComposition/InputDragger.d.ts +6 -0
  12. package/dist/components/NewComposition/InputDragger.js +40 -14
  13. package/dist/components/NewComposition/RenameComposition.js +8 -1
  14. package/dist/components/NewComposition/RenameFolder.js +8 -1
  15. package/dist/components/NewComposition/RenameStaticFile.js +11 -1
  16. package/dist/components/Notifications/Notification.js +5 -4
  17. package/dist/components/Notifications/NotificationCenter.js +1 -1
  18. package/dist/components/ObserveDefaultPropsContext.js +6 -2
  19. package/dist/components/PlayPause.js +22 -66
  20. package/dist/components/PreviewToolbar.js +17 -3
  21. package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +2 -1
  22. package/dist/components/SelectedOutlineOverlay.d.ts +104 -42
  23. package/dist/components/SelectedOutlineOverlay.js +1278 -336
  24. package/dist/components/SelectedOutlineUvControls.d.ts +17 -0
  25. package/dist/components/SelectedOutlineUvControls.js +167 -0
  26. package/dist/components/StudioCanvasCapture.d.ts +5 -0
  27. package/dist/components/StudioCanvasCapture.js +40 -0
  28. package/dist/components/Timeline/EasingEditorModal.d.ts +11 -0
  29. package/dist/components/Timeline/EasingEditorModal.js +247 -0
  30. package/dist/components/Timeline/KeyframeSettingsModal.js +1 -0
  31. package/dist/components/Timeline/Timeline.js +10 -7
  32. package/dist/components/Timeline/TimelineDeleteKeybindings.js +64 -35
  33. package/dist/components/Timeline/TimelineDragHandler.js +2 -2
  34. package/dist/components/Timeline/TimelineEffectItem.js +1 -2
  35. package/dist/components/Timeline/TimelineEffectPropItem.js +1 -1
  36. package/dist/components/Timeline/TimelineExpandedKeyframeRow.d.ts +1 -0
  37. package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +2 -2
  38. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +1 -1
  39. package/dist/components/Timeline/TimelineHeightContainer.js +2 -0
  40. package/dist/components/Timeline/TimelineItemStack.js +3 -56
  41. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +7 -0
  42. package/dist/components/Timeline/TimelineKeyframeControls.js +259 -62
  43. package/dist/components/Timeline/TimelineKeyframeDiamond.js +4 -2
  44. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +128 -3
  45. package/dist/components/Timeline/TimelineKeyframeTracksContext.d.ts +7 -0
  46. package/dist/components/Timeline/TimelineKeyframeTracksContext.js +17 -0
  47. package/dist/components/Timeline/TimelineMediaInfo.js +4 -24
  48. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +4 -0
  49. package/dist/components/Timeline/TimelineRotationField.js +21 -39
  50. package/dist/components/Timeline/TimelineScaleField.js +1 -1
  51. package/dist/components/Timeline/TimelineScrollable.js +19 -3
  52. package/dist/components/Timeline/TimelineSelection.d.ts +67 -3
  53. package/dist/components/Timeline/TimelineSelection.js +289 -32
  54. package/dist/components/Timeline/TimelineSequence.js +17 -9
  55. package/dist/components/Timeline/TimelineSequenceItem.js +328 -168
  56. package/dist/components/Timeline/TimelineSequenceName.d.ts +4 -2
  57. package/dist/components/Timeline/TimelineSequenceName.js +70 -19
  58. package/dist/components/Timeline/TimelineSequencePropItem.js +1 -1
  59. package/dist/components/Timeline/TimelineTimeIndicators.js +4 -2
  60. package/dist/components/Timeline/TimelineTransformOriginField.d.ts +11 -0
  61. package/dist/components/Timeline/TimelineTransformOriginField.js +138 -0
  62. package/dist/components/Timeline/TimelineTranslateField.js +1 -1
  63. package/dist/components/Timeline/TimelineUvCoordinateField.js +1 -1
  64. package/dist/components/Timeline/call-add-keyframe.d.ts +17 -0
  65. package/dist/components/Timeline/call-add-keyframe.js +65 -1
  66. package/dist/components/Timeline/delete-selected-timeline-item.js +23 -13
  67. package/dist/components/Timeline/disable-sequence-interactivity.d.ts +8 -0
  68. package/dist/components/Timeline/disable-sequence-interactivity.js +24 -0
  69. package/dist/components/Timeline/reset-selected-timeline-props.js +15 -7
  70. package/dist/components/Timeline/timeline-rotation-utils.d.ts +2 -0
  71. package/dist/components/Timeline/timeline-rotation-utils.js +34 -0
  72. package/dist/components/Timeline/transform-origin-utils.d.ts +24 -0
  73. package/dist/components/Timeline/transform-origin-utils.js +170 -0
  74. package/dist/components/Timeline/update-selected-easing.d.ts +35 -0
  75. package/dist/components/Timeline/update-selected-easing.js +133 -0
  76. package/dist/components/Timeline/use-expanded-track-keyframe-rows.d.ts +1 -0
  77. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +28 -0
  78. package/dist/components/Timeline/use-timeline-keyframe-drag.js +8 -13
  79. package/dist/components/canvas-capture-enabled.d.ts +1 -0
  80. package/dist/components/canvas-capture-enabled.js +4 -0
  81. package/dist/components/effect-drag-and-drop.d.ts +11 -0
  82. package/dist/components/effect-drag-and-drop.js +73 -0
  83. package/dist/components/selected-outline-geometry.d.ts +20 -0
  84. package/dist/components/selected-outline-geometry.js +18 -0
  85. package/dist/components/selected-outline-uv.d.ts +46 -0
  86. package/dist/components/selected-outline-uv.js +240 -0
  87. package/dist/esm/{chunk-xjvc8qen.js → chunk-0atarw3p.js} +8779 -5352
  88. package/dist/esm/internals.mjs +8779 -5352
  89. package/dist/esm/previewEntry.mjs +8789 -5362
  90. package/dist/esm/renderEntry.mjs +1 -1
  91. package/dist/helpers/colors.d.ts +0 -1
  92. package/dist/helpers/colors.js +1 -2
  93. package/dist/state/modals.d.ts +2 -1
  94. package/package.json +11 -10
@@ -10,6 +10,7 @@ const delete_selected_timeline_item_1 = require("./delete-selected-timeline-item
10
10
  const duplicate_selected_timeline_item_1 = require("./duplicate-selected-timeline-item");
11
11
  const reset_selected_timeline_props_1 = require("./reset-selected-timeline-props");
12
12
  const TimelineSelection_1 = require("./TimelineSelection");
13
+ const update_selected_easing_1 = require("./update-selected-easing");
13
14
  const TimelineDeleteKeybindings = () => {
14
15
  const keybindings = (0, use_keybinding_1.useKeybinding)();
15
16
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
@@ -17,55 +18,81 @@ const TimelineDeleteKeybindings = () => {
17
18
  const { overrideIdToNodePathMappings } = (0, react_1.useContext)(remotion_1.Internals.OverrideIdsToNodePathsGettersContext);
18
19
  const propStatusesRef = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesRefContext);
19
20
  const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
20
- const { canSelect } = (0, TimelineSelection_1.useTimelineSelection)();
21
+ const { canSelect, canSelectEasing } = (0, TimelineSelection_1.useTimelineSelection)();
21
22
  const currentSelection = (0, TimelineSelection_1.useCurrentTimelineSelectionStateAsRef)();
22
23
  const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
23
24
  (0, react_1.useEffect)(() => {
24
- if (!canSelect || previewServerState.type !== 'connected') {
25
+ if ((!canSelect && !canSelectEasing) ||
26
+ previewServerState.type !== 'connected') {
25
27
  return;
26
28
  }
27
29
  const { clientId } = previewServerState;
28
- const backspace = keybindings.registerKeybinding({
29
- event: 'keydown',
30
- key: 'Backspace',
31
- callback: () => {
32
- const { selectedItems, clearSelection } = currentSelection.current;
33
- const sequences = sequencesRef.current;
34
- const propStatuses = propStatusesRef.current;
35
- if (selectedItems.length === 0) {
36
- return;
37
- }
38
- const resetPromise = (0, reset_selected_timeline_props_1.resetSelectedTimelineProps)({
39
- selections: selectedItems,
30
+ const handleDelete = () => {
31
+ const { selectedItems, clearSelection } = currentSelection.current;
32
+ const sequences = sequencesRef.current;
33
+ const propStatuses = propStatusesRef.current;
34
+ if (selectedItems.length === 0) {
35
+ return;
36
+ }
37
+ const deletePromise = (0, delete_selected_timeline_item_1.deleteSelectedTimelineItems)({
38
+ selections: selectedItems,
39
+ sequences,
40
+ overrideIdsToNodePaths: overrideIdToNodePathMappings,
41
+ setPropStatuses,
42
+ clientId,
43
+ confirm,
44
+ });
45
+ if (deletePromise !== null) {
46
+ deletePromise
47
+ .then((deleted) => {
48
+ if (deleted) {
49
+ clearSelection();
50
+ }
51
+ })
52
+ .catch(() => undefined);
53
+ return;
54
+ }
55
+ const easingSelections = (0, update_selected_easing_1.getEasingSelections)(selectedItems);
56
+ if (easingSelections.length === selectedItems.length) {
57
+ const resetEasingPromise = (0, update_selected_easing_1.updateSelectedTimelineEasings)({
58
+ selections: easingSelections,
40
59
  sequences,
41
60
  overrideIdsToNodePaths: overrideIdToNodePathMappings,
42
61
  propStatuses,
43
62
  setPropStatuses,
44
63
  clientId,
64
+ easing: 'linear',
45
65
  });
46
- if (resetPromise !== null) {
47
- resetPromise.catch(() => undefined);
48
- return;
49
- }
50
- const deletePromise = (0, delete_selected_timeline_item_1.deleteSelectedTimelineItems)({
51
- selections: selectedItems,
52
- sequences,
53
- overrideIdsToNodePaths: overrideIdToNodePathMappings,
54
- setPropStatuses,
55
- clientId,
56
- confirm,
57
- });
58
- if (deletePromise === null) {
66
+ if (resetEasingPromise !== null) {
67
+ resetEasingPromise.catch(() => undefined);
59
68
  return;
60
69
  }
61
- deletePromise
62
- .then((deleted) => {
63
- if (deleted) {
64
- clearSelection();
65
- }
66
- })
67
- .catch(() => undefined);
68
- },
70
+ }
71
+ const resetPromise = (0, reset_selected_timeline_props_1.resetSelectedTimelineProps)({
72
+ selections: selectedItems,
73
+ sequences,
74
+ overrideIdsToNodePaths: overrideIdToNodePathMappings,
75
+ propStatuses,
76
+ setPropStatuses,
77
+ clientId,
78
+ });
79
+ if (resetPromise !== null) {
80
+ resetPromise.catch(() => undefined);
81
+ }
82
+ };
83
+ const backspace = keybindings.registerKeybinding({
84
+ event: 'keydown',
85
+ key: 'Backspace',
86
+ callback: handleDelete,
87
+ commandCtrlKey: false,
88
+ preventDefault: true,
89
+ triggerIfInputFieldFocused: false,
90
+ keepRegisteredWhenNotHighestContext: false,
91
+ });
92
+ const deleteKey = keybindings.registerKeybinding({
93
+ event: 'keydown',
94
+ key: 'Delete',
95
+ callback: handleDelete,
69
96
  commandCtrlKey: false,
70
97
  preventDefault: true,
71
98
  triggerIfInputFieldFocused: false,
@@ -95,10 +122,12 @@ const TimelineDeleteKeybindings = () => {
95
122
  });
96
123
  return () => {
97
124
  backspace.unregister();
125
+ deleteKey.unregister();
98
126
  duplicate.unregister();
99
127
  };
100
128
  }, [
101
129
  canSelect,
130
+ canSelectEasing,
102
131
  confirm,
103
132
  currentSelection,
104
133
  keybindings,
@@ -82,13 +82,13 @@ const TimelineDragHandler = () => {
82
82
  return {
83
83
  ...container,
84
84
  width: 100 * zoom + '%',
85
- ...(TimelineSelection_1.TIMELINE_TOP_DRAG ? { height: TimelineTimeIndicators_1.TIMELINE_TIME_INDICATOR_HEIGHT } : {}),
85
+ height: TimelineTimeIndicators_1.TIMELINE_TIME_INDICATOR_HEIGHT,
86
86
  };
87
87
  }, [canvasContent, zoomMap]);
88
88
  if (!canvasContent || canvasContent.type !== 'composition') {
89
89
  return null;
90
90
  }
91
- return (jsx_runtime_1.jsx("div", { ref: timeline_refs_1.sliderAreaRef, style: containerStyle, children: video ? jsx_runtime_1.jsx(TimelineDragHandlerInnerMemo, {}) : null }));
91
+ return (jsx_runtime_1.jsx("div", { ref: timeline_refs_1.sliderAreaRef, style: containerStyle, [TimelineSelection_1.TIMELINE_SCRUBBER_ATTR]: true, children: video ? jsx_runtime_1.jsx(TimelineDragHandlerInnerMemo, {}) : null }));
92
92
  };
93
93
  exports.TimelineDragHandler = TimelineDragHandler;
94
94
  const TimelineDragHandlerInner = () => {
@@ -90,8 +90,7 @@ const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, do
90
90
  const deleteDisabled = !previewConnected ||
91
91
  effectStatus.type !== 'can-update-effect' ||
92
92
  !validatedLocation.source;
93
- const canReorder = TimelineSelection_1.SELECTION_ENABLED &&
94
- previewConnected &&
93
+ const canReorder = previewConnected &&
95
94
  effectStatus.type === 'can-update-effect' &&
96
95
  Boolean(validatedLocation.source);
97
96
  const nodePathKey = (0, react_1.useMemo)(() => remotion_1.Internals.makeSequencePropsSubscriptionKey(nodePath), [nodePath]);
@@ -246,7 +246,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
246
246
  schema: field.effectSchema,
247
247
  key: field.key,
248
248
  }),
249
- }) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: propStatus, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: field.effectSchema, effectIndex: field.effectIndex })) : null;
249
+ }) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: propStatus, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: field.effectSchema, effectIndex: field.effectIndex, nodePathInfo: nodePathInfo })) : null;
250
250
  const canResetToDefault = (0, react_1.useMemo)(() => {
251
251
  if (!propStatus || propStatus.status === 'computed') {
252
252
  return false;
@@ -6,6 +6,7 @@ export declare const TimelineExpandedKeyframeRow: React.NamedExoticComponent<{
6
6
  frame: number;
7
7
  value: unknown;
8
8
  }[];
9
+ readonly canEditEasing: boolean;
9
10
  readonly nodePathInfo: SequenceNodePathInfo;
10
11
  readonly showSeparator: boolean;
11
12
  }>;
@@ -48,10 +48,10 @@ const row = {
48
48
  const rowSeparator = {
49
49
  height: timeline_layout_1.TIMELINE_ITEM_BORDER_BOTTOM,
50
50
  };
51
- const TimelineExpandedKeyframeRowUnmemoized = ({ height, keyframes, nodePathInfo, showSeparator }) => {
51
+ const TimelineExpandedKeyframeRowUnmemoized = ({ height, keyframes, canEditEasing, nodePathInfo, showSeparator }) => {
52
52
  const timelineWidth = (0, react_1.useContext)(TimelineWidthProvider_1.TimelineWidthContext);
53
53
  const { selected: rowSelected } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
54
- const easingSegments = TimelineSelection_1.ENABLE_OUTLINES
54
+ const easingSegments = canEditEasing
55
55
  ? (0, get_timeline_easing_segments_1.getTimelineEasingSegments)(keyframes)
56
56
  : [];
57
57
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [showSeparator ? jsx_runtime_1.jsx("div", { style: rowSeparator }) : null, jsx_runtime_1.jsxs("div", { style: { ...row, height }, children: [rowSelected && timelineWidth !== null ? (jsx_runtime_1.jsx("div", { style: (0, TimelineSelection_1.getTimelineSelectedTrackHighlightStyle)(timelineWidth) })) : null, easingSegments.map((segment) => (jsx_runtime_1.jsx(TimelineKeyframeEasingLine_1.TimelineKeyframeEasingLine, { fromFrame: segment.fromFrame, toFrame: segment.toFrame, rowHeight: height, nodePathInfo: nodePathInfo, segmentIndex: segment.segmentIndex }, `${segment.segmentIndex}-${segment.fromFrame}-${segment.toFrame}`))), keyframes.map((keyframe) => (jsx_runtime_1.jsx(TimelineKeyframeDiamond_1.TimelineKeyframeDiamond, { frame: keyframe.frame, rowHeight: height, nodePathInfo: nodePathInfo }, keyframe.frame)))] })
@@ -14,6 +14,6 @@ const TimelineExpandedTrackKeyframesInner = ({ nodePathInfo, sequence, keyframeD
14
14
  nodePathInfo,
15
15
  keyframeDisplayOffset,
16
16
  });
17
- return (jsx_runtime_1.jsx("div", { style: { height: expandedHeight }, children: rows.map((row, index) => (jsx_runtime_1.jsx(TimelineExpandedKeyframeRow_1.TimelineExpandedKeyframeRow, { height: row.height, keyframes: row.keyframes, nodePathInfo: row.nodePathInfo, showSeparator: index > 0 }, row.rowKey))) }));
17
+ return (jsx_runtime_1.jsx("div", { style: { height: expandedHeight }, children: rows.map((row, index) => (jsx_runtime_1.jsx(TimelineExpandedKeyframeRow_1.TimelineExpandedKeyframeRow, { height: row.height, keyframes: row.keyframes, canEditEasing: row.canEditEasing, nodePathInfo: row.nodePathInfo, showSeparator: index > 0 }, row.rowKey))) }));
18
18
  };
19
19
  exports.TimelineExpandedTrackKeyframes = react_1.default.memo(TimelineExpandedTrackKeyframesInner);
@@ -36,12 +36,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.TimelineHeightContainer = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
+ const TimelineSelection_1 = require("./TimelineSelection");
39
40
  const use_timeline_height_1 = require("./use-timeline-height");
40
41
  const baseStyle = {
41
42
  display: 'flex',
42
43
  flex: 1,
43
44
  minHeight: '100%',
44
45
  overflowX: 'hidden',
46
+ backgroundColor: TimelineSelection_1.TIMELINE_BACKGROUND,
45
47
  };
46
48
  const TimelineHeightContainerInner = ({ shown, hasBeenCut, children }) => {
47
49
  const height = (0, use_timeline_height_1.useTimelineHeight)({ shown, hasBeenCut });
@@ -3,63 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TimelineItemStack = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
- const client_id_1 = require("../../helpers/client-id");
7
6
  const colors_1 = require("../../helpers/colors");
8
- const get_git_menu_item_1 = require("../../helpers/get-git-menu-item");
9
- const open_in_editor_1 = require("../../helpers/open-in-editor");
10
- const layout_1 = require("../layout");
11
- const NotificationCenter_1 = require("../Notifications/NotificationCenter");
12
- const Spinner_1 = require("../Spinner");
13
- const TimelineSelection_1 = require("./TimelineSelection");
14
7
  const source_attribution_1 = require("./TimelineStack/source-attribution");
15
8
  const TimelineItemStack = ({ originalLocation }) => {
16
- const [hovered, setHovered] = (0, react_1.useState)(false);
17
- const [opening, setOpening] = (0, react_1.useState)(false);
18
- const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
19
- .previewServerState.type;
20
- const openEditor = (0, react_1.useCallback)(async (location) => {
21
- if (!window.remotion_editorName) {
22
- return;
23
- }
24
- setOpening(true);
25
- try {
26
- await (0, open_in_editor_1.openOriginalPositionInEditor)(location);
27
- }
28
- catch (err) {
29
- (0, NotificationCenter_1.showNotification)(err.message, 2000);
30
- }
31
- finally {
32
- setOpening(false);
33
- }
34
- }, []);
35
- const canOpenInEditor = Boolean(window.remotion_editorName &&
36
- connectionStatus === 'connected' &&
37
- originalLocation);
38
- const canOpenInGitHub = Boolean(window.remotion_gitSource && originalLocation);
39
- const hoverable = !TimelineSelection_1.SELECTION_ENABLED && (canOpenInEditor || canOpenInGitHub);
40
- const onClick = (0, react_1.useCallback)(() => {
41
- if (!originalLocation) {
42
- return;
43
- }
44
- if (canOpenInEditor) {
45
- openEditor(originalLocation);
46
- return;
47
- }
48
- if (canOpenInGitHub) {
49
- window.open((0, get_git_menu_item_1.getGitRefUrl)(window.remotion_gitSource, originalLocation), '_blank');
50
- }
51
- }, [canOpenInEditor, canOpenInGitHub, openEditor, originalLocation]);
52
- const onPointerEnter = (0, react_1.useCallback)(() => setHovered(true), []);
53
- const onPointerLeave = (0, react_1.useCallback)(() => setHovered(false), []);
54
9
  const style = (0, react_1.useMemo)(() => {
55
10
  return {
56
11
  fontSize: 12,
57
- color: opening
58
- ? colors_1.VERY_LIGHT_TEXT
59
- : hovered && hoverable
60
- ? colors_1.LIGHT_TEXT
61
- : colors_1.VERY_LIGHT_TEXT,
62
- cursor: hoverable ? 'pointer' : undefined,
12
+ color: colors_1.VERY_LIGHT_TEXT,
63
13
  display: 'flex',
64
14
  flexDirection: 'row',
65
15
  alignItems: 'center',
@@ -70,13 +20,10 @@ const TimelineItemStack = ({ originalLocation }) => {
70
20
  userSelect: 'none',
71
21
  WebkitUserSelect: 'none',
72
22
  };
73
- }, [opening, hovered, hoverable]);
23
+ }, []);
74
24
  if (!originalLocation) {
75
25
  return null;
76
26
  }
77
- return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
78
- jsx_runtime_1.jsx("div", { onPointerEnter: hoverable ? onPointerEnter : undefined, onPointerLeave: hoverable ? onPointerLeave : undefined, onClick: hoverable ? onClick : undefined, style: style, children: (0, source_attribution_1.getOriginalSourceAttribution)(originalLocation) }), opening ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
79
- jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: 12 })
80
- ] })) : null] }));
27
+ return (jsx_runtime_1.jsx("div", { style: style, children: (0, source_attribution_1.getOriginalSourceAttribution)(originalLocation) }));
81
28
  };
82
29
  exports.TimelineItemStack = TimelineItemStack;
@@ -1,5 +1,11 @@
1
1
  import React from 'react';
2
2
  import type { CanUpdateSequencePropStatus, DragOverrideValue, SequencePropsSubscriptionKey, SequenceSchema } from 'remotion';
3
+ import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
4
+ import { type TimelineSelection } from './TimelineSelection';
5
+ export declare const getSelectedKeyframeControlNodePathInfos: ({ clickedNodePathInfo, selectedItems, }: {
6
+ readonly clickedNodePathInfo: SequenceNodePathInfo;
7
+ readonly selectedItems: readonly TimelineSelection[];
8
+ }) => readonly SequenceNodePathInfo[];
3
9
  export declare const shouldShowTimelineKeyframeControls: ({ propStatus, selected, keyframable, }: {
4
10
  propStatus: CanUpdateSequencePropStatus | null;
5
11
  selected: boolean;
@@ -15,4 +21,5 @@ export declare const TimelineKeyframeControls: React.FC<{
15
21
  readonly dragOverrideValue: DragOverrideValue | undefined;
16
22
  readonly schema: SequenceSchema;
17
23
  readonly effectIndex: number | null;
24
+ readonly nodePathInfo: SequenceNodePathInfo;
18
25
  }>;