|  | @@ -0,0 +1,47 @@
 | 
	
		
			
				|  |  | +import { ref } from 'vue'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const useClipboard = () => {
 | 
	
		
			
				|  |  | +  const copied = ref(false)
 | 
	
		
			
				|  |  | +  const text = ref('')
 | 
	
		
			
				|  |  | +  const isSupported = ref(false)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if (!navigator.clipboard && !document.execCommand) {
 | 
	
		
			
				|  |  | +    isSupported.value = false
 | 
	
		
			
				|  |  | +  } else {
 | 
	
		
			
				|  |  | +    isSupported.value = true
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const copy = (str: string) => {
 | 
	
		
			
				|  |  | +    if (navigator.clipboard) {
 | 
	
		
			
				|  |  | +      navigator.clipboard.writeText(str).then(() => {
 | 
	
		
			
				|  |  | +        text.value = str
 | 
	
		
			
				|  |  | +        copied.value = true
 | 
	
		
			
				|  |  | +        resetCopied()
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +      return
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    const input = document.createElement('input')
 | 
	
		
			
				|  |  | +    input.setAttribute('readonly', 'readonly')
 | 
	
		
			
				|  |  | +    input.setAttribute('value', str)
 | 
	
		
			
				|  |  | +    document.body.appendChild(input)
 | 
	
		
			
				|  |  | +    input.select()
 | 
	
		
			
				|  |  | +    input.setSelectionRange(0, 9999)
 | 
	
		
			
				|  |  | +    if (document.execCommand('copy')) {
 | 
	
		
			
				|  |  | +      text.value = str
 | 
	
		
			
				|  |  | +      document.execCommand('copy')
 | 
	
		
			
				|  |  | +      copied.value = true
 | 
	
		
			
				|  |  | +      resetCopied()
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    document.body.removeChild(input)
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const resetCopied = () => {
 | 
	
		
			
				|  |  | +    setTimeout(() => {
 | 
	
		
			
				|  |  | +      copied.value = false
 | 
	
		
			
				|  |  | +    }, 1500)
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  return { copy, text, copied, isSupported }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export { useClipboard }
 |