main | ReactNode | — | The page. It renders inside main, which scrolls on its own. In a TanStack Router app this is <Outlet />. |
navbar | ReactElement<unknown, string | JSXElementConstructor<any>> | — | The application bar: a Navbar element. Its header is the page's banner landmark, so the shell places it
outside main and outside any sectioning element. The bar stays fixed whatever main does. |
skipLinkLabel | LocalizedMessage | — | Name of the skip link, the first control in the tab order, which moves focus to main. |
banner | ReactElement<unknown, string | JSXElementConstructor<any>> | — | One Banner element directly under the bar, across the full width of the shell, above the sidebar as well. The
slot takes a single element, so notices never stack. |
className | string | — | @deprecated Pass layout through enum props and shipped parts. Request a missing case via find-pattern. |
dock | ReactNode | — | Space the shell reserves for the Dock (CORE-1041), centered under main and never over it. Omit it and no space
is reserved. |
fit | AppShellFit | AppShellFit.Viewport | What the shell's block size follows. |
id | string | — | Id of the shell's root element. |
mainData | AppShellMainData | — | data-* attributes for main. TanStack Router's element scroll restoration finds the container by
data-scroll-restoration-id. |
mainId | string | — | Id of the main element, which is also the skip link's target. A generated id is used when omitted. |
mainRef | Ref<HTMLElement> | — | Ref to the main element, which is the shell's scroll container. |
ref | Ref<HTMLDivElement> | — | Ref to the shell's root element. |
routeAnnouncement | LocalizedMessage | — | The name of the page the shell just showed. It is announced politely when it changes, so a screen reader hears
the route change even though focus did not move. Pass the page title. |
routeFocus | AppShellRouteFocus | AppShellRouteFocus.None | Where focus goes when routeKey changes. |
routeKey | string | — | Identity of the current page, usually the pathname. When it changes after the first render the shell applies
routeFocus. Leave it out for a shell that never changes page. |
sidebar | ReactElement<unknown, string | JSXElementConstructor<any>> | — | The primary navigation: a Sidebar element. It sits at the inline-start edge, below the bar and the banner, and
stays fixed; it scrolls its own content. Omit it and main takes the width. |