LearnNewsExamplesServices
Frontmatter
id9404
title[Epic] Tree Grid & Hierarchical Data Support
stateOpen
labels
enhancementepicaiarchitecturegrid
assigneestobiu
createdAtMar 9, 2026, 11:43 AM
updatedAtMar 10, 2026, 2:35 PM
githubUrlhttps://github.com/neomjs/neo/issues/9404
authortobiu
commentsCount1
parentIssuenull
subIssues
9405 Create `Neo.data.TreeModel`
9406 Create `Neo.data.TreeStore`
9407 Create `Neo.grid.column.Tree` & Cell Component
9408 Grid Core Integration & TreeGrid Accessibility
9409 CSS Animations for TreeGrid Expand/Collapse
9410 TreeGrid Documentation & Examples
9411 TreeGrid Unit Tests (Data & Logic)
9412 TreeGrid Component Tests (UI & Interactions)
9413 Create Async Subtree Loading for `Neo.data.TreeStore`
9414 Refactor `Neo.data.Store` to unify Record Hydration
9415 Support "Turbo Mode" in `Neo.data.TreeStore`
9416 Add Error State & Events for Async Tree Loading
9417 Optimize `TreeStore` Hot Paths (Performance)
9418 Create Data Normalizer Architecture (`Neo.data.normalizer.Base` & `Tree`)
9419 Implement Dynamic Module Loading in `Neo.worker.Data`
9420 Migrate Data Pipeline to Connection -> Parser -> Normalizer flow
9422 Update TreeStore to manage ARIA sibling fields on mutations
9423 TreeStore Full CRUD Support & Structural Mutations
9425 Refactor Tree cell component architecture for performance
9426 Refactor Tree column and component reactivity
9427 Fix TreeStore projection mutations and Row VDOM recycling
9428 TreeStore: Implement hierarchical sorting for doSort override
9429 TreeStore: Implement ancestor-aware filtering for filter override
9430 TreeModel: Introduce childCount to decouple isLeaf state from emptiness
9431 TreeStore: Fix ARIA desync (siblingIndex and siblingCount) after sort and filter
9432 TreeStore: Override clear() to prevent memory leaks and split-brain states
9433 TreeStore: Implement bulk expandAll() and collapseAll() methods
9434 TreeStore: Decouple clearFilters() from legacy allItems pattern
9435 TreeStore: Fix visible projection for dynamic child additions to expanded parents
9437 TreeStore: Optimize #allRecordsMap iteration loops
9438 TreeStore: Reduce GC pressure and redundant iterations
9439 TreeStore: Apply "Anchor & Echo" JSDoc strategy for AI discoverability
9445 TreeGrid Documentation: Create high-level architectural guide for TreeStore
9447 TreeGrid: Fix 7-click expand/collapse bug and redundant change events
9448 TreeGrid Component pooling accumulates `is-leaf` class leading to visual bugs
subIssuesCompleted31
subIssuesTotal35
blockedBy[]
blocking[]

[Epic] Tree Grid & Hierarchical Data Support

Openenhancementepicaiarchitecturegrid
tobiu
tobiu commented on Mar 9, 2026, 11:43 AM

Goal

Implement native, high-performance support for Tree Grids and hierarchical data structures within the Neo.mjs framework. This Epic focuses on the core "Hierarchical Rows" pattern (a flat virtualized view of tree nodes) ensuring O(1) rendering performance and strict adherence to the Row Pooling architecture.

Scope & Architecture

The Tree Grid implementation is designed to integrate seamlessly with the existing Neo.grid.Body virtual scroller without requiring variable-height rows.

  1. Data Abstraction (Neo.data.TreeStore & TreeModel): The complexity of the hierarchy is entirely managed by the data layer. The TreeStore parses hierarchical data (using parentId relations) into an internal O(1) #childrenMap. Crucially, it exposes a dynamically updated, flattened 1D array of only the visible nodes to the grid. When a node is expanded, its children are injected into this flat array.
  2. Visual Representation (Neo.grid.column.Tree): A specialized, nested column component handles the visual state. It utilizes CSS variables (--tree-depth) for dynamic indentation math and CSS classes for toggle icon states, ensuring rapid recycling during scroll events without DOM manipulation.
  3. Accessibility (WAI-ARIA): By leveraging the flattened array approach, the virtual scroller naturally provides gapless, contiguous aria-rowindex values. The implementation is augmented with aria-expanded, aria-level, aria-setsize, and aria-posinset attributes mapped directly from the records (utilizing "Soft Hydration" where necessary).
  4. Interaction: Expansion and collapse interactions are handled via event delegation on the Grid Body, triggering state mutations in the Store, which subsequently fire events (expand, collapse) for View Controller consumption.

