Skip to content

Commit e097aea

Browse files
committed
Add scrollbar placeholder
1 parent e39b0f6 commit e097aea

1 file changed

Lines changed: 34 additions & 0 deletions

File tree

src/components/preview/ChecklistRenderer.tsx

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,38 @@ function MultiSelectRow({ item, baseY }: { item: MultiSelectItem; baseY: number
239239
);
240240
}
241241

242+
/* ─── Scrollbar placeholder ──────────────────────────────────── */
243+
244+
// Mirrors the real VerticalScrollBar geometry so authors can see the safe
245+
// content width. The thumb is fixed at 50 % to signal "more content below".
246+
function ScrollbarPlaceholder() {
247+
const SB_X = 684; // SVG_W(740) - right-margin(6) - scrollbar-width(50)
248+
const SB_Y = LIST_Y;
249+
const SB_W = 50;
250+
const SB_H = ROWS_PER_PAGE * HEIGHT_PER_ROW;
251+
const barAreaH = SB_H - SB_W * 2;
252+
const thumbH = barAreaH / 2;
253+
const cx = SB_X + SB_W / 2;
254+
255+
const arrowUp = `${cx},${SB_Y + 17.5} ${cx - 7.5},${SB_Y + 32.5} ${cx + 7.5},${SB_Y + 32.5}`;
256+
const arrowDown = `${cx},${SB_Y + SB_H - 17.5} ${cx - 7.5},${SB_Y + SB_H - 32.5} ${cx + 7.5},${SB_Y + SB_H - 32.5}`;
257+
258+
return (
259+
<g opacity={0.6}>
260+
{/* up button */}
261+
<rect x={SB_X} y={SB_Y} width={SB_W} height={SB_W} fill={C_SEP} />
262+
<polygon points={arrowUp} fill={C_WHITE} />
263+
{/* track */}
264+
<rect x={SB_X} y={SB_Y + SB_W} width={5} height={barAreaH} fill={C_SEP} />
265+
{/* thumb */}
266+
<rect x={SB_X + 5} y={SB_Y + SB_W} width={13} height={thumbH} fill={C_SEP} />
267+
{/* down button */}
268+
<rect x={SB_X} y={SB_Y + SB_H - SB_W} width={SB_W} height={SB_W} fill={C_SEP} />
269+
<polygon points={arrowDown} fill={C_WHITE} />
270+
</g>
271+
);
272+
}
273+
242274
/* ─── Page SVG ────────────────────────────────────────────────── */
243275

244276
function Page({ name, items }: { name: string; items: LayoutItem[] }) {
@@ -256,6 +288,8 @@ function Page({ name, items }: { name: string; items: LayoutItem[] }) {
256288

257289
<line x1={6} x2={734} y1={168} y2={168} stroke={C_SEP} strokeWidth={2} strokeLinecap="round" />
258290

291+
<ScrollbarPlaceholder />
292+
259293
{items.map(({ item, startRow }, i) => {
260294
const baseY = LIST_Y + (startRow % ROWS_PER_PAGE) * HEIGHT_PER_ROW;
261295
if (item.type === "action") return <ActionRow key={i} item={item} baseY={baseY} />;

0 commit comments

Comments
 (0)