bae49e6123
The recipient input on /wallet's Send dialog now has a camera button that opens a QR scanner. Bitcoin BIP-21 URIs are parsed and the silent-payment fallback (?sp=) is preferred when present, falling back to the on-chain address otherwise. Plain addresses, sp1… codes, npub, and nprofile values are dropped into the input verbatim and resolved by the existing recipient logic. QrScannerDialog is a standalone component (ported from Ditto) that owns the camera lifecycle via getUserMedia and the qr-scanner npm package. It surfaces failure modes (insecure context, denied permission, no camera, busy camera, overconstrained, ready timeout) instead of a silent black screen, and offers a flash toggle when the device supports it. Android needed an explicit CAMERA permission in the manifest; iOS's existing NSCameraUsageDescription string was extended to mention QR scanning. No Capacitor camera plugin is required — the standard web APIs work inside WKWebView and Android's WebView.