Handoff: Agentic Menu Button
What and why
A menu of actions the agent does. It is the PDS MenuButton with the trigger fixed: the Agentic Button (the secondary look with the AI gradient border) in label mode, and an Icon Button with variant='agentic' when iconOnly. It is a separate component (decided 2026-10-21), not an isAgentic option of the MenuButton, which went back to plain PDS (keeping its own isSelected). It has no variant: there is one look.
- Figma / Jira: none. Source: the designer's decision in design review.
- Context:
context.md
Exploration and decisions
- A copy of the Menu Button component with a fixed trigger, not a wrapper: wrapping would need the Menu Button to take a custom trigger, which is a new prop on it. It reuses the Menu Button's CSS and
NavAccordion, and adds the classpds-agentic-menu-buttonto the root. variantandisAgenticremoved. Thenavbar,subtleandreverse-secondarytriggers have no agentic look and are out of scope.- Icon-only open state: a small CSS override (
agentic-menu-button.css) so the open state still shows a fill on top of the gradient border. - Used by Labeled Divider: its selector uses this for the agentic tones and the plain MenuButton for
neutral.
Full list: decisions.md.
API
The Menu Button props (menuItems, label, iconOnly, iconName, size, tally, statusDot, disabled, placement, onClick, onOpenChange, isMobileAccordion, undefinedLabel, testId, id, ...) except variant and isAgentic. See the Menu Button handoff.
Variants and states: label and icon-only triggers; sizes xs, s, m; with tally and status dot (label mode); disabled; open. Stories: Default, Icon Only, With Tally, With Status Dot.
Tokens used
--pds-color-button-secondary-background-active(the icon-only open state)--pds-z-index-dropdown
The rest is the Menu Button's, the Agentic Button's and the Icon Button's.
Impact
From impact.md: no existing PDS component is reached. One opt-in rule targets the agentic Icon Button's open state. Proposals that build on it: LabeledDivider (its agentic selector).
Reused vs net-new
- Reused: the Menu Button's markup, CSS and
NavAccordion; the package'suseDropdown,useIsMobile,Icon,Tally; the local AgenticButton and IconButton (variant='agentic'). - Net-new:
.pds-agentic-menu-button, and the props ofAgenticMenuButtonProps. Seecustom.md(one custom variable, no raw values).
Accessibility
- Unchanged from the Menu Button:
aria-haspopup,aria-expanded, the listbox menu, keyboard navigation, typeahead and focus handling; the icon-only trigger has an accessible name. - The gradient border is decorative.
- The a11y panel has not been run, and light and dark were not checked by eye in a session.
Decisions and open questions
- The copy repeats the Menu Button's logic (about 850 lines). Should the port instead let the Menu Button take a trigger, with the agentic menu a thin wrapper?
- Should the agentic menu offer the mobile accordion? It is copied as is.
Port notes
- New component. Port AgenticButton, IconButton (with its
agenticvariant) first; it builds on the published PDS Menu Button (the local base copy is inproposals/_base/MenuButton/, see its README: it imports its CSS andNavAccordion). Swap the local stand-ins for the real@libs/...imports.
Preview
npm run storybook, then Component Proposals/Buttons/Agentic Menu Button. Figma: none yet.