feat: complete Quantumancy web app — full frontend + docs
Frontend (React 18 + TS + Vite): - Landing: glitching hero, live /api/stats veil ticker, mode cards, featured spirits - Séance: three.js shader ghost (hue/form per entity, mood + audio-reactive), Ouija planchette board spelling utterances, transcript with TTS replay, entity dossier, direct contact streaming, passive/active listening - Modes: Wire Ghost telemetry panel, EVP mic anomaly detection, WebUSB RTL-SDR sweep + waterfall (hardware pass pending), Ouija/Direct Contact - Codex: public registry + entity dossiers, rarity tiers, i18n EN/ES complete - State: VeilSocket (reconnect/backoff), seance reducer, auth context - 72 vitest tests green; served by FastAPI at :7777 Docs: README + as-built plans 3-7
This commit is contained in:
77
frontend/src/types/webusb.d.ts
vendored
Normal file
77
frontend/src/types/webusb.d.ts
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
// Minimal WebUSB ambient declarations — just the surface src/lib/sdr.ts uses.
|
||||
// WebUSB is not part of TS's dom lib and @types/web doesn't carry it.
|
||||
|
||||
interface USBEndpoint {
|
||||
endpointNumber: number
|
||||
direction: 'in' | 'out'
|
||||
type: 'bulk' | 'interrupt' | 'isochronous'
|
||||
packetSize: number
|
||||
}
|
||||
|
||||
interface USBAlternateInterface {
|
||||
alternateSetting: number
|
||||
interfaceClass: number
|
||||
interfaceSubclass: number
|
||||
interfaceProtocol: number
|
||||
interfaceName?: string
|
||||
endpoints: USBEndpoint[]
|
||||
}
|
||||
|
||||
interface USBInterface {
|
||||
interfaceNumber: number
|
||||
alternates: USBAlternateInterface[]
|
||||
claimed: boolean
|
||||
}
|
||||
|
||||
interface USBConfiguration {
|
||||
configurationValue: number
|
||||
configurationName?: string
|
||||
interfaces: USBInterface[]
|
||||
}
|
||||
|
||||
interface USBDevice {
|
||||
readonly opened: boolean
|
||||
readonly configuration: USBConfiguration | null
|
||||
open(): Promise<void>
|
||||
close(): Promise<void>
|
||||
claimInterface(interfaceNumber: number): Promise<void>
|
||||
releaseInterface(interfaceNumber: number): Promise<void>
|
||||
selectAlternateInterface(
|
||||
interfaceNumber: number,
|
||||
alternateSetting: number,
|
||||
): Promise<void>
|
||||
controlTransferOut(
|
||||
setup: {
|
||||
requestType: 'standard' | 'class' | 'vendor'
|
||||
recipient: 'device' | 'interface' | 'endpoint' | 'other'
|
||||
request: number
|
||||
value: number
|
||||
index: number
|
||||
},
|
||||
data?: BufferSource,
|
||||
): Promise<USBOutTransferResult>
|
||||
transferIn(
|
||||
endpointNumber: number,
|
||||
length: number,
|
||||
): Promise<USBInTransferResult>
|
||||
}
|
||||
|
||||
interface USBInTransferResult {
|
||||
data?: DataView
|
||||
status: 'ok' | 'stall' | 'babble'
|
||||
}
|
||||
|
||||
interface USBOutTransferResult {
|
||||
bytesWritten: number
|
||||
status: 'ok' | 'stall'
|
||||
}
|
||||
|
||||
interface USB {
|
||||
requestDevice(options: {
|
||||
filters: Array<{ vendorId?: number; productId?: number }>
|
||||
}): Promise<USBDevice>
|
||||
}
|
||||
|
||||
interface Navigator {
|
||||
readonly usb: USB
|
||||
}
|
||||
Reference in New Issue
Block a user