Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 25 of 95 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 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.

patch Notes

Fix slash command inserting above blockquotes instead of after

Details

When "/" is typed inside a blockquote (or callout/group), FindParentBlock

returns the inner child PageBlock which isn't in CurrentBlocks, causing

IndexOf to return -1. The slash insert index falls back to stale

_savedBlockIndex, placing the new block at the wrong position.

Add FindTopLevelBlock helper that walks up the visual tree and returns

the first PageBlock found in CurrentBlocks. For nested containers, this

correctly resolves to the outer blockquote/callout block. For regular

blocks, it behaves identically to FindParentBlock.

The slash handler now uses FindTopLevelBlock instead of FindParentBlock

for index resolution.

← Prev Page 25 of 95 Next →

Get notified about new releases