@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
@@ -1,14 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.callAddEffectKeyframe = exports.callAddSequenceKeyframe = void 0;
3
+ exports.callAddEffectKeyframe = exports.callAddKeyframes = exports.callAddSequenceKeyframe = void 0;
4
4
  const studio_shared_1 = require("@remotion/studio-shared");
5
5
  const call_api_1 = require("../call-api");
6
- const apply_effect_response_to_code_values_1 = require("./apply-effect-response-to-code-values");
6
+ const apply_effect_response_to_prop_statuses_1 = require("./apply-effect-response-to-prop-statuses");
7
7
  const save_prop_queue_1 = require("./save-prop-queue");
8
- const callAddSequenceKeyframe = ({ fileName, nodePath, fieldKey, sourceFrame, value, schema, setCodeValues, clientId, }) => {
8
+ const groupByNodePath = (keyframes) => {
9
+ var _a;
10
+ const groups = new Map();
11
+ for (const keyframe of keyframes) {
12
+ const key = JSON.stringify(keyframe.nodePath);
13
+ const group = (_a = groups.get(key)) !== null && _a !== void 0 ? _a : [];
14
+ group.push(keyframe);
15
+ groups.set(key, group);
16
+ }
17
+ return [...groups.values()];
18
+ };
19
+ const callAddSequenceKeyframe = ({ fileName, nodePath, fieldKey, sourceFrame, value, schema, setPropStatuses, clientId, }) => {
9
20
  return (0, save_prop_queue_1.enqueueSavePropChange)({
10
21
  nodePath,
11
- setCodeValues,
22
+ setPropStatuses,
12
23
  applyOptimistic: (prev) => (0, studio_shared_1.optimisticAddSequenceKeyframe)({
13
24
  previous: prev,
14
25
  fieldKey,
@@ -29,10 +40,63 @@ const callAddSequenceKeyframe = ({ fileName, nodePath, fieldKey, sourceFrame, va
29
40
  });
30
41
  };
31
42
  exports.callAddSequenceKeyframe = callAddSequenceKeyframe;
32
- const callAddEffectKeyframe = ({ fileName, nodePath, effectIndex, fieldKey, sourceFrame, value, schema, setCodeValues, clientId, }) => {
43
+ const callAddKeyframes = ({ sequenceKeyframes, effectKeyframes, setPropStatuses, clientId, }) => {
44
+ if (sequenceKeyframes.length === 0 && effectKeyframes.length === 0) {
45
+ return Promise.resolve();
46
+ }
47
+ for (const keyframes of groupByNodePath(sequenceKeyframes)) {
48
+ const [firstKeyframe] = keyframes;
49
+ if (!firstKeyframe) {
50
+ continue;
51
+ }
52
+ setPropStatuses(firstKeyframe.nodePath, (prev) => keyframes.reduce((current, keyframe) => (0, studio_shared_1.optimisticAddSequenceKeyframe)({
53
+ previous: current,
54
+ fieldKey: keyframe.fieldKey,
55
+ frame: keyframe.sourceFrame,
56
+ value: keyframe.value,
57
+ schema: keyframe.schema,
58
+ }), prev));
59
+ }
60
+ for (const keyframes of groupByNodePath(effectKeyframes)) {
61
+ const [firstKeyframe] = keyframes;
62
+ if (!firstKeyframe) {
63
+ continue;
64
+ }
65
+ setPropStatuses(firstKeyframe.nodePath, (prev) => keyframes.reduce((current, keyframe) => (0, studio_shared_1.optimisticAddEffectKeyframe)({
66
+ previous: current,
67
+ effectIndex: keyframe.effectIndex,
68
+ fieldKey: keyframe.fieldKey,
69
+ frame: keyframe.sourceFrame,
70
+ value: keyframe.value,
71
+ schema: keyframe.schema,
72
+ }), prev));
73
+ }
74
+ return (0, call_api_1.callApi)('/api/add-keyframes', {
75
+ sequenceKeyframes: sequenceKeyframes.map((keyframe) => ({
76
+ fileName: keyframe.fileName,
77
+ nodePath: keyframe.nodePath,
78
+ key: keyframe.fieldKey,
79
+ frame: keyframe.sourceFrame,
80
+ value: JSON.stringify(keyframe.value),
81
+ schema: keyframe.schema,
82
+ })),
83
+ effectKeyframes: effectKeyframes.map((keyframe) => ({
84
+ fileName: keyframe.fileName,
85
+ sequenceNodePath: keyframe.nodePath,
86
+ effectIndex: keyframe.effectIndex,
87
+ key: keyframe.fieldKey,
88
+ frame: keyframe.sourceFrame,
89
+ value: JSON.stringify(keyframe.value),
90
+ schema: keyframe.schema,
91
+ })),
92
+ clientId,
93
+ }).then(() => undefined);
94
+ };
95
+ exports.callAddKeyframes = callAddKeyframes;
96
+ const callAddEffectKeyframe = ({ fileName, nodePath, effectIndex, fieldKey, sourceFrame, value, schema, setPropStatuses, clientId, }) => {
33
97
  return (0, save_prop_queue_1.enqueueSavePropChange)({
34
98
  nodePath,
35
- setCodeValues,
99
+ setPropStatuses,
36
100
  applyOptimistic: (prev) => (0, studio_shared_1.optimisticAddEffectKeyframe)({
37
101
  previous: prev,
38
102
  effectIndex,
@@ -41,7 +105,7 @@ const callAddEffectKeyframe = ({ fileName, nodePath, effectIndex, fieldKey, sour
41
105
  value,
42
106
  schema,
43
107
  }),
44
- applyServerResponse: (prev, response) => (0, apply_effect_response_to_code_values_1.applyEffectResponseToCodeValues)({ previous: prev, response }),
108
+ applyServerResponse: (prev, response) => (0, apply_effect_response_to_prop_statuses_1.applyEffectResponseToPropStatuses)({ previous: prev, response }),
45
109
  apiCall: () => (0, call_api_1.callApi)('/api/add-effect-keyframe', {
46
110
  fileName,
47
111
  sequenceNodePath: nodePath,
@@ -1,5 +1,5 @@
1
1
  import type { SequencePropsSubscriptionKey, SequenceSchema } from 'remotion';
2
- import type { SetCodeValues } from './save-sequence-prop';
2
+ import type { SetPropStatuses } from './save-sequence-prop';
3
3
  export type DeleteSequenceKeyframeChange = {
4
4
  fileName: string;
5
5
  nodePath: SequencePropsSubscriptionKey;
@@ -10,28 +10,28 @@ export type DeleteSequenceKeyframeChange = {
10
10
  export type DeleteEffectKeyframeChange = DeleteSequenceKeyframeChange & {
11
11
  effectIndex: number;
12
12
  };
13
- export declare const callDeleteSequenceKeyframe: ({ fileName, nodePath, fieldKey, sourceFrame, schema, setCodeValues, clientId, }: {
13
+ export declare const callDeleteSequenceKeyframe: ({ fileName, nodePath, fieldKey, sourceFrame, schema, setPropStatuses, clientId, }: {
14
14
  fileName: string;
15
15
  nodePath: SequencePropsSubscriptionKey;
16
16
  fieldKey: string;
17
17
  sourceFrame: number;
18
18
  schema: SequenceSchema;
19
- setCodeValues: SetCodeValues;
19
+ setPropStatuses: SetPropStatuses;
20
20
  clientId: string;
21
21
  }) => Promise<void>;
22
- export declare const callDeleteEffectKeyframe: ({ fileName, nodePath, effectIndex, fieldKey, sourceFrame, schema, setCodeValues, clientId, }: {
22
+ export declare const callDeleteEffectKeyframe: ({ fileName, nodePath, effectIndex, fieldKey, sourceFrame, schema, setPropStatuses, clientId, }: {
23
23
  fileName: string;
24
24
  nodePath: SequencePropsSubscriptionKey;
25
25
  effectIndex: number;
26
26
  fieldKey: string;
27
27
  sourceFrame: number;
28
28
  schema: SequenceSchema;
29
- setCodeValues: SetCodeValues;
29
+ setPropStatuses: SetPropStatuses;
30
30
  clientId: string;
31
31
  }) => Promise<void>;
32
- export declare const callDeleteKeyframes: ({ sequenceKeyframes, effectKeyframes, setCodeValues, clientId, }: {
32
+ export declare const callDeleteKeyframes: ({ sequenceKeyframes, effectKeyframes, setPropStatuses, clientId, }: {
33
33
  sequenceKeyframes: DeleteSequenceKeyframeChange[];
34
34
  effectKeyframes: DeleteEffectKeyframeChange[];
35
- setCodeValues: SetCodeValues;
35
+ setPropStatuses: SetPropStatuses;
36
36
  clientId: string;
37
37
  }) => Promise<void>;
@@ -15,10 +15,10 @@ const groupByNodePath = (keyframes) => {
15
15
  }
16
16
  return [...groups.values()];
17
17
  };
18
- const callDeleteSequenceKeyframe = ({ fileName, nodePath, fieldKey, sourceFrame, schema, setCodeValues, clientId, }) => {
18
+ const callDeleteSequenceKeyframe = ({ fileName, nodePath, fieldKey, sourceFrame, schema, setPropStatuses, clientId, }) => {
19
19
  return (0, save_prop_queue_1.enqueueSavePropChange)({
20
20
  nodePath,
21
- setCodeValues,
21
+ setPropStatuses,
22
22
  applyOptimistic: (prev) => (0, studio_shared_1.optimisticDeleteSequenceKeyframe)({
23
23
  previous: prev,
24
24
  fieldKey,
@@ -41,10 +41,10 @@ const callDeleteSequenceKeyframe = ({ fileName, nodePath, fieldKey, sourceFrame,
41
41
  });
42
42
  };
43
43
  exports.callDeleteSequenceKeyframe = callDeleteSequenceKeyframe;
44
- const callDeleteEffectKeyframe = ({ fileName, nodePath, effectIndex, fieldKey, sourceFrame, schema, setCodeValues, clientId, }) => {
44
+ const callDeleteEffectKeyframe = ({ fileName, nodePath, effectIndex, fieldKey, sourceFrame, schema, setPropStatuses, clientId, }) => {
45
45
  return (0, save_prop_queue_1.enqueueSavePropChange)({
46
46
  nodePath,
47
- setCodeValues,
47
+ setPropStatuses,
48
48
  applyOptimistic: (prev) => (0, studio_shared_1.optimisticDeleteEffectKeyframe)({
49
49
  previous: prev,
50
50
  effectIndex,
@@ -69,7 +69,7 @@ const callDeleteEffectKeyframe = ({ fileName, nodePath, effectIndex, fieldKey, s
69
69
  });
70
70
  };
71
71
  exports.callDeleteEffectKeyframe = callDeleteEffectKeyframe;
72
- const callDeleteKeyframes = ({ sequenceKeyframes, effectKeyframes, setCodeValues, clientId, }) => {
72
+ const callDeleteKeyframes = ({ sequenceKeyframes, effectKeyframes, setPropStatuses, clientId, }) => {
73
73
  if (sequenceKeyframes.length === 0 && effectKeyframes.length === 0) {
74
74
  return Promise.resolve();
75
75
  }
@@ -78,7 +78,7 @@ const callDeleteKeyframes = ({ sequenceKeyframes, effectKeyframes, setCodeValues
78
78
  if (!firstKeyframe) {
79
79
  continue;
80
80
  }
81
- setCodeValues(firstKeyframe.nodePath, (prev) => (0, studio_shared_1.optimisticDeleteSequenceKeyframes)({
81
+ setPropStatuses(firstKeyframe.nodePath, (prev) => (0, studio_shared_1.optimisticDeleteSequenceKeyframes)({
82
82
  previous: prev,
83
83
  keyframes: keyframes.map((keyframe) => ({
84
84
  fieldKey: keyframe.fieldKey,
@@ -91,7 +91,7 @@ const callDeleteKeyframes = ({ sequenceKeyframes, effectKeyframes, setCodeValues
91
91
  if (!firstKeyframe) {
92
92
  continue;
93
93
  }
94
- setCodeValues(firstKeyframe.nodePath, (prev) => (0, studio_shared_1.optimisticDeleteEffectKeyframes)({
94
+ setPropStatuses(firstKeyframe.nodePath, (prev) => (0, studio_shared_1.optimisticDeleteEffectKeyframes)({
95
95
  previous: prev,
96
96
  keyframes: keyframes.map((keyframe) => ({
97
97
  effectIndex: keyframe.effectIndex,
@@ -1,5 +1,5 @@
1
1
  import type { SequencePropsSubscriptionKey, SequenceSchema } from 'remotion';
2
- import type { SetCodeValues } from './save-sequence-prop';
2
+ import type { SetPropStatuses } from './save-sequence-prop';
3
3
  export type MoveSequenceKeyframeChange = {
4
4
  fileName: string;
5
5
  nodePath: SequencePropsSubscriptionKey;
@@ -11,9 +11,9 @@ export type MoveSequenceKeyframeChange = {
11
11
  export type MoveEffectKeyframeChange = MoveSequenceKeyframeChange & {
12
12
  effectIndex: number;
13
13
  };
14
- export declare const callMoveKeyframes: ({ sequenceKeyframes, effectKeyframes, setCodeValues, clientId, }: {
14
+ export declare const callMoveKeyframes: ({ sequenceKeyframes, effectKeyframes, setPropStatuses, clientId, }: {
15
15
  sequenceKeyframes: MoveSequenceKeyframeChange[];
16
16
  effectKeyframes: MoveEffectKeyframeChange[];
17
- setCodeValues: SetCodeValues;
17
+ setPropStatuses: SetPropStatuses;
18
18
  clientId: string;
19
19
  }) => Promise<void>;
@@ -14,7 +14,7 @@ const groupByNodePath = (keyframes) => {
14
14
  }
15
15
  return [...groups.values()];
16
16
  };
17
- const callMoveKeyframes = ({ sequenceKeyframes, effectKeyframes, setCodeValues, clientId, }) => {
17
+ const callMoveKeyframes = ({ sequenceKeyframes, effectKeyframes, setPropStatuses, clientId, }) => {
18
18
  if (sequenceKeyframes.length === 0 && effectKeyframes.length === 0) {
19
19
  return Promise.resolve();
20
20
  }
@@ -23,7 +23,7 @@ const callMoveKeyframes = ({ sequenceKeyframes, effectKeyframes, setCodeValues,
23
23
  if (!firstKeyframe) {
24
24
  continue;
25
25
  }
26
- setCodeValues(firstKeyframe.nodePath, (prev) => (0, studio_shared_1.optimisticMoveSequenceKeyframes)({
26
+ setPropStatuses(firstKeyframe.nodePath, (prev) => (0, studio_shared_1.optimisticMoveSequenceKeyframes)({
27
27
  previous: prev,
28
28
  keyframes: keyframes.map((keyframe) => ({
29
29
  fieldKey: keyframe.fieldKey,
@@ -37,7 +37,7 @@ const callMoveKeyframes = ({ sequenceKeyframes, effectKeyframes, setCodeValues,
37
37
  if (!firstKeyframe) {
38
38
  continue;
39
39
  }
40
- setCodeValues(firstKeyframe.nodePath, (prev) => (0, studio_shared_1.optimisticMoveEffectKeyframes)({
40
+ setPropStatuses(firstKeyframe.nodePath, (prev) => (0, studio_shared_1.optimisticMoveEffectKeyframes)({
41
41
  previous: prev,
42
42
  keyframes: keyframes.map((keyframe) => ({
43
43
  effectIndex: keyframe.effectIndex,
@@ -1,22 +1,22 @@
1
1
  import { type KeyframeSettings } from '@remotion/studio-shared';
2
2
  import type { SequencePropsSubscriptionKey, SequenceSchema } from 'remotion';
3
- import type { SetCodeValues } from './save-sequence-prop';
4
- export declare const callUpdateSequenceKeyframeSettings: ({ fileName, nodePath, fieldKey, settings, schema, setCodeValues, clientId, }: {
3
+ import type { SetPropStatuses } from './save-sequence-prop';
4
+ export declare const callUpdateSequenceKeyframeSettings: ({ fileName, nodePath, fieldKey, settings, schema, setPropStatuses, clientId, }: {
5
5
  fileName: string;
6
6
  nodePath: SequencePropsSubscriptionKey;
7
7
  fieldKey: string;
8
8
  settings: KeyframeSettings;
9
9
  schema: SequenceSchema;
10
- setCodeValues: SetCodeValues;
10
+ setPropStatuses: SetPropStatuses;
11
11
  clientId: string;
12
12
  }) => Promise<void>;
13
- export declare const callUpdateEffectKeyframeSettings: ({ fileName, nodePath, effectIndex, fieldKey, settings, schema, setCodeValues, clientId, }: {
13
+ export declare const callUpdateEffectKeyframeSettings: ({ fileName, nodePath, effectIndex, fieldKey, settings, schema, setPropStatuses, clientId, }: {
14
14
  fileName: string;
15
15
  nodePath: SequencePropsSubscriptionKey;
16
16
  effectIndex: number;
17
17
  fieldKey: string;
18
18
  settings: KeyframeSettings;
19
19
  schema: SequenceSchema;
20
- setCodeValues: SetCodeValues;
20
+ setPropStatuses: SetPropStatuses;
21
21
  clientId: string;
22
22
  }) => Promise<void>;
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.callUpdateEffectKeyframeSettings = exports.callUpdateSequenceKeyframeSettings = void 0;
4
4
  const studio_shared_1 = require("@remotion/studio-shared");
5
5
  const call_api_1 = require("../call-api");
6
- const apply_effect_response_to_code_values_1 = require("./apply-effect-response-to-code-values");
6
+ const apply_effect_response_to_prop_statuses_1 = require("./apply-effect-response-to-prop-statuses");
7
7
  const save_prop_queue_1 = require("./save-prop-queue");
8
- const callUpdateSequenceKeyframeSettings = ({ fileName, nodePath, fieldKey, settings, schema, setCodeValues, clientId, }) => {
8
+ const callUpdateSequenceKeyframeSettings = ({ fileName, nodePath, fieldKey, settings, schema, setPropStatuses, clientId, }) => {
9
9
  return (0, save_prop_queue_1.enqueueSavePropChange)({
10
10
  nodePath,
11
- setCodeValues,
11
+ setPropStatuses,
12
12
  applyOptimistic: (prev) => (0, studio_shared_1.optimisticUpdateSequenceKeyframeSettings)({
13
13
  previous: prev,
14
14
  fieldKey,
@@ -26,17 +26,17 @@ const callUpdateSequenceKeyframeSettings = ({ fileName, nodePath, fieldKey, sett
26
26
  });
27
27
  };
28
28
  exports.callUpdateSequenceKeyframeSettings = callUpdateSequenceKeyframeSettings;
29
- const callUpdateEffectKeyframeSettings = ({ fileName, nodePath, effectIndex, fieldKey, settings, schema, setCodeValues, clientId, }) => {
29
+ const callUpdateEffectKeyframeSettings = ({ fileName, nodePath, effectIndex, fieldKey, settings, schema, setPropStatuses, clientId, }) => {
30
30
  return (0, save_prop_queue_1.enqueueSavePropChange)({
31
31
  nodePath,
32
- setCodeValues,
32
+ setPropStatuses,
33
33
  applyOptimistic: (prev) => (0, studio_shared_1.optimisticUpdateEffectKeyframeSettings)({
34
34
  previous: prev,
35
35
  effectIndex,
36
36
  fieldKey,
37
37
  settings,
38
38
  }),
39
- applyServerResponse: (prev, response) => (0, apply_effect_response_to_code_values_1.applyEffectResponseToCodeValues)({ previous: prev, response }),
39
+ applyServerResponse: (prev, response) => (0, apply_effect_response_to_prop_statuses_1.applyEffectResponseToPropStatuses)({ previous: prev, response }),
40
40
  apiCall: () => (0, call_api_1.callApi)('/api/update-effect-keyframe-settings', {
41
41
  fileName,
42
42
  sequenceNodePath: nodePath,
@@ -1,21 +1,21 @@
1
1
  import type { OverrideIdToNodePaths, TSequence } from 'remotion';
2
2
  import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
3
- import type { SetCodeValues } from './save-sequence-prop';
4
- export declare const deleteSelectedKeyframe: ({ nodePathInfo, frame, sequences, overrideIdsToNodePaths, setCodeValues, clientId, }: {
3
+ import type { SetPropStatuses } from './save-sequence-prop';
4
+ export declare const deleteSelectedKeyframe: ({ nodePathInfo, frame, sequences, overrideIdsToNodePaths, setPropStatuses, clientId, }: {
5
5
  nodePathInfo: SequenceNodePathInfo;
6
6
  frame: number;
7
7
  sequences: TSequence[];
8
8
  overrideIdsToNodePaths: OverrideIdToNodePaths;
9
- setCodeValues: SetCodeValues;
9
+ setPropStatuses: SetPropStatuses;
10
10
  clientId: string;
11
11
  }) => Promise<void> | null;
12
- export declare const deleteSelectedKeyframes: ({ keyframes, sequences, overrideIdsToNodePaths, setCodeValues, clientId, }: {
12
+ export declare const deleteSelectedKeyframes: ({ keyframes, sequences, overrideIdsToNodePaths, setPropStatuses, clientId, }: {
13
13
  keyframes: {
14
14
  nodePathInfo: SequenceNodePathInfo;
15
15
  frame: number;
16
16
  }[];
17
17
  sequences: TSequence[];
18
18
  overrideIdsToNodePaths: OverrideIdToNodePaths;
19
- setCodeValues: SetCodeValues;
19
+ setPropStatuses: SetPropStatuses;
20
20
  clientId: string;
21
21
  }) => Promise<void> | null;
@@ -46,7 +46,7 @@ const getSelectedKeyframeDeletion = ({ nodePathInfo, frame, sequences, overrideI
46
46
  schema: sequence.controls.schema,
47
47
  };
48
48
  };
49
- const deleteSelectedKeyframe = ({ nodePathInfo, frame, sequences, overrideIdsToNodePaths, setCodeValues, clientId, }) => {
49
+ const deleteSelectedKeyframe = ({ nodePathInfo, frame, sequences, overrideIdsToNodePaths, setPropStatuses, clientId, }) => {
50
50
  const deletion = getSelectedKeyframeDeletion({
51
51
  nodePathInfo,
52
52
  frame,
@@ -59,18 +59,18 @@ const deleteSelectedKeyframe = ({ nodePathInfo, frame, sequences, overrideIdsToN
59
59
  if (deletion.type === 'effect') {
60
60
  return (0, call_delete_keyframe_1.callDeleteEffectKeyframe)({
61
61
  ...deletion,
62
- setCodeValues,
62
+ setPropStatuses,
63
63
  clientId,
64
64
  });
65
65
  }
66
66
  return (0, call_delete_keyframe_1.callDeleteSequenceKeyframe)({
67
67
  ...deletion,
68
- setCodeValues,
68
+ setPropStatuses,
69
69
  clientId,
70
70
  });
71
71
  };
72
72
  exports.deleteSelectedKeyframe = deleteSelectedKeyframe;
73
- const deleteSelectedKeyframes = ({ keyframes, sequences, overrideIdsToNodePaths, setCodeValues, clientId, }) => {
73
+ const deleteSelectedKeyframes = ({ keyframes, sequences, overrideIdsToNodePaths, setPropStatuses, clientId, }) => {
74
74
  const deletions = keyframes
75
75
  .map((keyframe) => getSelectedKeyframeDeletion({
76
76
  nodePathInfo: keyframe.nodePathInfo,
@@ -85,7 +85,7 @@ const deleteSelectedKeyframes = ({ keyframes, sequences, overrideIdsToNodePaths,
85
85
  return (0, call_delete_keyframe_1.callDeleteKeyframes)({
86
86
  sequenceKeyframes: deletions.filter((deletion) => deletion.type === 'sequence'),
87
87
  effectKeyframes: deletions.filter((deletion) => deletion.type === 'effect'),
88
- setCodeValues,
88
+ setPropStatuses,
89
89
  clientId,
90
90
  });
91
91
  };
@@ -1,20 +1,20 @@
1
1
  import type { OverrideIdToNodePaths, TSequence } from 'remotion';
2
2
  import type { ConfirmationDialogFunction } from '../ConfirmationDialog-types';
3
- import type { SetCodeValues } from './save-sequence-prop';
3
+ import type { SetPropStatuses } from './save-sequence-prop';
4
4
  import type { TimelineSelection } from './TimelineSelection';
5
- export declare const deleteSelectedTimelineItem: ({ selection, sequences, overrideIdsToNodePaths, setCodeValues, clientId, confirm, }: {
5
+ export declare const deleteSelectedTimelineItem: ({ selection, sequences, overrideIdsToNodePaths, setPropStatuses, clientId, confirm, }: {
6
6
  selection: TimelineSelection;
7
7
  sequences: TSequence[];
8
8
  overrideIdsToNodePaths: OverrideIdToNodePaths;
9
- setCodeValues: SetCodeValues;
9
+ setPropStatuses: SetPropStatuses;
10
10
  clientId: string;
11
11
  confirm: ConfirmationDialogFunction;
12
12
  }) => Promise<boolean> | null;
13
- export declare const deleteSelectedTimelineItems: ({ selections, sequences, overrideIdsToNodePaths, setCodeValues, clientId, confirm, }: {
13
+ export declare const deleteSelectedTimelineItems: ({ selections, sequences, overrideIdsToNodePaths, setPropStatuses, clientId, confirm, }: {
14
14
  selections: readonly TimelineSelection[];
15
15
  sequences: TSequence[];
16
16
  overrideIdsToNodePaths: OverrideIdToNodePaths;
17
- setCodeValues: SetCodeValues;
17
+ setPropStatuses: SetPropStatuses;
18
18
  clientId: string;
19
19
  confirm: ConfirmationDialogFunction;
20
20
  }) => Promise<boolean> | null;
@@ -93,7 +93,7 @@ const deleteEffects = (effects) => {
93
93
  return true;
94
94
  });
95
95
  };
96
- const deleteSelectedTimelineItem = ({ selection, sequences, overrideIdsToNodePaths, setCodeValues, clientId, confirm, }) => {
96
+ const deleteSelectedTimelineItem = ({ selection, sequences, overrideIdsToNodePaths, setPropStatuses, clientId, confirm, }) => {
97
97
  var _a;
98
98
  if (selection.type === 'keyframe') {
99
99
  const promise = (0, delete_selected_keyframe_1.deleteSelectedKeyframe)({
@@ -101,7 +101,7 @@ const deleteSelectedTimelineItem = ({ selection, sequences, overrideIdsToNodePat
101
101
  frame: selection.frame,
102
102
  sequences,
103
103
  overrideIdsToNodePaths,
104
- setCodeValues,
104
+ setPropStatuses,
105
105
  clientId,
106
106
  });
107
107
  return (_a = promise === null || promise === void 0 ? void 0 : promise.then(() => true)) !== null && _a !== void 0 ? _a : null;
@@ -119,6 +119,7 @@ const deleteSelectedTimelineItem = ({ selection, sequences, overrideIdsToNodePat
119
119
  ]);
120
120
  case 'sequence-prop':
121
121
  case 'sequence-effect-prop':
122
+ case 'easing':
122
123
  return null;
123
124
  case 'sequence-all-effects':
124
125
  return deleteEffects([
@@ -133,6 +134,7 @@ const isSequenceRowSelection = (selection) => selection.type === 'sequence';
133
134
  const isSequenceEffectSelection = (selection) => selection.type === 'sequence-effect';
134
135
  const isSequenceAllEffectsSelection = (selection) => selection.type === 'sequence-all-effects';
135
136
  const isKeyframeSelection = (selection) => selection.type === 'keyframe';
137
+ const areSelectionsOnlyOfType = (selections, type) => selections.every((selection) => selection.type === type);
136
138
  const assertTimelineSelectionsHaveSameType = (selections) => {
137
139
  const firstSelection = selections[0];
138
140
  if (!firstSelection) {
@@ -144,12 +146,33 @@ const assertTimelineSelectionsHaveSameType = (selections) => {
144
146
  }
145
147
  }
146
148
  };
147
- const deleteSelectedTimelineItems = ({ selections, sequences, overrideIdsToNodePaths, setCodeValues, clientId, confirm, }) => {
149
+ const containsOnlyKeyframesAndEasings = (selections) => selections.every((selection) => selection.type === 'keyframe' || selection.type === 'easing');
150
+ const deleteSelectedTimelineItems = ({ selections, sequences, overrideIdsToNodePaths, setPropStatuses, clientId, confirm, }) => {
148
151
  var _a;
149
152
  const firstSelection = selections[0];
150
153
  if (!firstSelection) {
151
154
  return null;
152
155
  }
156
+ if (containsOnlyKeyframesAndEasings(selections)) {
157
+ const keyframes = selections.filter(isKeyframeSelection);
158
+ if (keyframes.length === 0) {
159
+ return null;
160
+ }
161
+ const promise = (0, delete_selected_keyframe_1.deleteSelectedKeyframes)({
162
+ keyframes: keyframes.map((selection) => ({
163
+ nodePathInfo: selection.nodePathInfo,
164
+ frame: selection.frame,
165
+ })),
166
+ sequences,
167
+ overrideIdsToNodePaths,
168
+ setPropStatuses,
169
+ clientId,
170
+ });
171
+ return (_a = promise === null || promise === void 0 ? void 0 : promise.then(() => true)) !== null && _a !== void 0 ? _a : null;
172
+ }
173
+ if (!areSelectionsOnlyOfType(selections, firstSelection.type)) {
174
+ return null;
175
+ }
153
176
  assertTimelineSelectionsHaveSameType(selections);
154
177
  switch (firstSelection.type) {
155
178
  case 'sequence':
@@ -162,21 +185,10 @@ const deleteSelectedTimelineItems = ({ selections, sequences, overrideIdsToNodeP
162
185
  nodePathInfo: selection.nodePathInfo,
163
186
  effectIndex: selection.i,
164
187
  })));
165
- case 'keyframe': {
166
- const promise = (0, delete_selected_keyframe_1.deleteSelectedKeyframes)({
167
- keyframes: selections.filter(isKeyframeSelection).map((selection) => ({
168
- nodePathInfo: selection.nodePathInfo,
169
- frame: selection.frame,
170
- })),
171
- sequences,
172
- overrideIdsToNodePaths,
173
- setCodeValues,
174
- clientId,
175
- });
176
- return (_a = promise === null || promise === void 0 ? void 0 : promise.then(() => true)) !== null && _a !== void 0 ? _a : null;
177
- }
188
+ case 'keyframe':
178
189
  case 'sequence-prop':
179
190
  case 'sequence-effect-prop':
191
+ case 'easing':
180
192
  return null;
181
193
  case 'sequence-all-effects':
182
194
  return deleteEffects(selections.filter(isSequenceAllEffectsSelection).map((selection) => ({
@@ -1,9 +1,9 @@
1
- import { type CodeValues, type GetDragOverrides, type GetEffectDragOverrides, type SequencePropsSubscriptionKey } from 'remotion';
1
+ import { type GetDragOverrides, type GetEffectDragOverrides, type PropStatuses, type SequencePropsSubscriptionKey } from 'remotion';
2
2
  import type { TimelineTreeNode } from '../../helpers/timeline-layout';
3
- export declare const getNodeKeyframes: ({ node, nodePath, codeValues, keyframeDisplayOffset, getDragOverrides, getEffectDragOverrides, timelinePosition, }: {
3
+ export declare const getNodeKeyframes: ({ node, nodePath, propStatuses, keyframeDisplayOffset, getDragOverrides, getEffectDragOverrides, timelinePosition, }: {
4
4
  node: TimelineTreeNode;
5
5
  nodePath: SequencePropsSubscriptionKey;
6
- codeValues: CodeValues;
6
+ propStatuses: PropStatuses;
7
7
  keyframeDisplayOffset: number;
8
8
  getDragOverrides: GetDragOverrides;
9
9
  getEffectDragOverrides: GetEffectDragOverrides;
@@ -22,7 +22,7 @@ const withDragOverrideKeyframe = ({ propStatus, keyframeDisplayOffset, timelineP
22
22
  }
23
23
  return [...keyframes, dragKeyframe].sort((first, second) => first.frame - second.frame);
24
24
  };
25
- const getNodeKeyframes = ({ node, nodePath, codeValues, keyframeDisplayOffset, getDragOverrides, getEffectDragOverrides, timelinePosition, }) => {
25
+ const getNodeKeyframes = ({ node, nodePath, propStatuses, keyframeDisplayOffset, getDragOverrides, getEffectDragOverrides, timelinePosition, }) => {
26
26
  var _a, _b;
27
27
  if (node.kind !== 'field' || node.field === null) {
28
28
  return [];
@@ -30,15 +30,15 @@ const getNodeKeyframes = ({ node, nodePath, codeValues, keyframeDisplayOffset, g
30
30
  if (node.field.kind === 'sequence-field') {
31
31
  const dragOverrides = getDragOverrides(nodePath);
32
32
  return withDragOverrideKeyframe({
33
- propStatus: (_a = remotion_1.Internals.getCodeValuesCtx(codeValues, nodePath)) === null || _a === void 0 ? void 0 : _a[node.field.key],
33
+ propStatus: (_a = remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath)) === null || _a === void 0 ? void 0 : _a[node.field.key],
34
34
  keyframeDisplayOffset,
35
35
  timelinePosition,
36
36
  dragOverrideValue: dragOverrides[node.field.key],
37
37
  hasDragOverride: hasOverride(dragOverrides, node.field.key),
38
38
  });
39
39
  }
40
- const effectStatus = remotion_1.Internals.getEffectCodeValuesCtx({
41
- codeValues,
40
+ const effectStatus = remotion_1.Internals.getEffectPropStatusesCtx({
41
+ propStatuses,
42
42
  nodePath,
43
43
  effectIndex: node.field.effectIndex,
44
44
  });
@@ -0,0 +1,9 @@
1
+ export type TimelineEasingSegment = {
2
+ readonly fromFrame: number;
3
+ readonly toFrame: number;
4
+ readonly segmentIndex: number;
5
+ };
6
+ export declare const getTimelineEasingSegments: (keyframes: {
7
+ frame: number;
8
+ value: unknown;
9
+ }[]) => TimelineEasingSegment[];
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTimelineEasingSegments = void 0;
4
+ const getTimelineEasingSegments = (keyframes) => {
5
+ return keyframes.flatMap((keyframe, index) => {
6
+ const nextKeyframe = keyframes[index + 1];
7
+ if (!nextKeyframe) {
8
+ return [];
9
+ }
10
+ return [
11
+ {
12
+ fromFrame: keyframe.frame,
13
+ toFrame: nextKeyframe.frame,
14
+ segmentIndex: index,
15
+ },
16
+ ];
17
+ });
18
+ };
19
+ exports.getTimelineEasingSegments = getTimelineEasingSegments;
@@ -1,5 +1,5 @@
1
- import type { CodeValues, OverrideIdToNodePaths, SequencePropsSubscriptionKey, SequenceSchema, TSequence } from 'remotion';
2
- import type { SetCodeValues } from './save-sequence-prop';
1
+ import type { OverrideIdToNodePaths, PropStatuses, SequencePropsSubscriptionKey, SequenceSchema, TSequence } from 'remotion';
2
+ import type { SetPropStatuses } from './save-sequence-prop';
3
3
  import type { TimelineSelection } from './TimelineSelection';
4
4
  type SequencePropResetTarget = {
5
5
  readonly type: 'sequence-prop';
@@ -21,18 +21,18 @@ type EffectPropResetTarget = {
21
21
  readonly schema: SequenceSchema;
22
22
  };
23
23
  type TimelinePropResetTarget = SequencePropResetTarget | EffectPropResetTarget;
24
- export declare const getTimelinePropResetTargets: ({ selections, sequences, overrideIdsToNodePaths, codeValues, }: {
24
+ export declare const getTimelinePropResetTargets: ({ selections, sequences, overrideIdsToNodePaths, propStatuses, }: {
25
25
  readonly selections: readonly TimelineSelection[];
26
26
  readonly sequences: TSequence[];
27
27
  readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
28
- readonly codeValues: CodeValues;
28
+ readonly propStatuses: PropStatuses;
29
29
  }) => TimelinePropResetTarget[] | null;
30
- export declare const resetSelectedTimelineProps: ({ selections, sequences, overrideIdsToNodePaths, codeValues, setCodeValues, clientId, }: {
30
+ export declare const resetSelectedTimelineProps: ({ selections, sequences, overrideIdsToNodePaths, propStatuses, setPropStatuses, clientId, }: {
31
31
  readonly selections: readonly TimelineSelection[];
32
32
  readonly sequences: TSequence[];
33
33
  readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
34
- readonly codeValues: CodeValues;
35
- readonly setCodeValues: SetCodeValues;
34
+ readonly propStatuses: PropStatuses;
35
+ readonly setPropStatuses: SetPropStatuses;
36
36
  readonly clientId: string;
37
37
  }) => Promise<void> | null;
38
38
  export {};