Called whenever a block is added or removed
Updates the state of add / duplicate block buttons to prevent too many blocks being inserted.
State for a ListBlock is a list of {id, value} objects, but ListBlock.insert accepts the value as first argument; id is passed in the options dict instead.
Called when an 'insert new block' action is triggered: given a dict of data from the insertion control, return the block definition and initial state to be used for the new block. For a ListBlock, no data is passed from the insertion control, as there is a single fixed child block definition.