docs: @Override protected void initGraphics() {
          super.initGraphics();
  
          chartEventListener         = e -> handleData();
          chartDataListener          = c -> {
              while (c.next()) {
                  if (c.wasAdded()) {
                      c.getAddedSubList().forEach(addedItem -> addedItem.addChartDataEventListener(chartEventListener));
                  } else if (c.wasRemoved()) {
                      c.getRemoved().forEach(removedItem -> removedItem.removeChartDataEventListener(chartEventListener));
                  }
              }
              handleData();
          };
          clickHandler               = e -> select(e);
          endOfTransformationHandler = e -> selectorTooltip.hide();
  
          smoothing = tile.isSmoothing();
  
          titleText = new Text();
          titleText.setFill(tile.getTitleColor());
          Helper.enableNode(titleText, !tile.getTitle().isEmpty());
  
          fillClip   = new Rectangle(0, 0, PREFERRED_WIDTH, PREFERRED_HEIGHT);
          strokeClip = new Rectangle(0, 0, PREFERRED_WIDTH, PREFERRED_HEIGHT);
  
          points = new ArrayList<>();
  
          fillPath = new Path();
          fillPath.setStroke(null);
          fillPath.setClip(fillClip);
  
          strokePath = new Path();
          strokePath.setFill(null);
          strokePath.setStroke(tile.getBarColor());
          strokePath.setClip(strokeClip);
          strokePath.setMouseTransparent(true);
  
          Helper.enableNode(fillPath, ChartType.AREA == tile.getChartType());
  
          canvas = new Canvas(PREFERRED_WIDTH, PREFERRED_HEIGHT);
          canvas.setMouseTransparent(true);
          ctx    = canvas.getGraphicsContext2D();
  
          dataPointsVisible = tile.getDataPointsVisible();
  
          valueText = new Text(String.format(locale, formatString, ((tile.getValue() - minValue) / range * 100)));
          valueText.setFill(tile.getValueColor());
          valueText.setTextOrigin(VPos.BASELINE);
          Helper.enableNode(valueText, tile.isValueVisible());
  
          unitText = new Text(" " + tile.getUnit());
          unitText.setFill(tile.getUnitColor());
          unitText.setTextOrigin(VPos.BASELINE);
          Helper.enableNode(unitText, !tile.getUnit().isEmpty());
  
          valueUnitFlow = new TextFlow(valueText, unitText);
          valueUnitFlow.setTextAlignment(TextAlignment.RIGHT);
  
          selector        = new Circle();
          selectorTooltip = new Tooltip("");
          selectorTooltip.setWidth(60);
          selectorTooltip.setHeight(48);
          Tooltip.install(selector, selectorTooltip);
  
          FadeTransition fadeIn = new FadeTransition(Duration.millis(100), selector);
          fadeIn.setFromValue(0);
          fadeIn.setToValue(1);
  
          FadeTransition fadeOut = new FadeTransition(Duration.millis(100), selector);
          fadeOut.setFromValue(1);
          fadeOut.setToValue(0);
  
          fadeInFadeOut = new SequentialTransition(fadeIn, new PauseTransition(Duration.millis(3000)), fadeOut);
  
          handleData();
  
          getPane().getChildren().addAll(titleText, fillPath, strokePath, canvas, valueUnitFlow, selector);
      }