teamsiso/src/TeamsISO.App.WinUI/Views/OnboardingDialog.xaml
Zac Gaetano 48ca16bc5e feat(winui3): ThemeManager service + Settings drawer + Help/About/Onboarding
Builds out the secondary surfaces of the redesigned WinUI 3 host.

ThemeManager (Services/ThemeManager.cs)
  Single-source-of-truth for the active theme. Holds the user preference
  (System / Dark / Light), resolves it to ElementTheme at request, and
  raises a Themed event when it changes so the MainWindow can push the
  AppWindow title-bar button colors. Uses Windows.UI.ViewManagement
  UISettings to follow the OS app-mode when preference is System.
  Persistence to UIPreferences lands in the engine-wiring commit.

MainWindow theme wiring
  Replaces the per-handler theme toggle with a ThemeManager subscription:
  click the title-bar sun/moon -> Toggle() -> Themed event ->
  ApplyResolvedTheme on the visual tree + the title-bar buttons. Glyph
  cue: sun = "current is Light, click to Dark"; moon = "current is Dark,
  click to Light." Initial state applied at construction so the first
  frame matches the preference.

SettingsDrawer (Views/SettingsDrawer.xaml + .cs)
  UserControl that slides in from the right over the participants table.
  56px header, NavigationView with five tabs (Appearance, Routing,
  Display, Control, Advanced), footer with Reset-to-defaults +
  Apply/Close. Appearance tab has the theme tri-state picker (System /
  Dark / Light radio group) and an "Accent peek" row showing the four
  brand accents (cyan / coral / live / warn) as swatches so the
  operator can verify Wild Dragon brand is respected on a light desk.
  CloseRequested event signals the host to collapse the drawer.

HelpDialog (Views/HelpDialog.xaml + .cs)
  ContentDialog with the keyboard shortcut cheat sheet, grouped by
  category (Global / Participants / Look / Control surface). 540px max
  height with scroll, mono-spaced shortcut labels at left, body text at
  right. Replaces the WPF host's HelpWindow at parity.

AboutDialog (Views/AboutDialog.xaml + .cs)
  ContentDialog with the Wild Dragon mark, version + host + engine +
  brand info as label/value rows, and three quick action buttons
  (open logs folder, open recordings, check for updates). Mirrors the
  WPF host's AboutWindow.

OnboardingDialog (Views/OnboardingDialog.xaml + .cs)
  Three numbered steps (Install NDI Runtime / Enable Teams NDI / Pick
  transcoder topology), no carousel, operator-tone copy ("Don't show
  this again" defaults checked). PrimaryButtonText "Get started",
  SecondaryButtonText "Skip" so the dialog is skippable from the first
  frame as the PRODUCT.md anti-references demand.

Build clean: dotnet build TeamsISO.App.WinUI -c Debug -> 0 / 0.

Next: wire the drawer's CloseRequested into MainWindow (so the settings
icon actually opens / collapses the drawer), then attack the runtime
activation blocker (Phase 3 of the migration plan).
2026-05-13 00:13:58 -04:00

104 lines
4.9 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<ContentDialog
x:Class="TeamsISO.App.WinUI.Views.OnboardingDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Welcome to TeamsISO"
PrimaryButtonText="Get started"
SecondaryButtonText="Skip"
DefaultButton="Primary"
Background="{ThemeResource BgElevated}"
BorderBrush="{ThemeResource BorderStrong}">
<!--
First-launch only. Three sections, one pane deep — no carousel,
no celebration. Operator-tone copy ("Pick your NDI groups" not
"Welcome to TeamsISO!"). Skippable from the first frame.
Suppressed after dismissal via UIPreferences (Phase 7).
-->
<StackPanel Spacing="20" MinWidth="500" MaxWidth="540">
<TextBlock Style="{StaticResource TextSubtle}" TextWrapping="Wrap">
TeamsISO sits between Microsoft Teams' NDI broadcast and your live-production switcher.
One-time setup gets you to the participants table.
</TextBlock>
<StackPanel Spacing="10">
<StackPanel Orientation="Horizontal" Spacing="10">
<Border Width="28" Height="28"
CornerRadius="14"
Background="{ThemeResource AccentCyanMuted}">
<TextBlock Text="1"
Style="{StaticResource TextBody}"
FontWeight="SemiBold"
Foreground="{ThemeResource AccentCyanText}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<TextBlock Text="Install the NDI Runtime"
Style="{StaticResource TextHeading}"
VerticalAlignment="Center"/>
</StackPanel>
<TextBlock Style="{StaticResource TextSubtle}"
Margin="38,0,0,0"
TextWrapping="Wrap">
From https://ndi.video/tools/. TeamsISO won't start without it — the engine relies on
NDI 5 for discovery and routing. If the runtime is missing, you'll see a launch error;
install it then relaunch.
</TextBlock>
</StackPanel>
<StackPanel Spacing="10">
<StackPanel Orientation="Horizontal" Spacing="10">
<Border Width="28" Height="28"
CornerRadius="14"
Background="{ThemeResource AccentCyanMuted}">
<TextBlock Text="2"
Style="{StaticResource TextBody}"
FontWeight="SemiBold"
Foreground="{ThemeResource AccentCyanText}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<TextBlock Text="Enable Teams NDI broadcast"
Style="{StaticResource TextHeading}"
VerticalAlignment="Center"/>
</StackPanel>
<TextBlock Style="{StaticResource TextSubtle}"
Margin="38,0,0,0"
TextWrapping="Wrap">
Teams admin must enable NDI broadcast for your tenant. In Teams, Settings → Devices →
"Allow NDI usage." Per-participant streams will appear as TeamsISO discovers them.
</TextBlock>
</StackPanel>
<StackPanel Spacing="10">
<StackPanel Orientation="Horizontal" Spacing="10">
<Border Width="28" Height="28"
CornerRadius="14"
Background="{ThemeResource AccentCyanMuted}">
<TextBlock Text="3"
Style="{StaticResource TextBody}"
FontWeight="SemiBold"
Foreground="{ThemeResource AccentCyanText}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<TextBlock Text="Pick your transcoder topology"
Style="{StaticResource TextHeading}"
VerticalAlignment="Center"/>
</StackPanel>
<TextBlock Style="{StaticResource TextSubtle}"
Margin="38,0,0,0"
TextWrapping="Wrap">
Defaults to 1920×1080 at 30 fps with letterbox aspect. Adjust under Settings → Routing.
Recording outputs land in %USERPROFILE%\Videos\TeamsISO\&lt;date&gt;\.
</TextBlock>
</StackPanel>
<CheckBox x:Name="DontShowAgain"
Content="Don't show this again"
IsChecked="True"/>
</StackPanel>
</ContentDialog>