Scaffolds the Next.js 16 / TypeScript strict / Tailwind v3 app per NEXTJS_REBUILD_SUPERPROMPT.md, and implements the Foundation slice from the Phase 1 plan: - Corrected Supabase schema (supabase/schema.sql): org units, employees, history, positions, hire drafts, saved reports, audit log, reorg scenarios, role-based profiles, salary-masking view, RLS policies, auto-derivation triggers, position-number generator. - Seed script (supabase/seed.ts): ~800 realistic Austrian employees across 9 divisions / 16 departments / 35 teams, history, 8 open positions, and hr_admin/manager test accounts. - Supabase clients (lib/supabase/*), design tokens (tailwind.config.ts), format/color helpers (lib/format.ts, lib/colors.ts). - Shared UI kit (components/ui): Avatar, StatusChip, Toast, Modal, SlideOver, SegmentedControl, Lookup. - Auth (login page, Server Actions) and proxy.ts (Next 16's replacement for middleware) guarding the authenticated route group. - Shell (Sidebar, Topbar, NewHireButton stub) and the Dashboard page, reading live data via employees_directory. Employees list/detail, hire wizard, action panels, org chart, positions, reports, and audit log are deferred to later phases per the plan.
28 lines
758 B
TypeScript
28 lines
758 B
TypeScript
import { avatarColorFor } from "@/lib/colors";
|
|
import { initials } from "@/lib/format";
|
|
|
|
type AvatarProps = {
|
|
firstName: string;
|
|
lastName: string;
|
|
color?: string | null;
|
|
size?: "sm" | "md" | "lg";
|
|
};
|
|
|
|
const SIZE_CLASSES: Record<NonNullable<AvatarProps["size"]>, string> = {
|
|
sm: "h-7 w-7 text-xs",
|
|
md: "h-9 w-9 text-sm",
|
|
lg: "h-14 w-14 text-lg",
|
|
};
|
|
|
|
export function Avatar({ firstName, lastName, color, size = "md" }: AvatarProps) {
|
|
const bg = color ?? avatarColorFor(`${firstName}${lastName}`);
|
|
return (
|
|
<span
|
|
className={`inline-flex shrink-0 items-center justify-center rounded-full font-bold text-white ${SIZE_CLASSES[size]}`}
|
|
style={{ backgroundColor: bg }}
|
|
>
|
|
{initials(firstName, lastName)}
|
|
</span>
|
|
);
|
|
}
|