Iconography
@tabler/icons-react only. Size by tier (size-3–size-8), scale with adjacent text, stroke=2 default.
Size scale
Five named tiers — pick one per context. Do not use arbitrary sizes between them.
xs
Footer meta, external-link chevrons, facet chips
sm
Inline with body copy, links, @wisihe/ui-react button icons
md
Default — nav controls, search fields, size-10 icon buttons
lg
Dock nav, carousel arrows, marketing rows
xl
Hero accents only — one per viewport region max
Scale with text
xs + text-xs · sm + text-sm · md + text-sm/base — keep icon and copy on the same tier.
Scaling rules
Pick a tier
Use size-3 through size-8 only. No arbitrary values (size-7, w-[18px], scale-110 on icons).
Match the label
Icon tier follows adjacent text: text-xs → size-3, text-sm → size-4, controls → size-5.
Fit the control
Icon-only buttons: container size-10 or size-11, icon size-5 inside. Never fill the whole hit area.
Keep stroke consistent
stroke={2} for sm and up. stroke={1.75} only at size-3 or dense facet rows.
Inherit color
Use currentColor via parent text-* tokens. Accent highlights only — no hex fills on SVGs.
Prevent squish
Add shrink-0 on icons in flex rows so long labels do not compress the glyph.
Common icons
IconArrowRightIconChevronDownIconChevronLeftIconChevronRightIconCheckIconSearchIconXIconShoppingCartIconMapPinIconVideoIconBrushIconFolderIconDeviceTvIconUserIconEyeIconHeartIconShareApp shell (by tier)
Navigation · lg (size-6)
IconBrushIconFolderIconDeviceTvIconUserSearch · md (size-5)
IconSearchIconCircleXIconFilterEngagement · sm (size-4)
IconEyeIconHeartIconShareLibrary & code snippetShowHide
@tabler/icons-reactAll UI icons — @wisihe/ui-react, app shell, marketing, searchCustom SVGBrand mark only (IconLogo)
import { IconArrowRight, IconSearch } from '@tabler/icons-react';
import { Button } from '@wisihe/ui-react';
// sm — inline with text-sm
<p className="flex items-center gap-2 text-sm">
<IconArrowRight className="size-4 shrink-0" stroke={2} aria-hidden />
Read more
</p>
// md — default control
<button type="button" className="inline-flex size-10 items-center justify-center" aria-label="Search">
<IconSearch className="size-5 shrink-0" stroke={2} aria-hidden />
</button>
// @wisihe/ui-react — icon size handled by Button
<Button variant="primary" Icon={IconArrowRight} iconPosition="right">
View work
</Button>Do & don’t
Pick a size tier and match adjacent text. stroke={2} (1.75 at size-3). shrink-0 in flex rows. Use @wisihe/ui-react Button for actions.
Do
Search paintings
Don't
Search paintings
Do
Read more
Don't
Read more
Do
Don't
Do
Don't