docs: @Override protected void initGraphics() {
          super.initGraphics();
  
          chartEventListener = e -> drawChart();
          tile.getChartData().forEach(chartData -> chartData.addChartDataEventListener(chartEventListener));
  
          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));
                  }
              }
              drawChart();
          };
  
          clickHandler = e -> {
              System.out.println("clicked");
              double          x           = e.getX();
              double          y           = e.getY();
              double          startAngle  = 90;
              List<ChartData> dataList    = tile.getChartData();
              int             noOfItems   = dataList.size();
              double          canvasSize  = chartCanvas.getWidth();
              double          radius      = canvasSize * 0.5;
              double          innerSpacer = radius * 0.18;
              double          barWidth    = (radius - innerSpacer) / tile.getChartData().size();
              double          max         = noOfItems == 0 ? 0 : dataList.stream().max(Comparator.comparingDouble(ChartData::getValue)).get().getValue();
  
              for (int i = 0 ; i < noOfItems ; i++) {
                  ChartData data    = dataList.get(i);
                  double    value   = clamp(0, Double.MAX_VALUE, data.getValue());
                  double    barXY   = barWidth * 0.5 + i * barWidth;
                  double    barWH   = canvasSize - barWidth - (2 * i * barWidth);
                  double    angle   = value / max * 270.0;
                  double    centerX = barXY + barWH * 0.5;
                  double    centerY = centerX;
  
                  boolean hit = Helper.isInRingSegment(x, y, centerX, centerY, (barWH + barWidth) * 0.5, (barWH - barWidth) * 0.5, startAngle, angle);
                  if (hit) { tile.fireTileEvent(new TileEvent(EventType.SELECTED_CHART_DATA, data)); break; }
              }
          };
  
          titleText = new Text();
          titleText.setFill(tile.getTitleColor());
          Helper.enableNode(titleText, !tile.getTitle().isEmpty());
  
          text = new Text(tile.getText());
          text.setFill(tile.getTextColor());
          Helper.enableNode(text, tile.isTextVisible());
  
          chartCanvas = new Canvas(size * 0.9, tile.isTextVisible() ? size * 0.72 : size * 0.795);
          chartCtx = chartCanvas.getGraphicsContext2D();
  
          getPane().getChildren().addAll(titleText, chartCanvas, text);
      }