@@ -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
244276function 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