Tollerud

Tollerud UI/Screen patterns / EmptyPage

Patterns

Screen patterns

Component-level API reference with live demos for each screen pattern export. For copy-paste full-page files, see Recipes — snippets only, no duplicate demos here.

Branded monogram lockup with nav links and actions. Below lg, links and menu actions open in a modal overlay with backdrop; wrap actions in TopNavAction to keep a primary CTA inline next to the menu toggle. TopNavItem accepts an optional icon, shown in dropdown/mobile rows (not the top bar), and an optional onClick — renders the row as a button instead of a link, for actions like sign out (ignored if href is set). Desktop flyout groups (items) are click-to-open and position their panel with Floating UI, anchored directly to the trigger that opened it. Pass mobileMenuSections for labeled row groups appended to the mobile sheet (e.g. an account section) — styled consistently, no hand-rolled dividers needed, and collapsed behind their label by default (same accordion treatment as flyout groups) so several sections don't turn into a wall of rows; set defaultOpen on a section to start it expanded, or collapsible={false} to always show it. Pass userMenu for a single account/user menu rendered from one data structure — a DropdownMenu next to the desktop actions, and the same sections appended to the mobile sheet automatically, so the two can't drift out of sync; set placement: 'start' to render it before other actions instead of after (the default). Pass mobileMenuExtra for anything more custom, injected at the very bottom of the mobile sheet, separated by a divider — consumer controls all markup.

PropsTopNavProps
PropType
projectNameReactNode
homeHref?string
navItems?TopNavItem[]
actions?ReactNode
sticky?boolean
maxWidth?TopNavMaxWidth
mobileMenuTitle?string
mobileMenuSections?TopNavSection[]
mobileMenuExtra?ReactNode
userMenu?TopNavUserMenu
top-nav
top-nav-mobile-extra
top-nav-mobile-sections
top-nav-user-menu

Docs-aligned app shell: sidebar brand lockup, structured nav, context top bar, and main content. The sidebar stays pinned while the content scrolls on lg+ (≥ 4.8.41 — earlier versions scrolled it away: PageShell's overflow-hidden root disabled sticky for all descendants, and the flex row stretched the sidebar to full content height). Use variant="topnav" for the legacy horizontal TopNav layout. Pass showMobileLogo={false} to hide the mobile monogram when the consumer renders its own logo.

PropsDashboardShellProps
PropType
projectNameReactNode
projectSubtitle?ReactNode
homeHref?string
variant?DashboardShellVariant
sidebarGroups?SidebarNavGroup[]
sidebarItems?SidebarNavItem[]
breadcrumb?ReactNode
pageTitle?ReactNode
navItems?TopNavItem[]
topActions?ReactNode
showMobileLogo?boolean
sidebar?ReactNode
header?ReactNode
density?MainContentDensity
contentWidth?'default' | 'wide' | 'full'
Tollerud

Mission Control/Overview

Overview

Fleet health at a glance.

Hosts online

3

Open alerts

1

dashboard-shell

SettingsLayout + FormPanel

/screens/settings-form/

Settings pages get section navigation, page header, form surfaces, and footer actions. Pass onNavSelect for client-side section switching.

PropsSettingsLayoutProps
PropType
titleReactNode
description?ReactNode
actions?ReactNode
navItems?SettingsNavItem[]
activeId?string
onNavSelect?(id: string) => void

Account settings

Manage profile and security preferences.

Profile

Shown in activity logs.

Ask before risky actions.

settings-form

ResourceList + DetailPage

/screens/resource-detail/

List and detail pages share page-header structure, actions, filters, empty states, and optional aside columns.

PropsResourceListProps
PropType
titleReactNode
description?ReactNode
actions?ReactNode
filters?ReactNode
count?ReactNode
emptyState?ReactNode

Hosts

Machines connected to Tollerud.

3 hosts
3 hosts
emma
iris
pia
resource-list
host

emma.tollerud.no

Primary production host.

Logs, metrics, and configuration.
detail-page

A full-page empty state composition for first-run, no-results, and error pages.

PropsEmptyPageProps
PropType
icon?EmptyStateIconName | ReactNode
titleReactNode
description?ReactNode
action?ReactNode
secondaryAction?ReactNode
background?PageShellBackground
accent?boolean
No hosts connected

Connect your first machine and Tia will start watching it.

empty-page

FeatureSection + StatsSection

/screens/featuresection-statssection/

Higher-level sections for marketing and dashboard overview pages.

PropsFeatureSectionProps
PropType
eyebrow?ReactNode
titleReactNode
description?ReactNode
actions?ReactNode
featuresFeatureSectionItem[]
columns?CardGridColumns
why it works

Operate with guardrails

Common sections without raw utility grids.

Fast deploys

Roll out compose changes with health checks.

Guarded actions

Review risky operations before they run.

Quiet telemetry

Surface useful state without alert fatigue.

Fleet health

Hosts online

3

Open alerts

1

Deploys today

12

feature-stats