@nestbotics/nct_frontend_common_components
Version:
A collection of reusable React components with theme management and styling utilities
82 lines (81 loc) • 4.56 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = CustomButton;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _react = _interopRequireDefault(require("react"));
var _styles = require("@mui/material/styles");
var _Button = _interopRequireDefault(require("@mui/material/Button"));
var _Theme = require("../../theme/Theme");
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["theme", "buttonvariant", "mode"],
_excluded2 = ["variant", "icon", "children", "onClick"];
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var StyledButton = (0, _styles.styled)(_Button.default)(function (_ref) {
var theme = _ref.theme,
buttonvariant = _ref.buttonvariant,
mode = _ref.mode,
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
var colors = (0, _Theme.tokens)(mode);
return _objectSpread({
fontFamily: 'var(--font-sans)',
fontSize: '0.875rem',
fontWeight: 500,
lineHeight: '1.25rem',
borderRadius: '0.375rem',
height: '2.25rem',
padding: '0.5rem 1rem',
display: 'inline-flex',
alignItems: 'center',
justifyContent: 'center',
whiteSpace: 'nowrap',
transition: 'all 150ms cubic-bezier(0.4, 0, 0.2, 1)',
textTransform: 'none',
boxShadow: 'none',
backgroundColor: props.bgcolor || (buttonvariant === 'default' ? mode === 'dark' ? colors.purple[500] : colors.purple[400] : 'transparent'),
color: props.color || (buttonvariant === 'default' ? mode === 'dark' ? colors.purple[100] : colors.purple[900] : colors.grey[100]),
border: props.border || (buttonvariant === 'outline' ? "1px solid ".concat(mode === 'dark' ? colors.grey[400] : colors.grey[300]) : 'none'),
'&:hover': {
backgroundColor: props.hoverBgColor || (buttonvariant === 'default' ? mode === 'dark' ? 'rgba(128, 90, 213, 0.8)' : 'rgba(129, 140, 248, 0.8)' : 'rgba(0, 0, 0, 0.04)'),
color: props.hoverColor || (buttonvariant === 'default' ? mode === 'dark' ? 'rgba(245, 245, 245, 0.8)' : 'rgba(48, 48, 48, 0.8)' : colors.grey[100]),
boxShadow: 'none'
},
'&:focus-visible': {
outline: "2px solid ".concat(colors.grey[500]),
outlineOffset: '2px'
}
}, buttonvariant === 'destructive' && {
background: mode === 'dark' ? "linear-gradient(45deg, rgba(".concat(colors.redAccent[600], ", 0.9), rgba(").concat(colors.orangeAccent[600], ", 0.9))") : "linear-gradient(45deg, rgba(".concat(colors.redAccent[500], ", 0.9), rgba(").concat(colors.orangeAccent[500], ", 0.9))"),
color: mode === 'dark' ? 'rgba(245, 245, 245, 0.8)' : 'rgba(48, 48, 48, 0.8)',
'&:hover': {
background: mode === 'dark' ? "linear-gradient(45deg, rgba(".concat(colors.redAccent[500], ", 0.8), rgba(").concat(colors.orangeAccent[500], ", 0.8))") : "linear-gradient(45deg, rgba(".concat(colors.redAccent[400], ", 0.8), rgba(").concat(colors.orangeAccent[400], ", 0.8))")
}
});
});
function CustomButton(_ref2) {
var _ref2$variant = _ref2.variant,
variant = _ref2$variant === void 0 ? 'default' : _ref2$variant,
Icon = _ref2.icon,
children = _ref2.children,
onClick = _ref2.onClick,
props = (0, _objectWithoutProperties2.default)(_ref2, _excluded2);
var theme = (0, _styles.useTheme)();
var mode = theme.palette.mode;
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(StyledButton, _objectSpread(_objectSpread({
buttonvariant: variant,
onClick: onClick,
mode: mode
}, props), {}, {
children: [Icon && /*#__PURE__*/(0, _jsxRuntime.jsx)(Icon, {
style: {
marginRight: '0.5rem',
width: '1rem',
height: '1rem'
}
}), children]
}));
}