import { LitElement } from 'lit';
/**
 * Constructor type helper for mixins.
 * @see https://lit.dev/docs/composition/mixins/#typing-the-subclass
 */
type Constructor<T = object> = new (...args: any[]) => T;
/**
 * Interface describing the properties and methods added by {@link SetpointMixin}.
 *
 * Use this for type-checking when you need to reference the mixin's API
 * without extending it:
 *
 * ```ts
 * function doSomething(host: SetpointMixinInterface) {
 *   const isAt = host.computeAtSetpoint(someValue);
 * }
 * ```
 */
export declare class SetpointMixinInterface {
    /** Target setpoint value. `undefined` = no setpoint marker shown. */
    setpoint: number | undefined;
    /**
     * Adjustment preview for 2-step interface.
     * When defined, two markers are shown: original (dimmed) + new (focus).
     * @see SetpointAdjustmentFlow story for the full interaction flow.
     */
    newSetpoint: number | undefined;
    /**
     * Manual at-setpoint override.
     * Used when `autoAtSetpoint` is false. Ignored when auto mode is active.
     */
    atSetpoint: boolean;
    /**
     * User is physically interacting with the control.
     *
     * When true:
     * - `computeAtSetpoint()` returns false (suppressed)
     * - Single setpoint marker renders in focus visual state
     *
     * Use for immediate-feedback interactions (e.g. lever/slider touch).
     */
    touching: boolean;
    /** When false, `computeAtSetpoint()` uses manual `atSetpoint` boolean. */
    autoAtSetpoint: boolean;
    /** Tolerance for auto at-setpoint detection. */
    autoAtSetpointDeadband: number;
    /** Tolerance for zero-snap visual state (equalZero). */
    setpointAtZeroDeadband: number;
    /**
     * Override to derive the setpoint color from the instrument's `priority`
     * regardless of instrument state. When false (default), loading/off states
     * render the setpoint in disabled (tertiary) color.
     *
     * - `false`: default behavior — setpoint inherits instrument state/color
     * - `true`: color derived from `priority`, never disabled
     */
    setpointOverride: boolean;
    /**
     * Enable CSS-animated confirm transition.
     *
     * When true and a confirm occurs (newSetpoint → undefined, setpoint → new value):
     * - The original setpoint marker slides from old to new position (300ms CSS transition)
     * - The original setpoint marker regains full opacity (0.75 → 1.0)
     * - The departing new-setpoint marker fades out (opacity 1 → 0, 300ms)
     *
     * Duration is overridable via CSS custom property `--setpoint-animation-duration`.
     */
    animateSetpoint: boolean;
    /**
     * Value of the departing new-setpoint during a confirm animation.
     *
     * Set automatically when `animateSetpoint=true` and `newSetpoint` transitions
     * from defined → undefined. Cleared after the animation duration (300ms).
     *
     * Renderers use this to keep the new-setpoint marker in the DOM during
     * its fade-out animation.
     *
     * @readonly — managed by the mixin, do not set externally
     */
    readonly departingNewSetpoint: number | undefined;
    /**
     * Compute whether the current value is at the setpoint.
     *
     * This is the unified replacement for all the per-instrument
     * `atSetpointCalc()` / `atHeadingSetpointCalc()` / `atAngleSetpointCalc` methods.
     *
     * @param currentValue - The instrument's current value (speed, angle, thrust, etc.)
     * @returns Whether `currentValue` is within deadband of the setpoint
     */
    computeAtSetpoint(currentValue: number | undefined): boolean;
}
/**
 * Configuration options for {@link SetpointMixin}.
 */
export interface SetpointMixinOptions {
    /**
     * Default value for `autoAtSetpointDeadband`.
     * - Radial instruments: 2 (degrees)
     * - Thrust instruments: 1 (percent)
     * @default 2
     */
    defaultDeadband?: number;
    /**
     * Default value for `setpointAtZeroDeadband`.
     * - Most instruments: 0.5
     * - Thrust instruments: 0.1
     * @default 0.5
     */
    defaultZeroDeadband?: number;
    /**
     * Enable 360° angular wraparound for at-setpoint calculation.
     * When true, 359° and 1° are correctly detected as 2° apart.
     * Use for compass, heading, and other full-rotation instruments.
     * @default false
     */
    angularWraparound?: boolean;
}
/**
 * Lit mixin that adds a complete setpoint property bundle to a LitElement.
 *
 * @param superClass - The base LitElement class to extend
 * @param options - Configuration options (defaults, angular wraparound)
 * @returns A new class with all setpoint properties and computation method
 *
 * @see SetpointMixinInterface for the full API surface
 * @see SetpointMixinOptions for configuration
 * @see SetpointBundle for multi-setpoint components (e.g. azimuth-thruster)
 */
export declare function SetpointMixin<T extends Constructor<LitElement>>(superClass: T, options?: SetpointMixinOptions): Constructor<SetpointMixinInterface> & T;
export {};
//# sourceMappingURL=setpoint-mixin.d.ts.map