Package reference

Design system

A living, English-only reference for the visual contracts shared by APIOps applications.

Purpose and package boundary

@apiops/design-system owns visual tokens, assets, styles, and method-agnostic components. The canvas application and design-system mapping assigns grid, notes, metadata controls, modes, focus treatments, and print presentation to the package, while the consuming application owns state and domain decisions.

Method catalogs, station IDs, route data, localized method content, and persistence do not belong in this package. Applications supply those concerns to reusable visual primitives.

Design tokens

This inventory is rendered directly from @apiops/design-system/tokens.json; values are not copied into this page. Token names are shown in their CSS custom property form for direct use with var(--token-name); the smaller label preserves the matching DTCG source path. The contract can cover color, typography, spacing, radius, shadow, focus, control, canvas, metro groups as they are published. This release declares color, canvas, font tokens.

CSS tokenDeclared valueUsage guidanceVisual sample
--color-neutral-graphiteSource: color.neutral.graphite#0f172aUse semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-neutral-slateSource: color.neutral.slate#1e293bUse semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-neutral-stoneSource: color.neutral.stone#334155Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-neutral-cloudSource: color.neutral.cloud#f5f7faUse semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-neutral-paperSource: color.neutral.paper#ffffffUse semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-line-businessSource: color.line.business#10b981Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-line-architectureSource: color.line.architecture#8b5cf6Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-line-deliverySource: color.line.delivery#f5b30bUse semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-line-publishingSource: color.line.publishing#00a6a6Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-line-operating-modelSource: color.line.operatingModel#1d4ed8Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-line-designSource: color.line.design#ef4444Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-cycle-capabilitySource: color.cycle.capability#02a972Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-cycle-apiSource: color.cycle.api#5b5bd6Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-cycle-integrationSource: color.cycle.integration#8b5cf6Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-cycle-automationSource: color.cycle.automation#0a8f98Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-accent-communitySource: color.accent.community#1656b8Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-note-draftSource: color.note.draft#fff6bfUse semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-note-committedSource: color.note.committed#f7e9ffUse semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-note-selectedSource: color.note.selected#e0f4ffUse semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-note-groupedSource: color.note.grouped#ebf8d7Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-note-linkedSource: color.note.linked#fef0d8Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-note-resolvedSource: color.note.resolved#e9f8efUse semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--color-note-archivedSource: color.note.archived#eef2f7Use semantic colors for text, surfaces, routes, cycles, and note intent; never rely on color alone.Color sample
--canvas-outer-marginSource: canvas.outerMargin32pxUse canvas dimensions through package styles when composing the exported canvas primitives.Dimension sample
--canvas-gutterSource: canvas.gutter16pxUse canvas dimensions through package styles when composing the exported canvas primitives.Dimension sample
--canvas-section-gapSource: canvas.sectionGap8pxUse canvas dimensions through package styles when composing the exported canvas primitives.Dimension sample
--canvas-section-paddingSource: canvas.sectionPadding20pxUse canvas dimensions through package styles when composing the exported canvas primitives.Dimension sample
--font-displaySource: font.displayUrbanist, Inter, Segoe UI, Arial, sans-serifUse display for headings, body for reading, and code for paths or technical examples.Aa
--font-bodySource: font.bodyInter, Urbanist, Segoe UI, Arial, sans-serifUse display for headings, body for reading, and code for paths or technical examples.Aa
--font-codeSource: font.codeJetBrains Mono, SFMono-Regular, Consolas, monospaceUse display for headings, body for reading, and code for paths or technical examples.Aa

Brand and supporting assets

The package asset metadata manifest is the source of this inventory. Download a standalone SVG, copy the supported package import, or use the public path example.

cycles logo dark

brand — Use the appropriate contrast variant and meaningful alt text when the logo conveys identity.

@apiops/design-system/assets/brand/apiops-cycles-logo-dark.svg/design-system/brand/apiops-cycles-logo-dark.svg

cycles logo white

brand — Use the appropriate contrast variant and meaningful alt text when the logo conveys identity.

@apiops/design-system/assets/brand/apiops-cycles-logo-white.svg/design-system/brand/apiops-cycles-logo-white.svg

cycles logo

brand — Use the appropriate contrast variant and meaningful alt text when the logo conveys identity.

@apiops/design-system/assets/brand/apiops-cycles-logo.svg/design-system/brand/apiops-cycles-logo.svg

favicon

favicon — Reference from document metadata; its neighboring page title supplies the accessible name.

@apiops/design-system/assets/favicons/favicon.svg/design-system/favicons/favicon.svg

check mark

glyph — Treat decorative glyphs as hidden; label an action when a glyph is its only visible content.

