← Back to Component Index

Component Naming Alignment Report

Findings comparing our component names against the Figma reference and industry conventions. For review — no changes applied. Goal: agree on a naming convention before the component library is implemented.

Sources: spec docs · figma-component-specs.json · Figma node 4099:5230 Date: 2026-06-04 Status: Draft for review
✓ Decisions made & adopted.

This report is the analysis that led to the decisions. The adopted naming and rationale are recorded in the Component Decisions Record. Renames have been applied across the docs.

9
Our components
3
Names aligned as-is
4
Partial / worth revisiting
2
Naming risks (rename advised)
Headline:

Figma names components by size/shape (card-lg, card-md, card-sm, card-btn) — a designer's presentation vocabulary, not a semantic one. Our names are a mix of semantic (Hero, Text), size (Small), and generic (Card). Neither set is internally consistent. The two highest-value fixes: (1) rename Slider Card → Carousel (the word "slider" means a range input in industry UI vocabulary), and (2) stop suffixing container components ("Slider", "Stack") with "Card" — they hold cards, they aren't cards.

1. Master Mapping — Our Name vs Figma vs Industry

Our Component ViewModel Figma Component Industry-Conventional Term Alignment
Card (base) CardViewModel card-lg Card / Content Card Aligned
Hero Card HeroCardViewModel card-lg (shared) · mobile hero Hero Card / Feature Card Aligned
Text Card TextCardViewModel card-md Text Card / Content Tile Aligned
Small Card SmallCardViewModel card-sm List Row / List Item / Nav Tile Size-based
Button Card ButtonCardViewModel card-btn (shared) · button-sm Button / Action Button Conflated
Icon Button Card IconButtonCardViewModel card-btn (shared) Icon Button / Icon Tile Shared key
Multi Button Card MultiButtonCardViewModel 3 × card-btn (shared) · button-sm Button Group / Action Grid / Segmented Non-standard
Slider Card SliderCardViewModel slider · horizontal scrolling feed · section title Carousel / Horizontal Scroll Name collision
Stack Card StackCardViewModel listy card generic List / List View / Vertical Stack Container, not card

2. Key Findings

Finding 1 — "Slider" collides with the industry meaning of a range input

High priority

