Files
zeekayandGitHub b27d2eef7d fix(frontend): render-safe SPA — tsgo 0, kill next-themes blank-page crash, o11y-site from source (#14)
tsgo 707->0; alias next-themes/next/* to browser stubs (kills blank-page crash); resolve [[.BaseHref]]/[[.Settings]] at build time; Dockerfile.site builds from source; [email protected].4 pin. Render-proven (Playwright, all routes, 0 ReferenceError).
2026-07-03 16:21:48 -07:00

22 lines
887 B
TypeScript

// Browser stub for `next/link`, eagerly imported by the @hanzo/ui barrel
// (`import Link from 'next/link'`). o11y routes with react-router, not Next; this
// degrades to a plain <a>. Must resolve to a real module (aliased in vite.config.ts),
// never be externalized — a bare `next/link` specifier is unresolvable in the browser
// and crashes the SPA at load.
import { createElement, forwardRef } from 'react';
import type { AnchorHTMLAttributes, Ref } from 'react';
type LinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> & {
href?: string | { pathname?: string };
};
const Link = forwardRef(function Link(
{ href, children, ...rest }: LinkProps,
ref: Ref<HTMLAnchorElement>,
) {
const resolvedHref = typeof href === 'string' ? href : href?.pathname ?? '#';
return createElement('a', { ref, href: resolvedHref, ...rest }, children);
});
export default Link;