Refactor tabs so that:
- Behavior add-ons, such as query params, are HOCs in ui-patterns, to keep the basic Tabs minimal
- No dependency on next/router (this is to smooth out a separate App Router migration PR)
- No dependency on useSearchParams either (this is to preserve static generation of as much HTML content as
possible, for SEO purposes -- see comment about client-rendering bailout when using useSearchParams)
- Syncing behavior better localized in a hook
Minor enhancement to save tab preferences to local storage so they are remembered between sessions
Before: All pages have the Home nav menu in static HTML, which is blown away and replaced by the proper nav menu upon hydration. This leads to jankiness when the page first loads and an unpleasant flash of the wrong nav menu (especially obvious on the JavaScript ref page, which takes a long time to process and rerender the nav).
Now: All pages have their correct nav menu in static HTML.