Handoff: IdentityBlock (agent)
What and why
The PDS v2 IdentityBlock with the Agent Avatar in place of the human Avatar, so the identity components (Agent Avatar, Avatar Label, Identity Block) can change together. Everything else is unchanged, so the port is a diff against src/components/identity/IdentityBlock on v2.x.
- Figma / Jira: none.
- Context:
context.md
Exploration and decisions
avatarPropsisOmit<AgentAvatarProps, 'ariaLabel' | 'linkContent' | 'size'>, solabelis required. Size ism, orswhenisSingleLine.- The human avatar is gone, with its image, per-user color and user fallback. For people, use the PDS Identity Block.
- Class names are unchanged (
pds-identity-block), so the package CSS also loads and the local file overrides by class name. - Added a
Collapsedstory, which v2 does not have. Sample content is Zappy with "Pantheon AI" as the secondary line. - Story-only controls (
avatarIconName,avatarHasHalo,avatarShape,avatarLabel) let a designer switch agents in the controls. They are not component props.
API
| Prop | Type | Default | Purpose |
|---|---|---|---|
avatarProps |
Omit<AgentAvatarProps, 'ariaLabel' | 'linkContent' | 'size'> |
none | Agent Avatar props. label is required. |
className |
string |
none | Additional class names. |
isSidebarCollapsed |
boolean |
false |
Show only the avatar. |
isSingleLine |
boolean |
false |
Smaller avatar with only the primary text. |
primaryText |
string |
none | First line (for example the agent's name). |
secondaryText |
string |
none | Second line. |
Variants and states: two lines, single line, collapsed.
Tokens used
--pds-color-foreground-default--pds-color-foreground-default-secondary--pds-spacing-5xs--pds-spacing-s--pds-typography-ff-default--pds-typography-fw-semibold--pds-typography-lh-xs--pds-typography-size-s--pds-typography-size-xs
Impact
impact.md finds nothing: this proposal adds no classes and changes no existing component. It depends on AgentAvatar.
Reused vs net-new
- Reused: the v2
IdentityBlockand the packageTooltip; the Agent Avatar proposal. - Net-new: nothing of its own. See
custom.md.
Accessibility
- The avatar's
labelis read by screen readers and says it is an agent. - Collapsed shows only the avatar, so the name stays reachable through the tooltip, as in v2.
- The a11y panel has not been run on these stories. Run it in light and dark before the port.
Decisions and open questions
- Should the secondary line be an
attribution-style prop, as in Avatar Label, or stay free text?
Port notes
- Edit
src/components/identity/IdentityBlockin place: swapAvatarforAgentAvatar. Port AgentAvatar first. - Swap the local
mergeClasses(from../_base/Button/utils) for the real one.
Preview
npm run storybook, then Component Proposals/Identity/Identity Block.
Figma: https://www.figma.com/design/AMGWJbraJoi2PKWnxo29Ah/PDS-Proposals?node-id=374-49, page Identity Block (3 stories, light only; captures of Storybook with library icons swapped in, sent 2026-10-20).