Convert AI tray from flat card list to conversation chat interface
Details
Redesign the AI suggestion tray as a chat-style conversation UI with user/assistant
message bubbles. User actions (Summarize, Rewrite) appear as right-aligned user bubbles
with clickable source entity links, followed by left-aligned assistant response bubbles
with loading states, content, and action buttons.
Key changes:
- Add UserPromptLabel to ContentSuggestionCard SDK model for user bubble text
- New AiChatMessageViewModel with User/Assistant roles, state management, and actions
- Refactor AiSuggestionTrayViewModel to use Messages collection instead of Cards
- Add free-form chat input with AiSuggestionTrayViewModel.Chat.cs partial class
- Rewrite AiSuggestionTray.axaml with chat bubble layout, auto-scroll, Enter-to-send
- Wire NavigateToLinkedItemFunc for clickable source links in bubbles
- Fix text overflow: all content uses TextWrapping="Wrap" instead of TextTrimming
- Rename tray header from "AI Suggestions" to "PrivStack AI"
- Mark old IAiTrayCardViewModel and ContentSuggestionCardViewModel as [Obsolete]
- Bump SDK to 1.50.0, Desktop to 1.50.0
Widen theme editor dialog to prevent truncation
Details
The 900px width was too narrow — display names like "Surface Elevated"
and "Input Background" were truncated, hex inputs were squeezed, and
the header action buttons were cramped. Widened to 1100x780 and bumped
hex input width from 80 to 95px for full #AARRGGBB visibility.
Add InputBackground and SurfaceRecessed to theme editor
Details
The ThemeColorKeys registry was missing the new ThemeInputBackground
token and the existing ThemeSurfaceRecessed token, so neither appeared
in the theme customizer dialog. Both are now listed under the Background
group so users can adjust them per custom theme.
Add dedicated ThemeInputBackgroundBrush token for TextBox contrast
Details
TextBox inputs were using ThemeSurfaceBrush which is nearly identical to
ThemeBackgroundBrush in dark themes (#16161E vs #0F0F14), making filter
fields and search inputs invisible against the panel background.
Introduces a new ThemeInputBackground/ThemeInputBackgroundBrush token
across all 7 themes with values tuned for clear input field visibility:
- Dark: #1E1E2A (lifted from surface #16161E)
- Slate: #1C2C3C (lifted from surface #142230)
- Ember: #26241A (lifted from surface #1C1A12)
- Light/Azure/Sage/Lavender: #FFFFFF (crisp white input fields)
The global TextBox style in PrivStackTheme.axaml now uses
ThemeInputBackgroundBrush instead of ThemeSurfaceBrush. No plugin
changes needed — all TextBoxes inherit from the centralized style.
Version: 1.49.5 → 1.49.6
Fix AI tray hit testing — remove inline IsHitTestVisible override
Details
The AiTrayDrawer StackPanel had IsHitTestVisible="False" set as an
inline attribute, which in Avalonia takes priority over style setters.
This prevented the .open class style from setting IsHitTestVisible to
True, meaning all clicks passed through the tray to the backdrop behind
it, immediately closing the tray.
The base style already sets IsHitTestVisible=False by default, and the
.open style correctly sets it to True. Removing the inline attribute
lets the style precedence work as intended, matching the pattern used
by InfoPanelDrawer which works correctly.
Get notified about new releases