UNPKG

@cimpress/react-components

Version:
62 lines 2.65 kB
var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; import React, { useState } from 'react'; import copy from 'copy-to-clipboard'; import { css, cx } from '@emotion/css'; import { Tooltip } from '../Tooltip'; import { Button } from '../Button'; import { CopySvg } from './CopySvg'; import cvar from '../theme/cvar'; const copyTextCss = css ` cursor: pointer; background-color: ${cvar('color-button-secondary-hover')}; color: ${cvar('color-text-interactive')}; font-weight: 400; border: none; padding: 0; &:hover, &:active { background-color: ${cvar('color-button-secondary-hover')}; } `; const svgWrapperCss = css ` display: inline-flex; align-self: center; top: 0.125em; position: relative; padding-left: ${cvar('spacing-4')}; `; const pointer = css ` cursor: pointer; `; export const Copy = (_a) => { var { variant = 'text', children, value, successMessage = 'Copied successfully.', onClick, hoverText, duration = 1500, className } = _a, rest = __rest(_a, ["variant", "children", "value", "successMessage", "onClick", "hoverText", "duration", "className"]); const [copied, setCopied] = useState(false); const textOnHover = hoverText || (variant !== 'button' ? 'Click To Copy' : ''); const clickHandler = (e) => { copy(value || ''); setCopied(true); setTimeout(() => setCopied(false), duration); if (onClick) onClick(e); }; const child = variant === 'button' ? (children || 'Copy') : (React.createElement(React.Fragment, null, children || value, React.createElement("div", { className: svgWrapperCss }, React.createElement(CopySvg, { color: cvar('color-text-interactive'), size: "1em", "aria-hidden": true })))); const button = (React.createElement(Button, Object.assign({ className: cx({ [copyTextCss]: variant !== 'button' }, pointer, className), onClick: clickHandler }, rest, { "aria-label": `${children || value}. ${textOnHover}` }), child)); if (variant === 'button' && !copied) { return button; } return (React.createElement(Tooltip, { direction: "top", contents: copied ? successMessage : textOnHover }, button)); }; //# sourceMappingURL=Copy.js.map