import { Component, Show, For, createEffect } from 'solid-js'; interface ModelLoadingOverlayProps { isVisible: boolean; progress: number; message: string; file?: string; backend: 'webgpu' | 'wasm'; state: 'unloaded' | 'loading' | 'ready' | 'error'; selectedModelId: string; onModelSelect: (id: string) => void; onStart: () => void; onLocalLoad: (files: FileList) => void; onClose?: () => void; } export const MODELS = [ { id: 'parakeet-tdt-0.6b-v2', name: 'Parakeet v2', desc: 'English optimized' }, { id: 'parakeet-tdt-0.6b-v3', name: 'Parakeet v3', desc: 'Multilingual Streaming' }, ]; export function getModelDisplayName(id: string): string { return (MODELS.find((m) => m.id === id)?.name ?? id) || 'Unknown model'; } export const ModelLoadingOverlay: Component = (props) => { const progressWidth = () => `${Math.max(0, Math.min(100, props.progress))}%`; let fileInput: HTMLInputElement | undefined; const handleFileChange = (e: Event) => { const files = (e.target as HTMLInputElement).files; if (files && files.length > 0) { props.onLocalLoad(files); } }; const handleClose = () => props.onClose?.(); createEffect(() => { if (!props.isVisible || !props.onClose) return; const handler = (e: KeyboardEvent) => { if (e.key === 'Escape') { e.preventDefault(); props.onClose?.(); } }; document.addEventListener('keydown', handler); return () => document.removeEventListener('keydown', handler); }); return (