Add decoded transaction summary (matching the approval screen
format) to the transaction detail view. For unknown contract
calls, show 'Unknown Contract Call' label with full raw
calldata hex (not truncated).
Use the shared decodeCalldata module to detect Uniswap swaps,
token approvals, and unknown contract calls in parseTx. Swaps
now show 'Swap TOKEN_A → TOKEN_B' instead of 'Sent'. Unknown
contract calls show 'Contract Call'. Raw input and decoded
data are passed through for the detail view.
Move the calldata decoding logic (ERC-20 and Uniswap) from
approval.js into src/shared/decodeCalldata.js so it can be
reused by both the approval screen and transaction history.