import { IStackedChartData } from '@src/types/chartData'; import { BlockProps } from 'victory'; import { ContainerBaseProps, VictoryAxisElementProps } from '../../types/chart'; import { ContainerTimelineBarChartProps } from './components/ContainerTimelineBarChart'; type DomainPaddingX = number | [number, number]; export declare function getBarWidth({ domain, scale, timeScaleInterval, axis, horizontal }: { domain?: ContainerBaseProps['domain']; timeScaleInterval?: number; scale: ContainerBaseProps['scale']; axis?: 'x' | 'y'; horizontal?: boolean; }): number; export declare function getAxisLabelProps({ minTickLabelXLength, minTickLabelYLength, scale, xTickFormat, yTickFormat, tickLetterSize, xTickHide, yTickHide }: ContainerTimelineBarChartProps, { horizontal, padding: paddingProps }: VictoryAxisElementProps): Pick & { maxLabelXLength: number; maxLabelYLength: number; paddingWithLabel: BlockProps; }; /** * Считает примерный лимит тиков для timeline-осей после того, как шкала уже * измерена с финальными отступами. * * `tickCount` используется для временной оси X, чтобы подписи дат не становились * слишком плотными в узких виджетах. Это мягкое ограничение: Victory/D3 всё ещё * выбирает "красивые" даты внутри этого лимита. * * `dependantTickCount` используется для оси значений и зависит от доступной * визуальной длины, чтобы горизонтальные и вертикальные графики имели похожую * плотность сетки. * * @example * ```ts * // Виджет отображает неделю с ежедневными подписями: * // 22.июн. 23.июн. 24.июн. 25.июн. 26.июн. 27.июн. 28.июн. * // функция считает доступную ширину и отдает лимит 4 * // Victory/D3 получает лимит и может оставить более редкую шкалу: * // 22.июн. 24.июн. 26.июн. 28.июн. * ``` * * @param props Параметры контейнера timeline-графика и уже рассчитанная шкала. * @returns Объект с лимитом тиков для X-оси и зависимой оси значений. */ export declare function getTicksProp({ horizontal, width, height, scale, xTickFormat }: ContainerTimelineBarChartProps): { tickCount: number; dependantTickCount: number; }; /** * Считает дополнительный отступ для баров, ширина которых вычисляется * из длителности одного временного блока - `timeScaleInterval`. * * Timeline-бары рисуются от временной точки вправо (т.е. стартует от точки даты), а * сгруппированные серии дополнительно смещаются через `VictoryGroup offset`. * * Если передан явный диапазон дат для оси Х(domain), добавляем отступ только с той * стороны, где видимый сгруппированный бар касается края domain. Для * сгруппированных графиков без явного domain отступ не добавляем: Victory * сам подбирает временной диапазон, а дополнительный отступ может создать * лишнюю пустоту слева. * * Например, если на одну дату приходится несколько серий, то Victory разводит их рядом, * чтобы бары не накладывались друг на друга. Из-за этого крайний бар у начала или * конца графика может выйти за границу. * @example * ```ts * // Данные начинаются 22 июня, bar рисуется от этой даты вправо. * // Если график сгруппирован как current/previous, VictoryGroup дополнительно * // сдвигает один из баров влево. Дополнительный отступ дает этому бару место внутри графика. * // Схематично: * 22 июн * | * | * [prev] [curr] * ``` * * @param props Параметры контейнера timeline-графика: domain, размеры, ориентация, * интервал времени и число групп. * @returns X-padding домена для Victory: число для симметричного padding или * пара `[left, right]` для раздельных отступов. */ export declare function getDomainPadding({ domain, groupCount, hasExplicitDomain, horizontal, width, height, timeScaleInterval, visibleDataDomain }: ContainerTimelineBarChartProps): { x: DomainPaddingX; }; /** * Находит диапазон дат, где у графика реально есть видимые бары. * * Нулевые значения пропускаются: точка с `value: 0` может входить в данные и * влиять на общий domain, но визуального бара в этом месте нет, значит ей не * нужен отступ от обрезания. * * @example * ```ts * // 22 июня: value = 1, 25 июня: value = 0, 28 июня: value = 2 * // Вернет диапазон только по видимым барам: [22 июня, 28 июня]. * ``` * * @param data Серии timeline-графика. * @returns `[minTimestamp, maxTimestamp]` по точкам с ненулевым value или * undefined`, если видимых баров нет. */ export declare function getVisibleDataDomain(data: IStackedChartData): [number, number] | undefined; export {};