docs: @Override protected void initGraphics() {
          super.initGraphics();
  
          mouseEventHandler = e -> {
              final EventType TYPE = e.getEventType();
              final Object    SRC  = e.getSource();
              if (MouseEvent.MOUSE_PRESSED == TYPE) {
                  if (SRC.equals(thumb)) {
                      dragStart = thumb.localToParent(e.getX(), e.getY());
                      formerThumbPos = (tile.getCurrentValue() - minValue) / range;
                      tile.fireTileEvent(VALUE_CHANGING);
                  } else if (SRC.equals(switchBorder)) {
                      tile.setActive(!tile.isActive());
                      tile.fireEvent(SWITCH_PRESSED);
                  }
              } else if (MouseEvent.MOUSE_DRAGGED == TYPE) {
                  Point2D currentPos = thumb.localToParent(e.getX(), e.getY());
                  double  dragPos    = currentPos.getX() - dragStart.getX();
                  thumbDragged((formerThumbPos + dragPos / trackLength));
              } else if (MouseEvent.MOUSE_RELEASED == TYPE) {
                  if (SRC.equals(thumb)) {
                      tile.fireTileEvent(VALUE_CHANGED);
                  } else if (SRC.equals(switchBorder)) {
                      tile.fireEvent(SWITCH_RELEASED);
                  }
              }
          };
          selectedListener  = o -> moveThumb();
          valueListener     = o -> {
              if (tile.isActive() && tile.getValue() != tile.getMinValue()) {
                  thumb.setFill(tile.getBarColor());
              } else {
                  thumb.setFill(tile.getForegroundColor());
              }
          };
  
          timeline = new Timeline();
          timeline.setOnFinished(event -> thumb.setFill(tile.isActive() ? tile.getBarColor() : tile.getForegroundColor()));
  
          titleText = new Text();
          titleText.setFill(tile.getTitleColor());
          Helper.enableNode(titleText, !tile.getTitle().isEmpty());
  
          text = new Text(tile.getText());
          text.setFill(tile.getUnitColor());
          Helper.enableNode(text, tile.isTextVisible());
  
          valueText = new Text(String.format(locale, formatString, ((tile.getValue() - minValue) / range * 100)));
          valueText.setFill(tile.getValueColor());
          Helper.enableNode(valueText, tile.isValueVisible());
  
          unitText = new Text(tile.getUnit());
          unitText.setFill(tile.getUnitColor());
          Helper.enableNode(unitText, !tile.getUnit().isEmpty());
  
          valueUnitFlow = new TextFlow(valueText, unitText);
          valueUnitFlow.setTextAlignment(TextAlignment.RIGHT);
  
          description = new Label(tile.getDescription());
          description.setAlignment(tile.getDescriptionAlignment());
          description.setWrapText(true);
          description.setTextFill(tile.getTextColor());
          Helper.enableNode(description, !tile.getDescription().isEmpty());
  
          barBackground = new Rectangle(PREFERRED_WIDTH * 0.795, PREFERRED_HEIGHT * 0.0275);
  
          bar = new Rectangle(0, PREFERRED_HEIGHT * 0.0275);
  
          thumb = new Circle(PREFERRED_WIDTH * 0.09);
          thumb.setEffect(shadow);
  
          switchBorder = new Rectangle();
  
          switchBackground = new Rectangle();
          switchBackground.setMouseTransparent(true);
          switchBackground.setFill(tile.isActive() ? tile.getActiveColor() : tile.getBackgroundColor());
  
          switchThumb = new Circle();
          switchThumb.setMouseTransparent(true);
          switchThumb.setEffect(shadow);
  
          getPane().getChildren().addAll(titleText, text, valueUnitFlow, description,
                                         barBackground, bar, thumb,
                                         switchBorder, switchBackground, switchThumb);
      }