UNPKG

@nex-ui/react

Version:

🎉 A beautiful, modern, and reliable React component library.

98 lines (94 loc) • 3.19 kB
"use client"; 'use strict'; var jsxRuntime = require('react/jsx-runtime'); var react = require('react'); var AvatarGroupContext = require('./AvatarGroupContext.cjs'); var Avatar = require('./Avatar.cjs'); var useDefaultProps = require('../utils/useDefaultProps.cjs'); var useSlotClasses = require('../utils/useSlotClasses.cjs'); var useStyles = require('../utils/useStyles.cjs'); var useSlot = require('../utils/useSlot.cjs'); var avatar = require('../../theme/recipes/avatar.cjs'); const slots = [ 'root', 'surplus' ]; const AvatarGroup = (inProps)=>{ const props = useDefaultProps.useDefaultProps({ name: 'AvatarGroup', props: inProps }); const { children, total, slotProps, spacing, renderSurplus, classNames, size = 'md', color = 'gray', outlined = false, radius = size, max: maxProp = 5, ...remainingProps } = props; const max = Math.max(1, maxProp); const ownerState = { ...props, size, color, outlined, radius, max }; const slotClasses = useSlotClasses.useSlotClasses({ name: 'AvatarGroup', slots, classNames }); const style = useStyles.useStyles({ ownerState, name: 'AvatarGroup', recipe: avatar.avatarGroupRecipe }); const [AvatarGroupRoot, getAvatarGroupRootProps] = useSlot.useSlot({ style, elementType: 'div', externalForwardedProps: remainingProps, classNames: slotClasses.root, additionalProps: { style: { [`--avatar-group-spacing`]: spacing !== undefined ? `${spacing}px` : undefined } } }); const [AvatarSurplus, getAvatarSurplusProps] = useSlot.useSlot({ elementType: Avatar.Avatar, externalSlotProps: slotProps?.surplus, classNames: slotClasses.surplus, shouldForwardComponent: false }); const ctx = react.useMemo(()=>({ size, color, outlined, radius }), [ color, outlined, radius, size ]); const childrenLength = Array.isArray(children) ? children.length : 1; if (childrenLength === 1 && (total === undefined || total < 2)) { return children; } const lastAvatar = Math.min(childrenLength, max); const totalAvatars = total ?? childrenLength; const extraAvatars = Math.max(0, totalAvatars - lastAvatar); return /*#__PURE__*/ jsxRuntime.jsx(AvatarGroupRoot, { ...getAvatarGroupRootProps(), children: /*#__PURE__*/ jsxRuntime.jsxs(AvatarGroupContext.AvatarGroupProvider, { value: ctx, children: [ Array.isArray(children) ? children.slice(0, lastAvatar) : children, !!extraAvatars && (renderSurplus ? renderSurplus(extraAvatars) : /*#__PURE__*/ jsxRuntime.jsxs(AvatarSurplus, { ...getAvatarSurplusProps(), children: [ "+", extraAvatars ] })) ] }) }); }; AvatarGroup.displayName = 'AvatarGroup'; exports.AvatarGroup = AvatarGroup;