Tollerud UI / Components / Glow card
Components

Components

Core primitives — button, card, badge, status. Layout, form controls, overlays, data views, and full-screen examples live on their own pages.

More components

This page covers primitives only. Everything else has a canonical home.

Five variants, three sizes with fixed height per size — text and icon-only buttons align in the same row. Supports loading spinners, disabled state, and aria-label for icon-only. Primary is yellow; terminal carries the ❯ for technical actions.

PropsButtonProps
PropType
asChild?boolean
buttons
button-sizes
button-icons

Fused action buttons for independent clicks — not a toggle. Wrap text or icon-only Button children; the group shares borders and height. Use Segmented when one option should stay selected.

PropsButtonGroupProps
PropType
size?ButtonGroupSize
orientation?ButtonGroupOrientation
button-group

The default surface. Add an accent for a yellow-bordered, highlighted card.

PropsCardProps
PropType
accent?boolean
density?'comfortable' | 'compact'
emma — readyhealthy
iris — reviewattention
cards

A horizontal rule. Default uses the border token; accent variant draws a short yellow rule for section breaks.

Content above the divider

Content below the divider

Accent variant — short yellow rule

dividers

Badges label status inline. Pills are tiny mono-flavored tags.

PropsBadgeProps
PropType
variant?keyof typeof badgeVariants
NewOnlineDegradedOfflineBetaDefault
badges
newdeprecatedstablecritical
pills

Status dots show liveness with a soft glow. Kbd renders shortcut chips.

emma — readyCPU 87%pia — unreachableiris — idle
status
⌘+KSEsc
kbd

Compact metric tiles for dashboards, with optional trend.

PropsStatCardProps
PropType
labelstring
valuestring | number
change?{ value: string; direction: 'up' | 'down' }
accent?boolean

Active Sessions

12%

42

CPU Load

4%

63%

Storage

1.2 TB

stats

Loading and identity primitives. Avatar and AvatarGroup stack naturally.

progress
avatar-group

Appears on hover and focus. Supports top (default) and bottom placement.

tooltip

Four semantic tones. Pass icon to override the default icon per tone. Alert has no built-in outer margin — stack with Stack or className in apps.

PropsAlertProps
PropType
tone?keyof typeof toneStyles
title?string
icon?React.ReactNode
alerts

Organize content. Tabs ship pill and underline variants.

Pill tabs — the default. Good for switching views inside a card.
Underline tabs — for page-level sections.
tabs
npm install @tollerud/ui tailwindcss@4, then @import globals.css and @source the package dist in app/globals.css.
accordion

Vertical activity feed with status-colored dots and metadata.

Deployed hermes v2.014:32

Rolled out to emma

success3s
Restarted nginx14:31

Config reloaded

warning
SSH connection failed14:30

emma refused connection

timeline

A card with a header bar: title, optional description, and optional actions. Pass a fragment with multiple buttons to actions for a toolbar.

Compose stack

All services healthy

hermes

Restart pending
panel

A labeled progress row that turns red past a hot threshold (default 85%). Used for CPU/memory/disk and plan-usage limits.

CPU23%
Disk88%
Containers28 running
meter

Horizontal step indicator for wizards and multi-stage flows. Pass an array of step labels and the current step index (0-based). Completed steps fill yellow; the active step carries a ring.

  1. 1
    Connect host
  2. 2
    Choose stacks
  3. 3
    Invite team
  4. 4
    Finish
  1. Connect host
  2. Choose stacks
  3. 3
    Invite team
  4. 4
    Finish
  1. Connect host
  2. Choose stacks
  3. Invite team
  4. 4
    Finish
stepper

Two ways to apply compact density: set density='compact' directly on a Card, or wrap a group with data-density='compact' to tighten everything inside.

Card title

Padding tightens in compact mode.

TOTP at sign-in.

density="compact"

Always compact via prop.

Default

Comfortable by default.

density

For surfaces with no data, no results, or an error. Icon, headline, calm explanation, one clear action. Use compact inside cards, tables, and panels.

PropsEmptyStateProps
PropType
icon?EmptyStateIconName | ReactNode
title?ReactNode
description?ReactNode
action?ReactNode
secondaryAction?ReactNode
compact?boolean
accent?boolean
No hosts connected

Connect your first machine and Tia will start watching it within seconds.

All clear

No open alerts across your fleet. The last incident was acknowledged 6 days ago.

No results

Nothing matches “grafna”. Check the spelling or clear the filter to see everything.

Couldn’t reach the agent

emma.tollerud.no refused the connection. The agent may be offline or the port blocked.

empty-state
Alert inbox0
Inbox zero

No alerts right now — we’ll surface anything that needs you here.

empty-state-compact

Terminal-style code display with an optional copy button. Use the code prop for a single string, or children for richer markup.

systemctl status tollerud-agent
code-block

Layout width constraint — 1100px max with 24px horizontal padding. Use as a page wrapper or section cap.

Content capped at 1100px
container

A single command-list row — icon, label, description and shortcut. Used inside CommandMenu-style surfaces.

action-row

Wraps any surface with a cursor-tracking yellow glow. Intensity and color are configurable.

Hover to see the glow follow the cursor.
glow-card