import React, { FC, forwardRef, memo, useMemo } from 'react'; import { cn } from '../../util/bem'; import { externalClasses, MediaPropsType } from '../../util/externalClasses'; import { FrameExtensionUnionType, RadiusSizesType, SizeType, TextColorType } from '../../util/global-props'; import { Wrapper } from '../wrapper/wrapper.component'; import './card.component.scss'; export type CardPropsType = { children?: React.ReactNode | string; className?: string; id?: string; style?: React.CSSProperties; row?: boolean; align?: 'center' | 'right' | 'left' | 'stretch' | 'space-between' | 'space-around'; valign?: 'top'|'center'|'bottom' | 'stretch'; frame?: FrameExtensionUnionType; color?: TextColorType; padding?: SizeType; margin?: SizeType; fullWidth?: boolean; fullHeight?: boolean; maxWidth?: string; radius?: RadiusSizesType; overflow?: 'hidden' | 'scroll' | 'visible'; flex?: number | string; media?: React.ReactNode; mediaBefore?: boolean; styles?: React.CSSProperties; innerRef?: React.Ref; onClick?: React.EventHandler>; onMouseDown?: React.EventHandler>; onMouseLeave?: React.EventHandler>; onMouseEnter?: React.EventHandler>; hide?: MediaPropsType; xsm?: CardPropsType; sm?: CardPropsType; md?: CardPropsType; lg?: CardPropsType; } const className = cn('card'); export const Card: FC = memo(forwardRef((props, ref: React.Ref) => { const MediaContent = useMemo(() => { if (!props.media) { return null; } return props.media; }, [ props.media ]); return ( { props.mediaBefore ? MediaContent : null } { props.children } { !props.mediaBefore ? MediaContent : null } ); })); Card.defaultProps = { padding: 'off' }; Card.displayName = 'Card';