/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { ElementTag } from "../common/index.js";
import { Access, Conformance, Constraint, FieldElement, Quality } from "../index.js";
import { BaseElement } from "./BaseElement.js";
/**
 * Describes a cluster or cluster element requirement for a device.
 */
export type RequirementElement = BaseElement & {
    tag: `${RequirementElement.Tag}`;
    /**
     * Requirement element type.
     */
    element: `${RequirementElement.ElementType}`;
    constraint?: Constraint.Definition;
    access?: Access.Definition;
    quality?: Quality.Definition;
    conformance?: Conformance.Definition;
    default?: any;
    /**
     * When a device type requires multiple instances of the same component device type (e.g. two PowerSource
     * endpoints), each instance is numbered starting from 1.  Requirements without an instance number apply to all
     * instances or to the single required instance.
     */
    instance?: number;
    children?: (RequirementElement | FieldElement)[];
};
export declare function RequirementElement(definition: RequirementElement.Properties, ...children: (RequirementElement | FieldElement)[]): RequirementElement;
export declare namespace RequirementElement {
    type Tag = ElementTag.Requirement;
    const Tag = ElementTag.Requirement;
    type Properties = BaseElement.Properties<RequirementElement>;
    enum ElementType {
        ClientCluster = "clientCluster",
        ServerCluster = "serverCluster",
        Feature = "feature",
        Attribute = "attribute",
        Command = "command",
        Event = "event",
        CommandField = "commandField",
        DeviceType = "deviceType",
        Condition = "condition"
    }
}
//# sourceMappingURL=RequirementElement.d.ts.map