react-base-guide
Version:
react ui components
85 lines (79 loc) • 3.21 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const jsx_runtime_1 = require("react/jsx-runtime");
const styled_components_1 = __importDefault(require("styled-components"));
const ripple_1 = __importDefault(require("../ripple"));
const defaultButtonSize = "36px";
const defaultSvgSize = "24px";
const buttonSizes = {
s: "28px",
m: defaultButtonSize,
l: "48px",
xl: "64px",
xxl: "96px",
};
const svgSizes = {
s: "16px",
m: defaultSvgSize,
l: "32px",
xl: "48px",
xxl: "64px",
};
const ButtonRipple = (0, styled_components_1.default)(ripple_1.default) `
display: ${p => { var _a; return ((_a = p.styled) === null || _a === void 0 ? void 0 : _a.display) || "inline-block"; }};
vertical-align: middle;
width: ${p => buttonSizes[p.size] || defaultButtonSize};
min-width: ${p => buttonSizes[p.size] || defaultButtonSize};
height: ${p => buttonSizes[p.size] || defaultButtonSize};
min-height: ${p => buttonSizes[p.size] || defaultButtonSize};
border-radius: ${p => p.theme.radius.round};
transition: box-shadow 0.3s;
box-shadow: ${p => p.shadow && p.theme.shadow.element};
`;
const ButtonBase = styled_components_1.default.button `
display: flex;
box-sizing: border-box;
align-items: center;
justify-content: space-around;
outline: none;
cursor: pointer;
user-select: none;
width: ${p => buttonSizes[p.size] || defaultButtonSize};
min-width: ${p => buttonSizes[p.size] || defaultButtonSize};
height: ${p => buttonSizes[p.size] || defaultButtonSize};
min-height: ${p => buttonSizes[p.size] || defaultButtonSize};
padding: 0;
background: ${p => p.secondary ? "transparent" : p.theme.palette.element.primary};
border: 1px solid transparent;
border-radius: ${p => p.theme.radius.round};
transition: background 0.3s;
svg {
width: ${p => svgSizes[p.size] || defaultSvgSize};
min-width: ${p => svgSizes[p.size] || defaultSvgSize};
height: ${p => svgSizes[p.size] || defaultSvgSize};
min-height: ${p => svgSizes[p.size] || defaultSvgSize};
pointer-events: none;
}
.rgb-fill {
fill: ${p => p.secondary ? p.theme.palette.text.primary : p.theme.palette.text.contrast};
}
.rgb-stroke {
stroke: ${p => p.secondary ? p.theme.palette.text.primary : p.theme.palette.text.contrast};
}
&:hover {
background: ${p => p.secondary ? p.theme.palette.background.secondary : p.theme.palette.element.primaryHover};
}
&:active {
transform: translateY(1px);
}
&:disabled {
pointer-events: none;
opacity: 0.3;
}
`;
const IconButton = (props) => ((0, jsx_runtime_1.jsx)(ButtonRipple, Object.assign({ disabled: props.disabled, className: props.className, size: props.size, shadow: props.shadow, borderRadius: "50%", styled: props.styled }, { children: (0, jsx_runtime_1.jsx)(ButtonBase, Object.assign({}, props, { className: undefined, styled: undefined })) })));
exports.default = IconButton;
//# sourceMappingURL=index.js.map