AhaSlides Design
v0.52.0React · Vue · Lit

Patterns · Settings

Add Item Button

The full-width "+ Add" affordance that sits under a settings list (OptionRow / QuestionList) — a dashed, tertiary add row that appends a new item.

Examples

Label
Disabled
Add row · under a settings list · full width
States · rest · disabled (at max count)

API

PropTypeDefaultNotes
labelstringAddThe add-affordance text; carries the accessible name
disabledbooleanfalseNon-interactive (e.g. at the max item count); muted, no hover, sets aria-disabled
addCustomEvent<{}>Composed event fired on click when enabled — the host appends a new item

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/aha-add-item-button';   // registers <aha-add-item-button>

Agent feed for this component (absolute, fetchable anywhere): add-item-button.agent.json · add-item-button.md · add-item-button.llms.txt

When to use

When to use
  • Add Item Button — append a new row to an editable settings list — options, questions, list items
  • Button (tertiary) — a standalone action that isn't 'add another row to this list'
Place it directly under the list it grows, full-width so it reads as part of the stack. Label it with the item noun — 'Add option', 'Add question' — not a bare 'Add' when the context needs it. Disable (don't hide) it at the max count so the ceiling stays discoverable; pair with a tooltip or helper line explaining the limit.
Surfaces
editor settings dashboard

Spec

Box full width (100%) · height 40 · radius 8 · padding 0 12 · Border 1px dashed #E3E3E3 (rest) · Content centered — system-plus 16px + label, 8px gap · Text Plus Jakarta 14/600, #4A4A4A (secondary) · Hover border + text → #6A1EBB, #F9F5FF fill (animated) · Focus #6A1EBB border + 2px soft ring · Disabled #B5B5B5 text, #EBEBEB border, not-allowed, no hover, aria-disabled