/**
 * @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 { Command, Attribute } from "../cluster/Cluster.js";
import { TypeFromSchema } from "../tlv/TlvSchema.js";
import { BitFlag } from "../schema/BitmapSchema.js";
import { Identity } from "#general";
export declare namespace AudioOutput {
    /**
     * These are optional features supported by AudioOutputCluster.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.5.4
     */
    enum Feature {
        /**
         * NameUpdates (NU)
         *
         * Supports updates to output names
         */
        NameUpdates = "NameUpdates"
    }
    /**
     * Input to the AudioOutput renameOutput command
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.2
     */
    const TlvRenameOutputRequest: import("../tlv/TlvObject.js").ObjectSchema<{
        index: import("../tlv/TlvObject.js").FieldType<number>;
        name: import("../tlv/TlvObject.js").FieldType<string>;
    }>;
    /**
     * Input to the AudioOutput renameOutput command
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.2
     */
    interface RenameOutputRequest extends TypeFromSchema<typeof TlvRenameOutputRequest> {
    }
    /**
     * The type of output, expressed as an enum, with the following values:
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.1
     */
    enum OutputType {
        /**
         * HDMI
         */
        Hdmi = 0,
        Bt = 1,
        Optical = 2,
        Headphone = 3,
        Internal = 4,
        Other = 5
    }
    /**
     * This contains information about an output.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2
     */
    const TlvOutputInfo: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall indicate the unique index into the list of outputs.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.1
         */
        index: import("../tlv/TlvObject.js").FieldType<number>;
        /**
         * This field shall indicate the type of output.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.2
         */
        outputType: import("../tlv/TlvObject.js").FieldType<OutputType>;
        /**
         * The device defined and user editable output name, such as “Soundbar”, “Speakers”. This field may be blank,
         * but SHOULD be provided when known.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.3
         */
        name: import("../tlv/TlvObject.js").FieldType<string>;
    }>;
    /**
     * This contains information about an output.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2
     */
    interface OutputInfo extends TypeFromSchema<typeof TlvOutputInfo> {
    }
    /**
     * Input to the AudioOutput selectOutput command
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.1
     */
    const TlvSelectOutputRequest: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This shall indicate the index field of the OutputInfoStruct from the OutputList attribute in which to change
         * to.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.1.1
         */
        index: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Input to the AudioOutput selectOutput command
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.1
     */
    interface SelectOutputRequest extends TypeFromSchema<typeof TlvSelectOutputRequest> {
    }
    /**
     * A AudioOutputCluster supports these elements if it supports feature NameUpdates.
     */
    const NameUpdatesComponent: {
        readonly commands: {
            /**
             * Upon receipt, this shall rename the output at a specific index in the Output List.
             *
             * Updates to the output name shall appear in the device’s settings menus. Name updates may automatically be
             * sent to the actual device to which the output connects.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.2
             */
            readonly renameOutput: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                index: import("../tlv/TlvObject.js").FieldType<number>;
                name: import("../tlv/TlvObject.js").FieldType<string>;
            }>, void, any>;
        };
    };
    /**
     * These elements and properties are present in all AudioOutput clusters.
     */
    const Base: {
        readonly id: 1291;
        readonly name: "AudioOutput";
        readonly revision: 1;
        readonly features: {
            /**
             * Supports updates to output names
             */
            readonly nameUpdates: BitFlag;
        };
        readonly attributes: {
            /**
             * This attribute provides the list of outputs supported by the device.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.5.6.1
             */
            readonly outputList: Attribute<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the unique index into the list of outputs.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall indicate the type of output.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.2
                 */
                outputType: import("../tlv/TlvObject.js").FieldType<OutputType>;
                /**
                 * The device defined and user editable output name, such as “Soundbar”, “Speakers”. This field may be blank,
                 * but SHOULD be provided when known.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.3
                 */
                name: import("../tlv/TlvObject.js").FieldType<string>;
            }>[], any>;
            /**
             * This attribute contains the value of the index field of the currently selected OutputInfoStruct.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.5.6.2
             */
            readonly currentOutput: Attribute<number, any>;
        };
        readonly commands: {
            /**
             * Upon receipt, this shall change the output on the device to the output at a specific index in the Output
             * List.
             *
             * Note that when the current output is set to an output of type HDMI, adjustments to volume via a Speaker
             * endpoint on the same node may cause HDMI volume up/down commands to be sent to the given HDMI output.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.1
             */
            readonly selectOutput: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This shall indicate the index field of the OutputInfoStruct from the OutputList attribute in which to change
                 * to.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.1.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
            }>, void, any>;
        };
        /**
         * This metadata controls which AudioOutputCluster elements matter.js activates for specific feature
         * combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly nameUpdates: true;
            };
            readonly component: {
                readonly commands: {
                    /**
                     * Upon receipt, this shall rename the output at a specific index in the Output List.
                     *
                     * Updates to the output name shall appear in the device’s settings menus. Name updates may automatically be
                     * sent to the actual device to which the output connects.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.2
                     */
                    readonly renameOutput: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                        index: import("../tlv/TlvObject.js").FieldType<number>;
                        name: import("../tlv/TlvObject.js").FieldType<string>;
                    }>, void, any>;
                };
            };
        }];
    };
    /**
     * @see {@link Cluster}
     */
    const ClusterInstance: MutableCluster<{
        readonly id: 1291;
        readonly name: "AudioOutput";
        readonly revision: 1;
        readonly features: {
            /**
             * Supports updates to output names
             */
            readonly nameUpdates: BitFlag;
        };
        readonly attributes: {
            /**
             * This attribute provides the list of outputs supported by the device.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.5.6.1
             */
            readonly outputList: Attribute<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the unique index into the list of outputs.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall indicate the type of output.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.2
                 */
                outputType: import("../tlv/TlvObject.js").FieldType<OutputType>;
                /**
                 * The device defined and user editable output name, such as “Soundbar”, “Speakers”. This field may be blank,
                 * but SHOULD be provided when known.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.3
                 */
                name: import("../tlv/TlvObject.js").FieldType<string>;
            }>[], any>;
            /**
             * This attribute contains the value of the index field of the currently selected OutputInfoStruct.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.5.6.2
             */
            readonly currentOutput: Attribute<number, any>;
        };
        readonly commands: {
            /**
             * Upon receipt, this shall change the output on the device to the output at a specific index in the Output
             * List.
             *
             * Note that when the current output is set to an output of type HDMI, adjustments to volume via a Speaker
             * endpoint on the same node may cause HDMI volume up/down commands to be sent to the given HDMI output.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.1
             */
            readonly selectOutput: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This shall indicate the index field of the OutputInfoStruct from the OutputList attribute in which to change
                 * to.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.1.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
            }>, void, any>;
        };
        /**
         * This metadata controls which AudioOutputCluster elements matter.js activates for specific feature
         * combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly nameUpdates: true;
            };
            readonly component: {
                readonly commands: {
                    /**
                     * Upon receipt, this shall rename the output at a specific index in the Output List.
                     *
                     * Updates to the output name shall appear in the device’s settings menus. Name updates may automatically be
                     * sent to the actual device to which the output connects.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.2
                     */
                    readonly renameOutput: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                        index: import("../tlv/TlvObject.js").FieldType<number>;
                        name: import("../tlv/TlvObject.js").FieldType<string>;
                    }>, void, any>;
                };
            };
        }];
    }, []>;
    /**
     * This cluster provides an interface for controlling the Output on a Video Player device such as a TV.
     *
     * This cluster would be supported on a device with audio outputs like a Video Player device (Smart TV, TV Setup Top
     * Box, Smart Speaker, etc).
     *
     * This cluster provides the list of available outputs and provides commands for selecting and renaming them.
     *
     * The cluster server for Audio Output is implemented by a device that has configurable audio output.
     *
     * AudioOutputCluster supports optional features that you can enable with the AudioOutputCluster.with() factory
     * method.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.5
     */
    interface Cluster extends Identity<typeof ClusterInstance> {
    }
    const Cluster: Cluster;
    /**
     * @see {@link Complete}
     */
    const CompleteInstance: MutableCluster<{
        readonly id: import("#general").Branded<1291, "ClusterId">;
        readonly name: "AudioOutput";
        readonly revision: 1;
        readonly features: {
            /**
             * Supports updates to output names
             */
            readonly nameUpdates: BitFlag;
        };
        readonly attributes: import("#general").Merge<{
            /**
             * This attribute provides the list of outputs supported by the device.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.5.6.1
             */
            readonly outputList: Attribute<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the unique index into the list of outputs.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall indicate the type of output.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.2
                 */
                outputType: import("../tlv/TlvObject.js").FieldType<OutputType>;
                /**
                 * The device defined and user editable output name, such as “Soundbar”, “Speakers”. This field may be blank,
                 * but SHOULD be provided when known.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.5.2.3
                 */
                name: import("../tlv/TlvObject.js").FieldType<string>;
            }>[], any>;
            /**
             * This attribute contains the value of the index field of the currently selected OutputInfoStruct.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.5.6.2
             */
            readonly currentOutput: Attribute<number, any>;
        }, import("../cluster/Cluster.js").GlobalAttributes<{
            /**
             * Supports updates to output names
             */
            readonly nameUpdates: BitFlag;
        }>>;
        readonly commands: {
            readonly renameOutput: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                index: import("../tlv/TlvObject.js").FieldType<number>;
                name: import("../tlv/TlvObject.js").FieldType<string>;
            }>, void, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    nameUpdates: boolean;
                }];
            };
            /**
             * Upon receipt, this shall change the output on the device to the output at a specific index in the Output
             * List.
             *
             * Note that when the current output is set to an output of type HDMI, adjustments to volume via a Speaker
             * endpoint on the same node may cause HDMI volume up/down commands to be sent to the given HDMI output.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.1
             */
            readonly selectOutput: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This shall indicate the index field of the OutputInfoStruct from the OutputList attribute in which to change
                 * to.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.5.7.1.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
            }>, void, any>;
        };
    }, []>;
    /**
     * This cluster supports all AudioOutput 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 AudioOutputCluster = AudioOutput.Cluster;
export declare const AudioOutputCluster: AudioOutput.Cluster;
//# sourceMappingURL=audio-output.d.ts.map