AhaSlides Design
v0.52.0React · Vue · Lit

Components · General

Icon

One glyph set, called by name — 259 icons imported from Figma, rendered by the shared <aha-icon>, never inline SVG.

Examples

Size
Glyph
Smart widget · one live <aha-icon> — the Size / Glyph controls below drive it
Size scale · 12 · 16 · 24 · 32 (the only sanctioned sizes)
12
16
24
32
The set · one system-* outline family — call any glyph by name
State · outline = neutral, filled = active
outline
filled
Active/“on” state = the dedicated -filled asset — a solid glyph survives greyscale, so state never rides on colour alone.
Colour · inherits currentColor / semantic token
Icon + text · match cap height, 4px gap, leading side
Search results This field is required
Beyond system-* · slide-type & file-type families
Every glyph is called by name from the shared registry — icons imported from Figma Design System V3, no inline SVG at the call site. Browse and copy any name in the Icon library →. Size derives the paired stroke; colour follows currentColor; icon-only buttons carry an aria-label.

API

PropTypeDefaultNotes
namestringRegistry glyph name, e.g. system-bell, slidetype-poll, filetype-course
size12 | 16 | 24 | 3224On-grid pixel size; the master stroke scales with it
labelstringAccessible name (role=img). Omit for a decorative icon
decorativebooleanfalsearia-hidden — for an icon that only repeats adjacent text

Install

# .npmrc — once: point the @ahaslides-product scope at GitHub Packages
@ahaslides-product:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}   # a GitHub token with read:packages

npm i @ahaslides-product/design
import '@ahaslides-product/design/tokens.css';   // once, at the app root
import '@ahaslides-product/design/icons';   // registers <aha-icon>

Agent feed for this component (absolute, fetchable anywhere): icon.agent.json · icon.md · icon.llms.txt

When to use

When to use
  • system-* glyph — the default for all product-UI chrome, buttons, menus, list rows, status
  • -filled asset — a selected/active/on state — e.g. system-bookmark-simple-filled; a solid glyph survives greyscale
  • slide-type / file-type — labelling a slide kind or a file kind; file-type glyphs keep their baked brand colour
Call by name from the registry — never inline an <svg>, never pull a second icon set (Lucide/Heroicons/FontAwesome/@ant-design/icons). Off-grid sizes (no 20px) aren't supported. Icon-only buttons need an aria-label (and a tooltip when the meaning isn't obvious). If a glyph is genuinely missing, add the SVG under icons/svg and re-run build-icons.mjs.
Surfaces
editor dashboard settings audience

Spec

Set 259 glyphs · system · slide-type · file-type · Source Figma Design System V3 · node 50699-7126 · Sizes 12 · 16 · 24 · 32 (only) · Colour currentColor / semantic token (254 recolorable) · State outline = neutral · -filled asset = active