import type { MeasuredAxis } from './tick-layout'; import type { FontSpec, TextLineMetrics } from './text-metrics'; import type { AxisConfig } from './types'; export type Sides = { t?: number; b?: number; l?: number; r?: number; }; export declare const sides_equal: (left: Required, right: Required) => boolean; export declare const LABEL_GAP_DEFAULT = 20; export declare const AXIS_LABEL_HEIGHT = 20; export declare const AXIS_TITLE_WRAP_WIDTH = 200; export declare const AXIS_TITLE_OFFSET: number; export declare const DEFAULT_PLOT_PADDING: Required; interface AxisTitleSegment { readonly text: string; readonly shift?: `sub` | `super`; } interface AxisTitleLine { readonly text: string; readonly segments: readonly AxisTitleSegment[]; readonly metrics: TextLineMetrics; } interface AxisTitleLayout { readonly label: string; readonly lines: readonly AxisTitleLine[]; readonly width: number; readonly height: number; readonly line_height: number; readonly interactive: boolean; } export declare function resolve_axis_title_layout(axis: Pick, available_width?: number, font?: Readonly): AxisTitleLayout; export declare function y_axis_label_x(axis: AxisConfig, pad_l: number, max_tick_width: number): number; export declare function y2_axis_label_x(axis: AxisConfig, width: number, pad_r: number, max_tick_width: number): number; export declare const filter_padding: (padding: Partial | undefined | null, defaults: Required) => Required; type Size = { width: number; height: number; }; type ElementFootprint = Size & { offset_x: number; offset_y: number; }; export declare const full_footprint_or: (el: HTMLElement | null | undefined, fallback: Size) => ElementFootprint; export declare const element_position_for_footprint: (placement: { x: number; y: number; } | null | undefined, footprint: Pick) => { x: number; y: number; } | null; export interface AutoPaddingConfig { padding: Partial; default_padding: Required; x_axis?: MeasuredAxis; x2_axis?: MeasuredAxis; y_axis?: MeasuredAxis; y2_axis?: MeasuredAxis; label_gap?: number; width?: number; height?: number; } export declare const calc_auto_padding: ({ padding, default_padding, x_axis, x2_axis, y_axis, y2_axis, label_gap, width, height, }: AutoPaddingConfig) => Required; export interface Rect { x: number; y: number; width: number; height: number; } export declare const pad_rect: (rect: Rect, padding: number) => Rect; export declare const centered_rect: (center_x: number, top_y: number, width: number, height: number) => Rect; export declare const rect_within_rect: (rect: Rect, bounds: Rect) => boolean; interface ElementPlacementConfig { plot_bounds: Rect; element_size: Size; element?: HTMLElement | null; axis_clearance?: number; exclude_rects?: Rect[]; points: { x: number; y: number; }[]; } interface ElementPlacementResult { x: number; y: number; score: number; } export declare const point_in_rect: (point: { x: number; y: number; }, rect: Rect) => boolean; export declare const rects_overlap: (left_rect: Rect, right_rect: Rect) => boolean; export declare const stride_sample: (items: readonly T[], limit: number) => readonly T[]; export declare function sample_series_obstacle_points(pixel_points: { x: number; y: number; }[], draws_line: boolean, step: number, obstacles?: { x: number; y: number; }[]): { x: number; y: number; }[]; export declare function compute_element_placement(config: ElementPlacementConfig): ElementPlacementResult; export {};