Module is a container that holds content about one subject. Its contents can be visible at all times, or expand and collapse as individual modules or a group of modules.

also known as Accordion, Section, Expandable Section, Disclosure, Stack View, Expander

Figma:

Web:

iOS:

Android:

A11y:

Props

Component props
Name
Type
Default
id
Required
string
-

Unique id to identify this Module

badge
{|
  text: string,
  type?: "info" | "error" | "warning" | "success" | "neutral" | "darkWash" | "lightWash",
|}
-

Add a badge displayed after the title. Will not be displayed if title is not provided. Not to be used with icon or iconButton. Be sure to localize the text. See the badge variant for more details.

children
React.Node
-

Content to display underneath Module title.

icon
Icon[icon]
-

Name of icon to display in front of title. Will not be displayed if title is not provided. Not to be used with badge or iconButton. For a full list of icons, see Iconography and SVGs. See the icon variant for more details.

iconAccessibilityLabel
string
-

Label to provide information about the icon used for screen readers. Can be used in two scenarios: to describe the error icon that appears when type is error, and to describe the provided icon prop when type is info. Be sure to localize the label. See the icon variant for more details.

iconButton
React.Element<typeof IconButton>
-

IconButton element to be placed after the title for a supplemental Call To Action (CTA). Will not be displayed if title is not provided. Not to be used with badge or icon. See the icon button variant for more details.

title
string
-

Title of this Module. Be sure to localize the text.

type
"error" | "info"
-

If set to error, displays error icon and changes title to red text. Be sure to provide an iconAccessibilityLabel when set to error. See the error variant for more details.

Usage guidelines

When to use
  • Grouping and organizing content to keep the page clean and digestible.
  • Displaying additional related content about a particular subject.
  • Enabling users to reveal or hide additional content as necessary (with Expandable variant).
When not to use
  • In a layout that conveys a clear sense of information hierarchy. Use SegmentedControl instead.
  • When long content can’t be displayed all at once, and scrolling is necessary.
  • When there is insufficient content to condense, as collapsing can increase cognitive load and interaction cost. Consider the static variant of Module.
  • When the content is crucial to read in full. Consider the static variant instead.

Accessibility

Subcomponents

Module.Expandable

Use Module.Expandable if your module requires expanding and collapsing content.

Module.Expandable Props

Module.Expandable subcomponent props
Name
Type
Default
accessibilityCollapseLabel
Required
string
-

Label used to communicate to screen readers which module will be collapsed when interacting with the title button. Should be something clear, like "Collapse Security Policies Module". Be sure to localize the label. See Expandable variant to learn more.

accessibilityExpandLabel
Required
string
-

Label used to communicate to screen readers which module will be expanded when interacting with the title button. Should be something clear, like "Expand Security Policies Module". Be sure to localize the label. See Expandable variant to learn more.

id
Required
string
-

Unique id to identify this Module. See Expandable variant to learn more.

items
Required
$ReadOnlyArray<{|
  badge?: BadgeType,
  children?: React.Node,
  icon?: $Keys<typeof icons>,
  iconAccessibilityLabel?: string,
  iconButton?: React.Element<typeof IconButton>,
  summary?: $ReadOnlyArray<string>,
  title: string,
  type?: "error" | "info",
|}>
-

Array of modules displayed in a stack. Only one item can be expanded at a time. See Expandable variant to learn more.

expandedIndex
?number
-

The 0-based index indicating the item that should currently be expanded. This must be updated via onExpandedChange to ensure the correct item is expanded. See Expandable variant to learn more.

onExpandedChange
(?number) => void
-

Callback executed whenever any module item is expanded or collapsed. It receives the index of the currently expanded module, or null if none are expanded. See Expandable variant to learn more.

Variants

Static

A Module is a container that can hold any content, and can optionally have a title that describes the content inside. The default, static Module is used to display information that should always be visible.

Static - Icon

An Icon can be provided to be placed before the title.

It is recommended that icons be used sparingly to convey additional information, and instead should simply reinforce information in the title. Be sure to provide an iconAccessibilityLabel.

Static - IconButton

An IconButton can be provided to be placed after the title for a supplemental Call To Action (CTA).

Static - Badge

Badge text can be provided, which will be displayed after the title. Note that if no title text is provided, the badge will not be displayed.

Static - Error

When using type as "error", be sure to provide an iconAccessibilityLabel.

Expandable

Modules can also allow for expanding and collapsing content. The title is required and always present. The collapsed state shows optional summary content, while the expanded state shows any content desired.

Expandable - Group

Multiple expandable items can be stacked together into a Module group. However, only one Module will be expanded at any time.

Expandable - Icon, Badge and IconButton

An Icon can be provided to be placed before the title.
It is recommended that icons be used sparingly to convey additional information, and instead should simply reinforce information in the title. Be sure to provide an iconAccessibilityLabel.

Badge text can also be provided, which will be displayed after the title.

An IconButton can be provided to be placed after the title for a supplemental Call To Action (CTA).

Expandable - Error

When using type as "error", be sure to provide an iconAccessibilityLabel.

Example with external control

Component quality checklist

Component quality checklist
Quality item
Status
Status description
Figma Library
Ready
Component is available in Figma across all platforms.
Responsive Web
Ready
Component is available in code for web and mobile web.
iOS
Component is not currently available in code for iOS.
Android
Component is not currently available in code for Android.