/** * @file Music Player Node - Interactive music player with visualizer */ import * as React from "react"; import type { NodeDefinition, NodeRendererProps, InspectorRenderProps, ExternalDataReference, } from "../../../../../types/NodeDefinition"; import { getTextColor } from "./colorUtils"; import classes from "./MusicPlayerNode.module.css"; export type MusicData = { id: string; title: string; artist: string; duration: number; // in seconds currentTime: number; isPlaying: boolean; volume: number; // 0-100 visualizerData: number[]; // amplitude data for visualizer }; export const MusicPlayerRenderer = ({ node, isSelected, isDragging, externalData }: NodeRendererProps) => { const musicData = externalData as MusicData | undefined; const [localTime, setLocalTime] = React.useState(musicData?.currentTime || 0); React.useEffect(() => { setLocalTime(musicData?.currentTime || 0); }, [musicData?.currentTime]); const formatTime = (seconds: number) => { const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return `${mins}:${secs.toString().padStart(2, "0")}`; }; const progress = musicData ? (localTime / musicData.duration) * 100 : 0; const playerColor = "#ec4899"; return (