Frontmatter
| id | 9081 |
| title | Feat: DevRank Global Animation Toggle |
| state | Closed |
| labels | aifeature |
| assignees | tobiu |
| createdAt | Feb 10, 2026, 3:29 AM |
| updatedAt | Feb 10, 2026, 4:31 AM |
| githubUrl | https://github.com/neomjs/neo/issues/9081 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 8930 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 10, 2026, 4:31 AM |
Feat: DevRank Global Animation Toggle
tobiu added parent issue #8930 on Feb 10, 2026, 3:30 AM
tobiu assigned to @tobiu on Feb 10, 2026, 3:30 AM

tobiu
Feb 10, 2026, 4:31 AM
Input from Gemini 3 Pro:
✦ Task completed.
Implemented Features
- Global Animation Toggle: Added a "Show Animations" CheckBox to the DevRank controls (default: true).
- Architecture:
- ControlsContainer: Updates
GridContainer.animateVisuals.- GridContainer: Fires
animateVisualsChange.- ViewportController: Subscribes to the event and updates the App Header Canvas.
- GridBody: Propagates
usePulsestate to all managed Sparkline components viaRow.updateCellComponents.- Sparkline Updates:
- Added
updateCellComponentstoNeo.grid.Rowfor bulk-updating managed components by type.- Updated
Sparkline.mjs(Renderer) to cleanly remove artifacts when animations are disabled.- Header Canvas Updates:
- Added
usePulsesupport.- Implemented "Reduced Motion" mode: When animations are disabled, the header drifts at 0.2x speed instead of freezing, avoiding a broken appearance.
- Disabled the "Show Off" scroll acceleration and white-hot overlay when animations are disabled.
Outcome
Users can now toggle high-performance animations off for a calmer experience or to support low-end devices/accessibility needs, without breaking the visual coherence of the application.
tobiu closed this issue on Feb 10, 2026, 4:31 AM
Implement a "Show Animations" toggle to allow users to disable pulse and scroll animations for accessibility and performance on low-end devices.
Requirements:
animateVisuals_config.HeaderToolbar.headerCanvas.timeScale.Bodyrows.updateCellComponents(identifier, config)helper.this.components.identifier(ntype/Class).configto matches.animateVisualschange, callrow.updateCellComponents('sparkline', {usePulse: value})for all rows.