Implement dual-grid freeze pane layout for column/row freezing (1.22.0)
Details
Column freeze now uses a DockPanel with a fixed-width frozen grid on the
left and a horizontally scrollable grid on the right, separated by a
visual divider. When FrozenColumnCount > 0, the renderer splits cells
between the two grids so frozen columns stay in place during horizontal
scroll. Resize grips dispatch to the correct grid via a routing layer.
Row freeze for infinite scroll pins the first N data rows at the top of
the visible window. The mouse wheel only scrolls the remaining rows.
The InfiniteScroll page cache assembles frozen rows + scrollable rows
from the appropriate pages.
Add table freezing, infinite scroll, and default settings (1.35.0)
Details
Add column/row freeze persistence, infinite scroll mode, and a plugin-wide
table defaults settings panel. TableBlock model gains FrozenColumns, FrozenRows,
and ScrollMode fields with full JSON serialization. All six data sources
implement OnFreezeColumnsAsync/OnFreezeRowsAsync. TableBlockEditor wires
freeze and scroll mode events from TableGrid and applies plugin-level defaults
for striping, color theme, page size, and scroll mode when per-table values
are unset. New NotesSettingsOverlay accessible via Settings cog > Table Defaults.
Add column/row freezing, infinite scroll mode, and scroll mode toggle (1.21.0)
Details
Add freeze pane support to TableGrid: right-click column header → "Freeze From Here" pins
columns to the left; right-click data row → "Freeze This Row" pins rows above. Visual
indicators (blue border lines) mark freeze boundaries. Frozen state persisted through
FrozenColumnCount/FrozenRowCount properties on TableGridData and corresponding
OnFreezeColumnsAsync/OnFreezeRowsAsync callbacks on ITableGridDataSource.
Add infinite scroll mode as an alternative to pagination. Toggle via gear menu →
"Infinite Scroll". When active, pagination bar hides, vertical scrollbar enables,
and rows accumulate as user scrolls near the bottom (100px threshold). Filter/sort
resets accumulated rows. TableGridInfiniteScroll manages page tracking, row
accumulation, and loading indicator. TableScrollMode enum (Paginated/InfiniteScroll)
added to models.
New files: TableGridFreezeLayout.cs (dual-grid layout manager for frozen columns),
TableGridInfiniteScroll.cs (scroll monitoring and page accumulation).
Updated: TableGrid.cs (new StyledProperties + events for freeze counts and scroll mode),
TableGridRenderer.cs (freeze boundary indicators, frozenColumnCount/frozenRowCount params),
TableGridContextMenu.cs (freeze/unfreeze menu items), TableGridToolbar.cs (scroll mode toggle),
ITableGridDataSource.cs (freeze callbacks), TableGridModels.cs (freeze fields + scroll enum).
Bumps PrivStackSdkVersion from 1.20.14 to 1.21.0.
Table system overhaul — options gear, striping, insert indicators, edit flyout (1.34.0)
Details
Restructure Notes plugin table system to use the new UI.Adaptive 1.20.0
TableGrid capabilities:
TableBlockEditor split into 5 partial classes (~200 lines each) from the
previous 949-line monolith:
- TableBlockEditor.axaml.cs: lifecycle, rendering, data source dispatch
- TableBlockEditorImport.cs: import/refresh from CSV/TSV/JSON files
- TableBlockEditorDatasetConfig.cs: dataset configuration wizard panel
- TableBlockEditorColumns.cs: column visibility/reorder flyout
- TableBlockEditorOptionsMenu.cs: gear menu wiring, state persistence
New features:
- Options gear menu replaces scattered toolbar buttons — Import, Refresh,
Columns, Edit Source now appear as menu items alongside built-in options
(Header Row, Striped Rows, Export, Edit Table)
- TableEditFlyout for editing table title, caption, header, striping,
and color theme (Default/Blue/Green/Purple/Orange presets)
- HasHeader flag synced bidirectionally with Rows[0].IsHeader for backward
compat when loading older tables
- FilterText, PageSize, IsStriped persisted to TableBlock on commit events
- ColorTheme and IsStriped forwarded to TableGrid for rendering
Data source changes:
- All 6 ITableGridDataSource implementations updated with positional
insert/delete methods (OnInsertRowAtAsync, OnDeleteRowAtAsync,
OnInsertColumnAtAsync, OnDeleteColumnAtAsync)
- ManualTableSource and EntityTableSource: full implementations with
header offset handling, sort order shifting, column width management
- DatasetTableSource, ViewTableSource, PluginQueryTableSource,
SourceBackedTableSource: throw NotSupportedException (read-only)
Model changes:
- TableBlock gains IsStriped, HasHeader, SortColumn, SortDirection,
ColorTheme, Caption properties with JSON serialization
- Tablemeta marker extended to 13 fields for markdown round-trip
- MarkdownBlockParser parses extended tablemeta with fallback application
when block ID is not found in existing block map
AXAML cleanup:
- Removed DataSourceControls panel (Edit Source, Columns buttons) — these
are now menu items in the options gear flyout
Unify all table types through TableGrid, gut TableBlockEditor (1.33.0)
Details
Phase 2 completion — all 6 table types now render through the shared TableGrid component
in UI.Adaptive. TableBlockEditor reduced from 3,272 to ~550 lines by extracting all
grid rendering, cell editing, drag-drop, context menus, sorting, filtering, paging,
and export into the shared component.
New files:
- ManualTableSource: ITableGridDataSource adapter for inline manual tables. Rows stored
directly in TableBlock.Rows. Full editing, sorting (SmartComparer), filtering, paging,
row/column reorder, and structure editing support
- EntityTableSource: ITableGridDataSource adapter for entity-backed tables. Rows stored
as separate entities via TableRowService. Implements IDisposable for debounce cleanup.
Debounced save (300ms per-row CancellationTokenSource) for cell edits
Modified files:
- TableBlockEditor.axaml: Removed manual Grid, toolbar, filter/paging controls. Kept
unified TableGrid, ImportPanel, DataSourceControls, DatasetConfigPanel, QueryErrorBorder
- TableBlockEditor.axaml.cs: Removed ~2,700 lines of inline rendering (RebuildManualTable,
RebuildEntityTableAsync, CreateEditableCell, CreateEntityCell, all navigation, context
menus, drag handlers, resize handlers, export methods). Kept lifecycle, data source
dispatch, import/refresh, dataset config, and column visibility as thin wiring layer
- NotesPlugin.cs: Version 1.32.0 -> 1.33.0
Get notified about new releases