@apiops/design-system/assets/glyphs/apiops-check-mark.svg/design-system/glyphs/apiops-check-mark.svg

flow en text

glyph — Treat decorative glyphs as hidden; label an action when a glyph is its only visible content.

@apiops/design-system/assets/glyphs/apiops-flow-en-text.svg/design-system/glyphs/apiops-flow-en-text.svg

flow

glyph — Treat decorative glyphs as hidden; label an action when a glyph is its only visible content.

@apiops/design-system/assets/glyphs/apiops-flow.svg/design-system/glyphs/apiops-flow.svg

iconset

glyph — Treat decorative glyphs as hidden; label an action when a glyph is its only visible content.

@apiops/design-system/assets/glyphs/apiops-iconset.svg/design-system/glyphs/apiops-iconset.svg

logo

brand — Use the appropriate contrast variant and meaningful alt text when the logo conveys identity.

@apiops/design-system/assets/brand/apiops-logo.svg/design-system/brand/apiops-logo.svg

mark white

brand — Use the appropriate contrast variant and meaningful alt text when the logo conveys identity.

@apiops/design-system/assets/brand/apiops-mark-white.svg/design-system/brand/apiops-mark-white.svg

mark

brand — Use the appropriate contrast variant and meaningful alt text when the logo conveys identity.

@apiops/design-system/assets/brand/apiops-mark.svg/design-system/brand/apiops-mark.svg

metro icons

glyph — Treat decorative glyphs as hidden; label an action when a glyph is its only visible content.

@apiops/design-system/assets/glyphs/apiops-metro-icons.svg/design-system/glyphs/apiops-metro-icons.svg

station circle blue

glyph — Treat decorative glyphs as hidden; label an action when a glyph is its only visible content.

@apiops/design-system/assets/glyphs/apiops-station-circle-blue.svg/design-system/glyphs/apiops-station-circle-blue.svg

station circle

glyph — Treat decorative glyphs as hidden; label an action when a glyph is its only visible content.

@apiops/design-system/assets/glyphs/apiops-station-circle.svg/design-system/glyphs/apiops-station-circle.svg

stick figures poses

glyph — Treat decorative glyphs as hidden; label an action when a glyph is its only visible content.

@apiops/design-system/assets/glyphs/apiops-stick-figures-poses.svg/design-system/glyphs/apiops-stick-figures-poses.svg

stick figures stories

glyph — Treat decorative glyphs as hidden; label an action when a glyph is its only visible content.

@apiops/design-system/assets/glyphs/apiops-stick-figures-stories.svg/design-system/glyphs/apiops-stick-figures-stories.svg

Individual SVG symbols

SVG sheets contain individually addressable symbols. Download a symbol as its own SVG, or reference it through an accessible inline SVG: give the SVG a name when it conveys meaning, or add aria-hidden="true" when decorative.

Method glyphs

Concept icons for labelled supporting content.

icon-insight/design-system/icons/apiops-iconset.svg#icon-insight<svg viewBox="0 0 120 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-insight" /></svg>
icon-decision/design-system/icons/apiops-iconset.svg#icon-decision<svg viewBox="0 0 120 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-decision" /></svg>
icon-conversation/design-system/icons/apiops-iconset.svg#icon-conversation<svg viewBox="0 0 140 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-conversation" /></svg>
icon-opportunity/design-system/icons/apiops-iconset.svg#icon-opportunity<svg viewBox="0 0 130 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-opportunity" /></svg>
icon-capability/design-system/icons/apiops-iconset.svg#icon-capability<svg viewBox="0 0 140 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-capability" /></svg>
icon-value/design-system/icons/apiops-iconset.svg#icon-value<svg viewBox="0 0 130 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-value" /></svg>
icon-people/design-system/icons/apiops-iconset.svg#icon-people<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-people" /></svg>
icon-alignment/design-system/icons/apiops-iconset.svg#icon-alignment<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-alignment" /></svg>
icon-risk/design-system/icons/apiops-iconset.svg#icon-risk<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-risk" /></svg>
icon-quality/design-system/icons/apiops-iconset.svg#icon-quality<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-quality" /></svg>
icon-flow/design-system/icons/apiops-iconset.svg#icon-flow<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-flow" /></svg>
icon-learn/design-system/icons/apiops-iconset.svg#icon-learn<svg viewBox="0 0 140 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-iconset.svg#icon-learn" /></svg>

Metro icons

Journey, station, actor, and event symbols for diagrams.

