suomifi-ui-components
Version:
Suomi.fi UI component library
134 lines (128 loc) • 6.83 kB
JavaScript
'use strict';
var tslib = require('tslib');
var React = require('react');
var styled = require('styled-components');
var classnames = require('classnames');
var Button_baseStyles = require('./Button.baseStyles.js');
require('../../reset/HtmlA/HtmlA.js');
var HtmlButton = require('../../reset/HtmlButton/HtmlButton.js');
require('../../reset/HtmlDiv/HtmlDiv.js');
require('../../reset/HtmlFieldSet/HtmlFieldSet.js');
require('../../reset/HtmlH/HtmlH.js');
require('../../reset/HtmlInput/HtmlInput.js');
require('../../reset/HtmlLabel/HtmlLabel.js');
require('../../reset/HtmlLegend/HtmlLegend.js');
require('../../reset/HtmlLi/HtmlLi.js');
require('../../reset/HtmlNav/HtmlNav.js');
require('../../reset/HtmlOl/HtmlOl.js');
var HtmlSpan = require('../../reset/HtmlSpan/HtmlSpan.js');
require('../../reset/HtmlTextarea/HtmlTextarea.js');
require('../../reset/HtmlUl/HtmlUl.js');
require('../../reset/HtmlTable/HtmlTable.js');
require('../../reset/HtmlTable/HtmlTableCaption.js');
require('../../reset/HtmlTable/HtmlTableHeader.js');
require('../../reset/HtmlTable/HtmlTableRow.js');
require('../../reset/HtmlTable/HtmlTableBody.js');
require('../../reset/HtmlTable/HtmlTableHeaderCell.js');
require('../../reset/HtmlTable/HtmlTableCell.js');
var SuomifiThemeProvider = require('../theme/SuomifiThemeProvider/SuomifiThemeProvider.js');
require('../theme/SuomifiTheme/SuomifiTheme.js');
var SpacingProvider = require('../theme/SpacingProvider/SpacingProvider.js');
var spacing = require('../theme/utils/spacing.js');
var suomifiIcons = require('suomifi-icons');
var VisuallyHidden = require('../VisuallyHidden/VisuallyHidden.js');
var common = require('../../utils/common/common.js');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var React__default = /*#__PURE__*/_interopDefault(React);
var classnames__default = /*#__PURE__*/_interopDefault(classnames);
var baseClassName = 'fi-button';
var disabledClassName = "".concat(baseClassName, "--disabled");
var iconClassName = "".concat(baseClassName, "_icon");
var iconStandaloneClassName = "".concat(baseClassName, "--icon-only");
var iconRightClassName = "".concat(baseClassName, "_icon--right");
var fullWidthClassName = "".concat(baseClassName, "--fullwidth");
var loadingButtonClassName = "".concat(baseClassName, "--loading");
var loadingButtonIconOnlyClassName = "".concat(baseClassName, "--loading-icon-only");
var loadingIconClassName = "".concat(baseClassName, "_loading-icon");
var BaseButton = function (_super) {
tslib.__extends(BaseButton, _super);
function BaseButton() {
return _super !== null && _super.apply(this, arguments) || this;
}
BaseButton.prototype.render = function () {
var _a;
var _b = this.props,
fullWidth = _b.fullWidth,
_c = _b.variant,
variant = _c === void 0 ? 'default' : _c,
className = _b.className,
loading = _b.loading,
ariaLoadingText = _b.ariaLoadingText,
disabled = _b.disabled,
onClick = _b.onClick,
_d = _b["aria-disabled"],
ariaDisabled = _d === void 0 ? loading || false : _d,
icon = _b.icon,
iconRight = _b.iconRight,
forwardedRef = _b.forwardedRef,
children = _b.children,
style = _b.style,
rest = tslib.__rest(_b, ["fullWidth", "variant", "className", "loading", "ariaLoadingText", "disabled", "onClick", 'aria-disabled', "icon", "iconRight", "forwardedRef", "children", "style"]);
var _e = spacing.separateMarginProps(rest),
passProps = _e[1];
var onClickProp = !!disabled || !!ariaDisabled ? null : {
onClick: onClick
};
return /*#__PURE__*/React__default.default.createElement(React__default.default.Fragment, null, /*#__PURE__*/React__default.default.createElement(VisuallyHidden.VisuallyHidden, {
"aria-live": "polite"
}, loading && ariaLoadingText), /*#__PURE__*/React__default.default.createElement(HtmlButton.HtmlButton, tslib.__assign({}, passProps, onClickProp, !!disabled ? {} : {
tabIndex: 0
}, {
"aria-disabled": !!ariaDisabled || !!disabled,
forwardedRef: forwardedRef,
disabled: !!disabled,
className: classnames__default.default(baseClassName, className, (_a = {}, _a[disabledClassName] = !!disabled || !!ariaDisabled, _a["".concat(baseClassName, "--inverted")] = variant === 'inverted', _a["".concat(baseClassName, "--secondary")] = variant === 'secondary', _a["".concat(baseClassName, "--secondary-noborder")] = variant === 'secondaryNoBorder', _a["".concat(baseClassName, "--secondary-light")] = variant === 'secondaryLight', _a[fullWidthClassName] = fullWidth, _a[iconStandaloneClassName] = (!!icon || !!iconRight) && !children, _a[loadingButtonClassName] = loading, _a[loadingButtonIconOnlyClassName] = loading && !children, _a)),
style: style
}), loading && /*#__PURE__*/React__default.default.createElement(suomifiIcons.IconPreloader, {
className: loadingIconClassName
}), !!icon && !loading && ( /*#__PURE__*/React__default.default.createElement(HtmlSpan.HtmlSpan, {
className: iconClassName
}, icon)), children, !!iconRight && !loading && ( /*#__PURE__*/React__default.default.createElement(HtmlSpan.HtmlSpan, {
className: classnames__default.default(iconClassName, iconRightClassName)
}, iconRight))));
};
return BaseButton;
}(React.Component);
var StyledButton = styled.styled(function (_a) {
_a.theme;
_a.globalMargins;
var passProps = tslib.__rest(_a, ["theme", "globalMargins"]);
return /*#__PURE__*/React__default.default.createElement(BaseButton, tslib.__assign({}, passProps));
}).withConfig({
componentId: "sc-1ykxrn9-0"
})(templateObject_1 || (templateObject_1 = tslib.__makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) {
var theme = _a.theme,
globalMargins = _a.globalMargins,
rest = tslib.__rest(_a, ["theme", "globalMargins"]);
var _b = spacing.separateMarginProps(rest),
marginProps = _b[0];
var cleanedGlobalMargins = common.filterDuplicateKeys(globalMargins.button, marginProps);
return Button_baseStyles.baseStyles(theme, cleanedGlobalMargins, marginProps);
});
var Button = /*#__PURE__*/React.forwardRef(function (props, ref) {
return /*#__PURE__*/React__default.default.createElement(SpacingProvider.SpacingConsumer, null, function (_a) {
var margins = _a.margins;
return /*#__PURE__*/React__default.default.createElement(SuomifiThemeProvider.SuomifiThemeConsumer, null, function (_a) {
var suomifiTheme = _a.suomifiTheme;
return /*#__PURE__*/React__default.default.createElement(StyledButton, tslib.__assign({
theme: suomifiTheme,
forwardedRef: ref,
globalMargins: margins
}, props));
});
});
});
Button.displayName = 'Button';
var templateObject_1;
exports.Button = Button;
//# sourceMappingURL=Button.js.map