(
({ children, className, ...rest }, ref) => {
const repsonsiveClassNames: string[] = []
BREAKPOINTS.forEach((bp) => {
const breakpoint = rest[bp]
delete rest[bp]
const infix = bp === 'xs' ? '' : `-${bp}`
if (typeof breakpoint === 'number' || typeof breakpoint === 'string') {
repsonsiveClassNames.push(`col${infix}-${breakpoint}`)
}
if (typeof breakpoint === 'boolean') {
repsonsiveClassNames.push(`col${infix}`)
}
if (breakpoint && typeof breakpoint === 'object') {
if (typeof breakpoint.span === 'number' || typeof breakpoint.span === 'string') {
repsonsiveClassNames.push(`col${infix}-${breakpoint.span}`)
}
if (typeof breakpoint.span === 'boolean') {
repsonsiveClassNames.push(`col${infix}`)
}
if (typeof breakpoint.order === 'number' || typeof breakpoint.order === 'string') {
repsonsiveClassNames.push(`order${infix}-${breakpoint.order}`)
}
if (typeof breakpoint.offset === 'number') {
repsonsiveClassNames.push(`offset${infix}-${breakpoint.offset}`)
}
}
})
return (
0 ? repsonsiveClassNames : 'col',
className
)}
{...rest}
ref={ref}
>
{children}
)
}
)
const span = PropTypes.oneOfType([
PropTypes.bool,
PropTypes.number,
PropTypes.string,
PropTypes.oneOf(['auto']),
])
const col = PropTypes.oneOfType([
span,
PropTypes.shape({
span: span,
offset: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
order: PropTypes.oneOfType([
PropTypes.oneOf(['first', 'last']),
PropTypes.number,
PropTypes.string,
]),
}),
])
CCol.propTypes = {
children: PropTypes.node,
className: PropTypes.string,
xs: col,
sm: col,
md: col,
lg: col,
xl: col,
xxl: col,
}
CCol.displayName = 'CCol'