Overview
A’raf DS uses Lucide React as its icon system. All components that accept icon props expect aReactNode from a Lucide icon component. Icons are sized via the size prop and colored via CSS currentColor, inheriting from their parent’s text color.
Installation
Usage
Size Guide
| Token | Value | Use Case |
|---|---|---|
icon/size/xs | 14px | Inline with small text, badges |
icon/size/sm | 16px | Beside body text, form labels, selects |
icon/size/md | 20px | Button icons, nav items (default) |
icon/size/lg | 24px | Card icons, section headers |
icon/size/xl | 48px | Feature icons, empty states |
Icon Color Tokens
Icons in A’raf DS components automatically use semantic tokens:| Semantic Token | Value (Light) | Use |
|---|---|---|
icon/default/primary | #1f2937 | Primary content icons |
icon/default/secondary | #6b7280 | Supporting / muted icons |
icon/default/brand | #0479CE | Brand-colored icons |
icon/default/on-brand | #ffffff | Icons on colored backgrounds |
icon/state/disabled | #9ca3af | Disabled state |
icon/state/destructive | #dc2626 | Delete / danger actions |
icon/status/success | #16a34a | Success indicators |
icon/status/error | #dc2626 | Error indicators |
icon/status/warning | #eab308 | Warning indicators |
icon/status/info | #3b82f6 | Info indicators |
Common Icons by Category
Navigation & Layout
Actions
Data & Files
Users & Auth
Status & Feedback
Communication
Browsing Icons
Browse all Lucide icons at lucide.dev. Search by keyword —"arrow" returns all directional icons, "check" returns all validation icons.
Accessibility
- Icon-only interactive elements must have an accessible label via
aria-labelon the wrapping button, or a visually hidden<span>sibling - Decorative icons that are accompanied by visible text should have
aria-hidden="true"to avoid redundant announcements - Never use an icon as the sole indicator of meaning for critical states (e.g. error) — always pair with text
- Icons used as status indicators in tables or badges must have a text alternative
Do’s & Don’ts
Do
- Follow the size token guide — use
size={20}for button icons,size={16}for form labels - Use
aria-hidden="true"on decorative icons next to visible text labels - Use
aria-labelon icon-only buttons (e.g. delete, close) - Let icons inherit color via
currentColor— avoid hardcoded hex where semantic tokens exist
Don't
- Don’t use icons larger than
size={24}inside buttons — they overwhelm the text - Don’t use icons as the only signal for status — always add a text label or tooltip
- Don’t mix icon styles (outline vs filled) within the same component or screen
- Don’t import the entire
lucide-reactlibrary — import only what you need for tree-shaking