Утилиты
coords.js — почему logical space
Drag рисований работает в logical-индексах баров, а не в timestamp. Причина: в данных есть пропуски (выходные). При движении в timestamp-пространстве один шаг drag мог бы перепрыгнуть через 2 дня выходных. Logical-индекс монотонен — шаг drag = ровно 1 бар.
logicalToTime экстраполирует за пределы данных через период последнего/первого бара — нужно для корректного позиционирования рисований при скролле за крайние свечи.
timeToCoordExtended (drawingsPrimitive.js)
LW Charts timeToCoordinate возвращает null для timestamps, которых нет в серии. timeToCoordExtended добавляет экстраполяцию: если timestamp правее/левее данных — вычисляет координату через последний известный бар. Если внутри пропуска — интерполирует между соседями.
Используется в hit-testing чтобы рисования оставались кликабельными при прокрутке.
sessionBoxesPrimitive.js
Бокс рисуется через firstCandleTime / lastCandleTime свечей, а не через block.start / block.end — timeToCoordinate принимает только timestamps из серии.
Ширина бокса вычисляется из logicalToCoordinate(0) и logicalToCoordinate(1) — это ширина одного бара в пикселях, корректная при любом зуме.