Theme
Customize the design system

Every control starts at the preset. Change one and every preview on the site follows, on this page and the next, until you reset it.

Contrast

Text against what it sits on. Below 4.5:1 fails WCAG AA for body text — the check a reviewer runs on any surface that takes a tone.

Waiting for the first preview to report its palette.

Corners

Sets all three radii at once. The individual values are under Geometry.

Brand 5

The accent seam an app actually brands itself through. Change these and you have made the decision a real `DesignTokens.graphite(...)` call makes.

Geometry 15

Square or rounded, and how heavy every line is. The radius row above the controls sets all three corners at once, because "what does square feel like" is one decision rather than three numbers.

Surfaces 17

Everything the app is painted ON — the ground behind the content (the frame paints it too), the cards over it, the well inset in a card, and the washes that show state.

Bands 10

The rail's head and the view bar beside it (one band across the top at 960 and wider), a pushed screen's bar, the compact bar and the compact nav bar — the band's fill, its rule, its hover and active faces, the resting field box on it, and the ink and accent control that sit on it. The rail's tree and its footer stay on the ground.

Text and controls 11

The ink ramp, the control outlines and the field's focus halo. Every pair the panel can break is watched by a contrast badge above.

Status 7

The three voices that mean something — danger, caution and ok — each as a foreground and a surface wash, danger with a border as well.

Data 5

The default pin head, its glyph and its halo, and the group bands. A pin's category color comes from the palette, named in the theme seed.

Map 11

The basemap's roles — land, water, parks, roads and their casings, buildings, labels — and the pending pin's gray. A raster basemap keeps its own imagery; these paint the map's plate and any kit-drawn map.

Scrollbars 6

Every scroller's bar: the thumb at rest and while hovered or dragged, the strip it rides, and the desk bar's thickness, side gap and corners. The desk half shows only while a fine pointer is attached; at touch the platform's own overlay keeps its size.

Advanced 6

Real controls that are not decisions — motion durations, the focus ring offset, the touch floor. Opens collapsed on purpose.

Take it with you

The Dart that reproduces what you are looking at. It is a real constructor call, because the configurator edits a real preset — what you copy is what an app can paste.

Components

Hierarchy chart

Reach for this when a structure of groups nested under groups, each holding positions that report to one another, has to be drawn rather than listed: a pannable chart of boxes at a desk, a browse that drills one box at a time on a phone.

Spec of record: design-system/components/data/HierarchyChart.d.ts

2
Knobs

Live

Real widgets, built from the real kit. Turn a knob and it rebuilds; the theme bar above applies the design system's own tokens — including anything you changed under Customize — and the device selector uses the same sizes the golden baselines gate on, so what you see here is what CI holds the widget to.

Press Focus on any preview to take it to the full window — at a desktop width that renders most devices at 1:1, which is when the widget's own controls become clickable. The bar always states the device and the scale, so a shrunk preview says it is shrunk. Esc leaves.

screen_hierarchy_chart
Knobs
Theme

Nothing selected, a nested slot (its line up tinted and the connectors on it in the accent ink), or a whole box.

Steps every slot but two back, as a search's matches or one cross-cutting group would.

Dart for these values
screen_hierarchy_chart()

What it is made of

The widgets this screen assembles, with their full API below. They used to live on a second entry of their own; one thing you choose gets one page.

AppHierarchyChart widget

A drawn hierarchy of boxes and slots (`HierarchyChart.d.ts`).

Full dartdoc

A drawn hierarchy of boxes and slots (`HierarchyChart.d.ts`). ```dart AppHierarchyChart( label: 'Reporting structure', boxes: boxes, selectedId: selected, onOpenSlot: (id) => setState(() => selected = id), onClearSelection: () => setState(() => selected = null), ) ```

AppHierarchyChartdefault constructor

Knob Type Default What it does
boxes * List<HierarchyBox> — The boxes, in the host's order (THE DATA).
copy HierarchyChartCopy const HierarchyChartCopy() The chart's own words.
emptyText String? null Default "Nothing to show.".
highlighted List<String>? null The slot ids the host wants read; null steps nothing back.
label * String — The region's accessible name.
onClearSelection VoidCallback? null A plane tap that did not drag, or Escape on a slot.
onOpenBox ValueChanged<String>? null A box head activated.
onOpenSlot ValueChanged<String>? null A slot row activated.
onRootChange ValueChanged<String>? null Every re-root: a crumb, the `target` button, a drill, a reveal.
rootId String? null The box drawn at the top (THE ROOT): a seed, re-seeded when it changes.
selectedId String? null The selected slot's or box's id, controlled.

Types its knobs take

These are not things you choose — they are the shapes the knobs above expect. They live under this entry rather than in the navigation for exactly that reason.

HierarchyBox support

One group: a box of slots nested under its parent (`HierarchyBox`).

Field Type Default What it does
id * String — Unique across the whole chart.
label * String — The box's name, its head's title.
meta String? null The head's second line, written by the host.
parentId String? null The box this one sits under; null is a root (ONE TREE).
slots List<HierarchySlot> const [] The box's slots, in the host's order.

HierarchyChartCopy support

The words the chart writes itself (`HierarchyChartCopy`). Each null member keeps its default.

Field Type Default What it does
acting String? null Default "Acting".
belowHeading String? null Default "Below".
fit String? null Default "Fit the chart".
hideBelow String Function(int boxes, int slots)? null Default "Hide `n` below".
leads String Function(String box)? null Default "leads `box`".
path String? null Default "Path".
showBelow String Function(int boxes, int slots)? null Default "Show `n` below".
showOnItsOwn String Function(String box)? null Default "Show `box` on its own".
slotsHeading String? null Default none.
vacant String? null Default "Vacant".
zoomIn String? null Default "Zoom in".
zoomOut String? null Default "Zoom out".

Where it lives

Class File
AppHierarchyChart packages/app_widgets/lib/src/kit/data/hierarchy_chart.dart