suomifi-ui-components
Version:
Suomi.fi UI component library
111 lines (108 loc) • 5.14 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 { 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 { IconChevronRight, IconLinkExternal } from 'suomifi-icons';
import { VisuallyHidden } from '../../VisuallyHidden/VisuallyHidden.js';
import { ExternalLinkStyles } from './ExternalLink.baseStyles.js';
import { HtmlA } from '../../../reset/HtmlA/HtmlA.js';
import '../../../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 '../../../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 { baseClassName, linkClassNames } from '../BaseLink/BaseLink.js';
import { filterDuplicateKeys } from '../../../utils/common/common.js';
var iconClassName = 'fi-link_icon';
var externalClassName = 'fi-link--external';
var BaseExternalLink = function (_super) {
__extends(BaseExternalLink, _super);
function BaseExternalLink() {
return _super !== null && _super.apply(this, arguments) || this;
}
BaseExternalLink.prototype.render = function () {
var _a;
var _b = this.props,
asProp = _b.asProp,
children = _b.children,
className = _b.className,
_c = _b.variant,
variant = _c === void 0 ? 'default' : _c,
_d = _b.toNewWindow,
toNewWindow = _d === void 0 ? true : _d,
labelNewWindow = _b.labelNewWindow,
smallScreen = _b.smallScreen;
_b.theme;
var hideIcon = _b.hideIcon,
_e = _b.underline,
underline = _e === void 0 ? 'hover' : _e,
rest = __rest(_b, ["asProp", "children", "className", "variant", "toNewWindow", "labelNewWindow", "smallScreen", "theme", "hideIcon", "underline"]);
var _f = separateMarginProps(rest),
passProps = _f[1];
return /*#__PURE__*/React.createElement(HtmlA, __assign({}, passProps, {
className: classnames(baseClassName, className, externalClassName, (_a = {}, _a[linkClassNames.linkUnderline] = underline === 'initial', _a[linkClassNames.accent] = variant === 'accent', _a[linkClassNames.small] = smallScreen, _a)),
target: !!toNewWindow ? '_blank' : undefined,
rel: !!toNewWindow ? 'noopener' : undefined,
as: asProp
}), variant === 'accent' && ( /*#__PURE__*/React.createElement(IconChevronRight, {
className: linkClassNames.accentIcon
})), children, toNewWindow && /*#__PURE__*/React.createElement(VisuallyHidden, null, labelNewWindow), !hideIcon && /*#__PURE__*/React.createElement(IconLinkExternal, {
className: iconClassName
}));
};
return BaseExternalLink;
}(Component);
var StyledExternalLink = styled(function (props) {
var theme = props.theme;
props.globalMargins;
var passProps = __rest(props, ["theme", "globalMargins"]);
return /*#__PURE__*/React.createElement(BaseExternalLink, __assign({
theme: theme
}, passProps));
}).withConfig({
componentId: "sc-1qfdw0g-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.externalLink, marginProps);
return ExternalLinkStyles(theme, cleanedGlobalMargins, marginProps);
});
var ExternalLink = /*#__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(StyledExternalLink, __assign({
theme: suomifiTheme,
globalMargins: margins,
forwardedRef: ref
}, props));
});
});
});
ExternalLink.displayName = 'ExternalLink';
var templateObject_1;
export { ExternalLink };
//# sourceMappingURL=ExternalLink.js.map