/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { Attribute, OptionalAttribute, FixedAttribute } from "../cluster/Cluster.js";
import { BitFlag } from "../schema/BitmapSchema.js";
import { Identity } from "#general";
export declare namespace ConcentrationMeasurement {
    /**
     * These are optional features supported by ConcentrationMeasurementCluster.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 2.10.4
     */
    enum Feature {
        /**
         * NumericMeasurement (MEA)
         *
         * Cluster supports numeric measurement of substance
         */
        NumericMeasurement = "NumericMeasurement",
        /**
         * LevelIndication (LEV)
         *
         * Cluster supports basic level indication for substance using the ConcentrationLevel enum
         */
        LevelIndication = "LevelIndication",
        /**
         * MediumLevel (MED)
         *
         * Cluster supports the Medium Concentration Level
         */
        MediumLevel = "MediumLevel",
        /**
         * CriticalLevel (CRI)
         *
         * Cluster supports the Critical Concentration Level
         */
        CriticalLevel = "CriticalLevel",
        /**
         * PeakMeasurement (PEA)
         *
         * Cluster supports peak numeric measurement of substance
         */
        PeakMeasurement = "PeakMeasurement",
        /**
         * AverageMeasurement (AVG)
         *
         * Cluster supports average numeric measurement of substance
         */
        AverageMeasurement = "AverageMeasurement"
    }
    /**
     * Where mentioned, Billion refers to 10, Trillion refers to 1012 (short scale).
     *
     * @see {@link MatterSpecification.v142.Cluster} § 2.10.5.1
     */
    enum MeasurementUnit {
        /**
         * Parts per Million (10)
         */
        Ppm = 0,
        /**
         * Parts per Billion (10)
         */
        Ppb = 1,
        /**
         * Parts per Trillion (1012)
         */
        Ppt = 2,
        /**
         * Milligram per m
         */
        Mgm3 = 3,
        /**
         * Microgram per m
         */
        Ugm3 = 4,
        /**
         * Nanogram per m
         */
        Ngm3 = 5,
        /**
         * Particles per m
         */
        Pm3 = 6,
        /**
         * Becquerel per m
         */
        Bqm3 = 7
    }
    /**
     * @see {@link MatterSpecification.v142.Cluster} § 2.10.5.3
     */
    enum LevelValue {
        /**
         * The level is Unknown
         */
        Unknown = 0,
        /**
         * The level is considered Low
         */
        Low = 1,
        /**
         * The level is considered Medium
         */
        Medium = 2,
        /**
         * The level is considered High
         */
        High = 3,
        /**
         * The level is considered Critical
         */
        Critical = 4
    }
    /**
     * @see {@link MatterSpecification.v142.Cluster} § 2.10.5.2
     */
    enum MeasurementMedium {
        /**
         * The measurement is being made in Air
         */
        Air = 0,
        /**
         * The measurement is being made in Water
         */
        Water = 1,
        /**
         * The measurement is being made in Soil
         */
        Soil = 2
    }
    /**
     * A ConcentrationMeasurementCluster supports these elements if it supports feature NumericMeasurement.
     */
    const NumericMeasurementComponent: {
        readonly attributes: {
            /**
             * Indicates the most recent measurement as a single-precision floating-point number. MeasuredValue’s unit
             * is represented by MeasurementUnit.
             *
             * A value of null indicates that the measurement is unknown or outside the valid range. MinMeasuredValue
             * and MaxMeasuredValue define the valid range for MeasuredValue.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.1
             */
            readonly measuredValue: Attribute<number | null, any>;
            /**
             * Indicates the minimum value of MeasuredValue that is capable of being measured. A MinMeasuredValue of
             * null indicates that the MinMeasuredValue is not defined.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.2
             */
            readonly minMeasuredValue: Attribute<number | null, any>;
            /**
             * Indicates the maximum value of MeasuredValue that is capable of being measured. A MaxMeasuredValue of
             * null indicates that the MaxMeasuredValue is not defined.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.3
             */
            readonly maxMeasuredValue: Attribute<number | null, any>;
            /**
             * Indicates the range of error or deviation that can be found in MeasuredValue and PeakMeasuredValue. This
             * is considered a +/- value and should be considered to be in MeasurementUnit.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.8
             */
            readonly uncertainty: OptionalAttribute<number, any>;
            /**
             * Indicates the unit of MeasuredValue. See MeasurementUnitEnum.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.9
             */
            readonly measurementUnit: FixedAttribute<MeasurementUnit, any>;
        };
    };
    /**
     * A ConcentrationMeasurementCluster supports these elements if it supports feature PeakMeasurement.
     */
    const PeakMeasurementComponent: {
        readonly attributes: {
            /**
             * Indicates the maximum value of MeasuredValue that has been measured during the PeakMeasuredValueWindow.
             * If this attribute is provided, the PeakMeasuredValueWindow attribute shall also be provided.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.4
             */
            readonly peakMeasuredValue: Attribute<number | null, any>;
            /**
             * Indicates the window of time used for determining the PeakMeasuredValue. The value is in seconds.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.5
             */
            readonly peakMeasuredValueWindow: Attribute<number, any>;
        };
    };
    /**
     * A ConcentrationMeasurementCluster supports these elements if it supports feature AverageMeasurement.
     */
    const AverageMeasurementComponent: {
        readonly attributes: {
            /**
             * Indicates the average value of MeasuredValue that has been measured during the
             * AverageMeasuredValueWindow. If this attribute is provided, the AverageMeasuredValueWindow attribute shall
             * also be provided.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.6
             */
            readonly averageMeasuredValue: Attribute<number | null, any>;
            /**
             * Indicates the window of time used for determining the AverageMeasuredValue. The value is in seconds.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.7
             */
            readonly averageMeasuredValueWindow: Attribute<number, any>;
        };
    };
    /**
     * A ConcentrationMeasurementCluster supports these elements if it supports feature LevelIndication.
     */
    const LevelIndicationComponent: {
        readonly attributes: {
            /**
             * Indicates the level of the substance detected. See LevelValueEnum.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.11
             */
            readonly levelValue: Attribute<LevelValue, any>;
        };
    };
    /**
     * ConcentrationMeasurement is a derived cluster, not to be used directly. These elements are present in all
     * clusters derived from ConcentrationMeasurement.
     */
    const Base: {
        readonly features: {
            /**
             * Cluster supports numeric measurement of substance
             */
            readonly numericMeasurement: BitFlag;
            /**
             * Cluster supports basic level indication for substance using the ConcentrationLevel enum
             */
            readonly levelIndication: BitFlag;
            /**
             * Cluster supports the Medium Concentration Level
             */
            readonly mediumLevel: BitFlag;
            /**
             * Cluster supports the Critical Concentration Level
             */
            readonly criticalLevel: BitFlag;
            /**
             * Cluster supports peak numeric measurement of substance
             */
            readonly peakMeasurement: BitFlag;
            /**
             * Cluster supports average numeric measurement of substance
             */
            readonly averageMeasurement: BitFlag;
        };
        readonly name: "ConcentrationMeasurement";
        readonly revision: 3;
        readonly attributes: {
            /**
             * Indicates the medium in which MeasuredValue or LevelValue is being measured. See MeasurementMediumEnum.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.10
             */
            readonly measurementMedium: FixedAttribute<MeasurementMedium, any>;
        };
        /**
         * This metadata controls which ConcentrationMeasurementCluster elements matter.js activates for specific
         * feature combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly numericMeasurement: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the most recent measurement as a single-precision floating-point number. MeasuredValue’s unit
                     * is represented by MeasurementUnit.
                     *
                     * A value of null indicates that the measurement is unknown or outside the valid range. MinMeasuredValue
                     * and MaxMeasuredValue define the valid range for MeasuredValue.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.1
                     */
                    readonly measuredValue: Attribute<number | null, any>;
                    /**
                     * Indicates the minimum value of MeasuredValue that is capable of being measured. A MinMeasuredValue of
                     * null indicates that the MinMeasuredValue is not defined.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.2
                     */
                    readonly minMeasuredValue: Attribute<number | null, any>;
                    /**
                     * Indicates the maximum value of MeasuredValue that is capable of being measured. A MaxMeasuredValue of
                     * null indicates that the MaxMeasuredValue is not defined.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.3
                     */
                    readonly maxMeasuredValue: Attribute<number | null, any>;
                    /**
                     * Indicates the range of error or deviation that can be found in MeasuredValue and PeakMeasuredValue. This
                     * is considered a +/- value and should be considered to be in MeasurementUnit.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.8
                     */
                    readonly uncertainty: OptionalAttribute<number, any>;
                    /**
                     * Indicates the unit of MeasuredValue. See MeasurementUnitEnum.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.9
                     */
                    readonly measurementUnit: FixedAttribute<MeasurementUnit, any>;
                };
            };
        }, {
            readonly flags: {
                readonly peakMeasurement: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the maximum value of MeasuredValue that has been measured during the PeakMeasuredValueWindow.
                     * If this attribute is provided, the PeakMeasuredValueWindow attribute shall also be provided.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.4
                     */
                    readonly peakMeasuredValue: Attribute<number | null, any>;
                    /**
                     * Indicates the window of time used for determining the PeakMeasuredValue. The value is in seconds.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.5
                     */
                    readonly peakMeasuredValueWindow: Attribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly averageMeasurement: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the average value of MeasuredValue that has been measured during the
                     * AverageMeasuredValueWindow. If this attribute is provided, the AverageMeasuredValueWindow attribute shall
                     * also be provided.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.6
                     */
                    readonly averageMeasuredValue: Attribute<number | null, any>;
                    /**
                     * Indicates the window of time used for determining the AverageMeasuredValue. The value is in seconds.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.7
                     */
                    readonly averageMeasuredValueWindow: Attribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly levelIndication: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the level of the substance detected. See LevelValueEnum.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.11
                     */
                    readonly levelValue: Attribute<LevelValue, any>;
                };
            };
        }, {
            readonly flags: {
                readonly mediumLevel: true;
                readonly levelIndication: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly criticalLevel: true;
                readonly levelIndication: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly peakMeasurement: true;
                readonly numericMeasurement: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly averageMeasurement: true;
                readonly numericMeasurement: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly numericMeasurement: false;
                readonly levelIndication: false;
            };
            readonly component: false;
        }];
    };
    /**
     * @see {@link Complete}
     */
    const CompleteInstance: {
        readonly name: "ConcentrationMeasurement";
        readonly revision: 3;
        readonly features: {
            /**
             * Cluster supports numeric measurement of substance
             */
            readonly numericMeasurement: BitFlag;
            /**
             * Cluster supports basic level indication for substance using the ConcentrationLevel enum
             */
            readonly levelIndication: BitFlag;
            /**
             * Cluster supports the Medium Concentration Level
             */
            readonly mediumLevel: BitFlag;
            /**
             * Cluster supports the Critical Concentration Level
             */
            readonly criticalLevel: BitFlag;
            /**
             * Cluster supports peak numeric measurement of substance
             */
            readonly peakMeasurement: BitFlag;
            /**
             * Cluster supports average numeric measurement of substance
             */
            readonly averageMeasurement: BitFlag;
        };
        readonly attributes: {
            readonly measuredValue: Attribute<number | null, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    numericMeasurement: boolean;
                }];
            };
            readonly minMeasuredValue: Attribute<number | null, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    numericMeasurement: boolean;
                }];
            };
            readonly maxMeasuredValue: Attribute<number | null, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    numericMeasurement: boolean;
                }];
            };
            readonly peakMeasuredValue: Attribute<number | null, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    peakMeasurement: boolean;
                }];
            };
            readonly peakMeasuredValueWindow: Attribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    peakMeasurement: boolean;
                }];
            };
            readonly averageMeasuredValue: Attribute<number | null, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    averageMeasurement: boolean;
                }];
            };
            readonly averageMeasuredValueWindow: Attribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    averageMeasurement: boolean;
                }];
            };
            readonly uncertainty: OptionalAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | [{
                    numericMeasurement: boolean;
                }];
                readonly mandatoryIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
            };
            readonly measurementUnit: FixedAttribute<MeasurementUnit, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    numericMeasurement: boolean;
                }];
            };
            readonly levelValue: Attribute<LevelValue, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    levelIndication: boolean;
                }];
            };
            /**
             * Indicates the medium in which MeasuredValue or LevelValue is being measured. See MeasurementMediumEnum.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.10.6.10
             */
            readonly measurementMedium: FixedAttribute<MeasurementMedium, any>;
        };
    };
    /**
     * This cluster supports all ConcentrationMeasurement features. It may support illegal feature combinations.
     *
     * If you use this cluster you must manually specify which features are active and ensure the set of active features
     * is legal per the Matter specification.
     */
    interface Complete extends Identity<typeof CompleteInstance> {
    }
    const Complete: Complete;
}
//# sourceMappingURL=concentration-measurement.d.ts.map