Files
archy/packages/app/src/composables/useWebShare.ts
T

49 lines
1001 B
TypeScript
Raw Normal View History

import { ref } from 'vue'
export function useWebShare() {
const isSupported = 'share' in navigator
const showFallback = ref(false)
const fallbackText = ref('')
const fallbackUrl = ref('')
async function share(data: { title?: string; text?: string; url?: string }) {
if (isSupported) {
try {
await navigator.share(data)
return true
} catch {
// User cancelled or not supported
}
}
// Fallback: show glass share sheet
fallbackText.value = data.text ?? data.title ?? ''
fallbackUrl.value = data.url ?? ''
showFallback.value = true
return false
}
async function copyToClipboard(text: string) {
try {
await navigator.clipboard.writeText(text)
return true
} catch {
return false
}
}
function closeFallback() {
showFallback.value = false
}
return {
isSupported,
showFallback,
fallbackText,
fallbackUrl,
share,
copyToClipboard,
closeFallback,
}
}