Selectable Chips
Interactive selectable tags with colored dot indicators
Size
Material
State
4K
1080p
720p
<div class="flex-row" style="gap:6px">
<div class="chip active"><span class="chip-dot" style="background:var(--blue-info)"></span>4K</div>
<div class="chip">1080p</div>
<div class="chip">720p</div>
</div> .chip {
display: inline-flex; align-items: center; gap: 4px;
padding: 4px 10px; border-radius: var(--radius-pill);
font-family: var(--font-ui); font-size: 9px; font-weight: 500;
letter-spacing: 1px; background: var(--bg-surface);
border: 1px solid var(--border-subtle); color: var(--text-secondary);
cursor: pointer; transition: all 0.15s;
}
.chip:hover { border-color: var(--border-mid); }
.chip.active { background: rgba(68,119,204,0.1); border-color: var(--blue-info); color: var(--blue-info); }
.chip .chip-dot { width: 6px; height: 6px; border-radius: 50%; display: inline-block; } API
| Class | Type | Description |
|---|---|---|
.chip | Base | Primary component class |
.default | Size | Extra large variant |
.active | State | Active state |
Design Notes
Physical Analog
Reference devices: iPod genre/playlist tags, camera filter selectors. Mechanism: Interactive chip elements that the user can toggle to filter or select options. Distinguished from status chips (J1) by being interactive. The pill shape with optional colored dot comes from the physical form factor of panel-mounted indicator LEDs with silk-screened labels.
Geometry
| Property | Value |
|---|---|
| Padding | 4px 10px |
| Border radius | --radius-pill (100px) |
| Font size | 9px |
| Letter spacing | 1px |
| Dot size | 6x6px |
| Dot-label gap | 4px |
CSS Recipe
Default state
.chip {
display: inline-flex; align-items: center; gap: 4px;
padding: 4px 10px; border-radius: var(--radius-pill);
font-family: var(--font-ui); font-size: 9px; font-weight: 500;
letter-spacing: 1px; background: var(--bg-surface);
border: 1px solid var(--border-subtle); color: var(--text-secondary);
cursor: pointer; transition: all 0.15s;
}
Hover
.chip:hover { border-color: var(--border-mid); }
Active (selected)
.chip.active { background: rgba(68,119,204,0.1); border-color: var(--blue-info); color: var(--blue-info); }
Dot indicator (.chip-dot)
.chip .chip-dot { width: 6px; height: 6px; border-radius: 50%; display: inline-block; }
HTML Structure
<div class="flex-row" style="gap:6px">
<div class="chip active"><span class="chip-dot" style="background:var(--blue-info)"></span>4K</div>
<div class="chip">1080p</div>
<div class="chip">720p</div>
</div>
Size Variants
No size variants defined.
Material Variants
No material variants. Uses surface background with subtle border.
Theme Behavior
- Background swaps via
--bg-surface - Border swaps via
--border-subtle - Active state uses blue with blue-tinted background (constant across themes)
- Dot color is set inline or via accent color classes
Constraints
- MUST use pill border-radius (
--radius-pill, 100px) -- distinguishes from status chips - Active state MUST use
--blue-info(not amber like status chips) - Active background MUST be semi-transparent blue (10% opacity)
- MUST be interactive (cursor pointer, hover state)
- Optional dot indicator MUST be 6x6px circle
- Multiple chips CAN be active simultaneously (multi-select, unlike segmented control)
Accessibility
- Each chip should be a
<button>or haverole="checkbox"/role="option" - Active state:
aria-pressed="true"(for toggle) oraria-selected="true"(for selection) - If used as filter group, container should have
role="group"witharia-label - Support Space/Enter to toggle
♿
Accessibility
- Element
- Use semantic HTML with appropriate ARIA roles
- Keyboard
- Follow WAI-ARIA patterns for this control type
- Focus
-
Visible focus indicator required. Use native browser focus ring or custom
:focus-visiblestyles.