/**
 * Maps an ember state to its stroke/animation parameters. Keeps the renderer
 * humble: every per-state decision lives here, not in the canvas loop.
 *
 * @param {EmberState} state
 * @returns {EmberVisual}
 */
export function emberStateToVisual(state: EmberState): EmberVisual;
/**
 * Builds the flame wireframe as a surface of revolution: a single tip vertex
 * (index 0) plus `rings` × `meridians` body vertices, joined by tip spokes,
 * vertical meridian lines and horizontal ring loops. Pure and deterministic.
 *
 * @param {{ rings: number; meridians: number }} options
 * @returns {{ vertices: Vertex[]; edges: Array<[number, number]> }}
 */
export function buildFlameWireframe(options: {
    rings: number;
    meridians: number;
}): {
    vertices: Vertex[];
    edges: Array<[number, number]>;
};
/**
 * @typedef {Object} Projection
 * @property {number} tilt Fixed X-axis tilt in radians.
 * @property {number} distance Camera distance for the perspective divide.
 * @property {number} scale Pixels per unit at the projection plane.
 * @property {number} centerX Canvas-space x offset.
 * @property {number} centerY Canvas-space y offset.
 */
/**
 * Projects a flame vertex to a 2D canvas point: rotates around Y, leans the
 * upper body sideways by `swayOffset` scaled by height (a candle flame bends at
 * the tip, not the base), applies the fixed tilt, then a perspective divide.
 * Pure and deterministic.
 *
 * @param {Vertex} vertex
 * @param {number} rotationRadians
 * @param {number} swayOffset
 * @param {Projection} projection
 * @returns {{ x: number; y: number }}
 */
export function projectFlameVertex(vertex: Vertex, rotationRadians: number, swayOffset: number, projection: Projection): {
    x: number;
    y: number;
};
export function emberRadiusFactor(visual: any, time: any): number;
/**
 * The horizontal lean of the flame tip at a given time. Pure — 0 at time 0,
 * always within ± swayAmount.
 *
 * @param {EmberVisual} visual
 * @param {number} time Milliseconds since the loop started.
 * @returns {number}
 */
export function emberSwayOffset(visual: EmberVisual, time: number): number;
/**
 * Dashboard module — Ember flame wireframe avatar (SPEC-189).
 * Humble object: pure functions, no DOM, no global state. Holds the flame-shaped
 * wireframe geometry and every per-state visual decision, so the
 * requestAnimationFrame loop in emberAvatarRenderer.js carries no branching.
 *
 * Ember is a warm wireframe BRAISE, not the setup wizard's abstract icosahedron:
 * a teardrop flame mesh (pointed tip, rounded base) stroked in amber, that leans
 * and flickers like a live coal — livelier and warmer when spoken to.
 *
 * Visual DNA: "Agentic OS" — dark warm near-black + amber. See
 * project_agentic_os_design_dna.md.
 */
/**
 * @typedef {'idle' | 'working' | 'error'} EmberState
 */
/** @type {EmberState[]} */
export const EMBER_STATES: EmberState[];
/** Top of the flame (the tip) in model space. */
export const FLAME_TIP_Y: 1.5;
/** Bottom of the flame (the rounded base) in model space. */
export const FLAME_BASE_Y: -1.15;
export type Vertex = [number, number, number];
export type Projection = {
    /**
     * Fixed X-axis tilt in radians.
     */
    tilt: number;
    /**
     * Camera distance for the perspective divide.
     */
    distance: number;
    /**
     * Pixels per unit at the projection plane.
     */
    scale: number;
    /**
     * Canvas-space x offset.
     */
    centerX: number;
    /**
     * Canvas-space y offset.
     */
    centerY: number;
};
export type EmberState = "idle" | "working" | "error";
export type EmberVisual = {
    /**
     * CSS custom-property name driving the warm stroke.
     */
    color: string;
    /**
     * Stroke width in device pixels.
     */
    lineWidth: number;
    /**
     * Radians per second of the slow Y rotation.
     */
    rotationSpeed: number;
    /**
     * Radians per millisecond of the candle-lean sway.
     */
    swaySpeed: number;
    /**
     * Horizontal lean amplitude at the flame tip.
     */
    swayAmount: number;
    /**
     * Amplitude of the scale shimmer (the coal breathing).
     */
    flicker: number;
    /**
     * Stroke shadow-blur in pixels (the warm halo around lines).
     */
    glow: number;
};
//# sourceMappingURL=emberAvatar.d.ts.map