Frontmatter
| id | 8660 |
| title | HeaderCanvas: Visualize Active View State |
| state | Closed |
| labels | enhancementai |
| assignees | tobiu |
| createdAt | Jan 15, 2026, 1:27 AM |
| updatedAt | Jan 15, 2026, 1:43 AM |
| githubUrl | https://github.com/neomjs/neo/issues/8660 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 8630 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 15, 2026, 1:43 AM |
HeaderCanvas: Visualize Active View State
tobiu assigned to @tobiu on Jan 15, 2026, 1:43 AM

tobiu
Jan 15, 2026, 1:43 AM
Input from Gemini 3 Pro:
✦ I have implemented the "Energy Surge" visual effect to highlight the active navigation item.
Implementation Details:
Shared Worker (
HeaderCanvas.mjs):
- Removed the unsuccessful "Focus Field" overlay.
- Implemented
drawActiveOverlayas a multi-pass render. It redraws the existing stream geometry only for the segment corresponding to the active item.- This segment uses a white stroke (
#FFFFFF) with a highshadowBlur(20px) to simulate a high-energy state.- Applied a faster alpha oscillation ("nervous pulse") to distinguish it from the calmer ambient stream.
- Reverted previous distortion logic in
getStreamOffsetto maintain clean geometry.App Worker (
ViewportController,HeaderCanvas):
- Connected
activeIndexchanges inViewportControllerto theHeaderCanvas.- Passed the
activeIdto the Shared Worker via theactiveId_reactive config.Documentation:
- Updated
HeaderCanvas.mjsclass documentation.- Added a new "Active State Visualization" section to
learn/guides/advanced/CanvasArchitecture.mdexplaining the technique.The result is a semantic highlight that integrates seamlessly with the "Luminous Flux" theme without adding clashing geometry.
tobiu added parent issue #8630 on Jan 15, 2026, 1:43 AM
tobiu closed this issue on Jan 15, 2026, 1:43 AM
Connect the
ViewportController'sactiveIndexstate to theHeaderCanvasto visually highlight the active navigation item.Tasks:
HeaderCanvas.activeIdconfig and propagate it to the Shared Worker.activeId.getStreamOffsetto recognize the active item.