/**
 * @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, 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.v142.Cluster} § 1.13.4
     */
    enum Feature {
        /**
         * LatchingSwitch (LS)
         *
         * This feature flag is for a switch that maintains its position after being pressed (or turned).
         *
         * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.1
         */
        LatchingSwitch = "LatchingSwitch",
        /**
         * MomentarySwitch (MS)
         *
         * This feature flag 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.v142.Cluster} § 1.13.4.2
         */
        MomentarySwitch = "MomentarySwitch",
        /**
         * MomentarySwitchRelease (MSR)
         *
         * This feature flag is for a momentary switch that can distinguish and report release events.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.3
         */
        MomentarySwitchRelease = "MomentarySwitchRelease",
        /**
         * MomentarySwitchLongPress (MSL)
         *
         * This feature flag is for a momentary switch that can distinguish and report long presses from short presses.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.4
         */
        MomentarySwitchLongPress = "MomentarySwitchLongPress",
        /**
         * MomentarySwitchMultiPress (MSM)
         *
         * This feature flag is for a momentary switch that can distinguish and report double press and potentially
         * multiple presses with more events, such as triple press, etc.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.5
         */
        MomentarySwitchMultiPress = "MomentarySwitchMultiPress",
        /**
         * ActionSwitch (AS)
         *
         * This feature flag indicates simplified handling of events for multi-press-capable switches. See Section
         * 1.13.8, “Sequence of events for MultiPress”.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.6
         */
        ActionSwitch = "ActionSwitch"
    }
    /**
     * Body of the Switch multiPressComplete event
     *
     * @see {@link MatterSpecification.v142.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.v142.Cluster} § 1.13.6.7
     */
    interface MultiPressCompleteEvent extends TypeFromSchema<typeof TlvMultiPressCompleteEvent> {
    }
    /**
     * Body of the Switch switchLatched event
     *
     * @see {@link MatterSpecification.v142.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.v142.Cluster} § 1.13.6.1.1
         */
        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch switchLatched event
     *
     * @see {@link MatterSpecification.v142.Cluster} § 1.13.6.1
     */
    interface SwitchLatchedEvent extends TypeFromSchema<typeof TlvSwitchLatchedEvent> {
    }
    /**
     * Body of the Switch initialPress event
     *
     * @see {@link MatterSpecification.v142.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.v142.Cluster} § 1.13.6.2.1
         */
        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch initialPress event
     *
     * @see {@link MatterSpecification.v142.Cluster} § 1.13.6.2
     */
    interface InitialPressEvent extends TypeFromSchema<typeof TlvInitialPressEvent> {
    }
    /**
     * Body of the Switch longPress event
     *
     * @see {@link MatterSpecification.v142.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.v142.Cluster} § 1.13.6.3.1
         */
        newPosition: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch longPress event
     *
     * @see {@link MatterSpecification.v142.Cluster} § 1.13.6.3
     */
    interface LongPressEvent extends TypeFromSchema<typeof TlvLongPressEvent> {
    }
    /**
     * Body of the Switch longRelease event
     *
     * @see {@link MatterSpecification.v142.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.v142.Cluster} § 1.13.6.5.1
         */
        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch longRelease event
     *
     * @see {@link MatterSpecification.v142.Cluster} § 1.13.6.5
     */
    interface LongReleaseEvent extends TypeFromSchema<typeof TlvLongReleaseEvent> {
    }
    /**
     * Body of the Switch shortRelease event
     *
     * @see {@link MatterSpecification.v142.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.v142.Cluster} § 1.13.6.4.1
         */
        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch shortRelease event
     *
     * @see {@link MatterSpecification.v142.Cluster} § 1.13.6.4
     */
    interface ShortReleaseEvent extends TypeFromSchema<typeof TlvShortReleaseEvent> {
    }
    /**
     * Body of the Switch multiPressOngoing event
     *
     * @see {@link MatterSpecification.v142.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.v142.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.v142.Cluster} § 1.13.6.6.2
         */
        currentNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Body of the Switch multiPressOngoing event
     *
     * @see {@link MatterSpecification.v142.Cluster} § 1.13.6.6
     */
    interface MultiPressOngoingEvent extends TypeFromSchema<typeof TlvMultiPressOngoingEvent> {
    }
    /**
     * 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 (MSM feature flag set).
             *
             * For example, a momentary switch supporting single press, double press and triple press, but not quad
             * press and beyond, would return the value 3.
             *
             * When more than MultiPressMax presses are detected within a multi-press sequence:
             *
             *   - The server for cluster revision < 2 SHOULD generate a MultiPressComplete event with the
             *     TotalNumberOfPressesCounted field set to the value of the MultiPressMax attribute, and avoid
             *     generating any further InitialPress and MultiPressOngoing events until the switch has become fully
             *     idle (i.e. no longer in the process of counting presses within the multipress).
             *
             *   - The server for cluster revision >= 2 shall generate a MultiPressComplete event with the
             *     TotalNumberOfPressesCounted field set to zero (indicating an aborted sequence), and shall NOT
             *     generate any further InitialPress and MultiPressOngoing events until the switch has become fully idle
             *     (i.e. no longer in the process of counting presses within the multipress).
             *
             * This approach avoids unintentionally causing intermediate actions where there is a very long sequence of
             * presses beyond MultiPressMax that may be taken in account specially by switches (e.g. to trigger special
             * behavior such as factory reset for which generating events towards the client is not appropriate).
             *
             * @see {@link MatterSpecification.v142.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, after it has been detected that the sequence has ended. See Section 1.13.8,
             * “Sequence of events for MultiPress”.
             *
             * 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 0 when there was an aborted multi-press sequence, where the number of presses goes beyond
             *     MultiPressMax presses,
             *
             *   - a value of 1 when there was exactly 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).
             *
             *     > [!NOTE]
             *
             *     > The introduction of TotalNumberOfPressesCounted supporting the value 0 may impact clients of
             *       switches using cluster revision 1 since such servers would not use this value of
             *       TotalNumberOfPressesCounted to indicate an aborted sequence. Clients SHOULD always act using the
             *       TotalNumberOfPressesCounted field taken into account since for values from 1 to MultiPressMax, the
             *       user action that led to the event was different depending on the count.
             *
             * @see {@link MatterSpecification.v142.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.v142.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.v142.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.v142.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.v142.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. The time
             * interval constituting a "long" time is manufacturer-determined, since it depends on the switch physics.
             *
             *   - When the AS feature flag is set, this event:
             *
             *     - shall NOT be generated during a multi-press sequence (since a long press is a separate cycle from
             *       any multi-press cycles);
             *
             *     - shall only be generated after the first InitialPress following a MultiPressComplete when a long
             *       press is detected after the idle time.
             *
             *   - Else, when the MSM feature flag is set, this event:
             *
             *     - shall NOT be generated during a multi-press sequence (since a long press is a separate cycle from
             *       any multi-press cycles);
             *
             *     - shall only be generated after the first InitialPress following a MultiPressComplete when a long
             *       press is detected after the idle time;
             *
             *     - shall NOT be generated after a MultiPressOngoing event without an intervening MultiPressComplete
             *       event.
             *
             * The above constraints imply that for a given activity detection cycle of a switch having MSM and/or MSL
             * feature flags set, the entire activity is either a single long press detection cycle of (InitialPress,
             * LongPress, LongRelease), or a single multi-press detection cycle (ending in MultiPressComplete), where
             * presses that would otherwise be reported as long presses are instead reported as a counted press in the
             * MultiPressComplete event, and as InitialPress/ShortRelease pairs otherwise (where applicable).
             *
             * The rationale for this constraint is the ambiguity of interpretation of events when mixing long presses
             * and multi-press events.
             *
             * @see {@link MatterSpecification.v142.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.v142.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.v142.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.v142.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: {
            /**
             * If the server has the Action Switch (AS) feature flag set, this event shall NOT be generated at all,
             * since setting the Action Switch feature flag forbids the Momentary Switch ShortRelease (MSR) feature flag
             * from being set. Otherwise, the following paragraphs describe the situations where this event is
             * generated.
             *
             * This event shall be generated, when the momentary switch has been released (after debouncing).
             *
             *   - If the server has the Momentary Switch LongPress (MSL) feature flag set, then 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 have the Momentary Switch LongPress (MSL) feature flag set, 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.v142.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.v142.Cluster} § 1.13.6.4.1
                 */
                previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
        };
    };
    /**
     * A SwitchCluster supports these elements if it supports feature MomentarySwitchMultiPress and it doesn't support
     * feature AS.
     */
    const MomentarySwitchMultiPressNotActionSwitchComponent: {
        readonly events: {
            /**
             * If the server has the Action Switch (AS) feature flag set, this event shall NOT be generated at all.
             * Otherwise, the following paragraphs describe the situations where this event is generated.
             *
             * 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 Section 1.13.8, “Sequence of events for MultiPress”.
             *
             * @see {@link MatterSpecification.v142.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.v142.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.v142.Cluster} § 1.13.6.6.2
                 */
                currentNumberOfPressesCounted: 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: 2;
        readonly features: {
            /**
             * This feature flag is for a switch that maintains its position after being pressed (or turned).
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.1
             */
            readonly latchingSwitch: BitFlag;
            /**
             * This feature flag 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.v142.Cluster} § 1.13.4.2
             */
            readonly momentarySwitch: BitFlag;
            /**
             * This feature flag is for a momentary switch that can distinguish and report release events.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.3
             */
            readonly momentarySwitchRelease: BitFlag;
            /**
             * This feature flag is for a momentary switch that can distinguish and report long presses from short
             * presses.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.4
             */
            readonly momentarySwitchLongPress: BitFlag;
            /**
             * This feature flag is for a momentary switch that can distinguish and report double press and potentially
             * multiple presses with more events, such as triple press, etc.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.5
             */
            readonly momentarySwitchMultiPress: BitFlag;
            /**
             * This feature flag indicates simplified handling of events for multi-press-capable switches. See Section
             * 1.13.8, “Sequence of events for MultiPress”.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.6
             */
            readonly actionSwitch: BitFlag;
        };
        readonly attributes: {
            /**
             * Indicates the maximum number of positions the switch has. Any kind of switch has a minimum of 2positions.
             * Also see Section 1.13.10, “Multi Position Details” for the case NumberOfPositions>2.
             *
             * @see {@link MatterSpecification.v142.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.v142.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 (MSM feature flag set).
                     *
                     * For example, a momentary switch supporting single press, double press and triple press, but not quad
                     * press and beyond, would return the value 3.
                     *
                     * When more than MultiPressMax presses are detected within a multi-press sequence:
                     *
                     *   - The server for cluster revision < 2 SHOULD generate a MultiPressComplete event with the
                     *     TotalNumberOfPressesCounted field set to the value of the MultiPressMax attribute, and avoid
                     *     generating any further InitialPress and MultiPressOngoing events until the switch has become fully
                     *     idle (i.e. no longer in the process of counting presses within the multipress).
                     *
                     *   - The server for cluster revision >= 2 shall generate a MultiPressComplete event with the
                     *     TotalNumberOfPressesCounted field set to zero (indicating an aborted sequence), and shall NOT
                     *     generate any further InitialPress and MultiPressOngoing events until the switch has become fully idle
                     *     (i.e. no longer in the process of counting presses within the multipress).
                     *
                     * This approach avoids unintentionally causing intermediate actions where there is a very long sequence of
                     * presses beyond MultiPressMax that may be taken in account specially by switches (e.g. to trigger special
                     * behavior such as factory reset for which generating events towards the client is not appropriate).
                     *
                     * @see {@link MatterSpecification.v142.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, after it has been detected that the sequence has ended. See Section 1.13.8,
                     * “Sequence of events for MultiPress”.
                     *
                     * 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 0 when there was an aborted multi-press sequence, where the number of presses goes beyond
                     *     MultiPressMax presses,
                     *
                     *   - a value of 1 when there was exactly 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).
                     *
                     *     > [!NOTE]
                     *
                     *     > The introduction of TotalNumberOfPressesCounted supporting the value 0 may impact clients of
                     *       switches using cluster revision 1 since such servers would not use this value of
                     *       TotalNumberOfPressesCounted to indicate an aborted sequence. Clients SHOULD always act using the
                     *       TotalNumberOfPressesCounted field taken into account since for values from 1 to MultiPressMax, the
                     *       user action that led to the event was different depending on the count.
                     *
                     * @see {@link MatterSpecification.v142.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.v142.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.v142.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.v142.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.v142.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. The time
                     * interval constituting a "long" time is manufacturer-determined, since it depends on the switch physics.
                     *
                     *   - When the AS feature flag is set, this event:
                     *
                     *     - shall NOT be generated during a multi-press sequence (since a long press is a separate cycle from
                     *       any multi-press cycles);
                     *
                     *     - shall only be generated after the first InitialPress following a MultiPressComplete when a long
                     *       press is detected after the idle time.
                     *
                     *   - Else, when the MSM feature flag is set, this event:
                     *
                     *     - shall NOT be generated during a multi-press sequence (since a long press is a separate cycle from
                     *       any multi-press cycles);
                     *
                     *     - shall only be generated after the first InitialPress following a MultiPressComplete when a long
                     *       press is detected after the idle time;
                     *
                     *     - shall NOT be generated after a MultiPressOngoing event without an intervening MultiPressComplete
                     *       event.
                     *
                     * The above constraints imply that for a given activity detection cycle of a switch having MSM and/or MSL
                     * feature flags set, the entire activity is either a single long press detection cycle of (InitialPress,
                     * LongPress, LongRelease), or a single multi-press detection cycle (ending in MultiPressComplete), where
                     * presses that would otherwise be reported as long presses are instead reported as a counted press in the
                     * MultiPressComplete event, and as InitialPress/ShortRelease pairs otherwise (where applicable).
                     *
                     * The rationale for this constraint is the ambiguity of interpretation of events when mixing long presses
                     * and multi-press events.
                     *
                     * @see {@link MatterSpecification.v142.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.v142.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.v142.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.v142.Cluster} § 1.13.6.5.1
                         */
                        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchRelease: true;
            };
            readonly component: {
                readonly events: {
                    /**
                     * If the server has the Action Switch (AS) feature flag set, this event shall NOT be generated at all,
                     * since setting the Action Switch feature flag forbids the Momentary Switch ShortRelease (MSR) feature flag
                     * from being set. Otherwise, the following paragraphs describe the situations where this event is
                     * generated.
                     *
                     * This event shall be generated, when the momentary switch has been released (after debouncing).
                     *
                     *   - If the server has the Momentary Switch LongPress (MSL) feature flag set, then 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 have the Momentary Switch LongPress (MSL) feature flag set, 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.v142.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.v142.Cluster} § 1.13.6.4.1
                         */
                        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchMultiPress: true;
                readonly actionSwitch: false;
            };
            readonly component: {
                readonly events: {
                    /**
                     * If the server has the Action Switch (AS) feature flag set, this event shall NOT be generated at all.
                     * Otherwise, the following paragraphs describe the situations where this event is generated.
                     *
                     * 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 Section 1.13.8, “Sequence of events for MultiPress”.
                     *
                     * @see {@link MatterSpecification.v142.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.v142.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.v142.Cluster} § 1.13.6.6.2
                         */
                        currentNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchRelease: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchRelease: true;
                readonly actionSwitch: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchLongPress: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchLongPress: true;
                readonly momentarySwitchRelease: false;
                readonly actionSwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly actionSwitch: true;
                readonly momentarySwitchMultiPress: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly actionSwitch: false;
                readonly momentarySwitchMultiPress: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly actionSwitch: false;
                readonly momentarySwitchMultiPress: true;
                readonly momentarySwitchRelease: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly actionSwitch: true;
                readonly momentarySwitch: 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: 2;
        readonly features: {
            /**
             * This feature flag is for a switch that maintains its position after being pressed (or turned).
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.1
             */
            readonly latchingSwitch: BitFlag;
            /**
             * This feature flag 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.v142.Cluster} § 1.13.4.2
             */
            readonly momentarySwitch: BitFlag;
            /**
             * This feature flag is for a momentary switch that can distinguish and report release events.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.3
             */
            readonly momentarySwitchRelease: BitFlag;
            /**
             * This feature flag is for a momentary switch that can distinguish and report long presses from short
             * presses.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.4
             */
            readonly momentarySwitchLongPress: BitFlag;
            /**
             * This feature flag is for a momentary switch that can distinguish and report double press and potentially
             * multiple presses with more events, such as triple press, etc.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.5
             */
            readonly momentarySwitchMultiPress: BitFlag;
            /**
             * This feature flag indicates simplified handling of events for multi-press-capable switches. See Section
             * 1.13.8, “Sequence of events for MultiPress”.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.6
             */
            readonly actionSwitch: BitFlag;
        };
        readonly attributes: {
            /**
             * Indicates the maximum number of positions the switch has. Any kind of switch has a minimum of 2positions.
             * Also see Section 1.13.10, “Multi Position Details” for the case NumberOfPositions>2.
             *
             * @see {@link MatterSpecification.v142.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.v142.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 (MSM feature flag set).
                     *
                     * For example, a momentary switch supporting single press, double press and triple press, but not quad
                     * press and beyond, would return the value 3.
                     *
                     * When more than MultiPressMax presses are detected within a multi-press sequence:
                     *
                     *   - The server for cluster revision < 2 SHOULD generate a MultiPressComplete event with the
                     *     TotalNumberOfPressesCounted field set to the value of the MultiPressMax attribute, and avoid
                     *     generating any further InitialPress and MultiPressOngoing events until the switch has become fully
                     *     idle (i.e. no longer in the process of counting presses within the multipress).
                     *
                     *   - The server for cluster revision >= 2 shall generate a MultiPressComplete event with the
                     *     TotalNumberOfPressesCounted field set to zero (indicating an aborted sequence), and shall NOT
                     *     generate any further InitialPress and MultiPressOngoing events until the switch has become fully idle
                     *     (i.e. no longer in the process of counting presses within the multipress).
                     *
                     * This approach avoids unintentionally causing intermediate actions where there is a very long sequence of
                     * presses beyond MultiPressMax that may be taken in account specially by switches (e.g. to trigger special
                     * behavior such as factory reset for which generating events towards the client is not appropriate).
                     *
                     * @see {@link MatterSpecification.v142.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, after it has been detected that the sequence has ended. See Section 1.13.8,
                     * “Sequence of events for MultiPress”.
                     *
                     * 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 0 when there was an aborted multi-press sequence, where the number of presses goes beyond
                     *     MultiPressMax presses,
                     *
                     *   - a value of 1 when there was exactly 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).
                     *
                     *     > [!NOTE]
                     *
                     *     > The introduction of TotalNumberOfPressesCounted supporting the value 0 may impact clients of
                     *       switches using cluster revision 1 since such servers would not use this value of
                     *       TotalNumberOfPressesCounted to indicate an aborted sequence. Clients SHOULD always act using the
                     *       TotalNumberOfPressesCounted field taken into account since for values from 1 to MultiPressMax, the
                     *       user action that led to the event was different depending on the count.
                     *
                     * @see {@link MatterSpecification.v142.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.v142.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.v142.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.v142.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.v142.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. The time
                     * interval constituting a "long" time is manufacturer-determined, since it depends on the switch physics.
                     *
                     *   - When the AS feature flag is set, this event:
                     *
                     *     - shall NOT be generated during a multi-press sequence (since a long press is a separate cycle from
                     *       any multi-press cycles);
                     *
                     *     - shall only be generated after the first InitialPress following a MultiPressComplete when a long
                     *       press is detected after the idle time.
                     *
                     *   - Else, when the MSM feature flag is set, this event:
                     *
                     *     - shall NOT be generated during a multi-press sequence (since a long press is a separate cycle from
                     *       any multi-press cycles);
                     *
                     *     - shall only be generated after the first InitialPress following a MultiPressComplete when a long
                     *       press is detected after the idle time;
                     *
                     *     - shall NOT be generated after a MultiPressOngoing event without an intervening MultiPressComplete
                     *       event.
                     *
                     * The above constraints imply that for a given activity detection cycle of a switch having MSM and/or MSL
                     * feature flags set, the entire activity is either a single long press detection cycle of (InitialPress,
                     * LongPress, LongRelease), or a single multi-press detection cycle (ending in MultiPressComplete), where
                     * presses that would otherwise be reported as long presses are instead reported as a counted press in the
                     * MultiPressComplete event, and as InitialPress/ShortRelease pairs otherwise (where applicable).
                     *
                     * The rationale for this constraint is the ambiguity of interpretation of events when mixing long presses
                     * and multi-press events.
                     *
                     * @see {@link MatterSpecification.v142.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.v142.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.v142.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.v142.Cluster} § 1.13.6.5.1
                         */
                        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchRelease: true;
            };
            readonly component: {
                readonly events: {
                    /**
                     * If the server has the Action Switch (AS) feature flag set, this event shall NOT be generated at all,
                     * since setting the Action Switch feature flag forbids the Momentary Switch ShortRelease (MSR) feature flag
                     * from being set. Otherwise, the following paragraphs describe the situations where this event is
                     * generated.
                     *
                     * This event shall be generated, when the momentary switch has been released (after debouncing).
                     *
                     *   - If the server has the Momentary Switch LongPress (MSL) feature flag set, then 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 have the Momentary Switch LongPress (MSL) feature flag set, 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.v142.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.v142.Cluster} § 1.13.6.4.1
                         */
                        previousPosition: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchMultiPress: true;
                readonly actionSwitch: false;
            };
            readonly component: {
                readonly events: {
                    /**
                     * If the server has the Action Switch (AS) feature flag set, this event shall NOT be generated at all.
                     * Otherwise, the following paragraphs describe the situations where this event is generated.
                     *
                     * 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 Section 1.13.8, “Sequence of events for MultiPress”.
                     *
                     * @see {@link MatterSpecification.v142.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.v142.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.v142.Cluster} § 1.13.6.6.2
                         */
                        currentNumberOfPressesCounted: import("../tlv/TlvObject.js").FieldType<number>;
                    }>, any>;
                };
            };
        }, {
            readonly flags: {
                readonly momentarySwitchRelease: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchRelease: true;
                readonly actionSwitch: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchLongPress: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly momentarySwitchLongPress: true;
                readonly momentarySwitchRelease: false;
                readonly actionSwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly actionSwitch: true;
                readonly momentarySwitchMultiPress: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly actionSwitch: false;
                readonly momentarySwitchMultiPress: true;
                readonly momentarySwitch: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly actionSwitch: false;
                readonly momentarySwitchMultiPress: true;
                readonly momentarySwitchRelease: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly actionSwitch: true;
                readonly momentarySwitch: 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.v142.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: 2;
        readonly features: {
            /**
             * This feature flag is for a switch that maintains its position after being pressed (or turned).
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.1
             */
            readonly latchingSwitch: BitFlag;
            /**
             * This feature flag 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.v142.Cluster} § 1.13.4.2
             */
            readonly momentarySwitch: BitFlag;
            /**
             * This feature flag is for a momentary switch that can distinguish and report release events.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.3
             */
            readonly momentarySwitchRelease: BitFlag;
            /**
             * This feature flag is for a momentary switch that can distinguish and report long presses from short
             * presses.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.4
             */
            readonly momentarySwitchLongPress: BitFlag;
            /**
             * This feature flag is for a momentary switch that can distinguish and report double press and potentially
             * multiple presses with more events, such as triple press, etc.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.5
             */
            readonly momentarySwitchMultiPress: BitFlag;
            /**
             * This feature flag indicates simplified handling of events for multi-press-capable switches. See Section
             * 1.13.8, “Sequence of events for MultiPress”.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 1.13.4.6
             */
            readonly actionSwitch: 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 2positions.
             * Also see Section 1.13.10, “Multi Position Details” for the case NumberOfPositions>2.
             *
             * @see {@link MatterSpecification.v142.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.v142.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.v142.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.v142.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.v142.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.v142.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.v142.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.v142.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.v142.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;
                    actionSwitch: 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