Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 57 of 266 Next →
February 26, 2026
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.

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 57 of 266 Next →

Get notified about new releases