feat(ui): add auth pages, company rail, inbox redesign, and page improvements

Add Auth sign-in/sign-up page and InviteLanding page for invite acceptance.
Add CloudAccessGate that checks deployment mode and redirects to /auth when
session is required. Add CompanyRail with drag-and-drop company switching.
Add MarkdownBody prose renderer. Redesign Inbox with category filters and
inline join-request approval. Refactor AgentDetail to overview/configure/runs
views with claude-login support. Replace navigate() anti-patterns with <Link>
components in Dashboard and MetricCard. Add live-run indicators in sidebar
agents. Fix LiveUpdatesProvider cache key resolution for issue identifiers.
Add auth, health, and access API clients.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Forgotten
2026-02-23 14:41:21 -06:00
parent 5b983ca4d3
commit 2ec45c49af
48 changed files with 2794 additions and 1067 deletions

View File

@@ -1,4 +1,5 @@
import { type ReactNode } from "react";
import { Link } from "react-router-dom";
import { cn } from "../lib/utils";
interface EntityRowProps {
@@ -8,6 +9,7 @@ interface EntityRowProps {
subtitle?: string;
trailing?: ReactNode;
selected?: boolean;
to?: string;
onClick?: () => void;
className?: string;
}
@@ -19,19 +21,20 @@ export function EntityRow({
subtitle,
trailing,
selected,
to,
onClick,
className,
}: EntityRowProps) {
return (
<div
className={cn(
"flex items-center gap-3 px-4 py-2 text-sm border-b border-border last:border-b-0 transition-colors",
onClick && "cursor-pointer hover:bg-accent/50",
selected && "bg-accent/30",
className
)}
onClick={onClick}
>
const isClickable = !!(to || onClick);
const classes = cn(
"flex items-center gap-3 px-4 py-2 text-sm border-b border-border last:border-b-0 transition-colors",
isClickable && "cursor-pointer hover:bg-accent/50",
selected && "bg-accent/30",
className
);
const content = (
<>
{leading && <div className="flex items-center gap-2 shrink-0">{leading}</div>}
<div className="flex-1 min-w-0">
<div className="flex items-center gap-2">
@@ -47,6 +50,20 @@ export function EntityRow({
)}
</div>
{trailing && <div className="flex items-center gap-2 shrink-0">{trailing}</div>}
</>
);
if (to) {
return (
<Link to={to} className={cn(classes, "no-underline text-inherit")} onClick={onClick}>
{content}
</Link>
);
}
return (
<div className={classes} onClick={onClick}>
{content}
</div>
);
}