Uh oh!
There was an error while loading. Please reload this page.
feat(topnav): group nav into Learn/Organize/Community/Tools with hover dropdowns - #81
Conversation
…r dropdowns Mirrors SideNav's section structure in horizontal form so the two shells share the same information architecture. - Replaces the 9 flat top-bar links with 4 group labels: Learn, Organize, Community, Tools. - Each group reveals its items (icon + label, same shape as SideNav rows) on hover, focus, or click. 140ms close delay on mouse-leave avoids flicker between trigger and panel. - Active state on a group label = any child route matches. Group containing the current page renders bold + full-strength text; inactive groups stay dimmed. - Chevron next to each label rotates open/closed. - Click-outside and Escape close the open dropdown. - Mobile hamburger panel rebuilt to show the same grouped sections with dividers between them. - Logo, settings, admin, and avatar cluster on the right unchanged. TypeScript clean (`tsc --noEmit` passes). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Warning Rate limit exceeded
To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Deploying with |
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs | frontend | 14e00db | Commit Preview URL Branch Preview URL | May 05 2026, 05:13 AM |
Four small follow-ups from the self-review: 1. closeTimer cleanup on unmount. Pending setTimeout could fire setState on an unmounted component during a route-change-mid-close. Added a useEffect that cancels the timer on unmount. 2. Dropped marginTop:2 on the dropdown panel. The previous comment claimed "no gap" while the code had a 2px gap; reconciled by removing the gap. The 140ms close-delay remains as the forgiveness mechanism for cursor traversal — comment now describes that accurately. 3. Dropped over-claimed ARIA roles. role="menu" + role="menuitem" imply arrow-key navigation between items, which we don't implement. Linear tab order through Links is the actual UX, so the semantics now read as "nav with links" rather than over-claim. aria-haspopup downgraded from "menu" to "true" to match. 4. Added onBlur handler on the wrapper. Symmetric counterpart to onFocus opening the panel: when focus tabs past the last item (relatedTarget outside wrapper), the dropdown closes. Pairs with the existing onMouseLeave behavior so keyboard and mouse close the panel under the same conditions. TypeScript clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Brings the top navigation in line with the vertical SideNav's information architecture: instead of 9 flat top-level links, the bar now shows 4 grouped categories that reveal their items on hover.
Behavior
Design rationale
SideNav.SECTIONSverbatim. Duplicated rather than imported because TopNav and SideNav are alternative shells, not parent/child — keeping them independent means a future shell variant doesn't have to thread an import.Test plan
Out of scope
🤖 Generated with Claude Code