<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Kendo Chart Curved Edge Label</title>

<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.1.224/styles/kendo.default-v2.min.css" />

<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2021.1.224/js/kendo.all.min.js"></script>
</head>
<body>

    <div id="chart"></div>
    <script>
        $("#chart").kendoChart({
            transitions: false,
            dataSource: {
                data: [
                    {value: 98}, 
                    {value: 10}, 
                    {value: 28}, 
                    {value: 35}, 
                    {value: 64}
                ],
            },
            categoryAxis: {
                categories: [
                    "Category A",
                    "Category B",
                    "Category C",
                    "Category D",
                    "Category E"
                ],
            },
            series: [{
                type: "line",
                field: "value",
                color: "#3e90ce77",
                labels : {
                    visible: true,
                    visual: function(e) {
                        let visual = e.createVisual();
                        let geom = kendo.geometry;
                        let draw = kendo.drawing;
                        let group = new draw.Group();
                        let rect =  visual.bbox();
                        let origin = rect.getOrigin();
                        let size = rect.getSize();

                        if (e.value > 50) {
                            let rectGeom = new geom.Rect(origin, size);
                            let rectangle = new draw.Rect(rectGeom, {
                                fill: {
                                    color: "red",
                                },
                            });
                            let text = new draw.Text(e.value, 
                                [origin.getX() + 3, origin.getY() + 3], {
                                fill: {
                                    color: "white",
                                },
                            });
                            
                            group.append(rectangle);
                            group.append(text);
                            return group;             	
                        }
                        
                        if (e.value === 10) {
                            let path = new draw.Path({
                                fill: {
                                    color: "orange",	
                                },
                            });
                            
                            path.moveTo(origin)
                                .curveTo(
                                    [origin.getX(), origin.getY()],
                                    [origin.getX(), origin.getY() - 2],
                                    [origin.getX() + 2, origin.getY() - 2]
                                )
                                .lineTo(origin.getX() + size.getWidth() + 2, origin.getY() - 2)
                                .curveTo(
                                    [origin.getX() + size.getWidth() + 2, origin.getY() - 2],
                                    [origin.getX() + size.getWidth() + 4, origin.getY() - 2],
                                    [origin.getX() + size.getWidth() + 4, origin.getY()]
                                )
                                .lineTo(origin.getX() + size.getWidth() + 4, origin.getY() + size.getHeight())
                                .curveTo(
                                    [origin.getX() + size.getWidth() + 4, origin.getY() + size.getHeight()],
                                    [origin.getX() + size.getWidth() + 4, origin.getY() + size.getHeight() + 2],
                                    [origin.getX() + size.getWidth() + 2, origin.getY() + size.getHeight() + 2]
                                )
                                .lineTo(origin.getX() + 2, origin.getY() + size.getHeight() + 2)
                                .curveTo(
                                    [origin.getX() + 2, origin.getY() + size.getHeight() + 2],
                                    [origin.getX(), origin.getY() + size.getHeight() + 2],
                                    [origin.getX(), origin.getY() + size.getHeight()]
                                )
                            .close();
                            
                            let text = new draw.Text(e.value, 
                                [origin.getX() + 3, origin.getY() + 3], {
                                fill: {
                                    color: "white",
                                },
                            });
                            
                            group.append(path);
                            group.append(text);
                            return group;
                        }
                        
                        let text = new draw.Text(e.value, origin, {
                            fill: {
                                color: "green",
                            },
                            cursor: "pointer",
                        });
                        group.append(text);
                        
                        return group;
                    }
                },
            }],
        });
    </script>
</body>
</html>