@patreon/studio
Version:
Patreon Studio Design System
41 lines • 1.86 kB
JSX
import cx from 'classnames';
import React from 'react';
import { BodyText } from '~/components/BodyText';
import { FloatingAccessory } from '~/components/FloatingAccessory';
import styles from './Badge.module.css';
const positionToClassName = {
'top-left': styles.positionTopLeft,
'top-right': styles.positionTopRight,
'bottom-left': styles.positionBottomLeft,
'bottom-right': styles.positionBottomRight,
};
export function Badge({ shape = 'circle', position = 'top-right', offset = 0, variant, style, badgeContent, maxDigits, children, }) {
if (badgeContent === undefined || badgeContent === '' || badgeContent === 0) {
return children;
}
return (<FloatingAccessory accessory={<StandaloneBadge variant={variant} style={style} content={badgeContent} maxDigits={maxDigits} className={positionToClassName[position]}/>} shape={shape} position={position} offset={offset}>
{children}
</FloatingAccessory>);
}
export function StandaloneBadge({ variant = 'primary', style = 'text', content, maxDigits = 2, className, }) {
if (content === undefined || content === '' || content === 0) {
return null;
}
const sharedClassList = cx({
[styles.variantPrimary]: variant === 'primary',
[styles.variantSecondary]: variant === 'secondary',
});
if (style === 'dot' || content === undefined) {
return <div className={cx(styles.dot, sharedClassList, className)}/>;
}
return (<div className={cx(styles.text, sharedClassList, className)}>
<BodyText as="div" size="sm" color="inherit">
{typeof content === 'number'
? Math.log10(content) > maxDigits
? `${(Math.pow(10, maxDigits) - 1).toString()}+`
: Math.floor(content).toString()
: content}
</BodyText>
</div>);
}
//# sourceMappingURL=index.jsx.map