code: def visible(self, visible):
          
          self._visible = visible
  
          if visible and len(self.panel.objects) == 0:
              self.setup()
              self.select.visible = True
              self.control_panel.extend(self.controls)
              self.panel.extend(self.children)
          elif not visible and len(self.panel.objects) > 0:
              self.unwatch()
              # do children
              self.select.visible = False
              self.control_panel.clear()
              self.search.visible = False
              self.add.visible = False
              self.panel.clear()
          if self.visible_callback:
              self.visible_callback(visible)
docs: When visible changed, do setup or unwatch and call visible_callback