Skip to content

Commit bbeefc4

Browse files
authored
feat: add version badge (#14)
1 parent 8e4c054 commit bbeefc4

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

src/app/layout.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
} from "@/components/ui/tooltip";
1313
import Link from "next/link";
1414
import { GoogleTagManager } from "@next/third-parties/google";
15+
import VersionDisplay from "@/components/VersionBadge";
1516

1617
const montserrat = Montserrat({ subsets: ["latin"] });
1718

@@ -73,6 +74,7 @@ export default function RootLayout({
7374
</Dock>
7475
</div>
7576
</TooltipProvider>
77+
<VersionDisplay githubRelease="https://github.com/RequestNetwork/rn-checkout/releases" />
7678
</body>
7779
<GoogleTagManager gtmId={process.env.NEXT_PUBLIC_GTM_ID as string} />
7880
</html>

src/components/VersionBadge.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Badge } from "@/components/ui/badge";
2+
import packageInfo from "../../package.json";
3+
import Link from "next/link";
4+
5+
interface VersionDisplayProps {
6+
githubRelease: string;
7+
}
8+
9+
export default function VersionDisplay({ githubRelease }: VersionDisplayProps) {
10+
return (
11+
<div className="flex m-4 md:m-0 md:fixed md:bottom-4 md:left-4 md:z-10">
12+
<Link target="_blank" href={githubRelease}>
13+
<Badge variant="outline" className="text-xs font-mono">
14+
{packageInfo.version}
15+
</Badge>
16+
</Link>
17+
</div>
18+
);
19+
}

src/components/ui/badge.tsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import * as React from "react"
2+
import { cva, type VariantProps } from "class-variance-authority"
3+
4+
import { cn } from "@/lib/utils"
5+
6+
const badgeVariants = cva(
7+
"inline-flex items-center rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300",
8+
{
9+
variants: {
10+
variant: {
11+
default:
12+
"border-transparent bg-slate-900 text-slate-50 hover:bg-slate-900/80 dark:bg-slate-50 dark:text-slate-900 dark:hover:bg-slate-50/80",
13+
secondary:
14+
"border-transparent bg-slate-100 text-slate-900 hover:bg-slate-100/80 dark:bg-slate-800 dark:text-slate-50 dark:hover:bg-slate-800/80",
15+
destructive:
16+
"border-transparent bg-red-500 text-slate-50 hover:bg-red-500/80 dark:bg-red-900 dark:text-slate-50 dark:hover:bg-red-900/80",
17+
outline: "text-slate-950 dark:text-slate-50",
18+
},
19+
},
20+
defaultVariants: {
21+
variant: "default",
22+
},
23+
}
24+
)
25+
26+
export interface BadgeProps
27+
extends React.HTMLAttributes<HTMLDivElement>,
28+
VariantProps<typeof badgeVariants> {}
29+
30+
function Badge({ className, variant, ...props }: BadgeProps) {
31+
return (
32+
<div className={cn(badgeVariants({ variant }), className)} {...props} />
33+
)
34+
}
35+
36+
export { Badge, badgeVariants }

0 commit comments

Comments
 (0)