In mainstream UI vocabulary (HTML <input type="range">, Material, iOS, Figma's own component sets), "Slider" denotes a draggable value selector — volume, brightness, price range. Our "Slider Card" is a horizontally scrolling carousel of cards. A developer or designer reading "Slider" will expect the wrong control.

Figma's own naming here is also loose: the slider node is just the pagination-dot control, while the actual scroller is horizontal scrolling feed.

Recommendation:

Rename to Carousel (CarouselViewModel). It's the unambiguous industry term for a horizontally paged collection. Reserve "Slider" for any future range-input control.

Finding 2 — Container components are mis-labelled as "Cards"

Conceptual

Slider Card and Stack Card are not cards — they are layout containers that hold an Items collection of other cards. Naming a container "Card" is a category error that blurs the line between content and layout. Every other "Card" in the set is an actual content surface; these two are arrangement primitives.

Recommendation:

Drop the "Card" suffix on containers: Carousel (horizontal) and List or Stack (vertical). Keep "Card" only for components that render a single content surface.

Finding 3 — Figma names by size; we name by a mix of axes

Convention

Figma uses a size/shape suffix convention: card-lg, card-md, card-sm, card-btn, button-sm. That is a designer's layout vocabulary — it says nothing about purpose or data. Our names mix three axes:

  • Semantic / purpose: Hero, Text, Button
  • Size: Small (mirrors Figma's card-sm)
  • Generic: Card (the base)

Industry component libraries (Material, Fluent, Carbon, Polaris) name by function, not size — "ListItem", "Carousel", "Card", "Button" — and express size as a variant/prop (size="sm"), not a separate component.

Recommendation:

Adopt function-based names for the public component library and treat Figma's size suffixes as variant props. e.g. card-lg / card-md become one Card with a size variant, not two components.

Finding 4 — One Figma component maps to several of ours

Mapping

The mapping is many-to-one, which suggests our component count is higher than the design actually requires:

  • card-lgCard + Hero Card (2 of ours)
  • card-btnButton Card + Icon Button Card + Multi Button Card (3 of ours)

In Figma these are a single component (often with variants/properties). Our split into distinct ViewModels may be the right code decomposition, but the names should make the shared lineage obvious (e.g. a Button family with a layout variant), rather than reading as unrelated components.

Recommendation:

Model card-btn as a single Tile Button with variants (text, icon, group), and card-lg as a single Card with a hero variant — or, if kept separate, name them as an explicit family.

Finding 5 — "Multi Button Card" is non-standard

Terminology

No mainstream library uses "Multi Button Card". The pattern — a row of equal action tiles — is universally called a Button Group, Action Grid, or Segmented control. "Multi Button Card" also re-triggers the container-vs-card issue (it's a group of buttons, not a card).

Recommendation:

Rename to Button Group (or Action Grid if the layout is a grid rather than a single row).

Finding 6 — card-btn (tile) and button-sm (button) are conflated under "Button Card"

Precision

Figma has two distinct things our "Button Card" references: card-btn is a 116×106 tile (icon + title), while button-sm is a 151×36 filled button (the actual call-to-action, e.g. "Emergency Hotline" / "Member Number"). These are different controls with different affordances.

Recommendation:

Separate the concepts: Button (the button-sm filled CTA, e.g. Primary Button) vs Tile Button / Icon Tile (the card-btn square). Don't let one name cover both.

Finding 7 — "Small Card" mirrors Figma's size name rather than its function

Naming axis

card-sm is a home-screen navigation row (image + title + chevron/heart, tap-through to a destination). "Small Card" describes its size, not what it does. Industry would call this a List Row, List Item, or Navigation Tile.

Recommendation:

Consider List Row or Nav Tile. If the library keeps size-based names elsewhere, "Small Card" is acceptable but is the weakest semantic name in the set.

3. Proposed Naming Set (for discussion)

A function-based set that stays recognisable to both the design and engineering sides. Nothing here is applied — it's a strawman to react to.

Current NameProposed NameTypeRationalePriority
CardCardContent surfaceAlready conventional. Keep as the base.Keep
Hero CardHero CardContent surfaceIndustry-standard term for a featured card.Keep
Text CardText CardContent surfaceClear and conventional.Keep
Slider CardCarouselContainer (horizontal)Removes the range-input collision; standard term.Rename
Stack CardList (or Stack)Container (vertical)It's a vertical list container, not a card.Rename
Multi Button CardButton GroupControl groupUniversal name for a row of action tiles.Rename
Button CardButtonControl (CTA)Maps to button-sm filled button.Clarify
Icon Button CardIcon Tile (or Tile Button)Control (tile)Maps to card-btn square tile.Clarify
Small CardList Row (or Nav Tile)List itemNames by function, not size.Consider

4. Decisions Needed

  1. Naming axis: Commit to function-based names (recommended) or keep the current mixed set? This decision drives all the renames below.
  2. Slider → Carousel: Approve the rename? (Highest-confidence fix — low risk, removes a real ambiguity.)
  3. Container suffix: Drop "Card" from container components (Carousel, List), or keep "Card" for consistency with the rest of the set?
  4. Component count: Should card-btn's three uses (Button / Icon Button / Multi Button) collapse into one Button family with variants, or stay as separate ViewModels?
  5. Figma sync: Should we ask the designer to align Figma component names to the agreed set, so design and code share one vocabulary? (Figma's listy card generic, card-btn, etc. are informal.)

5. Addendum — Text Card Variant Naming (mobile context)

The Text Card has three layouts, named by their leading element. The small label above the title was initially called Eyebrow — an editorial/web term that reads as jargon. Reviewed against mobile conventions and our own property surface:

ElementFigmaWeb devMobile contextOur propertyAdopted
Small label above title eyebrow (frame) MUI / Material Web overline · common CSS class .eyebrow / .kicker · (editorial: eyebrow/kicker) Material 3 label typography role · MAUI Label control · (Material 2 "overline" is deprecated; iOS has no equivalent) Label (IsLabelVisible) Label
Primary heading title Heading (<h2>/<h3>) · MUI h6 / subtitle1 Title (universal) Title Title
Body text description / body Body (<p>) · MUI body1 / body2 Supporting text (Material) · Description Description Description
Resolved — prefer mobile context:

Renamed the Eyebrow variant/element to Label. It aligns with Material 3's label role and the MAUI Label control, and — decisively — it matches the existing Label property in our spec, so the variant name and the code stop diverging. The three variants (simplest → richest) are now Description · Title · Label, mapping to TextCardVariant { Description, Title, Label }. "Eyebrow" is retained only as the Figma layer name (provenance) and the --font-eyebrow-* token (its Figma token id is other/eyebrow).

6. Naming Axis — Web vs Mobile (provisional: Universal)

Where each adopted component name sits on the web↔mobile spectrum. Most are universal or web-leaning; almost none are mobile-specific. Decision (D9): keep universal naming for now — the platform direction (native MAUI/XAML vs Blazor/Razor) is unsettled (Blazor Hybrid work restarted in a separate branch, 2026-06-05). Universal names work under either stack with ~zero change; refactor only if a strict axis is later chosen.

ComponentWeb termMobile termSitsIf mobile axis →If web axis →
CardCard (Bootstrap/MUI)Card (Material/SwiftUI)UniversalCardCard
Hero CardHero / hero unitFeature / FeaturedWeb-leaningFeature CardHero Card
Text CardNeutralText CardText Card
Small Cardlist itemList item / cellNeutralList Item / CellSmall Card
ButtonButtonButtonUniversalButtonButton
Button GroupButton Group (Bootstrap/MUI)Segmented Button (M3) / Segmented Control (iOS)Web-leaningSegmented ControlButton Group
CarouselCarousel (Bootstrap/MUI)Carousel (M3) / Page Control (iOS)Web-leaningPage ControlCarousel
ListList (<ul>)List (UITableView)UniversalListList
Text Card label elemOverline (MUI)Label (M3 role)Label = bothLabelOverline?
Recommendation — Universal (provisional):

The current set is already universal or web-leaning, so "universal for now" requires essentially no change. A strict mobile axis would force the most renames (Hero, Button Group, Carousel) for little gain; a strict web axis fits the Blazor/Razor signal but is premature while the direction is unsettled. Hold universal; refactor the few platform-leaning names only if the direction settles to a strict axis. Recorded as D9 in the Component Decisions Record.