75 lines · 2.2 KB
import { forwardRef } from "react";
import { createLink, type LinkComponent } from "@tanstack/react-router";
import { Tabs } from "@cloudflare/kumo/components/tabs";
import { cn } from "~/utils/cn";

type AnchorProps = React.AnchorHTMLAttributes<HTMLAnchorElement>;

const SideNavAnchor = forwardRef<HTMLAnchorElement, AnchorProps>(function SideNavAnchor(
  { className, children, ...rest },
  ref,
) {
  return (
    <a
      ref={ref}
      className={cn(
        "rounded-md px-3 py-1.5 text-kumo-subtle hover:bg-kumo-tint hover:text-kumo-strong [&.active]:bg-kumo-tint [&.active]:text-kumo-strong",
        className,
      )}
      {...rest}
    >
      {children}
    </a>
  );
});
SideNavAnchor.displayName = "SideNavAnchor";

const RouterSideNavLink = createLink(SideNavAnchor);

/** Vertical settings-style navigation item. */
export const SideNavLink: LinkComponent<typeof SideNavAnchor> = (props) => <RouterSideNavLink {...props} />;

export function SideNav({
  title,
  className,
  children,
}: {
  title?: React.ReactNode;
  className?: string;
  children: React.ReactNode;
}) {