ListView

A ListView is a collection of items that each have a primary piece of information and action, one or multiple secondary actions, as well as associated metadata.

Internal Component

This component is intended solely for use within GitHub and is not available for external use.

Props

ListView

NameDefaultDescription
metadata
React.ReactElement<({ title, assistiveAnnouncement, sectionFilters, children, style, className, actionsStyle, actionsClassName, onToggleSelectAll, ...actionBarProps }: ListViewMetadataProps) => React.JSX.Element, string | React.JSXElementConstructor<any>>

An optional element to contain bulk actions, a 'Select all' checkbox, a density toggle for the view, etc.

variant
"default" | "compact"

Controls the width and height of the list and its contents

onVariantChange
(variant: "default" | "compact") => void

Callback for when the variant changes

isSelectable
boolean

Controls item's selection mode; bulk actions are allowed if true. Defaults to not selectable.

hasDragHandle
boolean

Controls if a drag handle is shown. Defaults to no drag handles.

singularUnits
string

What a single list item should be called. Used to customize assistive text about how many list items are selected. Defaults to 'list item'.

pluralUnits
string

What many list items are called. Used to customize assistive text about how many list items are selected. Defaults to 'list items'.

ariaLabelledBy
string

Optional ID of an element that labels the list view. When provided, this takes the place of the default sr-only title.

className
string
listRef
React.MutableRefObject<HTMLUListElement>
strictFocusZone
boolean

Optional property that passes through to the strict prop in the useFocusZone hook in @primer/behaviors. When true, performs additional checks to determine tabbability which may adversely affect app performance. Defaults to true

as
React.ElementType<any, keyof React.JSX.IntrinsicElements>

Component type to render for drag and drop container

role
string
title Required
titleHeaderTag Required
totalCount Required
selectedCount Required
itemsListClassName Required
itemsListStyle Required

ListViewActionBar

NameDefaultDescription
actionsLabel Required
actions Required
densityToggle
React.ReactElement<({ localStorageVariantKey, onChange: externalOnChange, ...props }: ListViewDensityToggleProps) => React.JSX.Element, string | React.JSXElementConstructor<any>>

Include a toggle to switch between Comfortable and Condensed view modes.

className
string
style
React.CSSProperties

ListViewDensityToggle

NameDefaultDescription
localStorageVariantKey
string

Optional key for persisting to local storage the user's density selection. If omitted, the ListView's variant will revert to the default on page reload.

IdContext

NameDefaultDescription
idPrefix Required
string

The prefix for use with unique id attributes for the list view and its subcomponents.

ListViewMetadata

NameDefaultDescription
title
React.ReactNode

The rendered title of the list or information regarding its contents.

sectionFilters
ListViewSectionFilterLinks | React.ReactElement<React.ExoticComponent<React.SuspenseProps>, string | React.JSXElementConstructor<any>>

Links for applying any categorical, mutually exclusive section filters for the content of the ListView.

assistiveAnnouncement
string

Used for assistive announcements that are reflective of the visual updates to the list container a sighted user will experience when using the list. Defaults to no announcement. Visually hidden, for screenreaders only.

onToggleSelectAll
(isSelectAllChecked: boolean) => void

Callback for when the checkbox for selecting and deselecting all list items is toggled.

children
React.ReactNode

Optional additional actions to show. Will not fall into an overflow dropdown menu to accommodate small screen widths.

className
string
style
React.CSSProperties
actionsClassName Required
actionsStyle Required
actionsLabel Required
actions Required
densityToggle
React.ReactElement<({ localStorageVariantKey, onChange: externalOnChange, ...props }: ListViewDensityToggleProps) => React.JSX.Element, string | React.JSXElementConstructor<any>>

Include a toggle to switch between Comfortable and Condensed view modes.

MultiPageSelectionProvider

NameDefaultDescription
multiPageSelectionAllowed
boolean

Indicate whether list items from multiple pages of ListView items can be selected by the user at a time. Used to determine when the 'Select all' checkbox should be rendered in an indeterminate state, to indicate when some but not all selectable items are selected. Defaults to false.

NameDefaultDescription
className
string
style
React.CSSProperties
title Required
string

The name of this section filter, e.g., "Open" to describe a section filter that shows only open issues.

count
React.ReactNode

The number of list items in the category this section filter represents. Optional. Changes appearance when isLoading is true.

href Required
string

The URL to load the list with only items matching this section filter.

isSelected
boolean

Optionally specify whether this section filter is currently active. Defaults to not being selected.

isLoading
boolean

Optionally specify whether the section filter is still being loaded. Will be used to style the count, if given, when true.

SelectionProvider

NameDefaultDescription
totalCount Required
singularUnits
string
pluralUnits
string
isSelectable
boolean
hasDragHandle
boolean
selectedCount
number
countOnPage
number

TitleProvider

NameDefaultDescription
titleHeaderTag
"h1" | "h2" | "h3" | "h4" | "h5" | "h6"

The HTML element used for the visually hidden title. Should change depending on the information hierarchy of the page where the ListView is used. Defaults to an <h2> tag.

title Required

VariantProvider

NameDefaultDescription
variant
"default" | "compact"
setVariant
(variant: "default" | "compact") => void

ListItemActionBar

NameDefaultDescription
className
string
style
React.CSSProperties
anchorIcon
Icon

Override the icon used in the button that opens the action menu. Defaults to KebabHorizontalIcon.

label
GitHubUiActionBarProps

ListItemDescription

NameDefaultDescription
children
React.ReactNode
className
string
style
React.CSSProperties

