import { useState } from 'react';
import { WaveformPlaylistProvider, useAudioTracks } from '@waveform-playlist/browser';
import {
AnnotationProvider,
useAnnotationControls,
ContinuousPlayCheckbox,
LinkEndpointsCheckbox,
parseAeneas,
} from '@waveform-playlist/annotations';
import type { AnnotationData } from '@waveform-playlist/core';
function AnnotationEditor() {
const [annotations, setAnnotations] = useState<AnnotationData[]>([
{ id: 'ann-1', start: 0, end: 5, text: 'Intro' },
{ id: 'ann-2', start: 5, end: 12, text: 'Main content' },
{ id: 'ann-3', start: 12, end: 20, text: 'Outro' },
]);
const { tracks, loading } = useAudioTracks([{ src: 'narration.mp3' }]);
const handleFileImport = async (file: File) => {
const json = JSON.parse(await file.text());
const imported = parseAeneas(json);
setAnnotations(imported);
};
if (loading) return <div>Loading audio...</div>;
return (
<AnnotationProvider>
<div>
<input
type="file"
accept=".json"
onChange={(e) => e.target.files?.[0] && handleFileImport(e.target.files[0])}
/>
<div>
<ContinuousPlayCheckbox />
<LinkEndpointsCheckbox />
</div>
<WaveformPlaylistProvider
tracks={tracks}
annotationList={{
annotations,
editable: true,
linkEndpoints: true,
}}
onAnnotationsChange={setAnnotations}
>
{/* Playlist UI with annotation track */}
</WaveformPlaylistProvider>
{/* Annotation list */}
<div>
{annotations.map((ann, i) => (
<div key={ann.id}>
<strong>{i + 1}.</strong> {ann.start.toFixed(2)}s - {ann.end.toFixed(2)}s
<div>{ann.text}</div>
</div>
))}
</div>
</div>
</AnnotationProvider>
);
}