useChart
Infinite history
Подписка на subscribeVisibleLogicalRangeChange. При logicalRange.from < visibleBars * 0.5 вызывает onNeedMoreHistory(visibleBars). Debounce 150ms, флаг loadingHistory блокирует повторные вызовы.
При prepend (setData с новыми данными в начале) LW Charts не сбрасывает позицию — fitContent вызываем только при первой загрузке.
Таймзона
UTC-сдвиг через tzOffsetHours: при форматировании добавляется сдвиг, getUTCHours() даёт «местное» время. LW Charts не знает про timezone.
tickMarkFormatter
type: 0 — год, 1 — месяц, 2 — день, 3 — часы:минуты.