feat(uat-batch-5): UI polish — dialog width, chart centering, recommender pill, audit link, inbox reorder
Six surgical Wave-2-3 wins:
- UploadForSigningDialog: dialog widened to max-w-[1400px] w-[95vw] so
the place-fields step actually has room; recipient row converts from
fixed grid to flex (name flex-1, email flex-[2] for the longer
string, role w-40, delete shrink-0); invitation-message textarea
rows 3 → 6.
- ChartCard becomes flex-col with flex-1 + items-center on CardContent
so charts vertically center when neighbouring cards make the row
taller (e.g. Pipeline Value's full breakdown).
- Berth recommender pill: drops the "Tier {letter} · " prefix; shows
just the plain-English label ("Open" / "Fall-through" / "Active
interest" / "Late stage") as a Popover trigger that explains the
4-state ladder. HelpCircle icon makes the tooltip discoverable.
- Activity feed gains a "See all" link in the header pointing at
/<port>/admin/audit, permission-gated by `admin.view_audit_log`.
- Inbox section order swaps to Reminders above Alerts (rep-noted
priority); PageHeader title flips to "Reminders & Alerts". Section
ids, deep-link hashes, and localStorage open-state keys untouched.
- Inbox ReminderList (embedded mode only): "New Reminder" button now
shares the filter row (right-aligned via ml-auto) instead of
occupying its own dedicated row above the filters.
tsc clean. 1419/1419 vitest pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -163,7 +163,7 @@ export function UploadForSigningDialog({
|
||||
if (!open) return null;
|
||||
return (
|
||||
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||
<DialogContent className="max-w-5xl max-h-[90vh] overflow-hidden p-0 flex flex-col">
|
||||
<DialogContent className="max-w-[1400px] w-[95vw] max-h-[90vh] overflow-hidden p-0 flex flex-col">
|
||||
<DialogBody
|
||||
key={`${interestId}:${documentType}`}
|
||||
interestId={interestId}
|
||||
@@ -634,18 +634,18 @@ function RecipientsStep({
|
||||
<Label>Recipients (in signing order)</Label>
|
||||
<div className="space-y-2">
|
||||
{recipients.map((r, i) => (
|
||||
<div key={i} className="grid grid-cols-12 gap-2 items-center">
|
||||
<span className="col-span-1 text-xs text-center text-muted-foreground tabular-nums">
|
||||
<div key={i} className="flex gap-2 items-center">
|
||||
<span className="w-8 shrink-0 text-xs text-center text-muted-foreground tabular-nums">
|
||||
#{r.signingOrder}
|
||||
</span>
|
||||
<Input
|
||||
className="col-span-3"
|
||||
className="flex-1 min-w-0"
|
||||
placeholder="Name"
|
||||
value={r.name}
|
||||
onChange={(e) => update(i, { name: e.target.value })}
|
||||
/>
|
||||
<Input
|
||||
className="col-span-4"
|
||||
className="flex-[2] min-w-0"
|
||||
placeholder="email@example.com"
|
||||
type="email"
|
||||
value={r.email}
|
||||
@@ -655,7 +655,7 @@ function RecipientsStep({
|
||||
value={r.role}
|
||||
onValueChange={(v) => update(i, { role: v as Recipient['role'] })}
|
||||
>
|
||||
<SelectTrigger className="col-span-3">
|
||||
<SelectTrigger className="w-40 shrink-0">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
@@ -670,7 +670,7 @@ function RecipientsStep({
|
||||
size="icon"
|
||||
onClick={() => remove(i)}
|
||||
aria-label="Remove recipient"
|
||||
className="col-span-1"
|
||||
className="shrink-0"
|
||||
>
|
||||
<Trash2 className="size-4" aria-hidden />
|
||||
</Button>
|
||||
@@ -689,8 +689,8 @@ function RecipientsStep({
|
||||
id="invitation-message"
|
||||
value={invitationMessage}
|
||||
onChange={(e) => onInvitationMessageChange(e.target.value)}
|
||||
placeholder="Hi John — please review the attached contract before signing. Reach out if anything needs adjusting."
|
||||
rows={3}
|
||||
placeholder="Hi John, please review the attached contract before signing. Reach out if anything needs adjusting."
|
||||
rows={6}
|
||||
maxLength={1000}
|
||||
className="w-full rounded-md border border-input bg-background px-3 py-2 text-sm shadow-xs focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring resize-none"
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user