/** * Share utility with Web Share API and clipboard fallback. * Returns { success: boolean, method: 'share' | 'clipboard' } */ export async function share(url) { // Try Web Share API first if (navigator.share) { try { await navigator.share({ url }); return { success: true, method: 'share' }; } catch (err) { // User cancelled or error - fall through to clipboard if (err.name === 'AbortError') { return { success: false, method: 'share' }; } } } // Fallback to clipboard try { await navigator.clipboard.writeText(url); return { success: true, method: 'clipboard' }; } catch (err) { console.error('Failed to copy to clipboard:', err); return { success: false, method: 'clipboard' }; } }