docs: def selected(self):
          """ returns the list of selected component names.
  
          if no component selected return the one marked as default.
          If the block is required and no component where indicated as default,
          then the first component is selected.
          """
          selected = self._selected
          if len(self._selected) == 0 and self.required:
              # nothing has been selected yet BUT the component is required
              selected = self.defaults
          return selected