/**
 * @license
 * Copyright 2022-2025 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { Aspect } from "./Aspect.js";
/**
 * An operational representation of "other quality" as defined by the Matter
 * specification.
 *
 * "Other qualities" are defined behaviors of data fields and cluster elements
 * that do not involve access or conformance.
 */
export declare class Quality extends Aspect<Quality.Definition> implements Quality.Ast {
    nullable?: boolean;
    nonvolatile?: boolean;
    fixed?: boolean;
    changesOmitted?: boolean;
    scene?: boolean;
    reportable?: boolean;
    singleton?: boolean;
    disallowed?: Quality.AllProperties;
    quieter?: boolean;
    largeMessage?: boolean;
    diagnostics?: boolean;
    /**
     * Initialize from a Quality.All definition or a string conforming to the
     * "other quality" DSL defined in the Matter specification.
     */
    constructor(definition: Quality.Definition);
    private parse;
    /**
     * Display quality using standard Matter syntax.
     */
    toString(): string;
}
export declare namespace Quality {
    /**
     * Various ways to define quality.
     */
    type Definition = Ast | `${Flag}`[] | string | undefined;
    /**
     * All qualities designated as "other qualities" in the Matter specification.
     */
    enum Field {
        nullable = "X",
        nonvolatile = "N",
        fixed = "F",
        scene = "S",
        reportable = "P",
        changesOmitted = "C",
        singleton = "I",
        quieter = "Q",
        largeMessage = "L",
        diagnostics = "K"
    }
    /**
     * Quality flags and the logical field they map to.
     */
    enum Flag {
        X = "nullable",
        N = "nonvolatile",
        F = "fixed",
        S = "scene",
        P = "reportable",
        C = "changesOmitted",
        I = "singleton",
        Q = "quieter",
        L = "largeMessage",
        K = "diagnostics"
    }
    /**
     * Valid "other quality" flags.
     */
    type FlagName = `${Field}`;
    /**
     * Runtime version of QualityFlag.
     */
    const FlagNames: FlagName[];
    /**
     * Quality values that apply to data fields.
     */
    type DataField = {
        /**
         * Designates a data field as nullable?
         *
         * Scope: data field
         */
        nullable?: boolean;
    };
    /**
     * Quality values that apply to attribute data.
     */
    type AttributeData = DataField & {
        /**
         * Designates attribute value persistant across restarts?
         */
        nonvolatile?: boolean;
        /**
         * Designates a value as unchanging short of software replacement.
         */
        fixed?: boolean;
        /**
         * Designates a fast-changing value for which delta changes are
         * unavailable.
         */
        changesOmitted?: boolean;
        /**
         * Designates data with fluctuating product rate or where some deltas are meaningless or otherwise undesirable
         * to report.
         */
        quieter?: boolean;
    };
    /**
     * Quality values that apply to attributes.
     */
    type Attribute = AttributeData & {
        /**
         * Designates an attribute as part of a scene.
         */
        scene?: boolean;
        /**
         * Designates best-effort reporting as available for an attribute.
         */
        reportable?: boolean;
    };
    type Command = {
        /**
         * Designates commands with payloads that potentially exceed a single IPv6 packet (1280 bytes, the minimum IPv6
         * MTU).
         */
        largeMessage?: boolean;
    };
    type Cluster = {
        /**
         * Designates a cluster as a singleton on the node for the device type.
         */
        singleton?: boolean;
        /**
         * Designates a cluster as a diagnostics cluster.  Diagnostics clusters may be omitted from attribute expansion.
         */
        diagnostics?: boolean;
    };
    /**
     * Quality properties that apply to device types.
     */
    type AllProperties = Attribute & Command & Cluster;
    /**
     * Quality values that apply to device types.
     */
    type DeviceType = AllProperties & {
        /**
         * Designates qualities that are disallowed for the device type.
         */
        disallowed?: AllProperties;
    };
    /**
     * Values for all qualities designated as "other qualities" in the Matter
     * specification.
     */
    type Ast = DeviceType;
}
//# sourceMappingURL=Quality.d.ts.map