Components · Text & content
Icon tile
An icon set in a tinted, rounded tile — the visual lead for an empty state, a feature row, or a menu entry. It defaults to the Primary tint, with a colour set spanning the palette and semantic roles. Three sizes: 32 / 40 / 56px.
Preview
Build with the skill
No package to install — hand this to your AI to generate or migrate the component in your stack.
Apply the Zetta "Icon tile" component to this project using the zetta-design-md skill.
WHEN TO USE
- Migrating or fixing existing code (the common case): audit the current implementation against the `icon-tile` spec (variants: primary, brand, info, ai, success, warning, danger, neutral) and CORRECT every deviation — replace off-spec values, don't only add new ones.
- New component: build it to the `icon-tile` spec in this project's stack.
AUDIT & FIX (when the component already exists)
Compare it to the skill's spec and fix, don't just append: hardcoded colors/hex, off-scale radius, wrong fonts, dark/navy fills, shadows used in place of borders (or missing borders), brand lime used as a CTA or interaction (must be primary indigo), and any missing or wrong hover / focus / active / disabled / invalid state or missing 2px focus ring. Replace each with the correct Zetta token.
ALWAYS
- Pull the authoritative spec and tokens from the skill — never guess or hardcode values.
- Use this project's own component conventions and framework idioms.
- Honor the Zetta guardrails (brand = identity only, primary = interaction, shadows for overlays) and verify in Light, Dark, and Accessibility. Anatomy & rules
╭──────╮
│ ★ │ ← icon-tile-md (40×40px, primary-bg, primary icon)
╰──────╯
| State | Visual |
|---|---|
| Default | Icon in rounded container, semantic fill |
| Interactive hover | {colors.surface-muted} overlay on container |
| Interactive focus | 2px solid {colors.border-focus} outline |
When to use
- Feature or module identifier in a card header or list row.
- Empty state illustration (use
lgwith a descriptive heading). - App or integration shortcut in a grid.
When not to use
- As an interactive button — use Icon Button.
- When the icon is the sole communicator of status — pair with a text label.
Do
- Match color variant to the semantic meaning (danger for error states, success for completion).
- Use
lgfor empty states,mdfor card headers,smfor dense list rows.
Don't
- Don't stack icon tiles without a label — provide adjacent text describing the feature.
- Icon tile carries no text — the adjacent label provides context. Never use icon tile as the sole description of an entity.
- For empty state use: choose an icon that metaphorically represents the absent content (e.g.
table_chartfor missing table data,cloud_offfor connectivity errors). - Match color variant to semantic meaning —
dangerfor error tiles,successfor completion tiles,neutralfor inactive or unavailable entities.
Keyboard
Icon Tile is decorative by default and has no keyboard behavior. When used as an interactive element, wrap it in a <button> — keyboard behavior then follows the standard button spec.
Accessibility
- Icon tile is always decorative — add
aria-hidden="true"on the tile container. - The adjacent text label carries the accessible meaning.
Spec
Values and token references resolved straight from the Zetta spec.
icon-tile-sm
- width
- 32px
- height
- 32px
- borderRadius
- {rounded.base}
- backgroundColor
- {colors.primary-bg}
- iconSize
- {icons.sizeMap.md}
- iconColor
- {colors.primary}
- display
- flex
- alignItems
- center
- justifyContent
- center
icon-tile-md
- width
- 40px
- height
- 40px
- borderRadius
- {rounded.base}
- backgroundColor
- {colors.primary-bg}
- iconSize
- {icons.sizeMap.lg}
- iconColor
- {colors.primary}
- display
- flex
- alignItems
- center
- justifyContent
- center
icon-tile-lg
- width
- 56px
- height
- 56px
- borderRadius
- {rounded.base}
- backgroundColor
- {colors.primary-bg}
- iconSize
- {icons.sizeMap.xl}
- iconColor
- {colors.primary}
- display
- flex
- alignItems
- center
- justifyContent
- center
icon-tile-brand
- backgroundColor
- {colors.brand-bg}
- iconColor
- {colors.brand}
icon-tile-info
- backgroundColor
- {colors.info-bg}
- iconColor
- {colors.info}
icon-tile-ai
- backgroundColor
- {colors.ai-bg}
- iconColor
- {colors.ai}
icon-tile-success
- backgroundColor
- {colors.success-bg}
- iconColor
- {colors.success}
icon-tile-warning
- backgroundColor
- {colors.warning-bg}
- iconColor
- {colors.warning}
icon-tile-danger
- backgroundColor
- {colors.danger-bg}
- iconColor
- {colors.danger}
icon-tile-neutral
- backgroundColor
- {colors.surface-muted}
- iconColor
- {colors.muted}
Known gaps
- Interactive icon tile (clickable tile as a navigation shortcut) — hover/focus/active states not yet specified. Use
button-iconas a fallback. - Custom icon tile shape (circle, full-radius pill) — only
{rounded.base}is currently defined.