@ntragas/pouncejstest
Version:
A collection of UI components from Panther labs
142 lines (126 loc) • 3.6 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import React from 'react';
import { lightenDarkenColor } from '../../utils/helpers';
import useTheme from '../../utils/useTheme';
export var getThemeColor = function getThemeColor(color) {
switch (color) {
case 'violet':
return 'violet-400';
case 'teal':
return 'teal-500';
case 'red':
return 'pink-700';
case 'orange':
return 'yellow-600';
case 'green':
return 'green-400';
case 'gray':
return 'gray-500';
case 'darkgray':
return 'gray-600';
case 'darkblue':
return 'navyblue-700';
case 'navyblue':
return 'navyblue-300';
case 'blue':
default:
return 'blue-400';
}
};
export var getSolidButtonStyles = function getSolidButtonStyles(theme, variantColor) {
var themeColorKey = getThemeColor(variantColor);
var themeColor = theme.colors[themeColorKey];
var hoverColor = lightenDarkenColor(themeColor, 10);
var activeColor = lightenDarkenColor(themeColor, -10);
var focusBorderColor = lightenDarkenColor(themeColor, 85);
return {
transition: 'border-color 100ms cubic-bezier(0.0, 0, 0.2, 1) 0ms, background-color 100ms cubic-bezier(0.0, 0, 0.2, 1) 0ms',
// prettier-ignore
borderRadius: 'medium',
border: '1px solid',
borderColor: themeColor,
backgroundColor: themeColor,
_hover: {
backgroundColor: hoverColor,
borderColor: hoverColor
},
_focus: {
backgroundColor: hoverColor,
borderColor: focusBorderColor
},
_active: {
backgroundColor: activeColor,
borderColor: activeColor
}
};
};
var getOutlineButtonStyles = function getOutlineButtonStyles(theme, variantColor) {
var themeColorKey = getThemeColor(variantColor);
var themeColor = theme.colors[themeColorKey];
var hoverColor = lightenDarkenColor(themeColor, 8);
var activeColor = lightenDarkenColor(themeColor, -25);
var focusBorderColor = lightenDarkenColor(themeColor, 85);
return {
transition: 'border-color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms, background-color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms',
// prettier-ignore
borderRadius: 'small',
border: '1px solid',
borderColor: themeColor,
backgroundColor: 'transparent',
_hover: {
backgroundColor: hoverColor,
borderColor: hoverColor
},
_focus: {
backgroundColor: hoverColor,
borderColor: focusBorderColor
},
_active: {
backgroundColor: activeColor,
borderColor: activeColor
}
};
};
var getSizeButtonStyles = function getSizeButtonStyles(size) {
switch (size) {
case 'small':
return {
px: 5,
height: 24,
fontSize: 'small'
};
case 'medium':
return {
px: 5,
height: 32,
fontSize: 'small-medium'
};
case 'large':
default:
return {
px: 5,
height: 46,
fontSize: 'medium-large'
};
}
};
var useButtonStyles = function useButtonStyles(_ref) {
var variantColor = _ref.variantColor,
variant = _ref.variant,
size = _ref.size;
var theme = useTheme();
var variantStyles = React.useMemo(function () {
switch (variant) {
case 'outline':
return getOutlineButtonStyles(theme, variantColor);
case 'solid':
default:
return getSolidButtonStyles(theme, variantColor);
}
}, [variantColor, variant]);
var sizeStyles = getSizeButtonStyles(size);
return _extends({
outline: 'none'
}, sizeStyles, variantStyles);
};
export default useButtonStyles;