summaryrefslogblamecommitdiff
path: root/makima/frontend/src/components/RewriteLink.tsx
blob: 6e591a18ee5478878e79c5b4687009ea18647ef7 (plain) (tree)






























































                                                                     
import { Link } from "react-router";
import { useTextScramble } from "../hooks/useTextScramble";

interface RewriteLinkProps {
  to?: string;
  href?: string;
  children: string;
  disabled?: boolean;
  external?: boolean;
  className?: string;
}

export function RewriteLink({
  to,
  href,
  children,
  disabled = false,
  external = false,
  className = "",
}: RewriteLinkProps) {
  const { displayText, scramble, reset } = useTextScramble(children);

  const baseClass = `rewrite-link ${className}`;

  if (disabled) {
    return (
      <span
        className={baseClass}
        aria-disabled="true"
        onMouseEnter={scramble}
        onMouseLeave={reset}
      >
        {displayText}
      </span>
    );
  }

  if (external || href) {
    return (
      <a
        href={href || to}
        target="_blank"
        rel="noopener noreferrer"
        className={baseClass}
        onMouseEnter={scramble}
        onMouseLeave={reset}
      >
        {displayText}
      </a>
    );
  }

  return (
    <Link
      to={to || "/"}
      className={baseClass}
      onMouseEnter={scramble}
      onMouseLeave={reset}
    >
      {displayText}
    </Link>
  );
}