Scatter plot: Made the GPU renderers draw marker shapes up to 40× faster when most rows are in view (2M circles: about 200 ms a frame down to 7 ms), so zooming and panning a large plot from its overview stays at the display's frame rate on WebGPU and WebGL; the markers look exactly as before
public#438: Binary Image: Decodes each image once and draws it in the same paint, instead of decoding every visible image again after each repaint
public#438: Binary Image: Byte columns that are not images (PDFs, hashes) are no longer shown as empty image cells
public#438: Binary Image: Double-click previews the image, with Replace... to load another one, and no longer opens a text editor showing the byte count
public#4233: Fixed the Color, Tags and Multi Choice renderers drawing the first row's value for every item in viewer legends and pie chart labels
Scatter plot: Fixed "Failed to autostart: viewers is not iterable" logged at startup when a non-table view (a script, a Diff Studio model) was open
Tests: Added package tests for the summary columns and the Forms viewer through a layout and a project, and for the Tags renderer marking only flagged rows without painting the grid over (GROK-20888); the bdd features keep the UI gestures
Scatter plot: Added a WebGL renderer for plots over 50K rows where WebGPU is unavailable or blocked: dots, all marker shapes (also per row, by a Markers column), sizes, colors, opacity, borders, selection, filtered-out rows and hit testing, matching the CPU renderer
Scatter plot: Rewrote the WebGPU renderer to draw what the WebGL one does: it matches the CPU renderer (dots pixel for pixel, sharp on high-DPI screens), draws per-row marker shapes, borders and opacity as the canvas does, compiles its pipelines once instead of every frame, and draws in the same frame as the axes; a lost device or a validation error falls back to WebGL
Scatter plot: The GPU renderers leave plots with labels next to the markers, a datetime axis by a time unit, or a non-numeric, non-string axis column to the CPU renderer, which draws them right
Scatter plot: A large plot drawn on the CPU before the package loaded switches to the GPU when it does
Forms: Fixed the mouse-over card keeping a row after the pointer left the viewer, when the card under the pointer had been re-rendered (in @datagrok-libraries/utils)
Tests: Added bdd/features/grid/summary-columns.feature (14 tests), translating the summary-column scenarios of the TestTrack grid specs: every renderer item of Add > Summary Columns with its renderer read from the grid, the top-panel remove icon (GROK-18256), a Tags column whose source column is removed (GROK-19942), a renamed source column, the columns across a layout and a project, and what a Tags column draws (GROK-20888)
Summary columns: Fixed the autostart failing with "Cannot read properties of undefined (reading 'dataFrame')" when it landed while a table view was still being built
Summary columns: Fixed the source-column rename and remove handler skipping Tags columns — it looked the settings up under the grid's lower-case cell type, where the Tags renderer keeps them under Tags; a removed source column now leaves the Tags column's settings
Forms viewer: Fixed the viewer drawing no cards at all when the leading card has no row (after a grid-header sort clears the current row, or with Show Current Row off and nothing hovered): a card for no row now keeps a real card's size, so the record cards stay laid out
GROK-20888: Fixed the Tags and Bar summary columns painting the whole grid body in the chip color (a canvas path leak: roundRect without beginPath)
Tests: Added the bdd project with five Forms viewer features (30 scenarios) on the viewers tier, and gave the viewer its automation surface (isRenderPending, onRendered, getWidgetStatus with cards, fields, labels and sort indicators as hit areas)
GROK-20380: Fixed the Forms viewer ordering its cards by the spreadsheet's sort with Use Grid Sort off
#3765: Forms viewer: Added the ability to pin rows via the context menu; pinned forms stay in place when scrolling
Vlaaivis manager: Fixed the mpo-line-editor import path, which broke the build after the editor moved into mpo/editors/
Vlaaivis: Fixed the build against the MPO desirability union — Subsector is an intersection now (an interface cannot extend a union), and VlaaivisColumnMetadata is typed on the numerical member it has always been
Introduced SVG cell renderer with content-based LRU caching for canvas rendering
Added SVG semantic type auto-detector
Tags cell renderer: Tags are colored consistently with the Colors panel — explicitly assigned category colors apply, and default colors follow the categorical color editor's value order instead of first-seen order
Tags cell renderer: Fixed missing return in getColor that left first render of a new tag with an undefined color
Tags cell renderer: Fixed empty cells painting a zero-width chip (empty tokens are dropped after the split)
Pie chart sparkline: Filter null columns in hit-test so hovering with stale/missing column names no longer throws
Forms cell renderer: Scoped per-cell scene via WeakMap keyed on grid (removes cross-grid contamination) and debounced tooltip shows (no more flicker)
Vlaaivis manager: Migrated drop handler to the new doDrop(args) signature in ui.makeDroppable
#2117: Pinned columns are not displayed properly with some row source options for the table (MouseOverRow, FilteredSelected, Selected, SelectedOrCurrent).