Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 54 of 212 Next →
February 26, 2026
patch Notes

Fix DOCX export crash: copy NuGet dependencies to output

Details

Add CopyLocalLockFileAssemblies to the Notes plugin csproj. Without

this, NuGet dependencies like DocumentFormat.OpenXml and QuestPDF were

not copied to the build output. When the PluginLoadContext's

AssemblyDependencyResolver tried to resolve them at runtime, it failed

with FileNotFoundException because there's no runtimeconfig.json to

probe the NuGet cache.

This matches the pattern used by PrivStack.Plugin.Journal which also

has plugin-specific NuGet dependencies.

patch Notes

Style Notes image block with modern Journal photo treatment

Details

Wrap the image display in a styled Border with 8px corner radius,

clip-to-bounds, surface elevated background, dual-layer box shadow,

and hover lift animation (translateY -4px + expanded shadow, 200ms

cubic-ease transitions). Matches the PhotoLayoutBuilder cell styling

used in Journal.

patch Desktop Shell

Fix PushAllEntities firing on every app launch

Details

StartSyncForWorkspace unconditionally called PushAllEntities, which

re-uploads every entity in the store as a FullSnapshot to S3. Since

AutoStartSyncAsync calls StartSyncForWorkspace on every app launch,

this caused a full re-upload of all entities (seed data, categories,

accounts, metadata — everything) on every restart, regardless of

whether anything actually changed.

Added a pushAllEntities parameter (default false) so only first-time

setup paths (enable cloud sync, acknowledge recovery kit, after cloud

clean/purge) trigger the full push. Auto-start and manual resume use

the incremental path via SyncOutboundService.PushEvent instead.

patch Notes

Fix slash command not removing "/" from source block

Details

Setting rte.Markdown programmatically updates the visual display but

does NOT fire the TextChanged event, so the underlying model (e.g.

ParagraphBlock.Text) was never updated. When the ItemsControl

re-renders the block after inserting a new block (like a table), the

RTE reloads the stale model text which still contains the "/".

Add SyncRteToModel helper that copies rte.Markdown back to the model

(ParagraphBlock or HeadingBlock) after the programmatic slash removal.

This affects all block types created via "/" — table was the most

visible because inserting a non-RTE block forces a container recycle.

patch Notes

Add Ctrl+Tab block-level indent for all block types

Details

New feature: Ctrl+Tab indents the entire block (any type), Ctrl+Shift+Tab

outdents. Range 0–5 levels, 24px per level applied as left margin on

the BlockWrapper's outer border.

Model:

  • Add IndentLevel property to PageBlock (serialized as "block_indent",

omitted when 0, clamped to 0–5 on read)

Serialization:

  • PageBlockConverter.Read: parse "block_indent" from JSON
  • PageBlockConverter.Write: emit "block_indent" when > 0

View:

  • NotesView.OnKeyDown: Ctrl+Tab increments IndentLevel on the

top-level block, Ctrl+Shift+Tab decrements. Uses FindTopLevelBlock

to resolve the correct block even inside nested containers.

  • Add FindParentOfType<T> helper for visual tree traversal

BlockWrapper:

  • ApplyBlockIndentMargin: sets left margin on _outerBorder based on

PageBlock.IndentLevel, called on both OnLoaded and OnDataContextChanged

This is independent of ParagraphBlock.IndentLevel (Tab indent) which

applies a separate margin inside the block wrapper. Both can coexist.

← Prev Page 54 of 212 Next →

Get notified about new releases