Center search pill in PluginToolbar using proper column definitions
Details
The toolbar row used a Grid with no column definitions, causing all children
to overlap in a single cell. Title (Left), search (Center), and actions
(Right) relied on HorizontalAlignment alone, which centers the search pill
relative to the full grid width rather than the space between title and
actions. Switch to ColumnDefinitions="Auto,*,Auto" so the search pill
centers within the remaining space between title and actions.
Route all StatusMessage feedback to toast system, enlarge timer buttons
Details
Two changes:
1. Migrate all transient StatusMessage assignments to Toast() calls
routed through IToastService. Added _toast field to TasksViewModel,
wired via Host.Toast in TasksPlugin. Error messages use
ToastType.Error, validation warnings use ToastType.Warning, all
other feedback uses default ToastType.Info. The StatusMessage
property is retained only for the static task count display.
Removed the StatusMessage TextBlock from the split header since
feedback now appears as shell toasts.
2. Increased timer play/stop button size from ThemeFontSizeXs to
ThemeFontSizeMd/Sm with larger padding (6,5 vs 4,3). Button is
now visible in all density modes, not just Full.
Center toasts on plugin content area, unify dismiss button style
Details
Move ToastContainer from the root Panel (centered on entire window)
into the Grid.Column=1 content area Panel so toasts center on the
plugin view regardless of sidebar state.
Dismiss button: match the type icon's layout — 16x16 panel, centered
vertically, symmetric margin (10,0,12,0 mirroring 12,0,10,0), same
StrokeThickness=2. Both icon and dismiss are now vertically centered
instead of top-aligned.
Add toast entrance/exit animations
Details
Entrance: slide down from -40px with BounceEaseOut easing (0.4s) for a
subtle bounce effect. Exit: slide up -30px + fade out (0.3s) before
removal from collection.
ToastService now raises DismissRequested so the container can animate
out before the toast is removed. Manual dismiss clicks, action button
clicks, and auto-dismiss timer all use the same animated path. A
HashSet tracks in-flight dismissals to prevent double-dismiss races.
Fix compact density, remove redundant footer, move header above split
Details
Three issues fixed:
1. Compact vs Balanced were identical — compact now hides the metadata
row (status, due date, subtasks) and tags, showing only priority dot
+ title for maximum density.
2. Removed the bottom footer bar (Total/Active/Done) which duplicated
the stats already shown in the header.
3. Moved the stats + New Task + Prioritize header out of the left pane
and above the split layout so it spans the full width. Adds a subtle
bottom border to visually separate it from the split content.
Get notified about new releases