The shared contract for every block — it must answer two things: how tall, and how to draw. text/image/table/group/report all implement this same interface.
total height (recursive for composites like group/nested)
draw onto the doc; must not compute page-breaks itself — use ctx.ensureSpace
The shared contract for every block — it must answer two things: how tall, and how to draw. text/image/table/group/report all implement this same interface.