Skip to content

feat(ui): align profile, edit-profile & QR sheet with iOS#589

Open
dmnyc wants to merge 4 commits into
barrydeen:mainfrom
dmnyc:feat/profile-qr-ui-polish
Open

feat(ui): align profile, edit-profile & QR sheet with iOS#589
dmnyc wants to merge 4 commits into
barrydeen:mainfrom
dmnyc:feat/profile-qr-ui-polish

Conversation

@dmnyc

@dmnyc dmnyc commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Profile-screen and QR-sheet styling parity with the iOS app, split out from the CLINK feature work per review hygiene. Stacked on #588 — merge that first; until then this diff includes its commits.

  • Profile QR sheet — iOS-style segmented pill tabs (replacing Material underline tabs); full viewport height with status-bar inset so the drag handle clears camera cutouts; profile avatar in the center of the Lightning QR (matching the Nostr tab and iOS qrWithCenterAvatar); pager fills the remaining height with top-aligned pages so content no longer shifts position when switching tabs.
  • Edit profile — tappable banner + avatar previews that open the gallery picker (camera badge hint, inline upload spinner), matching iOS; raw image URL fields and the CLINK offer field moved into a collapsible Advanced section like the iOS editor.
  • Profile overflow menu — replaced Copy Profile JSON with Share Profile (njump.me link via the system share sheet, same convention as note sharing) and Copy npub, matching iOS; Add to List and Block/Unblock remain for other profiles.

iOS counterparts: the pay/QR modal styling introduced alongside barrydeen/wisp-ios#360, and the existing iOS profile editor / profile menu.

Test plan

  • QR sheet tabs render as segmented control; no content shift on tab change
  • Lightning QR shows avatar center for both address and offer
  • Edit profile: tap banner/avatar uploads via gallery; Advanced section collapses/expands
  • Share Profile opens share sheet with njump link; Copy npub copies

Validated on a Galaxy A54 (SM-A546U).

dmnyc added 4 commits June 11, 2026 15:36
Port of wisp-ios#360. Adds CLINK Offers (noffer1…) payment support:

- Noffer: bech32 + TLV decoder, pricing types (fixed / variable /
  spontaneous), isNofferString / stripNostrPrefix helpers
- NofferClient: kind-21001 NIP-44 RPC on the offer's relay with
  code-3 expired/moved latest-retry
- NofferPaySheet + NofferCard: shared pay sheet that pays via the
  active wallet or falls back to a scannable bare-noffer QR
- Notes: RichContent detects noffer tokens and renders a Pay-offer card
- Profiles: clink_offer parsed tolerantly from kind-0, editor field,
  Pay-offer header button, offer QR inside the Lightning tab with a
  contextual address/offer switch
- Wallet send: noffer detection routes through the native amount →
  confirm flow; fixed-price offers skip straight to confirm
- Tests: decoder round-trip coverage mirroring the CLINK spec TLVs

Spec: https://github.com/shocknet/CLINK/blob/main/specs/clink-offers.md
The NoteActions built for DM conversations, group DMs, group rooms,
and search results never set onPayInvoice, so the noffer pay sheet
(and lightning invoice cards) on those surfaces degraded to
"Connect a wallet to pay" even with an active wallet.
- Map noffer payment hashes to the offer's service pubkey via
  ZapSender.persistRecipient in both pay paths, so wallet history
  resolves the payee's profile (name + avatar) like zaps do
- Show the offer service's profile name on the wallet amount page and
  in the confirm-page description fallback
- Make NofferPaySheet full viewport height (status-bar inset so the
  drag handle clears camera cutouts), matching the iOS pay modal
- ProfileRepository schema migration: reset cached profile timestamps
  once so kind-0s re-parse with the new clinkOffer field — stale
  pre-upgrade cache entries otherwise never pick it up
- Profile QR sheet: iOS-style segmented pill tabs instead of Material
  underline tabs; full viewport height with status-bar inset; profile
  avatar in the center of the Lightning/offer QR (bolt icon only as
  fallback); pager fills remaining height with top-aligned pages so
  content no longer shifts when switching tabs
- Edit profile: tappable banner + avatar previews that open the
  gallery picker (camera badge, inline upload spinner); raw image
  URLs and the CLINK offer field moved into a collapsible Advanced
  section, matching the iOS editor
- Profile overflow menu: replaced Copy Profile JSON with Share
  Profile (njump.me link via share sheet) and Copy npub, matching
  iOS; Add to List and Block/Unblock remain for other profiles
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant