summaryrefslogtreecommitdiff
path: root/apps/web/src/lib/ripple
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/src/lib/ripple')
-rw-r--r--apps/web/src/lib/ripple/apply.ts28
-rw-r--r--apps/web/src/lib/ripple/diff.ts23
2 files changed, 36 insertions, 15 deletions
diff --git a/apps/web/src/lib/ripple/apply.ts b/apps/web/src/lib/ripple/apply.ts
index 098a0247..f96e4600 100644
--- a/apps/web/src/lib/ripple/apply.ts
+++ b/apps/web/src/lib/ripple/apply.ts
@@ -1,4 +1,4 @@
-import type { TimelineTrack } from "@/lib/timeline/types";
+import type { SceneTracks, TimelineTrack } from "@/lib/timeline/types";
import { rippleShiftElements } from "./shift";
export interface RippleAdjustment {
@@ -11,9 +11,9 @@ export function applyRippleAdjustments({
tracks,
adjustments,
}: {
- tracks: TimelineTrack[];
+ tracks: SceneTracks;
adjustments: RippleAdjustment[];
-}): TimelineTrack[] {
+}): SceneTracks {
if (adjustments.length === 0) {
return tracks;
}
@@ -25,12 +25,24 @@ export function applyRippleAdjustments({
adjustmentsByTrack.set(adjustment.trackId, trackAdjustments);
}
- return tracks.map((track) =>
- applyTrackRippleAdjustments({
- track,
- adjustments: adjustmentsByTrack.get(track.id) ?? [],
+ return {
+ overlay: tracks.overlay.map((track) =>
+ applyTrackRippleAdjustments({
+ track,
+ adjustments: adjustmentsByTrack.get(track.id) ?? [],
+ }),
+ ),
+ main: applyTrackRippleAdjustments({
+ track: tracks.main,
+ adjustments: adjustmentsByTrack.get(tracks.main.id) ?? [],
}),
- );
+ audio: tracks.audio.map((track) =>
+ applyTrackRippleAdjustments({
+ track,
+ adjustments: adjustmentsByTrack.get(track.id) ?? [],
+ }),
+ ),
+ };
}
function applyTrackRippleAdjustments<
diff --git a/apps/web/src/lib/ripple/diff.ts b/apps/web/src/lib/ripple/diff.ts
index 22b8d996..49238738 100644
--- a/apps/web/src/lib/ripple/diff.ts
+++ b/apps/web/src/lib/ripple/diff.ts
@@ -1,5 +1,4 @@
-
-import type { TimelineElement, TimelineTrack } from "@/lib/timeline/types";
+import type { SceneTracks, TimelineElement, TimelineTrack } from "@/lib/timeline/types";
import type { RippleAdjustment } from "./apply";
interface Interval {
@@ -15,15 +14,25 @@ export function computeRippleAdjustments({
beforeTracks,
afterTracks,
}: {
- beforeTracks: TimelineTrack[];
- afterTracks: TimelineTrack[];
+ beforeTracks: SceneTracks;
+ afterTracks: SceneTracks;
}): RippleAdjustment[] {
- const afterTracksById = new Map(afterTracks.map((track) => [track.id, track]));
+ const beforeTrackList = [
+ ...beforeTracks.overlay,
+ beforeTracks.main,
+ ...beforeTracks.audio,
+ ];
+ const afterTrackList = [
+ ...afterTracks.overlay,
+ afterTracks.main,
+ ...afterTracks.audio,
+ ];
+ const afterTracksById = new Map(afterTrackList.map((track) => [track.id, track]));
const allAfterElementIds = new Set(
- afterTracks.flatMap((track) => track.elements.map((element) => element.id)),
+ afterTrackList.flatMap((track) => track.elements.map((element) => element.id)),
);
- return beforeTracks.flatMap((beforeTrack): RippleAdjustment[] =>
+ return beforeTrackList.flatMap((beforeTrack): RippleAdjustment[] =>
computeTrackRippleAdjustments({
trackId: beforeTrack.id,
beforeElements: beforeTrack.elements,