import { ChartTheme } from '../../theme'; /** Breakpoint configuration */ export interface ResponsiveBreakpoint { /** Maximum width for this breakpoint (undefined = unlimited) */ maxWidth?: number; /** Minimum width for this breakpoint (undefined = 0) */ minWidth?: number; /** Font size multiplier (default: 1) */ fontScale?: number; /** Number of X-axis ticks */ xTickCount?: number; /** Number of Y-axis ticks */ yTickCount?: number; /** Point size multiplier */ pointScale?: number; /** Line width multiplier */ lineScale?: number; /** Hit radius multiplier for touch targets */ hitRadiusScale?: number; /** Whether to show legend */ showLegend?: boolean; /** Legend position override */ legendPosition?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; } /** Preset breakpoints */ export interface ResponsiveBreakpoints { smallMobile?: ResponsiveBreakpoint; mobile?: ResponsiveBreakpoint; tablet?: ResponsiveBreakpoint; desktop?: ResponsiveBreakpoint; } /** Full responsive configuration */ export interface ResponsiveConfig { /** Enable responsive behavior (default: true) */ enabled?: boolean; /** Custom breakpoints (overrides presets) */ breakpoints?: ResponsiveBreakpoints; /** Optimize for touch interactions (default: auto-detect) */ touchOptimized?: boolean | 'auto'; /** Respect user's reduced motion preference (default: true) */ reducedMotion?: boolean | 'auto'; /** Debounce time for resize events in ms (default: 100) */ resizeDebounce?: number; } /** Current responsive state */ export interface ResponsiveState { /** Current container width */ width: number; /** Current container height */ height: number; /** Active breakpoint name */ breakpoint: 'smallMobile' | 'mobile' | 'tablet' | 'desktop'; /** Whether touch is optimized */ touchOptimized: boolean; /** Whether reduced motion is enabled */ reducedMotion: boolean; /** Computed scale factors */ scales: { font: number; point: number; line: number; hitRadius: number; }; /** Computed tick counts */ ticks: { x: number; y: number; }; } /** Context for responsive operations */ export interface ResponsiveContext { container: HTMLDivElement; onStateChange: (state: ResponsiveState) => void; } export declare class ResponsiveManager { private ctx; private config; private state; private resizeObserver; private debounceTimer; private destroyed; constructor(ctx: ResponsiveContext, config?: ResponsiveConfig); private mergeConfig; configure(config: Partial): void; getConfig(): ResponsiveConfig; setEnabled(enabled: boolean): void; isEnabled(): boolean; getState(): ResponsiveState; /** * Manually trigger a state update */ update(): void; private computeState; private getActiveBreakpoint; private detectTouchOptimization; private detectReducedMotion; private hasStateChanged; private setupResizeObserver; private handleResize; /** * Apply responsive scaling to a theme */ scaleTheme(theme: ChartTheme): ChartTheme; /** * Get scaled point size */ getScaledPointSize(baseSize: number): number; /** * Get scaled line width */ getScaledLineWidth(baseWidth: number): number; /** * Get scaled hit radius */ getScaledHitRadius(baseRadius: number): number; /** * Get recommended tick counts */ getTickCounts(): { x: number; y: number; }; /** * Check if legend should be shown at current breakpoint */ shouldShowLegend(): boolean; /** * Get legend position for current breakpoint */ getLegendPosition(): 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; destroy(): void; }