function fallbackCopyToClipboard(text: string): boolean {
if (!text || typeof document === 'undefined') {
return false;
}
const textarea = document.createElement('textarea');
textarea.value = text;
textarea.setAttribute('readonly', '');
textarea.style.position = 'fixed';
textarea.style.opacity = '0';
textarea.style.pointerEvents = 'none';
document.body.appendChild(textarea);
textarea.focus();
textarea.select();
let copied = false;
try {
copied = document.execCommand('copy');
} catch {
copied = false;
} finally {
document.body.removeChild(textarea);
}
return copied;
}
export async function copyTextToClipboard(text: string): Promise<boolean> {
if (!text) {
return false;
}
let copied = false;
try {
if (
typeof window !== 'undefined' &&
window.isSecureContext &&
typeof navigator !== 'undefined' &&
navigator.clipboard?.writeText
) {
await navigator.clipboard.writeText(text);
copied = true;
}
} catch {
copied = false;
}
if (!copied) {
copied = fallbackCopyToClipboard(text);
}
return copied;
}