Marks
Two marks are available: the full wordmark (full, default) and the square “CAT” mark (icon).
Full wordmark
The default mark. Use as the primary brand representation.
<CheckatradeLogo />Square mark
The compact square 'CAT' mark. Use in space-constrained contexts such as favicons, app icons, or tight navigation bars.
<CheckatradeLogo mark="icon" />Sizes
Three sizes are available. The default is md.
Size ramp
All three sizes using the full wordmark.
<div className="flex items-end gap-6 flex-wrap">
<CheckatradeLogo size="sm" label="Checkatrade (sm)" />
<CheckatradeLogo size="md" label="Checkatrade (md)" />
<CheckatradeLogo size="lg" label="Checkatrade (lg)" />
</div>Bounded responsive sizing
Pass same-axis minWidth/maxWidth alongside style.width (or minHeight/maxHeight
alongside style.height) to clamp a fluid dimension while proportions keep
following the locked aspect ratio. Supported on both web and native (the live
example below renders the web component).
Fluid width, clamped
Width fills the container between a 120px floor and a 400px ceiling; height always derives from the aspect ratio.
<div style={{ width: 300 }}>
<CheckatradeLogo style={{ width: '100%', minWidth: 120, maxWidth: 400 }} label="Checkatrade (bounded)" />
</div>Surface-aware inverse
On any non-neutral Surface tone the reversed (white) variant is applied automatically. No extra prop is needed.
Inside an inverse Surface
On a non-neutral Surface the CheckatradeLogo shows the reversed (white) variant automatically, so it stays legible on the dark background.
<Surface tone="inverse" className="rounded-lg p-6">
<CheckatradeLogo label="Checkatrade" />
</Surface>When to use
Use CheckatradeLogo whenever you need to display the Checkatrade brand mark. Choose full (wordmark) as the default and reserve icon (square mark) for contexts where space is limited and the brand is already established.
Marks
full— the full horizontal wordmark. Use as the primary representation: headers, footers, marketing pages.icon— the compact square “CAT” mark. Use in tight spaces: favicons, app icons, compact navigation.
Sizes
| Size | Height | Typical use |
|---|---|---|
sm | 24 px | Compact headers, inline brand mentions |
md | 32 px | Default — most layouts |
lg | 48 px | Hero sections, splash screens |
Sizes are provisional pending design sign-off.
Inverse / Surface tones
The CheckatradeLogo component reads the surrounding Surface tone via React context. On any non-neutral tone (inverse, brand-primary, brand-secondary) it automatically renders the reversed (white) variant. Use the explicit inverse prop only when you need the reversed mark outside of a Surface.
Accessibility
- By default,
labelis'Checkatrade', exposing the mark as an image with that accessible name. - Pass
label={null}when the logo is purely decorative — for example, when a visible text heading already reads “Checkatrade” immediately alongside it. The mark will be hidden from assistive technology.
When not to use
- Icons from the icon set: use the
Iconcomponent. - Illustrations: use a plain
<img>or the Illustration component. - Custom partner or co-brand marks: use a plain
<img>with an appropriatealtattribute.
Style constraints
LogoStyle is an intentional whitelist — only sizing, margin, and positioning props are exposed.
Visual properties (colour, opacity, transform, border, shadow) are excluded by design: the brand mark
must remain visually unchanged. If you need to apply a visual treatment around the logo, wrap it in a
View.
Props
Web props
| Prop | Type | Default | Description |
|---|---|---|---|
| mark | 'full' | 'icon' | 'full' | Which mark to render: 'full' is the horizontal wordmark, 'icon' is the compact square CAT mark. |
| size | 'sm' | 'md' | 'lg' | 'md' | Sets the height of the mark (24 px / 32 px / 48 px). Width is derived from each mark's intrinsic aspect ratio. Sizes are provisional pending design sign-off. |
| inverse | boolean | - | Force the variant (true → reversed, false → positive). Defaults to auto, derived from the Surface tone and the light/dark theme — you rarely need this prop. |
| label | string | null | 'Checkatrade' | Accessible label. Omit (or pass null) to make the mark decorative (aria-hidden). Provide a string to expose it as an image with that accessible name. |
| className | string | - | Additional CSS classes merged onto the SVG element. |
Responsive sizing props
Both the web and native CheckatradeLogo support a responsive style sizing API, available on the wordmark (mark="full", the default) only — the square icon mark uses the fixed size presets. size and style are mutually exclusive — use one or the other.
| Prop | Type | Default | Description |
|---|---|---|---|
| style | LogoStyle | - | Responsive sizing. Wordmark (`mark="full"`) only — not available on the `icon` mark. Pass either `width` or `height` (number or percentage string, e.g. `'100%'`) — the other dimension is derived from the mark's intrinsic aspect ratio. Also accepts optional margin and positioning props (see below). Mutually exclusive with `size`. |
| style.width | number | string | - | Sets the width; height is computed from the aspect ratio. E.g. `'100%'` to fill the parent. Mutually exclusive with `style.height`. |
| style.height | number | string | - | Sets the height; width is computed from the aspect ratio. Mutually exclusive with `style.width`. |
| style.minWidth / style.maxWidth | number | string | - | Optional same-axis clamp for `style.width` — e.g. a fluid `width: '100%'` that never shrinks below `minWidth` or grows past `maxWidth`. Only valid alongside `style.width`; pairing with `style.height` is a type error, since the derived axis is not directly settable and clamping it would distort the mark. Proportions are always preserved — the un-constrained axis keeps scaling from the aspect ratio. |
| style.minHeight / style.maxHeight | number | string | - | Optional same-axis clamp for `style.height` — same rules as `minWidth`/`maxWidth`, mirrored onto the height axis. Only valid alongside `style.height`; pairing with `style.width` is a type error. |
| style.margin / marginHorizontal / marginVertical / marginTop / marginRight / marginBottom / marginLeft | number | string | - | Margin shorthand and per-side props (marginTop, marginRight, marginBottom, marginLeft, marginHorizontal, marginVertical). Accepts any value valid in React Native ViewStyle. |
| style.position | 'absolute' | 'relative' | - | Switches the logo out of normal document flow. Use 'absolute' for overlays. |
| style.top / left / right / bottom | number | string | - | Position offsets. Typically used with position='absolute'. |
| style.zIndex | number | - | Stack order when the logo overlaps other elements. |
| style.alignSelf | string | - | Overrides the parent's alignItems for the logo (e.g. 'center', 'flex-start', 'stretch'). |
Import
Web
import { CheckatradeLogo } from '@checkatrade/components-web';Native
import { CheckatradeLogo } from '@checkatrade/components-native';Basic usage
{
/* Default wordmark, labelled */
}
<CheckatradeLogo />;
{
/* Square mark */
}
<CheckatradeLogo mark="icon" />;
{
/* Explicit size */
}
<CheckatradeLogo size="lg" />;
{
/* Decorative — hidden from assistive technology */
}
<CheckatradeLogo label={null} />;Inverse on a dark surface
{
/* Automatic via Surface context — no prop needed */
}
<Surface tone="inverse" className="p-6">
<CheckatradeLogo />
</Surface>;
{
/* Manual inverse without a Surface */
}
<div
style={{
background: 'var(--color-background-surface-brand-primary-default)',
padding: '1rem',
}}
>
<CheckatradeLogo inverse />
</div>;Responsive sizing
Both the web and native CheckatradeLogo support a style prop for responsive and custom-sized layouts.
{
/* Fill the parent container width, height auto */
}
<CheckatradeLogo style={{ width: '100%' }} />;
{
/* Fixed height with a top margin */
}
<CheckatradeLogo style={{ height: 40, marginTop: 16 }} />;
{
/* Fixed width with horizontal margins (wordmark) */
}
<CheckatradeLogo style={{ width: 240, marginHorizontal: 12 }} />;
{
/* Fluid width clamped between 120px and 400px — proportions hold throughout */
}
<CheckatradeLogo style={{ width: '100%', minWidth: 120, maxWidth: 400 }} />;Consumer requirement (native): add
expo-image(peer>=3) to your app or package. Keep.svgfiles in Metro’s defaultassetExts— do not route.svgthroughreact-native-svg-transformer.
Platform status
| Platform / Area | Status |
|---|---|
| Design (Figma) | Planned |
| Web (React) | Beta |
| Native (React Native) | Beta |
| iOS (Swift) | Planned |
| Android (Kotlin) | Planned |
| Accessibility audit | Planned |
Accessibility
Web
- Decorative logos set
aria-hidden="true"androle="presentation"— completely invisible to assistive technology. - Labelled logos set
role="img"andaria-labelfrom thelabelprop (defaults to'Checkatrade'). - The SVG inherits dimensions via an inline
heightstyle; width is auto to preserve the mark’s intrinsic aspect ratio.
React Native
- See the native CheckatradeLogo component for accessibility details on mobile.
No releases yet.