add tooltips
All checks were successful
Deploy App / docker (ubuntu-latest) (push) Successful in 1m31s

This commit is contained in:
Lee
2024-04-17 18:08:13 +01:00
parent 1a347108c2
commit 347ee00c18
8 changed files with 454 additions and 21 deletions

View File

@ -1,13 +1,22 @@
import Link from "next/link";
import { Button } from "../components/ui/button";
import { Tooltip, TooltipContent, TooltipTrigger } from "../components/ui/tooltip";
type Button = {
title: string;
tooltip: string;
url: string;
openInNewTab?: boolean;
};
const buttons: Button[] = [
{ title: "Get Started", url: "/player" },
{ title: "Documentation", url: "https://api.mcutils.xyz/swagger-ui.html" },
{ title: "Get Started", tooltip: "Click to get open the player page", url: "/player" },
{
title: "Documentation",
tooltip: "Click to open the documentation",
url: "https://api.mcutils.xyz/swagger-ui.html",
openInNewTab: true,
},
];
export default function Home(): JSX.Element {
@ -22,14 +31,18 @@ export default function Home(): JSX.Element {
<div className="mt-6 flex flex-row gap-2 justify-center">
{buttons.map((button, index) => {
return (
<Link
key={index}
href={button.url}
target="_blank"
className="w-fit p-2 rounded-lg hover:text-primary transition-all cursor-pointer bg-secondary"
>
<p>{button.title}</p>
</Link>
<Tooltip key={index}>
<TooltipTrigger>
<Button key={index}>
<Link href={button.url} target={button.openInNewTab ? "_blank" : ""}>
<p>{button.title}</p>
</Link>
</Button>
</TooltipTrigger>
<TooltipContent>
<p>{button.tooltip}</p>
</TooltipContent>
</Tooltip>
);
})}
</div>

View File

@ -2,6 +2,7 @@
import { Card } from "@/app/components/card";
import { ErrorCard } from "@/app/components/error-card";
import { LookupPlayer } from "@/app/components/player/lookup-player";
import { Tooltip, TooltipContent, TooltipTrigger } from "@/app/components/ui/tooltip";
import { generateEmbed } from "@/common/embed";
import { CachedPlayer, McUtilsAPIError, SkinPart, getPlayer } from "mcutils-library";
import { Metadata } from "next";
@ -92,9 +93,18 @@ export default async function Page({ params: { id } }: Params): Promise<JSX.Elem
.filter(([part]) => part !== SkinPart.HEAD) // Don't show the head part again
.map(([part, url]) => {
return (
<Link key={part} href={url} target="_blank">
<img className="h-[64px]" src={url} alt={`The player's ${part}`} loading="lazy" />
</Link>
<Tooltip key={part}>
<TooltipTrigger>
<Link href={url} target="_blank">
<img className="h-[64px]" src={url} alt={`The player's ${part}`} loading="lazy" />
</Link>
</TooltipTrigger>
<TooltipContent>
<p>
Click to view {player.username}&apos;s {part}
</p>
</TooltipContent>
</Tooltip>
);
})}
</div>