'use client'; import { forwardRef, HTMLAttributes } from 'react'; import styles from './tracklist.module.css'; export interface Track { number: number | string; name: string; artist?: string; duration: string; active?: boolean; } export interface TracklistProps extends HTMLAttributes { /** List of tracks */ tracks: Track[]; /** Color variant */ variant?: 'silver' | 'blood' | 'gold' | 'bone'; /** Show header row */ showHeader?: boolean; /** Compact mode */ compact?: boolean; /** Large track numbers */ numbered?: boolean; /** Track click handler */ onTrackClick?: (track: Track, index: number) => void; } export const Tracklist = forwardRef( ( { tracks, variant = 'silver', showHeader = false, compact = false, numbered = false, onTrackClick, className, ...props }, ref ) => { return (
{showHeader && (
# Title Duration
)} {tracks.map((track, index) => (
onTrackClick?.(track, index)} > {String(track.number).padStart(2, '0')}
{track.name} {track.artist && ( {track.artist} )}
{!compact && (
)} {track.duration}
))}
); } ); Tracklist.displayName = 'Tracklist'; export default Tracklist;