Marks a figure's provenance in its head, next to its title, so the reader sees what kind of data it is before reading it.

Atom · stable · v1.0.0 · owner: Site system lead · contract 19 of 20 points (open: figma)

Do and don't

Do: Sample data in a figure head

Rendered by tag.ts

Open example: Tag · Do: Sample data in a figure head Use the full-page example to follow page links.

The reader knows before reading the figure.

Do: A version

Rendered by tag.ts

Open example: Tag · Do: A version Use the full-page example to follow page links.

It dates the evidence.

Don't: A hype word

Rendered by tag.ts

Open example: Tag · Don't: A hype word Use the full-page example to follow page links.

Tags state provenance, not excitement.

Don't: A status chip

Rendered by tag.ts

Open example: Tag · Don't: A status chip Use the full-page example to follow page links.

Status chips are gone from marketing pages; the status page carries states.

Rules

RuleWhyCheck
A tag states provenance or a version, nothing else.Small marks with other meanings would be confused with state.Review: Content owner at review
Tags are outlined in the text colour, never filled with a dye.Dye marks mean health or state (D-SITE-004).Automated: brand gate (core/tag.css)

API

PropTypeRequiredDefaultWhat it does
textstringYesThe provenance or version.
samplebooleanNofalseIn a figure head (sample-tag), no left margin.

Contract details

The full contract: identity, anatomy, variants, states, tokens, layout, motion, accessibility, content, tests

Identity

AspectValue
Idtag
LayerAtoms
Categorydisplay
OwnerSite system lead
Statusstable
Version1.0.0
Sourceapps/showcase/site/system/atoms/tag.ts (private repository; the contract and the render function are this one module)
VersionDateChange
1.0.02026-10-26A small outlined word in a figure head: 'Sample data', 'Recorded server output', a version.

Use when

  • In a figure or panel head, to say the data's kind. Why: Provenance is the first thing a sceptical reader looks for.
  • A version or source name next to a title. Why: It dates the evidence.

Do not use when

  • As a status chip on marketing copy. Why: Status chips were removed (owner, 26 Oct); states live on What runs today.
  • In a dye colour. Why: Colour in small marks means health or state; a tag is neither.

Anatomy

PartWhat it is
rootspan.tag or span.sample-tag, outlined in currentColor.

Made of: tokens:type, tokens:radius.

Used in: figure-frame, cloth-diagram, conformance-table, contract-excerpt, coverage-map, decision-list, design-md-excerpt, flow-diagram, product-screen, repo-tree, rows-list, system-of-systems, tile, token-chain.

Variants

VariantWhenWhy
inlineAfter a title in a tile or row.It follows the words it qualifies.
sampleIn a figure head.It sits at the right of the head as the figure's provenance.

States

StateRendered or not applicable
defaultdefault
hoverNot applicable: A tag is not interactive, so it has no hover state.
focus-visibleNot applicable: A tag does not take focus; links and buttons inside it carry their own focus ring.
activeNot applicable: A tag cannot be pressed.
disabledNot applicable: A tag has nothing to disable.
loadingNot applicable: A tag is rendered at build time and is complete when the page loads.
emptyNot applicable: A tag is not rendered without content; the builder skips it.
errorNot applicable: A tag shows no data that can fail.
currentNot applicable: A tag has no current item.
visitedNot applicable: A tag is not a link.
expandedNot applicable: A tag does not open or close.

Tokens

PartToken
root.font--type-small-strong
root.border--rule-hair inset in currentColor
root.radius--radius
--tag-padding-space-1var(--space-1)
--tag-padding-space-3var(--space-3)
--tag-margin-left-space-3var(--space-3)
--tag-border-radius-radiusvar(--radius)
--tag-font-type-small-strongvar(--type-small-strong)
--tag-box-shadow-rule-hairvar(--rule-hair)

Layout

AspectValue
breakpointsRequired review at 390, 768, 1024 and 1440 px; execution is not implied by this declaration; never wraps inside.
wrappingwhite-space: nowrap; wraps as a whole onto the next line.
textExpansionShort by rule (4 words).

Spacing and rhythm

AspectValue
internal--space-1 by --space-3.
external--space-3 to the left when inline.
rhythmNot a section element.

Motion

AspectValue
NoneStatic.

Runtime and reuse

  1. Render-only element; mount any registered child enhancements separately. Preserve required Site CSS, fonts, responsive and locale rules from nativeElement.

Accessibility passport

AspectValue
roletext
nameIts words
keyboardNot interactive.
focusNot focusable.
screenReaderRead after the title.
contrastInherits the text colour, 4.5:1 or better.
targetNot a target.

Content

SlotLengthVoice
text4 wordsThe data's kind or a version

Good: “Sample data” · “Recorded server output” · “Loom Base 1.0.0, MIT”

Bad: “New!” · “Beta feature”

Japanese: From content tokens where repeated (caption.sample).

Icons and illustrations

None: this element uses no icon or illustration of its own.

Decisions and exceptions

Usage

39 uses across the built pages (measured by npm run site:system).

Tests

AspectValue
unittests/unit/site-system.test.ts: renders every do and don't example through the registry and checks the classes it owns
visualNot yet: there are no screenshot baselines; the Library page is checked for sideways scroll at 1440 px by tests/site/system.spec.ts
a11ytests/site/system.spec.ts: axe (0 serious or critical) on the element's Library page in light and dark
parityscripts/site/system/check.ts: Library examples are rendered by the same render function the site imports

Figma

not-yet: The Loom Site Figma library is the last stage of the plan; this element is not mapped yet.

Open in Storybook

Start with a conversation about your system.

We read your system, show you what we found, and agree with your team what to fix first.