Icon Reference
Complete reference of valid icon names available for use in REFRACT PDF documents. Includes status, information, content, and system icons.
This guide lists all valid icon names available for use in REFRACT PDF documents, including conditional styles, cards, tables, and other components.
Status Icons
Use these icons to indicate status, state, or result conditions.
| Icon Name | Visual | Use Case |
|---|---|---|
check | Green checkmark | Success, approved, completed |
circlealert | Circle with exclamation | Alert, warning, attention needed |
warning | Triangle warning | Warning, caution, risky |
clock | Clock or timer | Pending, in progress, time-based |
status | Trending or activity | Trending up, active, status indicator |
x | Red close or X | Failed, error, critical issue |
Information Icons
Use these icons for informational or labeling purposes.
| Icon Name | Visual | Use Case |
|---|---|---|
info | Info circle | General information, note |
tag | Tag or label | Category, tag, classification |
star | Star or favorite | Favorite, important, highlighted |
Content Icons
Use these icons for document, file, and content types.
| Icon Name | Visual | Use Case |
|---|---|---|
file | Document icon | Generic file, attachment |
package | Box or package | Package, shipment, container |
list | Bullet list | List, checklist, items |
image | Photo or image | Image, picture, visual content |
barcode | Barcode | Barcode, SKU, product code |
qr | QR code | QR code, scanned content |
percent | Percentage symbol | Percentage, ratio, proportion |
System Icons
Use these icons for organizational, security, and communication elements.
| Icon Name | Visual | Use Case |
|---|---|---|
building | Building or organization | Organization, company, facility |
shield | Security shield | Security, compliance, protected |
phone | Phone number | Phone contact, telephone |
email | Email address | Email, message, communication |
link | URL or hyperlink | Link, reference, URL |
There is no checkbox-checked, checkbox-unchecked, radio-checked or radio-unchecked icon - these are not in the icon registry. Use check for a checked/true state, and text or a blank cell for an unchecked/false state.
Usage Examples
In Conditional Styles
{
"key": "status",
"label": "Status",
"conditionalStyles": [
{
"value": "APPROVED",
"icon": "check",
"color": "#4CAF50",
"styleTarget": "icon"
},
{
"value": "PENDING",
"icon": "clock",
"color": "#FF9800",
"styleTarget": "icon"
},
{
"value": "REJECTED",
"icon": "x",
"color": "#D32F2F",
"styleTarget": "icon"
},
{
"value": "WARNING",
"icon": "circlealert",
"color": "#FF9800",
"styleTarget": "icon"
}
]
}In Cards
{
"type": "card",
"props": {
"title": "Order Status",
"fields": [
{
"key": "orderStatus",
"label": "Status",
"value": "{{orderStatus}}",
"conditionalStyles": [
{
"value": "COMPLETED",
"icon": "check",
"color": "#4CAF50"
},
{
"value": "SHIPPED",
"icon": "package",
"color": "#2196F3"
}
]
}
]
}
}In Tables
Column-level conditionalStyles only take effect when the column is declared through props.columnManifest.columns[] - see Conditional Styles and Table.
{
"type": "table",
"props": {
"title": "Security Audit",
"dataPath": "auditItems",
"columnManifest": {
"columns": [
{ "key": "auditItem", "label": "Item", "displayOrder": 0 },
{
"key": "result",
"label": "Result",
"displayOrder": 1,
"conditionalStyles": [
{
"value": "PASSED",
"icon": "check",
"color": "#4CAF50",
"displayMode": "icon"
},
{
"value": "FAILED",
"icon": "x",
"color": "#D32F2F",
"displayMode": "icon"
},
{
"value": "NOT_TESTED",
"icon": "info",
"color": "#999999",
"displayMode": "icon"
}
]
}
]
}
}
}Migration Guide
The renderer resolves an icon key in two steps: first as an exact, case-sensitive match against the registry names above; if that fails, against a small legacy alias table kept for templates saved before the registry was renamed. These are the only legacy aliases that exist - any other capitalized or old-style name not listed here does not resolve, and the icon is silently dropped rather than raising an error.
| Old Name | Resolves To |
|---|---|
AlertTriangle | warning |
CheckCircle | check |
XCircle | x |
Star | star |
Info | info |
Clock | clock |
Note | info |
Flag | circlealert |
Arrow | info |
TrendUp | circlealert |
TrendDown | warning |
FileText is also in this alias table, but it maps to file-text, which is not itself a registry key - so FileText does not resolve to anything either. Use file directly instead.
Names like AlertCircle, TrendingUp, TrendingDown, Loader, Activity, Edit, Trash, Download, Upload, Copy, Server, Database, Wifi, WifiOff, HardDrive, MessageSquare, Mail and Bell are not registry keys and not legacy aliases - they do not resolve. Use the direct registry names from the tables above instead (for example, circlealert for an alert icon, email for a mail icon, building for a server/organization icon).
Icon Placement Best Practices
With displayMode
displayMode: "icon"- Icon only (best for status indicators)displayMode: "label"- Text only (no icon)displayMode: "iconAndLabel"- Icon plus text (default, best for descriptions)
With styleTarget
styleTarget: "icon"- Apply colors to icon onlystyleTarget: "text"- Apply colors to text onlystyleTarget: "cell"- Apply colors to entire cell background
Examples
Status icon with green color:
{
"value": "ACTIVE",
"icon": "check",
"color": "#4CAF50",
"displayMode": "icon",
"styleTarget": "icon"
}Alert with red background:
{
"value": "ERROR",
"icon": "circlealert",
"color": "#FFFFFF",
"bgColor": "#D32F2F",
"displayMode": "iconAndLabel",
"styleTarget": "cell"
}Unicode Characters for Text-Based Styling
As an alternative to SVG icons, plain Unicode characters can be used directly in text fields, feature lists, and CTA labels - but only for characters the embedded PDF body font (Roboto Regular) actually has glyphs for. A character the font lacks does not render at all in the PDF, even though it displays fine in a code editor or a browser preview (which silently falls back to a different font). The tables below were checked directly against the embedded font's character map and list only what actually renders, plus the specific characters template authors commonly reach for that do not.
Navigation & Directional (CTAs)
| Character | Codepoint | Renders in PDF? |
|---|---|---|
| narrow angle quote | › | Yes |
| right guillemet | » | Yes |
| rightwards arrow | → | No |
| heavy arrow | ➔ | No |
For a right-pointing arrow in a CTA, use » or plain text ("Get Started") rather than → or ➔ - neither renders.
Example in Bento Card CTA:
{
"cta": {
"primary": "Get Started",
"secondary": "Learn More »"
}
}Status & Validation (Reports)
| Character | Codepoint | Renders in PDF? |
|---|---|---|
| square root (visually similar to a check) | √ | Yes |
| plain multiplication sign ("x") | × | Yes |
| check mark | ✓ | No |
| heavy check mark | ✔ | No |
| multiplication x (a heavier cross mark) | ✕ | No |
| warning sign | ⚠ | No |
| info source | ℹ | No |
None of the marks template authors actually want for pass/fail/warning states (check mark, heavy check, a proper cross, warning triangle, info) render in the embedded font. Use the SVG icon registry instead - check, x, warning and info are real icons that render correctly, either directly on a card/table/bento_card icon prop or through conditionalStyles.
Example: conditional icon instead of a Unicode character
{
"key": "validationStatus",
"label": "Status",
"conditionalStyles": [
{ "value": "PASS", "icon": "check", "color": "#4CAF50" },
{ "value": "FAIL", "icon": "x", "color": "#D32F2F" }
]
}Example in Feature List:
"features": [
{ "label": "Full encryption" },
{ "label": "99.9% uptime" },
{ "label": "No legacy support", "icon": "x" }
]List Bullets (Bento Features)
| Character | Codepoint | Renders in PDF? |
|---|---|---|
| black square | ■ | Yes |
| bullet | • | Yes |
| white square | □ | No |
| black diamond | ◆ | No |
Example in Bento Card Features:
"features": [
{ "label": "Unlimited projects" },
{ "label": "50 GB storage" },
{ "label": "Optional add-ons available" },
{ "label": "Premium support tier" }
]features[].label does not need a leading bullet character - each feature already renders as its own row with a check icon by default (see Bento Card).
Financial & Metrics (Pricing/Invoices)
| Character | Codepoint | Renders in PDF? |
|---|---|---|
| middle dot | · | Yes |
| increment/delta | ∆ | Yes |
| almost equal to | ≈ | Yes |
| upwards arrow | ↑ | No |
All three separator/metric characters here render correctly. The one common addition to avoid is an up-arrow (↑) for a trend indicator - it does not render; use the word "up" or a plus sign instead.
Example in Pricing Card:
{
"type": "bento_card",
"props": {
"title": "Professional",
"heroSection": {
"value": "$149",
"period": "· per month",
"description": "billed annually"
}
}
}Example in KPI Summary:
{
"features": [
{ "label": "Performance", "value": "+22% ∆" },
{ "label": "Compression", "value": "≈ 85%" },
{ "label": "File size", "value": "250 KB · avg" }
]
}Combining Unicode with Conditional Styles
conditionalStyles[].label is not a real property - conditional style rules match against value and apply icon/color/bgColor; they do not carry a separate display label. To combine a status word with an icon, keep the cell's own text as the label and let conditionalStyles add the icon:
{
"key": "auditResult",
"conditionalStyles": [
{ "value": "PASSED", "icon": "check", "color": "#4CAF50" },
{ "value": "FAILED", "icon": "x", "color": "#D32F2F" },
{ "value": "WARNING", "icon": "warning", "color": "#FF9800" }
]
}Troubleshooting
Icon Not Displaying
Problem: Icon does not appear even though the name is specified
Solutions:
- Wrong icon name - Check icon name against the valid list above
- Case sensitivity - Icon names are lowercase (e.g.,
check, notCheck), except for the legacy aliases in the Migration Guide, which are exact-case PascalCase - Typo - Verify spelling matches exactly (e.g.,
circlealert, notcirclealerts)
Icon Color Not Applying
Problem: Icon appears but with wrong color
Solutions:
- Check styleTarget - Ensure
styleTargetis set correctly (use"icon"to color just the icon) - Verify color value - Use valid hex colors (e.g.,
"#4CAF50") or theme tokens (e.g.,"theme.success") - Theme token - If using theme tokens, ensure the token exists in your configuration
Icon and Text Misaligned
Problem: Icon and text do not align properly
Solutions:
- Try styleTarget: "icon" - This often fixes alignment issues
- Adjust displayMode - Use
"icon"only if text is not needed - Check cell width - Narrow cells may squeeze icon and text together
Performance Tips
- Use simple icons (
check,x,info) for better rendering performance - Prefer
displayMode: "icon"when space is limited - Icons automatically scale with text size, no need to specify separate sizes
PDF Assets
Embed PDF pages as inline images or append full PDF documents to a REFRACT PDF output. Two modes (EMBED and APPEND) cover different use cases from extracting a single chart to attaching a complete technical manual. PDF assets work in standalone structured content blocks and inside supplementary annex image grids.
Structured Content
Author rich legal, policy, or compliance documents in YAML or JSON and embed them anywhere in a REFRACT PDF template. At render time, the REFRACT PDF engine fetches the StructuredDocument asset and injects its fully-typed blocks directly into the PDF output. Also hosts the supplementary_Annex section type for per-line-item supporting documentation.