dify/web/utils/clipboard.ts
Stephen Zhou 48452aefbc
feat: app deploy (#35670)
Co-authored-by: zhangx1n <zhangxin@dify.ai>
Co-authored-by: yyh <yuanyouhuilyz@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-06-17 09:28:43 +00:00

43 lines
1.1 KiB
TypeScript

export async function writeTextToClipboard(text: string): Promise<void> {
if (window.isSecureContext && navigator.clipboard && navigator.clipboard.writeText) {
try {
await navigator.clipboard.writeText(text)
return
}
catch {
// Fall through to the legacy path when browsers deny Clipboard API access.
}
}
return fallbackCopyTextToClipboard(text)
}
async function fallbackCopyTextToClipboard(text: string): Promise<void> {
const textArea = document.createElement('textarea')
textArea.value = text
textArea.style.position = 'fixed' // Avoid scrolling to bottom
document.body.appendChild(textArea)
textArea.focus()
textArea.select()
try {
const successful = document.execCommand('copy')
if (successful)
return Promise.resolve()
return Promise.reject(new Error('document.execCommand failed'))
}
catch (err) {
return Promise.reject(convertAnyToError(err))
}
finally {
document.body.removeChild(textArea)
}
}
function convertAnyToError(err: unknown): Error {
if (err instanceof Error)
return err
return new Error(`Caught: ${String(err)}`)
}