Phase 9e · Tier C closure
RN-universal Sidebar — closes Tier C 14/14
ScaffoldedApp-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.
Library decision
RnSidebar ships with no new runtime dependency.
- Composes RnSheet (already shipped 0.2.1) for the mobile drawer mode.
- Persistence:
localStorageon web (keyrn-ui-sidebar-state). The shadcn primitive uses cookies;localStorageis privacy-friendlier (no cross-origin send-with-every-request) and avoids theAsyncStoragepeer dep we'd need on native if we wanted shadcn-parity. - Mobile detection: RN
DimensionsAPI (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 + Bas 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.