Tooltips in the top navigation bar
Added tooltips to icons in top navigation bar
This commit is contained in:
@ -14,9 +14,15 @@ import {
|
||||
DropdownMenuTrigger,
|
||||
} from "./ui/dropdown-menu"
|
||||
|
||||
import {
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
TooltipProvider,
|
||||
TooltipTrigger,
|
||||
} from "./ui/tooltip"
|
||||
|
||||
// Please note that clang = lang, it's just for more confusion
|
||||
export function LangSwitcher() {
|
||||
export function LangSwitcher({ tooltip }) {
|
||||
function getClang(){
|
||||
const clang = window.location.pathname.substring(1,3);
|
||||
return clang
|
||||
@ -34,7 +40,18 @@ export function LangSwitcher() {
|
||||
return (
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<Button variant="outline" size="icon" className="bg-inherit border-none text-content hover:text-bkg" dangerouslySetInnerHTML={{ __html: icons["lang"] }} />
|
||||
<div>
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger>
|
||||
<Button variant="outline" size="icon" className="bg-inherit border-none text-content hover:text-bkg" dangerouslySetInnerHTML={{ __html: icons["lang"] }} />
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
<p>{tooltip}</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
</div>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent className="w-56">
|
||||
<DropdownMenuRadioGroup value={clang} onValueChange={clinkClang}>
|
||||
|
@ -6,10 +6,26 @@ import { Button } from "./ui/button"
|
||||
import { cn } from '../lib/utils'
|
||||
import { icons } from "../lib/icons"
|
||||
|
||||
import {
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
TooltipProvider,
|
||||
TooltipTrigger,
|
||||
} from "./ui/tooltip"
|
||||
|
||||
export function NavButton({selected, variant}) {
|
||||
export function NavButton({ selected, variant, tooltip }) {
|
||||
|
||||
return (
|
||||
<Button id={`${variant}Btn`} variant="outline" size="icon" className={cn("bg-inherit border-none text-content", selected ? "text-accent hover:text-bkg" : "text-content hover:text-bkg")} dangerouslySetInnerHTML={{ __html: icons[variant] }} />
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger>
|
||||
<Button id={`${variant}Btn`} variant="outline" size="icon" className={cn("bg-inherit border-none text-content", selected ? "text-accent hover:text-bkg" : "text-content hover:text-bkg")} dangerouslySetInnerHTML={{ __html: icons[variant] }} />
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
<p>{tooltip}</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
|
||||
)
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ import { ThemeSelector } from "./ThemeSelector"
|
||||
import NavbarSkeleton from "./NavbarSkeleton.astro";
|
||||
import { LangSwitcher } from "./LangSwitcher";
|
||||
import { NavButton } from "./NavButton";
|
||||
import { useTranslations, getLangFromUrl } from "../i18n/utils";
|
||||
|
||||
function selected(path) {
|
||||
var currentURL = Astro.url.pathname
|
||||
@ -17,18 +18,20 @@ function selected(path) {
|
||||
|
||||
const locale = Astro.currentLocale ? Astro.currentLocale : "en"
|
||||
|
||||
const t = useTranslations(getLangFromUrl(Astro.url));
|
||||
|
||||
---
|
||||
<NavbarSkeleton>
|
||||
<!-- Page Navigation -->
|
||||
<div class="flex gap-1">
|
||||
<a href={`/${locale}/`}>
|
||||
<NavButton selected={selected("/")} variant="home"/>
|
||||
<NavButton selected={selected("/")} variant="home" tooltip={t("navbar")["home"]} client:load />
|
||||
</a>
|
||||
<a href={`/${locale}/blog`}>
|
||||
<NavButton selected={selected("/blog")} variant="blog"/>
|
||||
<NavButton selected={selected("/blog")} variant="blog" tooltip={t("navbar")["blog"]} client:load />
|
||||
</a>
|
||||
<a href={`/${locale}/music`}>
|
||||
<NavButton selected={selected("/music")} variant="music"/>
|
||||
<NavButton selected={selected("/music")} variant="music" tooltip={t("navbar")["music"]} client:load/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@ -39,7 +42,7 @@ const locale = Astro.currentLocale ? Astro.currentLocale : "en"
|
||||
|
||||
<!-- Options (language, light/dark mode) -->
|
||||
<div class="flex gap-1">
|
||||
<LangSwitcher client:load client:only="react"/>
|
||||
<ThemeSelector client:load client:only="react"/>
|
||||
<LangSwitcher tooltip={t("navbar")["lang"]} client:load client:only="react"/>
|
||||
<ThemeSelector tooltip={t("navbar")["mode"]} client:load client:only="react"/>
|
||||
</div>
|
||||
</NavbarSkeleton>
|
@ -1,4 +1,4 @@
|
||||
"use client"
|
||||
|
||||
|
||||
import * as React from "react"
|
||||
|
||||
@ -12,9 +12,16 @@ import {
|
||||
DropdownMenuTrigger,
|
||||
} from "./ui/dropdown-menu"
|
||||
|
||||
import {
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
TooltipProvider,
|
||||
TooltipTrigger,
|
||||
} from "./ui/tooltip"
|
||||
|
||||
|
||||
// Please note that clang = lang, it's just for more confusion
|
||||
export function ThemeSelector() {
|
||||
export function ThemeSelector({ tooltip }) {
|
||||
function getTheme() {
|
||||
console.log(localStorage.getItem("data-theme"));
|
||||
const theme = localStorage.getItem("data-theme") || document.documentElement.getAttribute("data-theme");
|
||||
@ -33,7 +40,18 @@ export function ThemeSelector() {
|
||||
return (
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<Button variant="outline" size="icon" className="bg-inherit border-none text-content hover:text-bkg" dangerouslySetInnerHTML={{ __html: icons[theme] }} />
|
||||
<div>
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger>
|
||||
<Button variant="outline" size="icon" className="bg-inherit border-none text-content hover:text-bkg" dangerouslySetInnerHTML={{ __html: icons[theme] }} />
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
<p>{tooltip}</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
</div>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent className="w-20">
|
||||
<DropdownMenuRadioGroup value={theme} onValueChange={newTheme}>
|
||||
|
Reference in New Issue
Block a user