Skip to content

Releases: adobe/spectrum-css

@spectrum-css/[email protected]

17 Oct 18:13
024f71d

Choose a tag to compare

Pre-release

Patch Changes

Updated dependencies []:

@spectrum-css/[email protected]

17 Oct 18:13
024f71d

Choose a tag to compare

Pre-release

Patch Changes

📝 #4085 082862e Thanks @castastrophe!

Action menu component (now with custom styles!)

Introduces @spectrum-css/actionmenu, a composition of ActionButton, Popover, and Menu to present action lists from a trigger. Now with custom styles!

  • Adds wrapper classes: spectrum-ActionMenu, spectrum-ActionMenu-trigger, spectrum-ActionMenu-popover, and spectrum-ActionMenu-menu.
  • Supports long press triggers and four placements (start/end, top/bottom) via the underlying popover API.
  • Design reference: Figma S2 token specs.

Migration notes

  • If you previously composed an action menu manually (action button + popover + menu), you can adopt the new wrapper classes without changing the underlying markup semantics. Ensure the trigger has aria-haspopup="menu" and manages aria-expanded according to your application logic.
  • For spacing customizations previously done with ad‑hoc margins, switch to the new --spectrum-actionmenu-button-to-menu-gap custom property.

Example markup:

<div class="spectrum-ActionMenu">
	<button
		class="spectrum-ActionMenu-trigger spectrum-ActionButton"
		aria-haspopup="menu"
		aria-expanded="false"
	>
		<!-- icon/label -->
	</button>
	<div class="spectrum-ActionMenu-popover spectrum-Popover">
		<ul class="spectrum-ActionMenu-menu spectrum-Menu">
			<!-- menu items -->
		</ul>
	</div>
	<!-- popover positioning/visibility is owned by your implementation -->
	<!-- use long-press behavior when appropriate to your UX -->
	<!-- use Popover placement options: bottom-start, bottom-end, start-top, end-top -->
</div>

Menu refinements

Updates @spectrum-css/menu styles to align with latest Spectrum 2 design specifications and improve accessibility.

  • Updated .is-selectableMultiple .spectrum-Menu-itemCheckbox to .is-selectableMultiple:not(:has(.is-selectable)) .spectrum-Menu-itemCheckbox to prevent clash with the .is-selectable placement.
  • Non-breaking; no class or DOM changes required.

Action button refinements

  • Selection styling now applies when components use ARIA pressed/expanded semantics, not just .is-selected.
  • Implemented with :where() to keep selector specificity low and prevent downstream specificity battles.
  • Non-breaking; no class changes required.

Action group refinements

Aligns selection behavior of grouped items with action button updates.

  • Adds :where([aria-pressed="true"], [aria-expanded="true"]) alongside .is-selected on items to cover more accessibility use-cases while keeping specificity low.
  • Non-breaking; no class changes required.

@spectrum-css/[email protected]

17 Oct 18:12
024f71d

Choose a tag to compare

Pre-release

Patch Changes

Updated dependencies [082862e]:

@spectrum-css/[email protected]

17 Oct 18:13
024f71d

Choose a tag to compare

Pre-release

Major Changes

📝 #4085 082862e Thanks @castastrophe!

Action menu component (now with custom styles!)

Introduces @spectrum-css/actionmenu, a composition of ActionButton, Popover, and Menu to present action lists from a trigger. Now with custom styles!

  • Adds wrapper classes: spectrum-ActionMenu, spectrum-ActionMenu-trigger, spectrum-ActionMenu-popover, and spectrum-ActionMenu-menu.
  • Supports long press triggers and four placements (start/end, top/bottom) via the underlying popover API.
  • Design reference: Figma S2 token specs.

Migration notes

  • If you previously composed an action menu manually (action button + popover + menu), you can adopt the new wrapper classes without changing the underlying markup semantics. Ensure the trigger has aria-haspopup="menu" and manages aria-expanded according to your application logic.
  • For spacing customizations previously done with ad‑hoc margins, switch to the new --spectrum-actionmenu-button-to-menu-gap custom property.

Example markup:

