import type { App } from '../App'; import type { Group } from '../shapes/Group'; import { Arc, type Line, type TextNode } from '../shapes/index'; export interface DialGaugeStyle { trackColor: string; trackWidth?: number; faceColor?: string; bezelColor?: string; needleColor: string; accentColor?: string; tickColor?: string; tickLabelColor?: string; textColor: string; textMuted?: string; redlineColor?: string; } export interface DialColorZone { from: number; to: number; color: string; } export interface DialGaugeBuildOptions { size: number; value: number; max: number; unit?: string; title?: string; formatValue?: (v: number) => string; formatTickLabel?: (v: number) => string; tickCount?: number; showTickLabels?: boolean; redlineFrom?: number; colorZones?: DialColorZone[]; startAngle?: number; sweepAngle?: number; ariaLive?: 'polite' | 'assertive' | 'off'; /** Override value label size (px); default scales with dial size. */ valueFontSize?: number; unitFontSize?: number; titleFontSize?: number; } export interface DialGaugeParts { needle: Line; valueArc?: Arc; valueText: TextNode; unitText?: TextNode; } /** Professional semicircular dial — layered bezel, ticks, value arc, needle hub */ export declare function buildDialGauge(app: App, group: Group, style: DialGaugeStyle, opts: DialGaugeBuildOptions): DialGaugeParts; export declare function dialNeedleAngle(value: number, max: number, start?: number, sweep?: number): number; export declare function updateDialNeedle(needle: Line, _cx: number, value: number, max: number, r: number, start?: number, sweep?: number, counterweight?: Line, valueArc?: Arc): void;