Concorde UI component — Icon. sonic-icon renders inline SVG icons from the bundled core set or from CDN libraries. Set name (and library / prefix when needed); scale with size. Icons inherit currentColor and are aria-hidden by def Doc ID: core/components/ui/icon/icon. Keywords: Concorde, supersoniks, core/components/ui/icon/icon, icon, Icon, UI component, sonic-icon, web component, name, library, prefix, size, currentColor, aria-hidden, icons.json. URL: https://concorde.supersoniks.org/core/components/ui/icon.
Icon
sonic-icon renders inline SVG icons from the bundled core set or from CDN libraries. Set name (and library / prefix when needed); scale with size. Icons inherit currentColor and are aria-hidden by default—keep visible text nearby or label the control that contains them.
Core library
Omit library to use the bundled set in icons.json. Available name values: cancel · check · check-circled-outline · emoji-puzzled · info-empty · loader · minus-small · more-horiz · more-vert · nav-arrow-down · warning-circled-outline.
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-8">
<div class="text-center">
<sonic-icon name="cancel" size="lg"></sonic-icon>
<div class="text-xs mt-1">cancel</div>
</div>
<div class="text-center">
<sonic-icon name="check" size="lg"></sonic-icon>
<div class="text-xs mt-1">check</div>
</div>
<div class="text-center">
<sonic-icon name="check-circled-outline" size="lg"></sonic-icon>
<div class="text-xs mt-1">check-circled-outline</div>
</div>
<div class="text-center">
<sonic-icon name="emoji-puzzled" size="lg"></sonic-icon>
<div class="text-xs mt-1">emoji-puzzled</div>
</div>
<div class="text-center">
<sonic-icon name="info-empty" size="lg"></sonic-icon>
<div class="text-xs mt-1">info-empty</div>
</div>
<div class="text-center">
<sonic-icon name="loader" size="lg"></sonic-icon>
<div class="text-xs mt-1">loader</div>
</div>
<div class="text-center">
<sonic-icon name="minus-small" size="lg"></sonic-icon>
<div class="text-xs mt-1">minus-small</div>
</div>
<div class="text-center">
<sonic-icon name="more-horiz" size="lg"></sonic-icon>
<div class="text-xs mt-1">more-horiz</div>
</div>
<div class="text-center">
<sonic-icon name="more-vert" size="lg"></sonic-icon>
<div class="text-xs mt-1">more-vert</div>
</div>
<div class="text-center">
<sonic-icon name="nav-arrow-down" size="lg"></sonic-icon>
<div class="text-xs mt-1">nav-arrow-down</div>
</div>
<div class="text-center">
<sonic-icon name="warning-circled-outline" size="lg"></sonic-icon>
<div class="text-xs mt-1">warning-circled-outline</div>
</div>
</div>
External libraries
Set library to load SVGs from a built-in CDN template. prefix falls back to each library’s default when omitted (outline for heroicons, regular for fontAwesome and material, and so on).
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-8">
<sonic-link href="https://heroicons.com/" target="_blank" class="text-center underline">
<sonic-icon library="heroicons" prefix="outline" name="academic-cap" size="lg"></sonic-icon>
<br />
<div class="text-xs mt-1">heroicons</div>
</sonic-link>
<sonic-link href="https://iconoir.com/" target="_blank" class="text-center underline">
<sonic-icon library="iconoir" name="2x2-cell" size="lg"></sonic-icon>
<br />
<div class="text-xs mt-1">iconoir</div>
</sonic-link>
<sonic-link href="https://materialdesignicons.com/" target="_blank" class="text-center underline">
<sonic-icon library="material" prefix="outline" name="email" size="lg"></sonic-icon>
<br />
<div class="text-xs mt-1">material design</div>
</sonic-link>
<sonic-link href="https://fontawesome.com/search?o=r&m=free&s=regular" target="_blank" class="text-center underline">
<sonic-icon library="fontAwesome" prefix="regular" name="user" size="lg"></sonic-icon>
<br />
<div class="text-xs mt-1">fontAwesome regular</div>
</sonic-link>
<sonic-link href="https://fontawesome.com/search?o=r&m=free&s=solid" target="_blank" class="text-center underline">
<sonic-icon library="fontAwesome" prefix="solid" name="book" size="lg"></sonic-icon>
<br />
<div class="text-xs mt-1">fontAwesome solid</div>
</sonic-link>
<sonic-link href="https://feathericons.com/" target="_blank" class="text-center underline">
<sonic-icon library="feathers" name="activity" size="lg"></sonic-icon>
<br />
<div class="text-xs mt-1">feathers</div>
</sonic-link>
<sonic-link href="https://lucide.dev/" target="_blank" class="text-center underline">
<sonic-icon library="lucide" name="album" size="lg"></sonic-icon>
<br />
<div class="text-xs mt-1">lucide</div>
</sonic-link>
</div>
Custom library
Use library="custom" with SVG files on your origin. On an ancestor (for example sonic-scope or sonic-code), set customIconLibraryPath to a URL template with $prefix and $name placeholders, and optionally customIconDefaultPrefix when prefix is omitted.
<sonic-scope
customIconLibraryPath="/svg/$prefix/$name.svg"
customIconDefaultPrefix="regular"
>
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-8">
<div class="text-center">
<sonic-icon library="custom" prefix="regular" name="plane"></sonic-icon>
<br />
<div class="text-xs mt-1">regular</div>
</div>
<div class="text-center">
<sonic-icon library="custom" prefix="solid" name="plane"></sonic-icon>
<br />
<div class="text-xs mt-1">solid</div>
</div>
<div class="text-center">
<sonic-icon library="custom" name="plane"></sonic-icon>
<br />
<div class="text-xs mt-1">default prefix</div>
</div>
</div>
</sonic-scope>
Size
Omit size for the default scale (1em height, inherited from the font size). Steps go from 2xs to 3xl.
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-8">
<div class="text-center">
<sonic-icon library="heroicons" prefix="outline" name="academic-cap" size="2xs"></sonic-icon>
<br />
<div class="text-xs mt-1">2xs</div>
</div>
<div class="text-center">
<sonic-icon library="heroicons" prefix="outline" name="academic-cap" size="xs"></sonic-icon>
<br />
<div class="text-xs mt-1">xs</div>
</div>
<div class="text-center">
<sonic-icon library="heroicons" prefix="outline" name="academic-cap" size="sm"></sonic-icon>
<br />
<div class="text-xs mt-1">sm</div>
</div>
<div class="text-center">
<sonic-icon library="heroicons" prefix="outline" name="academic-cap"></sonic-icon>
<br />
<div class="text-xs mt-1">default</div>
</div>
<div class="text-center">
<sonic-icon library="heroicons" prefix="outline" name="academic-cap" size="lg"></sonic-icon>
<br />
<div class="text-xs mt-1">lg</div>
</div>
<div class="text-center">
<sonic-icon library="heroicons" prefix="outline" name="academic-cap" size="xl"></sonic-icon>
<br />
<div class="text-xs mt-1">xl</div>
</div>
<div class="text-center">
<sonic-icon library="heroicons" prefix="outline" name="academic-cap" size="2xl"></sonic-icon>
<br />
<div class="text-xs mt-1">2xl</div>
</div>
<div class="text-center">
<sonic-icon library="heroicons" prefix="outline" name="academic-cap" size="3xl"></sonic-icon>
<br />
<div class="text-xs mt-1">3xl</div>
</div>
</div>
Accessibility
On connect, the host sets aria-hidden="true". Treat icons as decorative unless the surrounding control already has an accessible name. Do not rely on sonic-icon alone for meaning—use visible text or aria-label on the parent button / link.
<sonic-button type="neutral" variant="outline" shape="circle" aria-label="Flight details">
<sonic-icon library="iconoir" name="airplane"></sonic-icon>
</sonic-button>
API reference
| Attribute | Values | Description |
|---|---|---|
name |
string | Icon id in the core bundle or in the remote library |
library |
heroicons · iconoir · feathers · lucide · material · fontAwesome · custom |
CDN or custom template; omit for bundled core icons |
prefix |
string | Library-specific variant; defaults per library when empty |
size |
2xs · xs · sm · lg · xl · 2xl · 3xl (default 1em, no attribute) |
em-based SVG scale on the host |
Ancestor attributes (for library="custom" only): customIconLibraryPath (URL template with $prefix and $name) and customIconDefaultPrefix. May be set on sonic-scope, theme roots, or globally in the document.
No slots — the component inlines fetched or bundled SVG markup.