<div class="spectrum-ActionMenu">
	<button
		class="spectrum-ActionMenu-trigger spectrum-ActionButton"
		aria-haspopup="menu"
		aria-expanded="false"
	>
		<!-- icon/label -->
	</button>
	<div class="spectrum-ActionMenu-popover spectrum-Popover">
		<ul class="spectrum-ActionMenu-menu spectrum-Menu">
			<!-- menu items -->
		</ul>
	</div>
	<!-- popover positioning/visibility is owned by your implementation -->
	<!-- use long-press behavior when appropriate to your UX -->
	<!-- use Popover placement options: bottom-start, bottom-end, start-top, end-top -->
</div>

Menu refinements

Updates @spectrum-css/menu styles to align with latest Spectrum 2 design specifications and improve accessibility.

  • Updated .is-selectableMultiple .spectrum-Menu-itemCheckbox to .is-selectableMultiple:not(:has(.is-selectable)) .spectrum-Menu-itemCheckbox to prevent clash with the .is-selectable placement.
  • Non-breaking; no class or DOM changes required.

Action button refinements

  • Selection styling now applies when components use ARIA pressed/expanded semantics, not just .is-selected.
  • Implemented with :where() to keep selector specificity low and prevent downstream specificity battles.
  • Non-breaking; no class changes required.

Action group refinements

Aligns selection behavior of grouped items with action button updates.

  • Adds :where([aria-pressed="true"], [aria-expanded="true"]) alongside .is-selected on items to cover more accessibility use-cases while keeping specificity low.
  • Non-breaking; no class changes required.

@spectrum-css/[email protected]

17 Oct 18:13
024f71d

Choose a tag to compare

Pre-release

Patch Changes

📝 #4085 082862e Thanks @castastrophe!

Action menu component (now with custom styles!)

Introduces @spectrum-css/actionmenu, a composition of ActionButton, Popover, and Menu to present action lists from a trigger. Now with custom styles!

  • Adds wrapper classes: spectrum-ActionMenu, spectrum-ActionMenu-trigger, spectrum-ActionMenu-popover, and spectrum-ActionMenu-menu.
  • Supports long press triggers and four placements (start/end, top/bottom) via the underlying popover API.
  • Design reference: Figma S2 token specs.

Migration notes

  • If you previously composed an action menu manually (action button + popover + menu), you can adopt the new wrapper classes without changing the underlying markup semantics. Ensure the trigger has aria-haspopup="menu" and manages aria-expanded according to your application logic.
  • For spacing customizations previously done with ad‑hoc margins, switch to the new --spectrum-actionmenu-button-to-menu-gap custom property.

Example markup:

<div class="spectrum-ActionMenu">
	<button
		class="spectrum-ActionMenu-trigger spectrum-ActionButton"
		aria-haspopup="menu"
		aria-expanded="false"
	>
		<!-- icon/label -->
	</button>
	<div class="spectrum-ActionMenu-popover spectrum-Popover">
		<ul class="spectrum-ActionMenu-menu spectrum-Menu">
			<!-- menu items -->
		</ul>
	</div>
	<!-- popover positioning/visibility is owned by your implementation -->
	<!-- use long-press behavior when appropriate to your UX -->
	<!-- use Popover placement options: bottom-start, bottom-end, start-top, end-top -->
</div>

Menu refinements

Updates @spectrum-css/menu styles to align with latest Spectrum 2 design specifications and improve accessibility.

  • Updated .is-selectableMultiple .spectrum-Menu-itemCheckbox to .is-selectableMultiple:not(:has(.is-selectable)) .spectrum-Menu-itemCheckbox to prevent clash with the .is-selectable placement.
  • Non-breaking; no class or DOM changes required.

Action button refinements

  • Selection styling now applies when components use ARIA pressed/expanded semantics, not just .is-selected.
  • Implemented with :where() to keep selector specificity low and prevent downstream specificity battles.
  • Non-breaking; no class changes required.

Action group refinements

Aligns selection behavior of grouped items with action button updates.

  • Adds :where([aria-pressed="true"], [aria-expanded="true"]) alongside .is-selected on items to cover more accessibility use-cases while keeping specificity low.
  • Non-breaking; no class changes required.

