UNPKG

@patreon/studio

Version:

Patreon Studio Design System

41 lines 1.86 kB
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