A block, or a BlockSnapper, is a Snapper containing other Snappers. The properties of the snappers inside a BlockSnapper are the same, changing the snappers of one block will result in the same changes to any other block of the same type.
You can create a block by selecting a few snappers, right-clicking on the selection, and followed by the Create block button in the dropdown menu.
A block can easily be duplicated through the Block-dialog (found under Tools in the menu bar). Anything inside the block can still be manipulated through schemes. Or by double-clicking the BlockSnapper manipulate individual parts of the BlockSnapper.
Rundown of How It Works
A BlockSnapper contains a Block object, and within the Block object, it has a BlockSpace which is an implementation of Space. All the Snappers that's inside the BlockSnapper is stored inside the BlockSpace.
BlockSnappers can contain BlockSnappers. Therefore if you want to access the leaf original Snappers,
leafSnappers() will work for you, otherwise, you can access the child snappers using
BlockSnappers can be a little tricky to debug, as they hold a Block with a BlockSpace, which is different from the ordinary space held by the snapper. Keep this in mind when developing BlockSnappers.