Note: Variable-height "Row Expanders" (nested content bodies) are outside the scope of this Epic and would require a separate architectural enhancement to the ScrollManager.

tobiu added the enhancement label on Mar 9, 2026, 11:43 AM
tobiu added the epic label on Mar 9, 2026, 11:43 AM
tobiu added the ai label on Mar 9, 2026, 11:43 AM
tobiu added the architecture label on Mar 9, 2026, 11:43 AM
tobiu added the grid label on Mar 9, 2026, 11:43 AM
tobiu added sub-issue #9405 on Mar 9, 2026, 11:44 AM
tobiu added sub-issue #9406 on Mar 9, 2026, 11:44 AM
tobiu added sub-issue #9407 on Mar 9, 2026, 11:52 AM
tobiu added sub-issue #9408 on Mar 9, 2026, 11:59 AM
tobiu added sub-issue #9409 on Mar 9, 2026, 12:01 PM
tobiu added sub-issue #9410 on Mar 9, 2026, 12:01 PM
tobiu added sub-issue #9411 on Mar 9, 2026, 12:03 PM
tobiu added sub-issue #9412 on Mar 9, 2026, 12:03 PM
tobiu assigned to @tobiu on Mar 9, 2026, 12:10 PM
tobiu added sub-issue #9413 on Mar 9, 2026, 12:34 PM
tobiu added sub-issue #9414 on Mar 9, 2026, 3:13 PM
tobiu added sub-issue #9415 on Mar 9, 2026, 3:14 PM
tobiu added sub-issue #9416 on Mar 9, 2026, 3:47 PM
tobiu added sub-issue #9417 on Mar 9, 2026, 4:00 PM
tobiu cross-referenced by #9418 on Mar 9, 2026, 4:45 PM
tobiu added sub-issue #9418 on Mar 9, 2026, 4:45 PM
tobiu cross-referenced by #9419 on Mar 9, 2026, 4:46 PM
tobiu added sub-issue #9419 on Mar 9, 2026, 4:46 PM
tobiu added sub-issue #9420 on Mar 9, 2026, 4:46 PM
tobiu cross-referenced by #9422 on Mar 9, 2026, 7:16 PM
tobiu added sub-issue #9422 on Mar 9, 2026, 7:19 PM
tobiu added sub-issue #9423 on Mar 9, 2026, 7:41 PM
tobiu referenced in commit c478860 - "docs(data): Enhance TreeStore JSDoc with Projection Architecture details (#9404)" on Mar 9, 2026, 7:59 PM
tobiu added sub-issue #9425 on Mar 9, 2026, 9:22 PM
tobiu added sub-issue #9426 on Mar 10, 2026, 11:32 AM
tobiu added sub-issue #9427 on Mar 10, 2026, 12:33 PM
tobiu added sub-issue #9428 on Mar 10, 2026, 2:16 PM
tobiu added sub-issue #9429 on Mar 10, 2026, 2:16 PM
tobiu added sub-issue #9430 on Mar 10, 2026, 2:25 PM
tobiu added sub-issue #9431 on Mar 10, 2026, 3:26 PM
tobiu added sub-issue #9432 on Mar 10, 2026, 3:26 PM
tobiu added sub-issue #9433 on Mar 10, 2026, 3:27 PM
tobiu added sub-issue #9434 on Mar 10, 2026, 3:27 PM
tobiu added sub-issue #9435 on Mar 10, 2026, 10:17 PM
tobiu added sub-issue #9437 on Mar 11, 2026, 11:00 AM
tobiu added sub-issue #9438 on Mar 11, 2026, 11:09 AM
tobiu added sub-issue #9439 on Mar 11, 2026, 11:53 AM
tobiu added sub-issue #9445 on Mar 12, 2026, 10:16 AM
tobiu added sub-issue #9447 on Mar 12, 2026, 11:37 AM
tobiu added sub-issue #9448 on Mar 12, 2026, 12:30 PM