UNPKG

@procore/core-react

Version:
134 lines 5.57 kB
import styled, { css } from 'styled-components'; import { defaultSpinnerSize, Spinner } from '../Spinner/Spinner'; import { spinnerDimensions } from '../Spinner/Spinner.styles'; import { getTypographyIntent, typographyWeights } from '../Typography'; import { borderRadius } from '../_styles/borderRadius'; import { colors } from '../_styles/colors'; import { mediaIE11Hack } from '../_styles/media'; import { focusable } from '../_styles/mixins'; import { spacing } from '../_styles/spacing'; var heights = { sm: 24, md: 36, lg: 48 }; var paddingX = { sm: spacing.xs, md: 6, // TODO one-off lg: spacing.md }; var typographySizes = { sm: 'small', md: 'body', lg: 'h3' }; var buttonTextColors = { primary: { main: colors.white, disabled: colors.white }, secondary: { main: colors.gray15, disabled: colors.gray70 }, tertiary: { main: colors.gray15, disabled: colors.gray70 }, tertiaryContrast: { main: colors.blue45, disabled: colors.blue45 }, UNSAFE_helixNav: { main: colors.white, disabled: colors.gray40 } }; var buttonBGColors = { primary: { main: colors.orange50, hover: colors.orange45, disabled: colors.orange85 }, secondary: { main: colors.gray90, hover: colors.gray85, disabled: colors.gray94 }, tertiary: { main: 'transparent', hover: colors.gray90, disabled: 'transparent' }, tertiaryContrast: { main: 'transparent', hover: 'white', disabled: 'transparent' }, UNSAFE_helixNav: { main: 'transparent', hover: colors.gray50, disabled: 'transparent' } }; export function getBGColor(variant) { var colors = buttonBGColors[variant]; if (!colors) { console.error("@procore/core-react: Using invalid Button variant ".concat(variant, ". Please update, falling back to primary.")); return buttonBGColors.primary; } return colors; } export function getTextColor(variant) { var colors = buttonTextColors[variant]; if (!colors) { console.error("@procore/core-react: Using invalid Button variant ".concat(variant, ". Please update, falling back to primary.")); return buttonTextColors.primary; } return colors; } function getColors(loading, variant) { return css(["background:", ";color:", ";&.active,&:active,&.focus,&:focus,&.hover,&:hover{background:", ";color:", ";}&:disabled,&[aria-disabled='true']{background:", ";color:", ";}"], loading ? getBGColor(variant).hover : getBGColor(variant).main, getTextColor(variant).main, getBGColor(variant).hover, getTextColor(variant).main, loading ? getBGColor(variant).hover : getBGColor(variant).disabled, getTextColor(variant).disabled); } export var StyledContent = /*#__PURE__*/styled.span.withConfig({ displayName: "StyledContent", componentId: "core-12_44_0__sc-c5bhwh-0" })(["align-items:center;display:flex;overflow:hidden;"]); export var StyledSpinner = /*#__PURE__*/styled(Spinner).withConfig({ displayName: "StyledSpinner", componentId: "core-12_44_0__sc-c5bhwh-1" })(["box-sizing:border-box;display:none;position:absolute;transform:translateZ(0);@media ", "{left:50%;top:50%;", "}"], mediaIE11Hack, function (_ref) { var size = _ref.size; var margin = -1 * (spinnerDimensions[size !== null && size !== void 0 ? size : defaultSpinnerSize] / 2); return css(["margin-left:", "px;margin-top:", "px;"], margin, margin); }); export var StyledLabel = /*#__PURE__*/styled.span.withConfig({ displayName: "StyledLabel", componentId: "core-12_44_0__sc-c5bhwh-2" })(["overflow:hidden;padding:0 6px;text-overflow:ellipsis;white-space:nowrap;& + span{padding-left:0;}"]); export function getButtonStyles(block, disabled, loading, size, variant) { return css(["", " ", " ", " ", " align-items:center;border-radius:", "px;border:0;box-sizing:border-box;cursor:pointer;display:inline-flex;flex-direction:row;flex-shrink:0;font-family:inherit;font-weight:", ";height:", "px;justify-content:center;margin:0;overflow:hidden;padding:0 ", "px;position:relative;pointer-events:", ";text-overflow:ellipsis;user-select:", ";vertical-align:middle;white-space:nowrap;width:", ";[data-icon-prop='true']{pointer-events:none;height:", "px;width:", "px;}", ""], getTypographyIntent(typographySizes[size]), focusable, variant === 'UNSAFE_helixNav' && css(["&.focus,&:focus{outline:none;box-shadow:0 0 0 2px ", ";}"], colors.blue70), getColors(loading, variant), borderRadius.md, typographyWeights.semibold, heights[size], paddingX[size], disabled || loading ? 'none' : 'inherit', disabled || loading ? 'none' : 'inherit', block && '100%', size === 'sm' ? 16 : 24, size === 'sm' ? 16 : 24, loading && css(["", "{pointer-events:none;visibility:hidden;}", "{display:block;}"], StyledContent, StyledSpinner)); } export var StyledButton = /*#__PURE__*/styled.button.withConfig({ displayName: "StyledButton", componentId: "core-12_44_0__sc-c5bhwh-3" })(["", ""], function (_ref2) { var $block = _ref2.$block, disabled = _ref2.disabled, $loading = _ref2.$loading, $size = _ref2.$size, $variant = _ref2.$variant; return getButtonStyles($block, disabled, $loading, $size, $variant); }); export var StyledLinkButton = /*#__PURE__*/styled.a.withConfig({ displayName: "StyledLinkButton", componentId: "core-12_44_0__sc-c5bhwh-4" })(["&,&:hover{text-decoration:none;}", ""], function (_ref3) { var $block = _ref3.$block, $disabled = _ref3.$disabled, $size = _ref3.$size, $variant = _ref3.$variant; return getButtonStyles($block, $disabled, false, $size, $variant); }); //# sourceMappingURL=Button.styles.js.map