{
  "$schema" : "https://json-schema.org/draft/2019-09/schema",
  "$defs" : {
    "ActionButtonAlignment" : {
      "type" : "string",
      "enum" : [ "START", "CENTER", "END" ]
    },
    "ActionColumnComponent" : {
      "type" : "object",
      "properties" : {
        "cid" : {
          "type" : "string"
        },
        "type" : {
          "type" : "string",
          "enum" : [ "Button" ]
        },
        "config" : {
          "type" : "object"
        }
      },
      "additionalProperties" : false,
      "if" : {
        "properties" : {
          "type" : {
            "const" : "Button"
          }
        }
      },
      "then" : {
        "properties" : {
          "config" : {
            "$ref" : "#/$defs/Button"
          }
        }
      }
    },
    "Button" : {
      "type" : "object",
      "properties" : {
        "action" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "confirmCancelValue" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "confirmDialog" : {
          "type" : "boolean"
        },
        "confirmHeader" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "confirmMessage" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "confirmOkValue" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "confirmSeverity" : {
          "$ref" : "#/$defs/ConfirmDialogSeverity"
        },
        "disabled" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "icon" : {
          "type" : "string"
        },
        "id" : {
          "type" : "string"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "name" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "processOnlySelf" : {
          "type" : "boolean"
        },
        "rounded" : {
          "type" : "boolean"
        },
        "style" : {
          "$ref" : "#/$defs/ButtonStyle"
        },
        "type" : {
          "$ref" : "#/$defs/ButtonType"
        },
        "variant" : {
          "$ref" : "#/$defs/ButtonVariant"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "ButtonStyle" : {
      "type" : "string",
      "enum" : [ "SOLID", "OUTLINED", "FLAT" ]
    },
    "ButtonType" : {
      "type" : "string",
      "enum" : [ "SUBMIT", "BUTTON", "RESET", "EDIT", "DELETE" ]
    },
    "ButtonVariant" : {
      "type" : "string",
      "enum" : [ "PRIMARY", "SECONDARY", "DANGER", "SUCCESS", "INFO", "WARNING", "HELP" ]
    },
    "Checkbox" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "disabled" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "id" : {
          "type" : "string"
        },
        "label" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "selected" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "updateOnChange" : {
          "type" : "boolean"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "Combobox" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "completeMethod" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "disabled" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "id" : {
          "type" : "string"
        },
        "itemLabel" : {
          "type" : "string"
        },
        "itemValue" : {
          "type" : "string"
        },
        "label" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "required" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "requiredMessage" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "updateOnChange" : {
          "type" : "boolean"
        },
        "value" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "withDropdown" : {
          "type" : "boolean"
        }
      },
      "additionalProperties" : false
    },
    "Component" : {
      "type" : "object",
      "properties" : {
        "cid" : {
          "type" : "string"
        },
        "type" : {
          "type" : "string",
          "enum" : [ "Button", "Checkbox", "Combobox", "Composite", "DataTable", "DatePicker", "Dialog", "Fieldset", "Input", "Layout", "Link", "Panel", "Radio", "Select", "Text", "Textarea" ]
        },
        "config" : {
          "type" : "object"
        }
      },
      "additionalProperties" : false,
      "allOf" : [ {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Button"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Button"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Checkbox"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Checkbox"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Combobox"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Combobox"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Composite"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Composite"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "DataTable"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/DataTable"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "DatePicker"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/DatePicker"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Dialog"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Dialog"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Fieldset"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Fieldset"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Input"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Input"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Layout"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Layout"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Link"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Link"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Panel"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Panel"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Radio"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Radio"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Select"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Select"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Text"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Text"
            }
          }
        }
      }, {
        "if" : {
          "properties" : {
            "type" : {
              "const" : "Textarea"
            }
          }
        },
        "then" : {
          "properties" : {
            "config" : {
              "$ref" : "#/$defs/Textarea"
            }
          }
        }
      } ]
    },
    "Composite" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "id" : {
          "type" : "string"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "name" : {
          "type" : "string"
        },
        "parameters" : {
          "$ref" : "#/$defs/Map(String,String)"
        },
        "startMethod" : {
          "type" : "string"
        }
      },
      "additionalProperties" : false
    },
    "ConfirmDialogSeverity" : {
      "type" : "string",
      "enum" : [ "INFO", "WARN", "ERROR", "SUCCESS" ]
    },
    "DataTable" : {
      "type" : "object",
      "properties" : {
        "addButton" : {
          "type" : "boolean"
        },
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "components" : {
          "type" : "array",
          "items" : {
            "$ref" : "#/$defs/TableComponent"
          }
        },
        "editDialogId" : {
          "type" : "string"
        },
        "id" : {
          "type" : "string"
        },
        "isEditable" : {
          "type" : "boolean"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "maxRows" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "paginator" : {
          "type" : "boolean"
        },
        "value" : {
          "type" : "string"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "DataTableColumn" : {
      "type" : "object",
      "properties" : {
        "actionButtonAlignment" : {
          "$ref" : "#/$defs/ActionButtonAlignment"
        },
        "actionColumnAsMenu" : {
          "type" : "boolean"
        },
        "asActionColumn" : {
          "type" : "boolean"
        },
        "components" : {
          "type" : "array",
          "items" : {
            "$ref" : "#/$defs/ActionColumnComponent"
          }
        },
        "filterable" : {
          "type" : "boolean"
        },
        "header" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "sortable" : {
          "type" : "boolean"
        },
        "value" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "DatePicker" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "datePattern" : {
          "type" : "string"
        },
        "disabled" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "id" : {
          "type" : "string"
        },
        "label" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "required" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "requiredMessage" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "showTime" : {
          "type" : "boolean"
        },
        "timePattern" : {
          "type" : "string"
        },
        "updateOnChange" : {
          "type" : "boolean"
        },
        "value" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "Dialog" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "components" : {
          "type" : "array",
          "items" : {
            "$ref" : "#/$defs/Component"
          }
        },
        "header" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "id" : {
          "type" : "string"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "linkedComponent" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        }
      },
      "additionalProperties" : false
    },
    "Fieldset" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "collapsed" : {
          "type" : "boolean"
        },
        "collapsible" : {
          "type" : "boolean"
        },
        "components" : {
          "type" : "array",
          "items" : {
            "$ref" : "#/$defs/Component"
          }
        },
        "id" : {
          "type" : "string"
        },
        "legend" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "FormConfig" : {
      "type" : "object",
      "properties" : {
        "renderer" : {
          "type" : "string"
        },
        "theme" : {
          "type" : "string"
        },
        "type" : {
          "$ref" : "#/$defs/FormType"
        }
      },
      "additionalProperties" : false
    },
    "FormExpression" : {
      "type" : "string"
    },
    "FormType" : {
      "type" : "string",
      "enum" : [ "FORM", "COMPONENT" ]
    },
    "Input" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "decimalPlaces" : {
          "type" : "string"
        },
        "disabled" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "id" : {
          "type" : "string"
        },
        "label" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "required" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "requiredMessage" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "symbol" : {
          "type" : "string"
        },
        "symbolPosition" : {
          "$ref" : "#/$defs/SymbolPosition"
        },
        "type" : {
          "$ref" : "#/$defs/InputType"
        },
        "updateOnChange" : {
          "type" : "boolean"
        },
        "value" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "InputType" : {
      "type" : "string",
      "enum" : [ "TEXT", "EMAIL", "PASSWORD", "NUMBER" ]
    },
    "Layout" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "components" : {
          "type" : "array",
          "items" : {
            "$ref" : "#/$defs/Component"
          }
        },
        "gridVariant" : {
          "$ref" : "#/$defs/LayoutGridVariant"
        },
        "id" : {
          "type" : "string"
        },
        "justifyContent" : {
          "$ref" : "#/$defs/LayoutJustifyContent"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "type" : {
          "$ref" : "#/$defs/LayoutType"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "LayoutAlignItems" : {
      "type" : "string",
      "enum" : [ "START", "CENTER", "END" ]
    },
    "LayoutGridVariant" : {
      "type" : "string",
      "enum" : [ "GRID1", "GRID2", "GRID4", "FREE" ]
    },
    "LayoutJustifyContent" : {
      "type" : "string",
      "enum" : [ "NORMAL", "SPACE_BETWEEN", "END" ]
    },
    "LayoutType" : {
      "type" : "string",
      "enum" : [ "GRID", "FLEX" ]
    },
    "Link" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "href" : {
          "type" : "string"
        },
        "id" : {
          "type" : "string"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "name" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "Map(String,String)" : {
      "type" : "object",
      "additionalProperties" : {
        "type" : "string"
      }
    },
    "OrientationType" : {
      "type" : "string",
      "enum" : [ "horizontal", "vertical" ]
    },
    "Panel" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "collapsed" : {
          "type" : "boolean"
        },
        "collapsible" : {
          "type" : "boolean"
        },
        "components" : {
          "type" : "array",
          "items" : {
            "$ref" : "#/$defs/Component"
          }
        },
        "id" : {
          "type" : "string"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "title" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "Radio" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "disabled" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "dynamicItemsLabel" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "dynamicItemsList" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "dynamicItemsValue" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "id" : {
          "type" : "string"
        },
        "label" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "orientation" : {
          "$ref" : "#/$defs/OrientationType"
        },
        "required" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "requiredMessage" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "staticItems" : {
          "type" : "array",
          "items" : {
            "$ref" : "#/$defs/SelectItem"
          }
        },
        "updateOnChange" : {
          "type" : "boolean"
        },
        "value" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "Select" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "disabled" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "dynamicItemsLabel" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "dynamicItemsList" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "dynamicItemsValue" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "id" : {
          "type" : "string"
        },
        "label" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "required" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "requiredMessage" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "staticItems" : {
          "type" : "array",
          "items" : {
            "$ref" : "#/$defs/SelectItem"
          }
        },
        "updateOnChange" : {
          "type" : "boolean"
        },
        "value" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "SelectItem" : {
      "type" : "object",
      "properties" : {
        "label" : {
          "type" : "string"
        },
        "value" : {
          "type" : "string"
        }
      },
      "additionalProperties" : false
    },
    "SymbolPosition" : {
      "type" : "string",
      "enum" : [ "p", "s" ]
    },
    "TableComponent" : {
      "type" : "object",
      "properties" : {
        "cid" : {
          "type" : "string"
        },
        "type" : {
          "type" : "string",
          "enum" : [ "DataTableColumn" ]
        },
        "config" : {
          "type" : "object"
        }
      },
      "additionalProperties" : false,
      "if" : {
        "properties" : {
          "type" : {
            "const" : "DataTableColumn"
          }
        }
      },
      "then" : {
        "properties" : {
          "config" : {
            "$ref" : "#/$defs/DataTableColumn"
          }
        }
      }
    },
    "Text" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "content" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "icon" : {
          "type" : "string"
        },
        "iconStyle" : {
          "$ref" : "#/$defs/TextIconStyle"
        },
        "id" : {
          "type" : "string"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "type" : {
          "$ref" : "#/$defs/TextType"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    },
    "TextIconStyle" : {
      "type" : "string",
      "enum" : [ "INLINE", "BLOCK" ]
    },
    "TextType" : {
      "type" : "string",
      "enum" : [ "RAW", "MARKDOWN" ]
    },
    "Textarea" : {
      "type" : "object",
      "properties" : {
        "alignSelf" : {
          "$ref" : "#/$defs/LayoutAlignItems"
        },
        "autoResize" : {
          "type" : "boolean"
        },
        "disabled" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "id" : {
          "type" : "string"
        },
        "label" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "lgSpan" : {
          "type" : "string"
        },
        "mdSpan" : {
          "type" : "string"
        },
        "required" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "requiredMessage" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "rows" : {
          "type" : "string"
        },
        "updateOnChange" : {
          "type" : "boolean"
        },
        "value" : {
          "$ref" : "#/$defs/FormExpression"
        },
        "visible" : {
          "$ref" : "#/$defs/FormExpression"
        }
      },
      "additionalProperties" : false
    }
  },
  "type" : "object",
  "properties" : {
    "$schema" : {
      "type" : "string"
    },
    "id" : {
      "type" : "string",
      "format" : "uuid"
    },
    "config" : {
      "$ref" : "#/$defs/FormConfig"
    },
    "components" : {
      "type" : "array",
      "items" : {
        "$ref" : "#/$defs/Component"
      }
    }
  },
  "additionalProperties" : false
}
