You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
2.1 KiB
JavaScript
49 lines
2.1 KiB
JavaScript
import responsivePropType from './responsivePropType';
|
|
import style from './style';
|
|
import compose from './compose';
|
|
import { createUnaryUnit, getValue } from './spacing';
|
|
import { handleBreakpoints } from './breakpoints';
|
|
export function borderTransform(value) {
|
|
if (typeof value !== 'number') {
|
|
return value;
|
|
}
|
|
return `${value}px solid`;
|
|
}
|
|
function createBorderStyle(prop, transform) {
|
|
return style({
|
|
prop,
|
|
themeKey: 'borders',
|
|
transform
|
|
});
|
|
}
|
|
export const border = createBorderStyle('border', borderTransform);
|
|
export const borderTop = createBorderStyle('borderTop', borderTransform);
|
|
export const borderRight = createBorderStyle('borderRight', borderTransform);
|
|
export const borderBottom = createBorderStyle('borderBottom', borderTransform);
|
|
export const borderLeft = createBorderStyle('borderLeft', borderTransform);
|
|
export const borderColor = createBorderStyle('borderColor');
|
|
export const borderTopColor = createBorderStyle('borderTopColor');
|
|
export const borderRightColor = createBorderStyle('borderRightColor');
|
|
export const borderBottomColor = createBorderStyle('borderBottomColor');
|
|
export const borderLeftColor = createBorderStyle('borderLeftColor');
|
|
export const outline = createBorderStyle('outline', borderTransform);
|
|
export const outlineColor = createBorderStyle('outlineColor');
|
|
|
|
// false positive
|
|
// eslint-disable-next-line react/function-component-definition
|
|
export const borderRadius = props => {
|
|
if (props.borderRadius !== undefined && props.borderRadius !== null) {
|
|
const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');
|
|
const styleFromPropValue = propValue => ({
|
|
borderRadius: getValue(transformer, propValue)
|
|
});
|
|
return handleBreakpoints(props, props.borderRadius, styleFromPropValue);
|
|
}
|
|
return null;
|
|
};
|
|
borderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {
|
|
borderRadius: responsivePropType
|
|
} : {};
|
|
borderRadius.filterProps = ['borderRadius'];
|
|
const borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);
|
|
export default borders; |