"use strict";
var import_Resource = require("#models/Resource.js");
/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import_Resource.Resource.add(
  {
    tag: "cluster",
    name: "ClosureDimension",
    pics: "CLDIM",
    xref: "cluster\xA75.5",
    details: 'This cluster provides an interface for controlling a single degree of freedom (also referred to as a "dimension" or an "axis" below) of a composed closure. This could be a degree of freedom in a 6-axis framework for the overall closure or a panel in the closure, or some other degree of freedom.\nAn instance of this cluster may represent position along a single axis, as specified by the FeatureMap, which can be one of:\n  - Translation : panel translates along one axis\n  - Rotation : panel rotates around an axis of rotation\n  - Modulation : panel modifies its aspect to modulate a flow\nThis cluster may also be used to latch or anchor a panel in a position, if the panel supports that.',
    children: [
      {
        tag: "attribute",
        name: "FeatureMap",
        xref: "cluster\xA75.5.5",
        children: [
          {
            tag: "field",
            name: "PS",
            xref: "cluster\xA75.5.5.1",
            details: "This feature shall indicate support for position percentage over the range of 0.00% to 100.00%, with a resolution of 0.01%.\n> [!NOTE]\n> NOTE: In most of the products 0.00% = fully opened and 100.00% = fully closed but this is not always the case. For example, if the Modulation feature is supported and the ModulationType is SlatsOrientation or StripesAlignment, the panel can be fully closed at 0.00% and 100.00%, and be fully opened at 50.00%."
          },
          {
            tag: "field",
            name: "LT",
            xref: "cluster\xA75.5.5.2",
            details: "This feature shall indicate that the closure can be latched and unlatched. An axis with the MotionLatching feature has capabilities that will prevent actuators from moving along parts of that axis if the dimension is latched."
          },
          {
            tag: "field",
            name: "UT",
            xref: "cluster\xA75.5.5.3",
            details: "This feature shall indicate additional information about the closure dimension's possible range of movement."
          },
          {
            tag: "field",
            name: "LM",
            xref: "cluster\xA75.5.5.4",
            details: "This feature shall indicate that the closure dimension supports degradation of its functioning. Reachable Position range may be limited compared to full scope of a nominal behavior."
          },
          {
            tag: "field",
            name: "SP",
            xref: "cluster\xA75.5.5.5",
            details: 'This feature shall indicate that the closure dimension can be driven at different speed levels: Low, Medium, and High. Please refer to Section 5.4.5.4, "Speed Feature" for more details.\n> [!NOTE]\n> NOTE: The server might not support three different speed values. The manufacturer shall select speed values linked to Low, Medium and High such that Low $<=$ Medium $<=$ High.'
          },
          {
            tag: "field",
            name: "TR",
            xref: "cluster\xA75.5.5.6",
            details: "This feature shall indicate that the panel can move along a single axis. The possible directions include downward, upward, leftward, rightward, forward, and backward. The Translation feature is used to control the position of the panel along the specified axis."
          },
          {
            tag: "field",
            name: "RO",
            xref: "cluster\xA75.5.5.7",
            details: "This feature shall indicate that the panel can rotate around a single axis. The possible axes include left, right, top, bottom, centered vertical, and centered horizontal. The Rotation feature is used to control the orientation of the panel around the specified axis."
          },
          {
            tag: "field",
            name: "MD",
            xref: "cluster\xA75.5.5.8",
            details: "This feature shall indicate that the panel can modify its aspect to control a particular flow, such as light, air, or privacy. The possible modulation types include slats orientation, slats openwork, stripes alignment, opacity, and ventilation. The Modulation feature is used to adjust the panel's properties to achieve the desired effect."
          }
        ]
      },
      {
        tag: "attribute",
        name: "CurrentState",
        xref: "cluster\xA75.5.7.1",
        details: 'Indicates the current Position, Latching and/or Speed, based on the feature flags set.\nA value of null shall indicate that:\n  - The position and latching state are both not known yet because the closure is not calibrated, or\n  - The product has lost its position and latching state after manual motion during a shutdown.\nChanges to this attribute shall only be marked as reportable in the following cases:\n  - When the attribute changes from null to any other value and vice versa, or\n  - When the Position changes from null to any other value and vice versa, or\n  - At most once every 5 seconds when the Position changes from one non-null value to another non-null value, or\n  - When TargetState.Position is reached, or\n  - When CurrentState.Speed changes, or\n  - When CurrentState.Latch changes.\nThe value of the different fields within the structure of this attribute depends on:\n  - The last SetTarget or Step commands.\n  - The impact of a MoveTo command received on the Closure Control Cluster instance associated with this cluster, if such a Closure Control instance exists, as described in Section 5.5.4, "Association Between Closure Control and Closure Dimension Clusters".'
      },
      {
        tag: "attribute",
        name: "TargetState",
        xref: "cluster\xA75.5.7.2",
        details: 'Indicates the target Position, Latching and/or Speed, based on the feature flags set.\nA value of null shall indicate that the TargetState fields are unknown (typically after a reboot, no target has been yet requested).\nEach field shall be present only when its corresponding feature is supported. If the feature is not supported the field shall NOT be present.\nThe value of TargetState.Position shall be set to a value that is an integer multiple of the Resolution attribute.\nThe value of the different fields within the structure of this attribute depends on:\n  - The last SetTarget or Step commands.\n  - The impact of a MoveTo command received on the Closure Control Cluster instance associated with this cluster, if such a Closure Control instance exists, as described in Section 5.5.4, "Association Between Closure Control and Closure Dimension Clusters".'
      },
      {
        tag: "attribute",
        name: "Resolution",
        xref: "cluster\xA75.5.7.3",
        details: "Indicates the minimal acceptable change to the Position field of the TargetState and CurrentState attributes.\nResolution should not be confused with an accuracy, such as Current = Target +/- Accuracy. This cluster does not provide accuracy.\nResolution gives a collection of valid Current position points over a linear ruler.\n> [!NOTE]\n> NOTE: A resolution of 100% means that the associated dimension cannot be placed in an intermediate position - its position is binary."
      },
      {
        tag: "attribute",
        name: "StepValue",
        xref: "cluster\xA75.5.7.4",
        details: "Indicates the size of a single step, expressed in percent100ths. When the Step command is used, each step changes the position by this amount. The value of this attribute shall be an integer multiple of the Resolution attribute.\n> [!NOTE]\n> NOTE: The StepValue should be large enough to cause a visible change in the closure's position when a Step command is invoked."
      },
      {
        tag: "attribute",
        name: "Unit",
        xref: "cluster\xA75.5.7.5",
        details: "Indicates the unit related to the Position."
      },
      {
        tag: "attribute",
        name: "UnitRange",
        xref: "cluster\xA75.5.7.6",
        details: 'Indicates the minimum and the maximum values expressed by Position following the unit indicated by "Unit".\nThe value of this attribute may be null if the product has not been set up.'
      },
      {
        tag: "attribute",
        name: "LimitRange",
        xref: "cluster\xA75.5.7.7",
        details: "Indicates the range of possible values for the Position field in the CurrentState attribute.\nThis range may evolve dynamically.\nLimitRange.Min and LimitRange.Max shall be equal to an integer multiple of the Resolution attribute."
      },
      {
        tag: "attribute",
        name: "TranslationDirection",
        xref: "cluster\xA75.5.7.8",
        details: "Indicates the direction of the translation.\nA properly configured closure dimension SHOULD reflect as best as possible the translation as seen by the user. This attribute is not supposed to change once the installation is finalized."
      },
      {
        tag: "attribute",
        name: "RotationAxis",
        xref: "cluster\xA75.5.7.9",
        details: "Indicates the axis of the rotation.\nA properly configured closure dimension SHOULD reflect as best as possible the rotation axis as perceived by the user. This attribute is not supposed to change once the installation is finalized."
      },
      {
        tag: "attribute",
        name: "Overflow",
        xref: "cluster\xA75.5.7.10",
        details: "Indicates the overflow related to Rotation(RO).\nA closure that rotates following an axis (with Rotation(RO) feature declared in FeatureMap), could overflow Inside and/or Outside. If the axis is centered, one part goes Outside and the other part goes Inside. In this case, this attribute shall use Top/Bottom/Left/Right Inside or Top/Bottom/Left/Right Outside enumerated value."
      },
      {
        tag: "attribute",
        name: "ModulationType",
        xref: "cluster\xA75.5.7.11",
        details: "Indicates the modulation type related to Modulation(MD).\nThe server SHOULD reflect, as best as possible, the modulation type as perceived by the user. This attribute is not supposed to change once the installation is finalized."
      },
      {
        tag: "attribute",
        name: "LatchControlModes",
        xref: "cluster\xA75.5.7.12",
        details: "This attribute shall specify whether the latch mechanism can be latched or unlatched remotely."
      },
      {
        tag: "command",
        name: "SetTarget",
        xref: "cluster\xA75.5.8.1",
        details: "This command is used to move a dimension of the closure to a target position.\nThe rationale behind defining the conformance as being purely optional in the table above is to ensure that commands containing one or more fields related to unsupported features are still accepted, rather than being rejected outright. For example, if a simple client, which is not able to determine the capabilities of the server, invokes a command that includes both position and speed, a server that does not support the speed feature would simply ignore the speed field while still adjusting its position as requested.",
        children: [
          {
            tag: "field",
            name: "Position",
            xref: "cluster\xA75.5.8.1.1",
            details: "This field shall indicate the position where the closure is moving to.\nIf the field is present but its value is not within constraints, then:\n  - If the Positioning (PS) feature is not supported, the value of this field shall be ignored.\n  - If the Positioning (PS) feature is supported, a status code of CONSTRAINT_ERROR shall be returned.\nIf the Positioning (PS) feature is supported and the Position field is not present, the closure shall use the value of the Position field in the TargetState attribute as the fallback. If the Position field in the TargetState attribute is NULL, the position is unknown and the fallback is not applicable, in this case the field shall be ignored and the closure shall NOT change its position.\nWhen the closure supports the Positioning(PS) feature:\nIf a new position value is requested, the closure shall set the Position field of the TargetState attribute to the nearest valid position (an integer multiple of the Resolution attribute), whether by rounding the requested value or using it directly if already valid, and then initiate the motion procedure."
          },
          {
            tag: "field",
            name: "Latch",
            xref: "cluster\xA75.5.8.1.2",
            details: 'This field shall indicate the desired latching state of the closure, as defined in the OverallCurrentStateStruct Latch Field.\nIf the field is present but its value is not within constraints, then:\n  - If the MotionLatching (LT) feature is not supported, the value of this field shall be ignored.\n  - If the MotionLatching (LT) feature is supported, a status code of CONSTRAINT_ERROR shall be returned.\nIf the MotionLatching (LT) feature is supported and the Latch field is not present, the closure shall use the value of the Latch field in the TargetState attribute as the fallback. If the Latch field in the TargetState attribute is NULL, the latch state is unknown and the fallback is not applicable, in this case, the field shall be ignored and the closure shall NOT change its latch state.\nIf the server supports the MotionLatching (LT) feature, it shall either fulfill the latch request and update TargetState.Latch, or - if the "LatchControlModes" attribute specifies that manual intervention is required to latch - respond with INVALID_IN_STATE and remain in its current state.'
          },
          {
            tag: "field",
            name: "Speed",
            xref: "cluster\xA75.5.8.1.3",
            details: "This field shall indicate a desired overall speed of motion, as defined in the ThreeLevelAutoEnum.\nIf the field is present but its value is not within constraints, then:\n  - If the Speed(SP) feature is not supported, the value of this field shall be ignored.\n  - If the Speed(SP) feature is supported, a status code of CONSTRAINT_ERROR shall be returned.\nIf the Speed (SP) feature is supported, the TargetState.Speed attribute shall be updated with the value of the Speed field.\nA closure dimension SHOULD attempt to follow the indicated Speed value as closely as possible (meant to override its default speed).\nIf a SetTarget command is sent with only the Speed field:\n  - It SHOULD adjust the speed of the ongoing motion of the closure (i.e., allow speed change on the fly).\n    > [!NOTE]\n    > NOTE: The internal default speed shall not be affected by this command field. The priorities and cross capabilities to achieve, skip or ignore Position + Latch + Speed combinations are product/manufacturer specific. If the Limitation feature is supported, the closure will automatically offset the TargetState.Position value to fit within LimitRange.Min and LimitRange.Max."
          }
        ]
      },
      {
        tag: "command",
        name: "Step",
        xref: "cluster\xA75.5.8.2",
        details: "This command is used to move a dimension of the closure to a target position by a number of steps.",
        children: [
          {
            tag: "field",
            name: "Direction",
            xref: "cluster\xA75.5.8.2.1",
            details: "This field shall indicate whether the Position field of the TargetState attribute must be:\n  - Increased toward 100.00%.\n  - Decreased toward 0.00%."
          },
          {
            tag: "field",
            name: "NumberOfSteps",
            xref: "cluster\xA75.5.8.2.2",
            details: 'This field shall indicate the number of steps by which the position should be changed. The size of one step, expressed in percent100ths, is determined by the "StepValue" attribute.'
          },
          {
            tag: "field",
            name: "Speed",
            xref: "cluster\xA75.5.8.2.3",
            details: "This field shall indicate the desired speed of motion."
          }
        ]
      },
      {
        tag: "datatype",
        name: "TranslationDirectionEnum",
        xref: "cluster\xA75.5.6.1",
        details: "Legend: !legendOpen Open !legendClosed Closed",
        children: [
          { tag: "field", name: "Downward", description: "Downward translation" },
          { tag: "field", name: "Upward", description: "Upward translation" },
          { tag: "field", name: "VerticalMask", description: "Vertical mask translation" },
          { tag: "field", name: "VerticalSymmetry", description: "Vertical symmetry translation" },
          { tag: "field", name: "Leftward", description: "Leftward translation" },
          { tag: "field", name: "Rightward", description: "Rightward translation" },
          { tag: "field", name: "HorizontalMask", description: "Horizontal mask translation" },
          { tag: "field", name: "HorizontalSymmetry", description: "Horizontal symmetry translation" },
          { tag: "field", name: "Forward", description: "Forward translation" },
          { tag: "field", name: "Backward", description: "Backward translation" },
          { tag: "field", name: "DepthMask", description: "Depth mask translation" },
          { tag: "field", name: "DepthSymmetry", description: "Depth symmetry translation" }
        ]
      },
      {
        tag: "datatype",
        name: "RotationAxisEnum",
        xref: "cluster\xA75.5.6.2",
        details: "Legend: !legendOpen Open !legendClosed Closed",
        children: [
          {
            tag: "field",
            name: "Left",
            description: "The panel rotates around a vertical axis located on the left side of the panel"
          },
          {
            tag: "field",
            name: "CenteredVertical",
            description: "The panel rotates around a vertical axis located in the center of the panel"
          },
          {
            tag: "field",
            name: "LeftAndRight",
            description: "The panels rotates around vertical axes located on the left and right sides of the panel"
          },
          {
            tag: "field",
            name: "Right",
            description: "The panel rotates around a vertical axis located on the right side of the panel"
          },
          {
            tag: "field",
            name: "Top",
            description: "The panel rotates around a horizontal axis located on the top of the panel"
          },
          {
            tag: "field",
            name: "CenteredHorizontal",
            description: "The panel rotates around a horizontal axis located in the center of the panel"
          },
          {
            tag: "field",
            name: "TopAndBottom",
            description: "The panels rotates around horizontal axes located on the top and bottom of the panel"
          },
          {
            tag: "field",
            name: "Bottom",
            description: "The panel rotates around a horizontal axis located on the bottom of the panel"
          },
          {
            tag: "field",
            name: "LeftBarrier",
            description: "The barrier tilts around an axis located at the left end of the barrier"
          },
          {
            tag: "field",
            name: "LeftAndRightBarriers",
            description: "The dual barriers tilt around axes located at each side of the composite barrier"
          },
          {
            tag: "field",
            name: "RightBarrier",
            description: "The barrier tilts around an axis located at the right end of the barrier"
          }
        ]
      },
      {
        tag: "datatype",
        name: "OverflowEnum",
        xref: "cluster\xA75.5.6.3",
        children: [
          { tag: "field", name: "NoOverflow", description: "No overflow" },
          { tag: "field", name: "Inside", description: "Inside overflow" },
          { tag: "field", name: "Outside", description: "Outside overflow" },
          { tag: "field", name: "TopInside", description: "Top inside overflow" },
          { tag: "field", name: "TopOutside", description: "Top outside overflow" },
          { tag: "field", name: "BottomInside", description: "Bottom inside overflow" },
          { tag: "field", name: "BottomOutside", description: "Bottom outside overflow" },
          { tag: "field", name: "LeftInside", description: "Left inside overflow" },
          { tag: "field", name: "LeftOutside", description: "Left outside overflow" },
          { tag: "field", name: "RightInside", description: "Right inside overflow" },
          { tag: "field", name: "RightOutside", description: "Right outside overflow" }
        ]
      },
      {
        tag: "datatype",
        name: "ModulationTypeEnum",
        xref: "cluster\xA75.5.6.4",
        children: [
          { tag: "field", name: "SlatsOrientation", description: "Orientation of the slats" },
          { tag: "field", name: "SlatsOpenwork", description: "Aperture of the slats" },
          { tag: "field", name: "StripesAlignment", description: "Alignment of blind stripes (Zebra)" },
          { tag: "field", name: "Opacity", description: "Opacity of a surface" },
          { tag: "field", name: "Ventilation", description: "Ventilation control" }
        ]
      },
      {
        tag: "datatype",
        name: "ClosureUnitEnum",
        xref: "cluster\xA75.5.6.5",
        children: [
          { tag: "field", name: "Millimeter", description: "Millimeter used as unit" },
          { tag: "field", name: "Degree", description: "Degree used as unit" }
        ]
      },
      {
        tag: "datatype",
        name: "StepDirectionEnum",
        xref: "cluster\xA75.5.6.6",
        details: "This data type is derived from enum8 and used for the Step command to indicate the direction of the steps.",
        children: [
          { tag: "field", name: "Decrease", description: "Decrease towards 0.00%" },
          { tag: "field", name: "Increase", description: "Increase towards 100.00%" }
        ]
      },
      { tag: "datatype", name: "RangePercent100thsStruct", xref: "cluster\xA75.5.6.7" },
      { tag: "datatype", name: "UnitRangeStruct", xref: "cluster\xA75.5.6.8" },
      {
        tag: "datatype",
        name: "DimensionStateStruct",
        xref: "cluster\xA75.5.6.9",
        children: [
          {
            tag: "field",
            name: "Position",
            xref: "cluster\xA75.5.6.9.1",
            details: "This field shall indicate the position of the closure, expressed as a percentage from 0.00% to 100.00%.\nA null value indicates that the position is not known or is not set."
          },
          {
            tag: "field",
            name: "Latch",
            xref: "cluster\xA75.5.6.9.2",
            details: "This field shall indicate the latching state of the closure, as defined in the OverallCurrentStateStruct Latch Field.\nA null value indicates that the latch is not known or is not set."
          },
          {
            tag: "field",
            name: "Speed",
            xref: "cluster\xA75.5.6.9.3",
            details: "This field shall indicate the current speed of the closure, as defined in the ThreeLevelAutoEnum.\nIf no speed value has yet been set, the server shall select and set one of the speed values defined in the ThreeLevelAutoEnum."
          }
        ]
      },
      {
        tag: "datatype",
        name: "LatchControlModesBitmap",
        xref: "cluster\xA75.5.6.10",
        children: [
          {
            tag: "field",
            name: "RemoteLatching",
            description: "Remote latching capability",
            xref: "cluster\xA75.5.6.10.1",
            details: "This bit shall indicate whether the latch supports remote latching or not:\n  - 0 = the latch can only be latched through manual, physical operation.\n  - 1 = the latch can be latched via remote control (e.g., electronic or remote actuation)."
          },
          {
            tag: "field",
            name: "RemoteUnlatching",
            description: "Remote unlatching capability",
            xref: "cluster\xA75.5.6.10.2",
            details: "This bit shall indicate whether the latch supports remote unlatching or not:\n  - 0 = the latch can only be unlatched through manual, physical operation.\n  - 1 = the latch can be unlatched via remote control (e.g., electronic or remote actuation)."
          }
        ]
      }
    ]
  }
);
//# sourceMappingURL=closure-dimension.resource.js.map