ListItemLeadingBadge

NameDefaultDescription
variant Required
size Required
title Required
string

Text that is shown as a visible Primer Label and as visually hidden text for screen readers.

href
string

The link that will be opened when the item is clicked

containerClassName Required
containerStyle Required

ListItemLeadingVisual

NameDefaultDescription
icon
OcticonProps

The Octicon component representing the desired icon

children
React.ReactNode

Render any child content as the leading visual NOTE: if both icon and children are passed, the icon will be rendered first, with the children appended after

className
string

Additional className prop to override or extend pre-existing className styles

color
string

The name of the Primer variable that will be used for the icon's fill eg.: done.fg

description
string

A text description of the item Used for visually hidden text to describe the item on focus for the screen readers

newActivity
boolean

Indicates whether the rendered item has new content since lastViewed

ListItem

NameDefaultDescription
className
string
style
React.CSSProperties
metadataContainerClassName Required
metadataContainerStyle Required
isSelected
boolean
isActive
boolean
onSelect
(isSelected: boolean) => void
onKeyDown
(event: React.KeyboardEvent<HTMLLIElement>) => void
onFocus
(event: React.FocusEvent<HTMLLIElement, Element>) => void
title Required
React.ReactElement<typeof ListItemTitle, string | React.JSXElementConstructor<any>>

A ListItem title communicates the overall purpose of the ListItem.

metadata
ListItemMetadataContainerProps

Optional extra elements to display on the right side of the list item. You can optionally wrap individual pieces of content in ListItem.Metadata for a consistent appearance.

secondaryActions
React.ReactElement<({ anchorIcon, style, className, label, ...props }: ListItemActionBarProps) => React.JSX.Element, string | React.JSXElementConstructor<any>>

Optional menu of additional actions to be shown on the right side of the ListItem. Use ListItem.ActionBar.

role
string
as
React.ElementType<any, keyof React.JSX.IntrinsicElements>

Component type to render for drag and drop container

ListItemMainContent

NameDefaultDescription
children
React.ReactNode

ListItemMetadata

NameDefaultDescription
alignment
"left" | "right"

Controls how the metadata will be aligned inside the trailing content. Defaults to 'left'.

variant
"primary" | "secondary"

Alter the appearance of the metadata to appear more subtle than other ListItem content ('secondary', default) or comparable to other ListItem content ('primary'). Affects text color, font size, width, and distance from other metadata items.

ListItemSafeHTMLTitle

NameDefaultDescription
children
React.ReactNode

Additional elements to be rendered after the title header element and trailing badge.

headerContainerRef
React.RefObject<HTMLDivElement>

A ref object to access the container element of the header.

headingRef
React.RefObject<HTMLDivElement>

A ref object to access the container element of the header.

leadingBadge
React.ReactElement<({ title, containerStyle, containerClassName, href, ...props }: ListItemLeadingBadgeProps) => React.JSX.Element, string | React.JSXElementConstructor<any>>
trailingBadges
React.ReactElement<({ title, containerStyle, containerClassName, children, ...props }: ListItemTrailingBadgeProps) => React.JSX.Element, string | React.JSXElementConstructor<any>>[]

An optional element used to indicate information such as the status of the item. Appears after the title text.

containerClassName Required
containerStyle Required
headingClassName Required
headingStyle Required

ListItemUnsafeHTMLTitle

NameDefaultDescription
children
React.ReactNode

Additional elements to be rendered after the title header element and trailing badge.

headerContainerRef
React.RefObject<HTMLDivElement>

A ref object to access the container element of the header.

headingRef
React.RefObject<HTMLDivElement>

A ref object to access the container element of the header.

leadingBadge
React.ReactElement<({ title, containerStyle, containerClassName, href, ...props }: ListItemLeadingBadgeProps) => React.JSX.Element, string | React.JSXElementConstructor<any>>
trailingBadges
React.ReactElement<({ title, containerStyle, containerClassName, children, ...props }: ListItemTrailingBadgeProps) => React.JSX.Element, string | React.JSXElementConstructor<any>>[]

An optional element used to indicate information such as the status of the item. Appears after the title text.

containerClassName Required
containerStyle Required
headingClassName Required
headingStyle Required

ListItemTitle

NameDefaultDescription
children Required
headerContainerRef
React.RefObject<HTMLDivElement>

A ref object to access the container element of the header.

headingRef
React.RefObject<HTMLDivElement>

A ref object to access the container element of the header.

leadingBadge
React.ReactElement<({ title, containerStyle, containerClassName, href, ...props }: ListItemLeadingBadgeProps) => React.JSX.Element, string | React.JSXElementConstructor<any>>
trailingBadges
React.ReactElement<({ title, containerStyle, containerClassName, children, ...props }: ListItemTrailingBadgeProps) => React.JSX.Element, string | React.JSXElementConstructor<any>>[]

An optional element used to indicate information such as the status of the item. Appears after the title text.

containerClassName Required
containerStyle Required
headingClassName Required
headingStyle Required
anchorClassName Required
anchorStyle Required
anchorRef
React.RefObject<HTMLAnchorElement>

A ref to the anchor element

linkProps
Omit<Omit<any, "ref">, "sx">

An optional prop to pass additional props for the anchor tag of the title, if the title is a link Can be used to add a target or soft navigation, for example

value Required
string

The text content of the header, to convey the primary meaning of the list item.

ListItemTrailingBadge

NameDefaultDescription
variant Required
size Required
containerClassName Required
containerStyle Required
title Required
string

Text that is shown as a visible Primer Label and as visually hidden text for screen readers.