Some checks failed
CI / build-and-test (push) Failing after 31s
- Theme split: Theme.Dark.xaml + Theme.Light.xaml + ThemeManager - New shell: 32px header (mark + wordmark + 3 icons), 40px transport strip, conditional meeting bar, slide-over settings drawer - Removed: 72px rail, 380px permanent settings panel, 6-column footer, custom chromeless title bar buttons - Ctrl+T toggles theme; follows Windows app-mode by default - Shape doc at docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md
89 lines
6.4 KiB
Markdown
89 lines
6.4 KiB
Markdown
# Where we left off — v2 "Studio Terminal" shell landed (2026-05-13 night)
|
||
|
||
## What's done (uncommitted on local main)
|
||
|
||
**v2 redesign shape:** Approved brief at `docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md`. Aesthetic register is "broadcast-engineering instrument" — Linear's keyboard-first density × Avid console legibility. Goes hard against the "screams AI" failure mode.
|
||
|
||
**PRODUCT.md + DESIGN.md** updated to reflect WPF as the host (WinUI 3 lines removed), v2 IA decisions absorbed, recording references softened, theme implementation rewritten for WPF DynamicResource swap.
|
||
|
||
**Theme system split:**
|
||
- `src/TeamsISO.App/Themes/Theme.Dark.xaml` — color brushes only, dark variant
|
||
- `src/TeamsISO.App/Themes/Theme.Light.xaml` — color brushes only, light variant
|
||
- `src/TeamsISO.App/Themes/WildDragonTheme.xaml` — styles + control templates (no color brushes anymore; uses `DynamicResource` for every brush ref)
|
||
- `src/TeamsISO.App/Services/ThemeManager.cs` — singleton that swaps the merged dictionary at runtime, reads `HKCU\...\AppsUseLightTheme` for System mode, subscribes to `SystemEvents.UserPreferenceChanged`, persists via `UIPreferences.Theme`.
|
||
- `App.xaml` merges Theme.Dark.xaml + WildDragonTheme.xaml by default; `App.xaml.cs.OnStartup` calls `ThemeManager.Current.Apply()` before MainWindow shows.
|
||
- `UIPreferences.Prefs` record gets a new `Theme = "System"` field (forward-compatible — old json files still load).
|
||
- New brush key: `Wd.Accent.CyanText` (Dark `#97EDF0` / Light `#0E7C82`) for cyan-as-text contrast on light canvas. The existing `Wd.Accent.Cyan` stays bright in both modes for fill use.
|
||
|
||
**v2 main window shell:**
|
||
- Default Windows title bar (no more custom chromeless caption buttons — they looked generic and broke on DPI scaling).
|
||
- 32px header: Wild Dragon mark + "TeamsISO" wordmark left; three icon buttons right (⌘K command palette, theme toggle, settings gear). The mark is small (20px) as a quality cue — click opens About.
|
||
- 40px transport strip: mono-typed single line. `● 02:14:32 PART 4 · LIVE 2 CTRL :9755`. Cyan dot + timer only when at least one ISO live. CTRL cluster right-aligned in a Grid column.
|
||
- Body: alert banner + update banner + action toolbar (Enable / Refresh / Presets / Stop all + Teams launch/hide icons) + participants DataGrid.
|
||
- Conditional meeting bar at bottom — appears only when `IsTeamsInCall == true`, with Mute / Cam / Leave.
|
||
- 72px left rail: **gone**.
|
||
- 380px permanent settings panel: **gone**.
|
||
- Six-column footer: **gone**.
|
||
- Settings: slide-over drawer overlay (420px from right) triggered by the header gear; OUTPUT / NETWORK / APP tabs (DISPLAY renamed to APP); same bindings as v1. Scrim click dismisses; Esc dismisses.
|
||
|
||
**Hotkeys preserved + new:**
|
||
- F1 help, Ctrl+R refresh, Ctrl+Shift+S panic stop, 1–9 / NumPad 1–9 toggle Nth participant — all preserved.
|
||
- **Ctrl+T toggle theme (NEW)** — cycles dark ↔ light. Hooked through `MainViewModel.ToggleThemeCommand` → `ThemeManager.Toggle()`.
|
||
- **Ctrl+K command palette (placeholder)** — currently opens the help dialog. Task 40 replaces this with a real fuzzy-search palette window.
|
||
|
||
**View-model additions (MainViewModel):**
|
||
- `ParticipantCount` and `LiveCount` — feed the transport strip's "PART N · LIVE N" readout. Updated on the 1Hz stats tick.
|
||
- `ToggleThemeCommand` — wraps `ThemeManager.Current.Toggle()`.
|
||
|
||
**MainWindow code-behind cleanup:**
|
||
- Removed `OnMinimize`, `OnMaximizeRestore`, `OnClose`, `OnWindowStateChanged`, the maximize-icon swap logic (no more custom title bar).
|
||
- Added `OnCommandPaletteClick`, `OnSettingsScrimClick`, `OnPreviewKeyDown` (Esc to close drawer).
|
||
- `OnSettingsToggleClick` now toggles `SettingsDrawerOverlay.Visibility` (the slide-over) instead of toggling the v1 right-column width.
|
||
|
||
## To build, push, and demo
|
||
|
||
```powershell
|
||
cd "C:\Users\zacga\Documents\Claude\Projects\Teams ISO"
|
||
|
||
# Clear the corrupt local index from the earlier session
|
||
Remove-Item .git\index -Force -ErrorAction SilentlyContinue
|
||
git reset
|
||
|
||
# Build the WPF host
|
||
dotnet build src\TeamsISO.App\TeamsISO.App.csproj -c Release
|
||
|
||
# If the build is clean:
|
||
.\src\TeamsISO.App\bin\Release\net8.0-windows\TeamsISO.exe
|
||
```
|
||
|
||
In the running app, test:
|
||
1. **Theme toggle** — press `Ctrl+T`. Should swap dark ↔ light without restart. Header colors, surfaces, and text foregrounds all repaint.
|
||
2. **System theme follow** — open Windows Settings → Personalization → Colors → "Choose your mode" → flip between Dark and Light. TeamsISO should track the OS automatically (default preference is `System`).
|
||
3. **Settings drawer** — click the header gear icon. 420px drawer slides in from the right with OUTPUT / NETWORK / APP tabs. Esc or click-scrim dismisses.
|
||
4. **Transport strip** — should show the session timer when at least one ISO goes live, and the PART/LIVE counts always.
|
||
5. **Conditional meeting bar** — only appears when Teams is in a call.
|
||
|
||
If anything regresses, the v1 shell is preserved in git history at `1d1ce6a` — easy rollback with `git reset --hard 1d1ce6a` then publish.
|
||
|
||
## Commit + push when ready
|
||
|
||
```powershell
|
||
git add -A src/TeamsISO.App/ docs/ PRODUCT.md DESIGN.md
|
||
git commit -m "feat(wpf): v2 'Studio Terminal' shell — theme system, header, transport strip, drawer
|
||
|
||
- Theme split: Theme.Dark.xaml + Theme.Light.xaml + ThemeManager
|
||
- New shell: 32px header (mark + wordmark + 3 icons), 40px transport strip,
|
||
conditional meeting bar, slide-over settings drawer
|
||
- Removed: 72px rail, 380px permanent settings panel, 6-column footer,
|
||
custom chromeless title bar buttons
|
||
- Ctrl+T toggles theme; follows Windows app-mode by default
|
||
- Shape doc at docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md"
|
||
git push origin HEAD
|
||
```
|
||
|
||
## What's still queued (tasks 39 + 40)
|
||
|
||
- **Task 39** — Participants table redesign. The DataGrid columns in the v2 shell are still v1-style (Name / Source / ISO toggle). v2 wants: 5 columns (state LED, name+codec, audio meter, output name mono, ISO pill), 52px rows, full-row active-speaker tint instead of left stripe, hard-edged 8px state LED.
|
||
- **Task 40** — Real Ctrl+K command palette window. Floating 560×360 dialog, fuzzy search across categories (Quick / Teams / Presets / Output / Network / App). Replaces the current placeholder that opens the help dialog.
|
||
|
||
Both are scoped commits and depend on the v2 shell being confirmed working first. After this lands and you've verified the theme swap + drawer + transport strip render correctly, ping me and we'll knock those out.
|