@remotion/studio 4.0.473 → 4.0.475

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/components/AssetSelectorItem.js +30 -6
  2. package/dist/components/Canvas.js +77 -0
  3. package/dist/components/ColorPicker/ColorPicker.js +4 -31
  4. package/dist/components/CompositionSelectorItem.js +4 -4
  5. package/dist/components/Editor.js +4 -1
  6. package/dist/components/Modals.js +2 -2
  7. package/dist/components/NewComposition/ComboBox.js +1 -0
  8. package/dist/components/NewComposition/InputDragger.d.ts +1 -0
  9. package/dist/components/NewComposition/InputDragger.js +9 -6
  10. package/dist/components/PreviewToolbar.js +2 -2
  11. package/dist/components/SelectedOutlineOverlay.d.ts +61 -33
  12. package/dist/components/SelectedOutlineOverlay.js +813 -351
  13. package/dist/components/SelectedOutlineUvControls.d.ts +17 -0
  14. package/dist/components/SelectedOutlineUvControls.js +167 -0
  15. package/dist/components/StudioCanvasCapture.d.ts +5 -0
  16. package/dist/components/StudioCanvasCapture.js +40 -0
  17. package/dist/components/Timeline/EasingEditorModal.d.ts +11 -0
  18. package/dist/components/Timeline/EasingEditorModal.js +247 -0
  19. package/dist/components/Timeline/KeyframeSettingsModal.js +5 -4
  20. package/dist/components/Timeline/SequencePropsObserver.js +3 -3
  21. package/dist/components/Timeline/Timeline.js +10 -7
  22. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +7 -7
  23. package/dist/components/Timeline/TimelineClipboardKeybindings.js +19 -16
  24. package/dist/components/Timeline/TimelineDeleteKeybindings.js +71 -40
  25. package/dist/components/Timeline/TimelineDragHandler.js +2 -2
  26. package/dist/components/Timeline/TimelineEffectItem.js +8 -9
  27. package/dist/components/Timeline/TimelineEffectPropItem.js +18 -18
  28. package/dist/components/Timeline/TimelineExpandedKeyframeRow.d.ts +1 -0
  29. package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +7 -2
  30. package/dist/components/Timeline/TimelineExpandedSection.js +5 -5
  31. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +1 -1
  32. package/dist/components/Timeline/TimelineHeightContainer.js +2 -0
  33. package/dist/components/Timeline/TimelineItemStack.js +3 -56
  34. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +7 -0
  35. package/dist/components/Timeline/TimelineKeyframeControls.js +265 -68
  36. package/dist/components/Timeline/TimelineKeyframeDiamond.js +4 -3
  37. package/dist/components/Timeline/TimelineKeyframeEasingLine.d.ts +9 -0
  38. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +245 -0
  39. package/dist/components/Timeline/TimelineKeyframeTracksContext.d.ts +7 -0
  40. package/dist/components/Timeline/TimelineKeyframeTracksContext.js +17 -0
  41. package/dist/components/Timeline/TimelineKeyframedValue.js +1 -1
  42. package/dist/components/Timeline/TimelineMediaInfo.js +4 -24
  43. package/dist/components/Timeline/TimelineNumberField.js +15 -7
  44. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +4 -0
  45. package/dist/components/Timeline/TimelineRotationField.js +22 -34
  46. package/dist/components/Timeline/TimelineScaleField.js +16 -12
  47. package/dist/components/Timeline/TimelineScrollable.js +19 -3
  48. package/dist/components/Timeline/TimelineSelection.d.ts +82 -3
  49. package/dist/components/Timeline/TimelineSelection.js +312 -30
  50. package/dist/components/Timeline/TimelineSequence.js +23 -15
  51. package/dist/components/Timeline/TimelineSequenceItem.js +48 -73
  52. package/dist/components/Timeline/TimelineSequenceName.js +3 -17
  53. package/dist/components/Timeline/TimelineSequencePropItem.js +37 -37
  54. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +5 -5
  55. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +46 -44
  56. package/dist/components/Timeline/TimelineTimeIndicators.js +4 -2
  57. package/dist/components/Timeline/TimelineTransformOriginField.d.ts +11 -0
  58. package/dist/components/Timeline/TimelineTransformOriginField.js +138 -0
  59. package/dist/components/Timeline/TimelineTranslateField.js +24 -19
  60. package/dist/components/Timeline/TimelineUvCoordinateField.js +18 -12
  61. package/dist/components/Timeline/{apply-effect-response-to-code-values.d.ts → apply-effect-response-to-prop-statuses.d.ts} +1 -1
  62. package/dist/components/Timeline/{apply-effect-response-to-code-values.js → apply-effect-response-to-prop-statuses.js} +3 -3
  63. package/dist/components/Timeline/call-add-keyframe.d.ts +22 -5
  64. package/dist/components/Timeline/call-add-keyframe.js +71 -7
  65. package/dist/components/Timeline/call-delete-keyframe.d.ts +7 -7
  66. package/dist/components/Timeline/call-delete-keyframe.js +7 -7
  67. package/dist/components/Timeline/call-move-keyframe.d.ts +3 -3
  68. package/dist/components/Timeline/call-move-keyframe.js +3 -3
  69. package/dist/components/Timeline/call-update-keyframe-settings.d.ts +5 -5
  70. package/dist/components/Timeline/call-update-keyframe-settings.js +6 -6
  71. package/dist/components/Timeline/delete-selected-keyframe.d.ts +5 -5
  72. package/dist/components/Timeline/delete-selected-keyframe.js +5 -5
  73. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +5 -5
  74. package/dist/components/Timeline/delete-selected-timeline-item.js +28 -16
  75. package/dist/components/Timeline/get-node-keyframes.d.ts +3 -3
  76. package/dist/components/Timeline/get-node-keyframes.js +4 -4
  77. package/dist/components/Timeline/get-timeline-easing-segments.d.ts +9 -0
  78. package/dist/components/Timeline/get-timeline-easing-segments.js +19 -0
  79. package/dist/components/Timeline/reset-selected-timeline-props.d.ts +7 -7
  80. package/dist/components/Timeline/reset-selected-timeline-props.js +23 -15
  81. package/dist/components/Timeline/save-effect-prop.d.ts +2 -2
  82. package/dist/components/Timeline/save-effect-prop.js +5 -5
  83. package/dist/components/Timeline/save-prop-queue.d.ts +3 -3
  84. package/dist/components/Timeline/save-prop-queue.js +3 -3
  85. package/dist/components/Timeline/save-sequence-prop.d.ts +3 -3
  86. package/dist/components/Timeline/save-sequence-prop.js +4 -4
  87. package/dist/components/Timeline/timeline-field-utils.d.ts +10 -0
  88. package/dist/components/Timeline/timeline-field-utils.js +26 -5
  89. package/dist/components/Timeline/timeline-rotation-utils.d.ts +2 -0
  90. package/dist/components/Timeline/timeline-rotation-utils.js +32 -0
  91. package/dist/components/Timeline/timeline-translate-utils.d.ts +1 -1
  92. package/dist/components/Timeline/timeline-translate-utils.js +4 -5
  93. package/dist/components/Timeline/transform-origin-utils.d.ts +24 -0
  94. package/dist/components/Timeline/transform-origin-utils.js +170 -0
  95. package/dist/components/Timeline/update-selected-easing.d.ts +35 -0
  96. package/dist/components/Timeline/update-selected-easing.js +133 -0
  97. package/dist/components/Timeline/use-expanded-track-keyframe-rows.d.ts +1 -0
  98. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +35 -7
  99. package/dist/components/Timeline/use-sequence-props-subscription.js +3 -3
  100. package/dist/components/Timeline/use-timeline-height.js +3 -3
  101. package/dist/components/Timeline/use-timeline-keyframe-drag.js +13 -11
  102. package/dist/components/canvas-capture-enabled.d.ts +1 -0
  103. package/dist/components/canvas-capture-enabled.js +4 -0
  104. package/dist/components/effect-drag-and-drop.d.ts +11 -0
  105. package/dist/components/effect-drag-and-drop.js +73 -0
  106. package/dist/components/import-assets.d.ts +15 -0
  107. package/dist/components/import-assets.js +63 -1
  108. package/dist/components/selected-outline-geometry.d.ts +20 -0
  109. package/dist/components/selected-outline-geometry.js +18 -0
  110. package/dist/components/selected-outline-uv.d.ts +46 -0
  111. package/dist/components/selected-outline-uv.js +240 -0
  112. package/dist/esm/{chunk-q0jkt0zq.js → chunk-qaqqvw4q.js} +8096 -5307
  113. package/dist/esm/internals.mjs +8096 -5307
  114. package/dist/esm/previewEntry.mjs +8106 -5317
  115. package/dist/esm/renderEntry.mjs +1 -1
  116. package/dist/helpers/colors.d.ts +0 -1
  117. package/dist/helpers/colors.js +1 -2
  118. package/dist/helpers/timeline-layout.d.ts +6 -6
  119. package/dist/helpers/timeline-layout.js +5 -5
  120. package/dist/state/modals.d.ts +2 -4
  121. package/package.json +11 -10
  122. package/dist/components/NewComposition/DeleteStaticFile.d.ts +0 -4
  123. package/dist/components/NewComposition/DeleteStaticFile.js +0 -44
