Skip to content

Person

The Person component renders governed people displays for attribution, contact listings, featured spotlights, and profile-card grids.

Component

Use fd-person when a Drupal Person node needs one of the approved display projections. The variant controls which fields render, how the person links, and whether a headshot is omitted, compact, standard, or featured.

When to use

  • Person view modes — use it as the implementation target for Byline, Contact, Contact Details, Contact with Image, Name and Title, Spotlight, and Profile Card displays.
  • People paragraph items — use it when editors choose a purpose-named Person variant rather than assembling fields manually.
  • Featured people — use spotlight for one highlighted person and profile-card for grids of comparable people.

When not to use

  • Do not use it for arbitrary staff biographies — long biographies, tabs, related content, and profile-page layout belong to a full Person detail page.
  • Do not create image-size variants — use semantic variants such as spotlight and profile-card; do not create a large-image-person treatment.
  • Do not use it as an editor-controlled field builder — each variant owns its field projection. Extra populated fields are ignored when a variant does not render them.

Examples

Person variants map Drupal Person displays to controlled field projections. View in Storybook →

Basic usage

html
<fd-person
  variant="contact"
  name="Jordan Pierce"
  title="Program Analyst"
  organization="Division of Administration"
  email="jordan.pierce@example.gov"
></fd-person>
html
<fd-person
  variant="spotlight"
  name="Morgan Lee"
  title="Employee Spotlight"
  organization="Office of Communications"
  summary="Morgan improved the intranet publishing workflow."
  profile-url="/people/morgan-lee"
  profile-label="Read Morgan's profile"
  image-src="/images/people/morgan-lee-560.jpg"
  image-srcset="/images/people/morgan-lee-280.jpg 1x, /images/people/morgan-lee-560.jpg 2x"
></fd-person>

Profile-card grid item

html
<fd-person
  variant="profile-card"
  name="Lin Wei"
  title="Honors Attorney"
  organization="Legal Division"
  profile-url="/people/lin-wei"
  image-src="/images/people/lin-wei-560.jpg"
  image-srcset="/images/people/lin-wei-280.jpg 1x, /images/people/lin-wei-560.jpg 2x"
></fd-person>

Variant guide

VariantDrupal mappingFields renderedLink behaviorImage treatment
bylineBylineName, organizationName links to email when email is presentOmitted
contactContactName, title, organization, emailEmail link onlyOmitted
contact-with-imageContact with ImageImage, name, title, organizationName links to email when email is presentSmall 1:1 avatar
contact-detailsContact DetailsImage, name, email, summaryEmail link onlyStandard 1:1 avatar
name-titleName and TitleName, title, organizationNo linkOmitted
spotlightSpotlightImage, name, title, organization, summary, optional profile CTASeparate profile link when profile-url is presentFeatured 4:5 or 1:1 image
profile-cardNew Profile Card view modeImage or placeholder, name, title, organizationName links to profile when profile-url is presentFeatured 1:1 image

Implementation guide

  • Keep variants semantic. spotlight means one featured person. profile-card means one item in a grid of comparable people.
  • Let the variant own the projection. For example, byline ignores title, phone, location, profile-url, and summary even when those fields exist on the source node.
  • Use responsive image output for featured variants. spotlight and profile-card should receive high-resolution sources, typically a 2x image at least 560px on the long edge, through image-srcset.
  • Avoid whole-card links in v1. profile-card links the visible name only. This keeps one clear native link without wrapping the image, title, and organization in a broad interactive region.
  • Image-bearing variants fall back to a silhouette placeholder. When image-src is missing, contact-with-image, contact-details, spotlight, and profile-card render a decorative person silhouette so the layout keeps a stable image slot — important for profile-card grids. The byline, contact, and name-title variants never render an image.

Properties

