Layout

App layout — <app-layout>

LayoutAppComponent

The outer frame — top, fixed sidebar, header, sidebar and content. This page is already inside one, so the slots are drawn rather than nested.

[app-top] / $topTemplate — sticky, hidden by $showTop

[app-fixed-sidebar] / $fixedSidebarTemplate — hidden when page-layout is full screen

inside <main>, also hidden when full screen

inside main-content-wrapper, gated by $showSidebar

the flex-1 column — $contentClass lands here

Page layout — <page-layout>

LayoutPagesComponent

The layer that owns the scroll container, which is why every page nests it inside app-layout. Live below.

This is $contentTemplate. page-layout puts overflow-y-auto on .page-content, so this is the layer that scrolls in a real page.

$footerTemplate

Grid layout — <grid-layout>

LayoutGridComponent

One state object instead of a dozen inputs. This is the frame the grid component renders into.

headerTemplate

contentTemplate — sidebarRightTemplate and bodyLeft/bodyRight are available too

Dialog layout — <dialog-layout>

LayoutDialogComponent

What app-dialog renders internally. Documented here; see the Modals page for the wrapper you actually use.

Stores — Layout stores

ServiceStore

Each layout has a root-provided store whose values override the component — and persist across pages.

showTop / showHeader / showSidebar / showFixedSidebar plus AppLayoutClasses

isFullScreen, sidebar flags, loading, loadingSkeleton, templates, classes

data, classes and template — wins over $cardLayoutData

templates, classes, loading, dragDisabled

the same GridLayoutState the $layout input takes

sidebarFixedOpen, isSidebarLogo, isSidebarMobileOpen

titleData, actions, show — update() / hide() / show()

In every case the store value wins over the input, and all of them are root-provided — so state set on one page persists to the next unless it is reset on destroy.

Layout shell — <layout-shell>

LayoutShellComponent

The region tree that page, dialog and grid layouts render through: each region holds a template, more regions, or both. An empty region renders nothing.

header
content, nested in middle
footer — the unused region after this one renders nothing
Use a page-header action — the handler result shows up here.