Richard Osborne
ed16302812
feat(sprint-2): UBA-006 UBAPanel + UBA-007 DebugStreamView
UBA-006 — UBAPanel (views/panels/UBAPanel):
- useUBASchema hook: loads schema URL from project metadata, fetches + parses
- SchemaLoader UI: URL input with Enter/click + error banner
- ConfigPanel wired with onSave: stores in project metadata + UBAClient.configure()
- useEventListener for importComplete/instanceHasChanged
UBA-007 — DebugStreamView:
- SSE viewer via UBAClient.openDebugStream()
- Connect/Disconnect toggle, Clear, auto-scroll + manual override
- Max 500 events (oldest dropped), per-type colour coding
- Jump to latest sticky button
UBAPanel.module.scss: all design tokens, no hardcoded colors
Tech note: TS doesn't narrow ParseResult<T> discriminated unions inside
async IIFEs — explicit cast with inline FailResult type as workaround.
2026-02-18 20:12:33 +01:00
..
2025-12-08 16:19:56 +01:00
2026-02-18 15:59:52 +01:00
2024-01-26 11:52:55 +01:00
2024-12-29 10:01:32 +01:00
2026-02-18 20:12:33 +01:00
2026-02-18 19:58:30 +01:00
2026-01-08 13:27:38 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2024-01-26 11:52:55 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2024-01-26 11:52:55 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2024-01-26 11:52:55 +01:00
2025-12-08 16:19:56 +01:00