import { MarketingHero } from "~/components/marketing/MarketingHero";
import { LEGAL_LAST_UPDATED, LEGAL_PAGES } from "~/lib/legal";
import type { LegalInfo } from "~/lib/legal";
import { Callout } from "~/ui/Callout";
import { PageContainer } from "~/ui/PageContainer";
import { ExternalLink, TextLink } from "~/ui/TextLink";
type Props = {
title: string;
lede: string;
info: LegalInfo;
children: React.ReactNode;
};
/** Shared frame for /terms, /privacy and the other policy pages: hero, draft banner, date, sibling nav. */
export function LegalPage({ title, lede, info, children }: Props) {
return (
<>
{info.draft && (
Draft — have counsel review before launch. The operator has not yet set every legal detail (entity,
contact, jurisdiction, copyright agent); bracketed placeholders mark the gaps.
)}
Last updated {LEGAL_LAST_UPDATED}
{children}
>
);
}
export function LegalSection({ title, children }: { title: string; children: React.ReactNode }) {
return (
{title}
{children}
);
}
/** An operator fact, or a visible placeholder naming the var that sets it. */
export function Fact({ value, placeholder }: { value: string | null; placeholder: string }) {
if (value) return value;
return [{placeholder}];
}
export function MailLink({ address, placeholder }: { address: string | null; placeholder: string }) {
if (!address) return ;
return {address};
}
/** "the operator" in running text: the legal entity when configured. */
export function Operator({ info }: { info: LegalInfo }) {
return ;
}