export interface MeterTier { id: string; at: number; } export type MeterMode = "hold" | "reset"; export interface AccumulatorMeterConfig { max: number; mode?: MeterMode; decayPerSecond?: number; decayDelayMs?: number; tiers?: readonly MeterTier[]; } export interface MeterAddResult { value: number; fired: boolean; overflow: number; tier: string | null; tierChanged: boolean; } /** Mutable meter value, hold latch, and time since the last gain. */ export interface AccumulatorMeterState { value: number; broken: boolean; idleMs: number; } export interface AccumulatorMeter { /** Detached state for persistence and deterministic continuation. */ state(): AccumulatorMeterState; /** Restore using the caller's existing configuration. */ restore(next: AccumulatorMeterState): void; value(): number; fraction(): number; tier(): string | null; broke(): boolean; add(amount: number): MeterAddResult; drain(amount: number): void; reset(): void; tick(dtSeconds: number): void; } /** The highest tier id whose `at` threshold `value` has reached, or `null` below every tier — the pure lookup `createAccumulatorMeter`/`createEventMeter` call on every `add`/`tick`. */ export declare function tierAt(value: number, tiers: readonly MeterTier[]): string | null; /** * A raw accumulating gauge that crosses named tier thresholds as a value builds, with optional decay — the primitive under charge, rage, and combo meters. * * @capability charge-meter fill a gauge toward named tier thresholds as a value accumulates */ export declare function createAccumulatorMeter(config: AccumulatorMeterConfig): AccumulatorMeter;