Amazing work man.
Here are a few suggestions :
i. you should use a counter as the id of the blocks and increment it whenever a new block is created,
because whenever elements are deleted from the beginning, the block${blocks.length + 1} sets the id of the new block with an id which could already be there in the array.
suppose, block.length = 2,
currently block ids are : block1, block2
if you delete block1, block.length=1,
if you insert again,
the new id will be block${1 + 1}`-> block2, which already exists.
ii. whenever re-rendering the components you can use a setTimeout for each component render, so that paint flashing can be seen slowly.