|
| 1 | +<!doctype html> |
| 2 | +<html lang="en"> |
| 3 | +<head> |
| 4 | +<meta charset="utf-8"> |
| 5 | +<title>Bulk AI flow</title> |
| 6 | +<link rel="stylesheet" href="previews.css"> |
| 7 | +<style> |
| 8 | + .scrim { position: absolute; inset: 0; background: var(--scrim); display: flex; align-items: center; justify-content: center; } |
| 9 | + .dlg { width: 800px; background: var(--surface); border-radius: 12px; box-shadow: var(--shadow-pop); overflow: hidden; } |
| 10 | + .dlg-head { display: flex; align-items: center; justify-content: space-between; padding: 14px 18px 8px; font-size: 15px; font-weight: 600; } |
| 11 | + .dlg-head .i { color: var(--muted); } |
| 12 | + .dlg-body { display: flex; flex-direction: column; gap: 10px; padding: 4px 18px 14px; } |
| 13 | + .dlg-foot { display: flex; justify-content: flex-end; gap: 8px; padding: 10px 18px; border-top: 1px solid var(--border); background: var(--bg); } |
| 14 | + .prog { display: flex; align-items: center; gap: 10px; font-size: 13px; } |
| 15 | + .prog .bar { flex: 1; } |
| 16 | + .ok { color: var(--success); } |
| 17 | + .err { color: var(--danger-fg); } |
| 18 | + .md { display: grid; grid-template-columns: 240px 1fr; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; } |
| 19 | + .rows { border-right: 1px solid var(--border); background: var(--bg); } |
| 20 | + .row { display: grid; grid-template-columns: 16px 34px 1fr 16px; align-items: center; gap: 8px; padding: 8px 10px; border-bottom: 1px solid var(--border); border-left: 2px solid transparent; } |
| 21 | + .row.is-on { background: var(--accent-soft); border-left-color: var(--accent); } |
| 22 | + .row img { width: 34px; height: 24px; border-radius: 4px; object-fit: cover; } |
| 23 | + .row b { display: block; font-size: 12.5px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } |
| 24 | + .row span { display: block; font-size: 11px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } |
| 25 | + .row .cb:checked { display: grid; } |
| 26 | + .rec-head { display: flex; align-items: center; gap: 8px; padding: 9px 14px; border-bottom: 1px solid var(--border); } |
| 27 | + .rec-head b { font-size: 13px; font-weight: 600; } |
| 28 | + .rec-head .t-xs { display: block; } |
| 29 | + .field { padding: 8px 14px; border-bottom: 1px solid var(--border); } |
| 30 | + .field:last-child { border-bottom: 0; } |
| 31 | + .field-head { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; font-size: 12.5px; font-weight: 500; } |
| 32 | + .field-head .i { margin-left: auto; color: var(--muted); } |
| 33 | + .badge-new { background: var(--accent-soft); border-color: var(--accent-line); color: var(--accent-fg); height: 18px; font-size: 11px; } |
| 34 | + .pair { display: grid; grid-template-columns: 1fr 14px 1fr; gap: 8px; align-items: start; } |
| 35 | + .pair > .i { width: 14px; height: 14px; margin-top: 8px; color: var(--faint); } |
| 36 | + .pair.media { align-items: center; } |
| 37 | + .pair.media > .i { margin-top: 0; } |
| 38 | + .cur { min-height: 30px; padding: 6px 9px; border-radius: 6px; background: var(--surface-2); color: var(--muted); font-size: 12px; line-height: 17px; } |
| 39 | + .gen { min-height: 30px; padding: 6px 9px; border-radius: 6px; border: 1px solid var(--border-strong); background: var(--surface); font-size: 12px; line-height: 17px; } |
| 40 | + .pic { width: 100%; height: 64px; border-radius: 6px; object-fit: cover; border: 1px solid var(--border); } |
| 41 | + .pic.toon { filter: saturate(1.9) contrast(1.15) brightness(1.05); } |
| 42 | +</style> |
| 43 | +</head> |
| 44 | +<body> |
| 45 | +<!-- the review of the bulk AI flow: records with their status on the left, current value next to the generated one on the right --> |
| 46 | +<div class="screen app" style="width: 880px; height: 550px"> |
| 47 | + <aside class="side rail" data-active="Apartments"></aside> |
| 48 | + <div class="page"> |
| 49 | + <header class="topbar"> |
| 50 | + <span class="avatar"><svg class="i"><use href="icons.svg#user"/></svg></span> |
| 51 | + </header> |
| 52 | + <main class="content"></main> |
| 53 | + </div> |
| 54 | + <div class="scrim"> |
| 55 | + <div class="dlg"> |
| 56 | + <div class="dlg-head">Process with AI<svg class="i"><use href="icons.svg#x"/></svg></div> |
| 57 | + <div class="dlg-body"> |
| 58 | + <div class="prog"> |
| 59 | + <span class="spin"></span> |
| 60 | + <span class="num">5 of 8 records processed</span> |
| 61 | + <div class="bar"><span style="width: 62%"></span></div> |
| 62 | + </div> |
| 63 | + <div class="md"> |
| 64 | + <div class="rows"> |
| 65 | + <div class="row"><input class="cb" type="checkbox" checked><img src="villa.jpg" alt=""><div><b>Villa in Sitges</b><span>2 fields changed</span></div><svg class="i ok"><use href="icons.svg#circle-check"/></svg></div> |
| 66 | + <div class="row is-on"><input class="cb" type="checkbox" checked><img src="park-guell.jpg" alt=""><div><b>Loft near Park Güell</b><span>3 fields changed</span></div><svg class="i ok"><use href="icons.svg#circle-check"/></svg></div> |
| 67 | + <div class="row"><input class="cb" type="checkbox" checked><img src="login-bg.jpg" alt=""><div><b>Flat in Eixample</b><span style="color: var(--danger-fg)">Rate limit exceeded</span></div><svg class="i err"><use href="icons.svg#circle-alert"/></svg></div> |
| 68 | + <div class="row"><input class="cb" type="checkbox" checked><img src="villa.jpg" alt="" style="filter: hue-rotate(40deg)"><div><b>House in Girona</b><span>Generating…</span></div><span class="spin"></span></div> |
| 69 | + <div class="row" style="border-bottom: 0"><input class="cb" type="checkbox" checked><img src="park-guell.jpg" alt="" style="filter: grayscale(.6)"><div><b>Studio in Gràcia</b><span>Waiting</span></div><svg class="i t-muted"><use href="icons.svg#clock"/></svg></div> |
| 70 | + </div> |
| 71 | + <div> |
| 72 | + <div class="rec-head"> |
| 73 | + <div style="flex: 1"><b>Loft near Park Güell</b><span class="t-xs t-muted">Record 2 of 8</span></div> |
| 74 | + <span class="btn btn-secondary btn-sm"><svg class="i i-sm"><use href="icons.svg#refresh-cw"/></svg>Regenerate</span> |
| 75 | + <span class="btn btn-secondary btn-sm btn-icon"><svg class="i"><use href="icons.svg#chevron-up"/></svg></span> |
| 76 | + <span class="btn btn-secondary btn-sm btn-icon"><svg class="i"><use href="icons.svg#chevron-down"/></svg></span> |
| 77 | + </div> |
| 78 | + <div class="field"> |
| 79 | + <div class="field-head">Description <span class="badge badge-new">New</span><svg class="i i-sm"><use href="icons.svg#refresh-cw"/></svg></div> |
| 80 | + <div class="pair"><div class="cur">-</div><svg class="i"><use href="icons.svg#arrow-right"/></svg><div class="gen">Bright loft with a balcony facing Park Güell, calm street, five minutes to the metro.</div></div> |
| 81 | + </div> |
| 82 | + <div class="field"> |
| 83 | + <div class="field-head">Square meter <span class="badge badge-new">Changed</span><svg class="i i-sm"><use href="icons.svg#refresh-cw"/></svg></div> |
| 84 | + <div class="pair"><div class="cur num">47</div><svg class="i"><use href="icons.svg#arrow-right"/></svg><div class="gen num">62</div></div> |
| 85 | + </div> |
| 86 | + <div class="field"> |
| 87 | + <div class="field-head">Processed image <span class="badge badge-new">Changed</span><svg class="i i-sm"><use href="icons.svg#refresh-cw"/></svg></div> |
| 88 | + <div class="pair media"><img class="pic" src="park-guell.jpg" alt=""><svg class="i"><use href="icons.svg#arrow-right"/></svg><img class="pic toon" src="park-guell.jpg" alt=""></div> |
| 89 | + </div> |
| 90 | + </div> |
| 91 | + </div> |
| 92 | + </div> |
| 93 | + <div class="dlg-foot"> |
| 94 | + <span class="btn btn-secondary">Cancel</span> |
| 95 | + <span class="btn btn-secondary">Save processed (5)</span> |
| 96 | + <span class="btn btn-primary is-disabled">Save 8 records</span> |
| 97 | + </div> |
| 98 | + </div> |
| 99 | + </div> |
| 100 | +</div> |
| 101 | +<script src="previews.js"></script> |
| 102 | +</body> |
| 103 | +</html> |
0 commit comments