/**
 * @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 MediaInput {
    /**
     * These are optional features supported by MediaInputCluster.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.9.4
     */
    enum Feature {
        /**
         * NameUpdates (NU)
         *
         * Supports updates to the input names
         */
        NameUpdates = "NameUpdates"
    }
    /**
     * Input to the MediaInput renameInput command
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.4
     */
    const TlvRenameInputRequest: import("../tlv/TlvObject.js").ObjectSchema<{
        index: import("../tlv/TlvObject.js").FieldType<number>;
        name: import("../tlv/TlvObject.js").FieldType<string>;
    }>;
    /**
     * Input to the MediaInput renameInput command
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.4
     */
    interface RenameInputRequest extends TypeFromSchema<typeof TlvRenameInputRequest> {
    }
    /**
     * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.1
     */
    enum InputType {
        /**
         * Indicates content not coming from a physical input.
         */
        Internal = 0,
        Aux = 1,
        Coax = 2,
        Composite = 3,
        Hdmi = 4,
        Input = 5,
        Line = 6,
        Optical = 7,
        Video = 8,
        Scart = 9,
        Usb = 10,
        Other = 11
    }
    /**
     * This contains information about an input.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2
     */
    const TlvInputInfo: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall indicate the unique index into the list of Inputs.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.1
         */
        index: import("../tlv/TlvObject.js").FieldType<number>;
        /**
         * ### This field shall indicate the type of input
         *
         * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.2
         */
        inputType: import("../tlv/TlvObject.js").FieldType<InputType>;
        /**
         * This field shall indicate the input name, such as “HDMI 1”. This field may be blank, but SHOULD be provided
         * when known.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.3
         */
        name: import("../tlv/TlvObject.js").FieldType<string>;
        /**
         * This field shall indicate the user editable input description, such as “Living room Playstation”. This field
         * may be blank, but SHOULD be provided when known.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.4
         */
        description: import("../tlv/TlvObject.js").FieldType<string>;
    }>;
    /**
     * This contains information about an input.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2
     */
    interface InputInfo extends TypeFromSchema<typeof TlvInputInfo> {
    }
    /**
     * Input to the MediaInput selectInput command
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.1
     */
    const TlvSelectInputRequest: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall indicate the index field of the InputInfoStruct from the InputList attribute in which to
         * change to.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.1.1
         */
        index: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Input to the MediaInput selectInput command
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.1
     */
    interface SelectInputRequest extends TypeFromSchema<typeof TlvSelectInputRequest> {
    }
    /**
     * A MediaInputCluster supports these elements if it supports feature NameUpdates.
     */
    const NameUpdatesComponent: {
        readonly commands: {
            /**
             * Upon receipt, this command shall rename the input at a specific index in the Input List. Updates to the
             * input name shall appear in the device’s settings menus.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.4
             */
            readonly renameInput: 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 MediaInput clusters.
     */
    const Base: {
        readonly id: 1287;
        readonly name: "MediaInput";
        readonly revision: 1;
        readonly features: {
            /**
             * Supports updates to the input names
             */
            readonly nameUpdates: BitFlag;
        };
        readonly attributes: {
            /**
             * This attribute shall provide a list of the media inputs supported by the device.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.6.1
             */
            readonly inputList: Attribute<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the unique index into the list of Inputs.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * ### This field shall indicate the type of input
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.2
                 */
                inputType: import("../tlv/TlvObject.js").FieldType<InputType>;
                /**
                 * This field shall indicate the input name, such as “HDMI 1”. This field may be blank, but SHOULD be provided
                 * when known.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.3
                 */
                name: import("../tlv/TlvObject.js").FieldType<string>;
                /**
                 * This field shall indicate the user editable input description, such as “Living room Playstation”. This field
                 * may be blank, but SHOULD be provided when known.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.4
                 */
                description: import("../tlv/TlvObject.js").FieldType<string>;
            }>[], any>;
            /**
             * This attribute shall contain the value of the index field of the currently selected InputInfoStruct.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.6.2
             */
            readonly currentInput: Attribute<number, any>;
        };
        readonly commands: {
            /**
             * Upon receipt, this command shall change the media input on the device to the input at a specific index in
             * the Input List.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.1
             */
            readonly selectInput: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the index field of the InputInfoStruct from the InputList attribute in which to
                 * change to.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.1.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
            }>, void, any>;
            /**
             * Upon receipt, this command shall display the active status of the input list on screen.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.2
             */
            readonly showInputStatus: Command<void, void, any>;
            /**
             * Upon receipt, this command shall hide the input list from the screen.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.3
             */
            readonly hideInputStatus: Command<void, void, any>;
        };
        /**
         * This metadata controls which MediaInputCluster elements matter.js activates for specific feature
         * combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly nameUpdates: true;
            };
            readonly component: {
                readonly commands: {
                    /**
                     * Upon receipt, this command shall rename the input at a specific index in the Input List. Updates to the
                     * input name shall appear in the device’s settings menus.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.4
                     */
                    readonly renameInput: 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: 1287;
        readonly name: "MediaInput";
        readonly revision: 1;
        readonly features: {
            /**
             * Supports updates to the input names
             */
            readonly nameUpdates: BitFlag;
        };
        readonly attributes: {
            /**
             * This attribute shall provide a list of the media inputs supported by the device.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.6.1
             */
            readonly inputList: Attribute<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the unique index into the list of Inputs.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * ### This field shall indicate the type of input
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.2
                 */
                inputType: import("../tlv/TlvObject.js").FieldType<InputType>;
                /**
                 * This field shall indicate the input name, such as “HDMI 1”. This field may be blank, but SHOULD be provided
                 * when known.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.3
                 */
                name: import("../tlv/TlvObject.js").FieldType<string>;
                /**
                 * This field shall indicate the user editable input description, such as “Living room Playstation”. This field
                 * may be blank, but SHOULD be provided when known.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.4
                 */
                description: import("../tlv/TlvObject.js").FieldType<string>;
            }>[], any>;
            /**
             * This attribute shall contain the value of the index field of the currently selected InputInfoStruct.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.6.2
             */
            readonly currentInput: Attribute<number, any>;
        };
        readonly commands: {
            /**
             * Upon receipt, this command shall change the media input on the device to the input at a specific index in
             * the Input List.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.1
             */
            readonly selectInput: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the index field of the InputInfoStruct from the InputList attribute in which to
                 * change to.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.1.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
            }>, void, any>;
            /**
             * Upon receipt, this command shall display the active status of the input list on screen.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.2
             */
            readonly showInputStatus: Command<void, void, any>;
            /**
             * Upon receipt, this command shall hide the input list from the screen.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.3
             */
            readonly hideInputStatus: Command<void, void, any>;
        };
        /**
         * This metadata controls which MediaInputCluster elements matter.js activates for specific feature
         * combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly nameUpdates: true;
            };
            readonly component: {
                readonly commands: {
                    /**
                     * Upon receipt, this command shall rename the input at a specific index in the Input List. Updates to the
                     * input name shall appear in the device’s settings menus.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.4
                     */
                    readonly renameInput: 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 Input Selector on a media device such as a Video Player.
     *
     * This cluster would be implemented on TV and other media streaming devices, as well as devices that provide input
     * to or output from such devices.
     *
     * This cluster provides the list of available inputs and provides commands for selecting and renaming them.
     *
     * The cluster server for Media Input is implemented by a device that has selectable input, such as a Video Player
     * device.
     *
     * MediaInputCluster supports optional features that you can enable with the MediaInputCluster.with() factory
     * method.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 6.9
     */
    interface Cluster extends Identity<typeof ClusterInstance> {
    }
    const Cluster: Cluster;
    /**
     * @see {@link Complete}
     */
    const CompleteInstance: MutableCluster<{
        readonly id: import("#general").Branded<1287, "ClusterId">;
        readonly name: "MediaInput";
        readonly revision: 1;
        readonly features: {
            /**
             * Supports updates to the input names
             */
            readonly nameUpdates: BitFlag;
        };
        readonly attributes: import("#general").Merge<{
            /**
             * This attribute shall provide a list of the media inputs supported by the device.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.6.1
             */
            readonly inputList: Attribute<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the unique index into the list of Inputs.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * ### This field shall indicate the type of input
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.2
                 */
                inputType: import("../tlv/TlvObject.js").FieldType<InputType>;
                /**
                 * This field shall indicate the input name, such as “HDMI 1”. This field may be blank, but SHOULD be provided
                 * when known.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.3
                 */
                name: import("../tlv/TlvObject.js").FieldType<string>;
                /**
                 * This field shall indicate the user editable input description, such as “Living room Playstation”. This field
                 * may be blank, but SHOULD be provided when known.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.5.2.4
                 */
                description: import("../tlv/TlvObject.js").FieldType<string>;
            }>[], any>;
            /**
             * This attribute shall contain the value of the index field of the currently selected InputInfoStruct.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.6.2
             */
            readonly currentInput: Attribute<number, any>;
        }, import("../cluster/Cluster.js").GlobalAttributes<{
            /**
             * Supports updates to the input names
             */
            readonly nameUpdates: BitFlag;
        }>>;
        readonly commands: {
            readonly renameInput: 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 command shall change the media input on the device to the input at a specific index in
             * the Input List.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.1
             */
            readonly selectInput: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the index field of the InputInfoStruct from the InputList attribute in which to
                 * change to.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.1.1
                 */
                index: import("../tlv/TlvObject.js").FieldType<number>;
            }>, void, any>;
            /**
             * Upon receipt, this command shall display the active status of the input list on screen.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.2
             */
            readonly showInputStatus: Command<void, void, any>;
            /**
             * Upon receipt, this command shall hide the input list from the screen.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 6.9.7.3
             */
            readonly hideInputStatus: Command<void, void, any>;
        };
    }, []>;
    /**
     * This cluster supports all MediaInput 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 MediaInputCluster = MediaInput.Cluster;
export declare const MediaInputCluster: MediaInput.Cluster;
//# sourceMappingURL=media-input.d.ts.map