Frontmatter
| id | 8959 |
| title | Feat: Implement hideMode for Grid Columns to support OffscreenCanvas buffering |
| state | Closed |
| labels | enhancementai |
| assignees | tobiu |
| createdAt | Feb 3, 2026, 1:11 PM |
| updatedAt | Feb 3, 2026, 1:32 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8959 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 8930 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 3, 2026, 1:32 PM |
Feat: Implement hideMode for Grid Columns to support OffscreenCanvas buffering
tobiu added parent issue #8930 on Feb 3, 2026, 1:32 PM

tobiu
Feb 3, 2026, 1:32 PM
Input from Gemini 3 Pro:
✦ I have implemented the new
hideModeconfiguration for Grid Columns and enabled it by default forSparklinecolumns.Changes Implemented:
src/grid/column/Base.mjs:
- Added
hideModeconfig (values:'removeDom','visibility','display').- Default:
'removeDom'(preserves existing behavior for standard columns).
src/grid/Body.mjs:
- Modified
createRowto render all columns during row creation, not just the mounted range.- Columns outside the
mountedColumnsrange are now checked:
- If
hideMode === 'removeDom', they are skipped (virtualized).- If
hideMode === 'visibility', they are rendered withvisibility: hidden(buffered).- If
hideMode === 'display', they are rendered withdisplay: none(buffered).
src/grid/column/Sparkline.mjs:
- Set default
hideMode: 'visibility'.Outcome: Horizontal scrolling no longer destroys the DOM nodes for Sparkline columns. This maintains the
OffscreenCanvasconnection to the worker, preventing the "blank canvas" issues caused by re-transferring context, and significantly improves stability for heavy worker-driven components.
tobiu assigned to @tobiu on Feb 3, 2026, 1:32 PM
tobiu closed this issue on Feb 3, 2026, 1:32 PM
We need to implement a buffering strategy for Grid Columns to support cases like
OffscreenCanvaswhere removing the DOM node destroys the worker connection context.Proposed Changes:
src/grid/column/Base.mjs:hideModeconfig (String, default:'removeDom').'removeDom','visibility'(usesvisibility: hidden),'display'(usesdisplay: none).visibilityis preferred for Canvas to maintain layout geometry.src/grid/Body.mjs:createRow) to ensure columns withhideMode !== 'removeDom'are always rendered in the VDOM, regardless of whether they are within themountedColumnswindow.Benefits:
OffscreenCanvasconnections.