suomifi-ui-components
Version:
Suomi.fi UI component library
127 lines (124 loc) • 6.23 kB
JavaScript
import { __extends, __rest, __assign, __makeTemplateObject } from 'tslib';
import React, { Component, forwardRef } from 'react';
import { styled } from 'styled-components';
import classnames from 'classnames';
import { baseStyles } from './Button.baseStyles.js';
import '../../reset/HtmlA/HtmlA.js';
import { HtmlButton } from '../../reset/HtmlButton/HtmlButton.js';
import '../../reset/HtmlDiv/HtmlDiv.js';
import '../../reset/HtmlFieldSet/HtmlFieldSet.js';
import '../../reset/HtmlH/HtmlH.js';
import '../../reset/HtmlInput/HtmlInput.js';
import '../../reset/HtmlLabel/HtmlLabel.js';
import '../../reset/HtmlLegend/HtmlLegend.js';
import '../../reset/HtmlLi/HtmlLi.js';
import '../../reset/HtmlNav/HtmlNav.js';
import '../../reset/HtmlOl/HtmlOl.js';
import { HtmlSpan } from '../../reset/HtmlSpan/HtmlSpan.js';
import '../../reset/HtmlTextarea/HtmlTextarea.js';
import '../../reset/HtmlUl/HtmlUl.js';
import '../../reset/HtmlTable/HtmlTable.js';
import '../../reset/HtmlTable/HtmlTableCaption.js';
import '../../reset/HtmlTable/HtmlTableHeader.js';
import '../../reset/HtmlTable/HtmlTableRow.js';
import '../../reset/HtmlTable/HtmlTableBody.js';
import '../../reset/HtmlTable/HtmlTableHeaderCell.js';
import '../../reset/HtmlTable/HtmlTableCell.js';
import { SuomifiThemeConsumer } from '../theme/SuomifiThemeProvider/SuomifiThemeProvider.js';
import '../theme/SuomifiTheme/SuomifiTheme.js';
import { SpacingConsumer } from '../theme/SpacingProvider/SpacingProvider.js';
import { separateMarginProps } from '../theme/utils/spacing.js';
import { IconPreloader } from 'suomifi-icons';
import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden.js';
import { filterDuplicateKeys } from '../../utils/common/common.js';
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) {
__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 = __rest(_b, ["fullWidth", "variant", "className", "loading", "ariaLoadingText", "disabled", "onClick", 'aria-disabled', "icon", "iconRight", "forwardedRef", "children", "style"]);
var _e = separateMarginProps(rest),
passProps = _e[1];
var onClickProp = !!disabled || !!ariaDisabled ? null : {
onClick: onClick
};
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(VisuallyHidden, {
"aria-live": "polite"
}, loading && ariaLoadingText), /*#__PURE__*/React.createElement(HtmlButton, __assign({}, passProps, onClickProp, !!disabled ? {} : {
tabIndex: 0
}, {
"aria-disabled": !!ariaDisabled || !!disabled,
forwardedRef: forwardedRef,
disabled: !!disabled,
className: classnames(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.createElement(IconPreloader, {
className: loadingIconClassName
}), !!icon && !loading && ( /*#__PURE__*/React.createElement(HtmlSpan, {
className: iconClassName
}, icon)), children, !!iconRight && !loading && ( /*#__PURE__*/React.createElement(HtmlSpan, {
className: classnames(iconClassName, iconRightClassName)
}, iconRight))));
};
return BaseButton;
}(Component);
var StyledButton = styled(function (_a) {
_a.theme;
_a.globalMargins;
var passProps = __rest(_a, ["theme", "globalMargins"]);
return /*#__PURE__*/React.createElement(BaseButton, __assign({}, passProps));
}).withConfig({
componentId: "sc-1ykxrn9-0"
})(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) {
var theme = _a.theme,
globalMargins = _a.globalMargins,
rest = __rest(_a, ["theme", "globalMargins"]);
var _b = separateMarginProps(rest),
marginProps = _b[0];
var cleanedGlobalMargins = filterDuplicateKeys(globalMargins.button, marginProps);
return baseStyles(theme, cleanedGlobalMargins, marginProps);
});
var Button = /*#__PURE__*/forwardRef(function (props, ref) {
return /*#__PURE__*/React.createElement(SpacingConsumer, null, function (_a) {
var margins = _a.margins;
return /*#__PURE__*/React.createElement(SuomifiThemeConsumer, null, function (_a) {
var suomifiTheme = _a.suomifiTheme;
return /*#__PURE__*/React.createElement(StyledButton, __assign({
theme: suomifiTheme,
forwardedRef: ref,
globalMargins: margins
}, props));
});
});
});
Button.displayName = 'Button';
var templateObject_1;
export { Button };
//# sourceMappingURL=Button.js.map