updates on bugs on the dispatch and ai button integrations
This commit is contained in:
@@ -18,8 +18,8 @@ import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sh
|
||||
import { useAuth } from '@/lib/AuthContext';
|
||||
import { useExceptions } from '@/lib/doormileHooks';
|
||||
import { formatDoormileTimestamp } from '@/lib/doormileTimestamp';
|
||||
import doormileMark from 'assets/images/doormile-mark.png';
|
||||
import AIPanel from '@/components/assistant/DoormileAI/AIPanel';
|
||||
import AILauncher from '@/components/assistant/DoormileAI/AILauncher';
|
||||
|
||||
/**
|
||||
* The console shell.
|
||||
@@ -387,58 +387,10 @@ export default function AdminLayout() {
|
||||
<div className="ml-auto flex items-center gap-1.5">
|
||||
<GlobalSearch />
|
||||
|
||||
{/* MileTruth. A header control rather than a route: shown on all pages except the home page */}
|
||||
{!isHome && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => toggleAssistant((open) => !open)}
|
||||
aria-label={assistantOpen ? 'Close MileTruth' : 'Open MileTruth'}
|
||||
aria-expanded={assistantOpen}
|
||||
className={cn(
|
||||
'grid h-8 w-8 place-items-center rounded-lg transition-all cursor-pointer',
|
||||
'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/50',
|
||||
// A RING, not a background fill.
|
||||
//
|
||||
// The fill was what capped the mark's size: it renders
|
||||
// behind the image, so a larger mark covered it and the
|
||||
// control looked dead on hover. That is why the icon sat at
|
||||
// 20px, then 24px — each bump ate the only affordance the
|
||||
// button had.
|
||||
//
|
||||
// A ring draws at the button's edge instead, so it stays
|
||||
// visible whatever the mark's size, and the icon is free to
|
||||
// be as large as the 32px box allows. The tint is kept
|
||||
// underneath for the open state, where it still shows
|
||||
// around the mark's transparent corners.
|
||||
assistantOpen
|
||||
? 'bg-brand-tint text-brand ring-2 ring-brand/30'
|
||||
: 'text-ink-3 hover:bg-surface-sunken hover:text-ink-1 hover:ring-2 hover:ring-brand/20'
|
||||
)}
|
||||
>
|
||||
{/* 28px, filling the 32px button.
|
||||
|
||||
The size history is worth keeping, because each step was
|
||||
forced by the hover treatment rather than by taste. It
|
||||
began at `h-9 w-9 max-w-none` — 36px inside a 32px button,
|
||||
overflowing its own control by 2px on every side, which
|
||||
broke the row's alignment against the bell and avatar and
|
||||
covered the button so the hover fill had nowhere to show.
|
||||
20px fixed both and read as too faint. 24px was as far as
|
||||
it could go while a background fill was still the
|
||||
affordance.
|
||||
|
||||
Moving that affordance to a ring (see the button above)
|
||||
removed the cap, so this is sized for legibility rather
|
||||
than around a constraint: 28px in a 32px box, and
|
||||
comfortably larger than the Bell's 16px — which is right,
|
||||
because a brand mark carrying its own circular frame reads
|
||||
smaller than its box where a stroked icon reads full-size.
|
||||
|
||||
`object-contain` with no `max-w-none`, so it can never
|
||||
overflow the button again however the asset changes. */}
|
||||
<img className="h-7 w-7 object-contain" src={doormileMark} alt="" aria-hidden="true" />
|
||||
</button>
|
||||
)}
|
||||
{/* MileTruth's control is no longer here. It is the floating
|
||||
launcher at the bottom of the page (AILauncher, mounted beside
|
||||
the panel below), so this row holds only the utilities that
|
||||
belong in a header: search, alerts, the account menu. */}
|
||||
|
||||
{!isClient && <NotificationsMenu />}
|
||||
|
||||
@@ -562,7 +514,16 @@ export default function AdminLayout() {
|
||||
</main>
|
||||
</div>
|
||||
|
||||
{!isHome && <AIPanel isOpen={assistantOpen} onClose={() => toggleAssistant(false)} />}
|
||||
{/* Both guarded by the SAME condition, deliberately adjacent: the home
|
||||
page runs the assistant as the page itself, so neither the docked
|
||||
panel nor its launcher belongs there. Splitting these two rules apart
|
||||
is how you end up with a button that opens nothing. */}
|
||||
{!isHome && (
|
||||
<>
|
||||
<AILauncher isOpen={assistantOpen} onToggle={() => toggleAssistant((open) => !open)} />
|
||||
<AIPanel isOpen={assistantOpen} onClose={() => toggleAssistant(false)} />
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user