@atlaskit/avatar-group
Version:
An avatar group displays a number of avatars grouped together in a stack or grid.
123 lines (122 loc) • 5.28 kB
TypeScript
import React, { type ElementType, type MouseEventHandler } from 'react';
import Avatar from '@atlaskit/avatar';
import { type PositionType } from '@atlaskit/tooltip';
import { type AvatarGroupOverrides, type AvatarGroupSize, type AvatarProps, type onAvatarClickHandler } from './types';
export interface AvatarGroupProps {
/**
* Indicates the layout of the avatar group.
* Avatars will either be overlapped in a stack, or
* laid out in an even grid formation.
* Defaults to "stack".
*/
appearance?: 'grid' | 'stack';
/**
* Component used to render each avatar.
*/
avatar?: typeof Avatar | ElementType<AvatarProps>;
/**
* The maximum number of avatars allowed in the list.
* Defaults to 5 when displayed as a stack,
* and 11 when displayed as a grid.
*/
maxCount?: number;
/**
* Defines the size of the avatar.
* Defaults to "medium".
*
* Note: The "xsmall" size that exists on Avatar is not supported here because elements such as the more indicator cannot be displayed in an accessible manner at that size.
*/
size?: AvatarGroupSize;
/**
* Typically the background color that the avatar is presented on.
* Accepts any color argument that the CSS border-color property accepts.
*/
borderColor?: string;
/**
* An array of avatar prop data, that are spread onto each `avatar` component.
*
* For further usage information on AvatarPropTypes, the supported props for `avatar`, refer to [Avatar's prop documentation](https://atlassian.design/components/avatar/code).
*/
data: Array<AvatarProps>;
/**
* Handle the click event on the avatar item.
* Note that if an onClick prop is provided as part of avatar data, it will take precedence over onAvatarClick.
*/
onAvatarClick?: onAvatarClickHandler;
/**
* Take control of the click event on the more indicator.
* This will cancel the default dropdown behavior.
*/
onMoreClick?: MouseEventHandler;
/**
* Provide additional props to the MoreButton.
* Example use cases: altering tab order by providing tabIndex;
* adding onClick behaviour without losing the default dropdown
*/
showMoreButtonProps?: Partial<React.HTMLAttributes<HTMLElement>>;
/**
* Element the overflow popup should be attached to.
* Defaults to "viewport".
*/
boundariesElement?: 'viewport' | 'window' | 'scrollParent';
/**
* A `testId` prop is provided for specified elements,
* which is a unique string that appears as a data attribute `data-testid` in the rendered code,
* serving as a hook for automated tests.
*/
/**
* Will set these elements when defined:
* - Container element - `{testId}--avatar-group`
* - Avatar items - `{testId}--avatar-{index}`
* - Overflow menu button - `{testId}--overflow-menu--trigger`
* - Overflow menu content - `{testId}--overflow-menu--content`
*/
testId?: string;
/**
* Custom overrides for the composed components.
*/
overrides?: AvatarGroupOverrides;
/**
*
* Where the tooltip should appear relative to its target.
* Defaults to tooltip position "bottom".
*/
tooltipPosition?: Extract<PositionType, 'bottom' | 'top'>;
/**
* Disables tooltips.
*/
isTooltipDisabled?: boolean;
/**
* Text to be used as aria-label for the list of avatars.
* Screen reader announcement with default label, which is `avatar group`, is `list, avatar group, X items`.
*
* The label should describe the `AvatarGroup`'s entities, for instance:
* - `label="team members"`, screen reader announcement would be `list team members, X items`
* - `label="reviewers"` screen reader announcement would be `list reviewers, X items`
*
* When there are several AvatarGroups on the page you should use a unique label to let users distinguish different lists.
*/
label?: string;
/**
* Determines whether the 'show more' popup has `shouldRenderToParent` applied.
*/
shouldPopupRenderToParent?: boolean;
/**
* Text to be used as aria-label for the more indicator.
* If provided, this will be used exactly as-is for the aria-label.
* If not provided, but an `aria-label` is provided via `showMoreButtonProps`, that will be used instead.
* If neither is provided, the aria-label will default to "N more people" where N is the number of people that are not visible (e.g. "5 more people").
*/
moreIndicatorLabel?: string;
}
/**
* __Avatar group__
*
* An avatar group displays a number of avatars grouped together in a stack or grid.
*
* - [Examples](https://atlassian.design/components/avatar-group/examples)
* - [Code](https://atlassian.design/components/avatar-group/code)
* - [Usage](https://atlassian.design/components/avatar-group/usage)
*/
declare const AvatarGroup: ({ appearance, avatar, borderColor, boundariesElement, data, isTooltipDisabled, maxCount, onAvatarClick, onMoreClick, overrides, showMoreButtonProps, size, testId, label, moreIndicatorLabel, tooltipPosition, shouldPopupRenderToParent, }: AvatarGroupProps) => React.JSX.Element;
export default AvatarGroup;