79 lines
2.0 KiB
TypeScript
79 lines
2.0 KiB
TypeScript
import type { TrackType } from "@/types/timeline";
|
|
|
|
// Track color definitions
|
|
export const TRACK_COLORS: Record<
|
|
TrackType,
|
|
{ solid: string; background: string; border: string }
|
|
> = {
|
|
media: {
|
|
solid: "bg-blue-500",
|
|
background: "bg-blue-500/20",
|
|
border: "border-white/80",
|
|
},
|
|
text: {
|
|
solid: "bg-[#9C4937]",
|
|
background: "bg-[#9C4937]",
|
|
border: "border-white/80",
|
|
},
|
|
audio: {
|
|
solid: "bg-green-500",
|
|
background: "bg-green-500/20",
|
|
border: "border-white/80",
|
|
},
|
|
} as const;
|
|
|
|
// Utility functions
|
|
export function getTrackColors(type: TrackType) {
|
|
return TRACK_COLORS[type];
|
|
}
|
|
|
|
export function getTrackElementClasses(type: TrackType) {
|
|
const colors = getTrackColors(type);
|
|
return `${colors.background} ${colors.border}`;
|
|
}
|
|
|
|
// Track height definitions
|
|
export const TRACK_HEIGHTS: Record<TrackType, number> = {
|
|
media: 65,
|
|
text: 25,
|
|
audio: 50,
|
|
} as const;
|
|
|
|
// Utility function for track heights
|
|
export function getTrackHeight(type: TrackType): number {
|
|
return TRACK_HEIGHTS[type];
|
|
}
|
|
|
|
// Calculate cumulative height up to (but not including) a track index
|
|
export function getCumulativeHeightBefore(
|
|
tracks: Array<{ type: TrackType }>,
|
|
trackIndex: number
|
|
): number {
|
|
const GAP = 4; // 4px gap between tracks (equivalent to Tailwind's gap-1)
|
|
return tracks
|
|
.slice(0, trackIndex)
|
|
.reduce((sum, track) => sum + getTrackHeight(track.type) + GAP, 0);
|
|
}
|
|
|
|
// Calculate total height of all tracks
|
|
export function getTotalTracksHeight(
|
|
tracks: Array<{ type: TrackType }>
|
|
): number {
|
|
const GAP = 4; // 4px gap between tracks (equivalent to Tailwind's gap-1)
|
|
const tracksHeight = tracks.reduce(
|
|
(sum, track) => sum + getTrackHeight(track.type),
|
|
0
|
|
);
|
|
const gapsHeight = Math.max(0, tracks.length - 1) * GAP; // n-1 gaps for n tracks
|
|
return tracksHeight + gapsHeight;
|
|
}
|
|
|
|
// Other timeline constants
|
|
export const TIMELINE_CONSTANTS = {
|
|
ELEMENT_MIN_WIDTH: 80,
|
|
PIXELS_PER_SECOND: 50,
|
|
TRACK_HEIGHT: 60, // Default fallback
|
|
DEFAULT_TEXT_DURATION: 5,
|
|
ZOOM_LEVELS: [0.25, 0.5, 1, 1.5, 2, 3, 4],
|
|
} as const;
|