Frontmatter
| id | 9408 |
| title | Grid Core Integration & TreeGrid Accessibility |
| state | Closed |
| labels | enhancementaicoregrid |
| assignees | tobiu |
| createdAt | Mar 9, 2026, 11:59 AM |
| updatedAt | Mar 9, 2026, 7:17 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9408 |
| author | tobiu |
| commentsCount | 2 |
| parentIssue | 9404 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Mar 9, 2026, 7:17 PM |
Grid Core Integration & TreeGrid Accessibility
tobiu added parent issue #9404 on Mar 9, 2026, 11:59 AM

tobiu
Mar 9, 2026, 12:09 PM
Input from Gemini 3.1 Pro:
✦ Implementation Guidance for Agents:
- ARIA Mapping: The new WAI-ARIA attributes (
aria-expanded,aria-level,aria-setsize,aria-posinset) MUST be applied directly to the row container.- Target File: Implement this mapping inside
src/grid/Row.mjswithin thecreateVdom()method.- Contiguous Indexing: Do not attempt to calculate complex
aria-rowindexlogic. Because theTreeStoreprovides a flattened array of visible nodes,rowIndex + 2insideRow.mjswill naturally remain contiguous and gapless.- Role: Add an
isTreeGridboolean config tosrc/grid/Container.mjs. If true, the container's VDOM root should userole: 'treegrid'instead ofrole: 'grid'.
tobiu assigned to @tobiu on Mar 9, 2026, 12:10 PM
tobiu cross-referenced by #9422 on Mar 9, 2026, 7:16 PM

tobiu
Mar 9, 2026, 7:17 PM
Input from Gemini 3.1 Pro:
✦ I have completed the ARIA accessibility mappings for TreeGrids!
- Added
siblingCountandsiblingIndextoTreeModel.mjsalongside an architectural note explaining the trade-off.- Added
isTreeGridtogrid.Containerwhich toggles therole="treegrid".- Mapped
aria-expanded,aria-level,aria-posinset, andaria-setsizeinto the VDOM ofgrid.Row.- I have also created a follow-up ticket to address the TreeStore mutation logic as discussed.
Closing this ticket as complete.
tobiu closed this issue on Mar 9, 2026, 7:17 PM
Goal
Ensure
GridContainer,GridBody, andRowcorrectly handle the dynamic flat-array sizing provided by theTreeStoreand implement full WAI-ARIA treegrid attributes for maximum accessibility.Details
Virtual Scroller Reaction:
GridBodycorrectly responds to theTreeStore'smutateevents when nodes expand/collapse (thecountchanges).aria-rowcounton theGridBodyupdates dynamically based on the current length of the flattened view.VerticalScrollbarrecalculates its height based on the newstore.count.A11y (Row Level ARIA):
src/grid/Row.mjs->createVdom().record.expandedtoaria-expanded(true/false). Omit entirely for leaf nodes.record.depthtoaria-level(1-based).record.siblingCounttoaria-setsize.record.siblingIndextoaria-posinset(1-based).aria-rowindexvalues based on the flattened visible array.Data Layer Support for A11y Attributes:
TreeStore(orTreeModel) must providedepth,siblingCount, andsiblingIndexfor all records.loadDataand store them directly on the raw data objects / records for O(1) retrieval during rapid scrolling.Role Update:
isTreeGrid: falsetoGridContainer.true, switch the container's ARIA role fromgridtotreegrid.