/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { Quality } from "../aspects/Quality.js";
import { ElementTag } from "../common/index.js";
import { Mei } from "../common/Mei.js";
import { AttributeElement } from "./AttributeElement.js";
import { BaseElement } from "./BaseElement.js";
import { CommandElement } from "./CommandElement.js";
import { DatatypeElement } from "./DatatypeElement.js";
import { EventElement } from "./EventElement.js";
import { FieldElement } from "./FieldElement.js";
/**
 * A cluster describes a set of related functionality.
 */
export interface ClusterElement extends BaseElement {
    id?: Mei;
    tag: `${ClusterElement.Tag}`;
    /**
     * The cluster's PICS code.
     */
    pics?: string;
    /**
     * Other qualities.
     *
     * Quality flags allowed for clusters are "I" (singleton) and "K" (diagnostics).  The spec as of 1.3 does not appear
     * to use the singleton flag, however.
     */
    quality?: Quality.Definition;
    /**
     * Encodes both classification and scope from the Matter specification.
     */
    classification?: `${ClusterElement.Classification}`;
    children?: ClusterElement.Child[];
}
export declare function ClusterElement(definition: ClusterElement.Properties, ...children: ClusterElement.Child[]): ClusterElement;
export declare namespace ClusterElement {
    type Tag = ElementTag.Cluster;
    const Tag = ElementTag.Cluster;
    type Properties = BaseElement.Properties<ClusterElement>;
    type Child = DatatypeElement | AttributeElement | CommandElement | EventElement | FieldElement;
    enum Classification {
        EndpointUtility = "endpoint",
        NodeUtility = "node",
        Application = "application"
    }
}
//# sourceMappingURL=ClusterElement.d.ts.map