Sizes
Seven token-driven sizes are available. The default is sm.
Size ramp
All seven sizes using the same MaterialHome glyph.
import { MaterialHome } from '@checkatrade/icons/react';
import { Icon } from '@checkatrade/components-web';
<div className="flex items-end gap-4 flex-wrap">
<Icon icon={MaterialHome} size="xxs" label="Home (xxs)" />
<Icon icon={MaterialHome} size="xs" label="Home (xs)" />
<Icon icon={MaterialHome} size="sm" label="Home (sm)" />
<Icon icon={MaterialHome} size="md" label="Home (md)" />
<Icon icon={MaterialHome} size="lg" label="Home (lg)" />
<Icon icon={MaterialHome} size="xl" label="Home (xl)" />
<Icon icon={MaterialHome} size="xxl" label="Home (xxl)" />
</div>Accessibility
Icons are either decorative (hidden from assistive technology) or labelled (exposed as an image with a meaningful name). The label prop controls this.
Decorative (no label)
Omit label when the icon is purely visual and nearby text already conveys the meaning. The icon is hidden from screen readers with aria-hidden.
<span className="flex items-center gap-1">
<Icon icon={MaterialHome} size="md" />
<span>Home</span>
</span>Labelled (standalone icon)
Provide a label when the icon conveys meaning without accompanying text. It is rendered with role=img and aria-label.
<Icon icon={MaterialSearch} size="md" label="Search" />Inverse
Use inverse on dark or branded backgrounds. Toggle to dark theme to see the canvas context. When an icon is inside a <Surface tone="inverse">, the inverse prop is applied automatically via context.
Inside an inverse Surface
Descendant icons inherit the inverse tone automatically — no prop needed.
<Surface tone="inverse" className="rounded-lg p-6 flex gap-4">
<Icon icon={MaterialHome} size="xl" label="Home" />
<Icon icon={MaterialFavorite} size="xl" label="Favourites" />
<Icon icon={MaterialSettings} size="xl" label="Settings" />
</Surface>Explicit inverse prop
Pass inverse directly when you need inverse colouring outside a Surface context.
<div className="rounded-lg bg-[var(--color-background-surface-brand-primary-default)] p-6 flex gap-4">
<Icon icon={MaterialHome} size="xl" label="Home" inverse />
<Icon icon={MaterialStar} size="xl" label="Starred" inverse />
</div>When to use
Use Icon to embed a single glyph from the Checkatrade icon set. The glyph is imported from @checkatrade/icons/react and passed as a prop — this means only the glyphs you actually use end up in your bundle.
Sizes
| Size | CSS token | Typical use |
|---|---|---|
xxs | size-icon-xxs | Micro indicators, inline with tight copy |
xs | size-icon-xs | Badges, compact lists |
sm | size-icon-sm | Default — most inline use cases |
md | size-icon-md | Comfortable inline use, form fields |
lg | size-icon-lg | Section headings, cards |
xl | size-icon-xl | Feature callouts |
xxl | size-icon-xxl | Hero / marketing moments |
Accessibility
- Decorative: omit
labelwhen the icon is alongside visible text that already conveys the meaning (e.g. an icon next to a button label). The icon getsaria-hidden="true". - Labelled: provide a
labelwhen the icon stands alone as the only way to understand an action or status. The icon getsrole="img"andaria-labelset to the label.
Inverse
The Icon component reads the surrounding Surface tone via React context. If the icon is inside <Surface tone="inverse">, it automatically renders in inverse colours without needing the inverse prop. Use the explicit inverse prop only when you need inverse colouring outside of a Surface.
When not to use
- Logos: use the dedicated Logo component.
- Illustrations: use the Illustration component or a plain
<img>. - Animated or complex graphics: use a custom SVG or Lottie.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| icon * | ComponentType<SVGProps<SVGSVGElement>> | - | A glyph component from @checkatrade/icons/react, e.g. import { MaterialHome } from @checkatrade/icons/react. |
| size | 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'sm' | Token-driven size. Maps to size-icon-* CSS custom properties. |
| label | string | - | Omit for decorative icons (aria-hidden). Provide to expose the icon as an image with this accessible name (role=img + aria-label). |
| inverse | boolean | - | Force inverse token colouring. Defaults to the surrounding Surface tone — you do not need this prop inside <Surface tone="inverse">. |
| className | string | - | Additional CSS classes merged onto the SVG element. |
Import
Web
import { Icon } from '@checkatrade/components-web';
import { MaterialHome, MaterialSearch } from '@checkatrade/icons/react';Basic usage
{/* Decorative — hidden from AT, adjacent text provides the label */}
<span className="flex items-center gap-1">
<Icon icon={MaterialHome} />
<span>Home</span>
</span>
{/* Labelled — standalone icon, screen readers announce "Search" */}
<Icon icon={MaterialSearch} size="md" label="Search" />
{/* Explicit size */}
<Icon icon={MaterialHome} size="xl" label="Home" />Inverse on a dark surface
{/* Automatic via Surface context — no prop needed */}
<Surface tone="inverse" className="p-6">
<Icon icon={MaterialHome} size="lg" label="Home" />
</Surface>
{/* Manual inverse without a Surface */}
<div style={{ background: 'var(--color-background-surface-brand-primary-default)', padding: '1rem' }}>
<Icon icon={MaterialHome} size="lg" label="Home" inverse />
</div> Platform status
| Platform / Area | Status |
|---|---|
| Design (Figma) | Beta |
| Web (React) | Beta |
| Native (React Native) | Beta |
| iOS (Swift) | Planned |
| Android (Kotlin) | Planned |
| Accessibility audit | Planned |
Accessibility
Web
- Decorative icons set
aria-hidden="true"androle="presentation"— completely invisible to assistive technology. - Labelled icons set
role="img"andaria-labelfrom thelabelprop. - Colouring uses
fill-currentand inherits from a CSScolorproperty, which respects forced-colours / high-contrast mode.
React Native
- See the native Icon component for accessibility details on mobile.
No releases yet.
Icon Browser
Browse all 3,899 icons in the Checkatrade icon set. Search by name and hover to see the full identifier. Use the name to import the glyph: import { <PascalCaseName> } from '@checkatrade/icons/react'.
Showing first 120 of 3,899 — refine your search to narrow results