part2 = vl.markRect({ tooltip: true, stroke: 'white' })
.data(passes.map(decode).map(([row, column]) => ({row, column, seatId: seatId([row, column])})))
.encode(
vl.x().fieldO('row').axis({ labelOverlap: true }),
vl.y().fieldO('column'),
vl.detail().fieldN('seatId'),
)
.width(width)
.autosize({ type: 'fit-x', contains: 'padding' })
.render()