feat(FN-296): replace text-based payment trust badges with card brand SVG icons
Some checks failed
Sync dev → Gitea / Mirror dev to Gitea (push) Has been cancelled
Some checks failed
Sync dev → Gitea / Mirror dev to Gitea (push) Has been cancelled
Commits merged: - feat(FN-296): replace text-based payment trust badges with card brand SVG icons Files changed: .../src/routes/dashboard/subscription/index.tsx | 33 ++------ packages/ui/src/index.ts | 1 + packages/ui/src/payment-cards.tsx | 91 ++++++++++++++++++++++ 3 files changed, 97 insertions(+), 28 deletions(-) Fusion-Task-Id: FN-296
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
export { cn } from "./utils";
|
||||
export { VisaIcon, MastercardIcon, TroyIcon, AmexIcon } from "./payment-cards";
|
||||
export { Button, buttonVariants, type ButtonProps } from "./button";
|
||||
export { Input } from "./input";
|
||||
export {
|
||||
|
||||
91
packages/ui/src/payment-cards.tsx
Normal file
91
packages/ui/src/payment-cards.tsx
Normal file
@@ -0,0 +1,91 @@
|
||||
import type { SVGProps } from "react";
|
||||
|
||||
/**
|
||||
* Card brand SVG icons for payment trust badges.
|
||||
* Each accepts standard SVG props (className for Tailwind sizing, etc.)
|
||||
* and should be rendered with aria-hidden="true" when the parent has a descriptive aria-label.
|
||||
*/
|
||||
|
||||
export function VisaIcon({ className, ...props }: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
viewBox="0 0 38 24"
|
||||
className={className}
|
||||
{...props}
|
||||
>
|
||||
<rect width="38" height="24" rx="3" fill="#1434CB" />
|
||||
<path
|
||||
d="M16.15 7.91l-2.1 7.81h-2.51l2.1-7.81h2.51zm3.02 5.06l1.11-2.94.62 2.94h-1.73zm2.27 2.75h2.32l-1.49-7.81h-2.07c-.47 0-.87.27-1.04.68l-3.22 7.13h2.34l.46-1.27h2.86l.27 1.27h.06zm-8.78-6.08c.05-.33.16-.46.16-.46l1.94-3.53-.17-.01H11.4l-.02.08c.54.13 1.15.35 1.52.82.22.27.29.5.32.73l-3.94 6.37H7.8l1.36-6.4c.07-.33.11-.39.33-.41L6.98 7.5l-.01.08c.4.1 1.05.28 1.42.56.22.16.28.37.31.65l-1.32 7.09h2.51l3.79-6.24z"
|
||||
fill="white"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
export function MastercardIcon({
|
||||
className,
|
||||
...props
|
||||
}: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
viewBox="0 0 38 24"
|
||||
className={className}
|
||||
{...props}
|
||||
>
|
||||
<rect width="38" height="24" rx="3" fill="#1A1F36" />
|
||||
<circle cx="16" cy="12" r="6" fill="#EB001B" opacity="0.9" />
|
||||
<circle cx="23" cy="12" r="6" fill="#F79E1B" opacity="0.9" />
|
||||
<circle cx="19.5" cy="12" r="3" fill="#FF5F00" opacity="0.85" />
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
export function TroyIcon({ className, ...props }: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
viewBox="0 0 38 24"
|
||||
className={className}
|
||||
{...props}
|
||||
>
|
||||
<rect width="38" height="24" rx="3" fill="#0B2050" />
|
||||
<text
|
||||
x="19"
|
||||
y="13"
|
||||
dominantBaseline="central"
|
||||
textAnchor="middle"
|
||||
fill="#00D4B4"
|
||||
fontSize="12"
|
||||
fontWeight="700"
|
||||
fontFamily="Arial, Helvetica, sans-serif"
|
||||
letterSpacing="1"
|
||||
>
|
||||
TROY
|
||||
</text>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
export function AmexIcon({ className, ...props }: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
viewBox="0 0 38 24"
|
||||
className={className}
|
||||
{...props}
|
||||
>
|
||||
<rect width="38" height="24" rx="3" fill="#006FCF" />
|
||||
<text
|
||||
x="19"
|
||||
y="13"
|
||||
dominantBaseline="central"
|
||||
textAnchor="middle"
|
||||
fill="white"
|
||||
fontSize="10"
|
||||
fontWeight="700"
|
||||
fontFamily="Arial, Helvetica, sans-serif"
|
||||
letterSpacing="0.5"
|
||||
>
|
||||
AMEX
|
||||
</text>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user