/**
 * @license
 * Copyright 2022-2025 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, Event, Attribute } from "../cluster/Cluster.js";
import { TypeFromSchema } from "../tlv/TlvSchema.js";
import { BitFlag } from "../schema/BitmapSchema.js";
import { Identity } from "#general";
export declare namespace Switch {
    /**
     * These are optional features supported by SwitchCluster.
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.4
     */
    enum Feature {
        /**
         * LatchingSwitch (LS)
         *
         * This feature is for a switch that maintains its position after being pressed (or turned).
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.1
         */
        LatchingSwitch = "LatchingSwitch",
        /**
         * MomentarySwitch (MS)
         *
         * This feature is for a switch that does not maintain its position after being pressed (or turned). After
         * releasing, it goes back to its idle position.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.2
         */
        MomentarySwitch = "MomentarySwitch",
        /**
         * MomentarySwitchRelease (MSR)
         *
         * This feature is for a momentary switch that can distinguish and report release events. When this feature
         * flag MSR is present, MS shall be present as well.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.3
         */
        MomentarySwitchRelease = "MomentarySwitchRelease",
        /**
         * MomentarySwitchLongPress (MSL)
         *
         * This feature is for a momentary switch that can distinguish and report long presses from short presses. When
         * this feature flag MSL is present, MS and MSR shall be present as well.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.4
         */
        MomentarySwitchLongPress = "MomentarySwitchLongPress",
        /**
         * MomentarySwitchMultiPress (MSM)
         *
         * This feature is for a momentary switch that can distinguish and report double press and potentially multiple
         * presses with more events, such as triple press, etc. When this feature flag MSM is present, MS and MSR shall
         * be present as well.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.5
         */
        MomentarySwitchMultiPress = "MomentarySwitchMultiPress"
    }
    /**
     * Body of the Switch multiPressOngoing event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6
     */
    const TlvMultiPressOngoingEvent: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6.1
         */
        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
        /**
         * This field shall contain:
         *
         *   • a value of 2 when the second press of a multi-press sequence has been detected,
         *
         *   • a value of 3 when the third press of a multi-press sequence has been detected,
         *
         *   • a value of N when the Nth press of a multi-press sequence has been detected.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6.2
         */
        currentNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch multiPressOngoing event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6
     */
    interface MultiPressOngoingEvent extends TypeFromSchema<typeof TlvMultiPressOngoingEvent> {
    }
    /**
     * Body of the Switch multiPressComplete event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.7
     */
    const TlvMultiPressCompleteEvent: import("../tlv/TlvObject.js").ObjectSchema<{
        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
        totalNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch multiPressComplete event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.7
     */
    interface MultiPressCompleteEvent extends TypeFromSchema<typeof TlvMultiPressCompleteEvent> {
    }
    /**
     * Body of the Switch switchLatched event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.1
     */
    const TlvSwitchLatchedEvent: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall indicate the new value of the CurrentPosition attribute, i.e. after the move.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.1.1
         */
        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch switchLatched event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.1
     */
    interface SwitchLatchedEvent extends TypeFromSchema<typeof TlvSwitchLatchedEvent> {
    }
    /**
     * Body of the Switch initialPress event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.2
     */
    const TlvInitialPressEvent: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.2.1
         */
        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch initialPress event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.2
     */
    interface InitialPressEvent extends TypeFromSchema<typeof TlvInitialPressEvent> {
    }
    /**
     * Body of the Switch longPress event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.3
     */
    const TlvLongPressEvent: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.3.1
         */
        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch longPress event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.3
     */
    interface LongPressEvent extends TypeFromSchema<typeof TlvLongPressEvent> {
    }
    /**
     * Body of the Switch longRelease event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.5
     */
    const TlvLongReleaseEvent: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall indicate the previous value of the CurrentPosition attribute, i.e. just prior to release.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.5.1
         */
        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch longRelease event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.5
     */
    interface LongReleaseEvent extends TypeFromSchema<typeof TlvLongReleaseEvent> {
    }
    /**
     * Body of the Switch shortRelease event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.4
     */
    const TlvShortReleaseEvent: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall indicate the previous value of the CurrentPosition attribute, i.e. just prior to release.
         *
         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.4.1
         */
        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch shortRelease event
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.4
     */
    interface ShortReleaseEvent extends TypeFromSchema<typeof TlvShortReleaseEvent> {
    }
    /**
     * A SwitchCluster supports these elements if it supports feature MomentarySwitchMultiPress.
     */
    const MomentarySwitchMultiPressComponent: {
        readonly attributes: {
            /**
             * Indicates how many consecutive presses can be detected and reported by a momentary switch which supports
             * multi-press (e.g. it will report the value 3 if it can detect single press, double press and triple
             * press, but not quad press and beyond).
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.5.3
             */
            readonly multiPressMax: FixedAttribute<number, any>;
        };
        readonly events: {
            /**
             * This event shall be generated to indicate how many times the momentary switch has been pressed in a
             * multi-press sequence, during that sequence. See Multi Press Details below.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6
             */
            readonly multiPressOngoing: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6.1
                 */
                newPosition: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall contain:
                 *
                 *   • a value of 2 when the second press of a multi-press sequence has been detected,
                 *
                 *   • a value of 3 when the third press of a multi-press sequence has been detected,
                 *
                 *   • a value of N when the Nth press of a multi-press sequence has been detected.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6.2
                 */
                currentNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
            /**
             * This event shall be generated to indicate how many times the momentary switch has been pressed in a
             * multi-press sequence, after it has been detected that the sequence has ended. See Multi Press Details.
             *
             * The PreviousPosition field shall indicate the previous value of the CurrentPosition attribute, i.e. just
             * prior to release.
             *
             * The TotalNumberOfPressesCounted field shall contain:
             *
             *   • a value of 1 when there was one press in a multi-press sequence (and the sequence has ended),
             *
             *     i.e. there was no double press (or more),
             *
             *   • a value of 2 when there were exactly two presses in a multi-press sequence (and the sequence has
             *     ended),
             *
             *   • a value of 3 when there were exactly three presses in a multi-press sequence (and the sequence has
             *     ended),
             *
             *   • a value of N when there were exactly N presses in a multi-press sequence (and the sequence has
             *     ended).
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.7
             */
            readonly multiPressComplete: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                totalNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
        };
    };
    /**
     * A SwitchCluster supports these elements if it supports feature LatchingSwitch.
     */
    const LatchingSwitchComponent: {
        readonly events: {
            /**
             * This event shall be generated, when the latching switch is moved to a new position. It may have been
             * delayed by debouncing within the switch.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.1
             */
            readonly switchLatched: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the CurrentPosition attribute, i.e. after the move.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.1.1
                 */
                newPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
        };
    };
    /**
     * A SwitchCluster supports these elements if it supports feature MomentarySwitch.
     */
    const MomentarySwitchComponent: {
        readonly events: {
            /**
             * This event shall be generated, when the momentary switch starts to be pressed (after debouncing).
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.2
             */
            readonly initialPress: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.2.1
                 */
                newPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
        };
    };
    /**
     * A SwitchCluster supports these elements if it supports feature MomentarySwitchLongPress.
     */
    const MomentarySwitchLongPressComponent: {
        readonly events: {
            /**
             * This event shall be generated, when the momentary switch has been pressed for a "long" time (this time
             * interval is manufacturer determined (e.g. since it depends on the switch physics)).
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.3
             */
            readonly longPress: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.3.1
                 */
                newPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
            /**
             * This event shall be generated, when the momentary switch has been released (after debouncing) and after
             * having been pressed for a long time, i.e. this event shall be generated when the switch is released if a
             * LongPress event has been generated since the previous InitialPress event. Also see Section 1.13.7,
             * “Sequence of generated events”.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.5
             */
            readonly longRelease: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the previous value of the CurrentPosition attribute, i.e. just prior to release.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.5.1
                 */
                previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
        };
    };
    /**
     * A SwitchCluster supports these elements if it supports feature MomentarySwitchRelease.
     */
    const MomentarySwitchReleaseComponent: {
        readonly events: {
            /**
             * This event shall be generated, when the momentary switch has been released (after debouncing).
             *
             *   • If the server supports the Momentary Switch LongPress (MSL) feature, this event shall be generated
             *     when the switch is released if no LongPress event had been generated since the previous InitialPress
             *     event.
             *
             *   • If the server does not support the Momentary Switch LongPress (MSL) feature, this event shall be
             *     generated when the switch is released - even when the switch was pressed for a long time.
             *
             *   • Also see Section 1.13.7, “Sequence of generated events”.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.4
             */
            readonly shortRelease: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the previous value of the CurrentPosition attribute, i.e. just prior to release.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.4.1
                 */
                previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
        };
    };
    /**
     * These elements and properties are present in all Switch clusters.
     */
    const Base: {
        readonly id: 59;
        readonly name: "Switch";
        readonly revision: 1;
        readonly features: {
            /**
             * LatchingSwitch
             *
             * This feature is for a switch that maintains its position after being pressed (or turned).
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.1
             */
            readonly latchingSwitch: BitFlag;
            /**
             * MomentarySwitch
             *
             * This feature is for a switch that does not maintain its position after being pressed (or turned). After
             * releasing, it goes back to its idle position.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.2
             */
            readonly momentarySwitch: BitFlag;
            /**
             * MomentarySwitchRelease
             *
             * This feature is for a momentary switch that can distinguish and report release events. When this feature
             * flag MSR is present, MS shall be present as well.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.3
             */
            readonly momentarySwitchRelease: BitFlag;
            /**
             * MomentarySwitchLongPress
             *
             * This feature is for a momentary switch that can distinguish and report long presses from short presses.
             * When this feature flag MSL is present, MS and MSR shall be present as well.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.4
             */
            readonly momentarySwitchLongPress: BitFlag;
            /**
             * MomentarySwitchMultiPress
             *
             * This feature is for a momentary switch that can distinguish and report double press and potentially
             * multiple presses with more events, such as triple press, etc. When this feature flag MSM is present, MS
             * and MSR shall be present as well.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.5
             */
            readonly momentarySwitchMultiPress: BitFlag;
        };
        readonly attributes: {
            /**
             * Indicates the maximum number of positions the switch has. Any kind of switch has a minimum of 2
             * positions. Also see Multi Position Details for the case NumberOfPositions>2.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.5.1
             */
            readonly numberOfPositions: FixedAttribute<number, any>;
            /**
             * Indicates the position of the switch. The valid range is zero to NumberOfPositions-1. CurrentPosition
             * value 0 shall be assigned to the default position of the switch: for example the "open" state of a
             * rocker switch, or the "idle" state of a push button switch.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.5.2
             */
            readonly currentPosition: Attribute<number, any>;
        };
        /**
         * This metadata controls which SwitchCluster elements matter.js activates for specific feature combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly momentarySwitchMultiPress: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates how many consecutive presses can be detected and reported by a momentary switch which supports
                     * multi-press (e.g. it will report the value 3 if it can detect single press, double press and triple
                     * press, but not quad press and beyond).
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.5.3
                     */
                    readonly multiPressMax: FixedAttribute<number, any>;
                };
                readonly events: {
                    /**
                     * This event shall be generated to indicate how many times the momentary switch has been pressed in a
                     * multi-press sequence, during that sequence. See Multi Press Details below.
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6
                     */
                    readonly multiPressOngoing: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6.1
                         */
                        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
                        /**
                         * This field shall contain:
                         *
                         *   • a value of 2 when the second press of a multi-press sequence has been detected,
                         *
                         *   • a value of 3 when the third press of a multi-press sequence has been detected,
                         *
                         *   • a value of N when the Nth press of a multi-press sequence has been detected.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6.2
                         */
                        currentNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                    /**
                     * This event shall be generated to indicate how many times the momentary switch has been pressed in a
                     * multi-press sequence, after it has been detected that the sequence has ended. See Multi Press Details.
                     *
                     * The PreviousPosition field shall indicate the previous value of the CurrentPosition attribute, i.e. just
                     * prior to release.
                     *
                     * The TotalNumberOfPressesCounted field shall contain:
                     *
                     *   • a value of 1 when there was one press in a multi-press sequence (and the sequence has ended),
                     *
                     *     i.e. there was no double press (or more),
                     *
                     *   • a value of 2 when there were exactly two presses in a multi-press sequence (and the sequence has
                     *     ended),
                     *
                     *   • a value of 3 when there were exactly three presses in a multi-press sequence (and the sequence has
                     *     ended),
                     *
                     *   • a value of N when there were exactly N presses in a multi-press sequence (and the sequence has
                     *     ended).
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.7
                     */
                    readonly multiPressComplete: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                        totalNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly latchingSwitch: true;
            };
            readonly component: {
                readonly events: {
                    /**
                     * This event shall be generated, when the latching switch is moved to a new position. It may have been
                     * delayed by debouncing within the switch.
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.1
                     */
                    readonly switchLatched: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the new value of the CurrentPosition attribute, i.e. after the move.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.1.1
                         */
                        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitch: true;
            };
            readonly component: {
                readonly events: {
                    /**
                     * This event shall be generated, when the momentary switch starts to be pressed (after debouncing).
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.2
                     */
                    readonly initialPress: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.2.1
                         */
                        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchLongPress: true;
            };
            readonly component: {
                readonly events: {
                    /**
                     * This event shall be generated, when the momentary switch has been pressed for a "long" time (this time
                     * interval is manufacturer determined (e.g. since it depends on the switch physics)).
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.3
                     */
                    readonly longPress: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.3.1
                         */
                        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                    /**
                     * This event shall be generated, when the momentary switch has been released (after debouncing) and after
                     * having been pressed for a long time, i.e. this event shall be generated when the switch is released if a
                     * LongPress event has been generated since the previous InitialPress event. Also see Section 1.13.7,
                     * “Sequence of generated events”.
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.5
                     */
                    readonly longRelease: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the previous value of the CurrentPosition attribute, i.e. just prior to release.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.5.1
                         */
                        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchRelease: true;
            };
            readonly component: {
                readonly events: {
                    /**
                     * This event shall be generated, when the momentary switch has been released (after debouncing).
                     *
                     *   • If the server supports the Momentary Switch LongPress (MSL) feature, this event shall be generated
                     *     when the switch is released if no LongPress event had been generated since the previous InitialPress
                     *     event.
                     *
                     *   • If the server does not support the Momentary Switch LongPress (MSL) feature, this event shall be
                     *     generated when the switch is released - even when the switch was pressed for a long time.
                     *
                     *   • Also see Section 1.13.7, “Sequence of generated events”.
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.4
                     */
                    readonly shortRelease: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the previous value of the CurrentPosition attribute, i.e. just prior to release.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.4.1
                         */
                        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchRelease: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchLongPress: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchLongPress: true;
                readonly momentarySwitchRelease: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchMultiPress: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchMultiPress: true;
                readonly momentarySwitchRelease: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly latchingSwitch: true;
                readonly momentarySwitch: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly latchingSwitch: false;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }];
    };
    /**
     * @see {@link Cluster}
     */
    const ClusterInstance: MutableCluster.ExtensibleOnly<{
        readonly id: 59;
        readonly name: "Switch";
        readonly revision: 1;
        readonly features: {
            /**
             * LatchingSwitch
             *
             * This feature is for a switch that maintains its position after being pressed (or turned).
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.1
             */
            readonly latchingSwitch: BitFlag;
            /**
             * MomentarySwitch
             *
             * This feature is for a switch that does not maintain its position after being pressed (or turned). After
             * releasing, it goes back to its idle position.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.2
             */
            readonly momentarySwitch: BitFlag;
            /**
             * MomentarySwitchRelease
             *
             * This feature is for a momentary switch that can distinguish and report release events. When this feature
             * flag MSR is present, MS shall be present as well.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.3
             */
            readonly momentarySwitchRelease: BitFlag;
            /**
             * MomentarySwitchLongPress
             *
             * This feature is for a momentary switch that can distinguish and report long presses from short presses.
             * When this feature flag MSL is present, MS and MSR shall be present as well.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.4
             */
            readonly momentarySwitchLongPress: BitFlag;
            /**
             * MomentarySwitchMultiPress
             *
             * This feature is for a momentary switch that can distinguish and report double press and potentially
             * multiple presses with more events, such as triple press, etc. When this feature flag MSM is present, MS
             * and MSR shall be present as well.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.5
             */
            readonly momentarySwitchMultiPress: BitFlag;
        };
        readonly attributes: {
            /**
             * Indicates the maximum number of positions the switch has. Any kind of switch has a minimum of 2
             * positions. Also see Multi Position Details for the case NumberOfPositions>2.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.5.1
             */
            readonly numberOfPositions: FixedAttribute<number, any>;
            /**
             * Indicates the position of the switch. The valid range is zero to NumberOfPositions-1. CurrentPosition
             * value 0 shall be assigned to the default position of the switch: for example the "open" state of a
             * rocker switch, or the "idle" state of a push button switch.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.5.2
             */
            readonly currentPosition: Attribute<number, any>;
        };
        /**
         * This metadata controls which SwitchCluster elements matter.js activates for specific feature combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly momentarySwitchMultiPress: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates how many consecutive presses can be detected and reported by a momentary switch which supports
                     * multi-press (e.g. it will report the value 3 if it can detect single press, double press and triple
                     * press, but not quad press and beyond).
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.5.3
                     */
                    readonly multiPressMax: FixedAttribute<number, any>;
                };
                readonly events: {
                    /**
                     * This event shall be generated to indicate how many times the momentary switch has been pressed in a
                     * multi-press sequence, during that sequence. See Multi Press Details below.
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6
                     */
                    readonly multiPressOngoing: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6.1
                         */
                        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
                        /**
                         * This field shall contain:
                         *
                         *   • a value of 2 when the second press of a multi-press sequence has been detected,
                         *
                         *   • a value of 3 when the third press of a multi-press sequence has been detected,
                         *
                         *   • a value of N when the Nth press of a multi-press sequence has been detected.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6.2
                         */
                        currentNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                    /**
                     * This event shall be generated to indicate how many times the momentary switch has been pressed in a
                     * multi-press sequence, after it has been detected that the sequence has ended. See Multi Press Details.
                     *
                     * The PreviousPosition field shall indicate the previous value of the CurrentPosition attribute, i.e. just
                     * prior to release.
                     *
                     * The TotalNumberOfPressesCounted field shall contain:
                     *
                     *   • a value of 1 when there was one press in a multi-press sequence (and the sequence has ended),
                     *
                     *     i.e. there was no double press (or more),
                     *
                     *   • a value of 2 when there were exactly two presses in a multi-press sequence (and the sequence has
                     *     ended),
                     *
                     *   • a value of 3 when there were exactly three presses in a multi-press sequence (and the sequence has
                     *     ended),
                     *
                     *   • a value of N when there were exactly N presses in a multi-press sequence (and the sequence has
                     *     ended).
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.7
                     */
                    readonly multiPressComplete: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                        totalNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly latchingSwitch: true;
            };
            readonly component: {
                readonly events: {
                    /**
                     * This event shall be generated, when the latching switch is moved to a new position. It may have been
                     * delayed by debouncing within the switch.
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.1
                     */
                    readonly switchLatched: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the new value of the CurrentPosition attribute, i.e. after the move.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.1.1
                         */
                        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitch: true;
            };
            readonly component: {
                readonly events: {
                    /**
                     * This event shall be generated, when the momentary switch starts to be pressed (after debouncing).
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.2
                     */
                    readonly initialPress: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.2.1
                         */
                        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchLongPress: true;
            };
            readonly component: {
                readonly events: {
                    /**
                     * This event shall be generated, when the momentary switch has been pressed for a "long" time (this time
                     * interval is manufacturer determined (e.g. since it depends on the switch physics)).
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.3
                     */
                    readonly longPress: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.3.1
                         */
                        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                    /**
                     * This event shall be generated, when the momentary switch has been released (after debouncing) and after
                     * having been pressed for a long time, i.e. this event shall be generated when the switch is released if a
                     * LongPress event has been generated since the previous InitialPress event. Also see Section 1.13.7,
                     * “Sequence of generated events”.
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.5
                     */
                    readonly longRelease: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the previous value of the CurrentPosition attribute, i.e. just prior to release.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.5.1
                         */
                        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchRelease: true;
            };
            readonly component: {
                readonly events: {
                    /**
                     * This event shall be generated, when the momentary switch has been released (after debouncing).
                     *
                     *   • If the server supports the Momentary Switch LongPress (MSL) feature, this event shall be generated
                     *     when the switch is released if no LongPress event had been generated since the previous InitialPress
                     *     event.
                     *
                     *   • If the server does not support the Momentary Switch LongPress (MSL) feature, this event shall be
                     *     generated when the switch is released - even when the switch was pressed for a long time.
                     *
                     *   • Also see Section 1.13.7, “Sequence of generated events”.
                     *
                     * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.4
                     */
                    readonly shortRelease: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                        /**
                         * This field shall indicate the previous value of the CurrentPosition attribute, i.e. just prior to release.
                         *
                         * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.4.1
                         */
                        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchRelease: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchLongPress: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchLongPress: true;
                readonly momentarySwitchRelease: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchMultiPress: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchMultiPress: true;
                readonly momentarySwitchRelease: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly latchingSwitch: true;
                readonly momentarySwitch: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly latchingSwitch: false;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }];
    }>;
    /**
     * This cluster exposes interactions with a switch device, for the purpose of using those interactions by other
     * devices.
     *
     * Two types of switch devices are supported: latching switch (e.g. rocker switch) and momentary switch (e.g. push
     * button), distinguished with their feature flags.
     *
     * Interactions with the switch device are exposed as attributes (for the latching switch) and as events (for both
     * types of switches).
     *
     * An interested client may subscribe to these attributes/events and thus be informed of the interactions, and can
     * perform actions based on this, for example by sending commands to perform an action such as controlling a light
     * or a window shade.
     *
     * Per the Matter specification you cannot use {@link SwitchCluster} without enabling certain feature combinations.
     * You must use the {@link with} factory method to obtain a working cluster.
     *
     * @see {@link MatterSpecification.v13.Cluster} § 1.13
     */
    interface Cluster extends Identity<typeof ClusterInstance> {
    }
    const Cluster: Cluster;
    /**
     * @see {@link Complete}
     */
    const CompleteInstance: MutableCluster<{
        readonly id: 59;
        readonly name: "Switch";
        readonly revision: 1;
        readonly features: {
            /**
             * LatchingSwitch
             *
             * This feature is for a switch that maintains its position after being pressed (or turned).
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.1
             */
            readonly latchingSwitch: BitFlag;
            /**
             * MomentarySwitch
             *
             * This feature is for a switch that does not maintain its position after being pressed (or turned). After
             * releasing, it goes back to its idle position.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.2
             */
            readonly momentarySwitch: BitFlag;
            /**
             * MomentarySwitchRelease
             *
             * This feature is for a momentary switch that can distinguish and report release events. When this feature
             * flag MSR is present, MS shall be present as well.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.3
             */
            readonly momentarySwitchRelease: BitFlag;
            /**
             * MomentarySwitchLongPress
             *
             * This feature is for a momentary switch that can distinguish and report long presses from short presses.
             * When this feature flag MSL is present, MS and MSR shall be present as well.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.4
             */
            readonly momentarySwitchLongPress: BitFlag;
            /**
             * MomentarySwitchMultiPress
             *
             * This feature is for a momentary switch that can distinguish and report double press and potentially
             * multiple presses with more events, such as triple press, etc. When this feature flag MSM is present, MS
             * and MSR shall be present as well.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.4.5
             */
            readonly momentarySwitchMultiPress: BitFlag;
        };
        readonly attributes: {
            readonly multiPressMax: FixedAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    momentarySwitchMultiPress: boolean;
                }];
            };
            /**
             * Indicates the maximum number of positions the switch has. Any kind of switch has a minimum of 2
             * positions. Also see Multi Position Details for the case NumberOfPositions>2.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.5.1
             */
            readonly numberOfPositions: FixedAttribute<number, any>;
            /**
             * Indicates the position of the switch. The valid range is zero to NumberOfPositions-1. CurrentPosition
             * value 0 shall be assigned to the default position of the switch: for example the "open" state of a
             * rocker switch, or the "idle" state of a push button switch.
             *
             * @see {@link MatterSpecification.v13.Cluster} § 1.13.5.2
             */
            readonly currentPosition: Attribute<number, any>;
        };
        readonly events: {
            readonly switchLatched: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the CurrentPosition attribute, i.e. after the move.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.1.1
                 */
                newPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    latchingSwitch: boolean;
                }];
            };
            readonly initialPress: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.2.1
                 */
                newPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    momentarySwitch: boolean;
                }];
            };
            readonly longPress: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.3.1
                 */
                newPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    momentarySwitchLongPress: boolean;
                }];
            };
            readonly shortRelease: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the previous value of the CurrentPosition attribute, i.e. just prior to release.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.4.1
                 */
                previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    momentarySwitchRelease: boolean;
                }];
            };
            readonly longRelease: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the previous value of the CurrentPosition attribute, i.e. just prior to release.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.5.1
                 */
                previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    momentarySwitchLongPress: boolean;
                }];
            };
            readonly multiPressOngoing: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the CurrentPosition attribute, i.e. while pressed.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6.1
                 */
                newPosition: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall contain:
                 *
                 *   • a value of 2 when the second press of a multi-press sequence has been detected,
                 *
                 *   • a value of 3 when the third press of a multi-press sequence has been detected,
                 *
                 *   • a value of N when the Nth press of a multi-press sequence has been detected.
                 *
                 * @see {@link MatterSpecification.v13.Cluster} § 1.13.6.6.2
                 */
                currentNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    momentarySwitchMultiPress: boolean;
                }];
            };
            readonly multiPressComplete: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                totalNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    momentarySwitchMultiPress: boolean;
                }];
            };
        };
    }, []>;
    /**
     * This cluster supports all Switch 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 SwitchCluster = Switch.Cluster;
export declare const SwitchCluster: Switch.Cluster;
//# sourceMappingURL=switch.d.ts.map