Hi again Frank!
So the values that can appear in those places depend on the block definitions provided by the developer.
Block and Shadow type: These are the identifiers associated with block definitions and block-code generators that you define. For example if you define a block like:
`Blockly.Blocks['my_block'] = { ... }` then 'my_block' can now appear in the block type position.
Value and Statement name: These are the identifiers associated with individual inputs in your block definition. For example, you append an input to a block like:
```
Blockly.Blocks['my_block'] = {
init: function() {
this.appendValueInput('MY_INPUT_NAME');
}
}
```
Then 'MY_INPUT_NAME' can now appear in the value name position.
Field names: These are the identifiers associated with individual fields on a block. For example if you add a field to an input like:
```
Blockly.Blocks['my_block'] = {
init: function() {
this.appendValueInput('MY_INPUT_NAME')
.appendField(new SomeField(), 'MY_FIELD_NAME');
}
}
```
Then 'MY_FIELD_NAME' can now appear in the field name position.
If you're using JSON block definitions, then the same concept applies.