NameTypeDefaultDescription
variant"byline" | "contact" | "contact-with-image" | "contact-details" | "name-title" | "spotlight" | "profile-card"contactPurpose-named display projection. Unsupported values fall back to contact.
namestring``Visible person name. Used as the article label when present.
titlestring``Visible job title or role label for variants that render role metadata.
organizationstring``Visible division, office, or organization text.
emailstring | undefinedundefinedEmail address used to generate mailto: links in variants that render contact behavior.
phonestring | undefinedundefinedReserved source field. No current Person variant renders phone.
locationstring | undefinedundefinedReserved source field. No current Person variant renders location.
profile-urlstring | undefinedundefinedProfile destination for spotlight CTA links and profile-card name links.
profile-labelstring"Read more"Visible CTA label used by spotlight when profile-url is present.
targetstring | undefinedundefinedNative target for profile links. Email links ignore this value.
relstring | undefinedundefinedNative relationship tokens for profile links. Blank-target links always include noopener noreferrer.
image-srcstring | undefinedundefinedHeadshot image URL for variants that render images.
image-srcsetstring | undefinedundefinedResponsive image candidates for high-density and featured Person images.
image-altstring``Fallback alternative text used only when no visible person name is present. Headshots are decorative when the name is visible.
image-position"left" | "top""left"Image placement for row-capable variants (contact-with-image, contact-details). top stacks the image above the text; featured variants are always stacked.
summarystring``Short details or body-summary text rendered by contact-details and spotlight.

fd-person uses controlled variant projections. Populated fields are ignored when the active variant does not render them, which keeps Drupal Person view modes governed instead of editor-assembled.

CSS custom properties

NameDefaultDescription
--fd-person-compact-gapvar(--fdic-spacing-sm, 12px)Gap between image and text for compact variants.
--fd-person-standard-gapvar(--fdic-spacing-md, 16px)Gap between image and text for contact-details.
--fd-person-featured-gapvar(--fdic-spacing-md, 16px)Gap between image and content for featured variants.
--fd-person-name-font-sizevar(--fdic-font-size-body, 1.125rem)Name text size for compact and standard variants.
--fd-person-featured-name-font-sizevar(--fdic-font-size-h3, 1.40625rem)Name text size for spotlight and profile-card.
--fd-person-meta-colorvar(--fdic-color-text-secondary, #595961)Title, organization, and supporting metadata color.
--fd-person-small-image-size56pxRendered avatar size for contact-with-image.
--fd-person-standard-image-size112pxRendered avatar size for contact-details.
--fd-person-spotlight-image-size240pxMaximum rendered featured image width for spotlight.
--fd-person-spotlight-image-aspect-ratio4 / 5Featured image ratio for spotlight.
--fd-person-profile-card-image-size192pxPreferred profile-card image size before container constraints.
--fd-person-profile-card-image-aspect-ratio1 / 1Featured image ratio for profile-card grid items.
--fd-person-focus-gapvar(--fdic-focus-gap-color, #ffffff)Inner gap color for focused links.
--fd-person-focus-ringvar(--fdic-focus-ring-color, #38b6ff)Outer ring color for focused links.

Use image-size hooks for integration alignment only. Do not create new visual-size variants; choose the purpose-named variant that matches the content use case.

Shadow parts

NameDescription
baseRoot article wrapper. Also includes the active variant name as a part token.
contentText and link content wrapper.
identityTight grouping of name, metadata, and inline contact text within content.
nameVisible person name wrapper.
email-linkNative mailto link rendered by contact variants.
profile-linkNative profile link rendered by featured variants.
profile-ctaCTA profile link rendered by spotlight.
metaTitle and organization metadata text.
summaryShort details or body-summary text.
contact-listList wrapper for rendered contact links.
contact-itemIndividual contact list item.
image-frameHeadshot or placeholder frame.
imageNative headshot image. Renders with empty alt text when the visible name is present.
placeholderDecorative person-silhouette fallback shown by image-bearing variants when no headshot is supplied.

Variant-specific part tokens include byline, contact, contact-with-image, contact-details, name-title, spotlight, and profile-card on the root base part.

Accessibility

  • The component renders a semantic article labelled by the visible person name when a name is present.
  • Headshots are decorative when the visible name is rendered nearby. The component sets image alt="" in that case so screen readers do not hear the person's name twice.
  • If a future implementation uses an image as the only link content, that image must receive useful alternative text that names the person or destination.
  • Name, title, organization, email, and summary render as real text. Contact and profile destinations render as native links.
  • The component has no custom keyboard model. Keyboard focus lands only on native links.
  • Featured variants stack at narrow widths and must remain readable at 320px and 400% zoom.

Known limitations

  • phone and location are accepted for source compatibility but no current variant renders them.
  • profile-card uses a name-only profile link in v1. Whole-card links remain a separate design and accessibility decision.
  • The component does not create Drupal image styles. Drupal should provide small, standard, and featured responsive image outputs that match the selected variant.
  • Card — use for general editorial previews not tied to Person node projections.
  • Media Item — use for video, webinar, or training-resource summaries.
  • Visual — use for decorative standalone icon or avatar visuals.