import type { Vec2 } from '../../math'; import type { Rect, Sides } from './layout'; export declare const FACET_AXES: readonly ["x", "x2", "y", "y2"]; declare const FACET_AXIS_MODES: readonly ["shared", "free", "row", "col"]; declare const FACET_AXIS_VISIBILITY_MODES: readonly ["auto", "all", "outer", "inner", "none"]; export type FacetAxis = (typeof FACET_AXES)[number]; export type FacetAxisMode = (typeof FACET_AXIS_MODES)[number]; export type FacetAxisVisibilityMode = (typeof FACET_AXIS_VISIBILITY_MODES)[number]; export type FacetKey = string | number; export type FacetAxisRanges = Partial>; export type FacetAxisModes = Record; export type FacetAxisVisibilityModes = Partial>; export type FacetAxisVisibility = Record; type FacetRangeUpdate = Vec2 | null; type FacetRangeUpdateCallback = (axis: FacetAxis, range: FacetRangeUpdate) => void; type FacetSharedBand = `title` | `legend` | `color_bar`; export interface FacetPanel { key: FacetKey; data: Datum; row?: number; column?: number; row_span?: number; column_span?: number; } interface PositionedFacetPanel { key: FacetKey; data: Datum; index: number; row: number; column: number; row_span: number; column_span: number; } interface FacetGridLayout { rows: number; columns: number; panels: PositionedFacetPanel[]; } export interface FacetPanelLayoutReport { padding?: Sides; ranges?: FacetAxisRanges; } interface KeyedFacetPanelLayoutReport extends FacetPanelLayoutReport { key: FacetKey; } interface KeyedFacetAxisRanges { key: FacetKey; ranges: FacetAxisRanges; } export interface FacetSharedBandSizes { title_height?: number; legend_width?: number; color_bar_width?: number; gap?: number; } interface FacetGridGeometry { width: number; height: number; row_gap?: number; column_gap?: number; shared_bands?: FacetSharedBandSizes; } export interface FacetSharedBandContext { band: FacetSharedBand; rect: Rect; } export interface ResolvedFacetGridGeometry { panel_grid: Rect; panels: { key: FacetKey; rect: Rect; }[]; title?: FacetSharedBandContext; legend?: FacetSharedBandContext; color_bar?: FacetSharedBandContext; } export interface FacetLayoutContext { padding: Sides; ranges: FacetAxisRanges; axis_visibility: FacetAxisVisibility; report_layout: (report: FacetPanelLayoutReport) => void; update_range: FacetRangeUpdateCallback; } export interface FacetPanelContext extends PositionedFacetPanel, FacetLayoutContext { rect: Rect; } export declare function assign_facet_panels(panels: readonly FacetPanel[], columns: number, rows?: number): FacetGridLayout; export declare function reconcile_facet_ranges(layout: FacetGridLayout, reports: readonly KeyedFacetPanelLayoutReport[], modes?: Partial, overrides?: readonly KeyedFacetAxisRanges[]): KeyedFacetAxisRanges[]; export declare function propagate_facet_range(layout: FacetGridLayout, current: readonly KeyedFacetAxisRanges[], source_key: FacetKey, axis: FacetAxis, range: FacetRangeUpdate, modes?: Partial): KeyedFacetAxisRanges[]; export declare const reconcile_facet_padding: (layout: FacetGridLayout, reports: readonly KeyedFacetPanelLayoutReport[]) => Sides; export declare function resolve_facet_axis_visibility(panel: PositionedFacetPanel, layout: Pick, modes?: Partial, visibility_modes?: FacetAxisVisibilityModes): FacetAxisVisibility; export declare function compute_facet_geometry(layout: FacetGridLayout, geometry: FacetGridGeometry): ResolvedFacetGridGeometry; export {};