UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

93 lines (92 loc) 3.32 kB
"use client"; import _extends from "@babel/runtime/helpers/esm/extends"; import React from 'react'; import classnames from 'classnames'; import { createSpacingClasses } from "../space/SpacingHelper.js"; import { validateDOMAttributes, extendPropsWithContext } from "../../shared/component-helper.js"; import Context from "../../shared/Context.js"; export const defaultProps = { label: null, className: null, maxElements: 4, size: 'medium', children: null, variant: 'primary', skeleton: false }; export const AvatarGroupContext = React.createContext(null); const AvatarGroup = localProps => { const context = React.useContext(Context); const { label, className, children: childrenProp, size, maxElements: maxElementsProp, variant, backgroundColor, color, ...props } = extendPropsWithContext(localProps, defaultProps, context?.AvatarGroup, { skeleton: context?.skeleton }); const maxElements = maxElementsProp && maxElementsProp > 0 ? maxElementsProp : 4; let children = childrenProp; let numOfHiddenAvatars = 0; if (Array.isArray(childrenProp)) { const total = childrenProp.length; if (total > maxElements) { numOfHiddenAvatars = total - maxElements + 1; } children = childrenProp.slice(0, total - numOfHiddenAvatars).map((child, i) => { var _child$props$size, _child$props$variant, _child$props$color, _child$props$backgrou; const appliedSize = (_child$props$size = child.props?.size) !== null && _child$props$size !== void 0 ? _child$props$size : size; const appliedVariant = (_child$props$variant = child.props?.variant) !== null && _child$props$variant !== void 0 ? _child$props$variant : variant; const appliedColor = (_child$props$color = child.props?.color) !== null && _child$props$color !== void 0 ? _child$props$color : color; const appliedBackgroundColor = (_child$props$backgrou = child.props?.backgroundColor) !== null && _child$props$backgrou !== void 0 ? _child$props$backgrou : backgroundColor; return React.cloneElement(child, { size: appliedSize, variant: appliedVariant, color: appliedColor, backgroundColor: appliedBackgroundColor, style: { ...child.props.style, zIndex: total - i }, key: i }); }); } const spacingClasses = createSpacingClasses(props); const { skeleton, ...attributes } = validateDOMAttributes({}, props); return React.createElement(AvatarGroupContext.Provider, { value: { ...props, variant, size, color, backgroundColor } }, React.createElement("span", _extends({ className: classnames('dnb-avatar__group', spacingClasses, className) }, attributes), React.createElement("span", { className: "dnb-sr-only" }, label), children, numOfHiddenAvatars ? React.createElement(ElementsHidden, { size: size }, "+", numOfHiddenAvatars) : null)); }; function ElementsHidden(props) { const { size, children } = props; return React.createElement("span", { className: `dnb-avatar__group--elements-left dnb-avatar__group--elements-left--size-${size || 'medium'}` }, children); } AvatarGroup._supportsSpacingProps = true; export default AvatarGroup; //# sourceMappingURL=AvatarGroup.js.map