npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@spectrum-web-components/button

v1.12.1

Published

An `<sp-button>` represents an action a user can take. sp-buttons can be clicked or tapped to perform an action or to navigate to another page. Buttons in Spectrum have several variations for different uses and multiple levels of loudness for various atte

Downloads

157,555

Readme

Overview

An <sp-button> represents an action a user can take. sp-buttons can be clicked or tapped to perform an action or to navigate to another page. Buttons in Spectrum have several variations for different uses and multiple levels of loudness for various attention-getting needs.

Usage

See it on NPM! How big is this package in your project? Try it on Stackblitz

yarn add @spectrum-web-components/button

Import the side effectful registration of <sp-button> as follows:

import '@spectrum-web-components/button/sp-button.js';

When looking to leverage the Button base classes as a type and/or for extension purposes, do so via:

import { Button } from '@spectrum-web-components/button';

Anatomy

<sp-button>Try me</sp-button>

Content

<sp-button> elements can be provided a visible label, a label and an icon, or just an icon.

An icon is provided by placing an icon element in the icon slot.

If the button is icon-only, a non-visible label can be provided via the label attribute on an <sp-button> or on an <sp-icon*> element child to appropriately fulfill the accessibility contract of the button.

<sp-button variant="primary">Label only</sp-button>
<sp-button variant="primary">
  <sp-icon-help slot="icon"></sp-icon-help>
  Icon + Label
</sp-button>
<sp-button variant="primary">
  <svg
    slot="icon"
    viewBox="0 0 36 36"
    focusable="false"
    aria-hidden="true"
    role="img"
  >
    <path
      d="M16 36a4.407 4.407 0 0 0 4-4h-8a4.407 4.407 0 0 0 4 4zm9.143-24.615c0-3.437-3.206-4.891-7.143-5.268V3a1.079 1.079 0 0 0-1.143-1h-1.714A1.079 1.079 0 0 0 14 3v3.117c-3.937.377-7.143 1.831-7.143 5.268C6.857 26.8 2 26.111 2 28.154V30h28v-1.846C30 26 25.143 26.8 25.143 11.385z"
    ></path>
  </svg>
  SVG Icon + Label
</sp-button>
<sp-button variant="primary" icon-only label="Icon only">
  <sp-icon-help slot="icon"></sp-icon-help>
</sp-button>

Options

Sizes

<sp-button size="s">Small</sp-button>
<sp-button size="m">Medium</sp-button>
<sp-button size="l">Large</sp-button>
<sp-button size="xl">Extra Large</sp-button>

Variants

There are many button variants to choose from in Spectrum. The variant attribute defaults to accent, but also accepts the following value: accent, primary, secondary, negative. They display as follows:

<sp-button-group style="min-width: max-content">
  <sp-button variant="accent">Label only</sp-button>
  <sp-button variant="accent">
    <sp-icon-help slot="icon"></sp-icon-help>
    Icon + Label
  </sp-button>
  <sp-button variant="accent" label="Icon only" icon-only>
    <sp-icon-help slot="icon"></sp-icon-help>
  </sp-button>
</sp-button-group>
<sp-button-group style="min-width: max-content">
  <sp-button variant="primary">Label only</sp-button>
  <sp-button variant="primary">
    <sp-icon-help slot="icon"></sp-icon-help>
    Icon + Label
  </sp-button>
  <sp-button variant="primary" label="Icon only" icon-only>
    <sp-icon-help slot="icon"></sp-icon-help>
  </sp-button>
</sp-button-group>
<sp-button-group style="min-width: max-content">
  <sp-button variant="secondary">Label only</sp-button>
  <sp-button variant="secondary">
    <sp-icon-help slot="icon"></sp-icon-help>
    Icon + Label
  </sp-button>
  <sp-button variant="secondary" label="Icon only" icon-only>
    <sp-icon-help slot="icon"></sp-icon-help>
  </sp-button>
