Integrate Modus Icons
Help with correct Modus icon usage patterns including naming conventions, sizing, and accessibility.
When to Use
Use this skill when:
- Adding icons to components or buttons
- Choosing the right icon name
- Sizing icons correctly
- Ensuring proper accessibility
- Integrating icons with Modus components
Icon Naming Convention
CRITICAL: Modus icons use UNDERSCORES (_), not hyphens (-)
Correct Icon Names
// ✅ CORRECT: Use underscores
<i className="modus-icons">save_disk</i>
<i className="modus-icons">arrow_left</i>
<i className="modus-icons">add_circle</i>
<i className="modus-icons">user_permissions</i>
// ❌ WRONG: Don't use hyphens
<i className="modus-icons">save-disk</i>
<i className="modus-icons">arrow-left</i>
Usage Patterns
Pattern 1: Using ModusIcon Component
import ModusIcon from "./components/ModusIcon";
// Informational icon (announced by screen reader)
<ModusIcon
name="user_add"
size="lg"
decorative={false}
ariaLabel="Add user"
/>
// Decorative icon (not announced)
<ModusIcon
name="chevron_right"
size="md"
decorative={true}
/>
Reference: src/components/ModusIcon.tsx
Pattern 2: Using Bare <i> Element
// Decorative icon
<i className="modus-icons text-lg" aria-hidden="true">
user_add
</i>
// Informational icon
<i
className="modus-icons text-md"
role="img"
aria-label="Settings"
>
settings
</i>
Pattern 3: Icons in Buttons
import ModusButton from "./components/ModusButton";
// Icon with text (left position)
<ModusButton
icon="save_disk"
iconPosition="left"
>
Save File
</ModusButton>
// Icon with text (right position)
<ModusButton
icon="download"
iconPosition="right"
>
Download
</ModusButton>
// Icon only (requires aria-label)
<ModusButton
icon="settings"
iconPosition="only"
ariaLabel="Open settings"
/>
Reference: src/components/ModusButton.tsx:149-206 for icon rendering logic
Icon Sizing
Tailwind Text Classes
Use Tailwind text utilities for sizing:
// Small icon
<i className="modus-icons text-sm">info</i>
// Base icon (Modus default 14px)
<i className="modus-icons text-base">warning</i>
// Large icon (16px)
<i className="modus-icons text-lg">error</i>
// Extra large icon (18px)
<i className="modus-icons text-xl">success</i>
Modus Font Size Scale
| Tailwind Class | Size | Usage |
|---|---|---|
text-2xs |
8px | Micro icons, badges |
text-xs |
10px | Small labels, captions |
text-sm |
12px | Secondary icons |
text-base |
14px | Modus default size |
text-lg |
16px | Body text icons |
text-xl |
18px | Large icons |
text-2xl |
20px | Prominent icons |
text-3xl |
24px | Display icons |
Button Icon Sizing
Icons in buttons automatically scale based on button size:
// Icons scale with button size
<ModusButton size="xs" icon="star" iconPosition="left">Extra Small</ModusButton>
<ModusButton size="sm" icon="star" iconPosition="left">Small</ModusButton>
<ModusButton size="md" icon="star" iconPosition="left">Medium</ModusButton>
<ModusButton size="lg" icon="star" iconPosition="left">Large</ModusButton>
// Icon-only buttons use larger icons
<ModusButton size="md" icon="settings" iconPosition="only" ariaLabel="Settings" />
Automatic sizing rules:
- Icons with text: Scale with button size (
text-xsfor xs,text-lgfor md) - Icon-only buttons: Get larger icons (
text-smfor xs,text-xlfor md)
Reference: src/components/ModusButton.tsx:98-134
Icon Colors
Use design system colors:
// Primary color
<i className="modus-icons text-primary">info</i>
// Success color
<i className="modus-icons text-success">check_circle</i>
// Warning color
<i className="modus-icons text-warning">warning</i>
// Error color
<i className="modus-icons text-error">error</i>
// Muted text
<i className="modus-icons text-muted-foreground">help</i>
Accessibility
Decorative Icons
For purely decorative icons, use aria-hidden="true":
<button>
<i className="modus-icons mr-2" aria-hidden="true">save_disk</i>
Save Document
</button>
Informational Icons
For icons that convey meaning, provide proper labels:
// Using role="img" and aria-label
<i className="modus-icons" role="img" aria-label="Warning">
warning
</i>
// Using aria-label on parent element
<button aria-label="Delete item">
<i className="modus-icons" aria-hidden="true">delete</i>
</button>
Icon-Only Buttons
Always provide accessible labels:
<ModusButton
icon="settings"
iconPosition="only"
ariaLabel="Open settings menu"
/>
Common Icon Names
Navigation & UI
arrow_left,arrow_right,arrow_up,arrow_downchevron_left,chevron_rightmenu,close,home,settings,search
Actions & Operations
add,remove,edit_combination,deletesave_disk,download,upload,copy_content
Status & Feedback
check,check_circle,error,warning,alert,info,help
Files & Documents
file,file_upload,file_downloadfolder_open,folder_closed,document,image,video
User & Account
person,people_group,user_account,user_addkey,lock,lock_open
Validating Icon Names
Check icon names against the complete list in:
.cursor/rules/modus-icon-names.mdc- Complete list of 700+ valid icon names
Common mistakes:
- Using hyphens instead of underscores
- Wrong capitalization (all lowercase)
- Typos in icon names
Testing Icons
Visual Verification
Icons should display as glyphs, not text. If you see text like "save_disk" instead of an icon:
- Check font CSS is loaded in
index.html - Verify icon name uses underscores
- Confirm
modus-iconsclass is applied - Check network tab for font file download
Browser DevTools Check
// Check if font is loaded
const testElement = document.createElement('span');
testElement.className = 'modus-icons';
document.body.appendChild(testElement);
const fontFamily = window.getComputedStyle(testElement).fontFamily;
console.log('Font loaded:', fontFamily.includes('modus-icons'));
document.body.removeChild(testElement);
Common Mistakes
- Wrong naming: Using hyphens instead of underscores
- Wrong sizing: Using pixel values instead of Tailwind classes
- Missing accessibility: Not providing aria-label for informational icons
- Wrong icon name: Not checking against valid icon list
- Font not loaded: Missing CSS import for Modus icons
Related Files
src/components/ModusIcon.tsx- Icon component wrappersrc/components/ModusButton.tsx- Button icon integration.cursor/rules/modus-icon-names.mdc- Complete icon name list.cursor/rules/modus-icons-react.mdc- Detailed icon documentation