initial public release.

This commit is contained in:
Xiaohan-Tian
2025-08-11 18:37:21 -07:00
commit de51967b49
186 changed files with 32322 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
import 'reflect-metadata';
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import './index.css';
import App from './App.tsx';
import { KGCore } from './core/KGCore';
import { KGAudioInterface } from './core/audio-interface/KGAudioInterface';
import { KGDebugger } from './core/KGDebugger';
// Initialize KGCore instance
await KGCore.instance().initialize();
// Attach debugger to global window in development mode
if (import.meta.env.DEV) {
(window as unknown as { KGDebugger: KGDebugger }).KGDebugger = KGDebugger.instance();
console.log('🔧 KGDebugger attached to window - try: KGDebugger.help()');
}
// Start audio context on first user interaction
let audioContextStarted = false;
const tryStartAudioContext = async () => {
if (!audioContextStarted) {
audioContextStarted = true;
try {
const audioInterface = KGAudioInterface.instance();
if (!audioInterface.getIsAudioContextStarted()) {
await audioInterface.startAudioContext();
console.log('Audio context started on first user interaction');
}
} catch (error) {
console.log('Audio context start failed:', error);
audioContextStarted = false; // Allow retry
}
// Remove listeners after first attempt (whether successful or not)
document.removeEventListener('click', tryStartAudioContext);
document.removeEventListener('touchstart', tryStartAudioContext);
document.removeEventListener('keydown', tryStartAudioContext);
}
};
// Listen for first user interaction
document.addEventListener('click', tryStartAudioContext, { passive: true });
document.addEventListener('touchstart', tryStartAudioContext, { passive: true });
document.addEventListener('keydown', tryStartAudioContext, { passive: true });
// Add event listener for beforeunload event
window.addEventListener('beforeunload', (event) => {
// Cancel the event
event.preventDefault();
// Chrome requires returnValue to be set
event.returnValue = '';
// The browser will show a standard confirmation dialog
// with a message like "Changes you made may not be saved."
// Note: Custom messages are no longer supported in modern browsers for security reasons
});
createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
);