glyph-station/design-system/icons/apiops-metro-icons.svg#glyph-station<svg viewBox="0 0 120 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-station" /></svg>
glyph-hub/design-system/icons/apiops-metro-icons.svg#glyph-hub<svg viewBox="0 0 120 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-hub" /></svg>
glyph-interchange/design-system/icons/apiops-metro-icons.svg#glyph-interchange<svg viewBox="0 0 120 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-interchange" /></svg>
glyph-route-split/design-system/icons/apiops-metro-icons.svg#glyph-route-split<svg viewBox="0 0 130 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-route-split" /></svg>
glyph-arrive/design-system/icons/apiops-metro-icons.svg#glyph-arrive<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-arrive" /></svg>
glyph-join/design-system/icons/apiops-metro-icons.svg#glyph-join<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-join" /></svg>
glyph-explore/design-system/icons/apiops-metro-icons.svg#glyph-explore<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-explore" /></svg>
glyph-decide/design-system/icons/apiops-metro-icons.svg#glyph-decide<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-decide" /></svg>
glyph-continue/design-system/icons/apiops-metro-icons.svg#glyph-continue<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-continue" /></svg>
glyph-learn/design-system/icons/apiops-metro-icons.svg#glyph-learn<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-learn" /></svg>
glyph-iterate/design-system/icons/apiops-metro-icons.svg#glyph-iterate<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-iterate" /></svg>
glyph-publish/design-system/icons/apiops-metro-icons.svg#glyph-publish<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-publish" /></svg>
glyph-measure/design-system/icons/apiops-metro-icons.svg#glyph-measure<svg viewBox="0 0 150 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-measure" /></svg>
glyph-shared-momentum/design-system/icons/apiops-metro-icons.svg#glyph-shared-momentum<svg viewBox="0 0 180 120" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-shared-momentum" /></svg>
glyph-passengers/design-system/icons/apiops-metro-icons.svg#glyph-passengers<svg viewBox="0 0 200 130" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-passengers" /></svg>
glyph-waiting/design-system/icons/apiops-metro-icons.svg#glyph-waiting<svg viewBox="0 0 180 150" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-waiting" /></svg>
glyph-workshop/design-system/icons/apiops-metro-icons.svg#glyph-workshop<svg viewBox="0 0 220 150" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-workshop" /></svg>
glyph-meetup/design-system/icons/apiops-metro-icons.svg#glyph-meetup<svg viewBox="0 0 240 160" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-meetup" /></svg>
glyph-conference/design-system/icons/apiops-metro-icons.svg#glyph-conference<svg viewBox="0 0 240 170" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-conference" /></svg>
glyph-speaker/design-system/icons/apiops-metro-icons.svg#glyph-speaker<svg viewBox="0 0 220 170" role="img" aria-label="…"><use href="/design-system/icons/apiops-metro-icons.svg#glyph-speaker" /></svg>

Human poses

Individual people for method-neutral workshop scenes.

pose-standing/design-system/humans/apiops-stick-figures-poses.svg#pose-standing<svg viewBox="0 0 170 205" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-poses.svg#pose-standing" /></svg>
pose-walking/design-system/humans/apiops-stick-figures-poses.svg#pose-walking<svg viewBox="0 0 180 205" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-poses.svg#pose-walking" /></svg>
pose-pointing/design-system/humans/apiops-stick-figures-poses.svg#pose-pointing<svg viewBox="0 0 190 205" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-poses.svg#pose-pointing" /></svg>
pose-presenting/design-system/humans/apiops-stick-figures-poses.svg#pose-presenting<svg viewBox="0 0 190 205" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-poses.svg#pose-presenting" /></svg>
pose-discussing/design-system/humans/apiops-stick-figures-poses.svg#pose-discussing<svg viewBox="0 0 220 205" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-poses.svg#pose-discussing" /></svg>
pose-listening/design-system/humans/apiops-stick-figures-poses.svg#pose-listening<svg viewBox="0 0 170 205" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-poses.svg#pose-listening" /></svg>
pose-thinking/design-system/humans/apiops-stick-figures-poses.svg#pose-thinking<svg viewBox="0 0 170 205" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-poses.svg#pose-thinking" /></svg>
pose-facilitating/design-system/humans/apiops-stick-figures-poses.svg#pose-facilitating<svg viewBox="0 0 210 205" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-poses.svg#pose-facilitating" /></svg>
pose-connecting/design-system/humans/apiops-stick-figures-poses.svg#pose-connecting<svg viewBox="0 0 220 205" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-poses.svg#pose-connecting" /></svg>
pose-observing/design-system/humans/apiops-stick-figures-poses.svg#pose-observing<svg viewBox="0 0 190 205" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-poses.svg#pose-observing" /></svg>

Human stories

