import { Tone } from './tone.mjs'; export const hideHeader = () => { document.getElementById('header').style = 'display:none'; }; function frame(callback) { if (window.strudelAnimation) { cancelAnimationFrame(window.strudelAnimation); } const animate = (animationTime) => { const toneTime = Tone.getTransport().seconds; callback(animationTime, toneTime); window.strudelAnimation = requestAnimationFrame(animate); }; requestAnimationFrame(animate); } export const backgroundImage = function (src, animateOptions = {}) { const container = document.getElementById('code'); const bg = 'background-image:url(' + src + ');background-size:contain;'; container.style = bg; const { className: initialClassName } = container; const handleOption = (option, value) => { ({ style: () => (container.style = bg + ';' + value), className: () => (container.className = value + ' ' + initialClassName), }[option]()); }; const funcOptions = Object.entries(animateOptions).filter(([_, v]) => typeof v === 'function'); const stringOptions = Object.entries(animateOptions).filter(([_, v]) => typeof v === 'string'); stringOptions.forEach(([option, value]) => handleOption(option, value)); if (funcOptions.length === 0) { return; } frame((_, t) => funcOptions.forEach(([option, value]) => { handleOption(option, value(t)); }), ); }; export const cleanup = () => { const container = document.getElementById('code'); if (container) { container.style = ''; container.className = 'grow relative'; // has to match App.tsx } };