Add data.generate_insights intent for AI-triggered dataset analysis
Details
Expose the existing insights generator pipeline as an intent so Duncan
can trigger exploratory data analysis when users ask to analyze, report
on, or generate insights from an embedded dataset. The intent fetches
sample data, pushes a loading suggestion card, and sends the
DatasetInsightRequestMessage to the shell's DatasetInsightOrchestrator
— the same pipeline used by the UI "Generate Insights" button.
Bump Data plugin version to 1.21.0.
Notes: multi-image gallery for image blocks
Details
Replace the single-image ImageBlockEditor with a multi-image gallery
matching the Journal's photo section pattern. Key changes:
- Add ImagePhoto record, ImagePhotoLayout enum, extend ImageBlock with
Photos list and PhotoLayout property (backward-compatible — legacy
single-image blocks auto-migrate on load)
- New ImageLayoutBuilder: smart grid layouts (hero top/left/right, 2x2,
rows-of-3) with hover lift animation, rounded corners, and shadow
- New ImageLightbox: full-screen overlay with zoom (wheel, 0.5x–5x),
pan (drag when zoomed), navigation arrows, counter, double-tap reset
- Rewrite ImageBlockEditor: drop zone for empty state, multi-select
file picker, drag-to-reorder between cells, per-image remove button
on hover, layout picker for 3+ photos
- Add lightbox state and commands to NotesViewModel
- Update Markdown/PDF/DOCX export services to handle multi-image blocks
- Bump version to 1.64.0
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.
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.
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.
Get notified about new releases