{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Ticket Layout",
  "description": "Dynamic elements for a PDF layout",
  "type": "array",
  "items": {
    "type": "object",
    "description": "Layout object",
    "oneOf": [
      {
        "required": [
          "type",
          "left",
          "bottom",
          "size"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "barcodearea"
          },
          "page": {
            "description": "Page number this will be shown on, defaults to 1.",
            "type": "number"
          },
          "left": {
            "description": "Position of the element on the x axis in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "bottom": {
            "description": "Position of the element on the y axis in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "content": {
            "description": "Name of a variable to use. The available values depend on event configuration and installed plugins. Defaults to 'secret'.",
            "type": "string"
          },
          "text": {
            "description": "Custom text. Only used when 'content' is set to 'other'.",
            "type": "string"
          },
          "text_i18n": {
            "description": "Custom text in multiple languages. Only used when 'content' is set to 'other_i18n'.",
            "type": "object",
            "patternProperties": {
              "[a-zA-Z-]+": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "size": {
            "description": "Size of the barcode in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "nowhitespace": {
            "description": "Whether a barcode should be rendered without margins. Only used for type 'barcodearea'.",
            "type": "boolean"
          },
          "color": {
            "description": "QR color as a tuple of three integers in the 0-255 range and one float in the 0-1 range. The last value (alpha) is ignored by the current implementation but might be used in the future.",
            "type": "array",
            "items": {
              "type": "number",
              "minimum": 0,
              "maximum": 255
            },
            "minItems": 3,
            "maxItems": 4
          }
        },
        "additionalProperties": false
      },
      {
        "required": [
          "type",
          "left",
          "bottom",
          "content",
          "width",
          "height"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "imagearea"
          },
          "page": {
            "description": "Page number this will be shown on, defaults to 1.",
            "type": "number"
          },
          "left": {
            "description": "Position of the element on the x axis in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "bottom": {
            "description": "Position of the element on the y axis in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "content": {
            "description": "Name of a variable to use. The available values depend on event configuration and installed plugins.",
            "type": "string"
          },
          "width": {
            "description": "Width of the element in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "height": {
            "description": "Height of the element in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      {
        "required": [
          "type",
          "left",
          "bottom",
          "content",
          "width",
          "height",
          "fontsize",
          "fontfamily",
          "bold",
          "italic",
          "align",
          "verticalalign",
          "color"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "textcontainer"
          },
          "page": {
            "description": "Page number this will be shown on, defaults to 1.",
            "type": "number"
          },
          "left": {
            "description": "Position of the element on the x axis in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "bottom": {
            "description": "Position of the element on the y axis in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "width": {
            "description": "Width of the element in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "height": {
            "description": "Width of the element in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "content": {
            "description": "Name of a variable to use. The available values depend on event configuration and installed plugins.",
            "type": "string"
          },
          "text": {
            "description": "Custom text. Only used when 'content' is set to 'other'.",
            "type": "string"
          },
          "text_i18n": {
            "description": "Custom text in multiple languages. Only used when 'content' is set to 'other_i18n'.",
            "type": "object",
            "patternProperties": {
              "[a-zA-Z-]+": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "locale": {
            "description": "Locale to render the text in.",
            "type": ["string", "null"],
            "pattern": "[a-zA-Z-]*"
          },
          "fontsize": {
            "description": "Font size",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "lineheight": {
            "description": "Line height",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "fontfamily": {
            "description": "Font family. The available values depend on installed plugins.",
            "type": "string"
          },
          "bold": {
            "description": "Use bold font variant.",
            "type": "boolean"
          },
          "italic": {
            "description": "Use italic font variant.",
            "type": "boolean"
          },
          "autoresize": {
            "description": "Auto-resize font to fit box.",
            "type": "boolean"
          },
          "splitlongwords": {
            "description": "Indicator for the box fitting algorithm whether long words are allowed to be broken in parts.",
            "type": "boolean"
          },
          "align": {
            "description": "Horizontal text alignment.",
            "type": "string",
            "enum": [
              "left",
              "center",
              "right"
            ]
          },
          "verticalalign": {
            "description": "Vertical text alignment.",
            "type": "string",
            "enum": [
              "top",
              "middle",
              "bottom"
            ]
          },
          "color": {
            "description": "Text color as a tuple of three integers in the 0-255 range and one float in the 0-1 range. The last value (alpha) is ignored by the current implementation but might be used in the future.",
            "type": "array",
            "items": {
              "type": "number",
              "minimum": 0,
              "maximum": 255
            },
            "minItems": 3,
            "maxItems": 4
          },
          "rotation": {
            "description": "Rotation in degrees.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      {
        "required": [
          "type",
          "left",
          "bottom",
          "content",
          "width",
          "fontsize",
          "fontfamily",
          "bold",
          "italic",
          "align",
          "color"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "textarea"
          },
          "page": {
            "description": "Page number this will be shown on, defaults to 1.",
            "type": "number"
          },
          "left": {
            "description": "Position of the element on the x axis in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "bottom": {
            "description": "Position of the element on the y axis in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "width": {
            "description": "Width of the element in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "content": {
            "description": "Name of a variable to use. The available values depend on event configuration and installed plugins.",
            "type": "string"
          },
          "text": {
            "description": "Custom text. Only used when 'content' is set to 'other'.",
            "type": "string"
          },
          "text_i18n": {
            "description": "Custom text in multiple languages. Only used when 'content' is set to 'other_i18n'.",
            "type": "object",
            "patternProperties": {
              "[a-zA-Z-]+": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "locale": {
            "description": "Locale to render the text in.",
            "type": ["string", "null"],
            "pattern": "[a-zA-Z-]*"
          },
          "fontsize": {
            "description": "Font size",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "lineheight": {
            "description": "Line height",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "fontfamily": {
            "description": "Font family. The available values depend on installed plugins.",
            "type": "string"
          },
          "bold": {
            "description": "Use bold font variant.",
            "type": "boolean"
          },
          "italic": {
            "description": "Use italic font variant.",
            "type": "boolean"
          },
          "align": {
            "description": "Text alignment.",
            "type": "string",
            "enum": [
              "left",
              "center",
              "right"
            ]
          },
          "color": {
            "description": "Text color as a tuple of three integers in the 0-255 range and one float in the 0-1 range. The last value (alpha) is ignored by the current implementation but might be used in the future.",
            "type": "array",
            "items": {
              "type": "number",
              "minimum": 0,
              "maximum": 255
            },
            "minItems": 3,
            "maxItems": 4
          },
          "downward": {
            "description": "Downward rendering of text (recommended for new layouts), but default is false for backwards-compatibility.",
            "type": "boolean"
          },
          "rotation": {
            "description": "Rotation in degrees.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      {
        "required": [
          "type",
          "left",
          "bottom",
          "content",
          "size"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "poweredby"
          },
          "page": {
            "description": "Page number this will be shown on, defaults to 1.",
            "type": "number"
          },
          "left": {
            "description": "Position of the element on the x axis in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "bottom": {
            "description": "Position of the element on the y axis in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          },
          "content": {
            "description": "Name of a style to use. The available values currently are 'dark' and 'white'.",
            "type": "string",
            "enum": [
              "dark",
              "white"
            ]
          },
          "size": {
            "description": "Size of the logo in millimeters.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$"
              }
            ]
          }
        },
        "additionalProperties": false
      }
    ]
  }
}
