/**
 * @license
 * Copyright 2022-2025 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { Decorator } from "#general";
import { Model } from "#models/Model.js";
/**
 * Decorate a class or field as a specific Matter element type.
 */
export declare function element<T extends Decorator.Collector | Decorator.ClassCollector | Decorator.PropertyCollector | Decorator.MethodCollector>(kind: Model.ConcreteType, ...modifiers: element.Modifier<T>[]): T;
export declare namespace element {
    /**
     * Create a property decorator for a specific element type.
     */
    function property(kind: Model.ConcreteType): (...modifiers: Modifier<Decorator.PropertyCollector>[]) => Decorator.PropertyCollector;
    /**
     * Create a decorator factory for a specific type of class.
     */
    function klass(kind: Model.ConcreteType): (...modifiers: Modifier<Decorator.ClassCollector>[]) => Decorator.ClassCollector;
    /**
     * A value that modifies the decoration of an element.
     *
     * Modifiers affect decoration as follows:
     *
     *   * A model type forces {@link Semantics#localModel} to that type
     *
     *   * A model instance sets the {@link Model#operationalBase} of {@link Semantics#localModel}
     *
     *   * A constructor instance also sets the {@link Model#operationalBase} of {@link Semantics#localModel}
     *
     *   * A decorator is invoked to decorate the element
     *
     *   * A number sets the {@link Model#id} of {@link Semantics#localModel}
     *
     *   * A string sets the {@link Model#name} of {@link Semantics#localModel}
     */
    type Modifier<T extends Decorator.Collector | Decorator.ClassCollector | Decorator.PropertyCollector | Decorator.MethodCollector> = Model.ConcreteType | Model | NewableFunction | number | string | T;
}
//# sourceMappingURL=element.d.ts.map