</sp-button-group>
<sp-button-group style="min-width: max-content">
  <sp-button variant="negative">Label only</sp-button>
  <sp-button variant="negative">
    <sp-icon-help slot="icon"></sp-icon-help>
    Icon + Label
  </sp-button>
  <sp-button variant="negative" label="Icon only" icon-only>
    <sp-icon-help slot="icon"></sp-icon-help>
  </sp-button>
</sp-button-group>

Treatment

The treatment attribute accepts fill and outline as values, and defaults to fill. These display as follows:

<sp-button-group style="min-width: max-content">
  <sp-button treatment="fill" variant="primary">Primary, Fill</sp-button>
  <sp-button treatment="fill" variant="secondary">Secondary, Fill</sp-button>
  <sp-button treatment="fill" variant="negative">Negative, Fill</sp-button>
</sp-button-group>
<sp-button-group style="min-width: max-content">
  <sp-button treatment="outline" variant="primary">Primary, Outline</sp-button>
  <sp-button treatment="outline" variant="secondary">
    Secondary, Outline
  </sp-button>
  <sp-button treatment="outline" variant="negative">
    Negative, Outline
  </sp-button>
</sp-button-group>
<sp-button-group
  style="background: var(--spectrum-docs-static-black-background-color); padding: 0.5em; min-width: max-content"
>
  <sp-button treatment="outline" static-color="black">Label only</sp-button>
  <sp-button treatment="outline" static-color="black">
    <sp-icon-help slot="icon"></sp-icon-help>
    Icon + Label
  </sp-button>
  <sp-button
    treatment="outline"
    static-color="black"
    label="Icon only"
    icon-only
  >
    <sp-icon-help slot="icon"></sp-icon-help>
  </sp-button>
</sp-button-group>
<sp-button-group
  style="background: var(--spectrum-docs-static-white-background-color); padding: 0.5em; min-width: max-content"
>
  <sp-button treatment="outline" static-color="white">Label only</sp-button>
  <sp-button treatment="outline" static-color="white">
    <sp-icon-help slot="icon"></sp-icon-help>
    Icon + Label
  </sp-button>
  <sp-button
    treatment="outline"
    static-color="white"
    label="Icon only"
    icon-only
  >
    <sp-icon-help slot="icon"></sp-icon-help>
  </sp-button>
</sp-button-group>

States

In addition to the variant, <sp-button> elements support two different visual states, disabled and pending, which can be applied by adding the attribute disabled or pending respectively. All <sp-button> variants support these states.

Disabled

While disabled, <sp-button> elements will not respond to click events and will appear faded.

<sp-button-group>
  <sp-button variant="primary">Normal</sp-button>
  <sp-button variant="primary" disabled>Disabled</sp-button>
</sp-button-group>

Pending

While in pending state, <sp-button> elements will not respond to click events and will appear faded with an indeterminate <sp-progress-circle>. The <sp-button> element's label and icon will be hidden while in pending state.

Note: The pending state of the <sp-button> element is applied after a 1s delay to avoid flashing the pending state for quick actions. You can override the delay by adding custom css var --pending-delay to your css.

<sp-button-group>
  <sp-button variant="primary">Normal</sp-button>
  <sp-button variant="primary" pending>Pending</sp-button>
</sp-button-group>

Behaviors

Handling events

Events handlers for clicks and other user actions can be registered on a <sp-button> as one would on a standard HTML <button> element.

<sp-button onclick="spAlert(this, '<sp-button> clicked!')">Click me</sp-button>

Link API deprecation

Deprecated: The href, target, download, referrerpolicy, and rel attributes on <sp-button> are deprecated and will be removed in a future release. Use a native HTML anchor (<a>) element with the spectrum-Button class instead.

Using <sp-button href="..."> conflates button and link semantics, which creates accessibility issues: screen reader users navigating by form controls will not find link-styled buttons, and vice versa. Native HTML elements provide correct semantics by default.

