[object Object]

← back to Rentv 2026

deals-log: change-history opens as a LEFT drawer, not a centered modal — Steve inline/left-panel directive

8d2c596e105c1ce0c9cd170051e4957c8b715f3b · 2026-08-05 14:53:06 -0700 · Steve Abrams

Row click now slides the per-deal change timeline in from the LEFT (table stays visible,
shifts right), matching the re-search inline/left-panel pattern. No centered modal overlay.
Verified via real Chrome: left drawer + history timeline PASS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 8d2c596e105c1ce0c9cd170051e4957c8b715f3b
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Aug 5 14:53:06 2026 -0700

    deals-log: change-history opens as a LEFT drawer, not a centered modal — Steve inline/left-panel directive
    
    Row click now slides the per-deal change timeline in from the LEFT (table stays visible,
    shifts right), matching the re-search inline/left-panel pattern. No centered modal overlay.
    Verified via real Chrome: left drawer + history timeline PASS.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 public/deals-log.html | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/public/deals-log.html b/public/deals-log.html
index 820e3be1..927c57f7 100644
--- a/public/deals-log.html
+++ b/public/deals-log.html
@@ -32,9 +32,12 @@
   .when{font-size:11px;color:var(--sub);white-space:nowrap}
   .drill{color:var(--a);text-decoration:underline dotted;text-underline-offset:2px}
   .empty{padding:60px;text-align:center;color:var(--sub)}
-  #ov{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:60;align-items:flex-start;justify-content:center;padding:40px 14px;overflow-y:auto}
-  #ov.on{display:flex}
-  #modal{width:min(720px,96vw);background:var(--bg);border-radius:12px;padding:20px 22px;position:relative}
+  /* LEFT detail drawer (no centered modal) — row click slides the change-history in from the left */
+  #ov{position:fixed;top:0;left:0;width:420px;height:100vh;z-index:60;transform:translateX(-100%);transition:transform .2s;overflow-y:auto;pointer-events:none}
+  #ov.on{transform:translateX(0);pointer-events:auto}
+  body.panel-open .wrap{margin-left:440px}
+  @media(max-width:900px){ body.panel-open .wrap{margin-left:0} #ov{width:90vw} }
+  #modal{width:100%;min-height:100vh;background:var(--bg);border-right:2px solid var(--a);box-shadow:4px 0 24px rgba(0,0,0,.12);padding:20px 22px;position:relative}
   #modal h3{margin:0 0 3px;font:700 18px/1.25 'Playfair Display',Georgia,serif}
   #modal .maddr{color:var(--sub);font-size:12px;margin-bottom:12px}
   #modal .x{position:absolute;top:12px;right:14px;background:none;border:0;font-size:22px;cursor:pointer;color:var(--sub)}
@@ -127,7 +130,7 @@ function render(){
 
 // ── change-history drill-down (Steve: every datum drills to deeper data) ──
 async function openHistory(id){
-  const ov=$('#ov'), mb=$('#mbody'); ov.classList.add('on'); mb.innerHTML='<p class="empty">loading history…</p>';
+  const ov=$('#ov'), mb=$('#mbody'); ov.classList.add('on'); document.body.classList.add('panel-open'); mb.innerHTML='<p class="empty">loading history…</p>';
   let h; try{ h=await (await fetch('/api/deals/'+encodeURIComponent(id)+'/history')).json(); }catch(e){ mb.innerHTML='<p class="empty">could not load history</p>'; return; }
   if(h.error){ mb.innerHTML='<p class="empty">'+esc(h.error)+'</p>'; return; }
   const c=h.current||{};
@@ -141,7 +144,7 @@ async function openHistory(id){
     <div class="when" style="margin-bottom:10px">First found ${esc(fmtDT(h.first_seen))} · last found ${esc(fmtDT(h.last_seen))} · seen ${h.seen_count}× · ${h.revisions} revision(s)</div>
     <div class="tl">${evs||'<p class="empty">no history</p>'}</div>`;
 }
-function closeOv(){ $('#ov').classList.remove('on'); }
+function closeOv(){ $('#ov').classList.remove('on'); document.body.classList.remove('panel-open'); }
 $('#ov').addEventListener('click',e=>{ if(e.target.id==='ov') closeOv(); });
 document.addEventListener('keydown',e=>{ if(e.key==='Escape') closeOv(); });
 

← caa3fa7c re-search: click items expand INLINE + left detail panel (no  ·  back to Rentv 2026  ·  Deal Desk: /find now defaults to a $0 corpus path (723 real 6a4fdee5 →