/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { Model } from "#models/Model.js";
import { Decorator } from "@matter/general";
/**
 * 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: element.ElementKind, ...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;
    /**
     * Specifies the type of model associated with an element.
     *
     * This is a concrete model class except in the case of responses which we special case to differentiate between
     * commands a responses.
     */
    type ElementKind = Model.ConcreteType | {
        Tag: "response";
    };
}
//# sourceMappingURL=element.d.ts.map