- 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
6.4 KiB
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 variantsrc/TeamsISO.App/Themes/Theme.Light.xaml— color brushes only, light variantsrc/TeamsISO.App/Themes/WildDragonTheme.xaml— styles + control templates (no color brushes anymore; usesDynamicResourcefor every brush ref)src/TeamsISO.App/Services/ThemeManager.cs— singleton that swaps the merged dictionary at runtime, readsHKCU\...\AppsUseLightThemefor System mode, subscribes toSystemEvents.UserPreferenceChanged, persists viaUIPreferences.Theme.App.xamlmerges Theme.Dark.xaml + WildDragonTheme.xaml by default;App.xaml.cs.OnStartupcallsThemeManager.Current.Apply()before MainWindow shows.UIPreferences.Prefsrecord gets a newTheme = "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 existingWd.Accent.Cyanstays 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):
ParticipantCountandLiveCount— feed the transport strip's "PART N · LIVE N" readout. Updated on the 1Hz stats tick.ToggleThemeCommand— wrapsThemeManager.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). OnSettingsToggleClicknow togglesSettingsDrawerOverlay.Visibility(the slide-over) instead of toggling the v1 right-column width.
To build, push, and demo
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:
- Theme toggle — press
Ctrl+T. Should swap dark ↔ light without restart. Header colors, surfaces, and text foregrounds all repaint. - 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). - Settings drawer — click the header gear icon. 420px drawer slides in from the right with OUTPUT / NETWORK / APP tabs. Esc or click-scrim dismisses.
- Transport strip — should show the session timer when at least one ISO goes live, and the PART/LIVE counts always.
- 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
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.