UNPKG

@geneui/components

Version:

The Gene UI components library designed for BI tools

60 lines (56 loc) 3.71 kB
import React__default, { useState, useMemo, useCallback } from 'react'; import { c as classnames } from '../index-031ff73c.js'; import 'prop-types'; import '../dateValidation-67caec66.js'; import { c as callAfterDelay } from '../callAfterDelay-7272faca.js'; import '../configs-00612ce0.js'; import useHover from '../hooks/useHover.js'; import Icon from '../Icon/index.js'; import { T as Tooltip } from '../index-6d7e99cd.js'; import { s as styleInject } from '../style-inject.es-746bb8ed.js'; import '../_commonjsHelpers-24198af3.js'; import 'react-dom'; import '../_rollupPluginBabelHelpers-e8fb2e5c.js'; import '../tslib.es6-f211516f.js'; import '../hooks/useDeviceType.js'; import '../hooks/useWindowSize.js'; import '../hooks/useDebounce.js'; import '../GeneUIProvider/index.js'; var css_248z = "[data-gene-ui-version=\"2.16.5\"] .copy{cursor:pointer;max-height:-webkit-fit-content;max-height:-moz-fit-content;max-height:fit-content;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}[data-gene-ui-version=\"2.16.5\"] .copy-controlVisibility{visibility:hidden}[data-gene-ui-version=\"2.16.5\"] .copy-pointerNon{cursor:auto}[data-gene-ui-version=\"2.16.5\"] .copy-isVisible{visibility:visible}[data-gene-ui-version=\"2.16.5\"] .copy__showOnHover{visibility:hidden}[data-gene-ui-version=\"2.16.5\"] .copy__showOnHover-show{visibility:visible}[data-gene-ui-version=\"2.16.5\"] .copy__icon{max-height:-webkit-fit-content;max-height:-moz-fit-content;max-height:fit-content;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}[data-gene-ui-version=\"2.16.5\"] .copy__icon-big{font-size:3.2rem}[data-gene-ui-version=\"2.16.5\"] .copy__icon-small{font-size:1.4rem}[data-gene-ui-version=\"2.16.5\"] .copy:hover{visibility:visible}"; styleInject(css_248z); const Copy = ({ size, value, isVisible, className, contentRef, showOnHover, copyTooltipText, copiedTooltipText }) => { const [isCopied, setIsCopied] = useState(false); const isControlledVisibility = useMemo(() => isVisible !== undefined, [isVisible]); const isHovered = contentRef ? useHover(contentRef) : false; const copyContent = useCallback((e) => { var _a; e.stopPropagation(); if (isCopied) return; const content = ((_a = contentRef === null || contentRef === void 0 ? void 0 : contentRef.current) === null || _a === void 0 ? void 0 : _a.innerText) || value; if (!content) return; navigator.clipboard .writeText(content) .then(() => { setIsCopied(true); callAfterDelay(() => { setIsCopied(false); }, 2000); }) .catch((error) => console.error('Failed to copy:', error)); }, [contentRef, isCopied, value]); return ( // @ts-ignore React__default.createElement(Tooltip, { title: isCopied ? copiedTooltipText : copyTooltipText, isVisible: true }, React__default.createElement("div", { className: classnames('copy', className, Object.assign({ copy__showOnHover: showOnHover && !value, 'copy__showOnHover-show': isHovered && !value && !isControlledVisibility, 'copy-pointerNon': isCopied, 'copy-controlVisibility': isControlledVisibility }, (isControlledVisibility ? { 'copy-isVisible': isVisible } : {}))), onClick: copyContent }, React__default.createElement(Icon, { className: `copy__icon copy__icon-${size}`, type: isCopied ? 'bc-icon-checkbox-checked' : 'bc-icon-copy-mirror' })))); }; Copy.defaultProps = { size: 'medium', showOnHover: false, copyTooltipText: 'Copy', copiedTooltipText: 'Copied!' }; Copy.displayName = 'Copy'; export { Copy as default };