UNPKG

@kiwicom/orbit-components

Version:

Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com's products.

100 lines (99 loc) 3.43 kB
"use strict"; "use client"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _clsx = _interopRequireDefault(require("clsx")); var _consts = require("./consts"); var _createRel = _interopRequireDefault(require("../primitives/ButtonPrimitive/common/createRel")); var _twClasses = require("./helpers/twClasses"); function filterAriaDataProps(props) { return Object.keys(props).reduce((acc, key) => { if (key.startsWith("data-") || key.startsWith("aria-")) { acc[key] = props[key]; } return acc; }, {}); } const getComponent = (href, asComponent) => { if (asComponent) return asComponent; if (href) return "a"; return "button"; }; const IconContainer = ({ children, size }) => { if (!children) return null; return /*#__PURE__*/React.createElement("span", { className: (0, _clsx.default)("flex items-center", { "[&_svg]:w-icon-large [&_svg]:h-icon-large": size === _consts.SIZE_OPTIONS.LARGE, "[&_svg]:w-icon-small [&_svg]:h-icon-small": size === _consts.SIZE_OPTIONS.SMALL, "[&_svg]:w-icon-medium [&_svg]:h-icon-medium": !size || size !== _consts.SIZE_OPTIONS.SMALL && size !== _consts.SIZE_OPTIONS.LARGE }) }, children); }; const TextLink = ({ ariaCurrent, type = _consts.TYPE_OPTIONS.PRIMARY, size, children, href, external = false, rel, iconLeft, iconRight, onClick, dataTest, download, id, tabIndex, asComponent, stopPropagation = false, title, standAlone, noUnderline, ref, ...props }) => { const onClickHandler = ev => { if (stopPropagation) { ev.stopPropagation(); } if (onClick) { // @ts-expect-error We can't infer the correct event type here, but it works at runtime onClick(ev); } }; const filteredAriaDataProps = filterAriaDataProps(props); const Component = getComponent(href, asComponent); return /*#__PURE__*/React.createElement(Component, (0, _extends2.default)({ ref: ref, "aria-current": ariaCurrent, id: id, href: href, target: external ? "_blank" : undefined, rel: (0, _createRel.default)({ href, external, rel }), onClick: onClickHandler, "data-test": dataTest, tabIndex: tabIndex, type: Component === "button" ? "button" : undefined, role: !href && onClick ? "button" : undefined, title: title, download: download, className: (0, _clsx.default)("orbit-text-link font-base duration-fast inline-flex cursor-pointer items-center font-medium transition-colors delay-0 ease-in-out hover:no-underline hover:outline-none active:no-underline active:outline-none", type === "secondary" && "orbit-text-link--secondary", standAlone && "h-form-box-normal", _twClasses.typeClasses[type], size != null && _twClasses.sizeClasses[size], noUnderline ? "no-underline" : "underline") }, filteredAriaDataProps), /*#__PURE__*/React.createElement(IconContainer, { size: size }, iconLeft), children, /*#__PURE__*/React.createElement(IconContainer, { size: size }, iconRight)); }; TextLink.displayName = "TextLink"; var _default = exports.default = TextLink;