Layout
The primitives that place everything else. Layout components have no look of
their own, so the demos draw them as dashed ember guide boxes
(--ds-primary-50 fill, --ds-primary-200 outline). Spacing props take the
theme scale — xs 8px, sm 12px, md 16px, lg 24px, xl 32px — from the
--ds-spacing-* tokens.
Container
Centres page content at a readable maximum width.
xs
540px
sm
720px
md
960px
lg
1140px
xl
1320px
fluid
100%
Container size="xs" … "xl" centres content at a max width with px="md" gutters. Real Containers inside a 1440px-wide viewport, scaled to fit. Forms read best at sm; list pages use fluid.Group
Lays children out in a row: toolbars, page headers, button pairs, inline metadata.
xs
sm
md
lg
xl
gap="xs" … "xl" — 8 / 12 / 16 / 24 / 32px (--ds-spacing-*). The theme default is sm.flex-start
center
space-between
flex-end
justify="flex-start | center | space-between | flex-end" — space-between is the page-header pattern (title left, actions right).align="flex-start | center | flex-end" on mixed-height children.wrap
grow
wrap="wrap" (default) flows onto new lines; wrap="nowrap" keeps one line; grow stretches children equally.Stack & Flex
Vertical rhythm with Stack; full flexbox control, with responsive props, with Flex.
gap="xs"
gap="lg"
align="center"
Stack gap — vertical rhythm. Theme default md (16px); align sets the cross axis.justify="space-between" in a fixed height — pins a footer to the bottom of a card or panel.direction={{ base: 'column', sm: 'row' }} gap="md"
direction="row-reverse" justify="flex-end" align="center"
Flex direction, wrap, gap, justify, align with responsive values: direction={{ base: 'column', sm: 'row' }} stacks on phones and lines up on tablets and up.Grid
A 12-column grid for asymmetric layouts — spans, offsets and responsive breakpoints.
Grid; Grid.Col span takes 1–12, "auto" or "content". gutter defaults to md.offset={n} leaves n empty columns before a column.gutter="xl"; grow lets the last row fill the width.span={{ base: 12, xs: 6, sm: 4 }} with type="container" so breakpoints follow the box, not the window. Drag the box's bottom-right corner to resize.SimpleGrid
Equal-width columns for card and tile grids.
SimpleGrid cols={3} spacing="md" verticalSpacing="xs" — equal columns without spans. The card-grid workhorse.type="container" with cols={{ base: 1, '320px': 2, '520px': 4 }} — container widths as keys. Drag the corner to see 4 → 2 → 1 columns.Divider, Space, Center & AspectRatio
Small helpers for separation, one-off spacing, centring and media shapes.
--ds-border-color. label with labelPosition, variant="dashed | dotted".PO-2041
Atlas Packaging
$12,840
orientation="vertical" inside a Group — separates toolbar groups and inline metadata.h="xl" · 32px
Space h="xl" adds one-off vertical room (prefer Stack gap); w for horizontal.Inline · Due 04 Nov
Center centres on both axes; inline for an icon beside text.AspectRatio ratio={16 / 9}, 1 and 4 / 3 — media and thumbnails keep their shape at any width. (Placeholders, no images.)ScrollArea
Scroll regions with the system’s thin overlay scrollbars.
ScrollArea h={200} — thin overlay scrollbars that appear on hover (type="hover", the default).ScrollArea.Autosize mah={200} grows with content and only scrolls past the max — dropdowns and popovers. type="always" shows the bar.ScrollArea type="auto" with scrollbars="x" — a row of cards wider than its column; also how wide tables scroll inside a card.Box & Paper surfaces
How surfaces sit on the page background: Paper, Card and the shadow scale.
xs
sm
md
lg
xl
--ds-body-bg): Paper shadow="xs" … "xl" (--ds-shadow-*, soft and long) with the theme's 10px radius.Paper withBorder
Filters bar, table wrapper, inset panels
Card
Record summaries, KPIs, form sections
Paper withBorder — a plain hairline surface (10px). Card — the content container: --ds-card-bg, card border, --ds-card-shadow, 16px radius.<Box component="section" p="md">
Nested Box p="sm" on --ds-card-bg
Box is the polymorphic base — style props (p, m, w, bg…) and component="section" without extra markup.Common page grids
The three layouts most Buildpad screens start from.
Order details
Status
Owner
Daniel Osei
Activity
Priya approved · 12 min ago
Daniel submitted · 1 hour ago
Grid with span={{ base: 12, md: 8 }} / {{ base: 12, md: 4 }} — the record edit page: form card left, summary and metadata right; stacks below md.Atlas Packaging
Packaging · PO-2041
$12,840
Due 04 Nov
Keystone Logistics
Freight · PO-2040
$48,200
Due 31 Oct
Brightline Electrical
Facilities · PO-2039
$3,150
Due 12 Nov
SimpleGrid cols={{ base: 1, sm: 2, lg: 3 }} spacing="md" — suppliers, projects, templates.This week
Open purchase orders
128
+12
vs. last week
Spend this month
$412,380
+4.1%
of $520k budget
Avg. approval time
6.4 h
-1.2 h
faster than target
Overdue deliveries
7
+2
needs attention
SimpleGrid of Cards, the top row of every dashboard: four across from 760px of content width (see the Dashboard template), 2 × 2 in this narrower column (type="container"). The header is Group justify="space-between".