import { Particle, ParticleProperties } from '../shared/types/Particles.types';
/**
 * The Higgs Field gives "mass" (substance) to particle classes,
 * turning them into real, usable instances. It acts as a hierarchical
 * dependency injection container that manages object lifecycles and scopes.
 */
export declare class HiggsField {
    private readonly parent?;
    private readonly particles;
    private readonly factories;
    constructor(parent?: HiggsField | undefined);
    /**
     * Registers a factory function that defines how to create a particle.
     * @template T The type of the particle instance.
     * @param particleClass The class constructor for the particle.
     * @param factory The function that returns a new instance of the particle.
     * @param options Lifecycle options for the particle (e.g., scope).
     */
    register<TParticle, TArgs extends unknown[]>(particleClass: Particle<TParticle, TArgs> | string, factory: () => TParticle, options?: ParticleOptions): void;
    /**
     * Retrieves an instance of a particle, respecting its scope and the scope hierarchy.
     * @template T The expected type of the particle instance.
     * @param particleClass The class used to register the particle.
     * @returns An instance of the particle.
     * @throws {Error} If the particle is not registered in this scope or any parent scope.
     */
    get<TParticle, TArgs extends unknown[]>(particleClass: Particle<TParticle, TArgs>): TParticle;
    /**
     * Destroy a particle
     */
    destroy(particleClass: Particle): void;
    /**
     * Helper method used to get a particle object of options defined upon creation
     */
    getParticleOptions(particleClass: Particle): ParticleOptions | undefined;
    /**
     * Creates a new child scope (a "bubble universe") of this Higgs Field.
     * This new scope is isolated but can resolve dependencies from its parent.
     * @returns A new, scoped `HiggsField` instance.
     */
    createScope(): HiggsField;
}
/**
 * Options defining a particle's lifecycle and behavior within the HiggsField.
 */
export type ParticleOptions = Pick<ParticleProperties, 'lifecycle' | 'destroyOnInteraction'>;
