Максим Тимофеев, мне самому было интересно сделать вариант без svg, просто ради спортивного интереса. Даже при 100% поддержке clip-path этот вариант криво отображается в firefox и возможно других не хромовых браузерах. Тени от блоков то накладываются на 1px, то между ними пробел в 1px. Возможно кто предложит вариант лучше на чистом css.
С svg другая дилемма: как сделать чтобы контент растягивал блок по высоте и при этом не растягивал скругления улов.
Артем Андреев, она не совсем глобальная, а доступна только внутри myChart.js. Пошарьтесь по папке node_modules там внутри модулей куча 'глобальных' переменных. Так что нормально.
VegasChickiChicki, в lastMousePosition сохраняются координаты мыши в конце каждого вызова onmousemove, в начале же вызова вычисляется разница (дельта) между старыми значениями и новыми координатами. Зная эту разницу можно понять куда передвинулась мышь относительно своей прошлой позиции. Например было x: 78 стало x: 81, deltaX == 3, то есть мышь по Х сдвинулась на 3px вправо. Тоже самое и для Y. Потом смотрим куда больше передвинулась мышь, по X или по Y. Если deltaX больше чем deltaY, то она передвинулась больше по оси X, то есть горизонтально. Проверку второго условия в else if кстати можно убрать и оставить просто else.