@spectrum-css/[email protected]

17 Oct 18:13
024f71d

Choose a tag to compare

Pre-release

Minor Changes

📝 #4085 082862e Thanks @castastrophe!

Action menu component (now with custom styles!)

Introduces @spectrum-css/actionmenu, a composition of ActionButton, Popover, and Menu to present action lists from a trigger. Now with custom styles!

  • Adds wrapper classes: spectrum-ActionMenu, spectrum-ActionMenu-trigger, spectrum-ActionMenu-popover, and spectrum-ActionMenu-menu.
  • Supports long press triggers and four placements (start/end, top/bottom) via the underlying popover API.
  • Design reference: Figma S2 token specs.

Migration notes

  • If you previously composed an action menu manually (action button + popover + menu), you can adopt the new wrapper classes without changing the underlying markup semantics. Ensure the trigger has aria-haspopup="menu" and manages aria-expanded according to your application logic.
  • For spacing customizations previously done with ad‑hoc margins, switch to the new --spectrum-actionmenu-button-to-menu-gap custom property.

Example markup:

<div class="spectrum-ActionMenu">
	<button
		class="spectrum-ActionMenu-trigger spectrum-ActionButton"
		aria-haspopup="menu"
		aria-expanded="false"
	>
		<!-- icon/label -->
	</button>
	<div class="spectrum-ActionMenu-popover spectrum-Popover">
		<ul class="spectrum-ActionMenu-menu spectrum-Menu">
			<!-- menu items -->
		</ul>
	</div>
	<!-- popover positioning/visibility is owned by your implementation -->
	<!-- use long-press behavior when appropriate to your UX -->
	<!-- use Popover placement options: bottom-start, bottom-end, start-top, end-top -->
</div>

Menu refinements

Updates @spectrum-css/menu styles to align with latest Spectrum 2 design specifications and improve accessibility.

  • Updated .is-selectableMultiple .spectrum-Menu-itemCheckbox to .is-selectableMultiple:not(:has(.is-selectable)) .spectrum-Menu-itemCheckbox to prevent clash with the .is-selectable placement.
  • Non-breaking; no class or DOM changes required.

Action button refinements

  • Selection styling now applies when components use ARIA pressed/expanded semantics, not just .is-selected.
  • Implemented with :where() to keep selector specificity low and prevent downstream specificity battles.
  • Non-breaking; no class changes required.

Action group refinements

Aligns selection behavior of grouped items with action button updates.

  • Adds :where([aria-pressed="true"], [aria-expanded="true"]) alongside .is-selected on items to cover more accessibility use-cases while keeping specificity low.
  • Non-breaking; no class changes required.

@spectrum-css/[email protected]

16 Oct 17:40
41f4173

Choose a tag to compare

Pre-release

Patch Changes

Updated dependencies []:

@spectrum-css/[email protected]

16 Oct 17:41
41f4173

Choose a tag to compare

Pre-release

Patch Changes

Updated dependencies [9629fe3]:

@spectrum-css/[email protected]

16 Oct 17:40
41f4173

Choose a tag to compare

Pre-release

Major Changes

📝 #4249 9629fe3 Thanks @castastrophe!

This update removes --mod-* custom property hooks per SWC-1264, see also the RFC for extensible styling.

  • Remove all --mod-* custom property hooks.
  • Keep existing class selectors and variants unchanged.
  • Update stories to reflect the removal of the --mod-* override layer.

Breaking change: the --mod-* override layer is removed. Consumers should set --spectrum-* variables directly where customization is needed.

@spectrum-css/[email protected]

16 Oct 17:41
41f4173

Choose a tag to compare

Pre-release

Major Changes

📝 #4249 9629fe3 Thanks @castastrophe!

This update removes --mod-* custom property hooks per SWC-1264, see also the RFC for extensible styling.

  • Remove all --mod-* custom property hooks.
  • Keep existing class selectors and variants unchanged.
  • Update stories to reflect the removal of the --mod-* override layer.

Breaking change: the --mod-* override layer is removed. Consumers should set --spectrum-* variables directly where customization is needed.