Replace all hardcoded AXAML colors, font sizes, and shadows with theme resources (v1.34.0, SDK v1.38.0)
Details
Systematic sweep across all AXAML files replacing hardcoded values:
- Modal backdrops: replaced inline #80000000 with Classes="modal-backdrop" (8 files)
- Modal card shadows: replaced inline BoxShadow with Classes="modal" (8 files)
- DashboardView: replaced 10x identical BoxShadow with Classes="shadow-sm"
- MainWindow: banner #E53E3E -> ThemeDangerBrush, Foreground="White" -> ThemeTextPrimaryBrush, raw FontSize -> theme resources
- SensitiveUnlockOverlay: #E0181820 -> modal-backdrop, #30F38BA8 -> ThemeDangerMutedBrush, Foreground="White" -> ThemeTextPrimaryBrush
- PasswordConfirmationWindow: BoxShadow -> modal class, #30F38BA8 -> ThemeDangerMutedBrush
- SettingsPanel: FontSize="18" -> ThemeFontSizeXl, Foreground="White" -> ThemeTextPrimaryBrush
- GraphView tags: #9CA3AF -> ThemeTextMutedBrush
- EmojiPicker/SkinTonePopover: backdrop and shadow -> theme classes
Added to PrivStackTheme.axaml:
- modal-backdrop-light class (#40000000) for lighter overlays
- shadow-sm, shadow-md, shadow-lg utility classes for shadow-only application
- Updated modal-backdrop to #80000000 matching actual modal usage
Add ThemedDropdown and IconLabel controls to UI.Adaptive (v1.37.0)
Details
Add two new shared controls to PrivStack.UI.Adaptive for enforcing
consistent styling across the app:
ThemedDropdown: Wraps a native ComboBox with standardized theme-aware
styling. Supports three size variants (Standard/Compact/Dense) with
enforced padding and corner radius. Properties include ItemsSource,
SelectedItem (TwoWay), SelectedIndex (TwoWay), PlaceholderText,
ItemTemplate, ShowBorder, and MaxDropDownHeight. Uses
GetResourceObservable for Background/Foreground auto-tracking and
ActualThemeVariantChanged for border/radius updates. Includes
re-entrancy guard for selection sync between the outer control
properties and the inner ComboBox.
IconLabel: Horizontal or vertical icon+text pair with optional
PathIcon and TextBlock. Hides icon when IconData is null, hides
text when Text is null/empty. Foreground defaults to
ThemeTextPrimaryBrush via resource observable when not explicitly
set. FontSize defaults to ThemeFontSizeSmMd (sentinel value 0)
for automatic theme binding. Supports configurable IconSize,
Spacing, FontWeight, and Orientation.
Both controls follow the existing PluginToolbar pattern: inherit
Border, compose children in constructor, forward StyledProperties
via OnPropertyChanged, and manage theme lifecycle via
OnAttachedToVisualTree/OnDetachedFromVisualTree.
SDK version: 1.36.0 -> 1.37.0
Desktop version: 1.33.5 -> 1.33.6
Add SupportedLinkTypes and typed NavigateToItemAsync to IDeepLinkTarget (v1.36.0)
Details
Plugins managing multiple entity types (e.g., Contacts with contact, company,
contact_group) had no way to register deep-link routing for sub-entity types.
Only the primary LinkType was matched, causing navigation failures for secondary
types like contact_group and company in both the neuron graph and info panel.
Added SupportedLinkTypes property with default implementation returning [LinkType]
for backward compatibility, and a NavigateToItemAsync(string linkType, string itemId)
overload so plugins can dispatch to the correct sub-view based on entity type.
Add toast notification system to Desktop (v1.33.0)
Details
Implement ToastService and ToastContainer control for global
in-app toast notifications. Toasts appear top-center with
type-based styling (Success/Info/Warning/Error), friendly
labels ("All Set", "FYI", "Heads Up", "Action Needed"),
optional action buttons, and auto-dismiss (5-10s by type).
Max 4 visible with oldest trimmed on overflow.
Added ThemeInfo/ThemeInfoMuted color + brush resources to all
7 theme files. Registered ToastService in DI, wired through
PluginHostFactory → PluginHost → IPluginHost.Toast so plugins
can show toasts via Host.Toast.Show(). Bumped Desktop version
from 1.32.1 to 1.33.0.
Add IToastService interface to SDK (v1.35.0)
Details
Introduce ToastType enum and IToastService interface for global
in-app toast notifications. Plugins will access this via
IPluginHost.Toast to show transient messages with type-based
styling and optional action buttons. Added Toast property to
IPluginHost interface. Bumped SDK version from 1.34.0 to 1.35.0.
Get notified about new releases