Workspace Layout

A full-page shell for workspace-style applications. Side navigation, sticky page header and footer, a scrollable main card, and an optional push-drawer slot.

The workspace layout owns the page chrome — side menu, sticky page header and footer, and the scrollable main card — so each route can focus on its own content. The variants below show common compositions.

Basic workspace layout

Side menu plus sticky page header and footer wrap a scrollable text content area. The simplest shell for a workspace page.

Basic workspace layout preview
Live preview

Bulk action bar

A long table inside the workspace card scrolls under a sticky page header that carries a bulk action toolbar. The footer surfaces a selection summary that stays visible as users move through the list.

Workspace layout with bulk action bar preview
Live preview

Reacting to scroll state

Read the layout’s scroll state from useGoabWorkspaceLayoutScrollState() (React) or GoabWorkspaceLayoutScrollStateService (Angular) to drive consumer-side reactivity — for example, collapse a header title or show a back-to-top button once content has scrolled past the top.

Workspace layout reacting to scroll state preview
Live preview

With push drawer

The optional pushDrawer slot accepts a GoabPushDrawer that pushes only the main card, not the side menu. Use it for filters, reference content, or short forms that should live alongside the page without overlaying it.

Workspace layout with push drawer preview
Live preview

When to use

Use the workspace layout when:

  • Building a workspace-style application such as a case management tool, internal dashboard, or back-office app
  • The page needs persistent side navigation alongside the main content
  • Users will scroll through long content while header and footer actions stay accessible
  • Multiple routes share the same shell — the layout owns the chrome and each route owns its content

Considerations

  • The layout fills the viewport (100vh). Host it directly inside the router outlet, not inside another scrolling container.
  • Sticky page header and page footer cast a soft scroll shadow when content scrolls past them, signalling there is more content beyond the sticky edge.
  • The push-drawer slot is a sibling of the main card. Opening the drawer narrows the card but leaves the side menu in place — appropriate when the drawer is contextual to the current page.
  • The current scroll state (no-scroll, at-top, middle, at-bottom) is exposed via useGoabWorkspaceLayoutScrollState() (React) and GoabWorkspaceLayoutScrollStateService (Angular) when consumers need to react to scroll position.
  • These examples use placeholder elements for page header / footer rather than real GoabAppHeader / GoabAppFooter so the focus stays on the workspace-layout structure itself.
View old example docs