// screens-editor.jsx — Editor (timeline) stub
const { ASSETS } = window.ZAMPP_DATA;
function Editor() {
const [playing, setPlaying] = React.useState(false);
const [currentMs, setCurrentMs] = React.useState(8200);
React.useEffect(() => {
if (!playing) return;
const i = setInterval(() => setCurrentMs(t => t + 100), 100);
return () => clearInterval(i);
}, [playing]);
return (
DEV BUILD
Untitled sequence
Protour 2026 · auto-saved 1m ago
{!playing && (
)}
00:00:08:06
);
}
function InspGroup({ title, children }) {
return (
);
}
function InspRow({ label, value }) {
return (
{label}
{value}
);
}
function EditorTimeline({ currentMs }) {
const v1Clips = [
{ id: "v1a", start: 0, len: 12, color: "#5B7CFA", label: "Stage_Cam_A" },
{ id: "v1b", start: 12, len: 8, color: "#5B7CFA", label: "Drone_Aerial" },
{ id: "v1c", start: 20, len: 18, color: "#5B7CFA", label: "Wide_Cam_B" },
{ id: "v1d", start: 38, len: 10, color: "#5B7CFA", label: "Trophy" },
];
const v2Clips = [
{ id: "v2a", start: 6, len: 4, color: "#B57CFA", label: "Lower3rd" },
{ id: "v2b", start: 32, len: 4, color: "#B57CFA", label: "Sponsor" },
];
const a1Clips = [
{ id: "a1a", start: 0, len: 48, color: "#2DD4A8", label: "FOH Mix", audio: true },
];
const a2Clips = [
{ id: "a2a", start: 12, len: 6, color: "#F5A623", label: "VO", audio: true },
];
const total = 60;
const playheadPct = ((currentMs / 1000) / total) * 100;
return (
{Array.from({ length: 13 }).map((_, i) => (
{i % 2 === 0 && {`00:${String(i * 5).padStart(2, "0")}`}}
))}
);
}
function TimelineTrack({ label, clips, total, hasFilm, audio }) {
return (
{label}
{clips.map(c => {
const left = (c.start / total) * 100;
const width = (c.len / total) * 100;
return (
{c.label}
{hasFilm && (
{Array.from({ length: 8 }).map((_, i) => (
))}
)}
{audio && (
)}
);
})}
);
}
window.Editor = Editor;