UNPKG

@dnanpm/styleguide

Version:

DNA Styleguide repository provides the set of components and theme object used in various DNA projects.

117 lines (104 loc) 4.81 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib = require('tslib'); var icons = require('@dnanpm/icons'); var React = require('react'); var reactTooltip = require('react-tooltip'); var styledComponents = require('styled-components'); var theme = require('../../themes/theme.js'); var common = require('../../utils/common.js'); var styledUtils = require('../../utils/styledUtils.js'); var Icon = require('../Icon/Icon.js'); function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefaultCompat(React); const Helper = styledComponents.styled.button ` display: inline-block; vertical-align: middle; background: transparent; border: none; padding: 0; margin: 0; color: inherit; font: inherit; text-align: inherit; text-decoration: none; outline: inherit; pointer-events: auto; height: 1rem; &:focus-visible { outline: none; box-shadow: 0px 0px 0px 2px ${theme.default.color.focus.light}, 0px 0px 0px 4px ${theme.default.color.focus.dark}; border-radius: 100%; } ${({ $isClickable }) => $isClickable && `cursor: pointer`}; `; const getArrowOverrides = () => { const arrowConfig = { top: ['bottom', '45deg'], right: ['left', '135deg'], bottom: ['top', '225deg'], left: ['right', '315deg'], }; return Object.entries(arrowConfig) .map(([placement, value]) => ` &.react-tooltip__place-${placement} { & .react-tooltip-arrow { ${value[0]}: -${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 0.6)} !important; transform: rotate(${value[1]}); } } `) .join(''); }; const StyledReactTooltip = styledComponents.styled(reactTooltip.Tooltip) ` --rt-opacity: 1; border: 1px solid ${theme.default.color.line.L02}; padding: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.5)}; text-align: center; font-size: ${theme.default.fontSize.default}; line-height: ${theme.default.lineHeight.default}; width: max-content; max-width: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 25)}; color: ${theme.default.color.text.black}; background-color: ${theme.default.color.background.white.default}; border-radius: ${theme.default.radius.s}; ${common.default({ elevation: 'low' })} & .react-tooltip-arrow { width: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.2)}; height: ${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 1.2)}; border-bottom: 1px solid ${theme.default.color.line.L02}; border-right: 1px solid ${theme.default.color.line.L02}; } ${getArrowOverrides()} `; const Tooltip = (_a) => { var { 'data-testid': dataTestId, closeWithEsc = true, isClickable = false, isHoverable = false } = _a, props = tslib.__rest(_a, ['data-testid', "closeWithEsc", "isClickable", "isHoverable"]); const handleReactTooltipOpenEvents = { mouseover: !isClickable, focus: !isClickable, mouseenter: !isClickable, mousedown: !isClickable && !isHoverable, click: isClickable, dblclick: isClickable, }; const handleReactTooltipCloseEvents = { mouseout: !isClickable && !isHoverable, blur: !isClickable && !isHoverable, mouseleave: !isClickable, mouseup: !isClickable, click: isClickable, dblclick: isClickable, }; const handleReactTooltipGlobalCloseEvents = { escape: closeWithEsc, clickOutsideAnchor: true, scroll: true, }; return (React__default.default.createElement(React__default.default.Fragment, null, !props.hideTriggerElement && (React__default.default.createElement(Helper, { "data-tooltip-id": props.id, "$isClickable": isClickable, className: props.className, "data-testid": dataTestId, type: "button", "data-tooltip-delay-hide": 500, "aria-describedby": props.id }, React__default.default.createElement(Icon.default, { icon: icons.Info, size: "1rem", position: props.position, "aria-hidden": true }))), React__default.default.createElement(StyledReactTooltip, { id: props.id, place: props.placement, openOnClick: isClickable, clickable: isHoverable, "$isMultiline": props.isMultiline, disableStyleInjection: true, role: isHoverable ? 'dialog' : 'tooltip', openEvents: handleReactTooltipOpenEvents, globalCloseEvents: handleReactTooltipGlobalCloseEvents, closeEvents: handleReactTooltipCloseEvents, "data-testid": dataTestId && `${dataTestId}-content` }, props.children))); }; exports.default = Tooltip;