Phase 9e · Tier C closure

RN-universal Sidebar — closes Tier C 14/14

Scaffolded

App-shell sidebar with desktop-collapse + mobile-sheet. Composes RnSheet (already shipped 0.2.1). localStorage on web for persistence; in-memory on native (no AsyncStorage peer dep). v1 surface: provider + sidebar + trigger + 3 slots + menu compound + inset.

App shell — toggle the trigger to collapse

On a desktop viewport (≥ 768 px), the sidebar collapses inline. On a mobile viewport (< 768 px), it opens as a left-anchored `RnSheet`. Resize your window to see both modes.

Home

Main content for home. Click a sidebar item to switch; click the trigger to collapse the sidebar. The collapsed-state preference is persisted in localStorage on web.

Library decision

RnSidebar ships with no new runtime dependency.

  • Composes RnSheet (already shipped 0.2.1) for the mobile drawer mode.
  • Persistence: localStorage on web (key rn-ui-sidebar-state). The shadcn primitive uses cookies; localStorage is privacy-friendlier (no cross-origin send-with-every-request) and avoids theAsyncStorage peer dep we'd need on native if we wanted shadcn-parity.
  • Mobile detection: RN Dimensions API (window width < 768 px). Re-evaluates on rotation / resize.

Cut from v1 (0.4.x candidates)

  • Sub-components dropped: SidebarMenuSub, SidebarMenuAction, SidebarMenuBadge, SidebarMenuSkeleton, SidebarRail, SidebarSeparator, SidebarInput, SidebarGroup / GroupLabel / GroupAction / GroupContent. v1 ships the surface real consumers use; the rest are 0.4.x candidates if a consumer reports the gap.
  • Keyboard shortcut: shadcn ships Ctrl/Cmd + B as a global toggle. v1 omits it.
  • Icon-only collapsed state: shadcn's collapsible="icon" mode renders an icon-rail when collapsed. v1 uses width: 0 (fully hidden) instead.

Phase 9 status

With this PR, Phase 9 closes:

  • Tier A — 16 of 16 (form/overlay primitives, shipped in 0.2.1 / 0.2.2)
  • Tier B — 10 of 10 (library-decision primitives, shipped 0.2.3 → 0.3.6)
  • Tier C — 14 of 14 (pattern compositions; this PR closes)

Phase 9 shipped ~40 RN-universal primitives with zero new runtime dependencies. Phase 10 is next: sunset @radix-ui/* from the web bundle.