feat(studio): add keyframe timeline state

This commit is contained in:
Miguel Angel Simon Sierra
2026-07-25 21:40:44 +02:00
parent 3b3d4f559c
commit e4d7bde64f
21 changed files with 583 additions and 193 deletions
+7 -1
View File
@@ -12,6 +12,7 @@ const {
trackStudioRenderStart,
trackStudioRazorSplit,
trackStudioExpandedClipEdit,
trackStudioKeyframeLaneExpand,
trackStudioSegmentEaseEdit,
trackStudioFeedback,
} = await import("./events");
@@ -72,8 +73,13 @@ describe("studio telemetry events", () => {
expect(trackEvent).toHaveBeenCalledWith("studio_expanded_clip_edit", { action: "resize" });
});
it("trackStudioKeyframeLaneExpand emits 'studio_keyframe_lane_expand' with expanded", () => {
trackStudioKeyframeLaneExpand({ expanded: true });
expect(trackEvent).toHaveBeenCalledWith("studio_keyframe_lane_expand", { expanded: true });
});
it("trackStudioSegmentEaseEdit emits 'studio_segment_ease_edit' with action and ease", () => {
trackStudioSegmentEaseEdit({ ease: "power2.out" });
trackStudioSegmentEaseEdit({ action: "commit", ease: "power2.out" });
expect(trackEvent).toHaveBeenCalledWith("studio_segment_ease_edit", {
action: "commit",
ease: "power2.out",
+11 -3
View File
@@ -63,9 +63,17 @@ export function trackStudioExpandedClipEdit(props: {
trackEvent("studio_expanded_clip_edit", { action: props.action });
}
// Adoption signal for committing an edit to a segment's ease.
export function trackStudioSegmentEaseEdit(props: { ease: string }): void {
trackEvent("studio_segment_ease_edit", { action: "commit", ease: props.ease });
// Adoption signal for the per-clip keyframe-lane caret toggle.
export function trackStudioKeyframeLaneExpand(props: { expanded: boolean }): void {
trackEvent("studio_keyframe_lane_expand", { expanded: props.expanded });
}
// Adoption signal for opening and committing the per-segment ease editor.
export function trackStudioSegmentEaseEdit(props: {
action: "open" | "commit";
ease?: string;
}): void {
trackEvent("studio_segment_ease_edit", { action: props.action, ease: props.ease });
}
export function trackStudioFeedback(props: { rating: number; comment?: string }): void {