Extract Canvas/Whiteboard into standalone plugin (v1.0.0)
Details
Canvas (whiteboards) has been extracted from the Notes plugin into its
own standalone plugin PrivStack.Plugin.Canvas. This reduces the Notes
god-object problem and gives Canvas its own navigation entry in the
sidebar.
New plugin (PrivStack.Plugin.Canvas v1.0.0):
- Standalone PluginBase<CanvasViewModel> with own NavigationItem
- Whiteboard CRUD via WhiteboardService (PluginId: privstack.canvas)
- Entity sidebar for cross-plugin drag-to-canvas
- Connector toolbar with style/arrow controls
- IDeepLinkTarget for whiteboard deep links
- IRecipient<EntitySyncedMessage> for cloud sync
- One-time data migration from privstack.notes to privstack.canvas
Notes plugin cleanup (v1.42.0):
- Removed whiteboard EntitySchema, WhiteboardService, CanvasViewModel
- Removed IsCanvasView property and Canvas toggle button
- Removed ~450 lines of canvas XAML and ~200 lines of code-behind
- Removed whiteboard sync handler and canvas event wiring
- Retained inline CanvasBlock support (AddCanvasBlock command) for
embedded canvas blocks within pages
Add entity sources sidebar to canvas view (v1.41.0)
Details
Adds a new "Entity Sources" panel below the whiteboard list in the
canvas sidebar. The panel discovers all ILinkableItemProvider plugins
(Tasks, Contacts, Calendar, Journal, Snippets, RSS, Web Clips, Files)
and lists their items grouped by plugin. Items can be dragged directly
onto the canvas to create entity reference cards.
New files:
- Models/CanvasEntityGroup.cs — grouped list model for sidebar TreeView
- ViewModels/CanvasViewModel.EntitySidebar.cs — entity sidebar state,
loading, and client-side filtering with debounce
Changes:
- NotesPlugin.cs: wire CapabilityBroker to CanvasViewModel, auto-load
entity sources on canvas navigation, version bump to 1.41.0
- NotesViewModel.Canvas.cs: load entity sources on canvas view switch
- NotesView.axaml: add resize handle + entity sources panel (header,
filter TextBox, TreeView with group/leaf templates) to canvas sidebar
- NotesView.axaml.cs: add entity drag handlers using EntityDragHelper,
resize handlers, and filter debounce wiring
Toolbar overhaul with active highlighting, shapes flyout, and connector toolbars (v1.40.0)
Details
Toolbar redesign with Figma-style active tool highlighting via EnumMatchConverter and
Classes.active binding. Shape buttons consolidated into a single flyout dropdown exposing
all 8 shapes (Rect, Ellipse, Diamond, Parallelogram, Cylinder, Hexagon, RoundedRect,
Triangle). Clicking the button creates the last-used shape; clicking the dropdown opens
the full menu.
Connector sub-toolbar appears when Connector tool is active, providing Style (Straight,
Curved, Elbow) and Arrow (Forward, Both, Backward, None) pickers that set defaults for
new connectors. Selected connector toolbar appears when a connector is selected, allowing
live modification of style and arrow mode on the selected connector.
New CanvasViewModel.ConnectorToolbar.cs partial handles connector selection state, default
connector properties, and event handlers for ConnectorSelected/Deselected/PropertyChanged.
Code-behind wires canvas control events to VM and syncs default properties back to control.
Wire entity-ref drag from plugins to InfiniteCanvas
Details
Add cross-plugin entity drag support so users can drag items from
Contacts, Journal, Snippets, RSS, and WebClips onto the Notes
InfiniteCanvas as reference cards. Each plugin emits the
privstack/entity-ref drag format using EntityDragHelper from
UI.Adaptive. Notes plugin wires EntityReferenceClicked events
through IDeepLinkTarget for double-click navigation back to the
source entity. Also adds entity-ref format to the Notes page tree
drag alongside the existing PageTreeNode format. Includes
EntityRefStyles color map for per-type badge rendering on canvas
cards. Version bumps: Notes 1.39.0, Contacts 1.7.0, Journal 1.5.0,
Snippets 1.5.0, RSS 1.7.0, WebClips 1.1.0.
Add canvas/whiteboard feature to Notes plugin (v1.38.0)
Details
Add standalone whiteboard entities with CRUD operations, infinite canvas
view with sidebar, and embeddable canvas blocks inside pages.
New files:
- Whiteboard model and WhiteboardSummary record for entity storage
- WhiteboardService for whiteboard CRUD via SDK messaging
- CanvasViewModel for whiteboard management, tool selection, autosave
- NotesViewModel.Canvas partial for view switching and page navigation
- CanvasBlockEditor control for embedding canvases inside page blocks
Modified files:
- NotesPlugin: register whiteboard entity schema, sync handler, service init
- Page.cs: add CanvasBlock type with converter support
- NotesView.axaml: replace canvas placeholder with full canvas UI including
whiteboard sidebar, InfiniteCanvasControl, floating toolbar, and
performance warning badge
- NotesView.axaml.cs: wire canvas control events (DataChanged, PageRef,
PerformanceWarning) and FitToView click handler
- PickerViewModels: add Canvas entry to block type picker list
- NotesViewModel: make SwitchToCanvasView async to load whiteboards
Consumes InfiniteCanvasControl from PrivStack.UI.Adaptive v1.27.0.
Whiteboard autosave uses 500ms debounce. Entity type uses LwwDocument
merge strategy for cloud sync compatibility.
Get notified about new releases