KQ-2107 · SUITE/ATRIUM

Suite Atrium

The home of a product suite, its apps as tiles with live summaries, rolling stats and sparklines, where choosing a tile grows it into the full app on springs.glide: one progress value opens a clip from the tile's box to the whole atrium while the app's interior rides the clip's corner, so the icon never moves and the window opens around it, and the sidebar unfolds from the tile's edge a beat behind with its rows arriving in cascade. Going home runs the same value back into the tile, re-measured in case pinning moved it, and focus returns to it; grow can instead zoom the app from the tile's centre or raise it as a sheet. Tiles are one roving group: arrows move by tile and by row, Enter opens, P pins and pinned apps glide to the front, and Cmd or Ctrl+Shift+H or Escape goes home.

KQ-2107 · SUITE/ATRIUM

Fieldline · Home

Signed in as Ines Duarte

Good afternoon, Ines

Jump back in

Apps · 5

Arrow keys move between apps, Enter opens one, P pins it.

home · 5 apps · Survey pinned · 14 on shift

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/suite-atrium

Props

tileSize
number
default 180
The narrowest a tile column may be, in px: smaller fits more tiles to a row.
grow
"tile" | "zoom" | "sheet"
default "tile"
How a chosen tile becomes the app: grows from the tile, zooms from its centre, or rises as a sheet from its top edge.
accent
"cobalt" | "plum" | "mint" | "ink" | string
default "cobalt"
Interface accent: the section pill, the pinned glyph and the highlighted item. A name or any CSS colour.
apps
SuiteApp[]
default defaultSuiteApps
The suite's apps in home order: { id, name, icon, hue?, summary, stat?, series?, status?, lockedReason?, sections, items }. Pinned ones sort first.
recent
SuiteRecent[]
default defaultSuiteRecent
Recent items across the suite, newest first: { id, appId, itemId?, title }. Shown as chips at home and per app in its sidebar.
openApp / defaultOpenApp
string | null
default — / null
The open app id, controlled or initial; null is home.
onOpenApp
(appId: string) => void
default —
Fires from the tile, chip or key that opened an app.
onReturnHome
(fromAppId: string) => void
default —
Fires from the button or key that went home, with the app that was open.
pinned / defaultPinned
string[]
default — / ["survey"]
Pinned app ids, controlled or initial.
onPinApp
(appId: string, pinned: boolean, all: string[]) => void
default —
Fires when an app is pinned or unpinned, with the whole new list.
onOpenItem
(appId: string, itemId: string) => void
default —
An item inside an app, or a recent item, was chosen.
onRequestAccess
(appId: string) => void
default —
A locked app was pressed; its tile then says access was requested.
suite
string
default "Fieldline"
The suite's name in the header.
user
{ name: string; initials?: string }
default { name: "Ines Duarte" }
Who is signed in: the greeting's name and the avatar.
greeting
string
default —
The home greeting. Defaults to good morning, afternoon or evening from now's UTC hour, with the first name.
now
number
default defaultSuiteNow
The moment the greeting reads, in ms, so server and browser agree.
status
"ready" | "loading" | "error"
default "ready"
Whether the suite's data has arrived: skeleton tiles while loading, a message with Try again on error.
onRetry
() => void
default —
Try again after an error.
label
string
default —
The atrium's accessible name. Defaults to "<suite> home".
className
string
default —
Classes for the outer container.