/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
/*** THIS FILE IS GENERATED, DO NOT EDIT ***/
import { MutableCluster } from "../cluster/mutation/MutableCluster.js";
import { FixedAttribute, Attribute } from "../cluster/Cluster.js";
import { BitFlag } from "../schema/BitmapSchema.js";
import { Identity } from "@matter/general";
export declare namespace PowerTopology {
    /**
     * These are optional features supported by PowerTopologyCluster.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.8.4
     */
    enum Feature {
        /**
         * NodeTopology (NODE)
         *
         * This endpoint provides or consumes power to/from the entire node
         */
        NodeTopology = "NodeTopology",
        /**
         * TreeTopology (TREE)
         *
         * This endpoint provides or consumes power to/from itself and its child endpoints
         */
        TreeTopology = "TreeTopology",
        /**
         * SetTopology (SET)
         *
         * This endpoint provides or consumes power to/from a specified set of endpoints
         */
        SetTopology = "SetTopology",
        /**
         * DynamicPowerFlow (DYPF)
         *
         * The specified set of endpoints may change
         */
        DynamicPowerFlow = "DynamicPowerFlow"
    }
    /**
     * A PowerTopologyCluster supports these elements if it supports feature SetTopology.
     */
    const SetTopologyComponent: {
        readonly attributes: {
            /**
             * Indicates the list of endpoints capable of providing power to and/or consuming power from the endpoint
             * hosting this server.
             *
             * @see {@link MatterSpecification.v142.Core} § 11.8.5.1
             */
            readonly availableEndpoints: FixedAttribute<import("../datatype/EndpointNumber.js").EndpointNumber[], any>;
        };
    };
    /**
     * A PowerTopologyCluster supports these elements if it supports feature DynamicPowerFlow.
     */
    const DynamicPowerFlowComponent: {
        readonly attributes: {
            /**
             * Indicates the current list of endpoints currently providing or consuming power to or from the endpoint
             * hosting this server. This list shall be a subset of the value of the AvailableEndpoints attribute.
             *
             * @see {@link MatterSpecification.v142.Core} § 11.8.5.2
             */
            readonly activeEndpoints: Attribute<import("../datatype/EndpointNumber.js").EndpointNumber[], any>;
        };
    };
    /**
     * These elements and properties are present in all PowerTopology clusters.
     */
    const Base: {
        readonly id: 156;
        readonly name: "PowerTopology";
        readonly revision: 1;
        readonly features: {
            /**
             * This endpoint provides or consumes power to/from the entire node
             */
            readonly nodeTopology: BitFlag;
            /**
             * This endpoint provides or consumes power to/from itself and its child endpoints
             */
            readonly treeTopology: BitFlag;
            /**
             * This endpoint provides or consumes power to/from a specified set of endpoints
             */
            readonly setTopology: BitFlag;
            /**
             * The specified set of endpoints may change
             */
            readonly dynamicPowerFlow: BitFlag;
        };
        /**
         * This metadata controls which PowerTopologyCluster elements matter.js activates for specific feature
         * combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly setTopology: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the list of endpoints capable of providing power to and/or consuming power from the endpoint
                     * hosting this server.
                     *
                     * @see {@link MatterSpecification.v142.Core} § 11.8.5.1
                     */
                    readonly availableEndpoints: FixedAttribute<import("../datatype/EndpointNumber.js").EndpointNumber[], any>;
                };
            };
        }, {
            readonly flags: {
                readonly dynamicPowerFlow: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the current list of endpoints currently providing or consuming power to or from the endpoint
                     * hosting this server. This list shall be a subset of the value of the AvailableEndpoints attribute.
                     *
                     * @see {@link MatterSpecification.v142.Core} § 11.8.5.2
                     */
                    readonly activeEndpoints: Attribute<import("../datatype/EndpointNumber.js").EndpointNumber[], any>;
                };
            };
        }, {
            readonly flags: {
                readonly dynamicPowerFlow: true;
                readonly setTopology: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly nodeTopology: true;
                readonly treeTopology: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly nodeTopology: true;
                readonly setTopology: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly treeTopology: true;
                readonly setTopology: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly nodeTopology: false;
                readonly treeTopology: false;
                readonly setTopology: false;
            };
            readonly component: false;
        }];
    };
    /**
     * @see {@link Cluster}
     */
    const ClusterInstance: MutableCluster.ExtensibleOnly<{
        readonly id: 156;
        readonly name: "PowerTopology";
        readonly revision: 1;
        readonly features: {
            /**
             * This endpoint provides or consumes power to/from the entire node
             */
            readonly nodeTopology: BitFlag;
            /**
             * This endpoint provides or consumes power to/from itself and its child endpoints
             */
            readonly treeTopology: BitFlag;
            /**
             * This endpoint provides or consumes power to/from a specified set of endpoints
             */
            readonly setTopology: BitFlag;
            /**
             * The specified set of endpoints may change
             */
            readonly dynamicPowerFlow: BitFlag;
        };
        /**
         * This metadata controls which PowerTopologyCluster elements matter.js activates for specific feature
         * combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly setTopology: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the list of endpoints capable of providing power to and/or consuming power from the endpoint
                     * hosting this server.
                     *
                     * @see {@link MatterSpecification.v142.Core} § 11.8.5.1
                     */
                    readonly availableEndpoints: FixedAttribute<import("../datatype/EndpointNumber.js").EndpointNumber[], any>;
                };
            };
        }, {
            readonly flags: {
                readonly dynamicPowerFlow: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the current list of endpoints currently providing or consuming power to or from the endpoint
                     * hosting this server. This list shall be a subset of the value of the AvailableEndpoints attribute.
                     *
                     * @see {@link MatterSpecification.v142.Core} § 11.8.5.2
                     */
                    readonly activeEndpoints: Attribute<import("../datatype/EndpointNumber.js").EndpointNumber[], any>;
                };
            };
        }, {
            readonly flags: {
                readonly dynamicPowerFlow: true;
                readonly setTopology: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly nodeTopology: true;
                readonly treeTopology: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly nodeTopology: true;
                readonly setTopology: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly treeTopology: true;
                readonly setTopology: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly nodeTopology: false;
                readonly treeTopology: false;
                readonly setTopology: false;
            };
            readonly component: false;
        }];
    }>;
    /**
     * The Power Topology Cluster provides a mechanism for expressing how power is flowing between endpoints.
     *
     * Per the Matter specification you cannot use {@link PowerTopologyCluster} without enabling certain feature
     * combinations. You must use the {@link with} factory method to obtain a working cluster.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.8
     */
    interface Cluster extends Identity<typeof ClusterInstance> {
    }
    const Cluster: Cluster;
    /**
     * @see {@link Complete}
     */
    const CompleteInstance: MutableCluster<{
        readonly id: 156;
        readonly name: "PowerTopology";
        readonly revision: 1;
        readonly features: {
            /**
             * This endpoint provides or consumes power to/from the entire node
             */
            readonly nodeTopology: BitFlag;
            /**
             * This endpoint provides or consumes power to/from itself and its child endpoints
             */
            readonly treeTopology: BitFlag;
            /**
             * This endpoint provides or consumes power to/from a specified set of endpoints
             */
            readonly setTopology: BitFlag;
            /**
             * The specified set of endpoints may change
             */
            readonly dynamicPowerFlow: BitFlag;
        };
        readonly attributes: {
            readonly availableEndpoints: FixedAttribute<import("../datatype/EndpointNumber.js").EndpointNumber[], any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    setTopology: boolean;
                }];
            };
            readonly activeEndpoints: Attribute<import("../datatype/EndpointNumber.js").EndpointNumber[], any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    dynamicPowerFlow: boolean;
                }];
            };
        };
    }, []>;
    /**
     * This cluster supports all PowerTopology 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;
}
export type PowerTopologyCluster = PowerTopology.Cluster;
export declare const PowerTopologyCluster: PowerTopology.Cluster;
//# sourceMappingURL=power-topology.d.ts.map