diff --git a/packages/website/app/modules/app/app-footer.tsx b/packages/website/app/modules/app/app-footer.tsx index 747acde..c92bede 100644 --- a/packages/website/app/modules/app/app-footer.tsx +++ b/packages/website/app/modules/app/app-footer.tsx @@ -11,13 +11,13 @@ export function AppFooter() {

Coded with using{" "} - + Remix

Uses{" "} - + umami {" "} for simple, non-identifying analytics. diff --git a/packages/website/app/modules/navigation/active-link.tsx b/packages/website/app/modules/navigation/active-link.tsx new file mode 100644 index 0000000..6efb164 --- /dev/null +++ b/packages/website/app/modules/navigation/active-link.tsx @@ -0,0 +1,14 @@ +import type { ReactNode } from "react" +import type { PathPattern } from "react-router" +import { useMatch } from "react-router" + +export function ActiveLink({ + to, + children, +}: { + to: string | PathPattern + children: (props: { active: boolean }) => ReactNode +}) { + const match = useMatch(to) + return <>{children({ active: match != undefined })} +} diff --git a/packages/website/app/modules/navigation/main-navigation-menu.tsx b/packages/website/app/modules/navigation/main-navigation-menu.tsx index be2a33d..6127976 100644 --- a/packages/website/app/modules/navigation/main-navigation-menu.tsx +++ b/packages/website/app/modules/navigation/main-navigation-menu.tsx @@ -1,6 +1,7 @@ import { Menu, Transition } from "@headlessui/react" import { MenuAlt4Icon } from "@heroicons/react/outline" import clsx from "clsx" +import { ActiveLink } from "~/modules/navigation/active-link" import { useGuideLinksContext } from "~/modules/navigation/guide-links-context" import { Popper } from "~/modules/ui/popper" import { AppLink } from "./app-link" @@ -39,8 +40,17 @@ export function MainNavigationMenu() { {guideLinks.map(({ link }) => ( - {({ active }) => ( - + {(menuItem) => ( + + {(activeLink) => ( + + )} + )} ))} diff --git a/packages/website/app/modules/navigation/main-navigation.tsx b/packages/website/app/modules/navigation/main-navigation.tsx index 6e5b1df..6e9fb12 100644 --- a/packages/website/app/modules/navigation/main-navigation.tsx +++ b/packages/website/app/modules/navigation/main-navigation.tsx @@ -12,7 +12,7 @@ export function MainNavigation() {

{mainLinks.map((link) => ( - + ))}
diff --git a/packages/website/app/modules/ui/components.ts b/packages/website/app/modules/ui/components.ts index 76b590e..128ad0f 100644 --- a/packages/website/app/modules/ui/components.ts +++ b/packages/website/app/modules/ui/components.ts @@ -4,12 +4,16 @@ export const maxWidthContainer = clsx`mx-auto w-full max-w-screen-lg px-4` export const inlineIconClass = clsx`inline w-5 align-sub` -export const linkClass = clsx` - font-medium inline-block relative - opacity-60 hover:opacity-100 transition-opacity - after:absolute after:block after:w-full after:h-px after:bg-white/50 after:translate-y-[3px] after:opacity-0 after:transition - hover:after:translate-y-[-1px] hover:after:opacity-100 -` +export const linkClass = ({ active = false } = {}) => + clsx( + clsx`font-medium inline-block relative`, + clsx`opacity-60 hover:opacity-100 transition-opacity`, + clsx`after:absolute after:block after:w-full after:h-px after:bg-white/50 after:translate-y-[3px] after:opacity-0 after:transition`, + clsx`hover:after:translate-y-[-1px] hover:after:opacity-100`, + active + ? clsx`text-emerald-500 after:bg-emerald-500` + : clsx`after:bg-white/50`, + ) export const docsProseClass = clsx` prose prose-invert diff --git a/packages/website/app/routes/guides.tsx b/packages/website/app/routes/guides.tsx index 3f1556c..6d797aa 100644 --- a/packages/website/app/routes/guides.tsx +++ b/packages/website/app/routes/guides.tsx @@ -1,5 +1,6 @@ import clsx from "clsx" import { Outlet } from "remix" +import { ActiveLink } from "~/modules/navigation/active-link" import { AppLink } from "~/modules/navigation/app-link" import { useGuideLinksContext } from "~/modules/navigation/guide-links-context" import { MainNavigation } from "~/modules/navigation/main-navigation" @@ -24,7 +25,11 @@ export default function GuidePage() { diff --git a/packages/website/package.json b/packages/website/package.json index 900028d..a4aced5 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -25,6 +25,8 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-focus-on": "^3.5.4", + "react-router": "^6.2.1", + "react-router-dom": "^6.2.1", "remix": "^1.1.1" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a68c691..3528680 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -117,6 +117,8 @@ importers: react: ^17.0.2 react-dom: ^17.0.2 react-focus-on: ^3.5.4 + react-router: ^6.2.1 + react-router-dom: ^6.2.1 rehype-prism-plus: ^1.3.1 remix: ^1.1.1 tailwindcss: ^3.0.13 @@ -137,6 +139,8 @@ importers: react: 17.0.2 react-dom: 17.0.2_react@17.0.2 react-focus-on: 3.5.4_b08e3c15324cbe90a6ff8fcd416c932c + react-router: 6.2.1_react@17.0.2 + react-router-dom: 6.2.1_react-dom@17.0.2+react@17.0.2 remix: 1.1.1 devDependencies: '@remix-run/dev': 1.1.1