react-sharesheet 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +581 -0
- package/dist/content.d.mts +10 -0
- package/dist/content.d.ts +10 -0
- package/dist/content.js +833 -0
- package/dist/content.js.map +1 -0
- package/dist/content.mjs +813 -0
- package/dist/content.mjs.map +1 -0
- package/dist/drawer.d.mts +10 -0
- package/dist/drawer.d.ts +10 -0
- package/dist/drawer.js +960 -0
- package/dist/drawer.js.map +1 -0
- package/dist/drawer.mjs +940 -0
- package/dist/drawer.mjs.map +1 -0
- package/dist/headless.d.mts +51 -0
- package/dist/headless.d.ts +51 -0
- package/dist/headless.js +405 -0
- package/dist/headless.js.map +1 -0
- package/dist/headless.mjs +364 -0
- package/dist/headless.mjs.map +1 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +1040 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +991 -0
- package/dist/index.mjs.map +1 -0
- package/dist/platforms-DU1DVDFq.d.mts +280 -0
- package/dist/platforms-DU1DVDFq.d.ts +280 -0
- package/package.json +88 -0
- package/src/ShareSheetContent.tsx +538 -0
- package/src/ShareSheetDrawer.tsx +128 -0
- package/src/content.ts +4 -0
- package/src/drawer.ts +4 -0
- package/src/headless.ts +45 -0
- package/src/hooks.ts +192 -0
- package/src/index.ts +68 -0
- package/src/platforms.tsx +186 -0
- package/src/share-functions.ts +63 -0
- package/src/types.ts +236 -0
- package/src/utils.ts +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ShareSheetContent.tsx","../src/utils.ts","../src/hooks.ts","../src/share-functions.ts","../src/platforms.tsx","../src/types.ts","../src/ShareSheetDrawer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, useState, useCallback } from \"react\";\nimport { Image, FileText, Music, Film, Link2, Play } from \"lucide-react\";\nimport { cn } from \"./utils\";\nimport { useShareSheet } from \"./hooks\";\nimport {\n PLATFORM_IDS,\n PLATFORM_COLORS,\n PLATFORM_LABELS,\n PLATFORM_ICONS,\n PLATFORM_CSS_VARS,\n} from \"./platforms\";\nimport {\n CSS_VARS_UI,\n CSS_VAR_UI_DEFAULTS,\n type ShareSheetContentProps,\n type ShareOption,\n type ShareButtonConfig,\n type PreviewConfig,\n type PreviewType,\n} from \"./types\";\n\nconst DEFAULT_BUTTON_SIZE = 45;\nconst DEFAULT_ICON_SIZE = 22;\n\n// File extension mappings\nconst IMAGE_EXTENSIONS = [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"svg\", \"bmp\", \"ico\", \"avif\"];\nconst VIDEO_EXTENSIONS = [\"mp4\", \"webm\", \"mov\", \"avi\", \"mkv\", \"m4v\", \"ogv\"];\nconst AUDIO_EXTENSIONS = [\"mp3\", \"wav\", \"ogg\", \"m4a\", \"aac\", \"flac\", \"wma\"];\n\n// Detect content type from URL\nfunction detectPreviewType(url: string): PreviewType {\n try {\n const pathname = new URL(url, \"http://localhost\").pathname;\n const ext = pathname.split(\".\").pop()?.toLowerCase() || \"\";\n \n if (IMAGE_EXTENSIONS.includes(ext)) return \"image\";\n if (VIDEO_EXTENSIONS.includes(ext)) return \"video\";\n if (AUDIO_EXTENSIONS.includes(ext)) return \"audio\";\n \n // Check for common patterns\n if (url.includes(\"/api/og\") || url.includes(\"og-image\")) return \"image\";\n if (url.includes(\"youtube.com\") || url.includes(\"vimeo.com\")) return \"video\";\n \n return \"link\";\n } catch {\n return \"link\";\n }\n}\n\n// Get filename from URL\nfunction getFilenameFromUrl(url: string): string {\n try {\n const pathname = new URL(url, \"http://localhost\").pathname;\n const filename = pathname.split(\"/\").pop() || \"\";\n return decodeURIComponent(filename);\n } catch {\n return url;\n }\n}\n\n// Default class names\nconst defaultClasses = {\n root: \"max-w-md mx-auto\",\n header: \"text-center mb-2\",\n title: \"text-2xl font-black\",\n subtitle: \"mt-1 text-sm\",\n preview: \"flex justify-center mb-4 px-4\",\n previewSkeleton: \"rounded-xl overflow-hidden\",\n previewImage: \"\",\n previewVideo: \"\",\n previewFile: \"\",\n previewFileIcon: \"\",\n previewFilename: \"truncate\",\n previewLink: \"\",\n grid: \"px-2 py-6 flex flex-row items-center gap-4 gap-y-6 flex-wrap justify-center\",\n button: \"flex flex-col items-center gap-0 text-xs w-[60px] outline-none cursor-pointer group\",\n buttonIcon: \"p-2 rounded-full transition-all flex items-center justify-center group-hover:scale-110 group-active:scale-95 mb-2\",\n buttonLabel: \"\",\n};\n\n// Shimmer keyframes as inline style\nconst shimmerKeyframes = `\n@keyframes sharesheet-shimmer {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(100%); }\n}\n`;\n\n// Helper to create var() with fallback\nfunction cssVar(name: string, fallback: string): string {\n return `var(${name}, ${fallback})`;\n}\n\n// Normalize preview prop to PreviewConfig\nfunction normalizePreview(preview: string | PreviewConfig | null | undefined): PreviewConfig | null {\n if (!preview) return null;\n \n if (typeof preview === \"string\") {\n const type = detectPreviewType(preview);\n return {\n url: preview,\n type,\n filename: getFilenameFromUrl(preview),\n };\n }\n \n // It's already a config object\n const type = preview.type === \"auto\" || !preview.type ? detectPreviewType(preview.url) : preview.type;\n \n return {\n ...preview,\n type,\n filename: preview.filename || getFilenameFromUrl(preview.url),\n };\n}\n\nexport function ShareSheetContent({\n title = \"Share\",\n shareUrl,\n shareText,\n preview,\n downloadUrl,\n downloadFilename,\n className,\n classNames = {},\n buttonSize = DEFAULT_BUTTON_SIZE,\n iconSize = DEFAULT_ICON_SIZE,\n onNativeShare,\n onCopy,\n onDownload,\n hide = [],\n show,\n labels = {},\n icons = {},\n}: ShareSheetContentProps) {\n const [mediaLoaded, setMediaLoaded] = useState(false);\n const [mediaError, setMediaError] = useState(false);\n\n const handleMediaLoad = useCallback(() => {\n setMediaLoaded(true);\n }, []);\n\n const handleMediaError = useCallback(() => {\n setMediaError(true);\n }, []);\n\n // Normalize preview config\n const previewConfig = useMemo(() => normalizePreview(preview), [preview]);\n\n const shareSheet = useShareSheet({\n shareUrl,\n shareText,\n downloadUrl,\n downloadFilename,\n emailSubject: title,\n onNativeShare,\n onCopy,\n onDownload,\n });\n\n // Map platform IDs to their share actions\n const shareActions: Record<ShareOption, () => void> = useMemo(() => ({\n native: () => void shareSheet.nativeShare(),\n copy: () => void shareSheet.copyLink(),\n download: () => void shareSheet.downloadFile(),\n whatsapp: shareSheet.shareWhatsApp,\n telegram: shareSheet.shareTelegram,\n instagram: shareSheet.shareInstagram,\n facebook: shareSheet.shareFacebook,\n snapchat: shareSheet.shareSnapchat,\n sms: shareSheet.shareSMS,\n email: shareSheet.shareEmail,\n linkedin: shareSheet.shareLinkedIn,\n reddit: shareSheet.shareReddit,\n x: shareSheet.shareX,\n tiktok: shareSheet.shareTikTok,\n threads: shareSheet.shareThreads,\n }), [shareSheet]);\n\n // Dynamic labels that depend on state\n const dynamicLabels: Partial<Record<ShareOption, string>> = useMemo(() => ({\n copy: shareSheet.copied ? \"Copied!\" : PLATFORM_LABELS.copy,\n download: shareSheet.downloading ? \"...\" : PLATFORM_LABELS.download,\n }), [shareSheet.copied, shareSheet.downloading]);\n\n // Build button configs from platform data\n const buttons: ShareButtonConfig[] = useMemo(() => {\n return PLATFORM_IDS.map((id) => {\n const Icon = PLATFORM_ICONS[id];\n const defaultLabel = dynamicLabels[id] ?? PLATFORM_LABELS[id];\n \n return {\n id,\n label: labels[id] ?? defaultLabel,\n icon: icons[id] ?? <Icon size={iconSize} />,\n // Use CSS var with fallback to platform color\n bgColor: cssVar(PLATFORM_CSS_VARS[id], PLATFORM_COLORS[id].bg),\n textColor: PLATFORM_COLORS[id].text,\n onClick: shareActions[id],\n // Conditions for showing certain buttons\n condition: id === \"native\" ? shareSheet.canNativeShare\n : id === \"download\" ? !!downloadUrl\n : true,\n };\n });\n }, [iconSize, labels, icons, dynamicLabels, shareActions, shareSheet.canNativeShare, downloadUrl]);\n\n const visibleButtons = useMemo(() => {\n return buttons.filter((btn) => {\n // Check condition (e.g., canNativeShare, downloadUrl exists)\n if (btn.condition === false) return false;\n // Filter by show list if provided\n if (show && show.length > 0) return show.includes(btn.id);\n // Filter by hide list\n if (hide.includes(btn.id)) return false;\n return true;\n });\n }, [buttons, show, hide]);\n\n const showPreview = !!previewConfig;\n\n // Render preview based on type\n const renderPreview = () => {\n if (!previewConfig) return null;\n\n const { type, url, filename, alt, poster } = previewConfig;\n const bgColor = cssVar(CSS_VARS_UI.previewBg, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.previewBg]);\n const shimmerColor = cssVar(CSS_VARS_UI.previewShimmer, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.previewShimmer]);\n const textColor = cssVar(CSS_VARS_UI.subtitleColor, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.subtitleColor]);\n\n // Floating URL label (centered below)\n const UrlLabel = ({ displayUrl = url }: { displayUrl?: string }) => (\n <div\n className={cn(defaultClasses.previewFilename, classNames.previewFilename)}\n style={{ \n color: textColor, \n fontSize: \"10px\",\n opacity: 0.5,\n textAlign: \"center\",\n marginTop: \"6px\",\n }}\n >\n {displayUrl}\n </div>\n );\n\n // Placeholder card for non-media types or loading/error states\n const PlaceholderCard = ({ \n icon: IconComponent, \n isLoading = false,\n label,\n displayUrl,\n }: { \n icon: typeof Link2; \n isLoading?: boolean;\n label?: string;\n displayUrl?: string;\n }) => (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n <div\n className={cn(defaultClasses.previewSkeleton, classNames.previewSkeleton)}\n style={{\n position: \"relative\",\n backgroundColor: bgColor,\n width: \"200px\",\n height: \"120px\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {isLoading && (\n <div style={{ position: \"absolute\", inset: 0, overflow: \"hidden\" }}>\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: `linear-gradient(90deg, transparent, ${shimmerColor}, transparent)`,\n animation: \"sharesheet-shimmer 1.5s infinite\",\n }}\n />\n </div>\n )}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n }}\n >\n <IconComponent size={32} style={{ color: textColor, opacity: 0.4 }} />\n {label && (\n <span style={{ color: textColor, fontSize: \"11px\", opacity: 0.4 }}>\n {label}\n </span>\n )}\n </div>\n </div>\n <UrlLabel displayUrl={displayUrl} />\n </div>\n );\n\n // If there was an error loading media, show fallback\n if (mediaError && (type === \"image\" || type === \"video\")) {\n return <PlaceholderCard icon={Link2} displayUrl={url} />;\n }\n\n switch (type) {\n case \"image\":\n // Show placeholder while loading, then show image with correct aspect ratio\n if (!mediaLoaded) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n <div\n className={cn(defaultClasses.previewSkeleton, classNames.previewSkeleton)}\n style={{\n position: \"relative\",\n backgroundColor: bgColor,\n width: \"200px\",\n height: \"120px\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <div style={{ position: \"absolute\", inset: 0, overflow: \"hidden\" }}>\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: `linear-gradient(90deg, transparent, ${shimmerColor}, transparent)`,\n animation: \"sharesheet-shimmer 1.5s infinite\",\n }}\n />\n </div>\n <Image size={32} style={{ color: textColor, opacity: 0.4 }} />\n </div>\n <UrlLabel />\n {/* Hidden image for preloading */}\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={url}\n alt={alt || \"Preview\"}\n onLoad={handleMediaLoad}\n onError={handleMediaError}\n style={{ display: \"none\" }}\n />\n </div>\n );\n }\n // Image loaded - show with correct aspect ratio\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={url}\n alt={alt || \"Preview\"}\n className={cn(defaultClasses.previewImage, classNames.previewImage)}\n style={{\n maxWidth: \"100%\",\n maxHeight: \"180px\",\n borderRadius: \"12px\",\n opacity: 1,\n transition: \"opacity 0.3s ease-in-out\",\n }}\n />\n <UrlLabel />\n </div>\n );\n\n case \"video\":\n if (!mediaLoaded) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n <div\n className={cn(defaultClasses.previewSkeleton, classNames.previewSkeleton)}\n style={{\n position: \"relative\",\n backgroundColor: bgColor,\n width: \"200px\",\n height: \"120px\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <div style={{ position: \"absolute\", inset: 0, overflow: \"hidden\" }}>\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: `linear-gradient(90deg, transparent, ${shimmerColor}, transparent)`,\n animation: \"sharesheet-shimmer 1.5s infinite\",\n }}\n />\n </div>\n <Film size={32} style={{ color: textColor, opacity: 0.4 }} />\n </div>\n <UrlLabel />\n {/* Hidden video for preloading */}\n <video\n src={url}\n poster={poster}\n onLoadedData={handleMediaLoad}\n onError={handleMediaError}\n style={{ display: \"none\" }}\n muted\n playsInline\n preload=\"metadata\"\n />\n </div>\n );\n }\n // Video loaded\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n <div style={{ position: \"relative\", borderRadius: \"12px\", overflow: \"hidden\" }}>\n <video\n src={url}\n poster={poster}\n className={cn(defaultClasses.previewVideo, classNames.previewVideo)}\n style={{\n maxWidth: \"100%\",\n maxHeight: \"180px\",\n display: \"block\",\n }}\n muted\n playsInline\n preload=\"metadata\"\n />\n {/* Play icon overlay */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n pointerEvents: \"none\",\n }}\n >\n <div\n style={{\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n borderRadius: \"50%\",\n padding: \"10px\",\n }}\n >\n <Play size={20} fill=\"white\" color=\"white\" />\n </div>\n </div>\n </div>\n <UrlLabel />\n </div>\n );\n\n case \"audio\":\n return <PlaceholderCard icon={Music} label={filename || \"Audio\"} displayUrl={url} />;\n\n case \"file\":\n return <PlaceholderCard icon={FileText} label={filename || \"File\"} displayUrl={url} />;\n\n case \"link\":\n default:\n return <PlaceholderCard icon={Link2} displayUrl={url} />;\n }\n };\n\n return (\n <div className={cn(defaultClasses.root, classNames.root, className)}>\n {/* Inject shimmer keyframes */}\n <style dangerouslySetInnerHTML={{ __html: shimmerKeyframes }} />\n\n <div className={cn(defaultClasses.header, classNames.header)}>\n <div\n className={cn(defaultClasses.title, classNames.title)}\n style={{ color: cssVar(CSS_VARS_UI.titleColor, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.titleColor]) }}\n >\n {title}\n </div>\n <div\n className={cn(defaultClasses.subtitle, classNames.subtitle)}\n style={{ color: cssVar(CSS_VARS_UI.subtitleColor, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.subtitleColor]) }}\n >\n {shareText}\n </div>\n </div>\n\n {/* Content Preview */}\n {showPreview && (\n <div className={cn(defaultClasses.preview, classNames.preview)}>\n {renderPreview()}\n </div>\n )}\n\n <div className={cn(defaultClasses.grid, classNames.grid)}>\n {visibleButtons.map((btn) => (\n <button\n key={btn.id}\n type=\"button\"\n className={cn(defaultClasses.button, classNames.button)}\n onClick={btn.onClick}\n >\n <div\n className={cn(defaultClasses.buttonIcon, classNames.buttonIcon)}\n style={{\n width: buttonSize,\n height: buttonSize,\n backgroundColor: btn.bgColor,\n color: btn.textColor,\n }}\n >\n {btn.icon}\n </div>\n <div\n className={cn(defaultClasses.buttonLabel, classNames.buttonLabel)}\n style={{ color: cssVar(CSS_VARS_UI.buttonLabelColor, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.buttonLabelColor]) }}\n >\n {btn.label}\n </div>\n </button>\n ))}\n </div>\n </div>\n );\n}\n\n// Legacy export for backwards compatibility\n/** @deprecated Use ShareSheetContent instead */\nexport const ShareMenuContent = ShareSheetContent;\n\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport function openUrl(url: string) {\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n}\n\nexport function getSafeUrl(shareUrl: string): string {\n return shareUrl || (typeof window !== \"undefined\" ? window.location.href : \"\");\n}\n\n","\"use client\";\n\nimport { useMemo, useState, useCallback } from \"react\";\nimport { getSafeUrl } from \"./utils\";\nimport {\n shareToWhatsApp,\n shareToTelegram,\n shareToX,\n shareToFacebook,\n openInstagram,\n openTikTok,\n openThreads,\n shareToSnapchat,\n shareViaSMS,\n shareViaEmail,\n shareToLinkedIn,\n shareToReddit,\n} from \"./share-functions\";\nimport type { UseShareSheetReturn } from \"./types\";\n\nexport interface UseShareSheetOptions {\n /** URL to share */\n shareUrl: string;\n /** Text to share */\n shareText: string;\n /** Download URL (optional) */\n downloadUrl?: string | null;\n /** Download filename (optional) */\n downloadFilename?: string;\n /** Email subject (optional) */\n emailSubject?: string;\n /** Callback after native share */\n onNativeShare?: () => void;\n /** Callback after copy */\n onCopy?: () => void;\n /** Callback after download starts */\n onDownload?: () => void;\n}\n\n/**\n * Headless hook for share sheet functionality.\n * Use this to build your own custom share UI.\n */\nexport function useShareSheet({\n shareUrl,\n shareText,\n downloadUrl,\n downloadFilename,\n emailSubject = \"Share\",\n onNativeShare,\n onCopy,\n onDownload,\n}: UseShareSheetOptions): UseShareSheetReturn {\n const [copied, setCopied] = useState(false);\n const [downloading, setDownloading] = useState(false);\n\n const canNativeShare = useMemo(() => {\n return typeof navigator !== \"undefined\" && \"share\" in navigator;\n }, []);\n\n const safeUrl = getSafeUrl(shareUrl);\n\n const copyLink = useCallback(async () => {\n if (!safeUrl) return;\n try {\n await navigator.clipboard.writeText(safeUrl);\n setCopied(true);\n onCopy?.();\n setTimeout(() => setCopied(false), 1200);\n } catch {\n // ignore\n }\n }, [safeUrl, onCopy]);\n\n const nativeShare = useCallback(async () => {\n if (!safeUrl) return;\n const nav = navigator as Navigator & {\n share?: (data: ShareData) => Promise<void>;\n };\n if (!(\"share\" in nav) || typeof nav.share !== \"function\") return;\n try {\n await nav.share({\n title: shareText,\n text: shareText,\n url: safeUrl,\n });\n onNativeShare?.();\n } catch {\n // user canceled or share failed -> ignore\n }\n }, [safeUrl, shareText, onNativeShare]);\n\n const downloadFile = useCallback(async () => {\n const url = (downloadUrl ?? \"\").trim();\n if (!url) return;\n try {\n setDownloading(true);\n onDownload?.();\n const res = await fetch(url);\n if (!res.ok) throw new Error(`Failed to fetch file (${res.status})`);\n const blob = await res.blob();\n const href = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = href;\n a.download = downloadFilename || \"download\";\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(href);\n } catch {\n // ignore\n } finally {\n setDownloading(false);\n }\n }, [downloadUrl, downloadFilename, onDownload]);\n\n const shareWhatsApp = useCallback(() => {\n shareToWhatsApp(safeUrl, shareText);\n }, [safeUrl, shareText]);\n\n const shareTelegram = useCallback(() => {\n shareToTelegram(safeUrl, shareText);\n }, [safeUrl, shareText]);\n\n const shareX = useCallback(() => {\n shareToX(safeUrl, shareText);\n }, [safeUrl, shareText]);\n\n const shareFacebook = useCallback(() => {\n shareToFacebook(safeUrl);\n }, [safeUrl]);\n\n const shareInstagram = useCallback(() => {\n openInstagram();\n }, []);\n\n const shareTikTok = useCallback(() => {\n openTikTok();\n }, []);\n\n const shareThreads = useCallback(() => {\n openThreads();\n }, []);\n\n const shareSnapchat = useCallback(() => {\n shareToSnapchat(safeUrl);\n }, [safeUrl]);\n\n const shareSMS = useCallback(() => {\n shareViaSMS(safeUrl, shareText);\n }, [safeUrl, shareText]);\n\n const shareEmail = useCallback(() => {\n shareViaEmail(safeUrl, shareText, emailSubject);\n }, [safeUrl, shareText, emailSubject]);\n\n const shareLinkedIn = useCallback(() => {\n shareToLinkedIn(safeUrl);\n }, [safeUrl]);\n\n const shareReddit = useCallback(() => {\n shareToReddit(safeUrl, shareText);\n }, [safeUrl, shareText]);\n\n return {\n canNativeShare,\n copied,\n downloading,\n safeUrl,\n copyLink,\n nativeShare,\n downloadFile,\n shareWhatsApp,\n shareTelegram,\n shareX,\n shareFacebook,\n shareInstagram,\n shareTikTok,\n shareThreads,\n shareSnapchat,\n shareSMS,\n shareEmail,\n shareLinkedIn,\n shareReddit,\n };\n}\n\n// Legacy export for backwards compatibility\n/** @deprecated Use useShareSheet instead */\nexport const useShareMenu = useShareSheet;\n/** @deprecated Use UseShareSheetOptions instead */\nexport type UseShareMenuOptions = UseShareSheetOptions;\n","import { openUrl } from \"./utils\";\n\nexport function shareToWhatsApp(url: string, text: string) {\n const encoded = encodeURIComponent(`${text}\\n${url}`);\n openUrl(`https://api.whatsapp.com/send?text=${encoded}`);\n}\n\nexport function shareToTelegram(url: string, text: string) {\n const encodedText = encodeURIComponent(text);\n const encodedUrl = encodeURIComponent(url);\n openUrl(`https://t.me/share/url?url=${encodedUrl}&text=${encodedText}`);\n}\n\nexport function shareToX(url: string, text: string) {\n const encodedText = encodeURIComponent(text);\n const encodedUrl = encodeURIComponent(url);\n openUrl(`https://x.com/intent/tweet?text=${encodedText}&url=${encodedUrl}`);\n}\n\nexport function shareToFacebook(url: string) {\n const encodedUrl = encodeURIComponent(url);\n openUrl(`https://www.facebook.com/sharer/sharer.php?u=${encodedUrl}`);\n}\n\nexport function openInstagram() {\n window.location.href = \"instagram://\";\n}\n\nexport function openTikTok() {\n window.location.href = \"tiktok://\";\n}\n\nexport function openThreads() {\n window.location.href = \"threads://\";\n}\n\nexport function shareToSnapchat(url: string) {\n const encodedUrl = encodeURIComponent(url);\n openUrl(`https://www.snapchat.com/scan?attachmentUrl=${encodedUrl}`);\n}\n\nexport function shareViaSMS(url: string, text: string) {\n const body = encodeURIComponent(`${text}\\n${url}`);\n window.location.href = `sms:?body=${body}`;\n}\n\nexport function shareViaEmail(url: string, text: string, subject = \"Share\") {\n const encodedSubject = encodeURIComponent(subject);\n const body = encodeURIComponent(`${text}\\n\\n${url}`);\n window.location.href = `mailto:?subject=${encodedSubject}&body=${body}`;\n}\n\nexport function shareToLinkedIn(url: string) {\n const encodedUrl = encodeURIComponent(url);\n openUrl(`https://www.linkedin.com/sharing/share-offsite/?url=${encodedUrl}`);\n}\n\nexport function shareToReddit(url: string, text: string) {\n const encodedText = encodeURIComponent(text);\n const encodedUrl = encodeURIComponent(url);\n openUrl(`https://www.reddit.com/submit?url=${encodedUrl}&title=${encodedText}`);\n}\n\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport {\n Download,\n Link as LinkIcon,\n Mail,\n MessageCircle,\n Send,\n} from \"lucide-react\";\nimport {\n FaFacebookF,\n FaInstagram,\n FaLinkedin,\n FaReddit,\n FaTelegramPlane,\n FaTiktok,\n FaWhatsapp,\n} from \"react-icons/fa\";\nimport { FaXTwitter, FaThreads, FaSnapchat } from \"react-icons/fa6\";\nimport type { ShareOption } from \"./types\";\n\n/** Platform color configuration */\nexport interface PlatformColor {\n /** Background color (hex) */\n bg: string;\n /** Text/icon color (hex) */\n text: string;\n}\n\n/** Platform configuration */\nexport interface PlatformConfig {\n /** Platform identifier */\n id: ShareOption;\n /** Display label */\n label: string;\n /** Colors */\n colors: PlatformColor;\n /** Icon component (accepts size prop) */\n Icon: (props: { size?: number; className?: string }) => ReactNode;\n /** CSS variable name for background */\n cssVar: string;\n}\n\n/** All platform IDs in default order */\nexport const PLATFORM_IDS: readonly ShareOption[] = [\n \"native\",\n \"copy\",\n \"download\",\n \"whatsapp\",\n \"telegram\",\n \"instagram\",\n \"facebook\",\n \"snapchat\",\n \"sms\",\n \"email\",\n \"linkedin\",\n \"reddit\",\n \"x\",\n \"tiktok\",\n \"threads\",\n] as const;\n\n/** Platform colors - hex values for each platform (SOURCE OF TRUTH) */\nexport const PLATFORM_COLORS: Record<ShareOption, PlatformColor> = {\n native: { bg: \"#7c3aed\", text: \"#ffffff\" },\n copy: { bg: \"#3b82f6\", text: \"#ffffff\" },\n download: { bg: \"#ef4444\", text: \"#ffffff\" },\n whatsapp: { bg: \"#25D366\", text: \"#ffffff\" },\n telegram: { bg: \"#229ED9\", text: \"#ffffff\" },\n instagram: { bg: \"#E1306C\", text: \"#ffffff\" },\n facebook: { bg: \"#1877F2\", text: \"#ffffff\" },\n snapchat: { bg: \"#FFFC00\", text: \"#000000\" },\n sms: { bg: \"#22c55e\", text: \"#ffffff\" },\n email: { bg: \"#f97316\", text: \"#ffffff\" },\n linkedin: { bg: \"#0A66C2\", text: \"#ffffff\" },\n reddit: { bg: \"#FF4500\", text: \"#ffffff\" },\n x: { bg: \"#000000\", text: \"#ffffff\" },\n tiktok: { bg: \"#000000\", text: \"#ffffff\" },\n threads: { bg: \"#000000\", text: \"#ffffff\" },\n} as const;\n\n/** Platform labels (SOURCE OF TRUTH) */\nexport const PLATFORM_LABELS: Record<ShareOption, string> = {\n native: \"Share…\",\n copy: \"Copy\",\n download: \"Download\",\n whatsapp: \"WhatsApp\",\n telegram: \"Telegram\",\n instagram: \"Instagram\",\n facebook: \"Facebook\",\n snapchat: \"Snapchat\",\n sms: \"SMS\",\n email: \"Email\",\n linkedin: \"LinkedIn\",\n reddit: \"Reddit\",\n x: \"X\",\n tiktok: \"TikTok\",\n threads: \"Threads\",\n} as const;\n\n/** Platform icons - React components (SOURCE OF TRUTH) */\nexport const PLATFORM_ICONS: Record<ShareOption, (props: { size?: number; className?: string }) => ReactNode> = {\n native: ({ size = 22, className }) => <Send size={size} className={className} />,\n copy: ({ size = 22, className }) => <LinkIcon size={size} className={className} />,\n download: ({ size = 22, className }) => <Download size={size} className={className} />,\n whatsapp: ({ size = 22, className }) => <FaWhatsapp size={size} className={className} />,\n telegram: ({ size = 22, className }) => <FaTelegramPlane size={size} className={className} />,\n instagram: ({ size = 22, className }) => <FaInstagram size={size} className={className} />,\n facebook: ({ size = 22, className }) => <FaFacebookF size={size} className={className} />,\n snapchat: ({ size = 22, className }) => <FaSnapchat size={size} className={className} />,\n sms: ({ size = 22, className }) => <MessageCircle size={size} className={className} />,\n email: ({ size = 22, className }) => <Mail size={size} className={className} />,\n linkedin: ({ size = 22, className }) => <FaLinkedin size={size} className={className} />,\n reddit: ({ size = 22, className }) => <FaReddit size={size} className={className} />,\n x: ({ size = 22, className }) => <FaXTwitter size={size} className={className} />,\n tiktok: ({ size = 22, className }) => <FaTiktok size={size} className={className} />,\n threads: ({ size = 22, className }) => <FaThreads size={size} className={className} />,\n} as const;\n\n/** CSS variable names for platform backgrounds */\nexport const PLATFORM_CSS_VARS: Record<ShareOption, string> = {\n native: \"--sharesheet-native-bg\",\n copy: \"--sharesheet-copy-bg\",\n download: \"--sharesheet-download-bg\",\n whatsapp: \"--sharesheet-whatsapp-bg\",\n telegram: \"--sharesheet-telegram-bg\",\n instagram: \"--sharesheet-instagram-bg\",\n facebook: \"--sharesheet-facebook-bg\",\n snapchat: \"--sharesheet-snapchat-bg\",\n sms: \"--sharesheet-sms-bg\",\n email: \"--sharesheet-email-bg\",\n linkedin: \"--sharesheet-linkedin-bg\",\n reddit: \"--sharesheet-reddit-bg\",\n x: \"--sharesheet-x-bg\",\n tiktok: \"--sharesheet-tiktok-bg\",\n threads: \"--sharesheet-threads-bg\",\n} as const;\n\n/** Full platform configurations */\nexport const PLATFORMS: Record<ShareOption, PlatformConfig> = Object.fromEntries(\n PLATFORM_IDS.map((id) => [\n id,\n {\n id,\n label: PLATFORM_LABELS[id],\n colors: PLATFORM_COLORS[id],\n Icon: PLATFORM_ICONS[id],\n cssVar: PLATFORM_CSS_VARS[id],\n },\n ])\n) as Record<ShareOption, PlatformConfig>;\n\n/** Get platform config by id */\nexport function getPlatform(id: ShareOption): PlatformConfig {\n return PLATFORMS[id];\n}\n\n/** Get all platform configs as array */\nexport function getAllPlatforms(): PlatformConfig[] {\n return PLATFORM_IDS.map((id) => PLATFORMS[id]);\n}\n\n/** Get platform color */\nexport function getPlatformColor(id: ShareOption): PlatformColor {\n return PLATFORM_COLORS[id];\n}\n\n/** Get platform icon component */\nexport function getPlatformIcon(id: ShareOption): (props: { size?: number; className?: string }) => ReactNode {\n return PLATFORM_ICONS[id];\n}\n\n/** Get platform label */\nexport function getPlatformLabel(id: ShareOption): string {\n return PLATFORM_LABELS[id];\n}\n\n/** Generate CSS variable defaults from platform colors */\nexport function generateCssVarDefaults(): Record<string, string> {\n const defaults: Record<string, string> = {};\n PLATFORM_IDS.forEach((id) => {\n defaults[PLATFORM_CSS_VARS[id]] = PLATFORM_COLORS[id].bg;\n });\n return defaults;\n}\n","import type { ReactNode } from \"react\";\n\n/** CSS variable names for UI elements (non-platform specific) */\nexport const CSS_VARS_UI = {\n // Drawer\n overlayBg: \"--sharesheet-overlay-bg\",\n drawerBg: \"--sharesheet-drawer-bg\",\n drawerBorder: \"--sharesheet-drawer-border\",\n handleBg: \"--sharesheet-handle-bg\",\n // Content\n titleColor: \"--sharesheet-title-color\",\n subtitleColor: \"--sharesheet-subtitle-color\",\n buttonLabelColor: \"--sharesheet-button-label-color\",\n // Preview\n previewBg: \"--sharesheet-preview-bg\",\n previewShimmer: \"--sharesheet-preview-shimmer\",\n} as const;\n\n/** Default values for UI CSS variables */\nexport const CSS_VAR_UI_DEFAULTS = {\n [CSS_VARS_UI.overlayBg]: \"rgba(0, 0, 0, 0.7)\",\n [CSS_VARS_UI.drawerBg]: \"#09090b\",\n [CSS_VARS_UI.drawerBorder]: \"#27272a\",\n [CSS_VARS_UI.handleBg]: \"#27272a\",\n [CSS_VARS_UI.titleColor]: \"#ffffff\",\n [CSS_VARS_UI.subtitleColor]: \"#a1a1aa\",\n [CSS_VARS_UI.buttonLabelColor]: \"#ffffff\",\n [CSS_VARS_UI.previewBg]: \"rgba(255, 255, 255, 0.05)\",\n [CSS_VARS_UI.previewShimmer]: \"rgba(255, 255, 255, 0.1)\",\n} as const;\n\n/** Available share options */\nexport type ShareOption =\n | \"native\"\n | \"copy\"\n | \"download\"\n | \"whatsapp\"\n | \"telegram\"\n | \"instagram\"\n | \"facebook\"\n | \"snapchat\"\n | \"sms\"\n | \"email\"\n | \"linkedin\"\n | \"reddit\"\n | \"x\"\n | \"tiktok\"\n | \"threads\";\n\n/** Class name overrides for ShareSheetContent */\nexport interface ShareSheetContentClassNames {\n /** Root container */\n root?: string;\n /** Title container */\n header?: string;\n /** Main title text */\n title?: string;\n /** Subtitle/share text */\n subtitle?: string;\n /** Preview container */\n preview?: string;\n /** Preview skeleton/loading wrapper */\n previewSkeleton?: string;\n /** Preview image element */\n previewImage?: string;\n /** Preview video element */\n previewVideo?: string;\n /** Preview file/audio container */\n previewFile?: string;\n /** Preview file icon */\n previewFileIcon?: string;\n /** Preview filename text */\n previewFilename?: string;\n /** Preview link container */\n previewLink?: string;\n /** Buttons grid container */\n grid?: string;\n /** Individual button wrapper */\n button?: string;\n /** Button icon container */\n buttonIcon?: string;\n /** Button label text */\n buttonLabel?: string;\n}\n\n/** Class name overrides for ShareSheetDrawer */\nexport interface ShareSheetDrawerClassNames extends ShareSheetContentClassNames {\n /** Drawer overlay */\n overlay?: string;\n /** Drawer content panel */\n drawer?: string;\n /** Drawer inner content wrapper */\n drawerInner?: string;\n /** Drawer handle */\n handle?: string;\n /** Trigger wrapper */\n trigger?: string;\n}\n\n/** Preview content type */\nexport type PreviewType = \"image\" | \"video\" | \"audio\" | \"file\" | \"link\" | \"auto\";\n\n/** Preview configuration */\nexport interface PreviewConfig {\n /** URL of the content to preview */\n url: string;\n /** Type of content (auto-detected if not provided) */\n type?: PreviewType;\n /** Filename to display (for file/audio types) */\n filename?: string;\n /** Alt text for images */\n alt?: string;\n /** Poster image for videos */\n poster?: string;\n}\n\nexport interface ShareSheetContentProps {\n /** Title displayed at the top of the sheet */\n title?: string;\n /** URL to share */\n shareUrl: string;\n /** Text to share alongside the URL */\n shareText: string;\n /** Preview of content being shared (string URL or config object) */\n preview?: string | PreviewConfig | null;\n /** Optional URL for download functionality */\n downloadUrl?: string | null;\n /** Filename for downloaded file */\n downloadFilename?: string;\n /** Custom class name for the container (shorthand for classNames.root) */\n className?: string;\n /** Override class names for sub-components */\n classNames?: ShareSheetContentClassNames;\n /** Button size in pixels */\n buttonSize?: number;\n /** Icon size in pixels */\n iconSize?: number;\n /** Called when native share is triggered */\n onNativeShare?: () => void;\n /** Called when link is copied */\n onCopy?: () => void;\n /** Called when download starts */\n onDownload?: () => void;\n /** Hide specific share options */\n hide?: ShareOption[];\n /** Show only specific share options */\n show?: ShareOption[];\n /** Custom labels for buttons */\n labels?: Partial<Record<ShareOption, string>>;\n /** Custom icons for buttons */\n icons?: Partial<Record<ShareOption, ReactNode>>;\n}\n\nexport interface ShareSheetDrawerProps extends ShareSheetContentProps {\n /** Whether the drawer is disabled */\n disabled?: boolean;\n /** Trigger element for the drawer */\n children: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Override class names for sub-components */\n classNames?: ShareSheetDrawerClassNames;\n}\n\n/** Share button configuration (internal) */\nexport interface ShareButtonConfig {\n id: ShareOption;\n label: string;\n icon: ReactNode;\n bgColor: string;\n textColor?: string;\n onClick: () => void;\n condition?: boolean;\n}\n\n/** Return type of useShareSheet hook */\nexport interface UseShareSheetReturn {\n /** Whether the browser supports native share */\n canNativeShare: boolean;\n /** Whether the link was recently copied */\n copied: boolean;\n /** Whether a download is in progress */\n downloading: boolean;\n /** The safe URL (falls back to current page URL) */\n safeUrl: string;\n /** Copy the share URL to clipboard */\n copyLink: () => Promise<void>;\n /** Trigger native share dialog */\n nativeShare: () => Promise<void>;\n /** Download the file from downloadUrl */\n downloadFile: () => Promise<void>;\n /** Share to WhatsApp */\n shareWhatsApp: () => void;\n /** Share to Telegram */\n shareTelegram: () => void;\n /** Share to X (Twitter) */\n shareX: () => void;\n /** Share to Facebook */\n shareFacebook: () => void;\n /** Open Instagram app */\n shareInstagram: () => void;\n /** Open TikTok app */\n shareTikTok: () => void;\n /** Open Threads app */\n shareThreads: () => void;\n /** Share to Snapchat */\n shareSnapchat: () => void;\n /** Share via SMS */\n shareSMS: () => void;\n /** Share via Email */\n shareEmail: () => void;\n /** Share to LinkedIn */\n shareLinkedIn: () => void;\n /** Share to Reddit */\n shareReddit: () => void;\n}\n\n// Legacy exports for backwards compatibility\n/** @deprecated Use CSS_VARS_UI instead */\nexport const CSS_VARS = CSS_VARS_UI;\n/** @deprecated Use CSS_VAR_UI_DEFAULTS instead */\nexport const CSS_VAR_DEFAULTS = CSS_VAR_UI_DEFAULTS;\n\n// Legacy type aliases for backwards compatibility\n/** @deprecated Use ShareSheetContentClassNames instead */\nexport type ShareMenuContentClassNames = ShareSheetContentClassNames;\n/** @deprecated Use ShareSheetDrawerClassNames instead */\nexport type ShareMenuDrawerClassNames = ShareSheetDrawerClassNames;\n/** @deprecated Use ShareSheetContentProps instead */\nexport type ShareMenuContentProps = ShareSheetContentProps;\n/** @deprecated Use ShareSheetDrawerProps instead */\nexport type ShareMenuDrawerProps = ShareSheetDrawerProps;\n/** @deprecated Use UseShareSheetReturn instead */\nexport type UseShareMenuReturn = UseShareSheetReturn;\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { Drawer } from \"vaul\";\n\nimport { cn } from \"./utils\";\nimport { ShareSheetContent } from \"./ShareSheetContent\";\nimport { CSS_VARS_UI, CSS_VAR_UI_DEFAULTS, type ShareSheetDrawerProps } from \"./types\";\n\n// Default class names for drawer\nconst defaultDrawerClasses = {\n overlay: \"fixed inset-0 z-[70]\",\n drawer: \"flex flex-col rounded-t-[14px] h-[70%] mt-24 fixed bottom-0 left-0 right-0 z-[80] border-t outline-none\",\n drawerInner: \"p-4 rounded-t-[14px] flex-1 overflow-auto\",\n handle: \"mx-auto w-12 h-1.5 shrink-0 rounded-full mb-6\",\n trigger: \"\",\n};\n\n// Helper to create var() with fallback\nfunction cssVar(name: string, fallback: string): string {\n return `var(${name}, ${fallback})`;\n}\n\nexport function ShareSheetDrawer({\n title = \"Share\",\n shareUrl,\n shareText,\n preview,\n downloadUrl,\n downloadFilename,\n disabled,\n children,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n className,\n classNames = {},\n buttonSize,\n iconSize,\n onNativeShare,\n onCopy,\n onDownload,\n hide,\n show,\n labels,\n icons,\n}: ShareSheetDrawerProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const setOpen = isControlled\n ? (value: boolean) => controlledOnOpenChange?.(value)\n : setInternalOpen;\n\n return (\n <Drawer.Root open={open} onOpenChange={setOpen} shouldScaleBackground>\n <Drawer.Trigger asChild>\n <div\n className={cn(\n defaultDrawerClasses.trigger,\n classNames.trigger,\n disabled ? \"pointer-events-none opacity-50\" : \"\"\n )}\n >\n {children}\n </div>\n </Drawer.Trigger>\n <Drawer.Portal>\n <Drawer.Overlay\n className={cn(defaultDrawerClasses.overlay, classNames.overlay)}\n style={{\n backgroundColor: cssVar(CSS_VARS_UI.overlayBg, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.overlayBg]),\n }}\n />\n <Drawer.Content\n className={cn(defaultDrawerClasses.drawer, classNames.drawer)}\n style={{\n backgroundColor: cssVar(CSS_VARS_UI.drawerBg, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.drawerBg]),\n borderColor: cssVar(CSS_VARS_UI.drawerBorder, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.drawerBorder]),\n }}\n >\n <Drawer.Title className=\"sr-only\">{title}</Drawer.Title>\n <div\n className={cn(defaultDrawerClasses.drawerInner, classNames.drawerInner)}\n style={{\n backgroundColor: cssVar(CSS_VARS_UI.drawerBg, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.drawerBg]),\n }}\n >\n <div\n className={cn(defaultDrawerClasses.handle, classNames.handle)}\n style={{\n backgroundColor: cssVar(CSS_VARS_UI.handleBg, CSS_VAR_UI_DEFAULTS[CSS_VARS_UI.handleBg]),\n }}\n />\n\n <ShareSheetContent\n title={title}\n shareUrl={shareUrl}\n shareText={shareText}\n preview={preview}\n downloadUrl={downloadUrl}\n downloadFilename={downloadFilename}\n className={className}\n classNames={classNames}\n buttonSize={buttonSize}\n iconSize={iconSize}\n onNativeShare={() => {\n onNativeShare?.();\n setOpen(false);\n }}\n onCopy={onCopy}\n onDownload={onDownload}\n hide={hide}\n show={show}\n labels={labels}\n icons={icons}\n />\n </div>\n </Drawer.Content>\n </Drawer.Portal>\n </Drawer.Root>\n );\n}\n\n// Legacy export for backwards compatibility\n/** @deprecated Use ShareSheetDrawer instead */\nexport const ShareMenuDrawer = ShareSheetDrawer;\n\n"],"mappings":"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","names":["useMemo","useState","useCallback","jsx","type","useState","useCallback","useMemo","useState","jsx","jsxs","cssVar","useState"]}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
/** CSS variable names for UI elements (non-platform specific) */
|
|
4
|
+
declare const CSS_VARS_UI: {
|
|
5
|
+
readonly overlayBg: "--sharesheet-overlay-bg";
|
|
6
|
+
readonly drawerBg: "--sharesheet-drawer-bg";
|
|
7
|
+
readonly drawerBorder: "--sharesheet-drawer-border";
|
|
8
|
+
readonly handleBg: "--sharesheet-handle-bg";
|
|
9
|
+
readonly titleColor: "--sharesheet-title-color";
|
|
10
|
+
readonly subtitleColor: "--sharesheet-subtitle-color";
|
|
11
|
+
readonly buttonLabelColor: "--sharesheet-button-label-color";
|
|
12
|
+
readonly previewBg: "--sharesheet-preview-bg";
|
|
13
|
+
readonly previewShimmer: "--sharesheet-preview-shimmer";
|
|
14
|
+
};
|
|
15
|
+
/** Default values for UI CSS variables */
|
|
16
|
+
declare const CSS_VAR_UI_DEFAULTS: {
|
|
17
|
+
readonly "--sharesheet-overlay-bg": "rgba(0, 0, 0, 0.7)";
|
|
18
|
+
readonly "--sharesheet-drawer-bg": "#09090b";
|
|
19
|
+
readonly "--sharesheet-drawer-border": "#27272a";
|
|
20
|
+
readonly "--sharesheet-handle-bg": "#27272a";
|
|
21
|
+
readonly "--sharesheet-title-color": "#ffffff";
|
|
22
|
+
readonly "--sharesheet-subtitle-color": "#a1a1aa";
|
|
23
|
+
readonly "--sharesheet-button-label-color": "#ffffff";
|
|
24
|
+
readonly "--sharesheet-preview-bg": "rgba(255, 255, 255, 0.05)";
|
|
25
|
+
readonly "--sharesheet-preview-shimmer": "rgba(255, 255, 255, 0.1)";
|
|
26
|
+
};
|
|
27
|
+
/** Available share options */
|
|
28
|
+
type ShareOption = "native" | "copy" | "download" | "whatsapp" | "telegram" | "instagram" | "facebook" | "snapchat" | "sms" | "email" | "linkedin" | "reddit" | "x" | "tiktok" | "threads";
|
|
29
|
+
/** Class name overrides for ShareSheetContent */
|
|
30
|
+
interface ShareSheetContentClassNames {
|
|
31
|
+
/** Root container */
|
|
32
|
+
root?: string;
|
|
33
|
+
/** Title container */
|
|
34
|
+
header?: string;
|
|
35
|
+
/** Main title text */
|
|
36
|
+
title?: string;
|
|
37
|
+
/** Subtitle/share text */
|
|
38
|
+
subtitle?: string;
|
|
39
|
+
/** Preview container */
|
|
40
|
+
preview?: string;
|
|
41
|
+
/** Preview skeleton/loading wrapper */
|
|
42
|
+
previewSkeleton?: string;
|
|
43
|
+
/** Preview image element */
|
|
44
|
+
previewImage?: string;
|
|
45
|
+
/** Preview video element */
|
|
46
|
+
previewVideo?: string;
|
|
47
|
+
/** Preview file/audio container */
|
|
48
|
+
previewFile?: string;
|
|
49
|
+
/** Preview file icon */
|
|
50
|
+
previewFileIcon?: string;
|
|
51
|
+
/** Preview filename text */
|
|
52
|
+
previewFilename?: string;
|
|
53
|
+
/** Preview link container */
|
|
54
|
+
previewLink?: string;
|
|
55
|
+
/** Buttons grid container */
|
|
56
|
+
grid?: string;
|
|
57
|
+
/** Individual button wrapper */
|
|
58
|
+
button?: string;
|
|
59
|
+
/** Button icon container */
|
|
60
|
+
buttonIcon?: string;
|
|
61
|
+
/** Button label text */
|
|
62
|
+
buttonLabel?: string;
|
|
63
|
+
}
|
|
64
|
+
/** Class name overrides for ShareSheetDrawer */
|
|
65
|
+
interface ShareSheetDrawerClassNames extends ShareSheetContentClassNames {
|
|
66
|
+
/** Drawer overlay */
|
|
67
|
+
overlay?: string;
|
|
68
|
+
/** Drawer content panel */
|
|
69
|
+
drawer?: string;
|
|
70
|
+
/** Drawer inner content wrapper */
|
|
71
|
+
drawerInner?: string;
|
|
72
|
+
/** Drawer handle */
|
|
73
|
+
handle?: string;
|
|
74
|
+
/** Trigger wrapper */
|
|
75
|
+
trigger?: string;
|
|
76
|
+
}
|
|
77
|
+
/** Preview content type */
|
|
78
|
+
type PreviewType = "image" | "video" | "audio" | "file" | "link" | "auto";
|
|
79
|
+
/** Preview configuration */
|
|
80
|
+
interface PreviewConfig {
|
|
81
|
+
/** URL of the content to preview */
|
|
82
|
+
url: string;
|
|
83
|
+
/** Type of content (auto-detected if not provided) */
|
|
84
|
+
type?: PreviewType;
|
|
85
|
+
/** Filename to display (for file/audio types) */
|
|
86
|
+
filename?: string;
|
|
87
|
+
/** Alt text for images */
|
|
88
|
+
alt?: string;
|
|
89
|
+
/** Poster image for videos */
|
|
90
|
+
poster?: string;
|
|
91
|
+
}
|
|
92
|
+
interface ShareSheetContentProps {
|
|
93
|
+
/** Title displayed at the top of the sheet */
|
|
94
|
+
title?: string;
|
|
95
|
+
/** URL to share */
|
|
96
|
+
shareUrl: string;
|
|
97
|
+
/** Text to share alongside the URL */
|
|
98
|
+
shareText: string;
|
|
99
|
+
/** Preview of content being shared (string URL or config object) */
|
|
100
|
+
preview?: string | PreviewConfig | null;
|
|
101
|
+
/** Optional URL for download functionality */
|
|
102
|
+
downloadUrl?: string | null;
|
|
103
|
+
/** Filename for downloaded file */
|
|
104
|
+
downloadFilename?: string;
|
|
105
|
+
/** Custom class name for the container (shorthand for classNames.root) */
|
|
106
|
+
className?: string;
|
|
107
|
+
/** Override class names for sub-components */
|
|
108
|
+
classNames?: ShareSheetContentClassNames;
|
|
109
|
+
/** Button size in pixels */
|
|
110
|
+
buttonSize?: number;
|
|
111
|
+
/** Icon size in pixels */
|
|
112
|
+
iconSize?: number;
|
|
113
|
+
/** Called when native share is triggered */
|
|
114
|
+
onNativeShare?: () => void;
|
|
115
|
+
/** Called when link is copied */
|
|
116
|
+
onCopy?: () => void;
|
|
117
|
+
/** Called when download starts */
|
|
118
|
+
onDownload?: () => void;
|
|
119
|
+
/** Hide specific share options */
|
|
120
|
+
hide?: ShareOption[];
|
|
121
|
+
/** Show only specific share options */
|
|
122
|
+
show?: ShareOption[];
|
|
123
|
+
/** Custom labels for buttons */
|
|
124
|
+
labels?: Partial<Record<ShareOption, string>>;
|
|
125
|
+
/** Custom icons for buttons */
|
|
126
|
+
icons?: Partial<Record<ShareOption, ReactNode>>;
|
|
127
|
+
}
|
|
128
|
+
interface ShareSheetDrawerProps extends ShareSheetContentProps {
|
|
129
|
+
/** Whether the drawer is disabled */
|
|
130
|
+
disabled?: boolean;
|
|
131
|
+
/** Trigger element for the drawer */
|
|
132
|
+
children: React.ReactNode;
|
|
133
|
+
/** Controlled open state */
|
|
134
|
+
open?: boolean;
|
|
135
|
+
/** Callback when open state changes */
|
|
136
|
+
onOpenChange?: (open: boolean) => void;
|
|
137
|
+
/** Override class names for sub-components */
|
|
138
|
+
classNames?: ShareSheetDrawerClassNames;
|
|
139
|
+
}
|
|
140
|
+
/** Share button configuration (internal) */
|
|
141
|
+
interface ShareButtonConfig {
|
|
142
|
+
id: ShareOption;
|
|
143
|
+
label: string;
|
|
144
|
+
icon: ReactNode;
|
|
145
|
+
bgColor: string;
|
|
146
|
+
textColor?: string;
|
|
147
|
+
onClick: () => void;
|
|
148
|
+
condition?: boolean;
|
|
149
|
+
}
|
|
150
|
+
/** Return type of useShareSheet hook */
|
|
151
|
+
interface UseShareSheetReturn {
|
|
152
|
+
/** Whether the browser supports native share */
|
|
153
|
+
canNativeShare: boolean;
|
|
154
|
+
/** Whether the link was recently copied */
|
|
155
|
+
copied: boolean;
|
|
156
|
+
/** Whether a download is in progress */
|
|
157
|
+
downloading: boolean;
|
|
158
|
+
/** The safe URL (falls back to current page URL) */
|
|
159
|
+
safeUrl: string;
|
|
160
|
+
/** Copy the share URL to clipboard */
|
|
161
|
+
copyLink: () => Promise<void>;
|
|
162
|
+
/** Trigger native share dialog */
|
|
163
|
+
nativeShare: () => Promise<void>;
|
|
164
|
+
/** Download the file from downloadUrl */
|
|
165
|
+
downloadFile: () => Promise<void>;
|
|
166
|
+
/** Share to WhatsApp */
|
|
167
|
+
shareWhatsApp: () => void;
|
|
168
|
+
/** Share to Telegram */
|
|
169
|
+
shareTelegram: () => void;
|
|
170
|
+
/** Share to X (Twitter) */
|
|
171
|
+
shareX: () => void;
|
|
172
|
+
/** Share to Facebook */
|
|
173
|
+
shareFacebook: () => void;
|
|
174
|
+
/** Open Instagram app */
|
|
175
|
+
shareInstagram: () => void;
|
|
176
|
+
/** Open TikTok app */
|
|
177
|
+
shareTikTok: () => void;
|
|
178
|
+
/** Open Threads app */
|
|
179
|
+
shareThreads: () => void;
|
|
180
|
+
/** Share to Snapchat */
|
|
181
|
+
shareSnapchat: () => void;
|
|
182
|
+
/** Share via SMS */
|
|
183
|
+
shareSMS: () => void;
|
|
184
|
+
/** Share via Email */
|
|
185
|
+
shareEmail: () => void;
|
|
186
|
+
/** Share to LinkedIn */
|
|
187
|
+
shareLinkedIn: () => void;
|
|
188
|
+
/** Share to Reddit */
|
|
189
|
+
shareReddit: () => void;
|
|
190
|
+
}
|
|
191
|
+
/** @deprecated Use CSS_VARS_UI instead */
|
|
192
|
+
declare const CSS_VARS: {
|
|
193
|
+
readonly overlayBg: "--sharesheet-overlay-bg";
|
|
194
|
+
readonly drawerBg: "--sharesheet-drawer-bg";
|
|
195
|
+
readonly drawerBorder: "--sharesheet-drawer-border";
|
|
196
|
+
readonly handleBg: "--sharesheet-handle-bg";
|
|
197
|
+
readonly titleColor: "--sharesheet-title-color";
|
|
198
|
+
readonly subtitleColor: "--sharesheet-subtitle-color";
|
|
199
|
+
readonly buttonLabelColor: "--sharesheet-button-label-color";
|
|
200
|
+
readonly previewBg: "--sharesheet-preview-bg";
|
|
201
|
+
readonly previewShimmer: "--sharesheet-preview-shimmer";
|
|
202
|
+
};
|
|
203
|
+
/** @deprecated Use CSS_VAR_UI_DEFAULTS instead */
|
|
204
|
+
declare const CSS_VAR_DEFAULTS: {
|
|
205
|
+
readonly "--sharesheet-overlay-bg": "rgba(0, 0, 0, 0.7)";
|
|
206
|
+
readonly "--sharesheet-drawer-bg": "#09090b";
|
|
207
|
+
readonly "--sharesheet-drawer-border": "#27272a";
|
|
208
|
+
readonly "--sharesheet-handle-bg": "#27272a";
|
|
209
|
+
readonly "--sharesheet-title-color": "#ffffff";
|
|
210
|
+
readonly "--sharesheet-subtitle-color": "#a1a1aa";
|
|
211
|
+
readonly "--sharesheet-button-label-color": "#ffffff";
|
|
212
|
+
readonly "--sharesheet-preview-bg": "rgba(255, 255, 255, 0.05)";
|
|
213
|
+
readonly "--sharesheet-preview-shimmer": "rgba(255, 255, 255, 0.1)";
|
|
214
|
+
};
|
|
215
|
+
/** @deprecated Use ShareSheetContentClassNames instead */
|
|
216
|
+
type ShareMenuContentClassNames = ShareSheetContentClassNames;
|
|
217
|
+
/** @deprecated Use ShareSheetDrawerClassNames instead */
|
|
218
|
+
type ShareMenuDrawerClassNames = ShareSheetDrawerClassNames;
|
|
219
|
+
/** @deprecated Use ShareSheetContentProps instead */
|
|
220
|
+
type ShareMenuContentProps = ShareSheetContentProps;
|
|
221
|
+
/** @deprecated Use ShareSheetDrawerProps instead */
|
|
222
|
+
type ShareMenuDrawerProps = ShareSheetDrawerProps;
|
|
223
|
+
/** @deprecated Use UseShareSheetReturn instead */
|
|
224
|
+
type UseShareMenuReturn = UseShareSheetReturn;
|
|
225
|
+
|
|
226
|
+
/** Platform color configuration */
|
|
227
|
+
interface PlatformColor {
|
|
228
|
+
/** Background color (hex) */
|
|
229
|
+
bg: string;
|
|
230
|
+
/** Text/icon color (hex) */
|
|
231
|
+
text: string;
|
|
232
|
+
}
|
|
233
|
+
/** Platform configuration */
|
|
234
|
+
interface PlatformConfig {
|
|
235
|
+
/** Platform identifier */
|
|
236
|
+
id: ShareOption;
|
|
237
|
+
/** Display label */
|
|
238
|
+
label: string;
|
|
239
|
+
/** Colors */
|
|
240
|
+
colors: PlatformColor;
|
|
241
|
+
/** Icon component (accepts size prop) */
|
|
242
|
+
Icon: (props: {
|
|
243
|
+
size?: number;
|
|
244
|
+
className?: string;
|
|
245
|
+
}) => ReactNode;
|
|
246
|
+
/** CSS variable name for background */
|
|
247
|
+
cssVar: string;
|
|
248
|
+
}
|
|
249
|
+
/** All platform IDs in default order */
|
|
250
|
+
declare const PLATFORM_IDS: readonly ShareOption[];
|
|
251
|
+
/** Platform colors - hex values for each platform (SOURCE OF TRUTH) */
|
|
252
|
+
declare const PLATFORM_COLORS: Record<ShareOption, PlatformColor>;
|
|
253
|
+
/** Platform labels (SOURCE OF TRUTH) */
|
|
254
|
+
declare const PLATFORM_LABELS: Record<ShareOption, string>;
|
|
255
|
+
/** Platform icons - React components (SOURCE OF TRUTH) */
|
|
256
|
+
declare const PLATFORM_ICONS: Record<ShareOption, (props: {
|
|
257
|
+
size?: number;
|
|
258
|
+
className?: string;
|
|
259
|
+
}) => ReactNode>;
|
|
260
|
+
/** CSS variable names for platform backgrounds */
|
|
261
|
+
declare const PLATFORM_CSS_VARS: Record<ShareOption, string>;
|
|
262
|
+
/** Full platform configurations */
|
|
263
|
+
declare const PLATFORMS: Record<ShareOption, PlatformConfig>;
|
|
264
|
+
/** Get platform config by id */
|
|
265
|
+
declare function getPlatform(id: ShareOption): PlatformConfig;
|
|
266
|
+
/** Get all platform configs as array */
|
|
267
|
+
declare function getAllPlatforms(): PlatformConfig[];
|
|
268
|
+
/** Get platform color */
|
|
269
|
+
declare function getPlatformColor(id: ShareOption): PlatformColor;
|
|
270
|
+
/** Get platform icon component */
|
|
271
|
+
declare function getPlatformIcon(id: ShareOption): (props: {
|
|
272
|
+
size?: number;
|
|
273
|
+
className?: string;
|
|
274
|
+
}) => ReactNode;
|
|
275
|
+
/** Get platform label */
|
|
276
|
+
declare function getPlatformLabel(id: ShareOption): string;
|
|
277
|
+
/** Generate CSS variable defaults from platform colors */
|
|
278
|
+
declare function generateCssVarDefaults(): Record<string, string>;
|
|
279
|
+
|
|
280
|
+
export { type PlatformConfig as A, type PlatformColor as B, CSS_VARS_UI as C, type PreviewType as P, type ShareSheetContentProps as S, type UseShareSheetReturn as U, type ShareSheetDrawerProps as a, type ShareSheetContentClassNames as b, type ShareSheetDrawerClassNames as c, type ShareMenuContentProps as d, type ShareMenuDrawerProps as e, type ShareMenuContentClassNames as f, type ShareMenuDrawerClassNames as g, type ShareOption as h, type ShareButtonConfig as i, type UseShareMenuReturn as j, type PreviewConfig as k, CSS_VAR_UI_DEFAULTS as l, CSS_VARS as m, CSS_VAR_DEFAULTS as n, PLATFORMS as o, PLATFORM_IDS as p, PLATFORM_COLORS as q, PLATFORM_ICONS as r, PLATFORM_LABELS as s, PLATFORM_CSS_VARS as t, getPlatform as u, getAllPlatforms as v, getPlatformColor as w, getPlatformIcon as x, getPlatformLabel as y, generateCssVarDefaults as z };
|