import type { FontSpec } from './text-metrics'; import type { AxisConfig } from './types'; export declare const TICK_LABEL_HEIGHT = 16; export declare const TICK_LABEL_GAP = 1; export declare const TICK_STRATEGIES: readonly ["upright", "wrap", "rotate", "stagger", "thin", "ellipsis"]; export type TickStrategy = (typeof TICK_STRATEGIES)[number]; export type TickLayoutSide = `x` | `x2` | `y` | `y2`; type TickLabelAnchor = `start` | `middle` | `end`; export declare const measure_text_width: (text: string, font?: Readonly) => number; interface TickLabelPosition { axis: number; cross_axis: number; } interface TickAxisExtent { start: number; end: number; } export interface TickLabelDimensions { line_widths: readonly number[]; line_height: number; } interface TickAabb { min_x: number; min_y: number; max_x: number; max_y: number; width: number; height: number; } export interface TickLabelItem { id: string | number; lines: readonly string[]; position: TickLabelPosition; dimensions: TickLabelDimensions; rotation?: number; anchor?: TickLabelAnchor; stagger_row?: number; } interface TickLabelGeometry extends Required { item_idx: number; side: TickLayoutSide; aabb: TickAabb; } interface TickGeometrySummary { labels: readonly TickLabelGeometry[]; collisions: { colliding_indices: readonly number[]; count: number; }; edge_overflow_px: number; } export declare const default_tick_label_anchor: (side: TickLayoutSide, rotation: number) => TickLabelAnchor; export declare const tick_label_aabb: ({ position, side, anchor, rotation, dimensions, }: { position: TickLabelPosition; side: TickLayoutSide; anchor: TickLabelAnchor; rotation: number; dimensions: TickLabelDimensions; }) => TickAabb; export declare const axis_edge_overflow: (aabb: TickAabb, side: TickLayoutSide, axis_extent: TickAxisExtent, edge_gap?: number) => { start: number; end: number; total: number; }; export declare const analyze_tick_label_geometry: ({ items, side, axis_extent, gap, edge_gap, }: { items: readonly TickLabelItem[]; side: TickLayoutSide; axis_extent: TickAxisExtent; gap?: number; edge_gap?: number; }) => TickGeometrySummary; export declare const suggest_tick_count: (axis_pixels: number, label_widths: readonly number[], gap_pixels: number) => number; export declare const thin_tick_indices: (item_count: number, requested_count: number) => number[]; export type MeasuredAxis = AxisConfig & { tick_values?: (string | number)[]; tick_positions: number[]; axis_extent?: TickAxisExtent; tick_font?: Readonly; }; export declare const measured_axis: (axis: AxisConfig, tick_values: Tick[], scale: (tick: Tick) => number, axis_extent: TickAxisExtent, tick_font?: Readonly) => MeasuredAxis; interface ResolvedTickLabel { tick_index: number; full_text: string; lines: readonly string[]; visible: boolean; anchor: TickLabelAnchor; rotation: number; stagger_row: 0 | 1; } interface ResolvedTickLayout { rotation: number; band: number; labels: ResolvedTickLabel[]; visible_tick_indices: number[]; strategy: TickStrategy; stagger_step: number; } export declare const resolve_tick_layout: (axis: MeasuredAxis, axis_size: number, side: TickLayoutSide) => ResolvedTickLayout; export {};