Small, reusable storytelling compositions.

actor-presenting/design-system/humans/apiops-stick-figures-stories.svg#actor-presenting<svg viewBox="0 0 150 190" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-stories.svg#actor-presenting" /></svg>
actor-listening/design-system/humans/apiops-stick-figures-stories.svg#actor-listening<svg viewBox="0 0 150 190" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-stories.svg#actor-listening" /></svg>
actor-walking/design-system/humans/apiops-stick-figures-stories.svg#actor-walking<svg viewBox="0 0 160 190" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-stories.svg#actor-walking" /></svg>
actor-standing/design-system/humans/apiops-stick-figures-stories.svg#actor-standing<svg viewBox="0 0 150 190" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-stories.svg#actor-standing" /></svg>
actor-facilitating/design-system/humans/apiops-stick-figures-stories.svg#actor-facilitating<svg viewBox="0 0 190 190" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-stories.svg#actor-facilitating" /></svg>
actor-observing/design-system/humans/apiops-stick-figures-stories.svg#actor-observing<svg viewBox="0 0 180 190" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-stories.svg#actor-observing" /></svg>
actor-seated/design-system/humans/apiops-stick-figures-stories.svg#actor-seated<svg viewBox="0 0 175 190" role="img" aria-label="…"><use href="/design-system/humans/apiops-stick-figures-stories.svg#actor-seated" /></svg>

General React components and controls

These hydrated, method-neutral fixtures demonstrate CompactSection, interactive PillList buttons, ResourceSelector cards, PartnerCard with a logo, AnnouncementToast, StakeholderRoleSelector, buttons, and a drop-down menu.

Review checklist

Confirm the outcome, audience, and next decision.

PillList buttons

Selected: clarity

ResourceSelector

StakeholderRoleSelector

AnnouncementToast

Button and menu states

Native controls inherit the package typography and focus treatment; component-specific buttons add selected, pressed, and disabled semantics.

React export inventory

The public React entry point also exposes the lower-level canvas and metro composition primitives:

  • CompactSection
  • PillList
  • ResourceSelector
  • JourneyCriteria
  • PartnerCard
  • AnnouncementToast
  • StakeholderRoleSelector
  • MetroMapShell
  • MetroLinePath
  • MetroSelectionRing
  • MetroStationButton
  • MetroStationMarker
  • MetroLegend
  • CanvasSystemShell
  • CanvasSystemGrid
  • CanvasSystemZone
  • CanvasSystemNoteView
  • CanvasSystemMetadataEditor
  • CanvasSystemMetadataReadOnly
  • CanvasSystemFixture

Metro components

This example composes MetroMapShell, MetroLinePath, MetroStationButton, MetroStationMarker, MetroSelectionRing, and MetroLegend without importing the generated method catalog. It includes keyboard operation and selected-state behavior; route and station data remain application-owned.

Tab to either station and press Enter or Space. The selected station receives a visible selection ring.

Explore station1ExploreReview station, selected example2ReviewExample route

Canvas components and states

The hydrated CanvasSystemFixture documents interactive, presentation, and print modes together with active-section and focus-only behavior. Its metadata editor and read-only metadata, populated and empty note areas, anchor highlight, and journey treatment exercise the complete visual contract.

  • Interactive: focus, activate sections, edit metadata, and operate notes.
  • Presentation: readable content without editing controls.
  • Print: ink-safe structure and writable space.
  • State coverage: active section, focus-only layout, metadata, note, anchor, and journey states.

Canvas system fixture

Interactive mode

Visual states are deliberately colocated for regression review.

Highlighted section

An anchor section with a populated note area.

Journey section

A journey treatment with an intentionally empty note area.

Canvas system fixture

Presentation mode

Visual states are deliberately colocated for regression review.

Highlighted section

An anchor section with a populated note area.

Populated note

Journey section

A journey treatment with an intentionally empty note area.

Canvas system fixture

Print mode

Visual states are deliberately colocated for regression review.

Highlighted section

An anchor section with a populated note area.

Populated note

Journey section

A journey treatment with an intentionally empty note area.

Installation and usage

Import the application stylesheet once in the application layout, then import components and data only where needed.

import { CanvasSystemFixture } from "@apiops/design-system";
import { MetroMapShell } from "@apiops/design-system/react";
import "@apiops/design-system/styles.css"; // once, in the application layout
import tokens from "@apiops/design-system/tokens.json";
import { designSystemAssets } from "@apiops/design-system/assets";
import assetManifest from "@apiops/design-system/metadata/assets.json";

The supported public boundaries are @apiops/design-system, /react, /styles.css, /tokens.json, /assets, and /metadata/*.