Skip to Content

CopyButton

Copy given text to clipboard.

Import

import { CopyButton } from '@tidbcloud/uikit'

Usage

CopyButton is based on useClipboard hook. Its children is a render function that receives an object with copied (boolean) and copy (function) properties.

import { CopyButton, Button } from '@tidbcloud/uikit' function Demo() { return ( <CopyButton value="https://mantine.dev"> {({ copied, copy }) => ( <Button color={copied ? 'teal' : 'blue'} onClick={copy}> {copied ? 'Copied url' : 'Copy url'} </Button> )} </CopyButton> ) }

With ActionIcon and Tooltip

import { ActionIcon, CopyButton, Tooltip } from '@tidbcloud/uikit' import { IconCopy, IconCheck } from '@tabler/icons-react' function Demo() { return ( <CopyButton value="https://mantine.dev" timeout={2000}> {({ copied, copy }) => ( <Tooltip label={copied ? 'Copied' : 'Copy'} withArrow position="right"> <ActionIcon color={copied ? 'teal' : 'gray'} variant="subtle" onClick={copy}> {copied ? <IconCheck size={16} /> : <IconCopy size={16} />} </ActionIcon> </Tooltip> )} </CopyButton> ) }

Timeout

You can provide a custom copied reset timeout (default is 1000ms):

import { CopyButton, Button } from '@tidbcloud/uikit' function Demo() { return ( <CopyButton value="https://mantine.dev" timeout={2000}> {({ copied, copy }) => <Button onClick={copy}>{copied ? 'Copied!' : 'Copy'}</Button>} </CopyButton> ) }

Security note

Due to security reasons, CopyButton will not work in iframes and may not work with local files opened with file:// protocol. It works fine with local websites using http:// protocol.

Props

PropTypeDefaultDescription
valuestringrequiredValue to copy to clipboard
children(payload: { copied: boolean; copy: () => void }) => ReactNoderequiredRender function
timeoutnumber1000Copied status timeout in ms
Last updated on