Stretch theme editor to fill window, comprehensive token preview
Details
Dialog changes:
- Stretch to fill window with 48/36px margins instead of fixed width (was
getting clipped on smaller screens)
- Left color column fixed at 420px so labels stop truncating
- Preview panel gets all remaining width
Preview panel rewrite — now shows every design token in context:
- Typography: all text colors, accent links with underlines, text-on-accent
chips on primary/secondary backgrounds
- Text Selection: simulated selection on surface + elevated backgrounds,
interactive SelectableTextBlock, all 6 note highlight colors
- Buttons: matrix grid showing Primary/Secondary/Danger in Normal, Hover,
and Muted/Glow states side by side
- Surface Hierarchy: full nesting stack (background → surface → elevated)
plus input background, recessed, and glass surfaces
- Interaction States: normal, hover, selected (with accent bar), pressed
- Semantic Colors: 4-column grid (Success/Warning/Danger/Info) each showing
solid + muted variants, plus Alpha/Beta stage badges
- Form Elements: 2-column layout with inputs, checkboxes, radios, toggle,
progress bars in primary + secondary colors
- Borders: standard + subtle side by side
- Navigation: active (with accent bar), normal, hover states
- Scrollbar: visual mockup of track, thumb, and thumb-hover states
- Calendar: event + event muted chips
- Modal & Overlays: standard + heavy backdrop previews
Fix loading animation freeze during workspace preparation
Details
The shimmer animation on the unlock screen froze during the
"Preparing workspace..." phase because new MainWindow() parses ~900
lines of XAML synchronously on the UI thread, blocking the render loop.
Three changes:
1. Before MainWindow creation, transition the unlock screen from an
animated shimmer to a static "Launching..." message. A static state
doesn't look broken when the UI thread blocks, unlike a frozen
translate animation.
2. Split MainWindow construction and DataContext assignment into
separate steps with dispatcher yields between them, giving the
render loop more chances to tick.
3. Move CloudSyncEnterPassphrase (which does S3 network I/O) off the
UI thread in AutoStartSyncAsync. Previously it ran synchronously
on whatever thread the async method started on.
Flush WAL files on graceful shutdown
Details
Add checkpoint() methods to EntityStore, EventStore, BlobStore,
VaultManager, and DatasetStore. Call all of them from
privstack_shutdown() before dropping the handle.
Previously, shutdown just dropped the handle without checkpointing,
leaving WAL files on disk. On next startup this produced warnings like:
[StorageDiag] data.entities.duckdb.wal: WAL EXISTS! size=210638
DuckDB's implicit drop doesn't guarantee WAL flush, so an explicit
CHECKPOINT is needed for clean shutdown.
Make Duncan chat input multi-line with auto-grow
Details
- Enable AcceptsReturn + TextWrapping on ChatInputBox so users can compose
multi-line messages (grows up to ~10 visible lines / 200px max height,
scrollable beyond that)
- Move Send button below the text box, right-aligned
- Intercept Enter via tunnel-phase KeyDown handler to send message (bypassing
AcceptsReturn's newline insertion); Shift+Enter inserts a newline as expected
Improve text selection contrast, theme editor UX, and Duncan panel shadow
Details
- Halve ThemeSelection opacity across all 7 themes for better text readability
when selecting text (was too dark/saturated, obscuring selected text)
- Add global SelectableTextBlock SelectionBrush style in PrivStackTheme.axaml
so Duncan chat and all selectable text blocks use the theme selection color
- Widen theme editor dialog (1100→1300px) with redesigned header: proper title,
subtitle description, cleaner two-row layout with name input separated from
action buttons
- Add Text Selection and Highlights preview sections to ThemePreviewPanel:
simulated selection overlay, interactive SelectableTextBlock, and all 6
highlight colors (Yellow, Blue, Green, Pink, Purple, Orange) as preview chips
- Add subtle layered drop shadow to Duncan AI chat panel for better visual
separation from content area
Get notified about new releases