@braineet/ui
Version:
Braineet design system
147 lines (146 loc) • 6.5 kB
JavaScript
;
exports.__esModule = true;
exports.sizes = exports.TextButton = exports.StyledButton = exports.LoadingIcon = exports.IconButton = void 0;
var _styledComponents = _interopRequireWildcard(require("styled-components"));
var _styledSystem = require("styled-system");
var _utils = require("../../utils");
var _box = _interopRequireDefault(require("../box"));
var _icon = _interopRequireDefault(require("../icon"));
var _spinner = _interopRequireDefault(require("../spinner"));
var _text = _interopRequireDefault(require("../text"));
var _excluded = ["boxShadow", "active", "hover", "focus"];
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
var StyledButton = exports.StyledButton = (0, _styledComponents.default)(_box.default).withConfig({
displayName: "styles__StyledButton",
componentId: "sc-1pvy5pr-0"
})(["padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;transition:background-color 0.3s ease,box-shadow 0.3s ease;text-decoration:none;white-space:nowrap;", " ", " ", " ", " ", ""], function (p) {
return getButtonStyles(p);
}, (0, _styledSystem.variant)({
prop: 'size',
variants: {
large: {
height: (0, _utils.fluid)(48)
}
}
}), (0, _styledSystem.variant)({
prop: '$shouldFitContainer',
variants: {
true: {
width: '100%'
}
}
}), function (props) {
return props.disabled && !props.$isLoading && Disabled;
}, function (props) {
return props.$isLoading && Loading;
});
var getButtonStyles = function getButtonStyles(props) {
var _props$theme$helpers$ = props.theme.helpers.getFills({
appearance: props.$styleType,
color: props.$textColor,
reverse: props.$reverseColor
}),
shadow = _props$theme$helpers$.boxShadow,
active = _props$theme$helpers$.active,
hover = _props$theme$helpers$.hover,
focus = _props$theme$helpers$.focus,
defaultStyles = _objectWithoutPropertiesLoose(_props$theme$helpers$, _excluded);
var borderSize = {
medium: 4,
large: 8
};
var flexs = {
right: 'row',
left: 'row-reverse'
};
var flex = flexs[props.$direction];
var borderRadius = borderSize[props.size];
var boxShadow = !props.$hasShadow ? null : shadow;
return _extends({}, defaultStyles, {
boxShadow: boxShadow,
borderRadius: borderRadius,
flexDirection: flex,
active: active,
hover: hover,
focus: focus,
'&[data-active-item]': hover,
'&:active,&[data-active]': hover,
'&:not([disabled]):hover': hover,
'&:not([disabled]):focus:focus-visible': focus,
'&:not([disabled]):active': active,
'&:not([disabled]):active:focus:focus-visible': active
});
};
var TextButton = exports.TextButton = (0, _styledComponents.default)(_text.default).withConfig({
displayName: "styles__TextButton",
componentId: "sc-1pvy5pr-1"
})(["margin:", ";text-overflow:ellipsis;overflow:hidden;"], function (p) {
return getMargin(p);
});
var margins = {
medium: {
text: {
default: (0, _utils.fluid)(8) + " " + (0, _utils.fluid)(16) + " " + (0, _utils.fluid)(8) + " " + (0, _utils.fluid)(16),
right: (0, _utils.fluid)(8) + " " + (0, _utils.fluid)(8) + " " + (0, _utils.fluid)(8) + " " + (0, _utils.fluid)(12),
left: (0, _utils.fluid)(8) + " " + (0, _utils.fluid)(12) + " " + (0, _utils.fluid)(8) + " " + (0, _utils.fluid)(8)
},
icon: {
default: "" + (0, _utils.fluid)(4),
right: "0 " + (0, _utils.fluid)(4) + " 0 0",
left: "0 0 0 " + (0, _utils.fluid)(4)
}
},
large: {
text: {
default: "0 " + (0, _utils.fluid)(24),
right: "0 " + (0, _utils.fluid)(12) + " 0 " + (0, _utils.fluid)(16),
left: "0 " + (0, _utils.fluid)(16) + " 0 " + (0, _utils.fluid)(12)
},
icon: {
default: "" + (0, _utils.fluid)(12),
right: "0 " + (0, _utils.fluid)(12) + " 0 0",
left: "0 0 0 " + (0, _utils.fluid)(12)
}
}
};
var LoadingIcon = exports.LoadingIcon = (0, _styledComponents.default)(_spinner.default).withConfig({
displayName: "styles__LoadingIcon",
componentId: "sc-1pvy5pr-2"
})(["margin:", ";flex-shrink:0;"], function (p) {
return getMarginIcon(p);
});
var IconButton = exports.IconButton = (0, _styledComponents.default)(_icon.default).withConfig({
displayName: "styles__IconButton",
componentId: "sc-1pvy5pr-3"
})(["margin:", ";flex-shrink:0;"], function (p) {
return getMarginIcon(p);
});
var Disabled = function Disabled() {
return (0, _styledComponents.css)(["opacity:0.24;cursor:not-allowed;box-shadow:none;"]);
};
var Loading = function Loading() {
return (0, _styledComponents.css)(["pointer-events:none;> *{pointer-events:none;}"]);
};
var getMargin = function getMargin(p) {
var sizeVariant = p.size === 'xs' ? 'medium' : 'large';
var directionVariant = p.icon === '' || !p.icon ? 'default' : p.$direction;
return margins[sizeVariant].text[directionVariant];
};
var getMarginIcon = function getMarginIcon(p) {
var directionVariant = p.$hasText ? p.$direction : 'default';
return margins[p.$size].icon[directionVariant];
};
var sizes = exports.sizes = {
medium: {
text: 'xs',
icon: 24
},
large: {
text: 'md',
icon: 24
}
};