@@ -113,13 +113,13 @@ const effectStatusToSnapshot = (effect) => {
113
113
  params,
114
114
  };
115
115
  };
116
- const getSnapshotsFromSelection = ({ selection, codeValues, }) => {
116
+ const getSnapshotsFromSelection = ({ selection, propStatuses, }) => {
117
117
  if (selection.type !== 'sequence-effect' &&
118
118
  selection.type !== 'sequence-all-effects') {
119
119
  return null;
120
120
  }
121
121
  const { sequenceSubscriptionKey } = selection.nodePathInfo;
122
- const sequenceStatus = codeValues[remotion_1.Internals.makeSequencePropsSubscriptionKey(sequenceSubscriptionKey)];
122
+ const sequenceStatus = propStatuses[remotion_1.Internals.makeSequencePropsSubscriptionKey(sequenceSubscriptionKey)];
123
123
  if (!sequenceStatus || !sequenceStatus.canUpdate) {
124
124
  return null;
125
125
  }
@@ -143,11 +143,11 @@ const getSnapshotsFromSelection = ({ selection, codeValues, }) => {
143
143
  return snapshots;
144
144
  };
145
145
  exports.getSnapshotsFromSelection = getSnapshotsFromSelection;
146
- const getEffectPropClipboardDataFromSelection = ({ selection, codeValues, }) => {
146
+ const getEffectPropClipboardDataFromSelection = ({ selection, propStatuses, }) => {
147
147
  if (selection.type !== 'sequence-effect-prop') {
148
148
  return null;
149
149
  }
150
- const sequenceStatus = codeValues[remotion_1.Internals.makeSequencePropsSubscriptionKey(selection.nodePathInfo.sequenceSubscriptionKey)];
150
+ const sequenceStatus = propStatuses[remotion_1.Internals.makeSequencePropsSubscriptionKey(selection.nodePathInfo.sequenceSubscriptionKey)];
151
151
  if (!sequenceStatus || !sequenceStatus.canUpdate) {
152
152
  return null;
153
153
  }
@@ -176,7 +176,7 @@ const getEffectPropClipboardDataFromSelection = ({ selection, codeValues, }) =>
176
176
  };
177
177
  };
178
178
  exports.getEffectPropClipboardDataFromSelection = getEffectPropClipboardDataFromSelection;
179
- const getPasteEffectPropTarget = ({ selectedItems, payload, codeValues, sequences, overrideIdsToNodePaths, }) => {
179
+ const getPasteEffectPropTarget = ({ selectedItems, payload, propStatuses, sequences, overrideIdsToNodePaths, }) => {
180
180
  var _a;
181
181
  if (selectedItems.length === 0) {
182
182
  return { type: 'none' };
@@ -223,7 +223,7 @@ const getPasteEffectPropTarget = ({ selectedItems, payload, codeValues, sequence
223
223
  if (!effect || !isVisibleFieldSchema(fieldSchema)) {
224
224
  return { type: 'prop-mismatch' };
225
225
  }
226
- const sequenceStatus = codeValues[remotion_1.Internals.makeSequencePropsSubscriptionKey(selection.nodePathInfo.sequenceSubscriptionKey)];
226
+ const sequenceStatus = propStatuses[remotion_1.Internals.makeSequencePropsSubscriptionKey(selection.nodePathInfo.sequenceSubscriptionKey)];
227
227
  if (!(sequenceStatus === null || sequenceStatus === void 0 ? void 0 : sequenceStatus.canUpdate)) {
228
228
  return { type: 'uncopyable' };
229
229
  }
@@ -254,9 +254,9 @@ const TimelineClipboardKeybindings = () => {
254
254
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
255
255
  const { canSelect } = (0, TimelineSelection_1.useTimelineSelection)();
256
256
  const currentSelection = (0, TimelineSelection_1.useCurrentTimelineSelectionStateAsRef)();
257
- const { codeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeCodeValuesContext);
258
- const { setCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
259
- const { sequences } = (0, react_1.useContext)(remotion_1.Internals.SequenceManager);
257
+ const propStatusesRef = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesRefContext);
258
+ const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
259
+ const sequencesRef = (0, react_1.useContext)(remotion_1.Internals.SequenceManagerRefContext);
260
260
  const { overrideIdToNodePathMappings } = (0, react_1.useContext)(remotion_1.Internals.OverrideIdsToNodePathsGettersContext);
261
261
  (0, react_1.useEffect)(() => {
262
262
  if (!canSelect || previewServerState.type !== 'connected') {
@@ -269,6 +269,7 @@ const TimelineClipboardKeybindings = () => {
269
269
  callback: (e) => {
270
270
  var _a;
271
271
  const { selectedItems } = currentSelection.current;
272
+ const propStatuses = propStatusesRef.current;
272
273
  if (selectedItems.length === 0) {
273
274
  return;
274
275
  }
@@ -281,7 +282,7 @@ const TimelineClipboardKeybindings = () => {
281
282
  }
282
283
  const payload = (0, exports.getEffectPropClipboardDataFromSelection)({
283
284
  selection: selectedItems[0],
284
- codeValues,
285
+ propStatuses,
285
286
  });
286
287
  if (payload === null) {
287
288
  (0, NotificationCenter_1.showNotification)('Cannot copy effect prop because its value cannot be copied', 3000);
@@ -310,7 +311,7 @@ const TimelineClipboardKeybindings = () => {
310
311
  const snapshots = selectedItems.flatMap((selection) => {
311
312
  const itemSnapshots = (0, exports.getSnapshotsFromSelection)({
312
313
  selection,
313
- codeValues,
314
+ propStatuses,
314
315
  });
315
316
  return itemSnapshots !== null && itemSnapshots !== void 0 ? itemSnapshots : [null];
316
317
  });
@@ -352,6 +353,8 @@ const TimelineClipboardKeybindings = () => {
352
353
  navigator.clipboard
353
354
  .readText()
354
355
  .then((text) => {
356
+ const propStatuses = propStatusesRef.current;
357
+ const sequences = sequencesRef.current;
355
358
  const effectPropResult = (0, studio_shared_1.parseEffectPropClipboardDataResult)(text);
356
359
  if (effectPropResult.status !== 'invalid') {
357
360
  e.preventDefault();
@@ -362,7 +365,7 @@ const TimelineClipboardKeybindings = () => {
362
365
  const effectPropTarget = (0, exports.getPasteEffectPropTarget)({
363
366
  selectedItems,
364
367
  payload: effectPropResult.data,
365
- codeValues,
368
+ propStatuses,
366
369
  sequences,
367
370
  overrideIdsToNodePaths: overrideIdToNodePathMappings,
368
371
  });
@@ -406,7 +409,7 @@ const TimelineClipboardKeybindings = () => {
406
409
  }),
407
410
  defaultValue: effectPropTarget.defaultValue,
408
411
  schema: effectPropTarget.schema,
409
- setCodeValues,
412
+ setPropStatuses,
410
413
  clientId,
411
414
  }).then(() => {
412
415
  (0, NotificationCenter_1.showNotification)('Pasted effect prop', 2000);
@@ -466,13 +469,13 @@ const TimelineClipboardKeybindings = () => {
466
469
  };
467
470
  }, [
468
471
  canSelect,
469
- codeValues,
470
472
  currentSelection,
471
473
  keybindings,
472
474
  overrideIdToNodePathMappings,
475
+ propStatusesRef,
473
476
  previewServerState,
474
- sequences,
475
- setCodeValues,
477
+ sequencesRef,
478
+ setPropStatuses,
476
479
  ]);
477
480
  return null;
478
481
  };
@@ -10,52 +10,39 @@ 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);
16
- const { sequences } = (0, react_1.useContext)(remotion_1.Internals.SequenceManager);
17
+ const sequencesRef = (0, react_1.useContext)(remotion_1.Internals.SequenceManagerRefContext);
17
18
  const { overrideIdToNodePathMappings } = (0, react_1.useContext)(remotion_1.Internals.OverrideIdsToNodePathsGettersContext);
18
- const { codeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeCodeValuesContext);
19
- const { setCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
20
- const { canSelect } = (0, TimelineSelection_1.useTimelineSelection)();
19
+ const propStatusesRef = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesRefContext);
20
+ const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
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
- if (selectedItems.length === 0) {
34
- return;
35
- }
36
- const resetPromise = (0, reset_selected_timeline_props_1.resetSelectedTimelineProps)({
37
- selections: selectedItems,
38
- sequences,
39
- overrideIdsToNodePaths: overrideIdToNodePathMappings,
40
- codeValues,
41
- setCodeValues,
42
- clientId,
43
- });
44
- if (resetPromise !== null) {
45
- resetPromise.catch(() => undefined);
46
- return;
47
- }
48
- const deletePromise = (0, delete_selected_timeline_item_1.deleteSelectedTimelineItems)({
49
- selections: selectedItems,
50
- sequences,
51
- overrideIdsToNodePaths: overrideIdToNodePathMappings,
52
- setCodeValues,
53
- clientId,
54
- confirm,
55
- });
56
- if (deletePromise === null) {
57
- return;
58
- }
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) {
59
46
  deletePromise
60
47
  .then((deleted) => {
61
48
  if (deleted) {
@@ -63,7 +50,49 @@ const TimelineDeleteKeybindings = () => {
63
50
  }
64
51
  })
65
52
  .catch(() => undefined);
66
- },
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,
59
+ sequences,
60
+ overrideIdsToNodePaths: overrideIdToNodePathMappings,
61
+ propStatuses,
62
+ setPropStatuses,
63
+ clientId,
64
+ easing: 'linear',
65
+ });
66
+ if (resetEasingPromise !== null) {
67
+ resetEasingPromise.catch(() => undefined);
68
+ return;
69
+ }
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,
67
96
  commandCtrlKey: false,
68
97
  preventDefault: true,
69
98
  triggerIfInputFieldFocused: false,
@@ -93,18 +122,20 @@ const TimelineDeleteKeybindings = () => {
93
122
  });
94
123
  return () => {
95
124
  backspace.unregister();
125
+ deleteKey.unregister();
96
126
  duplicate.unregister();
97
127
  };
98
128
  }, [
99
129
  canSelect,
100
- codeValues,
130
+ canSelectEasing,
101
131
  confirm,
102
132
  currentSelection,
103
133
  keybindings,
104
134
  overrideIdToNodePathMappings,
135
+ propStatusesRef,
105
136
  previewServerState,
106
- sequences,
107
- setCodeValues,
137
+ sequencesRef,
138
+ setPropStatuses,
108
139
  ]);
109
140
  return null;
110
141
  };
@@ -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 = () => {
@@ -68,15 +68,15 @@ const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, do
68
68
  var _b;
69
69
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
70
70
  const previewConnected = previewServerState.type === 'connected';
71
- const { codeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeCodeValuesContext);
72
- const { setCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
71
+ const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
72
+ const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
73
73
  const selection = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
74
74
  const [dropIndicator, setDropIndicator] = (0, react_1.useState)(null);
75
- const effectStatus = (0, react_1.useMemo)(() => remotion_1.Internals.getEffectCodeValuesCtx({
76
- codeValues,
75
+ const effectStatus = (0, react_1.useMemo)(() => remotion_1.Internals.getEffectPropStatusesCtx({
76
+ propStatuses,
77
77
  nodePath,
78
78
  effectIndex,
79
- }), [codeValues, nodePath, effectIndex]);
79
+ }), [propStatuses, nodePath, effectIndex]);
80
80
  const disabledStatus = effectStatus.type === 'can-update-effect'
81
81
  ? ((_b = (_a = effectStatus.props) === null || _a === void 0 ? void 0 : _a.disabled) !== null && _b !== void 0 ? _b : null)
82
82
  : null;
@@ -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]);
@@ -186,7 +185,7 @@ const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, do
186
185
  value: newValue,
187
186
  defaultValue,
188
187
  schema: effectSchema,
189
- setCodeValues,
188
+ setPropStatuses,
190
189
  clientId: previewServerState.clientId,
191
190
  });
192
191
  }, [
@@ -195,7 +194,7 @@ const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, do
195
194
  effectSchema,
196
195
  nodePath,
197
196
  previewServerState,
198
- setCodeValues,
197
+ setPropStatuses,
199
198
  validatedLocation.source,
200
199
  ]);
201
200
  const isExpanded = getIsExpanded(nodePathInfo);
@@ -43,15 +43,15 @@ const isResettableStatus = ({ status, defaultValue, }) => {
43
43
  const Value = ({ field, nodePath, validatedLocation, keyframeDisplayOffset }) => {
44
44
  var _a;
45
45
  var _b;
46
- const { setEffectDragOverrides, clearEffectDragOverrides, setCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
46
+ const { setEffectDragOverrides, clearEffectDragOverrides, setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
47
47
  const { getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
48
- const { codeValues: visualModeCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeCodeValuesContext);
48
+ const { propStatuses: visualModePropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
49
49
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
50
50
  const clientId = previewServerState.type === 'connected'
51
51
  ? previewServerState.clientId
52
52
  : null;
53
- const effectStatus = remotion_1.Internals.getEffectCodeValuesCtx({
54
- codeValues: visualModeCodeValues,
53
+ const effectStatus = remotion_1.Internals.getEffectPropStatusesCtx({
54
+ propStatuses: visualModePropStatuses,
55
55
  nodePath,
56
56
  effectIndex: field.effectIndex,
57
57
  });
@@ -110,8 +110,8 @@ const Value = ({ field, nodePath, validatedLocation, keyframeDisplayOffset }) =>
110
110
  }
111
111
  return (0, save_prop_queue_1.enqueueSavePropChange)({
112
112
  nodePath,
113
- setCodeValues,
114
- applyOptimistic: (prev) => (0, studio_shared_1.optimisticUpdateForEffectCodeValues)({
113
+ setPropStatuses,
114
+ applyOptimistic: (prev) => (0, studio_shared_1.optimisticUpdateForEffectPropStatuses)({
115
115
  previous: prev,
116
116
  effectIndex: field.effectIndex,
117
117
  fieldKey: field.key,
@@ -139,7 +139,7 @@ const Value = ({ field, nodePath, validatedLocation, keyframeDisplayOffset }) =>
139
139
  field.key,
140
140
  nodePath,
141
141
  propStatus,
142
- setCodeValues,
142
+ setPropStatuses,
143
143
  validatedLocation,
144
144
  ]);
145
145
  const onSaveKeyframed = (0, react_1.useCallback)((value, sourceFrame) => {
@@ -157,7 +157,7 @@ const Value = ({ field, nodePath, validatedLocation, keyframeDisplayOffset }) =>
157
157
  sourceFrame,
158
158
  value,
159
159
  schema: field.effectSchema,
160
- setCodeValues,
160
+ setPropStatuses,
161
161
  clientId,
162
162
  });
163
163
  }, [
@@ -166,7 +166,7 @@ const Value = ({ field, nodePath, validatedLocation, keyframeDisplayOffset }) =>
166
166
  field.effectSchema,
167
167
  field.key,
168
168
  nodePath,
169
- setCodeValues,
169
+ setPropStatuses,
170
170
  validatedLocation,
171
171
  ]);
172
172
  if (field.fieldSchema.type === 'scale') {
@@ -203,7 +203,7 @@ const Value = ({ field, nodePath, validatedLocation, keyframeDisplayOffset }) =>
203
203
  return jsx_runtime_1.jsx(TimelineSchemaField_1.UnsupportedStatus, { label: (0, get_timeline_keyframes_1.getComputedStatusLabel)(propStatus) });
204
204
  }
205
205
  const effectiveValue = remotion_1.Internals.getEffectiveVisualModeValue({
206
- codeValue: propStatus,
206
+ propStatus,
207
207
  dragOverrideValue,
208
208
  defaultValue: field.fieldSchema.default,
209
209
  frame: jsxFrame,
@@ -216,8 +216,8 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
216
216
  var _b, _c;
217
217
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
218
218
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
219
- const { setCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
220
- const { codeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeCodeValuesContext);
219
+ const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
220
+ const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
221
221
  const { getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
222
222
  const selection = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
223
223
  const style = (0, react_1.useMemo)(() => {
@@ -226,11 +226,11 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
226
226
  height: field.rowHeight,
227
227
  };
228
228
  }, [field.rowHeight]);
229
- const effectStatus = (0, react_1.useMemo)(() => remotion_1.Internals.getEffectCodeValuesCtx({
230
- codeValues,
229
+ const effectStatus = (0, react_1.useMemo)(() => remotion_1.Internals.getEffectPropStatusesCtx({
230
+ propStatuses,
231
231
  nodePath,
232
232
  effectIndex: field.effectIndex,
233
- }), [codeValues, nodePath, field.effectIndex]);
233
+ }), [propStatuses, nodePath, field.effectIndex]);
234
234
  const propStatus = effectStatus.type === 'can-update-effect'
235
235
  ? ((_b = (_a = effectStatus.props) === null || _a === void 0 ? void 0 : _a[field.key]) !== null && _b !== void 0 ? _b : null)
236
236
  : null;
@@ -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;
@@ -278,7 +278,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
278
278
  value: field.fieldSchema.default,
279
279
  defaultValue,
280
280
  schema: field.effectSchema,
281
- setCodeValues,
281
+ setPropStatuses,
282
282
  clientId: previewServerState.clientId,
283
283
  });
284
284
  }, [
@@ -290,7 +290,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
290
290
  field.key,
291
291
  nodePath,
292
292
  previewServerState,
293
- setCodeValues,
293
+ setPropStatuses,
294
294
  validatedLocation.source,
295
295
  ]);
296
296
  const onOpenKeyframeSettings = (0, react_1.useCallback)(() => {
@@ -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
  }>;
@@ -37,7 +37,9 @@ exports.TimelineExpandedKeyframeRow = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
39
  const timeline_layout_1 = require("../../helpers/timeline-layout");
40
+ const get_timeline_easing_segments_1 = require("./get-timeline-easing-segments");
40
41
  const TimelineKeyframeDiamond_1 = require("./TimelineKeyframeDiamond");
42
+ const TimelineKeyframeEasingLine_1 = require("./TimelineKeyframeEasingLine");
41
43
  const TimelineSelection_1 = require("./TimelineSelection");
42
44
  const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
43
45
  const row = {
@@ -46,10 +48,13 @@ const row = {
46
48
  const rowSeparator = {
47
49
  height: timeline_layout_1.TIMELINE_ITEM_BORDER_BOTTOM,
48
50
  };
49
- const TimelineExpandedKeyframeRowUnmemoized = ({ height, keyframes, nodePathInfo, showSeparator }) => {
51
+ const TimelineExpandedKeyframeRowUnmemoized = ({ height, keyframes, canEditEasing, nodePathInfo, showSeparator }) => {
50
52
  const timelineWidth = (0, react_1.useContext)(TimelineWidthProvider_1.TimelineWidthContext);
51
53
  const { selected: rowSelected } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
52
- 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, keyframes.map((keyframe) => (jsx_runtime_1.jsx(TimelineKeyframeDiamond_1.TimelineKeyframeDiamond, { frame: keyframe.frame, rowHeight: height, nodePathInfo: nodePathInfo }, keyframe.frame)))] })
54
+ const easingSegments = canEditEasing
55
+ ? (0, get_timeline_easing_segments_1.getTimelineEasingSegments)(keyframes)
56
+ : [];
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)))] })
53
58
  ] }));
54
59
  };
55
60
  exports.TimelineExpandedKeyframeRow = react_1.default.memo(TimelineExpandedKeyframeRowUnmemoized);
@@ -56,28 +56,28 @@ const separator = {
56
56
  const TimelineExpandedSection = ({ sequence, validatedLocation, nodePathInfo, nestedDepth, keyframeDisplayOffset, }) => {
57
57
  const { getIsExpanded } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksGetterContext);
58
58
  const { toggleTrack } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
59
- const { codeValues: visualModeCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeCodeValuesContext);
59
+ const { propStatuses: visualModePropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
60
60
  const { getDragOverrides, getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
61
61
  const tree = (0, react_1.useMemo)(() => (0, timeline_layout_1.buildTimelineTree)({
62
62
  sequence,
63
63
  nodePathInfo,
64
64
  getDragOverrides,
65
65
  getEffectDragOverrides,
66
- codeValues: visualModeCodeValues,
66
+ propStatuses: visualModePropStatuses,
67
67
  }), [
68
68
  sequence,
69
69
  nodePathInfo,
70
70
  getDragOverrides,
71
71
  getEffectDragOverrides,
72
- visualModeCodeValues,
72
+ visualModePropStatuses,
73
73
  ]);
74
74
  const flat = (0, react_1.useMemo)(() => (0, timeline_layout_1.flattenVisibleTreeNodes)({ nodes: tree, getIsExpanded }), [tree, getIsExpanded]);
75
75
  const expandedHeight = (0, react_1.useMemo)(() => (0, timeline_layout_1.getExpandedTrackHeight)({
76
76
  sequence,
77
77
  nodePathInfo,
78
78
  getIsExpanded,
79
- codeValues: visualModeCodeValues,
80
- }), [sequence, nodePathInfo, getIsExpanded, visualModeCodeValues]);
79
+ propStatuses: visualModePropStatuses,
80
+ }), [sequence, nodePathInfo, getIsExpanded, visualModePropStatuses]);
81
81
  const style = (0, react_1.useMemo)(() => {
82
82
  return {
83
83
  ...expandedSectionBase,
@@ -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;