UNPKG

@wordpress/components

Version:
84 lines (73 loc) 2.19 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { createElement } from "@wordpress/element"; /** * External dependencies */ import classnames from 'classnames'; /** * WordPress dependencies */ import { __ } from '@wordpress/i18n'; import { forwardRef } from '@wordpress/element'; import { external } from '@wordpress/icons'; /** * Internal dependencies */ import { VisuallyHidden } from '../visually-hidden'; import { StyledIcon } from './styles/external-link-styles'; function UnforwardedExternalLink(props, ref) { const { href, children, className, rel = '', ...additionalProps } = props; const optimizedRel = [...new Set([...rel.split(' '), 'external', 'noreferrer', 'noopener'].filter(Boolean))].join(' '); const classes = classnames('components-external-link', className); /* Anchor links are perceived as external links. This constant helps check for on page anchor links, to prevent them from being opened in the editor. */ const isInternalAnchor = !!(href !== null && href !== void 0 && href.startsWith('#')); const onClickHandler = event => { if (isInternalAnchor) { event.preventDefault(); } if (props.onClick) { props.onClick(event); } }; return ( /* eslint-disable react/jsx-no-target-blank */ createElement("a", _extends({}, additionalProps, { className: classes, href: href, onClick: onClickHandler, target: "_blank", rel: optimizedRel, ref: ref }), children, createElement(VisuallyHidden, { as: "span" }, /* translators: accessibility text */ __('(opens in a new tab)')), createElement(StyledIcon, { icon: external, className: "components-external-link__icon" })) /* eslint-enable react/jsx-no-target-blank */ ); } /** * Link to an external resource. * * ```jsx * import { ExternalLink } from '@wordpress/components'; * * const MyExternalLink = () => ( * <ExternalLink href="https://wordpress.org">WordPress.org</ExternalLink> * ); * ``` */ export const ExternalLink = forwardRef(UnforwardedExternalLink); export default ExternalLink; //# sourceMappingURL=index.js.map