Skip to content
Components

Approval stack

Who has to say yes, carried by icons and words.

Why icons rather than colour

v1 encoded the planning outcome in hue: a green verdict meant accepted development, a red one meant impact assessable. That worked until colour had to do anything else — at which point a failed network request drawn in the app's error red read as an impact-assessable verdict, and a green success toast read as a planning approval.

So v2 splits them. Status colour is generic and means what it means in any product. What approvals a property needs is CONTENT, and it is carried here — in neutral ink, legible in pure greyscale.

Try it

Toggle the authorities and watch the stack. The order never changes, because the order is what the stack means.

buildingcouncilpublicstate

stackLabel() → "Building + council"

Usage

Turn everything off and the stack collapses to "No approval needed" on its own. That is not a special case in the template — stackFor() returns it, because "no approval" is the absence of the others rather than a fifth authority, and it never stacks.

Inline

In a row, a card or a table cell, a single 13px icon and label stands in for the full stack. The highest authority wins the slot, because it is the one that decides how hard the project is.

A garden shed
A granny flat
A six-unit development

Showing building for something that also needs public notice would understate it, which is why the choice is "highest" rather than "first".

Rules

  • Fixed order, always: building → council → public notification → state. The stack reads left to right as "and then", so it is not a sort key.
  • "No approval" never stacks.
  • Tiles are 26px, neutral ink, side by side with a 4px gap — never overlapped, so every authority stays fully legible.
  • Icons are never coloured. The words beside the stack carry the verdict.
  • One accessible name for the whole stack. Announcing four icon names in sequence gives a screen-reader user the parts and not the answer.

Navigate

Esc