B:BD[
3.11712] → [
3.11712:11997]
B:BD[
3.11997] → [
4.8808:8936]
∅:D[
4.8936] → [
3.12105:12128]
B:BD[
3.12105] → [
3.12105:12128]
B:BD[
3.12128] → [
4.8937:9062]
∅:D[
4.9062] → [
5.5961:6042]
B:BD[
6.1179] → [
5.5961:6042]
∅:D[
5.6042] → [
3.12261:12312]
B:BD[
3.12261] → [
3.12261:12312]
<div className="text-center p-8">
<Upload className="h-12 w-12 mx-auto text-muted-foreground mb-4" />
<h3 className="text-lg font-medium mb-2">Load Local File</h3>
<p className="text-sm text-muted-foreground mb-4">
This file is not available online. Load it from your local
storage to play and analyze.
</p>
<Button
onClick={() => void openFilePicker().catch(console.error)}
>
{state.filePickerSupported ? "Browse Files" : "Select File"}
</Button>
</div>
{/* Show file picker for owner, info message for non-owner */}
{userIsOwner ? (
<div className="text-center p-8">
<Upload className="h-12 w-12 mx-auto text-muted-foreground mb-4" />
<h3 className="text-lg font-medium mb-2">Load Local File</h3>
<p className="text-sm text-muted-foreground mb-4">
This file is not available online. Load it from your local
storage to play and analyze.
</p>
<Button
onClick={() => void openFilePicker().catch(console.error)}
>
{state.filePickerSupported ? "Browse Files" : "Select File"}
</Button>
</div>
) : (
<div className="text-center p-8">
<AlertCircle className="h-12 w-12 mx-auto text-muted-foreground mb-4" />
<h3 className="text-lg font-medium mb-2">
{state.selections.length > 0 ? "Audio Not Available" : "File Not Available"}
</h3>
<p className="text-sm text-muted-foreground">
{state.selections.length > 0
? "This file is not available for playback, but you can view the selections below."
: "This file is not available online and you don't have permission to load local files."
}
</p>
</div>
)}