import type { Vec2 } from '../../math'; import type { Rect, Sides } from './layout'; import type { LineCurve, ScaleType } from './types'; import type { Snippet } from 'svelte'; import type { ClassValue } from 'svelte/elements'; export declare const MARGINAL_SIDES: readonly ["top", "bottom", "left", "right"]; export type MarginalSide = (typeof MARGINAL_SIDES)[number]; export type MarginalType = `histogram` | `kde` | `cdf` | `rug`; export type MarginalPlacement = `auto` | `flush` | `outer`; export type MarginalNormalize = `count` | `density` | `probability`; export type MarginalAxisBinding = `x1` | `x2` | `y1` | `y2`; export type MarginalCurve = { kind: `bars`; bins: { pos0: number; pos1: number; value: number; }[]; max: number; } | { kind: `line`; points: { pos: number; value: number; }[]; max: number; } | { kind: `rug`; positions: number[]; }; interface MarginalComputeContext { config: ResolvedMarginalConfig; side: MarginalSide; positional_range: Vec2; scale_type: ScaleType; } export interface MarginalConfig { type?: MarginalType; size?: number; gap?: number; placement?: MarginalPlacement; axis?: MarginalAxisBinding; bins?: number; bandwidth?: number | `silverman` | `scott`; normalize?: MarginalNormalize; per_series?: boolean; color?: string; fill?: string; fill_opacity?: number; stroke?: string; stroke_width?: number; opacity?: number; curve?: LineCurve; value_range?: Vec2; value_axis?: boolean; label?: string; data?: readonly number[] | ((ctx: MarginalComputeContext) => readonly number[]); reduce?: (values: number[], weights: number[] | undefined, ctx: MarginalComputeContext) => MarginalCurve; snippet?: Snippet<[MarginalRenderContext]>; hover?: boolean; tooltip?: Snippet<[MarginalHover]>; class?: ClassValue; style?: string; } export type ResolvedMarginalConfig = MarginalConfig & { type: MarginalType; size: number; gap: number; placement: MarginalPlacement; per_series: boolean; bins: number; bandwidth: number | `silverman` | `scott`; stroke_width: number; opacity: number; value_axis: boolean; }; export type MarginalSideInput = boolean | MarginalType | MarginalConfig; export type MarginalsProp = boolean | MarginalType | Partial>; export type ResolvedMarginals = Record; export interface MarginalSeriesInput { x?: ArrayLike; y?: ArrayLike; weight?: ArrayLike; color: string; label?: string; visible?: boolean; x_axis?: `x1` | `x2`; y_axis?: `y1` | `y2`; } export interface MarginalSeriesCurve { series_idx: number; color: string; label?: string; curve: MarginalCurve; } export type ScaleFn = (value: number) => number; export interface MarginalAxis { scale: ScaleFn; range: Vec2; scale_type?: ScaleType; format?: string; tick_label?: (value: number) => string | undefined; label?: string; } export type MarginalAxes = { x1: MarginalAxis; x2?: MarginalAxis; y1: MarginalAxis; y2?: MarginalAxis; }; export declare const marginal_axis: (scale: ScaleFn, range: Vec2, axis: { scale_type?: ScaleType; format?: string; label?: string; }, tick_label?: (value: number) => string | undefined) => MarginalAxis; export interface MarginalRenderContext extends MarginalComputeContext { rect: Rect; positional_scale: ScaleFn; value_scale: ScaleFn; baseline: number; curves: MarginalSeriesCurve[]; series: MarginalSeriesInput[]; format?: string; tick_label?: (value: number) => string | undefined; axis_title?: string; } export interface MarginalHover { side: MarginalSide; x: number; y: number; color: string; label?: string; kind: MarginalCurve[`kind`]; pos: number; pos0?: number; pos1?: number; value?: number; config: ResolvedMarginalConfig; scale_type: ScaleType; format?: string; pos_label?: string; axis_title?: string; } export declare function marginal_hit(ctx: MarginalRenderContext, px: number, py: number): MarginalHover | null; export declare const MARGINAL_DEFAULTS: { type: MarginalType; size: number; gap: number; placement: MarginalPlacement; per_series: boolean; bins: number; bandwidth: "silverman"; stroke_width: number; opacity: number; value_axis: boolean; }; export declare function normalize_marginals(prop: MarginalsProp | undefined, default_sides?: Partial>): ResolvedMarginals; export declare function reserve_marginal_pad(resolved: ResolvedMarginals): Required; export declare const add_sides: (a: Required, b: Required) => Required; export declare const default_axis_for_side: (side: MarginalSide) => MarginalAxisBinding; export declare const marginal_axis_presence: (top: boolean, right: boolean) => Record; export declare const outer_strip_reservation: (config: ResolvedMarginalConfig | null, has_axis: boolean) => number; export declare function marginal_strip_rect(side: MarginalSide, pad: Required, width: number, height: number, config: ResolvedMarginalConfig, has_axis: boolean): Rect; export declare function marginal_value_scale(side: MarginalSide, rect: Rect, domain: Vec2): { scale: (value: number) => number; baseline: number; }; export declare function compute_marginal_curve(positions: ArrayLike, weights: ArrayLike | undefined, config: ResolvedMarginalConfig, positional_range: Vec2, scale_type: ScaleType): MarginalCurve; export declare const curves_max: (curves: MarginalCurve[]) => number; export declare const default_marginal_label: (config: ResolvedMarginalConfig) => string; export declare const marginal_value_format: (config: ResolvedMarginalConfig) => string; export {};