Pular para o conteúdo

CopyButton

Um componente de botão para copiar texto para a área de transferência com feedback visual.

import { CopyButton } from 'asterui'

Uso Básico

Botão de copiar simples com ícone padrão. Habilite tooltip para feedback visual.

import { CopyButton, Space } from 'asterui'

function App() {
  return (
      <Space>
        <CopyButton text="Hello, World!" />
        <CopyButton text="Copy this text" showTooltip />
      </Space>
    )
}

export default App

Com Conteúdo de Texto

Exibir conteúdo de texto em vez do ícone padrão.

import { CopyButton, Space } from 'asterui'

function App() {
  return (
      <Space direction="vertical">
        <CopyButton text="npm install asterui">
          npm install asterui
        </CopyButton>
        <CopyButton text="pnpm add asterui" copiedChildren="Copied!">
          pnpm add asterui
        </CopyButton>
      </Space>
    )
}

export default App

Cores

Aplicar diferentes temas de cor ao botão.

import { CopyButton, Space } from 'asterui'

function App() {
  return (
      <Space>
        <CopyButton text="primary" color="primary" showTooltip />
        <CopyButton text="secondary" color="secondary" showTooltip />
        <CopyButton text="accent" color="accent" showTooltip />
        <CopyButton text="success" color="success" showTooltip />
      </Space>
    )
}

export default App

Variantes

Diferentes variantes de estilo de botão.

import { CopyButton, Space } from 'asterui'

function App() {
  return (
      <Space>
        <CopyButton text="solid" color="primary" />
        <CopyButton text="outline" color="primary" variant="outline" />
        <CopyButton text="ghost" variant="ghost" />
        <CopyButton text="soft" color="primary" variant="soft" />
      </Space>
    )
}

export default App

Tamanhos

Tamanhos de botão disponíveis.

import { CopyButton, Space } from 'asterui'

function App() {
  return (
      <Space align="center">
        <CopyButton text="xs" size="xs" />
        <CopyButton text="sm" size="sm" />
        <CopyButton text="md" size="md" />
        <CopyButton text="lg" size="lg" />
        <CopyButton text="xl" size="xl" />
      </Space>
    )
}

export default App

Formas

Formas de botão quadradas e circulares.

import { CopyButton, Space } from 'asterui'

function App() {
  return (
      <Space>
        <CopyButton text="square" shape="square" />
        <CopyButton text="circle" shape="circle" />
      </Space>
    )
}

export default App

Bloco de Código

Botão de copiar posicionado no canto de um bloco de código personalizado.

import { CopyButton } from 'asterui'

export const App = () => (
  <CopyButton text="Hello!" showTooltip />
)
import { CopyButton } from 'asterui'

function App() {
  const codeText = `import { CopyButton } from 'asterui'
  
  export const App = () => (
    <CopyButton text="Hello!" showTooltip />
  )`
  
  return (
      <div style={{ position: 'relative' }} className="bg-base-300 rounded-lg p-4 pr-12">
        <pre className="font-mono text-sm whitespace-pre">{codeText}</pre>
        <div style={{ position: 'absolute', top: 8, right: 8 }}>
          <CopyButton text={codeText} size="sm" variant="ghost" showTooltip />
        </div>
      </div>
    )
}

export default App

Input com Copiar

Copiar o valor de um campo de input.

import { CopyButton, Input } from 'asterui'
import { useState } from 'react'

function App() {
  const [value, setValue] = useState('https://asterui.com')
  
  return (
      <div className="flex gap-2">
        <Input value={value} onChange={(e) => setValue(e.target.value)} />
        <CopyButton text={value} color="primary" showTooltip />
      </div>
    )
}

export default App

Callbacks

Manipular eventos de sucesso e erro ao copiar.

import { CopyButton } from 'asterui'

function App() {
  return (
      <CopyButton
        text="Callback example"
        color="primary"
        onCopy={() => console.log('Copied!')}
        onError={(err) => console.error('Failed:', err)}
      >
        Copy with callback
      </CopyButton>
    )
}

export default App

Timeout Personalizado

Controlar por quanto tempo o estado copiado é mostrado.

import { CopyButton, Space } from 'asterui'

function App() {
  return (
      <Space>
        <CopyButton text="1 second" timeout={1000}>1s timeout</CopyButton>
        <CopyButton text="5 seconds" timeout={5000}>5s timeout</CopyButton>
      </Space>
    )
}

export default App
PropriedadeDescriçãoTipoPadrão
textTexto para copiar para área de transferênciastring-
timeoutDuração em ms para mostrar estado copiadonumber2000
colorCor do botão'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral'-
variantVariante de estilo do botão'solid' | 'outline' | 'dash' | 'soft' | 'ghost' | 'link'-
sizeTamanho do botão'xs' | 'sm' | 'md' | 'lg' | 'xl''md'
shapeForma do botão'square' | 'circle'-
iconÍcone personalizado para estado padrãoReactNodeÍcone de copiar
copiedIconÍcone personalizado para estado copiadoReactNodeÍcone de check
childrenConteúdo personalizado para estado padrão (sobrescreve icon)ReactNode-
copiedChildrenConteúdo personalizado para estado copiadoReactNode-
onCopyCallback quando a cópia é bem-sucedida() => void-
onErrorCallback quando a cópia falha(error: Error) => void-
showTooltipMostrar tooltip com status de cópiabooleanfalse
tooltipTextTexto do tooltip para estado padrãostring'Copy'
copiedTooltipTextTexto do tooltip para estado copiadostring'Copied!'
disabledDesabilitar o botãobooleanfalse
  • Usa elemento de botão nativo para suporte de teclado
  • Feedback visual através de mudança de ícone e tooltip opcional
  • Estado desabilitado é comunicado adequadamente