If you intend to create a link with a href attribute, we instead offer CSS classes for creating button-styled links. To migrate, import the global elements stylesheet and apply button classes to native <a> elements:

@import '@spectrum-web-components/styles/global-elements.css';

Before (deprecated):

<sp-button href="https://opensource.adobe.com/spectrum-web-components">
  Visit docs
</sp-button>

After (recommended):

<a
  class="spectrum-Button spectrum-Button--accent"
  href="https://opensource.adobe.com/spectrum-web-components"
>
  Visit docs
</a>

See the accessibility section for more details.

Autofocus

The autofocus attribute sets focus on the <sp-button> when the component mounts. This is useful for setting focus to a specific sp-button when a popover or dialog opens.

<sp-button id="trigger">Open</sp-button>
<sp-overlay trigger="trigger@click" placement="bottom">
  <sp-popover>
    <!-- Button will autofocus when open -->
    <sp-button autofocus>Confirm</sp-button>
  </sp-popover>
</sp-overlay>

Accessibility

Include a label

A button is required to have either a visible text label or a label attribute on either the <sp-button> itself or on an <sp-icon*> element child.

Don't override color

Do not use custom colors for buttons. The colors of different button variations have been designed to be consistent and accessible.

Use a static button-styled native link if including href

Deprecated: The href attribute and other link-related properties (target, download, referrerpolicy, rel) on <sp-button> are deprecated and will be removed in a future release.

You may use a native link with classes to style it like a button. Refer to the Storybook examples that include href for the appropriate classes to use.

For styles to be fully available to slotted links, you must include the stylesheet for @spectrum-web-components/styles/global-elements.css.

To successfully receive button styling, the link must be one of the following:

  • A direct child of <sp-theme>
  • A slotted child of a component within <sp-theme>

To allow button-styled native links in the shadow DOM of extended components, ensure their stylesheet also imports @spectrum-web-components/styles/global-elements.css.

Note: native button-styled links do not support disabled or pending states.

<!--
 Include in your own application stylesheet and extended component styles:
 @import '@spectrum-web-components/styles/global-elements.css';
 -->

<a
  class="spectrum-Button spectrum-Button--accent"
  href="https://github.com/adobe/spectrum-web-components"
>
  Accent link button
</a>
<a
  class="spectrum-Button spectrum-Button--secondary spectrum-Button--outline"
  href="https://github.com/adobe/spectrum-web-components"
>
  <!-- Use icon components and continue to define slot="icon" for the best styling support -->
  <sp-icon-help slot="icon"></sp-icon-help>
  Secondary outline link button
</a>

Don't mix href and non-href buttons in a set of buttons

A screen reader user will not encounter href buttons when navigating by buttons or form controls. While they can both be used in the same page, problems could occur if mixing the types in close proximity to each other.

Use static black or static white to contrast with backgrounds and images

To ensure maximum contrast with the background, use static black for light backgrounds and images, and static white for dark backgrounds and images. Avoid placing static components on top of busy images with a lot of variance in contrast.

Contrast requirement: When using treatment="outline" with static-color, the button's text, icons, and border must maintain a minimum 3:1 contrast ratio against the background per WCAG 1.4.11 Non-text Contrast. Choose background colors carefully to meet this threshold. For example, --spectrum-seafoam-600 provides only 2.5:1 contrast with white, which fails the requirement.

<div
  style="background-color: var(--spectrum-docs-static-black-background-color); padding: 20px"
>
  <sp-button static-color="black">Click me</sp-button>
  <sp-button static-color="black" treatment="outline">Click me</sp-button>
</div>
<div
  style="background-color: var(--spectrum-docs-static-white-background-color); padding: 20px"
>
  <sp-button static-color="white">Click me</sp-button>
  <sp-button static-color="white" treatment="outline">Click me</sp-button>
</div>

Clearly state the action

Make sure that a button’s label clearly states the outcome of the action. Use the same word or phrase as found elsewhere in the experience.