{
  "type": "object",
  "properties": {
    "element_ids": {
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {
        "type": "string",
        "minLength": 1
      },
      "description": "Ordered exact Elementor IDs from the current document or selection. Stagger follows this order."
    },
    "enabled": {
      "type": "boolean",
      "default": true
    },
    "preset": {
      "type": "string",
      "enum": [
        "fade-in",
        "fade-up",
        "fade-down",
        "fade-left",
        "fade-right",
        "zoom-in",
        "zoom-out"
      ]
    },
    "keyframes": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": {
        "type": "object",
        "properties": {
          "start": {
            "type": [
              "number",
              "string"
            ],
            "minLength": 1
          },
          "end": {
            "type": [
              "number",
              "string"
            ],
            "minLength": 1
          }
        },
        "required": [
          "start",
          "end"
        ],
        "additionalProperties": false
      },
      "description": "Motion property map such as {\"width\":{\"start\":\"300px\",\"end\":\"120px\"},\"x\":{\"start\":0,\"end\":100}}. Provide preset or keyframes, never both."
    },
    "settings": {
      "type": "object",
      "properties": {
        "triggerType": {
          "type": "string",
          "enum": [
            "onVisible",
            "onScroll"
          ]
        },
        "triggerOnce": {
          "type": "boolean"
        },
        "triggerStart": {
          "type": "string",
          "enum": [
            "start end",
            "start start",
            "start center",
            "center center",
            "end end",
            "end start",
            "end center"
          ]
        },
        "triggerEnd": {
          "type": "string",
          "enum": [
            "start end",
            "start start",
            "start center",
            "center center",
            "end end",
            "end start",
            "end center"
          ]
        },
        "triggerTarget": {
          "type": [
            "string",
            "null"
          ],
          "minLength": 1
        },
        "duration": {
          "type": "number",
          "minimum": 0
        },
        "delay": {
          "type": "number",
          "minimum": 0
        },
        "iterationCount": {
          "oneOf": [
            {
              "type": "integer",
              "minimum": 1
            },
            {
              "type": "string",
              "enum": [
                "infinite"
              ]
            }
          ]
        },
        "direction": {
          "type": "string",
          "enum": [
            "normal",
            "reverse",
            "alternate",
            "alternate-reverse"
          ]
        },
        "easing": {
          "type": "string",
          "pattern": "^(linear|easeInOut|easeIn|easeOut|spring|backInOut|backIn|backOut|circInOut|circIn|circOut|cubic-bezier\\(\\s*-?\\d*\\.?\\d+\\s*,\\s*-?\\d*\\.?\\d+\\s*,\\s*-?\\d*\\.?\\d+\\s*,\\s*-?\\d*\\.?\\d+\\s*\\))$"
        },
        "springMode": {
          "type": "string",
          "enum": [
            "time",
            "physics"
          ]
        },
        "springBounce": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "springStiffness": {
          "type": "number",
          "minimum": 0.01
        },
        "springDamping": {
          "type": "number",
          "minimum": 0.01
        },
        "springMass": {
          "type": "number",
          "minimum": 0.01
        },
        "disableOnTablet": {
          "type": "boolean"
        },
        "disableOnMobile": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "stagger": {
      "type": "number",
      "minimum": 0
    }
  },
  "required": [
    "element_ids"
  ],
  "additionalProperties": false
}
