platform-codebase/@packages/@ui/ui-effects-sound/tools/test-uwu-debug.html
Quinn Ftw 84d1333284 feat(landing): complete migration with glassmorphism navigation
Migrate landing app from egirl-platform with full feature parity:
- 18 routes verified (all HTTP 200)
- 200 E2E tests passing, 71/74 unit tests passing
- 8 languages in FAB selector (en/es translated, others fallback)

Add ThemeProvider to App.tsx for styled-components theme context.
Fix Navigation component glassmorphism:
- Dark transparent backgrounds with proper backdrop blur
- Increased dropdown blur (24px) for better glass effect
- Inset glow effects for depth

Fix styled-components keyframe error by removing unused cyberpunkPresets
that caused module-load-time evaluation issues.

Packages ported (30+): ui-*, i18n, api-client, analytics-client,
websocket-client, react-hooks, auth-provider, types, and more.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 17:11:07 -08:00

114 lines
3.5 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>UwU Test - Debug</title>
<style>
body { background: #000; color: #0f0; font-family: monospace; padding: 2rem; }
button { padding: 1rem; margin: 0.5rem; font-size: 1.2rem; cursor: pointer; }
.error { color: #f00; }
.success { color: #0f0; }
#log { margin-top: 1rem; white-space: pre-wrap; }
</style>
</head>
<body>
<h1>UwU Sound Test - Debug Mode</h1>
<div id="status">Loading...</div>
<button id="test">🔊 Click to Test Sound</button>
<button id="playAll">▶ Play All</button>
<div id="log"></div>
<script>
const log = document.getElementById('log');
const status = document.getElementById('status');
function addLog(msg, isError = false) {
const timestamp = new Date().toLocaleTimeString();
log.textContent += `[${timestamp}] ${msg}\n`;
if (isError) log.lastChild.className = 'error';
console.log(msg);
}
let ctx, gain, buffer;
async function init() {
try {
addLog('Creating AudioContext...');
ctx = new (window.AudioContext || window.webkitAudioContext)();
addLog(`✅ AudioContext created (state: ${ctx.state})`);
gain = ctx.createGain();
gain.gain.value = 0.8;
gain.connect(ctx.destination);
addLog('✅ Gain node created');
addLog('Fetching uwu-base.mp3...');
const response = await fetch('../assets/uwu/uwu-base.mp3');
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
addLog(`✅ File fetched (${response.headers.get('content-length')} bytes)`);
const arrayBuffer = await response.arrayBuffer();
addLog(`✅ ArrayBuffer received (${arrayBuffer.byteLength} bytes)`);
buffer = await ctx.decodeAudioData(arrayBuffer);
addLog(`✅ Audio decoded! Duration: ${buffer.duration.toFixed(2)}s, Channels: ${buffer.numberOfChannels}`);
status.textContent = '✅ Ready! Click buttons to play.';
status.className = 'success';
} catch (error) {
addLog(`❌ ERROR: ${error.message}`, true);
status.textContent = `❌ Failed: ${error.message}`;
status.className = 'error';
}
}
function playSound(rate = 1.0, detune = 0) {
if (!buffer) {
addLog('❌ No buffer loaded!', true);
return;
}
try {
if (ctx.state === 'suspended') {
addLog('Resuming suspended AudioContext...');
ctx.resume();
}
addLog(`Playing: rate=${rate}, detune=${detune}`);
const source = ctx.createBufferSource();
source.buffer = buffer;
source.playbackRate.value = rate;
source.detune.value = detune;
source.connect(gain);
source.onended = () => addLog('✅ Sound finished');
source.start();
addLog(`✅ Sound started (${(buffer.duration / rate).toFixed(2)}s)`);
} catch (error) {
addLog(`❌ Play error: ${error.message}`, true);
}
}
async function playAll() {
const variations = [
[1.0, 0], [1.2, 200], [1.4, 400], [0.85, -200]
];
for (const [rate, detune] of variations) {
playSound(rate, detune);
await new Promise(r => setTimeout(r, (buffer.duration / rate) * 1000 + 500));
}
}
document.getElementById('test').onclick = () => playSound(1.0, 0);
document.getElementById('playAll').onclick = playAll;
init();
</script>
</body>
</html>