@particle-network/connectkit
Version:
8 lines (7 loc) • 8.63 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/components/copyToClipboard/CopyToClipboardIcon.tsx", "../../src/components/copyToClipboard/styles.ts", "../../src/components/copyToClipboard/index.tsx"],
"sourcesContent": ["import { motion } from 'framer-motion';\nimport { css, styled } from 'styled-components';\nimport CopyIcon2 from '../../assets/icons/CopyIcon2';\n\nconst IconContainer = styled(motion.div)<{ $clipboard?: boolean }>`\n transition: all 220ms cubic-bezier(0.175, 0.885, 0.32, 1.1);\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n max-width: 24px;\n svg {\n display: block;\n }\n svg,\n svg path,\n svg rect {\n transition: inherit;\n }\n svg path:first-child {\n transform-origin: 50% 50%;\n fill: var(--pcm-body-background);\n stroke: var(--pcm-body-color-secondary);\n }\n svg rect {\n transform-origin: 53% 63%;\n fill: var(--pcm-body-background);\n stroke: var(--pcm-body-color-secondary);\n }\n svg path:last-child {\n opacity: 0;\n stroke: #fff !important;\n transform: translate(11.75px, 10px) rotate(90deg) scale(0.6);\n }\n ${(props) =>\n props.$clipboard\n ? css`\n svg {\n transition-delay: 0ms;\n path:first-child {\n opacity: 0;\n transform: rotate(-90deg) scale(0.2);\n }\n rect {\n rx: 10px;\n fill: var(--pcm-accent-color);\n stroke: var(--pcm-accent-color);\n transform: rotate(-90deg) scale(1.45);\n }\n path:last-child {\n transition-delay: 100ms;\n opacity: 1;\n transform: translate(7.75px, 9.5px);\n }\n }\n `\n : css`\n &:hover {\n }\n &:hover:active {\n }\n `}\n`;\n\nconst CopyToClipboardIcon = ({ copied, small }: { copied?: boolean; small?: boolean }) => (\n <IconContainer $clipboard={copied}>\n <CopyIcon2\n style={{\n transform: small ? 'scale(1)' : 'translateX(3px) scale(1.5)',\n opacity: small || copied ? 1 : 0.6,\n }}\n />\n </IconContainer>\n);\n\nexport default CopyToClipboardIcon;\n", "import { css, styled } from 'styled-components';\n\nexport const Container = styled.div<{ $disabled?: boolean }>`\n transition: all 220ms cubic-bezier(0.175, 0.885, 0.32, 1.1);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n ${(props) =>\n props.$disabled\n ? css`\n cursor: not-allowed;\n opacity: 0.4;\n `\n : css`\n &:hover {\n }\n `}\n`;\n\nexport const OffsetContainer = styled.div`\n display: flex;\n gap: 4px;\n position: relative;\n transition: inherit;\n align-items: center;\n /* svg {\n position: absolute;\n display: block;\n top: -2px;\n margin: 0;\n margin-left: 4px;\n } */\n`;\n", "import React, { useState } from 'react';\nimport Button from '../button';\nimport CopyToClipboardIcon from './CopyToClipboardIcon';\nimport { Container, OffsetContainer } from './styles';\n\nconst CopyToClipboard: React.FC<{\n string?: string;\n children?: React.ReactNode;\n variant?: 'button';\n}> = ({ string, children, variant }) => {\n const [clipboard, setClipboard] = useState(false);\n const [className, setClassName] = useState('copied-0');\n let timeout: NodeJS.Timeout;\n\n function copyToClipboard(str) {\n if (navigator.clipboard && window.isSecureContext) {\n return navigator.clipboard\n .writeText(str)\n .then(() => {\n console.log('Text copied to clipboard');\n })\n .catch((err) => {\n console.error('Failed to copy text: ', err);\n });\n } else {\n // Fallback \u65B9\u6848\n const textArea = document.createElement('textarea');\n textArea.value = str;\n // \u4F7F textArea \u4E0D\u53EF\u89C1\n textArea.style.position = 'fixed';\n textArea.style.left = '-999999px';\n textArea.style.top = '-999999px';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n return new Promise((res, rej) => {\n // \u5BF9\u4E8E\u65E7\u7248\u6D4F\u89C8\u5668\n try {\n document.execCommand('copy');\n console.log('Text copied to clipboard');\n document.body.removeChild(textArea);\n res(true);\n } catch (err) {\n console.error('Failed to copy text: ', err);\n document.body.removeChild(textArea);\n rej(err);\n }\n });\n }\n }\n\n const onCopy = () => {\n if (!string) return;\n const str = string.trim();\n copyToClipboard(str);\n setClipboard(true);\n setClassName('copied');\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n setClipboard(false);\n setClassName('copied-0');\n }, 1000);\n };\n\n if (variant === 'button')\n return (\n <Button disabled={!string} onClick={onCopy} className={className}>\n <div\n style={{\n display: 'flex',\n gap: '8px',\n alignItems: 'center',\n overflow: 'hidden',\n }}\n >\n <div\n style={{\n width: '16px',\n }}\n >\n <CopyToClipboardIcon copied={clipboard} />\n </div>\n {children}\n </div>\n </Button>\n );\n\n return (\n <Container onClick={onCopy} $disabled={!string} className={className}>\n <OffsetContainer>\n {children as any}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n }}\n >\n <CopyToClipboardIcon copied={clipboard} small />\n </div>\n </OffsetContainer>\n </Container>\n );\n};\n\nexport default CopyToClipboard;\n"],
"mappings": "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",
"names": ["css", "styled", "jsx"]
}