import React, { HTMLAttributes, forwardRef } from 'react' import classNames from 'classnames' interface FlexProps extends HTMLAttributes { flex?: number | boolean /** 本身是 display:flex,flex 会使子元素 flex-item。设置 block 即可 */ block?: boolean auto?: boolean /** flex 会坍缩,提供 none 则不会坍缩 */ none?: boolean width?: string height?: string row?: boolean column?: boolean wrap?: boolean nowrap?: boolean justifyStart?: boolean justifyEnd?: boolean justifyCenter?: boolean justifyBetween?: boolean justifyAround?: boolean alignStart?: boolean alignEnd?: boolean alignCenter?: boolean alignBaseline?: boolean alignStretch?: boolean alignContentStart?: boolean alignContentEnd?: boolean alignContentCenter?: boolean alignContentBetween?: boolean alignContentAround?: boolean alignContentStretch?: boolean } const Flex = forwardRef((props, ref) => { const { flex, block, auto, none, width, height, row, column, wrap, nowrap, justifyStart, justifyEnd, justifyCenter, justifyBetween, justifyAround, alignStart, alignEnd, alignCenter, alignBaseline, alignStretch, alignContentStart, alignContentEnd, alignContentCenter, alignContentBetween, alignContentAround, alignContentStretch, className, style, children, ...rest } = props const cn = classNames( { 'gm-flex': true, 'gm-flex-block': block, 'gm-flex-flex': flex, 'gm-flex-auto': auto, 'gm-flex-none': none || width || height, 'gm-flex-row': row, 'gm-flex-column': column, 'gm-flex-wrap': wrap, 'gm-flex-nowrap': nowrap, 'gm-flex-justify-start': justifyStart, 'gm-flex-justify-end': justifyEnd, 'gm-flex-justify-center': justifyCenter, 'gm-flex-justify-between': justifyBetween, 'gm-flex-justify-around': justifyAround, 'gm-flex-align-start': alignStart, 'gm-flex-align-end': alignEnd, 'gm-flex-align-center': alignCenter, 'gm-flex-align-baseline': alignBaseline, 'gm-flex-align-stretch': alignStretch, 'gm-flex-align-content-start': alignContentStart, 'gm-flex-align-content-end': alignContentEnd, 'gm-flex-align-content-center': alignContentCenter, 'gm-flex-align-content-between': alignContentBetween, 'gm-flex-align-content-around': alignContentAround, 'gm-flex-align-content-stretch': alignContentStretch, }, className ) const s = Object.assign({}, style) if (flex) { s.flex = typeof flex === 'boolean' ? 1 : flex s.WebkitFlex = typeof flex === 'boolean' ? 1 : flex } if (height) { s.height = height } if (width) { s.width = width } return (
{children}
) }) export default Flex export type { FlexProps }