Examples
With custom toggle content
By using the toggleContent
prop, you can pass in content other than a simple string such as an icon or a badge. When passing in custom content in this way, you should not pass in any interactive element such as a button.
Beta
Truncate expansionBy passing in variant="truncate"
, the expandable content will be visible up to a maximum number of lines before being truncated, with the toggle revealing or hiding the truncated content. By default the expandable content will truncate after 3 lines, and this can be customized by also passing in the truncateMaxLines
prop.
Props
ExpandableSection
Name | Type | Default | Description |
---|---|---|---|
children | React.ReactNode | Content rendered inside the expandable section. | |
className | string | '' | Additional classes added to the expandable section. |
contentId | string | '' | ID of the content of the expandable section |
displaySize | 'default' | 'large' | 'default' | Display size variant. Set to large for disclosure styling. |
isActive | boolean | false | Forces active state |
isDetached | boolean | false | Indicates the expandable section has a detached toggle |
isExpanded | boolean | Flag to indicate if the content is expanded | |
isIndented | boolean | false | Flag to indicate if the content is indented |
isWidthLimited | boolean | false | Flag to indicate the width of the component is limited. Set to true for disclosure styling. |
onToggle | (isExpanded: boolean) => void | (isExpanded): void => undefined | Callback function to toggle the expandable section. Detached expandable sections should use the onToggle property of the expandable section toggle sub-component. |
toggleContent | React.ReactNode | React node that appears in the attached toggle in place of toggle text | |
toggleText | string | '' | Text that appears in the attached toggle |
toggleTextCollapsed | string | '' | Text that appears in the attached toggle when collapsed (will override toggleText if both are specified; used for uncontrolled expandable with dynamic toggle text) |
toggleTextExpanded | string | '' | Text that appears in the attached toggle when expanded (will override toggleText if both are specified; used for uncontrolled expandable with dynamic toggle text) |
truncateMaxLinesBeta | number | Truncates the expandable content to the specified number of lines when using the "truncate" variant. | |
variantBeta | 'default' | 'truncate' | 'default' | Determines the variant of the expandable section. When passing in "truncate" as the variant, the expandable content will be truncated after 3 lines by default. |
ExpandableSectionToggle
Name | Type | Default | Description |
---|---|---|---|
children | React.ReactNode | Content rendered inside the expandable toggle. | |
className | string | '' | Additional classes added to the expandable toggle. |
contentId | string | ID of the toggle's respective expandable section content. | |
direction | 'up' | 'down' | 'down' | Direction the toggle arrow should point when the expandable section is expanded. |
hasTruncatedContentBeta | boolean | false | Flag to determine toggle styling when the expandable content is truncated. |
isExpanded | boolean | false | Flag indicating if the expandable section is expanded. |
onToggle | (isExpanded: boolean) => void | Callback function to toggle the expandable content. |
CSS variables
.pf-c-expandable-section | --pf-c-expandable-section__toggle--PaddingTop | 0.375rem | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle--PaddingRight | 1rem | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle--PaddingBottom | 0.375rem | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle--PaddingLeft | 0 | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle--MarginTop | 0 | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle--Color | #06c | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle--hover--Color | #004080 | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle--active--Color | #004080 | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle--focus--Color | #004080 | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle--m-expanded--Color | #004080 | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle-icon--MinWidth | 1em | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle-icon--Color | #151515 | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle-icon--Transition | .2s ease-in 0s | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle-icon--Rotate | 0 | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle-icon--m-expand-top--Rotate | 0 | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-expanded__toggle-icon--Rotate | 90deg | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-expanded__toggle-icon--m-expand-top--Rotate | -90deg | ||
.pf-c-expandable-section | --pf-c-expandable-section__toggle-text--MarginLeft | calc(0.25rem + 0.5rem) | ||
.pf-c-expandable-section | --pf-c-expandable-section__content--MarginTop | 1rem | ||
.pf-c-expandable-section | --pf-c-expandable-section__content--MaxWidth | auto | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-limit-width__content--MaxWidth | 46.875rem | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg--BoxShadow | 0 0.25rem 0.5rem 0rem rgba(3, 3, 3, 0.12), 0 0 0.25rem 0 rgba(3, 3, 3, 0.06) | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg__toggle--PaddingTop | 1rem | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg__toggle--PaddingRight | 1rem | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg__toggle--PaddingBottom | 1rem | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg__toggle--PaddingLeft | 1rem | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg__content--MarginTop | 0 | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg__content--PaddingRight | 1.5rem | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg__content--PaddingBottom | 1.5rem | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg__content--PaddingLeft | 1.5rem | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg--after--BackgroundColor | transparent | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg--after--Width | 3px | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-display-lg--m-expanded--after--BackgroundColor | #06c | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-indented__content--PaddingLeft | calc(calc(0.25rem + 0.5rem) + 1em) | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-truncate__content--LineClamp | 3 | ||
.pf-c-expandable-section | --pf-c-expandable-section--m-truncate__toggle--MarginTop | 0.25rem | ||
.pf-c-expandable-section.pf-m-expanded | --pf-c-expandable-section__toggle--Color | #004080 | ||
.pf-c-expandable-section.pf-m-expanded | --pf-c-expandable-section__toggle-icon--Rotate | 90deg | ||
.pf-c-expandable-section.pf-m-expanded | --pf-c-expandable-section__toggle-icon--m-expand-top--Rotate | -90deg | ||
.pf-c-expandable-section.pf-m-expanded | --pf-c-expandable-section--m-display-lg--after--BackgroundColor | #06c | ||
.pf-c-expandable-section.pf-m-detached | --pf-c-expandable-section__content--MarginTop | 0 | ||
.pf-c-expandable-section.pf-m-detached | --pf-c-expandable-section--m-truncate__toggle--MarginTop | 0 | ||
.pf-c-expandable-section.pf-m-limit-width | --pf-c-expandable-section__content--MaxWidth | 46.875rem | ||
.pf-c-expandable-section.pf-m-display-lg | --pf-c-expandable-section__toggle--PaddingTop | 1rem | ||
.pf-c-expandable-section.pf-m-display-lg | --pf-c-expandable-section__toggle--PaddingRight | 1rem | ||
.pf-c-expandable-section.pf-m-display-lg | --pf-c-expandable-section__toggle--PaddingBottom | 1rem | ||
.pf-c-expandable-section.pf-m-display-lg | --pf-c-expandable-section__toggle--PaddingLeft | 1rem | ||
.pf-c-expandable-section.pf-m-display-lg | --pf-c-expandable-section__content--PaddingRight | 1.5rem | ||
.pf-c-expandable-section.pf-m-display-lg | --pf-c-expandable-section__content--PaddingBottom | 1.5rem | ||
.pf-c-expandable-section.pf-m-display-lg | --pf-c-expandable-section__content--PaddingLeft | 1.5rem | ||
.pf-c-expandable-section.pf-m-display-lg | --pf-c-expandable-section__content--MarginTop | 0 | ||
.pf-c-expandable-section.pf-m-indented | --pf-c-expandable-section__content--PaddingLeft | calc(calc(0.25rem + 0.5rem) + 1em) | ||
.pf-c-expandable-section.pf-m-truncate | --pf-c-expandable-section__toggle--MarginTop | 0.25rem | ||
.pf-c-expandable-section.pf-m-truncate | --pf-c-expandable-section__toggle--PaddingTop | 0 | ||
.pf-c-expandable-section.pf-m-truncate | --pf-c-expandable-section__toggle--PaddingRight | 0 | ||
.pf-c-expandable-section.pf-m-truncate | --pf-c-expandable-section__toggle--PaddingBottom | 0 | ||
.pf-c-expandable-section.pf-m-truncate | --pf-c-expandable-section__toggle-text--MarginLeft | 0 | ||
.pf-c-expandable-section__toggle:hover | --pf-c-expandable-section__toggle--Color | #004080 | ||
.pf-c-expandable-section__toggle:active | --pf-c-expandable-section__toggle--Color | #004080 | ||
.pf-c-expandable-section__toggle:focus | --pf-c-expandable-section__toggle--Color | #004080 | ||
.pf-c-expandable-section__toggle-icon.pf-m-expand-top | --pf-c-expandable-section__toggle-icon--Rotate | 0 | ||
View source on GitHub