diff --git a/src/components/ShareProfileDialog.tsx b/src/components/ShareProfileDialog.tsx index 8d28edc..fb501c6 100644 --- a/src/components/ShareProfileDialog.tsx +++ b/src/components/ShareProfileDialog.tsx @@ -1,9 +1,9 @@ import { useEffect, useState } from 'react'; -import QRCode from 'qrcode'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Check, Copy, Share2, Loader2 } from 'lucide-react'; import { useToast } from '@/hooks/useToast'; +import { generateQRCode } from '@/lib/wallet/qrCodeGenerator'; interface ShareProfileDialogProps { open: boolean; @@ -33,14 +33,15 @@ export function ShareProfileDialog({ open, onOpenChange, npub, displayName }: Sh useEffect(() => { if (!open) return; let active = true; - QRCode.toDataURL(shareUrl, { - width: 320, - margin: 1, - color: { dark: '#000000', light: '#ffffff' }, - errorCorrectionLevel: 'M', - }) + setQr(null); + // qrcode must be imported lazily (see generateQRCode) — a top-level import + // crashes on its canvas dependency at module load. + generateQRCode(shareUrl) .then((url) => { if (active) setQr(url); }) - .catch(() => { if (active) setQr(null); }); + .catch((err) => { + console.error('[ShareProfileDialog] QR generation failed:', err); + if (active) setQr(null); + }); return () => { active = false; }; }, [open, shareUrl]);