UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

71 lines (68 loc) 2.56 kB
import React from 'react'; import { getBreakpointDeclarations } from '../../utils/getBreakpointDeclarations.js'; import { get } from '../../constants.js'; import { isResponsiveValue } from '../../hooks/useResponsiveValue.js'; import { DEFAULT_AVATAR_SIZE } from '../../Avatar/Avatar.js'; import { SkeletonBox } from './SkeletonBox.js'; import classes from './SkeletonAvatar.module.css.js'; import { clsx } from 'clsx'; import '../../FeatureFlags/FeatureFlags.js'; import { useFeatureFlag } from '../../FeatureFlags/useFeatureFlag.js'; import '../../FeatureFlags/DefaultFeatureFlags.js'; import '@styled-system/css'; import merge from 'deepmerge'; import { CSS_MODULE_FLAG } from './FeatureFlag.js'; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const avatarSkeletonStyles = { '&[data-component="SkeletonAvatar"]': { borderRadius: '50%', boxShadow: `0 0 0 1px ${get('colors.avatar.border')}`, display: 'inline-block', lineHeight: get('lineHeights.condensedUltra'), height: 'var(--avatar-size)', width: 'var(--avatar-size)' }, '&[data-square]': { borderRadius: 'clamp(4px, var(--avatar-size) - 24px, 6px)' } }; const SkeletonAvatar = ({ size = DEFAULT_AVATAR_SIZE, square, className, style, ...rest }) => { const responsive = isResponsiveValue(size); const cssSizeVars = {}; const enabled = useFeatureFlag(CSS_MODULE_FLAG); const avatarSx = responsive ? { ...getBreakpointDeclarations(size, '--avatar-size', value => `${value || DEFAULT_AVATAR_SIZE}px`), ...avatarSkeletonStyles } : { '--avatar-size': `${size}px`, ...avatarSkeletonStyles }; if (enabled) { if (responsive) { for (const [key, value] of Object.entries(size)) { cssSizeVars[`--avatarSize-${key}`] = `${value}px`; } } else { cssSizeVars['--avatarSize-regular'] = `${size}px`; } } return /*#__PURE__*/React.createElement(SkeletonBox, _extends({ sx: enabled ? undefined : avatarSx, className: clsx(className, { [classes.SkeletonAvatar]: enabled }) }, rest, { "data-component": "SkeletonAvatar", "data-responsive": responsive ? '' : undefined, "data-square": square ? '' : undefined, style: merge(style, enabled ? cssSizeVars : {}) })); }; SkeletonAvatar.displayName = "SkeletonAvatar"; export { SkeletonAvatar };