Task #727: flush attendees table + rose external pill + darker card text

- AttendeesTable got optional `flush` prop: flush mode drops
  rounded-xl/border/shadow, uses only border-t so the table attaches
  full-width inside the expanded booking details card. Dialog usage
  unchanged (non-flush card style).
- Attendee side "خارج الهيئة" pill changed violet → rose
  (bg-rose-100 text-rose-700), matching the external booking badge.
- Darker text in expanded card: title text-slate-900; grid values
  text-slate-800 font-semibold; removed max-w-2xl width cap.
- UI-only; tsc --noEmit clean; architect PASS.
This commit is contained in:
Replit Agent
2026-07-09 08:25:45 +00:00
parent b27539a9ba
commit b9b9b37636
+23 -10
View File
@@ -1225,7 +1225,7 @@ export default function ProtocolPage() {
<span className="text-[11px] text-slate-400">
{t("protocol.bookings.table.title")}
</span>
<div className="text-sm font-bold text-slate-800">
<div className="text-sm font-bold text-slate-900">
{b.title}
</div>
</div>
@@ -1272,22 +1272,26 @@ export default function ProtocolPage() {
<div className="text-[11px] text-slate-400">
{label}
</div>
<div className="text-xs font-medium text-slate-700 break-words">
<div className="text-xs font-semibold text-slate-800 break-words">
{value != null && value !== "" ? value : "—"}
</div>
</div>
))}
</div>
<div className="px-4 py-2.5">
<div className="mb-1.5 text-[11px] font-semibold text-slate-400">
<div>
<div className="px-4 pt-2.5 pb-1.5 text-[11px] font-semibold text-slate-400">
{t("protocol.bookings.keyAttendees")}
</div>
{b.keyAttendees && b.keyAttendees.length > 0 ? (
<div className="max-w-2xl">
<AttendeesTable attendees={b.keyAttendees} t={t} />
</div>
<AttendeesTable
attendees={b.keyAttendees}
t={t}
flush
/>
) : (
<span className="text-xs text-slate-600"></span>
<span className="block px-4 pb-2.5 text-xs text-slate-600">
</span>
)}
</div>
{b.status === "rejected" && b.rejectionReason && (
@@ -2473,12 +2477,21 @@ export default function ProtocolPage() {
function AttendeesTable({
attendees,
t,
flush = false,
}: {
attendees: KeyAttendee[];
t: (key: string) => string;
flush?: boolean;
}) {
return (
<div className="overflow-x-auto rounded-xl border border-slate-200 shadow-sm">
<div
className={cn(
"overflow-x-auto",
flush
? "border-t border-slate-200"
: "rounded-xl border border-slate-200 shadow-sm",
)}
>
<Table>
<TableHeader>
<TableRow className="border-b border-slate-200 bg-slate-100/80 hover:bg-slate-100/80">
@@ -2509,7 +2522,7 @@ function AttendeesTable({
className={cn(
"inline-block whitespace-nowrap rounded-full px-2.5 py-0.5 text-[11px] font-medium",
a.side === "external"
? "bg-violet-100 text-violet-700"
? "bg-rose-100 text-rose-700"
: "bg-sky-100 text-sky-700",
)}
>